diff --git a/examples/components/webgpu-tensorflow/.gitignore b/examples/components/webgpu-tensorflow/.gitignore new file mode 100644 index 00000000..282c3e64 --- /dev/null +++ b/examples/components/webgpu-tensorflow/.gitignore @@ -0,0 +1,9 @@ +node_modules +dist +build +keys +/**/generated/** +*.tgz +wit/deps/ +*.log +**/wit/deps/ diff --git a/examples/components/webgpu-tensorflow/.nvmrc b/examples/components/webgpu-tensorflow/.nvmrc new file mode 100644 index 00000000..dc0bb0f4 --- /dev/null +++ b/examples/components/webgpu-tensorflow/.nvmrc @@ -0,0 +1 @@ +v22.12.0 diff --git a/examples/components/webgpu-tensorflow/.wash/config.yaml b/examples/components/webgpu-tensorflow/.wash/config.yaml new file mode 100644 index 00000000..5332bb85 --- /dev/null +++ b/examples/components/webgpu-tensorflow/.wash/config.yaml @@ -0,0 +1,12 @@ +version: 2.1.0 + +new: + command: npm install + +build: + command: npm run build + component_path: component/dist/component.wasm + +dev: + wasi_webgpu: true + service_file: service/dist/service.wasm diff --git a/examples/components/webgpu-tensorflow/README.md b/examples/components/webgpu-tensorflow/README.md new file mode 100644 index 00000000..e0a6f9d0 --- /dev/null +++ b/examples/components/webgpu-tensorflow/README.md @@ -0,0 +1,169 @@ +# TypeScript WebGPU TensorFlow service + component + +A wasmCloud v2 service-and-component example written in [TypeScript][ts] that demonstrates **GPU-accelerated ML inside a wasmCloud workload** — running [TensorFlow.js][tfjs] with the [WebGPU backend][tfjs-webgpu] on top of [`wasi:webgpu`][wasi-webgpu]. + +The example has two parts: + +| Part | Type | What it does | +|---|---|---| +| `service/` | wasmCloud **service** workload | TensorFlow.js style-transfer engine. Loads the model into GPU memory once at startup and serves a binary TCP protocol on `127.0.0.1:7878`. | +| `component/` | wasmCloud **component** workload | HTTP front-end. Serves the browser UI at `/`, forwards `POST /stylize` to the service over loopback TCP, returns the stylized JPEG. | + +Model artifacts under `service/models/` are third-party files licensed under Apache-2.0. +See `service/models/ATTRIBUTION.md` for source and licensing details. + +## Architecture + +``` +HTTP client + │ POST /stylize {contentImage: dataUrl, styleImage: dataUrl} + ▼ +component (wasi:http/incoming-handler) + │ TCP connect 127.0.0.1:7878 + │ send: u32 contentLen | content JPEG | u32 styleLen | style JPEG + ▼ +service (wasi:cli/run, wasi:webgpu) + │ TF.js + WebGPU style transfer + │ send: u8 status | u32 payloadLen | stylized JPEG + ▼ +component + ▼ +HTTP client (image/jpeg) +``` + +Both workloads run in the same wasmCloud host and share an in-process loopback network. Services bind to `0.0.0.0` but the runtime rewrites that to `127.0.0.1` — services are never reachable from outside the host. + +## Prerequisites + +- [Wasm Shell (`wash`)](https://wasmcloud.com/docs/installation) **≥ 2.1.0** — WebGPU in services landed in 2.1.0. +- Node.js ≥ 20 and npm ≥ 10 +- A GPU on the host machine running `wash dev` + +## Quickstart + +```bash +# Install dependencies (also applies the componentize-js patch) +npm install + +# Build, deploy, and watch for changes +wash dev +``` + +`wash dev` reads `.wash/config.yaml` and starts the host with `wasi:webgpu` enabled, deploys both `service/dist/service.wasm` and `component/dist/component.wasm`, and watches `service/src` and `component/src` for rebuilds. + +Once it's up, open the UI: + +```text +http://localhost:8000/ +``` + +Pick a content image and a style image and click **Stylize**. + +## How it works + +The thing this example demonstrates is GPU-accelerated ML running as a long-lived wasmCloud workload. The component imports `wasi:http`; the service imports `wasi:webgpu` and exports `wasi:cli/run`. The runtime wires `wasi:webgpu` up to the real GPU on the host running `wash dev`. + +### Roles + +- **Service** ([service/](service/)) — exports `wasi:cli/run`. Started once by the host at deploy and runs continuously. Owns the GPU device, the loaded TF.js models, and the WGSL shader cache. Listens on TCP `127.0.0.1:7878` for stylize requests. +- **Component** ([component/](component/)) — exports `wasi:http/incoming-handler`. Stateless. Each HTTP request gets a fresh invocation. Serves the UI, validates the request body, opens a TCP connection to the service, forwards the JPEGs, returns the stylized result. +- **Loopback TCP between them** — both workloads run inside the same wasmCloud host and share an in-process network. The service binds to `0.0.0.0` but the runtime rewrites that to `127.0.0.1`, so the connection never leaves the host. + +### Warmup + +`Stylizer.initialize()` in [service/src/image-stylizer.ts](service/src/image-stylizer.ts) runs three things at service startup, all paid once: + +1. Loads model topology and weights from in-memory base64 data URLs (weights are bundled into `service.wasm` at build time). +2. Calls `tf.setBackend("webgpu")` and `tf.ready()` to spin up the WebGPU device. +3. Runs a dummy `predict()` against zero tensors at the model's expected input shapes. This forces TF.js to compile every WGSL shader and JIT-cache every kernel up front — without it, the *first real request* would pay that ~17s cost and likely time out. + +After warmup the service logs `[stylize-service] ready in ms`. Subsequent inferences run in the tens of milliseconds because the GPU context, compiled shaders, and model weights all stay resident in the long-lived service process. + +### The plumbing + +- **`wasi_webgpu: true`** in [`.wash/config.yaml`](.wash/config.yaml) tells `wash dev` to start the host with its `wasi:webgpu` runtime enabled. Without it, the service would fail to instantiate. +- **`service_file:`** in the same config tells the host to run `service/dist/service.wasm` as a service workload alongside the HTTP component. +- **[`@wasi-gfx/js-webgpu`](https://www.npmjs.com/package/@wasi-gfx/js-webgpu)** installs a `globalThis.navigator.gpu` shim that forwards browser-style WebGPU calls to the `wasi:webgpu` host import, so TensorFlow.js's WebGPU backend "just works". +- **Model weights are bundled** into `service.wasm` at build time as base64 data URLs. The service is fully self-contained at runtime — no filesystem or network fetch needed. +- **The model loads once.** Service workloads run continuously and hold state between connections, so the GPU context and the loaded TF model stay warm across requests. + +## Project structure + +``` +webgpu-tensorflow/ +├── .wash/config.yaml # wash project config (wasi_webgpu, service_file) +├── patches/ # patch-package fixes for componentize-js +├── package.json # npm workspace root +│ +├── service/ # TF/WebGPU style-transfer engine +│ ├── .wash/config.yaml # subpackage anchor for wash wit commands +│ ├── src/service.ts # wasi:cli/run TCP server +│ ├── src/image-stylizer.ts # TensorFlow.js + WebGPU model code +│ ├── models/ # bundled model weights (~52 MB) +│ ├── polyfill.js # Math.random shim, navigator.gpu placeholder +│ ├── wit/world.wit # imports wasi:webgpu + sockets, exports wasi:cli/run +│ └── wit/deps.toml # wit-deps config (webgpu WITs are not on OCI) +│ +└── component/ # HTTP front-end + ├── .wash/config.yaml # subpackage anchor for wash wit commands + ├── src/component.ts # Hono app + TCP client + static UI + ├── src/static/ # HTML, CSS, JS, sample JPEGs + └── wit/world.wit # imports sockets, exports wasi:http +``` + +## Build internals + +### npm workspaces + +The root `package.json` defines two npm workspaces (`service` and `component`). `npm run build` orchestrates both. + +### Patched componentize-js + +Building `wasi:sockets` components requires a fix to `@bytecodealliance/componentize-js`. The spidermonkey-embedding-splicer does not generate a JavaScript class for WIT resource types declared in method-less interfaces (such as `wasi:sockets/network`). Without the class, `instanceNetwork()` and socket operations throw a `ReferenceError` at runtime. + +The patch at `patches/@bytecodealliance+componentize-js+0.20.0.patch` injects the missing class definitions. It runs automatically via `patch-package` during `npm install`. + +Each subpackage's `scripts/componentize.js` calls `@bytecodealliance/componentize-js` directly (rather than via `jco componentize`) to ensure the patched top-level version is used. + +### `.wash/config.yaml` anchors + +The root `.wash/config.yaml` tells `wash dev` how to build, where to find the built component, and which file to load as a service. The `.wash/config.yaml` files in `service/` and `component/` anchor those directories as project roots for `wash wit` commands, which traverse up the directory tree to find their target. + +### Node polyfills (`unenv`) + +TensorFlow.js was written for the browser and Node, so it pulls in things like `node:util/types`, `node:buffer`, `node:process`, etc. SpiderMonkey-in-wasm has none of those. The service rollup config wires up [`unenv`](https://github.com/unjs/unenv) to provide stub implementations, plus a hand-written [service/node-util-types-polyfill.js](service/node-util-types-polyfill.js) for `node:util/types` (which `unenv` doesn't yet ship — see [unjs/unenv#540](https://github.com/unjs/unenv/pull/540)). Without these, the service won't even load. + +### TF.js / wasi:webgpu compatibility shim + +[service/src/image-stylizer.ts](service/src/image-stylizer.ts) wraps `GPUAdapter.prototype.requestDevice` to coerce `requiredFeatures` entries to strings before forwarding the call. TF.js currently passes feature names that aren't quite the strings `wasi:webgpu` expects ([tensorflow/tfjs#8639](https://github.com/tensorflow/tfjs/pull/8639)). Once the upstream PR lands, the override can go. + +## Known limitations + +A few rough edges to be aware of: + +- **`Math.random` is currently constant.** [service/polyfill.js](service/polyfill.js) overrides `globalThis.Math.random` to always return `0.5` as a temporary shim until `wizer` initializes `wasi:random` (support is coming soon upstream). Anything that depends on randomness will be deterministic in unexpected ways in the meantime. +- **The service uses `wit-deps` instead of `wash wit fetch`.** The component uses the standard `wash wit fetch` flow, but the service falls back to [`wit-deps`](https://github.com/bytecodealliance/wit-deps) because the WebGPU-related WITs aren't yet published to OCI. Once they are, the service should switch over too. +- **The resulting `service.wasm` is large.** TensorFlow.js, its WebGPU backend, the bundled WGSL shaders, the unenv Node polyfills, and ~52 MB of model weights all get statically linked, so the output is much larger than a typical wasm component — expect tens of MB rather than the usual hundreds of KB. + +## Customizing + +### Change the inference logic + +Edit [`service/src/image-stylizer.ts`](service/src/image-stylizer.ts). The `Stylizer` class loads two models and exposes `stylize()` — adjust either to swap the model, change preprocessing, or tune output quality. + +### Add HTTP routes + +Edit [`component/src/component.ts`](component/src/component.ts). Add routes to the Hono app using the standard Hono API. The `callStylizeService()` helper encapsulates the TCP client logic; extend it or add new helpers that connect to the service for additional inference endpoints. + +### Change the TCP port + +The port is `const PORT = 7878` in [`service/src/service.ts`](service/src/service.ts). Update `SERVICE_PORT` in [`component/src/component.ts`](component/src/component.ts) to match. + +## Adding Capabilities + +To learn how to extend this example with additional capabilities, see the [Adding Capabilities](https://wasmcloud.com/docs/tour/adding-capabilities?lang=typescript) section of the wasmCloud documentation. + +[ts]: https://www.typescriptlang.org/ +[tfjs]: https://www.tensorflow.org/js +[tfjs-webgpu]: https://www.npmjs.com/package/@tensorflow/tfjs-backend-webgpu +[wasi-webgpu]: https://github.com/WebAssembly/wasi-gfx diff --git a/examples/components/webgpu-tensorflow/component/.wash/config.yaml b/examples/components/webgpu-tensorflow/component/.wash/config.yaml new file mode 100644 index 00000000..b7f9c713 --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/.wash/config.yaml @@ -0,0 +1,6 @@ +# Subpackage anchor — tells wash to treat this directory as the project root +# when running WIT commands. Build this subpackage via the parent: +# npm run build --workspace=component +build: + command: npm run build + component_path: dist/component.wasm diff --git a/examples/components/webgpu-tensorflow/component/package.json b/examples/components/webgpu-tensorflow/component/package.json new file mode 100644 index 00000000..505cd86c --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/package.json @@ -0,0 +1,35 @@ +{ + "name": "webgpu-tensorflow-component", + "version": "0.1.0", + "description": "HTTP front-end component for the style-transfer service — serves the UI at / and forwards POST /stylize over loopback TCP", + "private": true, + "main": "dist/component.js", + "type": "module", + "scripts": { + "fetch:wit": "wash wit fetch", + "generate:types": "rimraf generated/types && jco guest-types wit/ -o generated/types", + "setup:wit": "npm run fetch:wit && npm run generate:types", + "build:ts": "rollup -c", + "build:component": "node scripts/componentize.js", + "build": "npm run setup:wit && npm run build:ts && npm run build:component" + }, + "keywords": [], + "author": "", + "license": "Apache-2.0", + "dependencies": { + "@bytecodealliance/jco-std": "^0.1.3", + "hono": "^4.12.14", + "zod": "^4.3.6" + }, + "devDependencies": { + "@bytecodealliance/jco": "^1.17.9", + "@rollup/plugin-commonjs": "^29.0.0", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-typescript": "^12.3.0", + "@rollup/plugin-url": "^8.0.2", + "rimraf": "^6.1.2", + "rollup": "^4.57.1", + "typescript": "^5.9.3" + } +} diff --git a/examples/components/webgpu-tensorflow/component/rollup.config.js b/examples/components/webgpu-tensorflow/component/rollup.config.js new file mode 100644 index 00000000..50143e32 --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/rollup.config.js @@ -0,0 +1,29 @@ +import nodeResolve from "@rollup/plugin-node-resolve"; +import commonjs from "@rollup/plugin-commonjs"; +import json from "@rollup/plugin-json"; +import url from "@rollup/plugin-url"; +import typescript from "@rollup/plugin-typescript"; + +const MEGABYTE = 1024 * 1024; + +export default { + input: "src/component.ts", + external: /wasi:.*/, + output: { + file: "dist/component.js", + format: "esm", + inlineDynamicImports: true, + }, + plugins: [ + url({ + // Inline the static UI assets as base64 data URLs + include: ["./src/static/**"], + exclude: ["./src/static/static.ts"], + limit: MEGABYTE * 10, + }), + typescript(), + json(), + nodeResolve(), + commonjs({ transformMixedEsModules: true }), + ], +}; diff --git a/examples/components/webgpu-tensorflow/component/scripts/componentize.js b/examples/components/webgpu-tensorflow/component/scripts/componentize.js new file mode 100644 index 00000000..59cab6e6 --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/scripts/componentize.js @@ -0,0 +1,33 @@ +/** + * Build script: componentizes dist/component.js → dist/component.wasm. + * + * `jco componentize` can't be used. This world imports wasi:io@0.2.0 (pulled + * in by wasi-gfx) and other WASI packages older than 0.2.10. jco detects + * that and silently falls back to a bundled, aliased copy of componentize-js + * @0.19.3 at node_modules/@bytecodealliance/componentize-js-0-19-3/, which + * patch-package never touches. + * + * Calling componentize() directly forces the patched top-level + * @bytecodealliance/componentize-js. The patch fixes a splicer bug where + * WIT resource types in interfaces with no callable functions (e.g. + * wasi:sockets/network) get no JS class generated, causing ReferenceError + * at runtime. + */ + +import { componentize } from '@bytecodealliance/componentize-js'; +import { writeFile } from 'fs/promises'; +import { resolve, join, dirname } from 'path'; +import { fileURLToPath } from 'url'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const root = resolve(__dirname, '..'); + +const result = await componentize({ + sourcePath: join(root, 'dist', 'component.js'), + witPath: join(root, 'wit'), + worldName: 'component', +}); + +const outPath = join(root, 'dist', 'component.wasm'); +await writeFile(outPath, result.component); +console.log(`OK Successfully written ${outPath}.`); diff --git a/examples/components/webgpu-tensorflow/component/src/component.ts b/examples/components/webgpu-tensorflow/component/src/component.ts new file mode 100644 index 00000000..408de698 --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/src/component.ts @@ -0,0 +1,188 @@ +/** + * HTTP front-end for the style-transfer service. + * + * GET /* — static UI assets (HTML, CSS, JS, sample JPEGs) + * POST /stylize — accepts JSON with two data-URL JPEGs, forwards them to + * the service over loopback TCP, returns the stylized JPEG + * + * The style-transfer service runs as a wasmCloud service workload on the same + * host. It listens on 127.0.0.1:7878. Both this component and the service + * share the same in-process loopback network. + * + * Wire protocol (binary, big-endian, one request per connection): + * + * Request: u32 contentLen | content JPEG | u32 styleLen | style JPEG + * Response: u8 status (0=ok, 1=err) | u32 payloadLen | payload + */ + +import { instanceNetwork } from 'wasi:sockets/instance-network@0.2.3'; +import { createTcpSocket } from 'wasi:sockets/tcp-create-socket@0.2.3'; +import type { InputStream, OutputStream } from 'wasi:io/streams@0.2.3'; +import type { Ipv4Address } from 'wasi:sockets/network@0.2.3'; + +import { Hono } from 'hono'; +import { + fire, + incomingHandler, +} from '@bytecodealliance/jco-std/wasi/0.2.3/http/adapters/hono/server'; +import zod from 'zod'; + +import assets from './static/static'; + +// --------------------------------------------------------------------------- +// Constants +// --------------------------------------------------------------------------- + +const SERVICE_HOST: Ipv4Address = [127, 0, 0, 1]; +const SERVICE_PORT = 7878; + +// wasi:io/streams.blocking-write-and-flush is capped at 4096 bytes per call, +// so JPEG payloads have to be sent as chunks. +const WRITE_CHUNK = 4096; + +// --------------------------------------------------------------------------- +// Stream helpers +// --------------------------------------------------------------------------- + +function writeAll(stream: OutputStream, bytes: Uint8Array): void { + for (let off = 0; off < bytes.length; off += WRITE_CHUNK) { + stream.blockingWriteAndFlush(bytes.subarray(off, Math.min(off + WRITE_CHUNK, bytes.length))); + } +} + +function readExact(stream: InputStream, len: number): Uint8Array { + const out = new Uint8Array(len); + let filled = 0; + while (filled < len) { + const chunk = stream.blockingRead(BigInt(len - filled)); + if (chunk.length === 0) throw new Error(`unexpected EOF after ${filled}/${len} bytes`); + out.set(chunk, filled); + filled += chunk.length; + } + return out; +} + +function readU32BE(stream: InputStream): number { + const b = readExact(stream, 4); + return ((b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3]) >>> 0; +} + +function u32BE(value: number): Uint8Array { + return new Uint8Array([ + (value >>> 24) & 0xff, + (value >>> 16) & 0xff, + (value >>> 8) & 0xff, + value & 0xff, + ]); +} + +// --------------------------------------------------------------------------- +// TCP client: send JPEGs to the service, read back the stylized JPEG +// --------------------------------------------------------------------------- + +function callStylizeService(contentJpeg: Uint8Array, styleJpeg: Uint8Array): Uint8Array { + const network = instanceNetwork(); + const socket = createTcpSocket('ipv4'); + + socket.startConnect(network, { + tag: 'ipv4', + val: { port: SERVICE_PORT, address: SERVICE_HOST }, + }); + socket.subscribe().block(); + const [inputStream, outputStream] = socket.finishConnect(); + + writeAll(outputStream, u32BE(contentJpeg.length)); + writeAll(outputStream, contentJpeg); + writeAll(outputStream, u32BE(styleJpeg.length)); + writeAll(outputStream, styleJpeg); + + const status = readExact(inputStream, 1)[0]; + const payloadLen = readU32BE(inputStream); + const payload = readExact(inputStream, payloadLen); + + if (status !== 0) { + throw new Error(new TextDecoder().decode(payload)); + } + return payload; +} + +// --------------------------------------------------------------------------- +// Data-URL helpers +// --------------------------------------------------------------------------- + +function dataUrlToBytes(dataUrl: string): Uint8Array { + if (!dataUrl.startsWith('data:')) throw new Error('Invalid data URL'); + const comma = dataUrl.indexOf(','); + if (comma === -1) throw new Error('Invalid data URL'); + const header = dataUrl.slice(0, comma); + const body = dataUrl.slice(comma + 1); + if (!header.includes('base64')) throw new Error('Only base64 data URLs are supported'); + + const binary = atob(body); + const bytes = new Uint8Array(binary.length); + for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i); + return bytes; +} + +function dataUrlToBlob(dataUrl: string): Blob { + if (!dataUrl.startsWith('data:')) throw new Error('Invalid data URL'); + const comma = dataUrl.indexOf(','); + const header = dataUrl.slice(0, comma); + const mime = (header.match(/^data:([^;]+)/)?.[1] ?? 'application/octet-stream').trim(); + return new Blob([dataUrlToBytes(dataUrl) as BlobPart], { type: mime }); +} + +// --------------------------------------------------------------------------- +// Hono app +// --------------------------------------------------------------------------- + +const Image = zod.object({ + dataUrl: zod.string(), + height: zod.number(), + width: zod.number(), +}); + +const StylizeRequest = zod.object({ + contentImage: Image, + styleImage: Image, +}); + +const app = new Hono(); + +app.post('/stylize', async (c) => { + const body = StylizeRequest.parse(await c.req.json()); + + const contentJpeg = dataUrlToBytes(body.contentImage.dataUrl); + const styleJpeg = dataUrlToBytes(body.styleImage.dataUrl); + + const start = performance.now(); + let stylized: Uint8Array; + try { + stylized = callStylizeService(contentJpeg, styleJpeg); + } catch (err) { + const msg = err instanceof Error ? err.message : String(err); + console.error('[component] service call failed:', msg); + return c.json({ error: `Service error: ${msg}` }, 502); + } + console.log(`[component] stylize roundtrip: ${((performance.now() - start) / 1000).toFixed(2)}s`); + + return c.body(new Uint8Array(stylized).buffer, 200, { + 'Content-Type': 'image/jpeg', + }); +}); + +app.get('*', async (c) => { + const path = c.req.path; + if (path in assets) { + const blob = dataUrlToBlob(assets[path]); + return c.body(await blob.arrayBuffer(), 200, { 'Content-Type': blob.type }); + } + return c.notFound(); +}); + +// --------------------------------------------------------------------------- +// wasi:http/incoming-handler export +// --------------------------------------------------------------------------- + +fire(app); +export { incomingHandler }; diff --git a/examples/components/webgpu-tensorflow/component/src/static/images/ATTRIBUTION.md b/examples/components/webgpu-tensorflow/component/src/static/images/ATTRIBUTION.md new file mode 100644 index 00000000..3a17ee25 --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/src/static/images/ATTRIBUTION.md @@ -0,0 +1,37 @@ +# Image Attribution + +All images in this directory are licensed under [Creative Commons +Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)](LICENSE) unless +specified otherwise. + +## Content images + +### `content/lincoln-memorial-illuminated.jpg` + +- Source: +- Author: Mojnsen +- Year: 2023 +- License: CC BY-SA 4.0 + +### `content/statue-of-liberty.jpg` + +- Source: +- Author: Dietmar Rabich +- Year: 2012 +- License: CC BY-SA 4.0 + +## Style images + +### `style/cartoon.jpg` + +- Source: +- Author: Hiwrd +- Year: 2020 +- License: CC BY-SA 4.0 + +### `style/pen-and-ink.jpg` (exception — public domain) + +- Source: +- Author: Attributed to Jacobus Vrel (?), influenced by Willem van de Velde I +- Year: c. 1654–1662 +- License: Public Domain (Creative Commons Public Domain Mark 1.0) diff --git a/examples/components/webgpu-tensorflow/component/src/static/images/LICENSE b/examples/components/webgpu-tensorflow/component/src/static/images/LICENSE new file mode 100644 index 00000000..2d58298e --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/src/static/images/LICENSE @@ -0,0 +1,428 @@ +Attribution-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-ShareAlike 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + including for purposes of Section 3(b); and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/examples/components/webgpu-tensorflow/component/src/static/images/content/lincoln-memorial-illuminated.jpg b/examples/components/webgpu-tensorflow/component/src/static/images/content/lincoln-memorial-illuminated.jpg new file mode 100644 index 00000000..edf85736 Binary files /dev/null and b/examples/components/webgpu-tensorflow/component/src/static/images/content/lincoln-memorial-illuminated.jpg differ diff --git a/examples/components/webgpu-tensorflow/component/src/static/images/content/statue-of-liberty.jpg b/examples/components/webgpu-tensorflow/component/src/static/images/content/statue-of-liberty.jpg new file mode 100644 index 00000000..c16477f0 Binary files /dev/null and b/examples/components/webgpu-tensorflow/component/src/static/images/content/statue-of-liberty.jpg differ diff --git a/examples/components/webgpu-tensorflow/component/src/static/images/style/cartoon.jpg b/examples/components/webgpu-tensorflow/component/src/static/images/style/cartoon.jpg new file mode 100644 index 00000000..834b024c Binary files /dev/null and b/examples/components/webgpu-tensorflow/component/src/static/images/style/cartoon.jpg differ diff --git a/examples/components/webgpu-tensorflow/component/src/static/images/style/pen-and-ink.jpg b/examples/components/webgpu-tensorflow/component/src/static/images/style/pen-and-ink.jpg new file mode 100644 index 00000000..c12a938b Binary files /dev/null and b/examples/components/webgpu-tensorflow/component/src/static/images/style/pen-and-ink.jpg differ diff --git a/examples/components/webgpu-tensorflow/component/src/static/index.html b/examples/components/webgpu-tensorflow/component/src/static/index.html new file mode 100644 index 00000000..89af2151 --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/src/static/index.html @@ -0,0 +1,69 @@ + + + + + + Stylize Image + + + +
+ + +
+
+
+

Input Images

+

The photo you want to restyle.

+
+ +
+ +
+
+

Style Images

+

Whose style to apply.

+
+ +
+
+ + + +
+
+

Result

+
+
+ Stylized output +
Stylized image will appear here.
+
+
+ Stylizing… +
+
+
+ + + +
+
+ Built with wasmCloud, + a CNCF Incubating project +
+ + + diff --git a/examples/components/webgpu-tensorflow/component/src/static/script.js b/examples/components/webgpu-tensorflow/component/src/static/script.js new file mode 100644 index 00000000..8f94d94a --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/src/static/script.js @@ -0,0 +1,240 @@ +const DEFAULT_CONTENT_IMAGES = [ + { src: '/images/content/statue-of-liberty.jpg', label: 'Statue of Liberty' }, + { src: '/images/content/lincoln-memorial-illuminated.jpg', label: 'Lincoln Memorial' }, +]; +const DEFAULT_STYLE_IMAGES = [ + { src: '/images/style/cartoon.jpg', label: 'Cartoon' }, + { src: '/images/style/pen-and-ink.jpg', label: 'Pen and Ink' }, +]; + +function labelFromFilename(filename) { + const dot = filename.lastIndexOf('.'); + return dot > 0 ? filename.slice(0, dot) : filename; +} + +const stylizeForm = document.getElementById("stylizeForm"); +const contentGallery = document.getElementById("contentGallery"); +const styleGallery = document.getElementById("styleGallery"); +const contentImageInput = document.getElementById("contentImageInput"); +const styleImageInput = document.getElementById("styleImageInput"); +const stylizeButton = document.getElementById("stylizeButton"); +const stylizedImage = document.getElementById("stylizedImage"); +const outputCard = document.getElementById("outputCard"); + +const galleries = { + content: { + items: DEFAULT_CONTENT_IMAGES.map((img) => ({ ...img })), + selectedIndex: DEFAULT_CONTENT_IMAGES.length ? 0 : -1, + element: contentGallery, + input: contentImageInput, + }, + style: { + items: DEFAULT_STYLE_IMAGES.map((img) => ({ ...img })), + selectedIndex: DEFAULT_STYLE_IMAGES.length ? 0 : -1, + element: styleGallery, + input: styleImageInput, + }, +}; + +function render() { + for (const [kind, gallery] of Object.entries(galleries)) { + gallery.element.innerHTML = ""; + + gallery.items.forEach((image, index) => { + const card = document.createElement("button"); + card.type = "button"; + card.className = "image-card"; + if (index === gallery.selectedIndex) card.classList.add("selected"); + + const labelText = image.label || image.name || `${kind} ${index + 1}`; + + const label = document.createElement("span"); + label.className = "image-card-label"; + label.textContent = labelText; + label.title = labelText; + card.appendChild(label); + + const frame = document.createElement("span"); + frame.className = "image-card-frame"; + + const img = document.createElement("img"); + img.src = image.src; + img.alt = labelText; + frame.appendChild(img); + + if (image.removable) { + const remove = document.createElement("button"); + remove.type = "button"; + remove.className = "image-card-remove"; + remove.setAttribute("aria-label", "Remove image"); + remove.textContent = "×"; + remove.addEventListener("click", (event) => { + event.stopPropagation(); + removeImage(kind, index); + }); + frame.appendChild(remove); + } + + card.appendChild(frame); + + card.addEventListener("click", () => selectImage(kind, index)); + gallery.element.appendChild(card); + }); + + const addButton = document.createElement("button"); + addButton.type = "button"; + addButton.className = "add-button"; + addButton.innerHTML = '+Add Image'; + addButton.addEventListener("click", () => gallery.input.click()); + gallery.element.appendChild(addButton); + } + + updateStylizeEnabled(); +} + +function selectImage(kind, index) { + galleries[kind].selectedIndex = index; + render(); +} + +function removeImage(kind, index) { + const gallery = galleries[kind]; + const removed = gallery.items.splice(index, 1)[0]; + if (removed && removed.objectUrl) URL.revokeObjectURL(removed.objectUrl); + + if (gallery.selectedIndex === index) { + gallery.selectedIndex = gallery.items.length ? 0 : -1; + } else if (gallery.selectedIndex > index) { + gallery.selectedIndex -= 1; + } + render(); +} + +function updateStylizeEnabled() { + const ready = galleries.content.selectedIndex >= 0 && galleries.style.selectedIndex >= 0; + stylizeButton.disabled = !ready; +} + +contentImageInput.addEventListener("change", (event) => handleUpload(event, "content")); +styleImageInput.addEventListener("change", (event) => handleUpload(event, "style")); + +function handleUpload(event, kind) { + const file = event.target.files[0]; + event.target.value = null; + if (!file) return; + + const objectUrl = URL.createObjectURL(file); + const gallery = galleries[kind]; + gallery.items.push({ + src: objectUrl, + objectUrl, + file, + name: file.name, + label: labelFromFilename(file.name), + removable: true, + }); + gallery.selectedIndex = gallery.items.length - 1; + render(); +} + +stylizeForm.addEventListener("submit", (event) => { + event.preventDefault(); + if (stylizeButton.disabled) return; + stylize(); +}); + +async function stylize() { + outputCard.dataset.state = "loading"; + stylizedImage.removeAttribute("src"); + stylizeButton.disabled = true; + + try { + const contentImage = await imageToPayload(currentImage("content"), "content"); + const styleImage = await imageToPayload(currentImage("style"), "style"); + + const response = await fetch("/stylize", { + method: "POST", + body: JSON.stringify({ contentImage, styleImage }), + }); + + if (!response.ok) { + throw new Error(`Stylize failed: ${response.status}`); + } + + const buffer = await response.arrayBuffer(); + const blob = new Blob([buffer], { type: "image/jpeg" }); + stylizedImage.src = URL.createObjectURL(blob); + outputCard.dataset.state = "ready"; + } catch (error) { + console.error(error); + outputCard.dataset.state = "empty"; + } finally { + updateStylizeEnabled(); + } +} + +function currentImage(kind) { + const gallery = galleries[kind]; + return gallery.items[gallery.selectedIndex]; +} + +// Match the server: content is capped at max-side 256, style is forced 256×256. +const CONTENT_MAX_SIDE = 256; +const STYLE_TARGET_SIZE = 256; +const JPEG_QUALITY = 0.9; + +async function imageToPayload(image, kind) { + const blob = image.file ? image.file : await fetchAsBlob(image.src); + return resizeBlobToPayload(blob, kind); +} + +async function resizeBlobToPayload(blob, kind) { + const bitmap = await createImageBitmap(blob); + const [width, height] = kind === "style" + ? [STYLE_TARGET_SIZE, STYLE_TARGET_SIZE] + : contentTargetSize(bitmap.width, bitmap.height); + + const canvas = document.createElement("canvas"); + canvas.width = width; + canvas.height = height; + const ctx = canvas.getContext("2d"); + ctx.drawImage(bitmap, 0, 0, width, height); + bitmap.close?.(); + + const resizedBlob = await new Promise((resolve, reject) => { + canvas.toBlob( + (b) => b ? resolve(b) : reject(new Error("canvas.toBlob failed")), + "image/jpeg", + JPEG_QUALITY, + ); + }); + const dataUrl = await blobToDataUrl(resizedBlob); + return { dataUrl, width, height }; +} + +function contentTargetSize(width, height) { + if (width <= CONTENT_MAX_SIDE && height <= CONTENT_MAX_SIDE) { + return [width, height]; + } + if (height >= width) { + return [Math.max(1, Math.round(width * CONTENT_MAX_SIDE / height)), CONTENT_MAX_SIDE]; + } + return [CONTENT_MAX_SIDE, Math.max(1, Math.round(height * CONTENT_MAX_SIDE / width))]; +} + +async function fetchAsBlob(src) { + const response = await fetch(src); + if (!response.ok) throw new Error(`Failed to fetch ${src}: ${response.status}`); + return response.blob(); +} + +function blobToDataUrl(blob) { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = () => resolve(reader.result); + reader.onerror = () => reject(reader.error || new Error("Failed to read file")); + reader.readAsDataURL(blob); + }); +} + +render(); diff --git a/examples/components/webgpu-tensorflow/component/src/static/static.ts b/examples/components/webgpu-tensorflow/component/src/static/static.ts new file mode 100644 index 00000000..acbfb000 --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/src/static/static.ts @@ -0,0 +1,17 @@ +import index_html from "./index.html"; +import styles_css from "./styles.css"; +import script_js from "./script.js"; +import content_statue_of_liberty_jpg from "./images/content/statue-of-liberty.jpg"; +import content_lincoln_memorial_illuminated_jpg from "./images/content/lincoln-memorial-illuminated.jpg"; +import style_cartoon_jpg from "./images/style/cartoon.jpg"; +import style_pen_and_ink_jpg from "./images/style/pen-and-ink.jpg"; + +export default { + "/": index_html, + "/styles.css": styles_css, + "/script.js": script_js, + "/images/content/statue-of-liberty.jpg": content_statue_of_liberty_jpg, + "/images/content/lincoln-memorial-illuminated.jpg": content_lincoln_memorial_illuminated_jpg, + "/images/style/cartoon.jpg": style_cartoon_jpg, + "/images/style/pen-and-ink.jpg": style_pen_and_ink_jpg, +} as Record; diff --git a/examples/components/webgpu-tensorflow/component/src/static/styles.css b/examples/components/webgpu-tensorflow/component/src/static/styles.css new file mode 100644 index 00000000..13644f08 --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/src/static/styles.css @@ -0,0 +1,341 @@ +:root { + color-scheme: light dark; + --bg: #f5f6f8; + --panel-bg: #ffffff; + --border: #e2e5ea; + --border-strong: #cdd2db; + --text: #1a1d22; + --text-muted: #5b6472; + --accent: #4f46e5; + --accent-soft: #eceafd; + --shadow: 0 1px 2px rgba(20, 24, 36, 0.04), 0 4px 16px rgba(20, 24, 36, 0.06); + --radius: 14px; + --radius-sm: 10px; +} + +@media (prefers-color-scheme: dark) { + :root { + --bg: #0f1115; + --panel-bg: #181b22; + --border: #262a33; + --border-strong: #353a47; + --text: #f1f3f7; + --text-muted: #8b94a3; + --accent: #818cf8; + --accent-soft: #2a2750; + --shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 8px 24px rgba(0, 0, 0, 0.35); + } +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + padding: 32px 20px 64px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + background: var(--bg); + color: var(--text); + line-height: 1.5; +} + +#stylizeForm { + max-width: 1080px; + margin: 0 auto; + display: flex; + flex-direction: column; + gap: 24px; +} + +.page-header { + text-align: center; +} + +.page-header h1 { + margin: 0 0 4px; + font-size: 28px; + letter-spacing: -0.01em; +} + +.page-header p { + margin: 0; + color: var(--text-muted); +} + +.powered-by { + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + margin-top: 12px; + color: var(--text-muted); + font-size: 13px; +} + +.wasmcloud-logo { + height: 22px; + width: auto; + vertical-align: middle; +} + +.page-footer { + max-width: 1080px; + margin: 32px auto 0; + padding-top: 20px; + border-top: 1px solid var(--border); + text-align: center; + color: var(--text-muted); + font-size: 13px; +} + +.page-footer a { + color: var(--accent); + text-decoration: none; + font-weight: 600; +} + +.page-footer a:hover { + text-decoration: underline; +} + +.panels { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 20px; +} + +@media (max-width: 720px) { + .panels { + grid-template-columns: 1fr; + } +} + +.panel { + background: var(--panel-bg); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 20px; + box-shadow: var(--shadow); +} + +.panel-header { + margin-bottom: 16px; +} + +.panel-header h2 { + margin: 0 0 2px; + font-size: 16px; + letter-spacing: -0.005em; +} + +.panel-header p { + margin: 0; + color: var(--text-muted); + font-size: 13px; +} + +.gallery { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); + gap: 10px; + align-items: end; +} + +.image-card { + display: flex; + flex-direction: column; + gap: 6px; + padding: 0; + background: transparent; + border: none; + cursor: pointer; + font: inherit; + color: inherit; + text-align: center; +} + +.image-card-label { + font-size: 12px; + line-height: 1.3; + color: var(--text-muted); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 100%; +} + +.image-card.selected .image-card-label { + color: var(--text); + font-weight: 600; +} + +.image-card-frame { + position: relative; + display: block; + aspect-ratio: 1 / 1; + background: var(--bg); + border: 2px solid var(--border); + border-radius: var(--radius-sm); + overflow: hidden; + transition: border-color 120ms ease, transform 120ms ease, box-shadow 120ms ease; +} + +.image-card:hover .image-card-frame { + border-color: var(--border-strong); + transform: translateY(-1px); +} + +.image-card.selected .image-card-frame { + border-color: var(--accent); + box-shadow: 0 0 0 3px var(--accent-soft); +} + +.image-card-frame img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} + +.image-card-remove { + position: absolute; + top: 6px; + right: 6px; + width: 22px; + height: 22px; + border-radius: 50%; + border: none; + background: rgba(0, 0, 0, 0.55); + color: #fff; + font-size: 14px; + line-height: 1; + cursor: pointer; + display: none; + align-items: center; + justify-content: center; + padding: 0; +} + +.image-card:hover .image-card-remove, +.image-card.selected .image-card-remove { + display: flex; +} + +.image-card-remove:hover { + background: rgba(0, 0, 0, 0.8); +} + +.add-button { + aspect-ratio: 1 / 1; + border: 2px dashed var(--border-strong); + border-radius: var(--radius-sm); + background: transparent; + color: var(--text-muted); + cursor: pointer; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 4px; + font: inherit; + font-size: 13px; + transition: border-color 120ms ease, color 120ms ease, background 120ms ease; +} + +.add-button:hover { + border-color: var(--accent); + color: var(--accent); + background: var(--accent-soft); +} + +.add-button { + font-size: 12px; +} + +.add-button .plus { + font-size: 20px; + line-height: 1; +} + +.stylize-button { + align-self: center; + min-width: 160px; + padding: 9px 20px; + font: inherit; + font-size: 13px; + font-weight: 600; + color: #fff; + background: var(--accent); + border: none; + border-radius: 999px; + cursor: pointer; + transition: opacity 120ms ease, transform 120ms ease; +} + +.stylize-button:hover:not(:disabled) { + transform: translateY(-1px); +} + +.stylize-button:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.output-panel .output-frame { + position: relative; + width: 100%; + max-width: 256px; + margin: 0 auto; + aspect-ratio: 1 / 1; + background: var(--bg); + border: 1px solid var(--border); + border-radius: var(--radius-sm); + overflow: hidden; + display: flex; + align-items: center; + justify-content: center; +} + +.output-frame img { + max-width: 100%; + max-height: 100%; + object-fit: contain; + display: none; +} + +.output-frame .output-empty, +.output-frame .output-loading { + color: var(--text-muted); + font-size: 14px; + display: none; + align-items: center; + gap: 10px; +} + +.output-panel[data-state="ready"] .output-frame img { + display: block; +} + +.output-panel[data-state="empty"] .output-empty { + display: flex; +} + +.output-panel[data-state="loading"] .output-loading { + display: flex; +} + +.spinner { + width: 18px; + height: 18px; + border: 2px solid var(--border-strong); + border-top-color: var(--accent); + border-radius: 50%; + animation: spin 0.8s linear infinite; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} diff --git a/examples/components/webgpu-tensorflow/component/src/types.d.ts b/examples/components/webgpu-tensorflow/component/src/types.d.ts new file mode 100644 index 00000000..19d6f193 --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/src/types.d.ts @@ -0,0 +1,19 @@ +declare module "*.html" { + const content: string; + export default content; +} + +declare module "*.css" { + const content: string; + export default content; +} + +declare module "*.js" { + const content: string; + export default content; +} + +declare module "*.jpg" { + const content: string; + export default content; +} diff --git a/examples/components/webgpu-tensorflow/component/tsconfig.json b/examples/components/webgpu-tensorflow/component/tsconfig.json new file mode 100644 index 00000000..29b76e3a --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "es2022", + "module": "es2022", + "moduleResolution": "bundler", + "rootDir": "./", + "outDir": "./dist/", + "esModuleInterop": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true + } +} diff --git a/examples/components/webgpu-tensorflow/component/wit/world.wit b/examples/components/webgpu-tensorflow/component/wit/world.wit new file mode 100644 index 00000000..4da42869 --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/wit/world.wit @@ -0,0 +1,11 @@ +package wasmcloud:webgpu-tensorflow@0.1.0; + +world component { + // Loopback TCP client to reach the style-transfer service on 127.0.0.1:7878 + import wasi:sockets/instance-network@0.2.3; + import wasi:sockets/tcp@0.2.3; + import wasi:sockets/tcp-create-socket@0.2.3; + import wasi:io/poll@0.2.0; + + export wasi:http/incoming-handler@0.2.3; +} diff --git a/examples/components/webgpu-tensorflow/component/wkg.lock b/examples/components/webgpu-tensorflow/component/wkg.lock new file mode 100644 index 00000000..fb074b3a --- /dev/null +++ b/examples/components/webgpu-tensorflow/component/wkg.lock @@ -0,0 +1,30 @@ +# This file is automatically generated. +# It is not intended for manual editing. +version = 1 + +[[packages]] +name = "wasi:http" +registry = "wasi.dev" + +[[packages.versions]] +requirement = "=0.2.3" +version = "0.2.3" +digest = "sha256:e526c1586efc94cd148e33725139be05c4bb58ba20466d348282bd8dc3999f1d" + +[[packages]] +name = "wasi:io" +registry = "wasi.dev" + +[[packages.versions]] +requirement = "=0.2.0" +version = "0.2.0" +digest = "sha256:c33b1dbf050f64229ff4decbf9a3d3420e0643a86f5f0cea29f81054820020a6" + +[[packages]] +name = "wasi:sockets" +registry = "wasi.dev" + +[[packages.versions]] +requirement = "=0.2.3" +version = "0.2.3" +digest = "sha256:dcbe3e55d025d3b3a7ee959c4f74119be0d7d85d1289d4ac6d29a4a37b4d47d7" diff --git a/examples/components/webgpu-tensorflow/package-lock.json b/examples/components/webgpu-tensorflow/package-lock.json new file mode 100644 index 00000000..a9a3cbc5 --- /dev/null +++ b/examples/components/webgpu-tensorflow/package-lock.json @@ -0,0 +1,4430 @@ +{ + "name": "webgpu-tensorflow", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "webgpu-tensorflow", + "version": "0.1.0", + "hasInstallScript": true, + "workspaces": [ + "service", + "component" + ], + "devDependencies": { + "@bytecodealliance/componentize-js": "0.20.0", + "patch-package": "^8.0.1" + } + }, + "component": { + "name": "webgpu-tensorflow-component", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@bytecodealliance/jco-std": "^0.1.3", + "hono": "^4.12.14", + "zod": "^4.3.6" + }, + "devDependencies": { + "@bytecodealliance/jco": "^1.17.9", + "@rollup/plugin-commonjs": "^29.0.0", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-typescript": "^12.3.0", + "@rollup/plugin-url": "^8.0.2", + "rimraf": "^6.1.2", + "rollup": "^4.57.1", + "typescript": "^5.9.3" + } + }, + "node_modules/@bytecodealliance/componentize-js": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/componentize-js/-/componentize-js-0.20.0.tgz", + "integrity": "sha512-JPRYUTD8v1QUsZ5eqhCtQR7amOTugjV2ofSjFv1/zAGksf4AZUoCFYiKTQ61E+hKUVNJKIdYLOw+stGqAL9qAg==", + "dev": true, + "workspaces": [ + "." + ], + "dependencies": { + "@bytecodealliance/jco": "^1.15.1", + "@bytecodealliance/weval": "^0.4.1", + "@bytecodealliance/wizer": "^10.0.0", + "es-module-lexer": "^1.6.0", + "oxc-parser": "^0.76.0" + }, + "bin": { + "componentize-js": "src/cli.js" + } + }, + "node_modules/@bytecodealliance/componentize-js-0-19-3": { + "name": "@bytecodealliance/componentize-js", + "version": "0.19.3", + "resolved": "https://registry.npmjs.org/@bytecodealliance/componentize-js/-/componentize-js-0.19.3.tgz", + "integrity": "sha512-ju7Y4WeF0B9uMkSPHJgmT6ouEfSwbe9M1uR/YOnYZjBpxJjH9qzxIkJg/kf8NycVDyFJ2/lscmJ1E1uPiDQVRQ==", + "dev": true, + "workspaces": [ + "." + ], + "dependencies": { + "@bytecodealliance/jco": "^1.15.1", + "@bytecodealliance/wizer": "^10.0.0", + "es-module-lexer": "^1.6.0", + "oxc-parser": "^0.76.0" + }, + "bin": { + "componentize-js": "src/cli.js" + } + }, + "node_modules/@bytecodealliance/jco": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/jco/-/jco-1.19.0.tgz", + "integrity": "sha512-I57cVbL24/u/zCBwHq7D9PyIMP81hFFYF4hL/pW5biRGVLQAZuwEAUaEmghOouyt77bU2ExqscP2wkLvr3nfDw==", + "dev": true, + "license": "(Apache-2.0 WITH LLVM-exception)", + "dependencies": { + "@bytecodealliance/componentize-js": "^0.20.0", + "@bytecodealliance/componentize-js-0-19-3": "npm:@bytecodealliance/componentize-js@^0.19.3", + "@bytecodealliance/preview2-shim": "^0.17.9", + "binaryen": "^123.0.0", + "commander": "^14", + "mkdirp": "^3", + "ora": "^8", + "terser": "^5" + }, + "bin": { + "jco": "src/jco.js" + } + }, + "node_modules/@bytecodealliance/jco-std": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@bytecodealliance/jco-std/-/jco-std-0.1.3.tgz", + "integrity": "sha512-BmKecKbNF8STjsfrf28HAoo51VKKDNY2NHTwxp5l+e0M4Kki2mtAMIeD5nKTN00MZzug2FtO1dnMZ+nWIYdg5w==", + "license": "(Apache-2.0 WITH LLVM-exception)" + }, + "node_modules/@bytecodealliance/preview2-shim": { + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@bytecodealliance/preview2-shim/-/preview2-shim-0.17.9.tgz", + "integrity": "sha512-i0R3eQBe6PA/o/1EFE3Owe4In2rcccb6QxnjpntM/lPe3/duJ0bRQTVZM2Ufpo99X4eofGeltQUkape1C91FFA==", + "dev": true, + "license": "(Apache-2.0 WITH LLVM-exception)" + }, + "node_modules/@bytecodealliance/weval": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@bytecodealliance/weval/-/weval-0.4.1.tgz", + "integrity": "sha512-vJegSAkNjENhJcMUod76KUGAgQLdACDDCwB3JwyR14zDhyHVPAvArvtDDYEEi+c+ELzls62H6wxTvzRmaYTaqg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@napi-rs/lzma": "^1.1.2", + "decompress": "^4.2.1", + "decompress-tar": "^4.1.1", + "decompress-unzip": "^4.0.1" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@bytecodealliance/wizer": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer/-/wizer-10.0.0.tgz", + "integrity": "sha512-ziWmovyu1jQl9TsKlfC2bwuUZwxVPFHlX4fOqTzxhgS76jITIo45nzODEwPgU+jjmOr8F3YX2V2wAChC5NKujg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "wizer": "wizer.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@bytecodealliance/wizer-darwin-arm64": "10.0.0", + "@bytecodealliance/wizer-darwin-x64": "10.0.0", + "@bytecodealliance/wizer-linux-arm64": "10.0.0", + "@bytecodealliance/wizer-linux-s390x": "10.0.0", + "@bytecodealliance/wizer-linux-x64": "10.0.0", + "@bytecodealliance/wizer-win32-x64": "10.0.0" + } + }, + "node_modules/@bytecodealliance/wizer-darwin-arm64": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-darwin-arm64/-/wizer-darwin-arm64-10.0.0.tgz", + "integrity": "sha512-dhZTWel+xccGTKSJtI9A7oM4yyP20FWflsT+AoqkOqkCY7kCNrj4tmMtZ6GXZFRDkrPY5+EnOh62sfShEibAMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "wizer-darwin-arm64": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-darwin-x64": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-darwin-x64/-/wizer-darwin-x64-10.0.0.tgz", + "integrity": "sha512-r/LUIZw6Q3Hf4htd46mD+EBxfwjBkxVIrTM1r+B2pTCddoBYQnKVdVsI4UFyy7NoBxzEg8F8BwmTNoSLmFRjpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "wizer-darwin-x64": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-linux-arm64": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-linux-arm64/-/wizer-linux-arm64-10.0.0.tgz", + "integrity": "sha512-pGSfFWXzeTqHm6z1PtVaEn+7Fm3QGC8YnHrzBV4sQDVS3N1NwmuHZAc8kslmlFPNdu61ycEvdOsSgCny8JPQvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "bin": { + "wizer-linux-arm64": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-linux-s390x": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-linux-s390x/-/wizer-linux-s390x-10.0.0.tgz", + "integrity": "sha512-O8vHxRTAdb1lUnVXMIMTcp/9q4pq1D4iIKigJCipg2JN15taV9uFAWh0fO88wylXwuSlO7dOE1AwQl54fMKXQg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "bin": { + "wizer-linux-s390x": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-linux-x64": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-linux-x64/-/wizer-linux-x64-10.0.0.tgz", + "integrity": "sha512-fJtM1sy43FBMnp+xpapFX6U1YdTBKA/1T4CYfG/qeE8jn0SXk2EuiYoY/EnC2uyNy9hjTrvfdYO5n4MXW0EIdQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "bin": { + "wizer-linux-x64": "wizer" + } + }, + "node_modules/@bytecodealliance/wizer-win32-x64": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@bytecodealliance/wizer-win32-x64/-/wizer-win32-x64-10.0.0.tgz", + "integrity": "sha512-55BPLfGT7iT7gH5M69NpTM16QknJZ7OxJ0z73VOEoeGA9CT8QPKMRzFKsPIvLs+W8G28fdudFA94nElrdkp3Kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "bin": { + "wizer-win32-x64": "wizer" + } + }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/lzma": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma/-/lzma-1.4.5.tgz", + "integrity": "sha512-zS5LuN1OBPAyZpda2ZZgYOEDC+xecUdAGnrvbYzjnLXkrq/OBC3B9qcRvlxbDR3k5H/gVfvef1/jyUqPknqjbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/lzma-android-arm-eabi": "1.4.5", + "@napi-rs/lzma-android-arm64": "1.4.5", + "@napi-rs/lzma-darwin-arm64": "1.4.5", + "@napi-rs/lzma-darwin-x64": "1.4.5", + "@napi-rs/lzma-freebsd-x64": "1.4.5", + "@napi-rs/lzma-linux-arm-gnueabihf": "1.4.5", + "@napi-rs/lzma-linux-arm64-gnu": "1.4.5", + "@napi-rs/lzma-linux-arm64-musl": "1.4.5", + "@napi-rs/lzma-linux-ppc64-gnu": "1.4.5", + "@napi-rs/lzma-linux-riscv64-gnu": "1.4.5", + "@napi-rs/lzma-linux-s390x-gnu": "1.4.5", + "@napi-rs/lzma-linux-x64-gnu": "1.4.5", + "@napi-rs/lzma-linux-x64-musl": "1.4.5", + "@napi-rs/lzma-wasm32-wasi": "1.4.5", + "@napi-rs/lzma-win32-arm64-msvc": "1.4.5", + "@napi-rs/lzma-win32-ia32-msvc": "1.4.5", + "@napi-rs/lzma-win32-x64-msvc": "1.4.5" + } + }, + "node_modules/@napi-rs/lzma-android-arm-eabi": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-android-arm-eabi/-/lzma-android-arm-eabi-1.4.5.tgz", + "integrity": "sha512-Up4gpyw2SacmyKWWEib06GhiDdF+H+CCU0LAV8pnM4aJIDqKKd5LHSlBht83Jut6frkB0vwEPmAkv4NjQ5u//Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-android-arm64": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-android-arm64/-/lzma-android-arm64-1.4.5.tgz", + "integrity": "sha512-uwa8sLlWEzkAM0MWyoZJg0JTD3BkPknvejAFG2acUA1raXM8jLrqujWCdOStisXhqQjZ2nDMp3FV6cs//zjfuQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-darwin-arm64": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-darwin-arm64/-/lzma-darwin-arm64-1.4.5.tgz", + "integrity": "sha512-0Y0TQLQ2xAjVabrMDem1NhIssOZzF/y/dqetc6OT8mD3xMTDtF8u5BqZoX3MyPc9FzpsZw4ksol+w7DsxHrpMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-darwin-x64": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-darwin-x64/-/lzma-darwin-x64-1.4.5.tgz", + "integrity": "sha512-vR2IUyJY3En+V1wJkwmbGWcYiT8pHloTAWdW4pG24+51GIq+intst6Uf6D/r46citObGZrlX0QvMarOkQeHWpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-freebsd-x64": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-freebsd-x64/-/lzma-freebsd-x64-1.4.5.tgz", + "integrity": "sha512-XpnYQC5SVovO35tF0xGkbHYjsS6kqyNCjuaLQ2dbEblFRr5cAZVvsJ/9h7zj/5FluJPJRDojVNxGyRhTp4z2lw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-linux-arm-gnueabihf": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-arm-gnueabihf/-/lzma-linux-arm-gnueabihf-1.4.5.tgz", + "integrity": "sha512-ic1ZZMoRfRMwtSwxkyw4zIlbDZGC6davC9r+2oX6x9QiF247BRqqT94qGeL5ZP4Vtz0Hyy7TEViWhx5j6Bpzvw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-linux-arm64-gnu": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-arm64-gnu/-/lzma-linux-arm64-gnu-1.4.5.tgz", + "integrity": "sha512-asEp7FPd7C1Yi6DQb45a3KPHKOFBSfGuJWXcAd4/bL2Fjetb2n/KK2z14yfW8YC/Fv6x3rBM0VAZKmJuz4tysg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-linux-arm64-musl": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-arm64-musl/-/lzma-linux-arm64-musl-1.4.5.tgz", + "integrity": "sha512-yWjcPDgJ2nIL3KNvi4536dlT/CcCWO0DUyEOlBs/SacG7BeD6IjGh6yYzd3/X1Y3JItCbZoDoLUH8iB1lTXo3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-linux-ppc64-gnu": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-ppc64-gnu/-/lzma-linux-ppc64-gnu-1.4.5.tgz", + "integrity": "sha512-0XRhKuIU/9ZjT4WDIG/qnX7Xz7mSQHYZo9Gb3MP2gcvBgr6BA4zywQ9k3gmQaPn9ECE+CZg2V7DV7kT+x2pUMQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-linux-riscv64-gnu": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-riscv64-gnu/-/lzma-linux-riscv64-gnu-1.4.5.tgz", + "integrity": "sha512-QrqDIPEUUB23GCpyQj/QFyMlr8SGxxyExeZz9OWFnHfb70kXdTLWrHS/hEI1Ru+lSbQ/6xRqeoGyQ4Aqdg+/RA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-linux-s390x-gnu": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-s390x-gnu/-/lzma-linux-s390x-gnu-1.4.5.tgz", + "integrity": "sha512-k8RVM5aMhW86E9H0QXdquwojew4H3SwPxbRVbl49/COJQWCUjGi79X6mYruMnMPEznZinUiT1jgKbFo2A00NdA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-gnu": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.4.5.tgz", + "integrity": "sha512-6rMtBgnIq2Wcl1rQdZsnM+rtCcVCbws1nF8S2NzaUsVaZv8bjrPiAa0lwg4Eqnn1d9lgwqT+cZgm5m+//K08Kw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-linux-x64-musl": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-musl/-/lzma-linux-x64-musl-1.4.5.tgz", + "integrity": "sha512-eiadGBKi7Vd0bCArBUOO/qqRYPHt/VQVvGyYvDFt6C2ZSIjlD+HuOl+2oS1sjf4CFjK4eDIog6EdXnL0NE6iyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-wasm32-wasi": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-wasm32-wasi/-/lzma-wasm32-wasi-1.4.5.tgz", + "integrity": "sha512-+VyHHlr68dvey6fXc2hehw9gHVFIW3TtGF1XkcbAu65qVXsA9D/T+uuoRVqhE+JCyFHFrO0ixRbZDRK1XJt1sA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@napi-rs/lzma-win32-arm64-msvc": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-win32-arm64-msvc/-/lzma-win32-arm64-msvc-1.4.5.tgz", + "integrity": "sha512-eewnqvIyyhHi3KaZtBOJXohLvwwN27gfS2G/YDWdfHlbz1jrmfeHAmzMsP5qv8vGB+T80TMHNkro4kYjeh6Deg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-win32-ia32-msvc": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-win32-ia32-msvc/-/lzma-win32-ia32-msvc-1.4.5.tgz", + "integrity": "sha512-OeacFVRCJOKNU/a0ephUfYZ2Yt+NvaHze/4TgOwJ0J0P4P7X1mHzN+ig9Iyd74aQDXYqc7kaCXA2dpAOcH87Cg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/lzma-win32-x64-msvc": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-win32-x64-msvc/-/lzma-win32-x64-msvc-1.4.5.tgz", + "integrity": "sha512-T4I1SamdSmtyZgDXGAGP+y5LEK5vxHUFwe8mz6D4R7Sa5/WCxTcCIgPJ9BD7RkpO17lzhlaM2vmVvMy96Lvk9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-parser/binding-android-arm64": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.76.0.tgz", + "integrity": "sha512-1XJW/16CDmF5bHE7LAyPPmEEVnxSadDgdJz+xiLqBrmC4lfAeuAfRw3HlOygcPGr+AJsbD4Z5sFJMkwjbSZlQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-arm64": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.76.0.tgz", + "integrity": "sha512-yoQwSom8xsB+JdGsPUU0xxmxLKiF2kdlrK7I56WtGKZilixuBf/TmOwNYJYLRWkBoW5l2/pDZOhBm2luwmLiLw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-x64": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.76.0.tgz", + "integrity": "sha512-uRIopPLvr3pf2Xj7f5LKyCuqzIU6zOS+zEIR8UDYhcgJyZHnvBkfrYnfcztyIcrGdQehrFUi3uplmI09E7RdiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-freebsd-x64": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.76.0.tgz", + "integrity": "sha512-a0EOFvnOd2FqmDSvH6uWLROSlU6KV/JDKbsYDA/zRLyKcG6HCsmFnPsp8iV7/xr9WMbNgyJi6R5IMpePQlUq7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.76.0.tgz", + "integrity": "sha512-ikRYDHL3fOdZwfJKmcdqjlLgkeNZ3Ez0qM8wAev5zlHZ+lY/Ig7qG5SCqPlvuTu+nNQ6zrFFaKvvt69EBKXU/g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-musleabihf": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.76.0.tgz", + "integrity": "sha512-dtRv5J5MRCLR7x39K8ufIIW4svIc7gYFUaI0YFXmmeOBhK/K2t/CkguPnDroKtsmXIPHDRtmJ1JJYzNcgJl6Wg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-gnu": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.76.0.tgz", + "integrity": "sha512-IE4iiiggFH2snagQxHrY5bv6dDpRMMat+vdlMN/ibonA65eOmRLp8VLTXnDiNrcla/itJ1L9qGABHNKU+SnE8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-musl": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.76.0.tgz", + "integrity": "sha512-wi9zQPMDHrBuRuT7Iurfidc9qlZh7cKa5vfYzOWNBCaqJdgxmNOFzvYen02wVUxSWGKhpiPHxrPX0jdRyJ8Npg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-gnu": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.76.0.tgz", + "integrity": "sha512-0tqqu1pqPee2lLGY8vtYlX1L415fFn89e0a3yp4q5N9f03j1rRs0R31qesTm3bt/UK8HYjECZ+56FCVPs2MEMQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-s390x-gnu": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.76.0.tgz", + "integrity": "sha512-y36Hh1a5TA+oIGtlc8lT7N9vdHXBlhBetQJW0p457KbiVQ7jF7AZkaPWhESkjHWAsTVKD2OjCa9ZqfaqhSI0FQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-gnu": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.76.0.tgz", + "integrity": "sha512-7/acaG9htovp3gp/J0kHgbItQTuHctl+rbqPPqZ9DRBYTz8iV8kv3QN8t8Or8i/hOmOjfZp9McDoSU1duoR4/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-musl": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.76.0.tgz", + "integrity": "sha512-AxFt0reY6Q2rfudABmMTFGR8tFFr58NlH2rRBQgcj+F+iEwgJ+jMwAPhXd2y1I2zaI8GspuahedUYQinqxWqjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-wasm32-wasi": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.76.0.tgz", + "integrity": "sha512-wHdkHdhf6AWBoO8vs5cpoR6zEFY1rB+fXWtq6j/xb9j/lu1evlujRVMkh8IM/M/pOUIrNkna3nzST/mRImiveQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@oxc-parser/binding-win32-arm64-msvc": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.76.0.tgz", + "integrity": "sha512-G7ZlEWcb2hNwCK3qalzqJoyB6HaTigQ/GEa7CU8sAJ/WwMdG/NnPqiC9IqpEAEy1ARSo4XMALfKbKNuqbSs5mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-parser/binding-win32-x64-msvc": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.76.0.tgz", + "integrity": "sha512-0jLzzmnu8/mqNhKBnNS2lFUbPEzRdj5ReiZwHGHpjma0+ullmmwP2AqSEqx3ssHDK9CpcEMdKOK2LsbCfhHKIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.76.0.tgz", + "integrity": "sha512-CH3THIrSViKal8yV/Wh3FK0pFhp40nzW1MUDCik9fNuid2D/7JJXKJnfFOAvMxInGXDlvmgT6ACAzrl47TqzkQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rollup/plugin-alias": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-6.0.0.tgz", + "integrity": "sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "rollup": ">=4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "29.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.2.tgz", + "integrity": "sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/plugin-inject": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", + "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz", + "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.3.0.tgz", + "integrity": "sha512-7DP0/p7y3t67+NabT9f8oTBFE6gGkto4SA6Np2oudYmZE/m1dt8RB0SjL1msMxFpLo631qjRCcBlAbq1ml/Big==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0||^4.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-url": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-url/-/plugin-url-8.0.2.tgz", + "integrity": "sha512-5yW2LP5NBEgkvIRSSEdJkmxe5cUNZKG3eenKtfJvSkxVm/xTTu7w+ayBtNwhozl1ZnTUCU0xFaRQR+cBl2H7TQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "make-dir": "^3.1.0", + "mime": "^3.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-url/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@rollup/plugin-url/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.3.tgz", + "integrity": "sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.3.tgz", + "integrity": "sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.3.tgz", + "integrity": "sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.3.tgz", + "integrity": "sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.3.tgz", + "integrity": "sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.3.tgz", + "integrity": "sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.3.tgz", + "integrity": "sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.3.tgz", + "integrity": "sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.3.tgz", + "integrity": "sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.3.tgz", + "integrity": "sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.3.tgz", + "integrity": "sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.3.tgz", + "integrity": "sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.3.tgz", + "integrity": "sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.3.tgz", + "integrity": "sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.3.tgz", + "integrity": "sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.3.tgz", + "integrity": "sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.3.tgz", + "integrity": "sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.3.tgz", + "integrity": "sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.3.tgz", + "integrity": "sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.3.tgz", + "integrity": "sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.3.tgz", + "integrity": "sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.3.tgz", + "integrity": "sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.3.tgz", + "integrity": "sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.3.tgz", + "integrity": "sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.3.tgz", + "integrity": "sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tensorflow/tfjs": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-4.22.0.tgz", + "integrity": "sha512-0TrIrXs6/b7FLhLVNmfh8Sah6JgjBPH4mZ8JGb7NU6WW+cx00qK5BcAZxw7NCzxj6N8MRAIfHq+oNbPUNG5VAg==", + "license": "Apache-2.0", + "dependencies": { + "@tensorflow/tfjs-backend-cpu": "4.22.0", + "@tensorflow/tfjs-backend-webgl": "4.22.0", + "@tensorflow/tfjs-converter": "4.22.0", + "@tensorflow/tfjs-core": "4.22.0", + "@tensorflow/tfjs-data": "4.22.0", + "@tensorflow/tfjs-layers": "4.22.0", + "argparse": "^1.0.10", + "chalk": "^4.1.0", + "core-js": "3.29.1", + "regenerator-runtime": "^0.13.5", + "yargs": "^16.0.3" + }, + "bin": { + "tfjs-custom-module": "dist/tools/custom_module/cli.js" + } + }, + "node_modules/@tensorflow/tfjs-backend-cpu": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-4.22.0.tgz", + "integrity": "sha512-1u0FmuLGuRAi8D2c3cocHTASGXOmHc/4OvoVDENJayjYkS119fcTcQf4iHrtLthWyDIPy3JiPhRrZQC9EwnhLw==", + "license": "Apache-2.0", + "dependencies": { + "@types/seedrandom": "^2.4.28", + "seedrandom": "^3.0.5" + }, + "engines": { + "yarn": ">= 1.3.2" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": "4.22.0" + } + }, + "node_modules/@tensorflow/tfjs-backend-webgl": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-4.22.0.tgz", + "integrity": "sha512-H535XtZWnWgNwSzv538czjVlbJebDl5QTMOth4RXr2p/kJ1qSIXE0vZvEtO+5EC9b00SvhplECny2yDewQb/Yg==", + "license": "Apache-2.0", + "dependencies": { + "@tensorflow/tfjs-backend-cpu": "4.22.0", + "@types/offscreencanvas": "~2019.3.0", + "@types/seedrandom": "^2.4.28", + "seedrandom": "^3.0.5" + }, + "engines": { + "yarn": ">= 1.3.2" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": "4.22.0" + } + }, + "node_modules/@tensorflow/tfjs-backend-webgpu": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgpu/-/tfjs-backend-webgpu-4.22.0.tgz", + "integrity": "sha512-lvIc7Af4Tl2BCdYp43iQmSCRq3asaKT0q2xaErphXiUZ+jqeB0bQa0ZvQys1Xatvto0U4/c90DVsHPfvkn5ftg==", + "license": "Apache-2.0", + "dependencies": { + "@tensorflow/tfjs-backend-cpu": "4.22.0" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": "4.22.0" + } + }, + "node_modules/@tensorflow/tfjs-converter": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-4.22.0.tgz", + "integrity": "sha512-PT43MGlnzIo+YfbsjM79Lxk9lOq6uUwZuCc8rrp0hfpLjF6Jv8jS84u2jFb+WpUeuF4K33ZDNx8CjiYrGQ2trQ==", + "license": "Apache-2.0", + "peerDependencies": { + "@tensorflow/tfjs-core": "4.22.0" + } + }, + "node_modules/@tensorflow/tfjs-core": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-4.22.0.tgz", + "integrity": "sha512-LEkOyzbknKFoWUwfkr59vSB68DMJ4cjwwHgicXN0DUi3a0Vh1Er3JQqCI1Hl86GGZQvY8ezVrtDIvqR1ZFW55A==", + "license": "Apache-2.0", + "dependencies": { + "@types/long": "^4.0.1", + "@types/offscreencanvas": "~2019.7.0", + "@types/seedrandom": "^2.4.28", + "@webgpu/types": "0.1.38", + "long": "4.0.0", + "node-fetch": "~2.6.1", + "seedrandom": "^3.0.5" + }, + "engines": { + "yarn": ">= 1.3.2" + } + }, + "node_modules/@tensorflow/tfjs-core/node_modules/@types/offscreencanvas": { + "version": "2019.7.3", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", + "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==", + "license": "MIT" + }, + "node_modules/@tensorflow/tfjs-data": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-4.22.0.tgz", + "integrity": "sha512-dYmF3LihQIGvtgJrt382hSRH4S0QuAp2w1hXJI2+kOaEqo5HnUPG0k5KA6va+S1yUhx7UBToUKCBHeLHFQRV4w==", + "license": "Apache-2.0", + "dependencies": { + "@types/node-fetch": "^2.1.2", + "node-fetch": "~2.6.1", + "string_decoder": "^1.3.0" + }, + "peerDependencies": { + "@tensorflow/tfjs-core": "4.22.0", + "seedrandom": "^3.0.5" + } + }, + "node_modules/@tensorflow/tfjs-data/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/@tensorflow/tfjs-layers": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-4.22.0.tgz", + "integrity": "sha512-lybPj4ZNj9iIAPUj7a8ZW1hg8KQGfqWLlCZDi9eM/oNKCCAgchiyzx8OrYoWmRrB+AM6VNEeIT+2gZKg5ReihA==", + "license": "Apache-2.0 AND MIT", + "peerDependencies": { + "@tensorflow/tfjs-core": "4.22.0" + } + }, + "node_modules/@tensorflow/tfjs/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@tensorflow/tfjs/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@tensorflow/tfjs/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.19.0" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.4" + } + }, + "node_modules/@types/offscreencanvas": { + "version": "2019.3.0", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", + "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==", + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/seedrandom": { + "version": "2.4.34", + "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.34.tgz", + "integrity": "sha512-ytDiArvrn/3Xk6/vtylys5tlY6eo7Ane0hvcx++TKo6RxQXuVfW0AF/oeWqAj9dN29SyhtawuXstgmPlwNcv/A==", + "license": "MIT" + }, + "node_modules/@wasi-gfx/js-webgpu": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@wasi-gfx/js-webgpu/-/js-webgpu-0.2.0.tgz", + "integrity": "sha512-FdnRvsJsn2V25gRQwlfqNK4Gzmg2Gwb+1cT9n725wxm1YrtVLZhbHf/XxkkyolBRZ0CBJKvPyJ/xE+TSJIpZqw==" + }, + "node_modules/@webgpu/types": { + "version": "0.1.38", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.38.tgz", + "integrity": "sha512-7LrhVKz2PRh+DD7+S+PVaFd5HxaWQvoMqBbsV9fNJO1pjUs1P8bM2vQVNfk+3URTqbuTI7gkXi0rfsN0IadoBA==", + "license": "BSD-3-Clause" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/binaryen": { + "version": "123.0.0", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-123.0.0.tgz", + "integrity": "sha512-/hls/a309aZCc0itqP6uhoR+5DsKSlJVfB8Opd2BY9Ndghs84IScTunlyidyF4r2Xe3lQttnfBNIDjaNpj6mTw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "wasm-as": "bin/wasm-as", + "wasm-ctor-eval": "bin/wasm-ctor-eval", + "wasm-dis": "bin/wasm-dis", + "wasm-merge": "bin/wasm-merge", + "wasm-metadce": "bin/wasm-metadce", + "wasm-opt": "bin/wasm-opt", + "wasm-reduce": "bin/wasm-reduce", + "wasm-shell": "bin/wasm-shell", + "wasm2js": "bin/wasm2js" + } + }, + "node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js": { + "version": "3.29.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.1.tgz", + "integrity": "sha512-+jwgnhg6cQxKYIIjGtAHq2nwUOolo9eoFZ4sHfUH09BLXBgxnH4gA0zEd+t+BO2cNB8idaBtZFcFTRjQJRJmAw==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2/node_modules/file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip/node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hono": { + "version": "4.12.17", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.17.tgz", + "integrity": "sha512-FbJJNb/XgX7YW0hX/V8w5oYLztKEsRLykCMZWt1WdLtsfjzMvmoqWBA4H4t5norinq8/rh20oiZYr+WSl4UzAQ==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", + "license": "BSD-3-Clause" + }, + "node_modules/json-stable-stringify": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz", + "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "license": "Public Domain", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.6.tgz", + "integrity": "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-fetch": { + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/oxc-parser": { + "version": "0.76.0", + "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.76.0.tgz", + "integrity": "sha512-l98B2e9evuhES7zN99rb1QGhbzx25829TJFaKi2j0ib3/K/G5z1FdGYz6HZkrU3U8jdH7v2FC8mX1j2l9JrOUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "^0.76.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-parser/binding-android-arm64": "0.76.0", + "@oxc-parser/binding-darwin-arm64": "0.76.0", + "@oxc-parser/binding-darwin-x64": "0.76.0", + "@oxc-parser/binding-freebsd-x64": "0.76.0", + "@oxc-parser/binding-linux-arm-gnueabihf": "0.76.0", + "@oxc-parser/binding-linux-arm-musleabihf": "0.76.0", + "@oxc-parser/binding-linux-arm64-gnu": "0.76.0", + "@oxc-parser/binding-linux-arm64-musl": "0.76.0", + "@oxc-parser/binding-linux-riscv64-gnu": "0.76.0", + "@oxc-parser/binding-linux-s390x-gnu": "0.76.0", + "@oxc-parser/binding-linux-x64-gnu": "0.76.0", + "@oxc-parser/binding-linux-x64-musl": "0.76.0", + "@oxc-parser/binding-wasm32-wasi": "0.76.0", + "@oxc-parser/binding-win32-arm64-msvc": "0.76.0", + "@oxc-parser/binding-win32-x64-msvc": "0.76.0" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/patch-package": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz", + "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^10.0.0", + "json-stable-stringify": "^1.0.2", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "semver": "^7.5.3", + "slash": "^2.0.0", + "tmp": "^0.2.4", + "yaml": "^2.2.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=14", + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/patch-package/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rimraf": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", + "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "glob": "^13.0.3", + "package-json-from-dist": "^1.0.1" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.3.tgz", + "integrity": "sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.3", + "@rollup/rollup-android-arm64": "4.60.3", + "@rollup/rollup-darwin-arm64": "4.60.3", + "@rollup/rollup-darwin-x64": "4.60.3", + "@rollup/rollup-freebsd-arm64": "4.60.3", + "@rollup/rollup-freebsd-x64": "4.60.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.3", + "@rollup/rollup-linux-arm-musleabihf": "4.60.3", + "@rollup/rollup-linux-arm64-gnu": "4.60.3", + "@rollup/rollup-linux-arm64-musl": "4.60.3", + "@rollup/rollup-linux-loong64-gnu": "4.60.3", + "@rollup/rollup-linux-loong64-musl": "4.60.3", + "@rollup/rollup-linux-ppc64-gnu": "4.60.3", + "@rollup/rollup-linux-ppc64-musl": "4.60.3", + "@rollup/rollup-linux-riscv64-gnu": "4.60.3", + "@rollup/rollup-linux-riscv64-musl": "4.60.3", + "@rollup/rollup-linux-s390x-gnu": "4.60.3", + "@rollup/rollup-linux-x64-gnu": "4.60.3", + "@rollup/rollup-linux-x64-musl": "4.60.3", + "@rollup/rollup-openbsd-x64": "4.60.3", + "@rollup/rollup-openharmony-arm64": "4.60.3", + "@rollup/rollup-win32-arm64-msvc": "4.60.3", + "@rollup/rollup-win32-ia32-msvc": "4.60.3", + "@rollup/rollup-win32-x64-gnu": "4.60.3", + "@rollup/rollup-win32-x64-msvc": "4.60.3", + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", + "license": "MIT" + }, + "node_modules/seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, + "node_modules/seek-bzip/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-natural-number": "^4.0.1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/terser": { + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.2.tgz", + "integrity": "sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/undici-types": { + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", + "license": "MIT" + }, + "node_modules/unenv": { + "version": "2.0.0-rc.24", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", + "integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/webgpu-tensorflow-component": { + "resolved": "component", + "link": true + }, + "node_modules/webgpu-tensorflow-service": { + "resolved": "service", + "link": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz", + "integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "service": { + "name": "webgpu-tensorflow-service", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@tensorflow/tfjs": "^4.22.0", + "@tensorflow/tfjs-backend-webgpu": "^4.22.0", + "@wasi-gfx/js-webgpu": "^0.2.0", + "jpeg-js": "^0.4.4" + }, + "devDependencies": { + "@bytecodealliance/jco": "^1.17.9", + "@rollup/plugin-alias": "^6.0.0", + "@rollup/plugin-commonjs": "^29.0.0", + "@rollup/plugin-inject": "^5.0.5", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-typescript": "^12.3.0", + "@rollup/plugin-url": "^8.0.2", + "rimraf": "^6.1.2", + "rollup": "^4.57.1", + "typescript": "^5.9.3", + "unenv": "2.0.0-rc.24" + } + } + } +} diff --git a/examples/components/webgpu-tensorflow/package.json b/examples/components/webgpu-tensorflow/package.json new file mode 100644 index 00000000..77f68b99 --- /dev/null +++ b/examples/components/webgpu-tensorflow/package.json @@ -0,0 +1,20 @@ +{ + "name": "webgpu-tensorflow", + "version": "0.1.0", + "description": "A wasmCloud service-and-component example: GPU-accelerated TensorFlow.js style transfer running as a service, fronted by an HTTP component", + "private": true, + "type": "module", + "scripts": { + "postinstall": "patch-package", + "setup:wit": "npm run setup:wit --workspace=service && npm run setup:wit --workspace=component", + "build": "npm run build --workspace=service && npm run build --workspace=component" + }, + "workspaces": [ + "service", + "component" + ], + "devDependencies": { + "@bytecodealliance/componentize-js": "0.20.0", + "patch-package": "^8.0.1" + } +} diff --git a/examples/components/webgpu-tensorflow/patches/@bytecodealliance+componentize-js+0.20.0.patch b/examples/components/webgpu-tensorflow/patches/@bytecodealliance+componentize-js+0.20.0.patch new file mode 100644 index 00000000..2a0577d2 --- /dev/null +++ b/examples/components/webgpu-tensorflow/patches/@bytecodealliance+componentize-js+0.20.0.patch @@ -0,0 +1,48 @@ +diff --git a/node_modules/@bytecodealliance/componentize-js/src/componentize.js b/node_modules/@bytecodealliance/componentize-js/src/componentize.js +index 9990702..e6e07ab 100644 +--- a/node_modules/@bytecodealliance/componentize-js/src/componentize.js ++++ b/node_modules/@bytecodealliance/componentize-js/src/componentize.js +@@ -158,6 +158,43 @@ export async function componentize( + false, + ); + ++ // Workaround: the splicer only generates a JS class for a WIT resource type ++ // when the owning interface has at least one callable function. Some interfaces ++ // (e.g. wasi:sockets/network) define only a resource type with no methods, so ++ // the class is never emitted — but it IS referenced by instanceNetwork() and ++ // by any export that takes borrow, causing a ReferenceError at runtime. ++ // ++ // Fix: scan for finalization registries whose corresponding class is missing ++ // and inject a minimal class definition after `symbolDispose` is declared. ++ { ++ const registryRe = /finalizationRegistry_import\$([^$]+)\$([^\s=]+) = new FinalizationRegistry/g; ++ let m; ++ const missingClasses = []; ++ while ((m = registryRe.exec(jsBindings)) !== null) { ++ const iface = m[1]; ++ const rsc = m[2]; ++ const className = `import_${iface}$${rsc.charAt(0).toUpperCase()}${rsc.slice(1)}`; ++ if (!jsBindings.includes(`class ${className}`)) { ++ missingClasses.push({ iface, rsc, className }); ++ } ++ } ++ if (missingClasses.length > 0) { ++ const injected = missingClasses.map(({ iface, rsc, className }) => ++ `class ${className} {\n` + ++ ` [symbolDispose]() {\n` + ++ ` finalizationRegistry_import$${iface}$${rsc}.unregister(this);\n` + ++ ` $resource_import$${iface}$drop$${rsc}(this[symbolRscHandle]);\n` + ++ ` this[symbolRscHandle] = undefined;\n` + ++ ` }\n` + ++ `}\n` ++ ).join(''); ++ jsBindings = jsBindings.replace( ++ '\nconst symbolDispose = Symbol.dispose || Symbol.for(\'dispose\');', ++ '\nconst symbolDispose = Symbol.dispose || Symbol.for(\'dispose\');\n' + injected, ++ ); ++ } ++ } ++ + const inputWasmPath = join(workDir, 'in.wasm'); + const outputWasmPath = join(workDir, 'out.wasm'); + diff --git a/examples/components/webgpu-tensorflow/service/.wash/config.yaml b/examples/components/webgpu-tensorflow/service/.wash/config.yaml new file mode 100644 index 00000000..bd8abfa5 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/.wash/config.yaml @@ -0,0 +1,6 @@ +# Subpackage anchor — tells wash to treat this directory as the project root +# when running WIT commands. Build this subpackage via the parent: +# npm run build --workspace=service +build: + command: npm run build + component_path: dist/service.wasm diff --git a/examples/components/webgpu-tensorflow/service/models/ATTRIBUTION.md b/examples/components/webgpu-tensorflow/service/models/ATTRIBUTION.md new file mode 100644 index 00000000..ca9605ed --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/models/ATTRIBUTION.md @@ -0,0 +1,8 @@ +Third-Party Model Files +The model artifacts in this directory (`style/` and `transformer/`) are derived from: + +https://github.com/reiinakano/arbitrary-image-stylization-tfjs commit 5c93b212d7d3c7051a89a53667d2d5a61cd938b4 + +License for these model files: +Apache License, Version 2.0 +https://www.apache.org/licenses/LICENSE-2.0 diff --git a/examples/components/webgpu-tensorflow/service/models/style/group1-shard1of9.bin b/examples/components/webgpu-tensorflow/service/models/style/group1-shard1of9.bin new file mode 100644 index 00000000..a7c2d31f Binary files /dev/null and b/examples/components/webgpu-tensorflow/service/models/style/group1-shard1of9.bin differ diff --git a/examples/components/webgpu-tensorflow/service/models/style/group1-shard2of9.bin b/examples/components/webgpu-tensorflow/service/models/style/group1-shard2of9.bin new file mode 100644 index 00000000..fe9d80f0 Binary files /dev/null and b/examples/components/webgpu-tensorflow/service/models/style/group1-shard2of9.bin differ diff --git a/examples/components/webgpu-tensorflow/service/models/style/group1-shard3of9.bin b/examples/components/webgpu-tensorflow/service/models/style/group1-shard3of9.bin new file mode 100644 index 00000000..1faa0e6e Binary files /dev/null and b/examples/components/webgpu-tensorflow/service/models/style/group1-shard3of9.bin differ diff --git a/examples/components/webgpu-tensorflow/service/models/style/group1-shard4of9.bin b/examples/components/webgpu-tensorflow/service/models/style/group1-shard4of9.bin new file mode 100644 index 00000000..80c8e2ae Binary files /dev/null and b/examples/components/webgpu-tensorflow/service/models/style/group1-shard4of9.bin differ diff --git a/examples/components/webgpu-tensorflow/service/models/style/group1-shard5of9.bin b/examples/components/webgpu-tensorflow/service/models/style/group1-shard5of9.bin new file mode 100644 index 00000000..d3d45dcc Binary files /dev/null and b/examples/components/webgpu-tensorflow/service/models/style/group1-shard5of9.bin differ diff --git a/examples/components/webgpu-tensorflow/service/models/style/group1-shard6of9.bin b/examples/components/webgpu-tensorflow/service/models/style/group1-shard6of9.bin new file mode 100644 index 00000000..a087044e Binary files /dev/null and b/examples/components/webgpu-tensorflow/service/models/style/group1-shard6of9.bin differ diff --git a/examples/components/webgpu-tensorflow/service/models/style/group1-shard7of9.bin b/examples/components/webgpu-tensorflow/service/models/style/group1-shard7of9.bin new file mode 100644 index 00000000..c795f53b Binary files /dev/null and b/examples/components/webgpu-tensorflow/service/models/style/group1-shard7of9.bin differ diff --git a/examples/components/webgpu-tensorflow/service/models/style/group1-shard8of9.bin b/examples/components/webgpu-tensorflow/service/models/style/group1-shard8of9.bin new file mode 100644 index 00000000..d3e1fdb8 Binary files /dev/null and b/examples/components/webgpu-tensorflow/service/models/style/group1-shard8of9.bin differ diff --git a/examples/components/webgpu-tensorflow/service/models/style/group1-shard9of9.bin b/examples/components/webgpu-tensorflow/service/models/style/group1-shard9of9.bin new file mode 100644 index 00000000..9117dda8 Binary files /dev/null and b/examples/components/webgpu-tensorflow/service/models/style/group1-shard9of9.bin differ diff --git a/examples/components/webgpu-tensorflow/service/models/style/model.json b/examples/components/webgpu-tensorflow/service/models/style/model.json new file mode 100644 index 00000000..ec4f6f90 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/models/style/model.json @@ -0,0 +1 @@ +{"modelTopology":{"node":[{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"192"}]}}}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"7"},{"size":"192"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"7"},{"size":"1"},{"size":"192"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"7"},{"size":"1"},{"size":"192"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"7"},{"size":"192"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"7"},{"size":"1"},{"size":"192"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"7"},{"size":"192"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}}},"name":"InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"7"},{"size":"160"},{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"7"},{"size":"1"},{"size":"160"},{"size":"192"}]}}}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"7"},{"size":"1"},{"size":"160"},{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"7"},{"size":"160"},{"size":"160"}]}}}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"7"},{"size":"1"},{"size":"160"},{"size":"160"}]}}}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"7"},{"size":"160"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"7"},{"size":"160"},{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"7"},{"size":"1"},{"size":"160"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"7"},{"size":"1"},{"size":"160"},{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"7"},{"size":"160"},{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"7"},{"size":"1"},{"size":"160"},{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[1],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"160"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"7"},{"size":"160"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"7"},{"size":"128"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"7"},{"size":"1"},{"size":"128"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"7"},{"size":"1"},{"size":"128"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"7"},{"size":"128"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"7"},{"size":"1"},{"size":"128"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[1],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"7"},{"size":"128"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/weights","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"288"},{"size":"384"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[1],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"384"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/BatchNorm/Const","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"384"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"384"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"384"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"288"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"64"},{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"96"},{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"288"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"288"},{"size":"48"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"48"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"48"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"48"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"5"},{"size":"5"},{"size":"48"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}}},"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"288"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"64"},{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"96"},{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"256"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}}},"name":"InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"256"},{"size":"48"}]}}}},"name":"InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"48"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"48"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"48"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"5"},{"size":"5"},{"size":"48"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"256"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"64"},{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"96"},{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"192"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"192"},{"size":"48"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[1],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"48"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"48"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"48"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"48"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"5"},{"size":"5"},{"size":"48"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"192"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/weights","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"64"},{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"96"},{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[1],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/Const","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"96"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"3"},{"size":"32"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_1a_3x3/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_1a_3x3/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_1a_3x3/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_1a_3x3/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"32"},{"size":"32"}]}}}},"name":"InceptionV3/Conv2d_2a_3x3/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_2a_3x3/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_2a_3x3/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_2a_3x3/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"32"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_2b_3x3/weights","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}}},"name":"InceptionV3/Conv2d_2b_3x3/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_2b_3x3/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_2b_3x3/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"64"},{"size":"80"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_3b_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[1],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"80"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_3b_1x1/BatchNorm/Const","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"80"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_3b_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"80"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_3b_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"80"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_3b_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"80"},{"size":"192"}]}}}},"name":"InceptionV3/Conv2d_4a_3x3/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_4a_3x3/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_4a_3x3/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_4a_3x3/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"192"},{"size":"32"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[1],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Conv2d_1a_3x3/BatchNorm/Const","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"256"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}}},"name":"InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"288"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[1],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}}},"name":"InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"192"}]}}}},"name":"InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[1],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"192"}]}}},"dtype":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[3],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":3,"tensorShape":{"dim":[]}}},"dtype":{"type":3}},"name":"InceptionV3/Mixed_5b/concat/axis","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":3,"tensorShape":{"dim":[{"size":"2"}]}}},"dtype":{"type":3}},"name":"bottleneck/Mean/reduction_indices","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"768"},{"size":"100"}]}}},"dtype":{"type":1}},"name":"Conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"100"}]}}},"dtype":{"type":1}},"name":"Conv/biases","op":"Const"},{"input":[],"attr":{"shape":{"shape":{"dim":[{"size":"-1"},{"size":"-1"},{"size":"-1"},{"size":"3"}]}},"dtype":{"type":1}},"name":"Placeholder","op":"Placeholder"},{"input":["Placeholder","InceptionV3/Conv2d_1a_3x3/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","2","2","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]}},"name":"InceptionV3/Conv2d_1a_3x3/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Conv2d_1a_3x3/Conv2D","InceptionV3/Conv2d_1a_3x3/BatchNorm/Const","InceptionV3/Conv2d_1a_3x3/BatchNorm/beta","InceptionV3/Conv2d_1a_3x3/BatchNorm/moving_mean","InceptionV3/Conv2d_1a_3x3/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Conv2d_1a_3x3/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Conv2d_1a_3x3/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Conv2d_1a_3x3/Relu6","op":"Relu6"},{"input":["InceptionV3/Conv2d_1a_3x3/Relu6","InceptionV3/Conv2d_2a_3x3/weights"],"attr":{"padding":{"s":[86,65,76,73,68]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Conv2d_2a_3x3/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Conv2d_2a_3x3/Conv2D","InceptionV3/Conv2d_1a_3x3/BatchNorm/Const","InceptionV3/Conv2d_2a_3x3/BatchNorm/beta","InceptionV3/Conv2d_2a_3x3/BatchNorm/moving_mean","InceptionV3/Conv2d_2a_3x3/BatchNorm/moving_variance"],"attr":{"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"InceptionV3/Conv2d_2a_3x3/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Conv2d_2a_3x3/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Conv2d_2a_3x3/Relu6","op":"Relu6"},{"input":["InceptionV3/Conv2d_2a_3x3/Relu6","InceptionV3/Conv2d_2b_3x3/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Conv2d_2b_3x3/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Conv2d_2b_3x3/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Conv2d_2b_3x3/BatchNorm/beta","InceptionV3/Conv2d_2b_3x3/BatchNorm/moving_mean","InceptionV3/Conv2d_2b_3x3/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Conv2d_2b_3x3/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Conv2d_2b_3x3/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Conv2d_2b_3x3/Relu6","op":"Relu6"},{"input":["InceptionV3/Conv2d_2b_3x3/Relu6"],"attr":{"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","2","2","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"ksize":{"list":{"s":[],"i":["1","3","3","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"padding":{"s":[86,65,76,73,68]},"T":{"type":1}},"name":"InceptionV3/MaxPool_3a_3x3/MaxPool","op":"MaxPool"},{"input":["InceptionV3/MaxPool_3a_3x3/MaxPool","InceptionV3/Conv2d_3b_1x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]}},"name":"InceptionV3/Conv2d_3b_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Conv2d_3b_1x1/Conv2D","InceptionV3/Conv2d_3b_1x1/BatchNorm/Const","InceptionV3/Conv2d_3b_1x1/BatchNorm/beta","InceptionV3/Conv2d_3b_1x1/BatchNorm/moving_mean","InceptionV3/Conv2d_3b_1x1/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Conv2d_3b_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Conv2d_3b_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Conv2d_3b_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Conv2d_3b_1x1/Relu6","InceptionV3/Conv2d_4a_3x3/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]}},"name":"InceptionV3/Conv2d_4a_3x3/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Conv2d_4a_3x3/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Conv2d_4a_3x3/BatchNorm/beta","InceptionV3/Conv2d_4a_3x3/BatchNorm/moving_mean","InceptionV3/Conv2d_4a_3x3/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Conv2d_4a_3x3/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Conv2d_4a_3x3/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Conv2d_4a_3x3/Relu6","op":"Relu6"},{"input":["InceptionV3/Conv2d_4a_3x3/Relu6"],"attr":{"ksize":{"list":{"s":[],"i":["1","3","3","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"padding":{"s":[86,65,76,73,68]},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","2","2","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]}},"name":"InceptionV3/MaxPool_5a_3x3/MaxPool","op":"MaxPool"},{"input":["InceptionV3/MaxPool_5a_3x3/MaxPool","InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/weights"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/MaxPool_5a_3x3/MaxPool","InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/weights"],"attr":{"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/MaxPool_5a_3x3/MaxPool","InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/weights"],"attr":{"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/MaxPool_5a_3x3/MaxPool"],"attr":{"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"ksize":{"list":{"s":[],"i":["1","3","3","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"padding":{"s":[83,65,77,69]},"T":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_3/AvgPool_0a_3x3/AvgPool","op":"AvgPool"},{"input":["InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5b/Branch_3/AvgPool_0a_3x3/AvgPool","InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/Conv2D","InceptionV3/Conv2d_1a_3x3/BatchNorm/Const","InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/BatchNorm/beta","InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/BatchNorm/moving_mean","InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/Const","InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/BatchNorm/beta","InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_mean","InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/Relu6","InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/Const","InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/BatchNorm/beta","InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_mean","InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5b/concat/axis"],"attr":{"N":{"i":"4"},"Tidx":{"type":3},"T":{"type":1}},"name":"InceptionV3/Mixed_5b/concat","op":"ConcatV2"},{"input":["InceptionV3/Mixed_5b/concat"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/weights"],"attr":{"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/Relu6"],"attr":{"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"ksize":{"list":{"s":[],"i":["1","3","3","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"padding":{"s":[83,65,77,69]},"T":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_3/AvgPool_0a_3x3/AvgPool","op":"AvgPool"},{"input":["InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/Conv2D","InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/BatchNorm/beta","InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5c/Branch_3/AvgPool_0a_3x3/AvgPool","InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/Relu6","InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/BatchNorm/beta","InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/BatchNorm/moving_mean","InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/Const","InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/BatchNorm/beta","InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_mean","InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/Relu6","InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/Const","InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/BatchNorm/beta","InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_mean","InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5b/concat/axis"],"attr":{"Tidx":{"type":3},"T":{"type":1},"N":{"i":"4"}},"name":"InceptionV3/Mixed_5c/concat","op":"ConcatV2"},{"input":["InceptionV3/Mixed_5c/concat"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/weights"],"attr":{"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/Relu6"],"attr":{"ksize":{"list":{"s":[],"i":["1","3","3","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"padding":{"s":[83,65,77,69]},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"InceptionV3/Mixed_5d/Branch_3/AvgPool_0a_3x3/AvgPool","op":"AvgPool"},{"input":["InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5d/Branch_3/AvgPool_0a_3x3/AvgPool","InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/weights"],"attr":{"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/BatchNorm/beta","InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/BatchNorm/moving_mean","InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/Const","InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/BatchNorm/beta","InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_mean","InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/Relu6","InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/Const","InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/BatchNorm/beta","InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_mean","InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5b/concat/axis"],"attr":{"N":{"i":"4"},"Tidx":{"type":3},"T":{"type":1}},"name":"InceptionV3/Mixed_5d/concat","op":"ConcatV2"},{"input":["InceptionV3/Mixed_5d/concat"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","2","2","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]}},"name":"InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/Relu6"],"attr":{"padding":{"s":[86,65,76,73,68]},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","2","2","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"ksize":{"list":{"s":[],"i":["1","3","3","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"InceptionV3/Mixed_6a/Branch_2/MaxPool_1a_3x3/MaxPool","op":"MaxPool"},{"input":["InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/Conv2D","InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/BatchNorm/Const","InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/BatchNorm/beta","InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/Const","InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/beta","InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/moving_mean","InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/moving_variance"],"attr":{"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/Relu6","InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/weights"],"attr":{"padding":{"s":[86,65,76,73,68]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","2","2","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/Conv2D","InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/Const","InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/BatchNorm/beta","InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/Relu6","InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/Relu6","InceptionV3/Mixed_6a/Branch_2/MaxPool_1a_3x3/MaxPool","InceptionV3/Mixed_5b/concat/axis"],"attr":{"N":{"i":"3"},"Tidx":{"type":3},"T":{"type":1}},"name":"InceptionV3/Mixed_6a/concat","op":"ConcatV2"},{"input":["InceptionV3/Mixed_6a/concat","InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6a/concat","InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6a/concat","InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6a/concat"],"attr":{"ksize":{"list":{"s":[],"i":["1","3","3","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"padding":{"s":[83,65,77,69]},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]}},"name":"InceptionV3/Mixed_6b/Branch_3/AvgPool_0a_3x3/AvgPool","op":"AvgPool"},{"input":["InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6b/Branch_3/AvgPool_0a_3x3/AvgPool","InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/weights"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/weights"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/weights"],"attr":{"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/Conv2D","InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/BatchNorm/beta","InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_mean","InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/Conv2D","InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/BatchNorm/beta","InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_mean","InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/Relu6","InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/Relu6","InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/BatchNorm/beta","InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_mean","InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/Conv2D","InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/BatchNorm/beta","InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_mean","InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/Relu6","InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/Conv2D","InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/BatchNorm/beta","InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_mean","InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/Relu6","InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/BatchNorm/beta","InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_mean","InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5b/concat/axis"],"attr":{"T":{"type":1},"N":{"i":"4"},"Tidx":{"type":3}},"name":"InceptionV3/Mixed_6b/concat","op":"ConcatV2"},{"input":["InceptionV3/Mixed_6b/concat"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/weights"],"attr":{"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/Relu6"],"attr":{"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"ksize":{"list":{"s":[],"i":["1","3","3","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"padding":{"s":[83,65,77,69]},"T":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_3/AvgPool_0a_3x3/AvgPool","op":"AvgPool"},{"input":["InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6c/Branch_3/AvgPool_0a_3x3/AvgPool","InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/Conv2D","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/BatchNorm/beta","InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_mean","InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/Conv2D","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/BatchNorm/beta","InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_mean","InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/Relu6","InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/Relu6","InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/weights"],"attr":{"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/BatchNorm/beta","InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_mean","InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/Conv2D","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/BatchNorm/beta","InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_mean","InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/Relu6","InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/weights"],"attr":{"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/Conv2D","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/BatchNorm/beta","InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_mean","InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/Relu6","InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/BatchNorm/beta","InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_mean","InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5b/concat/axis"],"attr":{"Tidx":{"type":3},"T":{"type":1},"N":{"i":"4"}},"name":"InceptionV3/Mixed_6c/concat","op":"ConcatV2"},{"input":["InceptionV3/Mixed_6c/concat"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/weights"],"attr":{"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/Relu6"],"attr":{"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"ksize":{"list":{"s":[],"i":["1","3","3","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"padding":{"s":[83,65,77,69]},"T":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_3/AvgPool_0a_3x3/AvgPool","op":"AvgPool"},{"input":["InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6d/Branch_3/AvgPool_0a_3x3/AvgPool","InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/weights"],"attr":{"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/Conv2D","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/BatchNorm/beta","InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_mean","InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/Conv2D","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/BatchNorm/beta","InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_mean","InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/Relu6","InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/Relu6","InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/BatchNorm/beta","InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_mean","InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/Conv2D","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/BatchNorm/beta","InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_mean","InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/Relu6","InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/Conv2D","InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/BatchNorm/beta","InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_mean","InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/Relu6","InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/weights"],"attr":{"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/BatchNorm/beta","InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_mean","InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5b/concat/axis"],"attr":{"T":{"type":1},"N":{"i":"4"},"Tidx":{"type":3}},"name":"InceptionV3/Mixed_6d/concat","op":"ConcatV2"},{"input":["InceptionV3/Mixed_6d/concat"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/Relu6"],"attr":{"ksize":{"list":{"s":[],"i":["1","3","3","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"padding":{"s":[83,65,77,69]},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]}},"name":"InceptionV3/Mixed_6e/Branch_3/AvgPool_0a_3x3/AvgPool","op":"AvgPool"},{"input":["InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6e/Branch_3/AvgPool_0a_3x3/AvgPool","InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/Relu6","InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/weights"],"attr":{"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/BatchNorm/beta","InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_mean","InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/BatchNorm/beta","InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_mean","InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/Relu6","InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/Relu6","InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/weights"],"attr":{"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/BatchNorm/beta","InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_mean","InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/BatchNorm/beta","InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_mean","InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/Relu6","InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/BatchNorm/beta","InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_mean","InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/Relu6","InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/weights"],"attr":{"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/Conv2D","op":"Conv2D"},{"input":["InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/Conv2D","InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/BatchNorm/beta","InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_mean","InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/BatchNorm/FusedBatchNorm","InceptionV3/Mixed_5b/concat/axis"],"attr":{"Tidx":{"type":3},"T":{"type":1},"N":{"i":"4"}},"name":"InceptionV3/Mixed_6e/concat","op":"ConcatV2"},{"input":["InceptionV3/Mixed_6e/concat"],"attr":{"T":{"type":1}},"name":"InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/Relu6","op":"Relu6"},{"input":["InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/Relu6","bottleneck/Mean/reduction_indices"],"attr":{"T":{"type":1},"keep_dims":{"b":true},"Tidx":{"type":3}},"name":"bottleneck/Mean","op":"Mean"},{"input":["bottleneck/Mean","Conv/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"Conv/Conv2D","op":"Conv2D"},{"input":["Conv/Conv2D","Conv/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"Conv/BiasAdd","op":"BiasAdd"}],"library":{"function":[],"gradient":[]},"versions":{"badConsumers":[]}},"weightsManifest":[{"paths":["group1-shard1of9.bin","group1-shard2of9.bin","group1-shard3of9.bin","group1-shard4of9.bin","group1-shard5of9.bin","group1-shard6of9.bin","group1-shard7of9.bin","group1-shard8of9.bin","group1-shard9of9.bin"],"weights":[{"name":"InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/weights","shape":[1,1,768,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/weights","shape":[1,1,768,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/weights","shape":[1,7,192,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/weights","shape":[7,1,192,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/weights","shape":[1,1,768,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/weights","shape":[7,1,192,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/weights","shape":[1,7,192,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/weights","shape":[7,1,192,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/weights","shape":[1,7,192,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/weights","shape":[1,1,768,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/weights","shape":[1,1,768,160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/weights","shape":[1,7,160,160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/BatchNorm/beta","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_mean","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_variance","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/weights","shape":[7,1,160,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/weights","shape":[1,1,768,160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/weights","shape":[7,1,160,160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/BatchNorm/beta","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_mean","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_variance","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/weights","shape":[1,7,160,160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/BatchNorm/beta","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_mean","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_variance","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/weights","shape":[7,1,160,160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/BatchNorm/beta","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_mean","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_variance","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/weights","shape":[1,7,160,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/weights","shape":[1,1,768,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/weights","shape":[1,1,768,160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/weights","shape":[1,7,160,160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/BatchNorm/beta","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_mean","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_variance","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/weights","shape":[7,1,160,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/weights","shape":[1,1,768,160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/weights","shape":[7,1,160,160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/BatchNorm/beta","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_mean","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_variance","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/weights","shape":[1,7,160,160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/BatchNorm/beta","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_mean","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_variance","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/weights","shape":[7,1,160,160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/BatchNorm/beta","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_mean","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_variance","shape":[160],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/weights","shape":[1,7,160,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/weights","shape":[1,1,768,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/weights","shape":[1,1,768,128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/weights","shape":[1,7,128,128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/BatchNorm/beta","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_mean","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0b_1x7/BatchNorm/moving_variance","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/weights","shape":[7,1,128,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0c_7x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/weights","shape":[1,1,768,128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/weights","shape":[7,1,128,128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/BatchNorm/beta","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_mean","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0b_7x1/BatchNorm/moving_variance","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/weights","shape":[1,7,128,128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/BatchNorm/beta","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_mean","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0c_1x7/BatchNorm/moving_variance","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/weights","shape":[7,1,128,128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/BatchNorm/beta","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_mean","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0d_7x1/BatchNorm/moving_variance","shape":[128],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/weights","shape":[1,7,128,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_2/Conv2d_0e_1x7/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/weights","shape":[3,3,288,384],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/BatchNorm/Const","shape":[384],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/BatchNorm/beta","shape":[384],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/BatchNorm/moving_mean","shape":[384],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_0/Conv2d_1a_1x1/BatchNorm/moving_variance","shape":[384],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/weights","shape":[1,1,288,64],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/weights","shape":[3,3,64,96],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/beta","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/moving_mean","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/moving_variance","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/weights","shape":[3,3,96,96],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/BatchNorm/beta","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/BatchNorm/moving_mean","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_1a_1x1/BatchNorm/moving_variance","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/weights","shape":[1,1,288,64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/weights","shape":[1,1,288,48],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","shape":[48],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[48],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[48],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/weights","shape":[5,5,48,64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/BatchNorm/beta","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/BatchNorm/moving_mean","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0b_5x5/BatchNorm/moving_variance","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/weights","shape":[1,1,288,64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/weights","shape":[3,3,64,96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/BatchNorm/beta","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_mean","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_variance","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/weights","shape":[3,3,96,96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/BatchNorm/beta","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_mean","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_variance","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/weights","shape":[1,1,256,64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/weights","shape":[1,1,256,48],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/BatchNorm/beta","shape":[48],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/BatchNorm/moving_mean","shape":[48],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_1/Conv2d_0b_1x1/BatchNorm/moving_variance","shape":[48],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/weights","shape":[5,5,48,64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/BatchNorm/beta","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/BatchNorm/moving_mean","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_1/Conv_1_0c_5x5/BatchNorm/moving_variance","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/weights","shape":[1,1,256,64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/weights","shape":[3,3,64,96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/BatchNorm/beta","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_mean","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_variance","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/weights","shape":[3,3,96,96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/BatchNorm/beta","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_mean","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_variance","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/weights","shape":[1,1,192,64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/BatchNorm/beta","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_0/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/weights","shape":[1,1,192,48],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","shape":[48],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/BatchNorm/beta","shape":[48],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[48],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[48],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/weights","shape":[5,5,48,64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/BatchNorm/beta","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/BatchNorm/moving_mean","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_1/Conv2d_0b_5x5/BatchNorm/moving_variance","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/weights","shape":[1,1,192,64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/BatchNorm/beta","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_mean","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0a_1x1/BatchNorm/moving_variance","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/weights","shape":[3,3,64,96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/BatchNorm/beta","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_mean","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0b_3x3/BatchNorm/moving_variance","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/weights","shape":[3,3,96,96],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm/Const","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/BatchNorm/beta","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_mean","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_2/Conv2d_0c_3x3/BatchNorm/moving_variance","shape":[96],"dtype":"float32"},{"name":"InceptionV3/Conv2d_1a_3x3/weights","shape":[3,3,3,32],"dtype":"float32"},{"name":"InceptionV3/Conv2d_1a_3x3/BatchNorm/beta","shape":[32],"dtype":"float32"},{"name":"InceptionV3/Conv2d_1a_3x3/BatchNorm/moving_mean","shape":[32],"dtype":"float32"},{"name":"InceptionV3/Conv2d_1a_3x3/BatchNorm/moving_variance","shape":[32],"dtype":"float32"},{"name":"InceptionV3/Conv2d_2a_3x3/weights","shape":[3,3,32,32],"dtype":"float32"},{"name":"InceptionV3/Conv2d_2a_3x3/BatchNorm/beta","shape":[32],"dtype":"float32"},{"name":"InceptionV3/Conv2d_2a_3x3/BatchNorm/moving_mean","shape":[32],"dtype":"float32"},{"name":"InceptionV3/Conv2d_2a_3x3/BatchNorm/moving_variance","shape":[32],"dtype":"float32"},{"name":"InceptionV3/Conv2d_2b_3x3/weights","shape":[3,3,32,64],"dtype":"float32"},{"name":"InceptionV3/Conv2d_2b_3x3/BatchNorm/beta","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Conv2d_2b_3x3/BatchNorm/moving_mean","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Conv2d_2b_3x3/BatchNorm/moving_variance","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Conv2d_3b_1x1/weights","shape":[1,1,64,80],"dtype":"float32"},{"name":"InceptionV3/Conv2d_3b_1x1/BatchNorm/Const","shape":[80],"dtype":"float32"},{"name":"InceptionV3/Conv2d_3b_1x1/BatchNorm/beta","shape":[80],"dtype":"float32"},{"name":"InceptionV3/Conv2d_3b_1x1/BatchNorm/moving_mean","shape":[80],"dtype":"float32"},{"name":"InceptionV3/Conv2d_3b_1x1/BatchNorm/moving_variance","shape":[80],"dtype":"float32"},{"name":"InceptionV3/Conv2d_4a_3x3/weights","shape":[3,3,80,192],"dtype":"float32"},{"name":"InceptionV3/Conv2d_4a_3x3/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Conv2d_4a_3x3/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Conv2d_4a_3x3/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/weights","shape":[1,1,192,32],"dtype":"float32"},{"name":"InceptionV3/Conv2d_1a_3x3/BatchNorm/Const","shape":[32],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","shape":[32],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","shape":[32],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance","shape":[32],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/weights","shape":[1,1,256,64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5c/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/weights","shape":[1,1,288,64],"dtype":"float32"},{"name":"InceptionV3/Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm/Const","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_5d/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance","shape":[64],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/weights","shape":[1,1,768,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6b/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/weights","shape":[1,1,768,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6c/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/weights","shape":[1,1,768,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6d/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/weights","shape":[1,1,768,192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_0/Conv2d_0a_1x1/BatchNorm/Const","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/BatchNorm/beta","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_mean","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_6e/Branch_3/Conv2d_0b_1x1/BatchNorm/moving_variance","shape":[192],"dtype":"float32"},{"name":"InceptionV3/Mixed_5b/concat/axis","shape":[],"dtype":"int32"},{"name":"bottleneck/Mean/reduction_indices","shape":[2],"dtype":"int32"},{"name":"Conv/weights","shape":[1,1,768,100],"dtype":"float32"},{"name":"Conv/biases","shape":[100],"dtype":"float32"}]}]} \ No newline at end of file diff --git a/examples/components/webgpu-tensorflow/service/models/transformer/group1-shard1of2.bin b/examples/components/webgpu-tensorflow/service/models/transformer/group1-shard1of2.bin new file mode 100644 index 00000000..5dfa562d Binary files /dev/null and b/examples/components/webgpu-tensorflow/service/models/transformer/group1-shard1of2.bin differ diff --git a/examples/components/webgpu-tensorflow/service/models/transformer/group1-shard2of2.bin b/examples/components/webgpu-tensorflow/service/models/transformer/group1-shard2of2.bin new file mode 100644 index 00000000..60626cf9 Binary files /dev/null and b/examples/components/webgpu-tensorflow/service/models/transformer/group1-shard2of2.bin differ diff --git a/examples/components/webgpu-tensorflow/service/models/transformer/model.json b/examples/components/webgpu-tensorflow/service/models/transformer/model.json new file mode 100644 index 00000000..0d8793e7 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/models/transformer/model.json @@ -0,0 +1 @@ +{"modelTopology":{"node":[{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"3"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/expand/conv3/conv/StyleNorm/Conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/expand/conv3/conv/StyleNorm/Conv/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"32"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/expand/conv2/conv/StyleNorm/Conv/weights","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}}},"name":"style_params/transformer/expand/conv2/conv/StyleNorm/Conv/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/expand/conv1/conv/StyleNorm/Conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/expand/conv1/conv/StyleNorm/Conv/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[2],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":3,"tensorShape":{"dim":[]}}},"dtype":{"type":3}},"name":"transformer/expand/conv2/mul/x","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual5/conv2/StyleNorm/Conv/weights","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}}},"name":"style_params/transformer/residual/residual5/conv2/StyleNorm/Conv/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual5/conv1/StyleNorm/Conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual5/conv1/StyleNorm/Conv/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual4/conv2/StyleNorm/Conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual4/conv2/StyleNorm/Conv/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual4/conv1/StyleNorm/Conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual4/conv1/StyleNorm/Conv/biases","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}}},"name":"style_params/transformer/residual/residual3/conv2/StyleNorm/Conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual3/conv2/StyleNorm/Conv/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual3/conv1/StyleNorm/Conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual3/conv1/StyleNorm/Conv/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual2/conv2/StyleNorm/Conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual2/conv2/StyleNorm/Conv/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual2/conv1/StyleNorm/Conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual2/conv1/StyleNorm/Conv/biases","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}}},"name":"style_params/transformer/residual/residual1/conv2/StyleNorm/Conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual1/conv2/StyleNorm/Conv/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual1/conv1/StyleNorm/Conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual1/conv1/StyleNorm/Conv/biases","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"shape":{"shape":{"dim":[{"size":"-1"},{"size":"-1"},{"size":"-1"},{"size":"3"}]}}},"name":"Placeholder","op":"Placeholder"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"9"},{"size":"9"},{"size":"3"},{"size":"32"}]}}},"dtype":{"type":1}},"name":"transformer/contract/conv1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[1],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}},"dtype":{"type":1}},"name":"transformer/contract/conv1/BatchNorm/Const","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}},"dtype":{"type":1}},"name":"transformer/contract/conv1/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}},"dtype":{"type":1}},"name":"transformer/contract/conv1/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}},"dtype":{"type":1}},"name":"transformer/contract/conv1/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"32"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"transformer/contract/conv2/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[1],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"transformer/contract/conv2/BatchNorm/Const","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"transformer/contract/conv2/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"transformer/contract/conv2/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"transformer/contract/conv2/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"64"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"transformer/contract/conv3/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[1],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"transformer/contract/conv3/BatchNorm/Const","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}}},"name":"transformer/contract/conv3/BatchNorm/beta","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"transformer/contract/conv3/BatchNorm/moving_mean","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"transformer/contract/conv3/BatchNorm/moving_variance","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"128"},{"size":"128"}]}}}},"name":"transformer/residual/residual1/conv1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual1/conv1/StyleNorm/Conv_1/weights","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}}},"name":"style_params/transformer/residual/residual1/conv1/StyleNorm/Conv_1/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"128"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"transformer/residual/residual1/conv2/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual1/conv2/StyleNorm/Conv_1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual1/conv2/StyleNorm/Conv_1/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"128"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"transformer/residual/residual2/conv1/weights","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}}},"name":"style_params/transformer/residual/residual2/conv1/StyleNorm/Conv_1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual2/conv1/StyleNorm/Conv_1/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"128"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"transformer/residual/residual2/conv2/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual2/conv2/StyleNorm/Conv_1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual2/conv2/StyleNorm/Conv_1/biases","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"128"},{"size":"128"}]}}}},"name":"transformer/residual/residual3/conv1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual3/conv1/StyleNorm/Conv_1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual3/conv1/StyleNorm/Conv_1/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"128"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"transformer/residual/residual3/conv2/weights","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}}},"name":"style_params/transformer/residual/residual3/conv2/StyleNorm/Conv_1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual3/conv2/StyleNorm/Conv_1/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"128"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"transformer/residual/residual4/conv1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual4/conv1/StyleNorm/Conv_1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual4/conv1/StyleNorm/Conv_1/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"128"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"transformer/residual/residual4/conv2/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual4/conv2/StyleNorm/Conv_1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual4/conv2/StyleNorm/Conv_1/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"128"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"transformer/residual/residual5/conv1/weights","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}}},"name":"style_params/transformer/residual/residual5/conv1/StyleNorm/Conv_1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual5/conv1/StyleNorm/Conv_1/biases","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"128"},{"size":"128"}]}}}},"name":"transformer/residual/residual5/conv2/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual5/conv2/StyleNorm/Conv_1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"128"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/residual/residual5/conv2/StyleNorm/Conv_1/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"128"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"transformer/expand/conv1/conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"64"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/expand/conv1/conv/StyleNorm/Conv_1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"64"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/expand/conv1/conv/StyleNorm/Conv_1/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":3,"tensorShape":{"dim":[{"size":"4"},{"size":"2"}]}}},"dtype":{"type":3}},"name":"transformer/contract/Pad_1/paddings","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"},{"size":"3"},{"size":"64"},{"size":"32"}]}}},"dtype":{"type":1}},"name":"transformer/expand/conv2/conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"32"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/expand/conv2/conv/StyleNorm/Conv_1/weights","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"32"}]}}}},"name":"style_params/transformer/expand/conv2/conv/StyleNorm/Conv_1/biases","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[2],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":3,"tensorShape":{"dim":[{"size":"1"}]}}},"dtype":{"type":3}},"name":"transformer/expand/conv3/strided_slice/stack_1","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[3],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":3,"tensorShape":{"dim":[{"size":"1"}]}}},"dtype":{"type":3}},"name":"transformer/expand/conv1/strided_slice_1/stack_1","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[1],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":3,"tensorShape":{"dim":[{"size":"1"}]}}},"dtype":{"type":3}},"name":"transformer/expand/conv3/strided_slice/stack","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":3,"tensorShape":{"dim":[{"size":"4"},{"size":"2"}]}}},"dtype":{"type":3}},"name":"transformer/contract/Pad/paddings","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"9"},{"size":"9"},{"size":"32"},{"size":"3"}]}}},"dtype":{"type":1}},"name":"transformer/expand/conv3/conv/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":3,"tensorShape":{"dim":[{"size":"2"}]}}},"dtype":{"type":3}},"name":"transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[0.000009999999747378752],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[]}}},"dtype":{"type":1}},"name":"transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y","op":"Const"},{"input":[],"attr":{"dtype":{"type":1},"shape":{"shape":{"dim":[{"size":"-1"},{"size":"1"},{"size":"1"},{"size":"100"}]}}},"name":"Placeholder_1","op":"Placeholder"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"1"},{"size":"1"},{"size":"100"},{"size":"3"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/expand/conv3/conv/StyleNorm/Conv_1/weights","op":"Const"},{"input":[],"attr":{"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":1,"tensorShape":{"dim":[{"size":"3"}]}}},"dtype":{"type":1}},"name":"style_params/transformer/expand/conv3/conv/StyleNorm/Conv_1/biases","op":"Const"},{"input":[],"attr":{"dtype":{"type":3},"value":{"tensor":{"floatVal":[],"doubleVal":[],"intVal":[1],"stringVal":[],"scomplexVal":[],"int64Val":[],"boolVal":[],"uint32Val":[],"uint64Val":[],"dtype":3,"tensorShape":{"dim":[]}}}},"name":"transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim","op":"Const"},{"input":["Placeholder","transformer/contract/Pad/paddings"],"attr":{"T":{"type":1},"Tpaddings":{"type":3}},"name":"transformer/contract/Pad","op":"Pad"},{"input":["Placeholder_1","style_params/transformer/expand/conv3/conv/StyleNorm/Conv/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/expand/conv3/conv/StyleNorm/Conv/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/expand/conv2/conv/StyleNorm/Conv/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/expand/conv2/conv/StyleNorm/Conv/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/expand/conv1/conv/StyleNorm/Conv/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/expand/conv1/conv/StyleNorm/Conv/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual5/conv2/StyleNorm/Conv/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/residual/residual5/conv2/StyleNorm/Conv/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual5/conv1/StyleNorm/Conv/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"style_params/transformer/residual/residual5/conv1/StyleNorm/Conv/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual4/conv2/StyleNorm/Conv/weights"],"attr":{"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"style_params/transformer/residual/residual4/conv2/StyleNorm/Conv/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual4/conv1/StyleNorm/Conv/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/residual/residual4/conv1/StyleNorm/Conv/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual3/conv2/StyleNorm/Conv/weights"],"attr":{"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/residual/residual3/conv2/StyleNorm/Conv/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual3/conv1/StyleNorm/Conv/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/residual/residual3/conv1/StyleNorm/Conv/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual2/conv2/StyleNorm/Conv/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/residual/residual2/conv2/StyleNorm/Conv/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual2/conv1/StyleNorm/Conv/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/residual/residual2/conv1/StyleNorm/Conv/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual1/conv2/StyleNorm/Conv/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/residual/residual1/conv2/StyleNorm/Conv/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual1/conv1/StyleNorm/Conv/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true}},"name":"style_params/transformer/residual/residual1/conv1/StyleNorm/Conv/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual1/conv1/StyleNorm/Conv_1/weights"],"attr":{"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"style_params/transformer/residual/residual1/conv1/StyleNorm/Conv_1/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual1/conv2/StyleNorm/Conv_1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/residual/residual1/conv2/StyleNorm/Conv_1/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual2/conv1/StyleNorm/Conv_1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/residual/residual2/conv1/StyleNorm/Conv_1/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual2/conv2/StyleNorm/Conv_1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/residual/residual2/conv2/StyleNorm/Conv_1/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual3/conv1/StyleNorm/Conv_1/weights"],"attr":{"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/residual/residual3/conv1/StyleNorm/Conv_1/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual3/conv2/StyleNorm/Conv_1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"style_params/transformer/residual/residual3/conv2/StyleNorm/Conv_1/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual4/conv1/StyleNorm/Conv_1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/residual/residual4/conv1/StyleNorm/Conv_1/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual4/conv2/StyleNorm/Conv_1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"style_params/transformer/residual/residual4/conv2/StyleNorm/Conv_1/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual5/conv1/StyleNorm/Conv_1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/residual/residual5/conv1/StyleNorm/Conv_1/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/residual/residual5/conv2/StyleNorm/Conv_1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/residual/residual5/conv2/StyleNorm/Conv_1/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/expand/conv1/conv/StyleNorm/Conv_1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/expand/conv1/conv/StyleNorm/Conv_1/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/expand/conv2/conv/StyleNorm/Conv_1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[83,65,77,69]}},"name":"style_params/transformer/expand/conv2/conv/StyleNorm/Conv_1/Conv2D","op":"Conv2D"},{"input":["Placeholder_1","style_params/transformer/expand/conv3/conv/StyleNorm/Conv_1/weights"],"attr":{"padding":{"s":[83,65,77,69]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"style_params/transformer/expand/conv3/conv/StyleNorm/Conv_1/Conv2D","op":"Conv2D"},{"input":["transformer/contract/Pad","transformer/contract/conv1/weights"],"attr":{"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"transformer/contract/conv1/Conv2D","op":"Conv2D"},{"input":["style_params/transformer/expand/conv3/conv/StyleNorm/Conv/Conv2D","style_params/transformer/expand/conv3/conv/StyleNorm/Conv/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/expand/conv3/conv/StyleNorm/Conv/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/expand/conv2/conv/StyleNorm/Conv/Conv2D","style_params/transformer/expand/conv2/conv/StyleNorm/Conv/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/expand/conv2/conv/StyleNorm/Conv/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/expand/conv1/conv/StyleNorm/Conv/Conv2D","style_params/transformer/expand/conv1/conv/StyleNorm/Conv/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/expand/conv1/conv/StyleNorm/Conv/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual5/conv2/StyleNorm/Conv/Conv2D","style_params/transformer/residual/residual5/conv2/StyleNorm/Conv/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual5/conv2/StyleNorm/Conv/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual5/conv1/StyleNorm/Conv/Conv2D","style_params/transformer/residual/residual5/conv1/StyleNorm/Conv/biases"],"attr":{"data_format":{"s":[78,72,87,67]},"T":{"type":1}},"name":"style_params/transformer/residual/residual5/conv1/StyleNorm/Conv/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual4/conv2/StyleNorm/Conv/Conv2D","style_params/transformer/residual/residual4/conv2/StyleNorm/Conv/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual4/conv2/StyleNorm/Conv/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual4/conv1/StyleNorm/Conv/Conv2D","style_params/transformer/residual/residual4/conv1/StyleNorm/Conv/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual4/conv1/StyleNorm/Conv/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual3/conv2/StyleNorm/Conv/Conv2D","style_params/transformer/residual/residual3/conv2/StyleNorm/Conv/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual3/conv2/StyleNorm/Conv/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual3/conv1/StyleNorm/Conv/Conv2D","style_params/transformer/residual/residual3/conv1/StyleNorm/Conv/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual3/conv1/StyleNorm/Conv/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual2/conv2/StyleNorm/Conv/Conv2D","style_params/transformer/residual/residual2/conv2/StyleNorm/Conv/biases"],"attr":{"data_format":{"s":[78,72,87,67]},"T":{"type":1}},"name":"style_params/transformer/residual/residual2/conv2/StyleNorm/Conv/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual2/conv1/StyleNorm/Conv/Conv2D","style_params/transformer/residual/residual2/conv1/StyleNorm/Conv/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual2/conv1/StyleNorm/Conv/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual1/conv2/StyleNorm/Conv/Conv2D","style_params/transformer/residual/residual1/conv2/StyleNorm/Conv/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual1/conv2/StyleNorm/Conv/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual1/conv1/StyleNorm/Conv/Conv2D","style_params/transformer/residual/residual1/conv1/StyleNorm/Conv/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual1/conv1/StyleNorm/Conv/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual1/conv1/StyleNorm/Conv_1/Conv2D","style_params/transformer/residual/residual1/conv1/StyleNorm/Conv_1/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual1/conv1/StyleNorm/Conv_1/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual1/conv2/StyleNorm/Conv_1/Conv2D","style_params/transformer/residual/residual1/conv2/StyleNorm/Conv_1/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual1/conv2/StyleNorm/Conv_1/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual2/conv1/StyleNorm/Conv_1/Conv2D","style_params/transformer/residual/residual2/conv1/StyleNorm/Conv_1/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual2/conv1/StyleNorm/Conv_1/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual2/conv2/StyleNorm/Conv_1/Conv2D","style_params/transformer/residual/residual2/conv2/StyleNorm/Conv_1/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual2/conv2/StyleNorm/Conv_1/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual3/conv1/StyleNorm/Conv_1/Conv2D","style_params/transformer/residual/residual3/conv1/StyleNorm/Conv_1/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual3/conv1/StyleNorm/Conv_1/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual3/conv2/StyleNorm/Conv_1/Conv2D","style_params/transformer/residual/residual3/conv2/StyleNorm/Conv_1/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual3/conv2/StyleNorm/Conv_1/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual4/conv1/StyleNorm/Conv_1/Conv2D","style_params/transformer/residual/residual4/conv1/StyleNorm/Conv_1/biases"],"attr":{"data_format":{"s":[78,72,87,67]},"T":{"type":1}},"name":"style_params/transformer/residual/residual4/conv1/StyleNorm/Conv_1/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual4/conv2/StyleNorm/Conv_1/Conv2D","style_params/transformer/residual/residual4/conv2/StyleNorm/Conv_1/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual4/conv2/StyleNorm/Conv_1/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual5/conv1/StyleNorm/Conv_1/Conv2D","style_params/transformer/residual/residual5/conv1/StyleNorm/Conv_1/biases"],"attr":{"data_format":{"s":[78,72,87,67]},"T":{"type":1}},"name":"style_params/transformer/residual/residual5/conv1/StyleNorm/Conv_1/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/residual/residual5/conv2/StyleNorm/Conv_1/Conv2D","style_params/transformer/residual/residual5/conv2/StyleNorm/Conv_1/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/residual/residual5/conv2/StyleNorm/Conv_1/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/expand/conv1/conv/StyleNorm/Conv_1/Conv2D","style_params/transformer/expand/conv1/conv/StyleNorm/Conv_1/biases"],"attr":{"data_format":{"s":[78,72,87,67]},"T":{"type":1}},"name":"style_params/transformer/expand/conv1/conv/StyleNorm/Conv_1/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/expand/conv2/conv/StyleNorm/Conv_1/Conv2D","style_params/transformer/expand/conv2/conv/StyleNorm/Conv_1/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/expand/conv2/conv/StyleNorm/Conv_1/BiasAdd","op":"BiasAdd"},{"input":["style_params/transformer/expand/conv3/conv/StyleNorm/Conv_1/Conv2D","style_params/transformer/expand/conv3/conv/StyleNorm/Conv_1/biases"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]}},"name":"style_params/transformer/expand/conv3/conv/StyleNorm/Conv_1/BiasAdd","op":"BiasAdd"},{"input":["transformer/contract/conv1/Conv2D","transformer/contract/conv1/BatchNorm/Const","transformer/contract/conv1/BatchNorm/beta","transformer/contract/conv1/BatchNorm/moving_mean","transformer/contract/conv1/BatchNorm/moving_variance"],"attr":{"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513},"T":{"type":1}},"name":"transformer/contract/conv1/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["style_params/transformer/expand/conv3/conv/StyleNorm/Conv/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/expand/conv3/conv/StyleNorm/SpatialSqueeze","op":"Squeeze"},{"input":["style_params/transformer/expand/conv2/conv/StyleNorm/Conv/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/expand/conv2/conv/StyleNorm/SpatialSqueeze","op":"Squeeze"},{"input":["style_params/transformer/expand/conv1/conv/StyleNorm/Conv/BiasAdd"],"attr":{"T":{"type":1},"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"style_params/transformer/expand/conv1/conv/StyleNorm/SpatialSqueeze","op":"Squeeze"},{"input":["style_params/transformer/residual/residual5/conv2/StyleNorm/Conv/BiasAdd"],"attr":{"T":{"type":1},"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"style_params/transformer/residual/residual5/conv2/StyleNorm/SpatialSqueeze","op":"Squeeze"},{"input":["style_params/transformer/residual/residual5/conv1/StyleNorm/Conv/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/residual/residual5/conv1/StyleNorm/SpatialSqueeze","op":"Squeeze"},{"input":["style_params/transformer/residual/residual4/conv2/StyleNorm/Conv/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/residual/residual4/conv2/StyleNorm/SpatialSqueeze","op":"Squeeze"},{"input":["style_params/transformer/residual/residual4/conv1/StyleNorm/Conv/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/residual/residual4/conv1/StyleNorm/SpatialSqueeze","op":"Squeeze"},{"input":["style_params/transformer/residual/residual3/conv2/StyleNorm/Conv/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/residual/residual3/conv2/StyleNorm/SpatialSqueeze","op":"Squeeze"},{"input":["style_params/transformer/residual/residual3/conv1/StyleNorm/Conv/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/residual/residual3/conv1/StyleNorm/SpatialSqueeze","op":"Squeeze"},{"input":["style_params/transformer/residual/residual2/conv2/StyleNorm/Conv/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/residual/residual2/conv2/StyleNorm/SpatialSqueeze","op":"Squeeze"},{"input":["style_params/transformer/residual/residual2/conv1/StyleNorm/Conv/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/residual/residual2/conv1/StyleNorm/SpatialSqueeze","op":"Squeeze"},{"input":["style_params/transformer/residual/residual1/conv2/StyleNorm/Conv/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/residual/residual1/conv2/StyleNorm/SpatialSqueeze","op":"Squeeze"},{"input":["style_params/transformer/residual/residual1/conv1/StyleNorm/Conv/BiasAdd"],"attr":{"T":{"type":1},"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"style_params/transformer/residual/residual1/conv1/StyleNorm/SpatialSqueeze","op":"Squeeze"},{"input":["style_params/transformer/residual/residual1/conv1/StyleNorm/Conv_1/BiasAdd"],"attr":{"T":{"type":1},"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"style_params/transformer/residual/residual1/conv1/StyleNorm/SpatialSqueeze_1","op":"Squeeze"},{"input":["style_params/transformer/residual/residual1/conv2/StyleNorm/Conv_1/BiasAdd"],"attr":{"T":{"type":1},"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"style_params/transformer/residual/residual1/conv2/StyleNorm/SpatialSqueeze_1","op":"Squeeze"},{"input":["style_params/transformer/residual/residual2/conv1/StyleNorm/Conv_1/BiasAdd"],"attr":{"T":{"type":1},"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"style_params/transformer/residual/residual2/conv1/StyleNorm/SpatialSqueeze_1","op":"Squeeze"},{"input":["style_params/transformer/residual/residual2/conv2/StyleNorm/Conv_1/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/residual/residual2/conv2/StyleNorm/SpatialSqueeze_1","op":"Squeeze"},{"input":["style_params/transformer/residual/residual3/conv1/StyleNorm/Conv_1/BiasAdd"],"attr":{"T":{"type":1},"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"style_params/transformer/residual/residual3/conv1/StyleNorm/SpatialSqueeze_1","op":"Squeeze"},{"input":["style_params/transformer/residual/residual3/conv2/StyleNorm/Conv_1/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/residual/residual3/conv2/StyleNorm/SpatialSqueeze_1","op":"Squeeze"},{"input":["style_params/transformer/residual/residual4/conv1/StyleNorm/Conv_1/BiasAdd"],"attr":{"T":{"type":1},"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"style_params/transformer/residual/residual4/conv1/StyleNorm/SpatialSqueeze_1","op":"Squeeze"},{"input":["style_params/transformer/residual/residual4/conv2/StyleNorm/Conv_1/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/residual/residual4/conv2/StyleNorm/SpatialSqueeze_1","op":"Squeeze"},{"input":["style_params/transformer/residual/residual5/conv1/StyleNorm/Conv_1/BiasAdd"],"attr":{"T":{"type":1},"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"style_params/transformer/residual/residual5/conv1/StyleNorm/SpatialSqueeze_1","op":"Squeeze"},{"input":["style_params/transformer/residual/residual5/conv2/StyleNorm/Conv_1/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/residual/residual5/conv2/StyleNorm/SpatialSqueeze_1","op":"Squeeze"},{"input":["style_params/transformer/expand/conv1/conv/StyleNorm/Conv_1/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/expand/conv1/conv/StyleNorm/SpatialSqueeze_1","op":"Squeeze"},{"input":["style_params/transformer/expand/conv2/conv/StyleNorm/Conv_1/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/expand/conv2/conv/StyleNorm/SpatialSqueeze_1","op":"Squeeze"},{"input":["style_params/transformer/expand/conv3/conv/StyleNorm/Conv_1/BiasAdd"],"attr":{"squeeze_dims":{"list":{"s":[],"i":["1","2"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"style_params/transformer/expand/conv3/conv/StyleNorm/SpatialSqueeze_1","op":"Squeeze"},{"input":["transformer/contract/conv1/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"transformer/contract/conv1/Relu","op":"Relu"},{"input":["style_params/transformer/expand/conv3/conv/StyleNorm/SpatialSqueeze","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/expand/conv3/conv/StyleNorm/ExpandDims","op":"ExpandDims"},{"input":["style_params/transformer/expand/conv2/conv/StyleNorm/SpatialSqueeze","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"T":{"type":1},"Tdim":{"type":3}},"name":"transformer/expand/conv2/conv/StyleNorm/ExpandDims","op":"ExpandDims"},{"input":["style_params/transformer/expand/conv1/conv/StyleNorm/SpatialSqueeze","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/expand/conv1/conv/StyleNorm/ExpandDims","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual5/conv2/StyleNorm/SpatialSqueeze","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual5/conv2/StyleNorm/ExpandDims","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual5/conv1/StyleNorm/SpatialSqueeze","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual5/conv1/StyleNorm/ExpandDims","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual4/conv2/StyleNorm/SpatialSqueeze","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual4/conv2/StyleNorm/ExpandDims","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual4/conv1/StyleNorm/SpatialSqueeze","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual4/conv1/StyleNorm/ExpandDims","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual3/conv2/StyleNorm/SpatialSqueeze","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual3/conv2/StyleNorm/ExpandDims","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual3/conv1/StyleNorm/SpatialSqueeze","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual3/conv1/StyleNorm/ExpandDims","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual2/conv2/StyleNorm/SpatialSqueeze","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"T":{"type":1},"Tdim":{"type":3}},"name":"transformer/residual/residual2/conv2/StyleNorm/ExpandDims","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual2/conv1/StyleNorm/SpatialSqueeze","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual2/conv1/StyleNorm/ExpandDims","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual1/conv2/StyleNorm/SpatialSqueeze","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual1/conv2/StyleNorm/ExpandDims","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual1/conv1/StyleNorm/SpatialSqueeze","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"T":{"type":1},"Tdim":{"type":3}},"name":"transformer/residual/residual1/conv1/StyleNorm/ExpandDims","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual1/conv1/StyleNorm/SpatialSqueeze_1","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual1/conv1/StyleNorm/ExpandDims_2","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual1/conv2/StyleNorm/SpatialSqueeze_1","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual1/conv2/StyleNorm/ExpandDims_2","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual2/conv1/StyleNorm/SpatialSqueeze_1","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual2/conv1/StyleNorm/ExpandDims_2","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual2/conv2/StyleNorm/SpatialSqueeze_1","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"T":{"type":1},"Tdim":{"type":3}},"name":"transformer/residual/residual2/conv2/StyleNorm/ExpandDims_2","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual3/conv1/StyleNorm/SpatialSqueeze_1","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"T":{"type":1},"Tdim":{"type":3}},"name":"transformer/residual/residual3/conv1/StyleNorm/ExpandDims_2","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual3/conv2/StyleNorm/SpatialSqueeze_1","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual3/conv2/StyleNorm/ExpandDims_2","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual4/conv1/StyleNorm/SpatialSqueeze_1","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual4/conv1/StyleNorm/ExpandDims_2","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual4/conv2/StyleNorm/SpatialSqueeze_1","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual4/conv2/StyleNorm/ExpandDims_2","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual5/conv1/StyleNorm/SpatialSqueeze_1","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual5/conv1/StyleNorm/ExpandDims_2","op":"ExpandDims"},{"input":["style_params/transformer/residual/residual5/conv2/StyleNorm/SpatialSqueeze_1","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual5/conv2/StyleNorm/ExpandDims_2","op":"ExpandDims"},{"input":["style_params/transformer/expand/conv1/conv/StyleNorm/SpatialSqueeze_1","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"T":{"type":1},"Tdim":{"type":3}},"name":"transformer/expand/conv1/conv/StyleNorm/ExpandDims_2","op":"ExpandDims"},{"input":["style_params/transformer/expand/conv2/conv/StyleNorm/SpatialSqueeze_1","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"T":{"type":1},"Tdim":{"type":3}},"name":"transformer/expand/conv2/conv/StyleNorm/ExpandDims_2","op":"ExpandDims"},{"input":["style_params/transformer/expand/conv3/conv/StyleNorm/SpatialSqueeze_1","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/expand/conv3/conv/StyleNorm/ExpandDims_2","op":"ExpandDims"},{"input":["transformer/contract/conv1/Relu","transformer/contract/Pad_1/paddings"],"attr":{"T":{"type":1},"Tpaddings":{"type":3}},"name":"transformer/contract/Pad_1","op":"Pad"},{"input":["transformer/expand/conv3/conv/StyleNorm/ExpandDims","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/expand/conv3/conv/StyleNorm/ExpandDims_1","op":"ExpandDims"},{"input":["transformer/expand/conv2/conv/StyleNorm/ExpandDims","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/expand/conv2/conv/StyleNorm/ExpandDims_1","op":"ExpandDims"},{"input":["transformer/expand/conv1/conv/StyleNorm/ExpandDims","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"T":{"type":1},"Tdim":{"type":3}},"name":"transformer/expand/conv1/conv/StyleNorm/ExpandDims_1","op":"ExpandDims"},{"input":["transformer/residual/residual5/conv2/StyleNorm/ExpandDims","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual5/conv2/StyleNorm/ExpandDims_1","op":"ExpandDims"},{"input":["transformer/residual/residual5/conv1/StyleNorm/ExpandDims","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual5/conv1/StyleNorm/ExpandDims_1","op":"ExpandDims"},{"input":["transformer/residual/residual4/conv2/StyleNorm/ExpandDims","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual4/conv2/StyleNorm/ExpandDims_1","op":"ExpandDims"},{"input":["transformer/residual/residual4/conv1/StyleNorm/ExpandDims","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual4/conv1/StyleNorm/ExpandDims_1","op":"ExpandDims"},{"input":["transformer/residual/residual3/conv2/StyleNorm/ExpandDims","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual3/conv2/StyleNorm/ExpandDims_1","op":"ExpandDims"},{"input":["transformer/residual/residual3/conv1/StyleNorm/ExpandDims","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual3/conv1/StyleNorm/ExpandDims_1","op":"ExpandDims"},{"input":["transformer/residual/residual2/conv2/StyleNorm/ExpandDims","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual2/conv2/StyleNorm/ExpandDims_1","op":"ExpandDims"},{"input":["transformer/residual/residual2/conv1/StyleNorm/ExpandDims","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual2/conv1/StyleNorm/ExpandDims_1","op":"ExpandDims"},{"input":["transformer/residual/residual1/conv2/StyleNorm/ExpandDims","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"T":{"type":1},"Tdim":{"type":3}},"name":"transformer/residual/residual1/conv2/StyleNorm/ExpandDims_1","op":"ExpandDims"},{"input":["transformer/residual/residual1/conv1/StyleNorm/ExpandDims","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual1/conv1/StyleNorm/ExpandDims_1","op":"ExpandDims"},{"input":["transformer/residual/residual1/conv1/StyleNorm/ExpandDims_2","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual1/conv1/StyleNorm/ExpandDims_3","op":"ExpandDims"},{"input":["transformer/residual/residual1/conv2/StyleNorm/ExpandDims_2","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual1/conv2/StyleNorm/ExpandDims_3","op":"ExpandDims"},{"input":["transformer/residual/residual2/conv1/StyleNorm/ExpandDims_2","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual2/conv1/StyleNorm/ExpandDims_3","op":"ExpandDims"},{"input":["transformer/residual/residual2/conv2/StyleNorm/ExpandDims_2","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual2/conv2/StyleNorm/ExpandDims_3","op":"ExpandDims"},{"input":["transformer/residual/residual3/conv1/StyleNorm/ExpandDims_2","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual3/conv1/StyleNorm/ExpandDims_3","op":"ExpandDims"},{"input":["transformer/residual/residual3/conv2/StyleNorm/ExpandDims_2","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"T":{"type":1},"Tdim":{"type":3}},"name":"transformer/residual/residual3/conv2/StyleNorm/ExpandDims_3","op":"ExpandDims"},{"input":["transformer/residual/residual4/conv1/StyleNorm/ExpandDims_2","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"T":{"type":1},"Tdim":{"type":3}},"name":"transformer/residual/residual4/conv1/StyleNorm/ExpandDims_3","op":"ExpandDims"},{"input":["transformer/residual/residual4/conv2/StyleNorm/ExpandDims_2","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual4/conv2/StyleNorm/ExpandDims_3","op":"ExpandDims"},{"input":["transformer/residual/residual5/conv1/StyleNorm/ExpandDims_2","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual5/conv1/StyleNorm/ExpandDims_3","op":"ExpandDims"},{"input":["transformer/residual/residual5/conv2/StyleNorm/ExpandDims_2","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual5/conv2/StyleNorm/ExpandDims_3","op":"ExpandDims"},{"input":["transformer/expand/conv1/conv/StyleNorm/ExpandDims_2","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/expand/conv1/conv/StyleNorm/ExpandDims_3","op":"ExpandDims"},{"input":["transformer/expand/conv2/conv/StyleNorm/ExpandDims_2","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"Tdim":{"type":3},"T":{"type":1}},"name":"transformer/expand/conv2/conv/StyleNorm/ExpandDims_3","op":"ExpandDims"},{"input":["transformer/expand/conv3/conv/StyleNorm/ExpandDims_2","transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim"],"attr":{"T":{"type":1},"Tdim":{"type":3}},"name":"transformer/expand/conv3/conv/StyleNorm/ExpandDims_3","op":"ExpandDims"},{"input":["transformer/contract/Pad_1","transformer/contract/conv2/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","2","2","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]}},"name":"transformer/contract/conv2/Conv2D","op":"Conv2D"},{"input":["transformer/contract/conv2/Conv2D","transformer/contract/conv2/BatchNorm/Const","transformer/contract/conv2/BatchNorm/beta","transformer/contract/conv2/BatchNorm/moving_mean","transformer/contract/conv2/BatchNorm/moving_variance"],"attr":{"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false},"epsilon":{"f":0.0010000000474974513}},"name":"transformer/contract/conv2/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["transformer/contract/conv2/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"transformer/contract/conv2/Relu","op":"Relu"},{"input":["transformer/contract/conv2/Relu","transformer/contract/Pad_1/paddings"],"attr":{"T":{"type":1},"Tpaddings":{"type":3}},"name":"transformer/contract/Pad_2","op":"Pad"},{"input":["transformer/contract/Pad_2","transformer/contract/conv3/weights"],"attr":{"strides":{"list":{"s":[],"i":["1","2","2","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"transformer/contract/conv3/Conv2D","op":"Conv2D"},{"input":["transformer/contract/conv3/Conv2D","transformer/contract/conv3/BatchNorm/Const","transformer/contract/conv3/BatchNorm/beta","transformer/contract/conv3/BatchNorm/moving_mean","transformer/contract/conv3/BatchNorm/moving_variance"],"attr":{"epsilon":{"f":0.0010000000474974513},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"is_training":{"b":false}},"name":"transformer/contract/conv3/BatchNorm/FusedBatchNorm","op":"FusedBatchNorm"},{"input":["transformer/contract/conv3/BatchNorm/FusedBatchNorm"],"attr":{"T":{"type":1}},"name":"transformer/contract/conv3/Relu","op":"Relu"},{"input":["transformer/contract/conv3/Relu","transformer/contract/Pad_1/paddings"],"attr":{"T":{"type":1},"Tpaddings":{"type":3}},"name":"transformer/residual/residual1/Pad","op":"Pad"},{"input":["transformer/residual/residual1/Pad","transformer/residual/residual1/conv1/weights"],"attr":{"padding":{"s":[86,65,76,73,68]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"transformer/residual/residual1/conv1/Conv2D","op":"Conv2D"},{"input":["transformer/residual/residual1/conv1/Conv2D","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/residual/residual1/conv1/StyleNorm/moments/mean","op":"Mean"},{"input":["transformer/residual/residual1/conv1/Conv2D","transformer/residual/residual1/conv1/StyleNorm/moments/mean"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv1/StyleNorm/moments/SquaredDifference","op":"SquaredDifference"},{"input":["transformer/residual/residual1/conv1/StyleNorm/moments/SquaredDifference","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/residual/residual1/conv1/StyleNorm/moments/variance","op":"Mean"},{"input":["transformer/residual/residual1/conv1/StyleNorm/moments/variance","transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv1/StyleNorm/batchnorm/add","op":"Add"},{"input":["transformer/residual/residual1/conv1/StyleNorm/batchnorm/add"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv1/StyleNorm/batchnorm/Rsqrt","op":"Rsqrt"},{"input":["transformer/residual/residual1/conv1/StyleNorm/batchnorm/Rsqrt","transformer/residual/residual1/conv1/StyleNorm/ExpandDims_3"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv1/StyleNorm/batchnorm/mul","op":"Mul"},{"input":["transformer/residual/residual1/conv1/Conv2D","transformer/residual/residual1/conv1/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv1/StyleNorm/batchnorm/mul_1","op":"Mul"},{"input":["transformer/residual/residual1/conv1/StyleNorm/moments/mean","transformer/residual/residual1/conv1/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv1/StyleNorm/batchnorm/mul_2","op":"Mul"},{"input":["transformer/residual/residual1/conv1/StyleNorm/ExpandDims_1","transformer/residual/residual1/conv1/StyleNorm/batchnorm/mul_2"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv1/StyleNorm/batchnorm/sub","op":"Sub"},{"input":["transformer/residual/residual1/conv1/StyleNorm/batchnorm/mul_1","transformer/residual/residual1/conv1/StyleNorm/batchnorm/sub"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv1/StyleNorm/batchnorm/add_1","op":"Add"},{"input":["transformer/residual/residual1/conv1/StyleNorm/batchnorm/add_1"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv1/Relu","op":"Relu"},{"input":["transformer/residual/residual1/conv1/Relu","transformer/contract/Pad_1/paddings"],"attr":{"T":{"type":1},"Tpaddings":{"type":3}},"name":"transformer/residual/residual1/Pad_1","op":"Pad"},{"input":["transformer/residual/residual1/Pad_1","transformer/residual/residual1/conv2/weights"],"attr":{"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"transformer/residual/residual1/conv2/Conv2D","op":"Conv2D"},{"input":["transformer/residual/residual1/conv2/Conv2D","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"T":{"type":1},"Tidx":{"type":3},"keep_dims":{"b":true}},"name":"transformer/residual/residual1/conv2/StyleNorm/moments/mean","op":"Mean"},{"input":["transformer/residual/residual1/conv2/Conv2D","transformer/residual/residual1/conv2/StyleNorm/moments/mean"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv2/StyleNorm/moments/SquaredDifference","op":"SquaredDifference"},{"input":["transformer/residual/residual1/conv2/StyleNorm/moments/SquaredDifference","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"T":{"type":1},"Tidx":{"type":3},"keep_dims":{"b":true}},"name":"transformer/residual/residual1/conv2/StyleNorm/moments/variance","op":"Mean"},{"input":["transformer/residual/residual1/conv2/StyleNorm/moments/variance","transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv2/StyleNorm/batchnorm/add","op":"Add"},{"input":["transformer/residual/residual1/conv2/StyleNorm/batchnorm/add"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv2/StyleNorm/batchnorm/Rsqrt","op":"Rsqrt"},{"input":["transformer/residual/residual1/conv2/StyleNorm/batchnorm/Rsqrt","transformer/residual/residual1/conv2/StyleNorm/ExpandDims_3"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv2/StyleNorm/batchnorm/mul","op":"Mul"},{"input":["transformer/residual/residual1/conv2/Conv2D","transformer/residual/residual1/conv2/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv2/StyleNorm/batchnorm/mul_1","op":"Mul"},{"input":["transformer/residual/residual1/conv2/StyleNorm/moments/mean","transformer/residual/residual1/conv2/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv2/StyleNorm/batchnorm/mul_2","op":"Mul"},{"input":["transformer/residual/residual1/conv2/StyleNorm/ExpandDims_1","transformer/residual/residual1/conv2/StyleNorm/batchnorm/mul_2"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv2/StyleNorm/batchnorm/sub","op":"Sub"},{"input":["transformer/residual/residual1/conv2/StyleNorm/batchnorm/mul_1","transformer/residual/residual1/conv2/StyleNorm/batchnorm/sub"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/conv2/StyleNorm/batchnorm/add_1","op":"Add"},{"input":["transformer/contract/conv3/Relu","transformer/residual/residual1/conv2/StyleNorm/batchnorm/add_1"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual1/add","op":"Add"},{"input":["transformer/residual/residual1/add","transformer/contract/Pad_1/paddings"],"attr":{"T":{"type":1},"Tpaddings":{"type":3}},"name":"transformer/residual/residual2/Pad","op":"Pad"},{"input":["transformer/residual/residual2/Pad","transformer/residual/residual2/conv1/weights"],"attr":{"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"transformer/residual/residual2/conv1/Conv2D","op":"Conv2D"},{"input":["transformer/residual/residual2/conv1/Conv2D","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/residual/residual2/conv1/StyleNorm/moments/mean","op":"Mean"},{"input":["transformer/residual/residual2/conv1/Conv2D","transformer/residual/residual2/conv1/StyleNorm/moments/mean"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv1/StyleNorm/moments/SquaredDifference","op":"SquaredDifference"},{"input":["transformer/residual/residual2/conv1/StyleNorm/moments/SquaredDifference","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/residual/residual2/conv1/StyleNorm/moments/variance","op":"Mean"},{"input":["transformer/residual/residual2/conv1/StyleNorm/moments/variance","transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv1/StyleNorm/batchnorm/add","op":"Add"},{"input":["transformer/residual/residual2/conv1/StyleNorm/batchnorm/add"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv1/StyleNorm/batchnorm/Rsqrt","op":"Rsqrt"},{"input":["transformer/residual/residual2/conv1/StyleNorm/batchnorm/Rsqrt","transformer/residual/residual2/conv1/StyleNorm/ExpandDims_3"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv1/StyleNorm/batchnorm/mul","op":"Mul"},{"input":["transformer/residual/residual2/conv1/Conv2D","transformer/residual/residual2/conv1/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv1/StyleNorm/batchnorm/mul_1","op":"Mul"},{"input":["transformer/residual/residual2/conv1/StyleNorm/moments/mean","transformer/residual/residual2/conv1/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv1/StyleNorm/batchnorm/mul_2","op":"Mul"},{"input":["transformer/residual/residual2/conv1/StyleNorm/ExpandDims_1","transformer/residual/residual2/conv1/StyleNorm/batchnorm/mul_2"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv1/StyleNorm/batchnorm/sub","op":"Sub"},{"input":["transformer/residual/residual2/conv1/StyleNorm/batchnorm/mul_1","transformer/residual/residual2/conv1/StyleNorm/batchnorm/sub"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv1/StyleNorm/batchnorm/add_1","op":"Add"},{"input":["transformer/residual/residual2/conv1/StyleNorm/batchnorm/add_1"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv1/Relu","op":"Relu"},{"input":["transformer/residual/residual2/conv1/Relu","transformer/contract/Pad_1/paddings"],"attr":{"T":{"type":1},"Tpaddings":{"type":3}},"name":"transformer/residual/residual2/Pad_1","op":"Pad"},{"input":["transformer/residual/residual2/Pad_1","transformer/residual/residual2/conv2/weights"],"attr":{"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"transformer/residual/residual2/conv2/Conv2D","op":"Conv2D"},{"input":["transformer/residual/residual2/conv2/Conv2D","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"T":{"type":1},"Tidx":{"type":3},"keep_dims":{"b":true}},"name":"transformer/residual/residual2/conv2/StyleNorm/moments/mean","op":"Mean"},{"input":["transformer/residual/residual2/conv2/Conv2D","transformer/residual/residual2/conv2/StyleNorm/moments/mean"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv2/StyleNorm/moments/SquaredDifference","op":"SquaredDifference"},{"input":["transformer/residual/residual2/conv2/StyleNorm/moments/SquaredDifference","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"T":{"type":1},"Tidx":{"type":3},"keep_dims":{"b":true}},"name":"transformer/residual/residual2/conv2/StyleNorm/moments/variance","op":"Mean"},{"input":["transformer/residual/residual2/conv2/StyleNorm/moments/variance","transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv2/StyleNorm/batchnorm/add","op":"Add"},{"input":["transformer/residual/residual2/conv2/StyleNorm/batchnorm/add"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv2/StyleNorm/batchnorm/Rsqrt","op":"Rsqrt"},{"input":["transformer/residual/residual2/conv2/StyleNorm/batchnorm/Rsqrt","transformer/residual/residual2/conv2/StyleNorm/ExpandDims_3"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv2/StyleNorm/batchnorm/mul","op":"Mul"},{"input":["transformer/residual/residual2/conv2/Conv2D","transformer/residual/residual2/conv2/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv2/StyleNorm/batchnorm/mul_1","op":"Mul"},{"input":["transformer/residual/residual2/conv2/StyleNorm/moments/mean","transformer/residual/residual2/conv2/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv2/StyleNorm/batchnorm/mul_2","op":"Mul"},{"input":["transformer/residual/residual2/conv2/StyleNorm/ExpandDims_1","transformer/residual/residual2/conv2/StyleNorm/batchnorm/mul_2"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv2/StyleNorm/batchnorm/sub","op":"Sub"},{"input":["transformer/residual/residual2/conv2/StyleNorm/batchnorm/mul_1","transformer/residual/residual2/conv2/StyleNorm/batchnorm/sub"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/conv2/StyleNorm/batchnorm/add_1","op":"Add"},{"input":["transformer/residual/residual1/add","transformer/residual/residual2/conv2/StyleNorm/batchnorm/add_1"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual2/add","op":"Add"},{"input":["transformer/residual/residual2/add","transformer/contract/Pad_1/paddings"],"attr":{"T":{"type":1},"Tpaddings":{"type":3}},"name":"transformer/residual/residual3/Pad","op":"Pad"},{"input":["transformer/residual/residual3/Pad","transformer/residual/residual3/conv1/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]}},"name":"transformer/residual/residual3/conv1/Conv2D","op":"Conv2D"},{"input":["transformer/residual/residual3/conv1/Conv2D","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/residual/residual3/conv1/StyleNorm/moments/mean","op":"Mean"},{"input":["transformer/residual/residual3/conv1/Conv2D","transformer/residual/residual3/conv1/StyleNorm/moments/mean"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv1/StyleNorm/moments/SquaredDifference","op":"SquaredDifference"},{"input":["transformer/residual/residual3/conv1/StyleNorm/moments/SquaredDifference","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"T":{"type":1},"Tidx":{"type":3},"keep_dims":{"b":true}},"name":"transformer/residual/residual3/conv1/StyleNorm/moments/variance","op":"Mean"},{"input":["transformer/residual/residual3/conv1/StyleNorm/moments/variance","transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv1/StyleNorm/batchnorm/add","op":"Add"},{"input":["transformer/residual/residual3/conv1/StyleNorm/batchnorm/add"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv1/StyleNorm/batchnorm/Rsqrt","op":"Rsqrt"},{"input":["transformer/residual/residual3/conv1/StyleNorm/batchnorm/Rsqrt","transformer/residual/residual3/conv1/StyleNorm/ExpandDims_3"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv1/StyleNorm/batchnorm/mul","op":"Mul"},{"input":["transformer/residual/residual3/conv1/Conv2D","transformer/residual/residual3/conv1/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv1/StyleNorm/batchnorm/mul_1","op":"Mul"},{"input":["transformer/residual/residual3/conv1/StyleNorm/moments/mean","transformer/residual/residual3/conv1/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv1/StyleNorm/batchnorm/mul_2","op":"Mul"},{"input":["transformer/residual/residual3/conv1/StyleNorm/ExpandDims_1","transformer/residual/residual3/conv1/StyleNorm/batchnorm/mul_2"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv1/StyleNorm/batchnorm/sub","op":"Sub"},{"input":["transformer/residual/residual3/conv1/StyleNorm/batchnorm/mul_1","transformer/residual/residual3/conv1/StyleNorm/batchnorm/sub"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv1/StyleNorm/batchnorm/add_1","op":"Add"},{"input":["transformer/residual/residual3/conv1/StyleNorm/batchnorm/add_1"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv1/Relu","op":"Relu"},{"input":["transformer/residual/residual3/conv1/Relu","transformer/contract/Pad_1/paddings"],"attr":{"Tpaddings":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual3/Pad_1","op":"Pad"},{"input":["transformer/residual/residual3/Pad_1","transformer/residual/residual3/conv2/weights"],"attr":{"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"transformer/residual/residual3/conv2/Conv2D","op":"Conv2D"},{"input":["transformer/residual/residual3/conv2/Conv2D","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/residual/residual3/conv2/StyleNorm/moments/mean","op":"Mean"},{"input":["transformer/residual/residual3/conv2/Conv2D","transformer/residual/residual3/conv2/StyleNorm/moments/mean"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv2/StyleNorm/moments/SquaredDifference","op":"SquaredDifference"},{"input":["transformer/residual/residual3/conv2/StyleNorm/moments/SquaredDifference","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/residual/residual3/conv2/StyleNorm/moments/variance","op":"Mean"},{"input":["transformer/residual/residual3/conv2/StyleNorm/moments/variance","transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv2/StyleNorm/batchnorm/add","op":"Add"},{"input":["transformer/residual/residual3/conv2/StyleNorm/batchnorm/add"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv2/StyleNorm/batchnorm/Rsqrt","op":"Rsqrt"},{"input":["transformer/residual/residual3/conv2/StyleNorm/batchnorm/Rsqrt","transformer/residual/residual3/conv2/StyleNorm/ExpandDims_3"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv2/StyleNorm/batchnorm/mul","op":"Mul"},{"input":["transformer/residual/residual3/conv2/Conv2D","transformer/residual/residual3/conv2/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv2/StyleNorm/batchnorm/mul_1","op":"Mul"},{"input":["transformer/residual/residual3/conv2/StyleNorm/moments/mean","transformer/residual/residual3/conv2/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv2/StyleNorm/batchnorm/mul_2","op":"Mul"},{"input":["transformer/residual/residual3/conv2/StyleNorm/ExpandDims_1","transformer/residual/residual3/conv2/StyleNorm/batchnorm/mul_2"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv2/StyleNorm/batchnorm/sub","op":"Sub"},{"input":["transformer/residual/residual3/conv2/StyleNorm/batchnorm/mul_1","transformer/residual/residual3/conv2/StyleNorm/batchnorm/sub"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/conv2/StyleNorm/batchnorm/add_1","op":"Add"},{"input":["transformer/residual/residual2/add","transformer/residual/residual3/conv2/StyleNorm/batchnorm/add_1"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual3/add","op":"Add"},{"input":["transformer/residual/residual3/add","transformer/contract/Pad_1/paddings"],"attr":{"T":{"type":1},"Tpaddings":{"type":3}},"name":"transformer/residual/residual4/Pad","op":"Pad"},{"input":["transformer/residual/residual4/Pad","transformer/residual/residual4/conv1/weights"],"attr":{"padding":{"s":[86,65,76,73,68]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"transformer/residual/residual4/conv1/Conv2D","op":"Conv2D"},{"input":["transformer/residual/residual4/conv1/Conv2D","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/residual/residual4/conv1/StyleNorm/moments/mean","op":"Mean"},{"input":["transformer/residual/residual4/conv1/Conv2D","transformer/residual/residual4/conv1/StyleNorm/moments/mean"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv1/StyleNorm/moments/SquaredDifference","op":"SquaredDifference"},{"input":["transformer/residual/residual4/conv1/StyleNorm/moments/SquaredDifference","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/residual/residual4/conv1/StyleNorm/moments/variance","op":"Mean"},{"input":["transformer/residual/residual4/conv1/StyleNorm/moments/variance","transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv1/StyleNorm/batchnorm/add","op":"Add"},{"input":["transformer/residual/residual4/conv1/StyleNorm/batchnorm/add"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv1/StyleNorm/batchnorm/Rsqrt","op":"Rsqrt"},{"input":["transformer/residual/residual4/conv1/StyleNorm/batchnorm/Rsqrt","transformer/residual/residual4/conv1/StyleNorm/ExpandDims_3"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv1/StyleNorm/batchnorm/mul","op":"Mul"},{"input":["transformer/residual/residual4/conv1/Conv2D","transformer/residual/residual4/conv1/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv1/StyleNorm/batchnorm/mul_1","op":"Mul"},{"input":["transformer/residual/residual4/conv1/StyleNorm/moments/mean","transformer/residual/residual4/conv1/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv1/StyleNorm/batchnorm/mul_2","op":"Mul"},{"input":["transformer/residual/residual4/conv1/StyleNorm/ExpandDims_1","transformer/residual/residual4/conv1/StyleNorm/batchnorm/mul_2"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv1/StyleNorm/batchnorm/sub","op":"Sub"},{"input":["transformer/residual/residual4/conv1/StyleNorm/batchnorm/mul_1","transformer/residual/residual4/conv1/StyleNorm/batchnorm/sub"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv1/StyleNorm/batchnorm/add_1","op":"Add"},{"input":["transformer/residual/residual4/conv1/StyleNorm/batchnorm/add_1"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv1/Relu","op":"Relu"},{"input":["transformer/residual/residual4/conv1/Relu","transformer/contract/Pad_1/paddings"],"attr":{"Tpaddings":{"type":3},"T":{"type":1}},"name":"transformer/residual/residual4/Pad_1","op":"Pad"},{"input":["transformer/residual/residual4/Pad_1","transformer/residual/residual4/conv2/weights"],"attr":{"padding":{"s":[86,65,76,73,68]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"transformer/residual/residual4/conv2/Conv2D","op":"Conv2D"},{"input":["transformer/residual/residual4/conv2/Conv2D","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"T":{"type":1},"Tidx":{"type":3},"keep_dims":{"b":true}},"name":"transformer/residual/residual4/conv2/StyleNorm/moments/mean","op":"Mean"},{"input":["transformer/residual/residual4/conv2/Conv2D","transformer/residual/residual4/conv2/StyleNorm/moments/mean"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv2/StyleNorm/moments/SquaredDifference","op":"SquaredDifference"},{"input":["transformer/residual/residual4/conv2/StyleNorm/moments/SquaredDifference","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"T":{"type":1},"Tidx":{"type":3},"keep_dims":{"b":true}},"name":"transformer/residual/residual4/conv2/StyleNorm/moments/variance","op":"Mean"},{"input":["transformer/residual/residual4/conv2/StyleNorm/moments/variance","transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv2/StyleNorm/batchnorm/add","op":"Add"},{"input":["transformer/residual/residual4/conv2/StyleNorm/batchnorm/add"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv2/StyleNorm/batchnorm/Rsqrt","op":"Rsqrt"},{"input":["transformer/residual/residual4/conv2/StyleNorm/batchnorm/Rsqrt","transformer/residual/residual4/conv2/StyleNorm/ExpandDims_3"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv2/StyleNorm/batchnorm/mul","op":"Mul"},{"input":["transformer/residual/residual4/conv2/Conv2D","transformer/residual/residual4/conv2/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv2/StyleNorm/batchnorm/mul_1","op":"Mul"},{"input":["transformer/residual/residual4/conv2/StyleNorm/moments/mean","transformer/residual/residual4/conv2/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv2/StyleNorm/batchnorm/mul_2","op":"Mul"},{"input":["transformer/residual/residual4/conv2/StyleNorm/ExpandDims_1","transformer/residual/residual4/conv2/StyleNorm/batchnorm/mul_2"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv2/StyleNorm/batchnorm/sub","op":"Sub"},{"input":["transformer/residual/residual4/conv2/StyleNorm/batchnorm/mul_1","transformer/residual/residual4/conv2/StyleNorm/batchnorm/sub"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/conv2/StyleNorm/batchnorm/add_1","op":"Add"},{"input":["transformer/residual/residual3/add","transformer/residual/residual4/conv2/StyleNorm/batchnorm/add_1"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual4/add","op":"Add"},{"input":["transformer/residual/residual4/add","transformer/contract/Pad_1/paddings"],"attr":{"T":{"type":1},"Tpaddings":{"type":3}},"name":"transformer/residual/residual5/Pad","op":"Pad"},{"input":["transformer/residual/residual5/Pad","transformer/residual/residual5/conv1/weights"],"attr":{"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}}},"name":"transformer/residual/residual5/conv1/Conv2D","op":"Conv2D"},{"input":["transformer/residual/residual5/conv1/Conv2D","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"T":{"type":1},"Tidx":{"type":3},"keep_dims":{"b":true}},"name":"transformer/residual/residual5/conv1/StyleNorm/moments/mean","op":"Mean"},{"input":["transformer/residual/residual5/conv1/Conv2D","transformer/residual/residual5/conv1/StyleNorm/moments/mean"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv1/StyleNorm/moments/SquaredDifference","op":"SquaredDifference"},{"input":["transformer/residual/residual5/conv1/StyleNorm/moments/SquaredDifference","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/residual/residual5/conv1/StyleNorm/moments/variance","op":"Mean"},{"input":["transformer/residual/residual5/conv1/StyleNorm/moments/variance","transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv1/StyleNorm/batchnorm/add","op":"Add"},{"input":["transformer/residual/residual5/conv1/StyleNorm/batchnorm/add"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv1/StyleNorm/batchnorm/Rsqrt","op":"Rsqrt"},{"input":["transformer/residual/residual5/conv1/StyleNorm/batchnorm/Rsqrt","transformer/residual/residual5/conv1/StyleNorm/ExpandDims_3"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv1/StyleNorm/batchnorm/mul","op":"Mul"},{"input":["transformer/residual/residual5/conv1/Conv2D","transformer/residual/residual5/conv1/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv1/StyleNorm/batchnorm/mul_1","op":"Mul"},{"input":["transformer/residual/residual5/conv1/StyleNorm/moments/mean","transformer/residual/residual5/conv1/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv1/StyleNorm/batchnorm/mul_2","op":"Mul"},{"input":["transformer/residual/residual5/conv1/StyleNorm/ExpandDims_1","transformer/residual/residual5/conv1/StyleNorm/batchnorm/mul_2"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv1/StyleNorm/batchnorm/sub","op":"Sub"},{"input":["transformer/residual/residual5/conv1/StyleNorm/batchnorm/mul_1","transformer/residual/residual5/conv1/StyleNorm/batchnorm/sub"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv1/StyleNorm/batchnorm/add_1","op":"Add"},{"input":["transformer/residual/residual5/conv1/StyleNorm/batchnorm/add_1"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv1/Relu","op":"Relu"},{"input":["transformer/residual/residual5/conv1/Relu","transformer/contract/Pad_1/paddings"],"attr":{"T":{"type":1},"Tpaddings":{"type":3}},"name":"transformer/residual/residual5/Pad_1","op":"Pad"},{"input":["transformer/residual/residual5/Pad_1","transformer/residual/residual5/conv2/weights"],"attr":{"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1}},"name":"transformer/residual/residual5/conv2/Conv2D","op":"Conv2D"},{"input":["transformer/residual/residual5/conv2/Conv2D","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"T":{"type":1},"Tidx":{"type":3},"keep_dims":{"b":true}},"name":"transformer/residual/residual5/conv2/StyleNorm/moments/mean","op":"Mean"},{"input":["transformer/residual/residual5/conv2/Conv2D","transformer/residual/residual5/conv2/StyleNorm/moments/mean"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv2/StyleNorm/moments/SquaredDifference","op":"SquaredDifference"},{"input":["transformer/residual/residual5/conv2/StyleNorm/moments/SquaredDifference","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/residual/residual5/conv2/StyleNorm/moments/variance","op":"Mean"},{"input":["transformer/residual/residual5/conv2/StyleNorm/moments/variance","transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv2/StyleNorm/batchnorm/add","op":"Add"},{"input":["transformer/residual/residual5/conv2/StyleNorm/batchnorm/add"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv2/StyleNorm/batchnorm/Rsqrt","op":"Rsqrt"},{"input":["transformer/residual/residual5/conv2/StyleNorm/batchnorm/Rsqrt","transformer/residual/residual5/conv2/StyleNorm/ExpandDims_3"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv2/StyleNorm/batchnorm/mul","op":"Mul"},{"input":["transformer/residual/residual5/conv2/Conv2D","transformer/residual/residual5/conv2/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv2/StyleNorm/batchnorm/mul_1","op":"Mul"},{"input":["transformer/residual/residual5/conv2/StyleNorm/moments/mean","transformer/residual/residual5/conv2/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv2/StyleNorm/batchnorm/mul_2","op":"Mul"},{"input":["transformer/residual/residual5/conv2/StyleNorm/ExpandDims_1","transformer/residual/residual5/conv2/StyleNorm/batchnorm/mul_2"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv2/StyleNorm/batchnorm/sub","op":"Sub"},{"input":["transformer/residual/residual5/conv2/StyleNorm/batchnorm/mul_1","transformer/residual/residual5/conv2/StyleNorm/batchnorm/sub"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/conv2/StyleNorm/batchnorm/add_1","op":"Add"},{"input":["transformer/residual/residual4/add","transformer/residual/residual5/conv2/StyleNorm/batchnorm/add_1"],"attr":{"T":{"type":1}},"name":"transformer/residual/residual5/add","op":"Add"},{"input":["transformer/residual/residual5/add"],"attr":{"out_type":{"type":3},"T":{"type":1}},"name":"transformer/expand/conv1/Shape","op":"Shape"},{"input":["transformer/expand/conv1/Shape","transformer/expand/conv3/strided_slice/stack","transformer/expand/conv3/strided_slice/stack_1","transformer/expand/conv3/strided_slice/stack"],"attr":{"shrink_axis_mask":{"i":"1"},"begin_mask":{"i":"0"},"ellipsis_mask":{"i":"0"},"new_axis_mask":{"i":"0"},"end_mask":{"i":"0"},"T":{"type":3},"Index":{"type":3}},"name":"transformer/expand/conv1/strided_slice","op":"StridedSlice"},{"input":["transformer/expand/conv1/Shape","transformer/expand/conv3/strided_slice/stack_1","transformer/expand/conv1/strided_slice_1/stack_1","transformer/expand/conv3/strided_slice/stack"],"attr":{"Index":{"type":3},"T":{"type":3},"shrink_axis_mask":{"i":"1"},"begin_mask":{"i":"0"},"ellipsis_mask":{"i":"0"},"new_axis_mask":{"i":"0"},"end_mask":{"i":"0"}},"name":"transformer/expand/conv1/strided_slice_1","op":"StridedSlice"},{"input":["transformer/expand/conv2/mul/x","transformer/expand/conv1/strided_slice"],"attr":{"T":{"type":3}},"name":"transformer/expand/conv1/mul","op":"Mul"},{"input":["transformer/expand/conv2/mul/x","transformer/expand/conv1/strided_slice_1"],"attr":{"T":{"type":3}},"name":"transformer/expand/conv1/mul_1","op":"Mul"},{"input":["transformer/expand/conv1/mul","transformer/expand/conv1/mul_1"],"attr":{"T":{"type":3},"axis":{"i":"0"},"N":{"i":"2"}},"name":"transformer/expand/conv1/ResizeNearestNeighbor/size","op":"Pack"},{"input":["transformer/residual/residual5/add","transformer/expand/conv1/ResizeNearestNeighbor/size"],"attr":{"align_corners":{"b":false},"T":{"type":1}},"name":"transformer/expand/conv1/ResizeNearestNeighbor","op":"ResizeNearestNeighbor"},{"input":["transformer/expand/conv1/ResizeNearestNeighbor","transformer/contract/Pad_1/paddings"],"attr":{"T":{"type":1},"Tpaddings":{"type":3}},"name":"transformer/expand/conv1/Pad","op":"Pad"},{"input":["transformer/expand/conv1/Pad","transformer/expand/conv1/conv/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]}},"name":"transformer/expand/conv1/conv/Conv2D","op":"Conv2D"},{"input":["transformer/expand/conv1/conv/Conv2D","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/expand/conv1/conv/StyleNorm/moments/mean","op":"Mean"},{"input":["transformer/expand/conv1/conv/Conv2D","transformer/expand/conv1/conv/StyleNorm/moments/mean"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv1/conv/StyleNorm/moments/SquaredDifference","op":"SquaredDifference"},{"input":["transformer/expand/conv1/conv/StyleNorm/moments/SquaredDifference","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"T":{"type":1},"Tidx":{"type":3},"keep_dims":{"b":true}},"name":"transformer/expand/conv1/conv/StyleNorm/moments/variance","op":"Mean"},{"input":["transformer/expand/conv1/conv/StyleNorm/moments/variance","transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv1/conv/StyleNorm/batchnorm/add","op":"Add"},{"input":["transformer/expand/conv1/conv/StyleNorm/batchnorm/add"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv1/conv/StyleNorm/batchnorm/Rsqrt","op":"Rsqrt"},{"input":["transformer/expand/conv1/conv/StyleNorm/batchnorm/Rsqrt","transformer/expand/conv1/conv/StyleNorm/ExpandDims_3"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv1/conv/StyleNorm/batchnorm/mul","op":"Mul"},{"input":["transformer/expand/conv1/conv/Conv2D","transformer/expand/conv1/conv/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv1/conv/StyleNorm/batchnorm/mul_1","op":"Mul"},{"input":["transformer/expand/conv1/conv/StyleNorm/moments/mean","transformer/expand/conv1/conv/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv1/conv/StyleNorm/batchnorm/mul_2","op":"Mul"},{"input":["transformer/expand/conv1/conv/StyleNorm/ExpandDims_1","transformer/expand/conv1/conv/StyleNorm/batchnorm/mul_2"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv1/conv/StyleNorm/batchnorm/sub","op":"Sub"},{"input":["transformer/expand/conv1/conv/StyleNorm/batchnorm/mul_1","transformer/expand/conv1/conv/StyleNorm/batchnorm/sub"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv1/conv/StyleNorm/batchnorm/add_1","op":"Add"},{"input":["transformer/expand/conv1/conv/StyleNorm/batchnorm/add_1"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv1/conv/Relu","op":"Relu"},{"input":["transformer/expand/conv1/conv/Relu"],"attr":{"T":{"type":1},"out_type":{"type":3}},"name":"transformer/expand/conv2/Shape","op":"Shape"},{"input":["transformer/expand/conv2/Shape","transformer/expand/conv3/strided_slice/stack","transformer/expand/conv3/strided_slice/stack_1","transformer/expand/conv3/strided_slice/stack"],"attr":{"shrink_axis_mask":{"i":"1"},"begin_mask":{"i":"0"},"ellipsis_mask":{"i":"0"},"new_axis_mask":{"i":"0"},"end_mask":{"i":"0"},"T":{"type":3},"Index":{"type":3}},"name":"transformer/expand/conv2/strided_slice","op":"StridedSlice"},{"input":["transformer/expand/conv2/Shape","transformer/expand/conv3/strided_slice/stack_1","transformer/expand/conv1/strided_slice_1/stack_1","transformer/expand/conv3/strided_slice/stack"],"attr":{"T":{"type":3},"Index":{"type":3},"shrink_axis_mask":{"i":"1"},"begin_mask":{"i":"0"},"ellipsis_mask":{"i":"0"},"new_axis_mask":{"i":"0"},"end_mask":{"i":"0"}},"name":"transformer/expand/conv2/strided_slice_1","op":"StridedSlice"},{"input":["transformer/expand/conv2/mul/x","transformer/expand/conv2/strided_slice"],"attr":{"T":{"type":3}},"name":"transformer/expand/conv2/mul","op":"Mul"},{"input":["transformer/expand/conv2/mul/x","transformer/expand/conv2/strided_slice_1"],"attr":{"T":{"type":3}},"name":"transformer/expand/conv2/mul_1","op":"Mul"},{"input":["transformer/expand/conv2/mul","transformer/expand/conv2/mul_1"],"attr":{"T":{"type":3},"axis":{"i":"0"},"N":{"i":"2"}},"name":"transformer/expand/conv2/ResizeNearestNeighbor/size","op":"Pack"},{"input":["transformer/expand/conv1/conv/Relu","transformer/expand/conv2/ResizeNearestNeighbor/size"],"attr":{"T":{"type":1},"align_corners":{"b":false}},"name":"transformer/expand/conv2/ResizeNearestNeighbor","op":"ResizeNearestNeighbor"},{"input":["transformer/expand/conv2/ResizeNearestNeighbor","transformer/contract/Pad_1/paddings"],"attr":{"T":{"type":1},"Tpaddings":{"type":3}},"name":"transformer/expand/conv2/Pad","op":"Pad"},{"input":["transformer/expand/conv2/Pad","transformer/expand/conv2/conv/weights"],"attr":{"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"data_format":{"s":[78,72,87,67]},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"use_cudnn_on_gpu":{"b":true},"padding":{"s":[86,65,76,73,68]}},"name":"transformer/expand/conv2/conv/Conv2D","op":"Conv2D"},{"input":["transformer/expand/conv2/conv/Conv2D","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/expand/conv2/conv/StyleNorm/moments/mean","op":"Mean"},{"input":["transformer/expand/conv2/conv/Conv2D","transformer/expand/conv2/conv/StyleNorm/moments/mean"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv2/conv/StyleNorm/moments/SquaredDifference","op":"SquaredDifference"},{"input":["transformer/expand/conv2/conv/StyleNorm/moments/SquaredDifference","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/expand/conv2/conv/StyleNorm/moments/variance","op":"Mean"},{"input":["transformer/expand/conv2/conv/StyleNorm/moments/variance","transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv2/conv/StyleNorm/batchnorm/add","op":"Add"},{"input":["transformer/expand/conv2/conv/StyleNorm/batchnorm/add"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv2/conv/StyleNorm/batchnorm/Rsqrt","op":"Rsqrt"},{"input":["transformer/expand/conv2/conv/StyleNorm/batchnorm/Rsqrt","transformer/expand/conv2/conv/StyleNorm/ExpandDims_3"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv2/conv/StyleNorm/batchnorm/mul","op":"Mul"},{"input":["transformer/expand/conv2/conv/Conv2D","transformer/expand/conv2/conv/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv2/conv/StyleNorm/batchnorm/mul_1","op":"Mul"},{"input":["transformer/expand/conv2/conv/StyleNorm/moments/mean","transformer/expand/conv2/conv/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv2/conv/StyleNorm/batchnorm/mul_2","op":"Mul"},{"input":["transformer/expand/conv2/conv/StyleNorm/ExpandDims_1","transformer/expand/conv2/conv/StyleNorm/batchnorm/mul_2"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv2/conv/StyleNorm/batchnorm/sub","op":"Sub"},{"input":["transformer/expand/conv2/conv/StyleNorm/batchnorm/mul_1","transformer/expand/conv2/conv/StyleNorm/batchnorm/sub"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv2/conv/StyleNorm/batchnorm/add_1","op":"Add"},{"input":["transformer/expand/conv2/conv/StyleNorm/batchnorm/add_1"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv2/conv/Relu","op":"Relu"},{"input":["transformer/expand/conv2/conv/Relu"],"attr":{"T":{"type":1},"out_type":{"type":3}},"name":"transformer/expand/conv3/Shape","op":"Shape"},{"input":["transformer/expand/conv3/Shape","transformer/expand/conv3/strided_slice/stack","transformer/expand/conv3/strided_slice/stack_1","transformer/expand/conv3/strided_slice/stack"],"attr":{"end_mask":{"i":"0"},"T":{"type":3},"Index":{"type":3},"shrink_axis_mask":{"i":"1"},"ellipsis_mask":{"i":"0"},"begin_mask":{"i":"0"},"new_axis_mask":{"i":"0"}},"name":"transformer/expand/conv3/strided_slice","op":"StridedSlice"},{"input":["transformer/expand/conv3/Shape","transformer/expand/conv3/strided_slice/stack_1","transformer/expand/conv1/strided_slice_1/stack_1","transformer/expand/conv3/strided_slice/stack"],"attr":{"new_axis_mask":{"i":"0"},"end_mask":{"i":"0"},"Index":{"type":3},"T":{"type":3},"shrink_axis_mask":{"i":"1"},"ellipsis_mask":{"i":"0"},"begin_mask":{"i":"0"}},"name":"transformer/expand/conv3/strided_slice_1","op":"StridedSlice"},{"input":["transformer/expand/conv3/strided_slice","transformer/expand/conv3/strided_slice_1"],"attr":{"T":{"type":3},"axis":{"i":"0"},"N":{"i":"2"}},"name":"transformer/expand/conv3/ResizeNearestNeighbor/size","op":"Pack"},{"input":["transformer/expand/conv2/conv/Relu","transformer/expand/conv3/ResizeNearestNeighbor/size"],"attr":{"align_corners":{"b":false},"T":{"type":1}},"name":"transformer/expand/conv3/ResizeNearestNeighbor","op":"ResizeNearestNeighbor"},{"input":["transformer/expand/conv3/ResizeNearestNeighbor","transformer/contract/Pad/paddings"],"attr":{"T":{"type":1},"Tpaddings":{"type":3}},"name":"transformer/expand/conv3/Pad","op":"Pad"},{"input":["transformer/expand/conv3/Pad","transformer/expand/conv3/conv/weights"],"attr":{"padding":{"s":[86,65,76,73,68]},"dilations":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"T":{"type":1},"strides":{"list":{"s":[],"i":["1","1","1","1"],"f":[],"b":[],"type":[],"shape":[],"tensor":[],"func":[]}},"data_format":{"s":[78,72,87,67]},"use_cudnn_on_gpu":{"b":true}},"name":"transformer/expand/conv3/conv/Conv2D","op":"Conv2D"},{"input":["transformer/expand/conv3/conv/Conv2D","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"Tidx":{"type":3},"keep_dims":{"b":true},"T":{"type":1}},"name":"transformer/expand/conv3/conv/StyleNorm/moments/mean","op":"Mean"},{"input":["transformer/expand/conv3/conv/Conv2D","transformer/expand/conv3/conv/StyleNorm/moments/mean"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv3/conv/StyleNorm/moments/SquaredDifference","op":"SquaredDifference"},{"input":["transformer/expand/conv3/conv/StyleNorm/moments/SquaredDifference","transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices"],"attr":{"T":{"type":1},"Tidx":{"type":3},"keep_dims":{"b":true}},"name":"transformer/expand/conv3/conv/StyleNorm/moments/variance","op":"Mean"},{"input":["transformer/expand/conv3/conv/StyleNorm/moments/variance","transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv3/conv/StyleNorm/batchnorm/add","op":"Add"},{"input":["transformer/expand/conv3/conv/StyleNorm/batchnorm/add"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv3/conv/StyleNorm/batchnorm/Rsqrt","op":"Rsqrt"},{"input":["transformer/expand/conv3/conv/StyleNorm/batchnorm/Rsqrt","transformer/expand/conv3/conv/StyleNorm/ExpandDims_3"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv3/conv/StyleNorm/batchnorm/mul","op":"Mul"},{"input":["transformer/expand/conv3/conv/Conv2D","transformer/expand/conv3/conv/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv3/conv/StyleNorm/batchnorm/mul_1","op":"Mul"},{"input":["transformer/expand/conv3/conv/StyleNorm/moments/mean","transformer/expand/conv3/conv/StyleNorm/batchnorm/mul"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv3/conv/StyleNorm/batchnorm/mul_2","op":"Mul"},{"input":["transformer/expand/conv3/conv/StyleNorm/ExpandDims_1","transformer/expand/conv3/conv/StyleNorm/batchnorm/mul_2"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv3/conv/StyleNorm/batchnorm/sub","op":"Sub"},{"input":["transformer/expand/conv3/conv/StyleNorm/batchnorm/mul_1","transformer/expand/conv3/conv/StyleNorm/batchnorm/sub"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv3/conv/StyleNorm/batchnorm/add_1","op":"Add"},{"input":["transformer/expand/conv3/conv/StyleNorm/batchnorm/add_1"],"attr":{"T":{"type":1}},"name":"transformer/expand/conv3/conv/Sigmoid","op":"Sigmoid"}],"library":{"function":[],"gradient":[]},"versions":{"badConsumers":[]}},"weightsManifest":[{"paths":["group1-shard1of2.bin","group1-shard2of2.bin"],"weights":[{"name":"style_params/transformer/expand/conv3/conv/StyleNorm/Conv/weights","shape":[1,1,100,3],"dtype":"float32"},{"name":"style_params/transformer/expand/conv3/conv/StyleNorm/Conv/biases","shape":[3],"dtype":"float32"},{"name":"style_params/transformer/expand/conv2/conv/StyleNorm/Conv/weights","shape":[1,1,100,32],"dtype":"float32"},{"name":"style_params/transformer/expand/conv2/conv/StyleNorm/Conv/biases","shape":[32],"dtype":"float32"},{"name":"style_params/transformer/expand/conv1/conv/StyleNorm/Conv/weights","shape":[1,1,100,64],"dtype":"float32"},{"name":"style_params/transformer/expand/conv1/conv/StyleNorm/Conv/biases","shape":[64],"dtype":"float32"},{"name":"transformer/expand/conv2/mul/x","shape":[],"dtype":"int32"},{"name":"style_params/transformer/residual/residual5/conv2/StyleNorm/Conv/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual5/conv2/StyleNorm/Conv/biases","shape":[128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual5/conv1/StyleNorm/Conv/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual5/conv1/StyleNorm/Conv/biases","shape":[128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual4/conv2/StyleNorm/Conv/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual4/conv2/StyleNorm/Conv/biases","shape":[128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual4/conv1/StyleNorm/Conv/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual4/conv1/StyleNorm/Conv/biases","shape":[128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual3/conv2/StyleNorm/Conv/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual3/conv2/StyleNorm/Conv/biases","shape":[128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual3/conv1/StyleNorm/Conv/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual3/conv1/StyleNorm/Conv/biases","shape":[128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual2/conv2/StyleNorm/Conv/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual2/conv2/StyleNorm/Conv/biases","shape":[128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual2/conv1/StyleNorm/Conv/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual2/conv1/StyleNorm/Conv/biases","shape":[128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual1/conv2/StyleNorm/Conv/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual1/conv2/StyleNorm/Conv/biases","shape":[128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual1/conv1/StyleNorm/Conv/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual1/conv1/StyleNorm/Conv/biases","shape":[128],"dtype":"float32"},{"name":"transformer/contract/conv1/weights","shape":[9,9,3,32],"dtype":"float32"},{"name":"transformer/contract/conv1/BatchNorm/Const","shape":[32],"dtype":"float32"},{"name":"transformer/contract/conv1/BatchNorm/beta","shape":[32],"dtype":"float32"},{"name":"transformer/contract/conv1/BatchNorm/moving_mean","shape":[32],"dtype":"float32"},{"name":"transformer/contract/conv1/BatchNorm/moving_variance","shape":[32],"dtype":"float32"},{"name":"transformer/contract/conv2/weights","shape":[3,3,32,64],"dtype":"float32"},{"name":"transformer/contract/conv2/BatchNorm/Const","shape":[64],"dtype":"float32"},{"name":"transformer/contract/conv2/BatchNorm/beta","shape":[64],"dtype":"float32"},{"name":"transformer/contract/conv2/BatchNorm/moving_mean","shape":[64],"dtype":"float32"},{"name":"transformer/contract/conv2/BatchNorm/moving_variance","shape":[64],"dtype":"float32"},{"name":"transformer/contract/conv3/weights","shape":[3,3,64,128],"dtype":"float32"},{"name":"transformer/contract/conv3/BatchNorm/Const","shape":[128],"dtype":"float32"},{"name":"transformer/contract/conv3/BatchNorm/beta","shape":[128],"dtype":"float32"},{"name":"transformer/contract/conv3/BatchNorm/moving_mean","shape":[128],"dtype":"float32"},{"name":"transformer/contract/conv3/BatchNorm/moving_variance","shape":[128],"dtype":"float32"},{"name":"transformer/residual/residual1/conv1/weights","shape":[3,3,128,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual1/conv1/StyleNorm/Conv_1/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual1/conv1/StyleNorm/Conv_1/biases","shape":[128],"dtype":"float32"},{"name":"transformer/residual/residual1/conv2/weights","shape":[3,3,128,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual1/conv2/StyleNorm/Conv_1/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual1/conv2/StyleNorm/Conv_1/biases","shape":[128],"dtype":"float32"},{"name":"transformer/residual/residual2/conv1/weights","shape":[3,3,128,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual2/conv1/StyleNorm/Conv_1/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual2/conv1/StyleNorm/Conv_1/biases","shape":[128],"dtype":"float32"},{"name":"transformer/residual/residual2/conv2/weights","shape":[3,3,128,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual2/conv2/StyleNorm/Conv_1/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual2/conv2/StyleNorm/Conv_1/biases","shape":[128],"dtype":"float32"},{"name":"transformer/residual/residual3/conv1/weights","shape":[3,3,128,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual3/conv1/StyleNorm/Conv_1/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual3/conv1/StyleNorm/Conv_1/biases","shape":[128],"dtype":"float32"},{"name":"transformer/residual/residual3/conv2/weights","shape":[3,3,128,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual3/conv2/StyleNorm/Conv_1/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual3/conv2/StyleNorm/Conv_1/biases","shape":[128],"dtype":"float32"},{"name":"transformer/residual/residual4/conv1/weights","shape":[3,3,128,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual4/conv1/StyleNorm/Conv_1/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual4/conv1/StyleNorm/Conv_1/biases","shape":[128],"dtype":"float32"},{"name":"transformer/residual/residual4/conv2/weights","shape":[3,3,128,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual4/conv2/StyleNorm/Conv_1/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual4/conv2/StyleNorm/Conv_1/biases","shape":[128],"dtype":"float32"},{"name":"transformer/residual/residual5/conv1/weights","shape":[3,3,128,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual5/conv1/StyleNorm/Conv_1/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual5/conv1/StyleNorm/Conv_1/biases","shape":[128],"dtype":"float32"},{"name":"transformer/residual/residual5/conv2/weights","shape":[3,3,128,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual5/conv2/StyleNorm/Conv_1/weights","shape":[1,1,100,128],"dtype":"float32"},{"name":"style_params/transformer/residual/residual5/conv2/StyleNorm/Conv_1/biases","shape":[128],"dtype":"float32"},{"name":"transformer/expand/conv1/conv/weights","shape":[3,3,128,64],"dtype":"float32"},{"name":"style_params/transformer/expand/conv1/conv/StyleNorm/Conv_1/weights","shape":[1,1,100,64],"dtype":"float32"},{"name":"style_params/transformer/expand/conv1/conv/StyleNorm/Conv_1/biases","shape":[64],"dtype":"float32"},{"name":"transformer/contract/Pad_1/paddings","shape":[4,2],"dtype":"int32"},{"name":"transformer/expand/conv2/conv/weights","shape":[3,3,64,32],"dtype":"float32"},{"name":"style_params/transformer/expand/conv2/conv/StyleNorm/Conv_1/weights","shape":[1,1,100,32],"dtype":"float32"},{"name":"style_params/transformer/expand/conv2/conv/StyleNorm/Conv_1/biases","shape":[32],"dtype":"float32"},{"name":"transformer/expand/conv3/strided_slice/stack_1","shape":[1],"dtype":"int32"},{"name":"transformer/expand/conv1/strided_slice_1/stack_1","shape":[1],"dtype":"int32"},{"name":"transformer/expand/conv3/strided_slice/stack","shape":[1],"dtype":"int32"},{"name":"transformer/contract/Pad/paddings","shape":[4,2],"dtype":"int32"},{"name":"transformer/expand/conv3/conv/weights","shape":[9,9,32,3],"dtype":"float32"},{"name":"transformer/residual/residual1/conv1/StyleNorm/moments/mean/reduction_indices","shape":[2],"dtype":"int32"},{"name":"transformer/residual/residual1/conv1/StyleNorm/batchnorm/add/y","shape":[],"dtype":"float32"},{"name":"style_params/transformer/expand/conv3/conv/StyleNorm/Conv_1/weights","shape":[1,1,100,3],"dtype":"float32"},{"name":"style_params/transformer/expand/conv3/conv/StyleNorm/Conv_1/biases","shape":[3],"dtype":"float32"},{"name":"transformer/expand/conv3/conv/StyleNorm/ExpandDims/dim","shape":[],"dtype":"int32"}]}]} \ No newline at end of file diff --git a/examples/components/webgpu-tensorflow/service/node-util-types-polyfill.js b/examples/components/webgpu-tensorflow/service/node-util-types-polyfill.js new file mode 100644 index 00000000..fc227703 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/node-util-types-polyfill.js @@ -0,0 +1,245 @@ +// temporary polyfill for node:util/types +// waiting for https://github.com/unjs/unenv/pull/540 + +export const isExternal = (_obj) => + false; + +export const isDate = ( + val, +) => val instanceof Date; + +export const isArgumentsObject = ( + val, +) => + Object.prototype.toString.call(val) === "[object Arguments]"; + +export const isBigIntObject = ( + val, +) => val instanceof BigInt; + +export const isBooleanObject = ( + val, +) => val instanceof Boolean; + +export const isNumberObject = ( + val, +) => val instanceof Number; + +export const isStringObject = ( + val, +) => val instanceof String; + +export const isSymbolObject = ( + val, +) => val instanceof Symbol; + +export const isNativeError = ( + val, +) => val instanceof Error; + +export const isRegExp = ( + val, +) => val instanceof RegExp; + +export const isAsyncFunction = ( + val, +) => { + return typeof val === "function" && + Object.prototype.toString.call(val) === "[object AsyncFunction]"; +}; + +export const isGeneratorFunction = ( + val, +) => { + return typeof val === "function" && + Object.prototype.toString.call(val) === "[object GeneratorFunction]"; +}; + +export const isGeneratorObject = ( + val, +) => + Object.prototype.toString.call(val) === "[object Generator]"; + +export const isPromise = ( + val, +) => val instanceof Promise; + +export const isMap = ( + val, +) => { + return val instanceof Map; +}; + +export const isSet = ( + val, +) => { + return val instanceof Set; +}; + +export const isMapIterator = ( + val, +) => Object.prototype.toString.call(val) === "[object Map Iterator]"; + +export const isSetIterator = ( + val, +) => Object.prototype.toString.call(val) === "[object Set Iterator]"; + +export const isWeakMap = ( + val, +) => val instanceof WeakMap; + +export const isWeakSet = ( + val, +) => val instanceof WeakSet; + +export const isArrayBuffer = ( + val, +) => val instanceof ArrayBuffer; + +export const isDataView = ( + val, +) => val instanceof DataView; + +export const isSharedArrayBuffer = ( + val, +) => + "SharedArrayBuffer" in globalThis && val instanceof SharedArrayBuffer; + +export const isProxy = (val) => { + throw new Error("Not implemented"); +}; + +export const isModuleNamespaceObject = (val) => { + throw new Error("Not implemented"); +}; + +export const isAnyArrayBuffer = ( + val, +) => + val instanceof ArrayBuffer || + ("SharedArrayBuffer" in globalThis && val instanceof SharedArrayBuffer); + +export const isBoxedPrimitive = ( + val, +) => { + return val instanceof String || + val instanceof Number || + val instanceof BigInt || + val instanceof Boolean || + val instanceof Symbol; +}; + +export const isArrayBufferView = ( + val, +) => { + return ArrayBuffer.isView(val); +}; + +export const isTypedArray = ( + val, +) => { + return val instanceof Int8Array || + val instanceof Uint8Array || + val instanceof Uint8ClampedArray || + val instanceof Int16Array || + val instanceof Uint16Array || + val instanceof Int32Array || + val instanceof Uint32Array || + ("Float16Array" in globalThis && val instanceof Float16Array) || + val instanceof Float32Array || + val instanceof Float64Array || + val instanceof BigInt64Array || + val instanceof BigUint64Array; +}; + +export const isUint8Array = ( + val, +) => val instanceof Uint8Array; + +export const isUint8ClampedArray = ( + val, +) => val instanceof Uint8ClampedArray; + +export const isUint16Array = ( + val, +) => val instanceof Uint16Array; + +export const isUint32Array = ( + val, +) => val instanceof Uint32Array; + +export const isInt8Array = ( + val, +) => val instanceof Int8Array; + +export const isInt16Array = ( + val, +) => val instanceof Int16Array; + +export const isInt32Array = ( + val, +) => val instanceof Int32Array; + +export const isFloat32Array = ( + val, +) => val instanceof Float32Array; + +export const isFloat64Array = ( + val, +) => val instanceof Float64Array; + +export const isBigInt64Array = ( + val, +) => val instanceof BigInt64Array; + +export const isBigUint64Array = ( + val, +) => val instanceof BigUint64Array; + +export const isKeyObject = (val) => { + throw new Error("Not implemented"); +}; + +export default { + isExternal, + isDate, + isArgumentsObject, + isBigIntObject, + isBooleanObject, + isNumberObject, + isStringObject, + isSymbolObject, + isNativeError, + isRegExp, + isAsyncFunction, + isGeneratorFunction, + isGeneratorObject, + isPromise, + isMap, + isSet, + isMapIterator, + isSetIterator, + isWeakMap, + isWeakSet, + isArrayBuffer, + isDataView, + isSharedArrayBuffer, + isProxy, + isModuleNamespaceObject, + isAnyArrayBuffer, + isBoxedPrimitive, + isArrayBufferView, + isTypedArray, + isUint8Array, + isUint8ClampedArray, + isUint16Array, + isUint32Array, + isInt8Array, + isInt16Array, + isInt32Array, + isFloat32Array, + isFloat64Array, + isBigInt64Array, + isBigUint64Array, + isKeyObject, +}; diff --git a/examples/components/webgpu-tensorflow/service/package.json b/examples/components/webgpu-tensorflow/service/package.json new file mode 100644 index 00000000..b50e18e3 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/package.json @@ -0,0 +1,39 @@ +{ + "name": "webgpu-tensorflow-service", + "version": "0.1.0", + "description": "TensorFlow.js + WebGPU style-transfer service exposing a binary TCP protocol on 127.0.0.1:7878", + "private": true, + "main": "dist/service.js", + "type": "module", + "scripts": { + "fetch:wit": "wit-deps update", + "generate:types": "rimraf generated/types && jco guest-types wit/ -o generated/types", + "setup:wit": "npm run fetch:wit && npm run generate:types", + "build:ts": "rollup -c", + "build:component": "node scripts/componentize.js", + "build": "npm run setup:wit && npm run build:ts && npm run build:component" + }, + "keywords": [], + "author": "", + "license": "Apache-2.0", + "dependencies": { + "@tensorflow/tfjs": "^4.22.0", + "@tensorflow/tfjs-backend-webgpu": "^4.22.0", + "@wasi-gfx/js-webgpu": "^0.2.0", + "jpeg-js": "^0.4.4" + }, + "devDependencies": { + "@bytecodealliance/jco": "^1.17.9", + "@rollup/plugin-alias": "^6.0.0", + "@rollup/plugin-commonjs": "^29.0.0", + "@rollup/plugin-inject": "^5.0.5", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-typescript": "^12.3.0", + "@rollup/plugin-url": "^8.0.2", + "rimraf": "^6.1.2", + "rollup": "^4.57.1", + "typescript": "^5.9.3", + "unenv": "2.0.0-rc.24" + } +} diff --git a/examples/components/webgpu-tensorflow/service/polyfill.js b/examples/components/webgpu-tensorflow/service/polyfill.js new file mode 100644 index 00000000..0972e92c --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/polyfill.js @@ -0,0 +1,13 @@ +globalThis.location = { + search: "", +}; + +globalThis.global = globalThis; + +// TODO: temporary hack until wizer adds wasi:random in initialization. +globalThis.Math.random = () => 0.5; + +// to make webgpu availability checks pass +globalThis.navigator = { + gpu: {}, +}; diff --git a/examples/components/webgpu-tensorflow/service/rollup.config.js b/examples/components/webgpu-tensorflow/service/rollup.config.js new file mode 100644 index 00000000..7edb9c46 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/rollup.config.js @@ -0,0 +1,43 @@ +import nodeResolve from "@rollup/plugin-node-resolve"; +import commonjs from "@rollup/plugin-commonjs"; +import alias from "@rollup/plugin-alias"; +import inject from "@rollup/plugin-inject"; +import json from "@rollup/plugin-json"; +import url from "@rollup/plugin-url"; +import typescript from "@rollup/plugin-typescript"; +import { defineEnv } from "unenv"; + +const { env } = defineEnv(); + +const MEGABYTE = 1024 * 1024; + +export default { + input: "src/service.ts", + external: /wasi:.*/, + output: { + file: "dist/service.js", + format: "esm", + inlineDynamicImports: true, + }, + plugins: [ + url({ + // Inline model weight shards as base64 data URLs (the bulk of the wasm payload) + include: ["./models/**/*.bin"], + limit: MEGABYTE * 10, + }), + typescript(), + alias({ + entries: { + ...env.alias, + "node:util/types": "./node-util-types-polyfill.js", + "util/types": "./node-util-types-polyfill.js", + }, + }), + json(), + nodeResolve(), + commonjs({ + transformMixedEsModules: true, + }), + inject(env.inject), + ], +}; diff --git a/examples/components/webgpu-tensorflow/service/scripts/componentize.js b/examples/components/webgpu-tensorflow/service/scripts/componentize.js new file mode 100644 index 00000000..9e4f450a --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/scripts/componentize.js @@ -0,0 +1,33 @@ +/** + * Build script: componentizes dist/service.js → dist/service.wasm. + * + * `jco componentize` can't be used. This world imports wasi:io@0.2.0 (pulled + * in by wasi-gfx) and other WASI packages older than 0.2.10. jco detects + * that and silently falls back to a bundled, aliased copy of componentize-js + * @0.19.3 at node_modules/@bytecodealliance/componentize-js-0-19-3/, which + * patch-package never touches. + * + * Calling componentize() directly forces the patched top-level + * @bytecodealliance/componentize-js. The patch fixes a splicer bug where + * WIT resource types in interfaces with no callable functions (e.g. + * wasi:sockets/network) get no JS class generated, causing ReferenceError + * at runtime. + */ + +import { componentize } from '@bytecodealliance/componentize-js'; +import { writeFile } from 'fs/promises'; +import { resolve, join, dirname } from 'path'; +import { fileURLToPath } from 'url'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const root = resolve(__dirname, '..'); + +const result = await componentize({ + sourcePath: join(root, 'dist', 'service.js'), + witPath: join(root, 'wit'), + worldName: 'service', +}); + +const outPath = join(root, 'dist', 'service.wasm'); +await writeFile(outPath, result.component); +console.log(`OK Successfully written ${outPath}.`); diff --git a/examples/components/webgpu-tensorflow/service/src/image-stylizer.ts b/examples/components/webgpu-tensorflow/service/src/image-stylizer.ts new file mode 100644 index 00000000..018a66a1 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/src/image-stylizer.ts @@ -0,0 +1,236 @@ +import { declareGlobals } from '@wasi-gfx/js-webgpu/globals'; +import '../polyfill.js'; + +import jpeg from "jpeg-js"; +import * as tf from '@tensorflow/tfjs'; +import '@tensorflow/tfjs-backend-webgpu'; + +import model_style_model_json from "../models/style/model.json"; +import model_style_group1_shard1of9_bin from "../models/style/group1-shard1of9.bin"; +import model_style_group1_shard2of9_bin from "../models/style/group1-shard2of9.bin"; +import model_style_group1_shard3of9_bin from "../models/style/group1-shard3of9.bin"; +import model_style_group1_shard4of9_bin from "../models/style/group1-shard4of9.bin"; +import model_style_group1_shard5of9_bin from "../models/style/group1-shard5of9.bin"; +import model_style_group1_shard6of9_bin from "../models/style/group1-shard6of9.bin"; +import model_style_group1_shard7of9_bin from "../models/style/group1-shard7of9.bin"; +import model_style_group1_shard8of9_bin from "../models/style/group1-shard8of9.bin"; +import model_style_group1_shard9of9_bin from "../models/style/group1-shard9of9.bin"; +import model_transformer_model_json from "../models/transformer/model.json"; +import model_transformer_group1_shard1of2_bin from "../models/transformer/group1-shard1of2.bin"; +import model_transformer_group1_shard2of2_bin from "../models/transformer/group1-shard2of2.bin"; + +const BACKEND = "webgpu"; + +// Decode the embedded base64 weight data URLs once at module load. These +// ArrayBuffers are large (the bulk of the wasm payload) and decoding them +// inside Stylizer.initialize() costs ~seconds on every realm reset. +const STYLE_WEIGHT_DATA: ArrayBuffer[] = [ + dataUrlToArrayBuffer(model_style_group1_shard1of9_bin), + dataUrlToArrayBuffer(model_style_group1_shard2of9_bin), + dataUrlToArrayBuffer(model_style_group1_shard3of9_bin), + dataUrlToArrayBuffer(model_style_group1_shard4of9_bin), + dataUrlToArrayBuffer(model_style_group1_shard5of9_bin), + dataUrlToArrayBuffer(model_style_group1_shard6of9_bin), + dataUrlToArrayBuffer(model_style_group1_shard7of9_bin), + dataUrlToArrayBuffer(model_style_group1_shard8of9_bin), + dataUrlToArrayBuffer(model_style_group1_shard9of9_bin), +]; +const TRANSFORMER_WEIGHT_DATA: ArrayBuffer[] = [ + dataUrlToArrayBuffer(model_transformer_group1_shard1of2_bin), + dataUrlToArrayBuffer(model_transformer_group1_shard2of2_bin), +]; + +interface StylizeRequest { + contentJpeg: Uint8Array; + styleJpeg: Uint8Array; + styleRatio: number; +} + +export class Stylizer { + private styleModel: tf.GraphModel; + private transformerModel: tf.GraphModel; + + private constructor(styleModel: tf.GraphModel, transformerModel: tf.GraphModel) { + this.styleModel = styleModel; + this.transformerModel = transformerModel; + } + + public static async initialize(): Promise { + declareGlobals(); + setWashOverrides(); + + await tf.setBackend(BACKEND); + await tf.ready(); + if (tf.getBackend() !== BACKEND) { + throw new Error("Backend mismatch. expected = " + BACKEND + ", actual = " + tf.getBackend()); + } + const [styleModel, transformerModel] = await Promise.all([ + tf.loadGraphModel( + tf.io.fromMemory({ + modelTopology: model_style_model_json.modelTopology, + weightSpecs: model_style_model_json.weightsManifest.flatMap((g: any) => g.weights), + weightData: STYLE_WEIGHT_DATA, + }) + ), + tf.loadGraphModel( + tf.io.fromMemory({ + modelTopology: model_transformer_model_json.modelTopology, + weightSpecs: model_transformer_model_json.weightsManifest.flatMap((g: any) => g.weights), + weightData: TRANSFORMER_WEIGHT_DATA, + }) + ), + ]); + + // Warm up the WebGPU backend: the first predict() call compiles all + // WGSL shaders and JIT-caches kernels (~17s on a typical desktop GPU). + // Running a dummy inference here pays that cost at startup so user + // requests don't. + const tWarm = performance.now(); + const dummyStyle = tf.zeros([1, STYLE_SIDE, STYLE_SIDE, 3], "float32"); + const dummyContent = tf.zeros([1, CONTENT_MAX_SIDE, CONTENT_MAX_SIDE, 3], "float32"); + const warmOut = tf.tidy(() => { + const bottleneck = styleModel.predict(dummyStyle) as tf.Tensor; + return (transformerModel.predict([dummyContent, bottleneck]) as tf.Tensor).squeeze(); + }); + await warmOut.data(); + warmOut.dispose(); + dummyStyle.dispose(); + dummyContent.dispose(); + console.log(`[timing] GPU warmup: ${(performance.now() - tWarm).toFixed(0)}ms`); + + return new Stylizer(styleModel, transformerModel); + } + + async stylize(req: StylizeRequest): Promise { + const quality = 90; + + // Style model is fixed at its trained 256x256; transformer is fully-convolutional + // so we cap content size to bound inference cost (scales with H*W). + const tDecode = performance.now(); + const contentTensor = await decodeJpegToTensor(req.contentJpeg, "content"); + const styleTensor = await decodeJpegToTensor(req.styleJpeg, "style"); + console.log(`[timing] decode JPEGs and upload to GPU: ${(performance.now() - tDecode).toFixed(0)}ms`); + + const tInfer = performance.now(); + const stylizedTensor = await tf.tidy(() => { + const styleBottleneck = this.styleModel.predict(styleTensor) as tf.Tensor; + + let finalBottleneck; + if (req.styleRatio < 1.0) { + const contentBottleneck = this.styleModel.predict(contentTensor) as tf.Tensor; + finalBottleneck = tf.add( + tf.mul(styleBottleneck, req.styleRatio), + tf.mul(contentBottleneck, 1.0 - req.styleRatio), + ); + } else { + finalBottleneck = styleBottleneck; + } + + const stylized = this.transformerModel.predict([ + contentTensor, + finalBottleneck, + ]) as tf.Tensor; + + return stylized.squeeze(); + }); + // Force GPU sync so the timer reflects actual inference, not just queue submission. + await stylizedTensor.data(); + console.log(`[timing] run inference: ${(performance.now() - tInfer).toFixed(0)}ms`); + + contentTensor.dispose(); + styleTensor.dispose(); + + const tEncode = performance.now(); + const result = await encodeTensorToJpeg(stylizedTensor, quality); + console.log(`[timing] encode output to JPEG: ${(performance.now() - tEncode).toFixed(0)}ms`); + + stylizedTensor.dispose(); + return result; + } +} + +// Cap the content image's longest side so inference stays cheap while preserving +// the user's aspect ratio. Style is always 256x256 (the model's trained size). +const CONTENT_MAX_SIDE = 256; +const STYLE_SIDE = 256; + +function targetSize(width: number, height: number, kind: "content" | "style"): [number, number] { + if (kind === "style") return [STYLE_SIDE, STYLE_SIDE]; + if (height >= width) { + return [CONTENT_MAX_SIDE, Math.max(1, Math.round(width * CONTENT_MAX_SIDE / height))]; + } + return [Math.max(1, Math.round(height * CONTENT_MAX_SIDE / width)), CONTENT_MAX_SIDE]; +} + +async function decodeJpegToTensor(jpegBytes: Uint8Array, kind: "content" | "style"): Promise { + return tf.tidy(() => { + const decoded = jpeg.decode(jpegBytes, { useTArray: true }); + let tensor = tf.tensor3d( + decoded.data, + [decoded.height, decoded.width, 4], + "int32", + ); + // Drop alpha → RGB + tensor = tensor.slice([0, 0, 0], [-1, -1, 3]); + // Normalize to [0, 1] + tensor = tf.cast(tensor, "float32").div(255.0); + // Resize + tensor = tf.image.resizeBilinear(tensor, targetSize(decoded.width, decoded.height, kind)); + // Add batch dimension + return tensor.expandDims(0); + }); +} + +async function encodeTensorToJpeg(tensor: tf.Tensor, quality = 90): Promise { + const denormalized = tf.tidy(() => + tf.cast(tf.clipByValue(tf.mul(tensor, 255), 0, 255), "int32") + ); + + if (denormalized.shape.length !== 3) { + throw new Error(`expected rank-3 [H, W, C] tensor, got shape ${denormalized.shape}`); + } + const [height, width] = denormalized.shape; + const data = await denormalized.data(); + denormalized.dispose(); + + // jpeg-js expects RGBA + const rgbaData = new Uint8Array(height * width * 4); + for (let i = 0; i < height * width; i++) { + const rgbaIdx = i * 4; + const rgbIdx = i * 3; + rgbaData[rgbaIdx] = data[rgbIdx]; + rgbaData[rgbaIdx + 1] = data[rgbIdx + 1]; + rgbaData[rgbaIdx + 2] = data[rgbIdx + 2]; + rgbaData[rgbaIdx + 3] = 255; + } + + const encoded = jpeg.encode({ data: rgbaData, width, height }, quality); + return new Uint8Array(encoded.data); +} + +function dataUrlToArrayBuffer(dataUrl: string): ArrayBuffer { + const base64 = dataUrl.split(",")[1]; + const binary = atob(base64); + const bytes = new Uint8Array(binary.length); + for (let i = 0; i < binary.length; i++) { + bytes[i] = binary.charCodeAt(i); + } + return bytes.buffer; +} + +// TODO: remove this! +// stringify requiredFeatures items since tfjs uses an array as a feature name. +// https://github.com/tensorflow/tfjs/pull/8639 +function setWashOverrides() { + const requestDeviceOriginal = GPUAdapter.prototype.requestDevice; + GPUAdapter.prototype.requestDevice = async function(descriptor: GPUDeviceDescriptor): Promise { + let requiredFeatures: GPUFeatureName[] | undefined; + if (descriptor.requiredFeatures) { + requiredFeatures = Array.from(descriptor.requiredFeatures).map(feature => feature.toString() as GPUFeatureName); + } + return await requestDeviceOriginal.call(this, { + ...descriptor, + requiredFeatures, + }); + }; +} diff --git a/examples/components/webgpu-tensorflow/service/src/service.ts b/examples/components/webgpu-tensorflow/service/src/service.ts new file mode 100644 index 00000000..55ab9213 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/src/service.ts @@ -0,0 +1,183 @@ +/** + * Style-transfer TCP service. + * + * A wasmCloud v2 service that exports wasi:cli/run. The runtime calls run() + * once on startup and expects it to block indefinitely — the server loop runs + * here, with the loaded TF/WebGPU models held in memory between connections. + * + * Binary protocol (one request per connection, big-endian): + * + * Request: + * u32 contentJpegLen + * [N1] bytes content JPEG + * u32 styleJpegLen + * [N2] bytes style JPEG + * + * Response: + * u8 status (0 = ok, 1 = error) + * u32 payloadLen + * [N3] bytes payload (JPEG bytes when ok, UTF-8 message when error) + * + * The service binds to 0.0.0.0:7878. The wasmCloud runtime rewrites + * unspecified-address binds to 127.0.0.1 (loopback only — services are not + * reachable from outside the host). + */ + +import { instanceNetwork } from 'wasi:sockets/instance-network@0.2.3'; +import { createTcpSocket } from 'wasi:sockets/tcp-create-socket@0.2.3'; +import type { TcpSocket } from 'wasi:sockets/tcp@0.2.3'; +import type { InputStream, OutputStream } from 'wasi:io/streams@0.2.3'; +import type { Ipv4Address } from 'wasi:sockets/network@0.2.3'; + +import { Stylizer } from './image-stylizer'; + +// --------------------------------------------------------------------------- +// Constants +// --------------------------------------------------------------------------- + +const PORT = 7878; +// 0.0.0.0 — runtime rewrites to 127.0.0.1 for service workloads (loopback only) +const BIND_ADDR: Ipv4Address = [0, 0, 0, 0]; + +// Cap incoming JPEGs to a sane size so a malformed length prefix can't make us +// spin forever. The frontend resizes content to ~256px and style to 256x256 +// before sending, so a few MB is more than enough headroom. +const MAX_JPEG_BYTES = 16 * 1024 * 1024; + +// wasi:io/streams.blocking-write-and-flush is capped at 4096 bytes per call, +// so JPEG payloads have to be sent as chunks. +const WRITE_CHUNK = 4096; + +// --------------------------------------------------------------------------- +// Stream helpers +// --------------------------------------------------------------------------- + +/** + * Read exactly `len` bytes from `stream`, looping as needed. Throws if the + * stream closes before all bytes arrive. + */ +function readExact(stream: InputStream, len: number): Uint8Array { + const out = new Uint8Array(len); + let filled = 0; + while (filled < len) { + const remaining = len - filled; + const chunk = stream.blockingRead(BigInt(remaining)); + if (chunk.length === 0) throw new Error(`unexpected EOF after ${filled}/${len} bytes`); + out.set(chunk, filled); + filled += chunk.length; + } + return out; +} + +function readU32BE(stream: InputStream): number { + const bytes = readExact(stream, 4); + return ((bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3]) >>> 0; +} + +function writeAll(stream: OutputStream, bytes: Uint8Array): void { + for (let off = 0; off < bytes.length; off += WRITE_CHUNK) { + stream.blockingWriteAndFlush(bytes.subarray(off, Math.min(off + WRITE_CHUNK, bytes.length))); + } +} + +function u32BE(value: number): Uint8Array { + return new Uint8Array([ + (value >>> 24) & 0xff, + (value >>> 16) & 0xff, + (value >>> 8) & 0xff, + value & 0xff, + ]); +} + +function writeStatus(stream: OutputStream, status: 0 | 1, payload: Uint8Array): void { + writeAll(stream, new Uint8Array([status])); + writeAll(stream, u32BE(payload.length)); + writeAll(stream, payload); +} + +// --------------------------------------------------------------------------- +// Connection handler +// --------------------------------------------------------------------------- + +async function handleConnection( + stylizer: Stylizer, + inputStream: InputStream, + outputStream: OutputStream, +): Promise { + let contentJpeg: Uint8Array; + let styleJpeg: Uint8Array; + + try { + const contentLen = readU32BE(inputStream); + if (contentLen === 0 || contentLen > MAX_JPEG_BYTES) { + throw new Error(`invalid content length: ${contentLen}`); + } + contentJpeg = readExact(inputStream, contentLen); + + const styleLen = readU32BE(inputStream); + if (styleLen === 0 || styleLen > MAX_JPEG_BYTES) { + throw new Error(`invalid style length: ${styleLen}`); + } + styleJpeg = readExact(inputStream, styleLen); + } catch (err) { + const msg = err instanceof Error ? err.message : String(err); + try { + writeStatus(outputStream, 1, new TextEncoder().encode(`bad request: ${msg}`)); + } catch { /* peer gone */ } + return; + } + + try { + const result = await stylizer.stylize({ contentJpeg, styleJpeg, styleRatio: 1.0 }); + writeStatus(outputStream, 0, result); + } catch (err) { + const msg = err instanceof Error ? err.message : String(err); + console.error('[stylize-service] inference failed:', msg); + try { + writeStatus(outputStream, 1, new TextEncoder().encode(`stylize failed: ${msg}`)); + } catch { /* peer gone */ } + } +} + +// --------------------------------------------------------------------------- +// wasi:cli/run export +// --------------------------------------------------------------------------- + +export const run = { + async run(): Promise { + // Initialize TF/WebGPU and load model weights once. Keeps the GPU + // context warm and avoids per-request model load (~seconds). + console.log('[stylize-service] initializing TensorFlow + WebGPU…'); + const tInit = performance.now(); + const stylizer = await Stylizer.initialize(); + console.log(`[stylize-service] ready in ${(performance.now() - tInit).toFixed(0)}ms`); + + const network = instanceNetwork(); + const socket = createTcpSocket('ipv4'); + + socket.startBind(network, { tag: 'ipv4', val: { port: PORT, address: BIND_ADDR } }); + socket.subscribe().block(); + socket.finishBind(); + + socket.startListen(); + socket.subscribe().block(); + socket.finishListen(); + + console.log(`[stylize-service] listening on port ${PORT}`); + + while (true) { + socket.subscribe().block(); + let conn: TcpSocket, inputStream: InputStream, outputStream: OutputStream; + try { + [conn, inputStream, outputStream] = socket.accept(); + } catch { + break; + } + void conn; + + // Connections are handled one at a time. SpiderMonkey is single- + // threaded, and inference saturates the GPU anyway. + await handleConnection(stylizer, inputStream, outputStream); + } + }, +}; diff --git a/examples/components/webgpu-tensorflow/service/src/types.d.ts b/examples/components/webgpu-tensorflow/service/src/types.d.ts new file mode 100644 index 00000000..af50b617 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/src/types.d.ts @@ -0,0 +1,4 @@ +declare module "*.bin" { + const content: string; + export default content; +} diff --git a/examples/components/webgpu-tensorflow/service/tsconfig.json b/examples/components/webgpu-tensorflow/service/tsconfig.json new file mode 100644 index 00000000..29b76e3a --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "es2022", + "module": "es2022", + "moduleResolution": "bundler", + "rootDir": "./", + "outDir": "./dist/", + "esModuleInterop": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true + } +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps.lock b/examples/components/webgpu-tensorflow/service/wit/deps.lock new file mode 100644 index 00000000..19ed9059 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps.lock @@ -0,0 +1,45 @@ +[cli] +url = "https://github.com/WebAssembly/wasi-cli/archive/refs/tags/v0.2.3.tar.gz" +sha256 = "4dadd13d55aaf626833d1f4b9c34a17b0f04e993babd09552b785cda3b95ea76" +sha512 = "898dcc4e8c15d18acc6b88dbe232336fa4d19019430a910dbc9e7aeaace3077a164af3be9f002de6e7e65ef693df340801ac0c7e421e9a746bf1b6d698a90835" +deps = ["clocks", "filesystem", "random"] + +[clocks] +sha256 = "93a701968a7dd3c5d69031bc0601681c468972fdf7e28a93bb6150a67d6ebe8b" +sha512 = "98fca567c7a01887b0fb38981f1772169b6ea8de475b546508f8b86738d84e44ba95cae81def40ac34e8809f5f60e85224077ab8cb6d6d5d6296acc1df73c159" + +[filesystem] +sha256 = "69d42fb10a04a33545b17e055f13db9b1e10e82ba0ed5bdb52334e40dc07c679" +sha512 = "612effbac6f4804fe0c29dae20b78bbba59e52cb754c15402f5fe229c3153a221e0fbdff1d9d00ceaa3fe049c6a95523a5b99f772f1c16d972eade2c88326a30" + +[graphics-context] +url = "https://github.com/WebAssembly/wasi-gfx/archive/refs/heads/v0.0.1.tar.gz" +prefix = "wasi-gfx-0.0.1/graphics-context" +sha256 = "b138ab44463c5bb074207687c88d59dfca9c6bc7a5dad482dba626094cccbc3f" +sha512 = "b9cef19d2cf0a0f3d0a58c94cf4483d051acfb5622e379bf0abcc6aa34c14d92210c56554387b932f08aba3c9c1e9e9cadb554e9dd0cf464b20c7d31c806515e" + +[io] +url = "https://github.com/WebAssembly/wasi-io/archive/refs/tags/v0.2.3.tar.gz" +sha256 = "1cccbfe4122686ea57a25cd368e8cdfc408cbcad089f47fb6685b6f92e96f050" +sha512 = "7a95f964c13da52611141acd89bc8876226497f128e99dd176a4270c5b5efbd8cc847b5fbd1a91258d028c646db99e0424d72590cf1caf20f9f3a3343fad5017" + +[io-0-2-0] +url = "https://github.com/WebAssembly/wasi-io/archive/refs/tags/v0.2.0.tar.gz" +sha256 = "7210e5653539a15478f894d4da24cc69d61924cbcba21d2804d69314a88e5a4c" +sha512 = "49184a1b0945a889abd52d25271172ed3dc2db6968fcdddb1bab7ee0081f4a3eeee0977ad2291126a37631c0d86eeea75d822fa8af224c422134500bf9f0f2bb" + +[random] +sha256 = "dd0c91e7125172eb8fd4568e15ad9fc7305643015e6ece4396c3cc5e8c2bf79a" +sha512 = "d1ca2e7b0616a94a3b39d1b9450bb3fb595b01fd94a8626ad75433038dde40988ecb41ab93a374d569ab72163af3b30038d7bfc3499b9c07193181f4f1d9292a" + +[sockets] +url = "https://github.com/WebAssembly/wasi-sockets/archive/refs/tags/v0.2.3.tar.gz" +sha256 = "2bc0f65a8046207ee3330ad7d63f6fafeafd4cc0ea4084f081bd5e4f7b177e74" +sha512 = "3e5490e41547dffa78d52631825d93da8d60f4af0246cbaf97e1ecb879285953a86d5f1f390b10c32f91dd7eaec6f43e625a26b1c92c32a0c86fde428aedaaab" +deps = ["clocks"] + +[webgpu] +url = "https://github.com/WebAssembly/wasi-gfx/archive/refs/heads/v0.0.1.tar.gz" +prefix = "wasi-gfx-0.0.1/webgpu" +sha256 = "1986249a458706635317a72eedda4f3f469919a9d1802893b701aea47d9cee54" +sha512 = "63488865481f18d7b0258cc9ac97bfca92c3944fcd40d34ec723d2691a673db0140a905a62d995bfbb0fb61ba5785fbd07dc97317e5f90dfcfa292440a7ead48" diff --git a/examples/components/webgpu-tensorflow/service/wit/deps.toml b/examples/components/webgpu-tensorflow/service/wit/deps.toml new file mode 100644 index 00000000..6c22fb1b --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps.toml @@ -0,0 +1,19 @@ +[webgpu] +url = "https://github.com/WebAssembly/wasi-gfx/archive/refs/heads/v0.0.1.tar.gz" +prefix = "wasi-gfx-0.0.1/webgpu" + +[graphics-context] +url = "https://github.com/WebAssembly/wasi-gfx/archive/refs/heads/v0.0.1.tar.gz" +prefix = "wasi-gfx-0.0.1/graphics-context" + +[cli] +url = "https://github.com/WebAssembly/wasi-cli/archive/refs/tags/v0.2.3.tar.gz" + +[sockets] +url = "https://github.com/WebAssembly/wasi-sockets/archive/refs/tags/v0.2.3.tar.gz" + +# wasi-gfx targets io@0.2.0, sockets/cli target io@0.2.3 +[io] +url = "https://github.com/WebAssembly/wasi-io/archive/refs/tags/v0.2.3.tar.gz" +[io-0-2-0] +url = "https://github.com/WebAssembly/wasi-io/archive/refs/tags/v0.2.0.tar.gz" diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/cli/command.wit b/examples/components/webgpu-tensorflow/service/wit/deps/cli/command.wit new file mode 100644 index 00000000..3a81766d --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/cli/command.wit @@ -0,0 +1,10 @@ +package wasi:cli@0.2.3; + +@since(version = 0.2.0) +world command { + @since(version = 0.2.0) + include imports; + + @since(version = 0.2.0) + export run; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/cli/environment.wit b/examples/components/webgpu-tensorflow/service/wit/deps/cli/environment.wit new file mode 100644 index 00000000..2f449bd7 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/cli/environment.wit @@ -0,0 +1,22 @@ +@since(version = 0.2.0) +interface environment { + /// Get the POSIX-style environment variables. + /// + /// Each environment variable is provided as a pair of string variable names + /// and string value. + /// + /// Morally, these are a value import, but until value imports are available + /// in the component model, this import function should return the same + /// values each time it is called. + @since(version = 0.2.0) + get-environment: func() -> list>; + + /// Get the POSIX-style arguments to the program. + @since(version = 0.2.0) + get-arguments: func() -> list; + + /// Return a path that programs should use as their initial current working + /// directory, interpreting `.` as shorthand for this. + @since(version = 0.2.0) + initial-cwd: func() -> option; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/cli/exit.wit b/examples/components/webgpu-tensorflow/service/wit/deps/cli/exit.wit new file mode 100644 index 00000000..427935c8 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/cli/exit.wit @@ -0,0 +1,17 @@ +@since(version = 0.2.0) +interface exit { + /// Exit the current instance and any linked instances. + @since(version = 0.2.0) + exit: func(status: result); + + /// Exit the current instance and any linked instances, reporting the + /// specified status code to the host. + /// + /// The meaning of the code depends on the context, with 0 usually meaning + /// "success", and other values indicating various types of failure. + /// + /// This function does not return; the effect is analogous to a trap, but + /// without the connotation that something bad has happened. + @unstable(feature = cli-exit-with-code) + exit-with-code: func(status-code: u8); +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/cli/imports.wit b/examples/components/webgpu-tensorflow/service/wit/deps/cli/imports.wit new file mode 100644 index 00000000..8b4e3975 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/cli/imports.wit @@ -0,0 +1,36 @@ +package wasi:cli@0.2.3; + +@since(version = 0.2.0) +world imports { + @since(version = 0.2.0) + include wasi:clocks/imports@0.2.3; + @since(version = 0.2.0) + include wasi:filesystem/imports@0.2.3; + @since(version = 0.2.0) + include wasi:sockets/imports@0.2.3; + @since(version = 0.2.0) + include wasi:random/imports@0.2.3; + @since(version = 0.2.0) + include wasi:io/imports@0.2.3; + + @since(version = 0.2.0) + import environment; + @since(version = 0.2.0) + import exit; + @since(version = 0.2.0) + import stdin; + @since(version = 0.2.0) + import stdout; + @since(version = 0.2.0) + import stderr; + @since(version = 0.2.0) + import terminal-input; + @since(version = 0.2.0) + import terminal-output; + @since(version = 0.2.0) + import terminal-stdin; + @since(version = 0.2.0) + import terminal-stdout; + @since(version = 0.2.0) + import terminal-stderr; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/cli/run.wit b/examples/components/webgpu-tensorflow/service/wit/deps/cli/run.wit new file mode 100644 index 00000000..655346ef --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/cli/run.wit @@ -0,0 +1,6 @@ +@since(version = 0.2.0) +interface run { + /// Run the program. + @since(version = 0.2.0) + run: func() -> result; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/cli/stdio.wit b/examples/components/webgpu-tensorflow/service/wit/deps/cli/stdio.wit new file mode 100644 index 00000000..1b54f531 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/cli/stdio.wit @@ -0,0 +1,26 @@ +@since(version = 0.2.0) +interface stdin { + @since(version = 0.2.0) + use wasi:io/streams@0.2.3.{input-stream}; + + @since(version = 0.2.0) + get-stdin: func() -> input-stream; +} + +@since(version = 0.2.0) +interface stdout { + @since(version = 0.2.0) + use wasi:io/streams@0.2.3.{output-stream}; + + @since(version = 0.2.0) + get-stdout: func() -> output-stream; +} + +@since(version = 0.2.0) +interface stderr { + @since(version = 0.2.0) + use wasi:io/streams@0.2.3.{output-stream}; + + @since(version = 0.2.0) + get-stderr: func() -> output-stream; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/cli/terminal.wit b/examples/components/webgpu-tensorflow/service/wit/deps/cli/terminal.wit new file mode 100644 index 00000000..d305498c --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/cli/terminal.wit @@ -0,0 +1,62 @@ +/// Terminal input. +/// +/// In the future, this may include functions for disabling echoing, +/// disabling input buffering so that keyboard events are sent through +/// immediately, querying supported features, and so on. +@since(version = 0.2.0) +interface terminal-input { + /// The input side of a terminal. + @since(version = 0.2.0) + resource terminal-input; +} + +/// Terminal output. +/// +/// In the future, this may include functions for querying the terminal +/// size, being notified of terminal size changes, querying supported +/// features, and so on. +@since(version = 0.2.0) +interface terminal-output { + /// The output side of a terminal. + @since(version = 0.2.0) + resource terminal-output; +} + +/// An interface providing an optional `terminal-input` for stdin as a +/// link-time authority. +@since(version = 0.2.0) +interface terminal-stdin { + @since(version = 0.2.0) + use terminal-input.{terminal-input}; + + /// If stdin is connected to a terminal, return a `terminal-input` handle + /// allowing further interaction with it. + @since(version = 0.2.0) + get-terminal-stdin: func() -> option; +} + +/// An interface providing an optional `terminal-output` for stdout as a +/// link-time authority. +@since(version = 0.2.0) +interface terminal-stdout { + @since(version = 0.2.0) + use terminal-output.{terminal-output}; + + /// If stdout is connected to a terminal, return a `terminal-output` handle + /// allowing further interaction with it. + @since(version = 0.2.0) + get-terminal-stdout: func() -> option; +} + +/// An interface providing an optional `terminal-output` for stderr as a +/// link-time authority. +@since(version = 0.2.0) +interface terminal-stderr { + @since(version = 0.2.0) + use terminal-output.{terminal-output}; + + /// If stderr is connected to a terminal, return a `terminal-output` handle + /// allowing further interaction with it. + @since(version = 0.2.0) + get-terminal-stderr: func() -> option; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/clocks/monotonic-clock.wit b/examples/components/webgpu-tensorflow/service/wit/deps/clocks/monotonic-clock.wit new file mode 100644 index 00000000..c676fb84 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/clocks/monotonic-clock.wit @@ -0,0 +1,50 @@ +package wasi:clocks@0.2.3; +/// WASI Monotonic Clock is a clock API intended to let users measure elapsed +/// time. +/// +/// It is intended to be portable at least between Unix-family platforms and +/// Windows. +/// +/// A monotonic clock is a clock which has an unspecified initial value, and +/// successive reads of the clock will produce non-decreasing values. +@since(version = 0.2.0) +interface monotonic-clock { + @since(version = 0.2.0) + use wasi:io/poll@0.2.3.{pollable}; + + /// An instant in time, in nanoseconds. An instant is relative to an + /// unspecified initial value, and can only be compared to instances from + /// the same monotonic-clock. + @since(version = 0.2.0) + type instant = u64; + + /// A duration of time, in nanoseconds. + @since(version = 0.2.0) + type duration = u64; + + /// Read the current value of the clock. + /// + /// The clock is monotonic, therefore calling this function repeatedly will + /// produce a sequence of non-decreasing values. + @since(version = 0.2.0) + now: func() -> instant; + + /// Query the resolution of the clock. Returns the duration of time + /// corresponding to a clock tick. + @since(version = 0.2.0) + resolution: func() -> duration; + + /// Create a `pollable` which will resolve once the specified instant + /// has occurred. + @since(version = 0.2.0) + subscribe-instant: func( + when: instant, + ) -> pollable; + + /// Create a `pollable` that will resolve after the specified duration has + /// elapsed from the time this function is invoked. + @since(version = 0.2.0) + subscribe-duration: func( + when: duration, + ) -> pollable; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/clocks/timezone.wit b/examples/components/webgpu-tensorflow/service/wit/deps/clocks/timezone.wit new file mode 100644 index 00000000..b43e93b2 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/clocks/timezone.wit @@ -0,0 +1,55 @@ +package wasi:clocks@0.2.3; + +@unstable(feature = clocks-timezone) +interface timezone { + @unstable(feature = clocks-timezone) + use wall-clock.{datetime}; + + /// Return information needed to display the given `datetime`. This includes + /// the UTC offset, the time zone name, and a flag indicating whether + /// daylight saving time is active. + /// + /// If the timezone cannot be determined for the given `datetime`, return a + /// `timezone-display` for `UTC` with a `utc-offset` of 0 and no daylight + /// saving time. + @unstable(feature = clocks-timezone) + display: func(when: datetime) -> timezone-display; + + /// The same as `display`, but only return the UTC offset. + @unstable(feature = clocks-timezone) + utc-offset: func(when: datetime) -> s32; + + /// Information useful for displaying the timezone of a specific `datetime`. + /// + /// This information may vary within a single `timezone` to reflect daylight + /// saving time adjustments. + @unstable(feature = clocks-timezone) + record timezone-display { + /// The number of seconds difference between UTC time and the local + /// time of the timezone. + /// + /// The returned value will always be less than 86400 which is the + /// number of seconds in a day (24*60*60). + /// + /// In implementations that do not expose an actual time zone, this + /// should return 0. + utc-offset: s32, + + /// The abbreviated name of the timezone to display to a user. The name + /// `UTC` indicates Coordinated Universal Time. Otherwise, this should + /// reference local standards for the name of the time zone. + /// + /// In implementations that do not expose an actual time zone, this + /// should be the string `UTC`. + /// + /// In time zones that do not have an applicable name, a formatted + /// representation of the UTC offset may be returned, such as `-04:00`. + name: string, + + /// Whether daylight saving time is active. + /// + /// In implementations that do not expose an actual time zone, this + /// should return false. + in-daylight-saving-time: bool, + } +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/clocks/wall-clock.wit b/examples/components/webgpu-tensorflow/service/wit/deps/clocks/wall-clock.wit new file mode 100644 index 00000000..e00ce089 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/clocks/wall-clock.wit @@ -0,0 +1,46 @@ +package wasi:clocks@0.2.3; +/// WASI Wall Clock is a clock API intended to let users query the current +/// time. The name "wall" makes an analogy to a "clock on the wall", which +/// is not necessarily monotonic as it may be reset. +/// +/// It is intended to be portable at least between Unix-family platforms and +/// Windows. +/// +/// A wall clock is a clock which measures the date and time according to +/// some external reference. +/// +/// External references may be reset, so this clock is not necessarily +/// monotonic, making it unsuitable for measuring elapsed time. +/// +/// It is intended for reporting the current date and time for humans. +@since(version = 0.2.0) +interface wall-clock { + /// A time and date in seconds plus nanoseconds. + @since(version = 0.2.0) + record datetime { + seconds: u64, + nanoseconds: u32, + } + + /// Read the current value of the clock. + /// + /// This clock is not monotonic, therefore calling this function repeatedly + /// will not necessarily produce a sequence of non-decreasing values. + /// + /// The returned timestamps represent the number of seconds since + /// 1970-01-01T00:00:00Z, also known as [POSIX's Seconds Since the Epoch], + /// also known as [Unix Time]. + /// + /// The nanoseconds field of the output is always less than 1000000000. + /// + /// [POSIX's Seconds Since the Epoch]: https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap04.html#tag_21_04_16 + /// [Unix Time]: https://en.wikipedia.org/wiki/Unix_time + @since(version = 0.2.0) + now: func() -> datetime; + + /// Query the resolution of the clock. + /// + /// The nanoseconds field of the output is always less than 1000000000. + @since(version = 0.2.0) + resolution: func() -> datetime; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/clocks/world.wit b/examples/components/webgpu-tensorflow/service/wit/deps/clocks/world.wit new file mode 100644 index 00000000..05f04f79 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/clocks/world.wit @@ -0,0 +1,11 @@ +package wasi:clocks@0.2.3; + +@since(version = 0.2.0) +world imports { + @since(version = 0.2.0) + import monotonic-clock; + @since(version = 0.2.0) + import wall-clock; + @unstable(feature = clocks-timezone) + import timezone; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/filesystem/preopens.wit b/examples/components/webgpu-tensorflow/service/wit/deps/filesystem/preopens.wit new file mode 100644 index 00000000..cea97495 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/filesystem/preopens.wit @@ -0,0 +1,11 @@ +package wasi:filesystem@0.2.3; + +@since(version = 0.2.0) +interface preopens { + @since(version = 0.2.0) + use types.{descriptor}; + + /// Return the set of preopened directories, and their paths. + @since(version = 0.2.0) + get-directories: func() -> list>; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/filesystem/types.wit b/examples/components/webgpu-tensorflow/service/wit/deps/filesystem/types.wit new file mode 100644 index 00000000..d229a21f --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/filesystem/types.wit @@ -0,0 +1,672 @@ +package wasi:filesystem@0.2.3; +/// WASI filesystem is a filesystem API primarily intended to let users run WASI +/// programs that access their files on their existing filesystems, without +/// significant overhead. +/// +/// It is intended to be roughly portable between Unix-family platforms and +/// Windows, though it does not hide many of the major differences. +/// +/// Paths are passed as interface-type `string`s, meaning they must consist of +/// a sequence of Unicode Scalar Values (USVs). Some filesystems may contain +/// paths which are not accessible by this API. +/// +/// The directory separator in WASI is always the forward-slash (`/`). +/// +/// All paths in WASI are relative paths, and are interpreted relative to a +/// `descriptor` referring to a base directory. If a `path` argument to any WASI +/// function starts with `/`, or if any step of resolving a `path`, including +/// `..` and symbolic link steps, reaches a directory outside of the base +/// directory, or reaches a symlink to an absolute or rooted path in the +/// underlying filesystem, the function fails with `error-code::not-permitted`. +/// +/// For more information about WASI path resolution and sandboxing, see +/// [WASI filesystem path resolution]. +/// +/// [WASI filesystem path resolution]: https://github.com/WebAssembly/wasi-filesystem/blob/main/path-resolution.md +@since(version = 0.2.0) +interface types { + @since(version = 0.2.0) + use wasi:io/streams@0.2.3.{input-stream, output-stream, error}; + @since(version = 0.2.0) + use wasi:clocks/wall-clock@0.2.3.{datetime}; + + /// File size or length of a region within a file. + @since(version = 0.2.0) + type filesize = u64; + + /// The type of a filesystem object referenced by a descriptor. + /// + /// Note: This was called `filetype` in earlier versions of WASI. + @since(version = 0.2.0) + enum descriptor-type { + /// The type of the descriptor or file is unknown or is different from + /// any of the other types specified. + unknown, + /// The descriptor refers to a block device inode. + block-device, + /// The descriptor refers to a character device inode. + character-device, + /// The descriptor refers to a directory inode. + directory, + /// The descriptor refers to a named pipe. + fifo, + /// The file refers to a symbolic link inode. + symbolic-link, + /// The descriptor refers to a regular file inode. + regular-file, + /// The descriptor refers to a socket. + socket, + } + + /// Descriptor flags. + /// + /// Note: This was called `fdflags` in earlier versions of WASI. + @since(version = 0.2.0) + flags descriptor-flags { + /// Read mode: Data can be read. + read, + /// Write mode: Data can be written to. + write, + /// Request that writes be performed according to synchronized I/O file + /// integrity completion. The data stored in the file and the file's + /// metadata are synchronized. This is similar to `O_SYNC` in POSIX. + /// + /// The precise semantics of this operation have not yet been defined for + /// WASI. At this time, it should be interpreted as a request, and not a + /// requirement. + file-integrity-sync, + /// Request that writes be performed according to synchronized I/O data + /// integrity completion. Only the data stored in the file is + /// synchronized. This is similar to `O_DSYNC` in POSIX. + /// + /// The precise semantics of this operation have not yet been defined for + /// WASI. At this time, it should be interpreted as a request, and not a + /// requirement. + data-integrity-sync, + /// Requests that reads be performed at the same level of integrity + /// requested for writes. This is similar to `O_RSYNC` in POSIX. + /// + /// The precise semantics of this operation have not yet been defined for + /// WASI. At this time, it should be interpreted as a request, and not a + /// requirement. + requested-write-sync, + /// Mutating directories mode: Directory contents may be mutated. + /// + /// When this flag is unset on a descriptor, operations using the + /// descriptor which would create, rename, delete, modify the data or + /// metadata of filesystem objects, or obtain another handle which + /// would permit any of those, shall fail with `error-code::read-only` if + /// they would otherwise succeed. + /// + /// This may only be set on directories. + mutate-directory, + } + + /// File attributes. + /// + /// Note: This was called `filestat` in earlier versions of WASI. + @since(version = 0.2.0) + record descriptor-stat { + /// File type. + %type: descriptor-type, + /// Number of hard links to the file. + link-count: link-count, + /// For regular files, the file size in bytes. For symbolic links, the + /// length in bytes of the pathname contained in the symbolic link. + size: filesize, + /// Last data access timestamp. + /// + /// If the `option` is none, the platform doesn't maintain an access + /// timestamp for this file. + data-access-timestamp: option, + /// Last data modification timestamp. + /// + /// If the `option` is none, the platform doesn't maintain a + /// modification timestamp for this file. + data-modification-timestamp: option, + /// Last file status-change timestamp. + /// + /// If the `option` is none, the platform doesn't maintain a + /// status-change timestamp for this file. + status-change-timestamp: option, + } + + /// Flags determining the method of how paths are resolved. + @since(version = 0.2.0) + flags path-flags { + /// As long as the resolved path corresponds to a symbolic link, it is + /// expanded. + symlink-follow, + } + + /// Open flags used by `open-at`. + @since(version = 0.2.0) + flags open-flags { + /// Create file if it does not exist, similar to `O_CREAT` in POSIX. + create, + /// Fail if not a directory, similar to `O_DIRECTORY` in POSIX. + directory, + /// Fail if file already exists, similar to `O_EXCL` in POSIX. + exclusive, + /// Truncate file to size 0, similar to `O_TRUNC` in POSIX. + truncate, + } + + /// Number of hard links to an inode. + @since(version = 0.2.0) + type link-count = u64; + + /// When setting a timestamp, this gives the value to set it to. + @since(version = 0.2.0) + variant new-timestamp { + /// Leave the timestamp set to its previous value. + no-change, + /// Set the timestamp to the current time of the system clock associated + /// with the filesystem. + now, + /// Set the timestamp to the given value. + timestamp(datetime), + } + + /// A directory entry. + record directory-entry { + /// The type of the file referred to by this directory entry. + %type: descriptor-type, + + /// The name of the object. + name: string, + } + + /// Error codes returned by functions, similar to `errno` in POSIX. + /// Not all of these error codes are returned by the functions provided by this + /// API; some are used in higher-level library layers, and others are provided + /// merely for alignment with POSIX. + enum error-code { + /// Permission denied, similar to `EACCES` in POSIX. + access, + /// Resource unavailable, or operation would block, similar to `EAGAIN` and `EWOULDBLOCK` in POSIX. + would-block, + /// Connection already in progress, similar to `EALREADY` in POSIX. + already, + /// Bad descriptor, similar to `EBADF` in POSIX. + bad-descriptor, + /// Device or resource busy, similar to `EBUSY` in POSIX. + busy, + /// Resource deadlock would occur, similar to `EDEADLK` in POSIX. + deadlock, + /// Storage quota exceeded, similar to `EDQUOT` in POSIX. + quota, + /// File exists, similar to `EEXIST` in POSIX. + exist, + /// File too large, similar to `EFBIG` in POSIX. + file-too-large, + /// Illegal byte sequence, similar to `EILSEQ` in POSIX. + illegal-byte-sequence, + /// Operation in progress, similar to `EINPROGRESS` in POSIX. + in-progress, + /// Interrupted function, similar to `EINTR` in POSIX. + interrupted, + /// Invalid argument, similar to `EINVAL` in POSIX. + invalid, + /// I/O error, similar to `EIO` in POSIX. + io, + /// Is a directory, similar to `EISDIR` in POSIX. + is-directory, + /// Too many levels of symbolic links, similar to `ELOOP` in POSIX. + loop, + /// Too many links, similar to `EMLINK` in POSIX. + too-many-links, + /// Message too large, similar to `EMSGSIZE` in POSIX. + message-size, + /// Filename too long, similar to `ENAMETOOLONG` in POSIX. + name-too-long, + /// No such device, similar to `ENODEV` in POSIX. + no-device, + /// No such file or directory, similar to `ENOENT` in POSIX. + no-entry, + /// No locks available, similar to `ENOLCK` in POSIX. + no-lock, + /// Not enough space, similar to `ENOMEM` in POSIX. + insufficient-memory, + /// No space left on device, similar to `ENOSPC` in POSIX. + insufficient-space, + /// Not a directory or a symbolic link to a directory, similar to `ENOTDIR` in POSIX. + not-directory, + /// Directory not empty, similar to `ENOTEMPTY` in POSIX. + not-empty, + /// State not recoverable, similar to `ENOTRECOVERABLE` in POSIX. + not-recoverable, + /// Not supported, similar to `ENOTSUP` and `ENOSYS` in POSIX. + unsupported, + /// Inappropriate I/O control operation, similar to `ENOTTY` in POSIX. + no-tty, + /// No such device or address, similar to `ENXIO` in POSIX. + no-such-device, + /// Value too large to be stored in data type, similar to `EOVERFLOW` in POSIX. + overflow, + /// Operation not permitted, similar to `EPERM` in POSIX. + not-permitted, + /// Broken pipe, similar to `EPIPE` in POSIX. + pipe, + /// Read-only file system, similar to `EROFS` in POSIX. + read-only, + /// Invalid seek, similar to `ESPIPE` in POSIX. + invalid-seek, + /// Text file busy, similar to `ETXTBSY` in POSIX. + text-file-busy, + /// Cross-device link, similar to `EXDEV` in POSIX. + cross-device, + } + + /// File or memory access pattern advisory information. + @since(version = 0.2.0) + enum advice { + /// The application has no advice to give on its behavior with respect + /// to the specified data. + normal, + /// The application expects to access the specified data sequentially + /// from lower offsets to higher offsets. + sequential, + /// The application expects to access the specified data in a random + /// order. + random, + /// The application expects to access the specified data in the near + /// future. + will-need, + /// The application expects that it will not access the specified data + /// in the near future. + dont-need, + /// The application expects to access the specified data once and then + /// not reuse it thereafter. + no-reuse, + } + + /// A 128-bit hash value, split into parts because wasm doesn't have a + /// 128-bit integer type. + @since(version = 0.2.0) + record metadata-hash-value { + /// 64 bits of a 128-bit hash value. + lower: u64, + /// Another 64 bits of a 128-bit hash value. + upper: u64, + } + + /// A descriptor is a reference to a filesystem object, which may be a file, + /// directory, named pipe, special file, or other object on which filesystem + /// calls may be made. + @since(version = 0.2.0) + resource descriptor { + /// Return a stream for reading from a file, if available. + /// + /// May fail with an error-code describing why the file cannot be read. + /// + /// Multiple read, write, and append streams may be active on the same open + /// file and they do not interfere with each other. + /// + /// Note: This allows using `read-stream`, which is similar to `read` in POSIX. + @since(version = 0.2.0) + read-via-stream: func( + /// The offset within the file at which to start reading. + offset: filesize, + ) -> result; + + /// Return a stream for writing to a file, if available. + /// + /// May fail with an error-code describing why the file cannot be written. + /// + /// Note: This allows using `write-stream`, which is similar to `write` in + /// POSIX. + @since(version = 0.2.0) + write-via-stream: func( + /// The offset within the file at which to start writing. + offset: filesize, + ) -> result; + + /// Return a stream for appending to a file, if available. + /// + /// May fail with an error-code describing why the file cannot be appended. + /// + /// Note: This allows using `write-stream`, which is similar to `write` with + /// `O_APPEND` in POSIX. + @since(version = 0.2.0) + append-via-stream: func() -> result; + + /// Provide file advisory information on a descriptor. + /// + /// This is similar to `posix_fadvise` in POSIX. + @since(version = 0.2.0) + advise: func( + /// The offset within the file to which the advisory applies. + offset: filesize, + /// The length of the region to which the advisory applies. + length: filesize, + /// The advice. + advice: advice + ) -> result<_, error-code>; + + /// Synchronize the data of a file to disk. + /// + /// This function succeeds with no effect if the file descriptor is not + /// opened for writing. + /// + /// Note: This is similar to `fdatasync` in POSIX. + @since(version = 0.2.0) + sync-data: func() -> result<_, error-code>; + + /// Get flags associated with a descriptor. + /// + /// Note: This returns similar flags to `fcntl(fd, F_GETFL)` in POSIX. + /// + /// Note: This returns the value that was the `fs_flags` value returned + /// from `fdstat_get` in earlier versions of WASI. + @since(version = 0.2.0) + get-flags: func() -> result; + + /// Get the dynamic type of a descriptor. + /// + /// Note: This returns the same value as the `type` field of the `fd-stat` + /// returned by `stat`, `stat-at` and similar. + /// + /// Note: This returns similar flags to the `st_mode & S_IFMT` value provided + /// by `fstat` in POSIX. + /// + /// Note: This returns the value that was the `fs_filetype` value returned + /// from `fdstat_get` in earlier versions of WASI. + @since(version = 0.2.0) + get-type: func() -> result; + + /// Adjust the size of an open file. If this increases the file's size, the + /// extra bytes are filled with zeros. + /// + /// Note: This was called `fd_filestat_set_size` in earlier versions of WASI. + @since(version = 0.2.0) + set-size: func(size: filesize) -> result<_, error-code>; + + /// Adjust the timestamps of an open file or directory. + /// + /// Note: This is similar to `futimens` in POSIX. + /// + /// Note: This was called `fd_filestat_set_times` in earlier versions of WASI. + @since(version = 0.2.0) + set-times: func( + /// The desired values of the data access timestamp. + data-access-timestamp: new-timestamp, + /// The desired values of the data modification timestamp. + data-modification-timestamp: new-timestamp, + ) -> result<_, error-code>; + + /// Read from a descriptor, without using and updating the descriptor's offset. + /// + /// This function returns a list of bytes containing the data that was + /// read, along with a bool which, when true, indicates that the end of the + /// file was reached. The returned list will contain up to `length` bytes; it + /// may return fewer than requested, if the end of the file is reached or + /// if the I/O operation is interrupted. + /// + /// In the future, this may change to return a `stream`. + /// + /// Note: This is similar to `pread` in POSIX. + @since(version = 0.2.0) + read: func( + /// The maximum number of bytes to read. + length: filesize, + /// The offset within the file at which to read. + offset: filesize, + ) -> result, bool>, error-code>; + + /// Write to a descriptor, without using and updating the descriptor's offset. + /// + /// It is valid to write past the end of a file; the file is extended to the + /// extent of the write, with bytes between the previous end and the start of + /// the write set to zero. + /// + /// In the future, this may change to take a `stream`. + /// + /// Note: This is similar to `pwrite` in POSIX. + @since(version = 0.2.0) + write: func( + /// Data to write + buffer: list, + /// The offset within the file at which to write. + offset: filesize, + ) -> result; + + /// Read directory entries from a directory. + /// + /// On filesystems where directories contain entries referring to themselves + /// and their parents, often named `.` and `..` respectively, these entries + /// are omitted. + /// + /// This always returns a new stream which starts at the beginning of the + /// directory. Multiple streams may be active on the same directory, and they + /// do not interfere with each other. + @since(version = 0.2.0) + read-directory: func() -> result; + + /// Synchronize the data and metadata of a file to disk. + /// + /// This function succeeds with no effect if the file descriptor is not + /// opened for writing. + /// + /// Note: This is similar to `fsync` in POSIX. + @since(version = 0.2.0) + sync: func() -> result<_, error-code>; + + /// Create a directory. + /// + /// Note: This is similar to `mkdirat` in POSIX. + @since(version = 0.2.0) + create-directory-at: func( + /// The relative path at which to create the directory. + path: string, + ) -> result<_, error-code>; + + /// Return the attributes of an open file or directory. + /// + /// Note: This is similar to `fstat` in POSIX, except that it does not return + /// device and inode information. For testing whether two descriptors refer to + /// the same underlying filesystem object, use `is-same-object`. To obtain + /// additional data that can be used do determine whether a file has been + /// modified, use `metadata-hash`. + /// + /// Note: This was called `fd_filestat_get` in earlier versions of WASI. + @since(version = 0.2.0) + stat: func() -> result; + + /// Return the attributes of a file or directory. + /// + /// Note: This is similar to `fstatat` in POSIX, except that it does not + /// return device and inode information. See the `stat` description for a + /// discussion of alternatives. + /// + /// Note: This was called `path_filestat_get` in earlier versions of WASI. + @since(version = 0.2.0) + stat-at: func( + /// Flags determining the method of how the path is resolved. + path-flags: path-flags, + /// The relative path of the file or directory to inspect. + path: string, + ) -> result; + + /// Adjust the timestamps of a file or directory. + /// + /// Note: This is similar to `utimensat` in POSIX. + /// + /// Note: This was called `path_filestat_set_times` in earlier versions of + /// WASI. + @since(version = 0.2.0) + set-times-at: func( + /// Flags determining the method of how the path is resolved. + path-flags: path-flags, + /// The relative path of the file or directory to operate on. + path: string, + /// The desired values of the data access timestamp. + data-access-timestamp: new-timestamp, + /// The desired values of the data modification timestamp. + data-modification-timestamp: new-timestamp, + ) -> result<_, error-code>; + + /// Create a hard link. + /// + /// Note: This is similar to `linkat` in POSIX. + @since(version = 0.2.0) + link-at: func( + /// Flags determining the method of how the path is resolved. + old-path-flags: path-flags, + /// The relative source path from which to link. + old-path: string, + /// The base directory for `new-path`. + new-descriptor: borrow, + /// The relative destination path at which to create the hard link. + new-path: string, + ) -> result<_, error-code>; + + /// Open a file or directory. + /// + /// If `flags` contains `descriptor-flags::mutate-directory`, and the base + /// descriptor doesn't have `descriptor-flags::mutate-directory` set, + /// `open-at` fails with `error-code::read-only`. + /// + /// If `flags` contains `write` or `mutate-directory`, or `open-flags` + /// contains `truncate` or `create`, and the base descriptor doesn't have + /// `descriptor-flags::mutate-directory` set, `open-at` fails with + /// `error-code::read-only`. + /// + /// Note: This is similar to `openat` in POSIX. + @since(version = 0.2.0) + open-at: func( + /// Flags determining the method of how the path is resolved. + path-flags: path-flags, + /// The relative path of the object to open. + path: string, + /// The method by which to open the file. + open-flags: open-flags, + /// Flags to use for the resulting descriptor. + %flags: descriptor-flags, + ) -> result; + + /// Read the contents of a symbolic link. + /// + /// If the contents contain an absolute or rooted path in the underlying + /// filesystem, this function fails with `error-code::not-permitted`. + /// + /// Note: This is similar to `readlinkat` in POSIX. + @since(version = 0.2.0) + readlink-at: func( + /// The relative path of the symbolic link from which to read. + path: string, + ) -> result; + + /// Remove a directory. + /// + /// Return `error-code::not-empty` if the directory is not empty. + /// + /// Note: This is similar to `unlinkat(fd, path, AT_REMOVEDIR)` in POSIX. + @since(version = 0.2.0) + remove-directory-at: func( + /// The relative path to a directory to remove. + path: string, + ) -> result<_, error-code>; + + /// Rename a filesystem object. + /// + /// Note: This is similar to `renameat` in POSIX. + @since(version = 0.2.0) + rename-at: func( + /// The relative source path of the file or directory to rename. + old-path: string, + /// The base directory for `new-path`. + new-descriptor: borrow, + /// The relative destination path to which to rename the file or directory. + new-path: string, + ) -> result<_, error-code>; + + /// Create a symbolic link (also known as a "symlink"). + /// + /// If `old-path` starts with `/`, the function fails with + /// `error-code::not-permitted`. + /// + /// Note: This is similar to `symlinkat` in POSIX. + @since(version = 0.2.0) + symlink-at: func( + /// The contents of the symbolic link. + old-path: string, + /// The relative destination path at which to create the symbolic link. + new-path: string, + ) -> result<_, error-code>; + + /// Unlink a filesystem object that is not a directory. + /// + /// Return `error-code::is-directory` if the path refers to a directory. + /// Note: This is similar to `unlinkat(fd, path, 0)` in POSIX. + @since(version = 0.2.0) + unlink-file-at: func( + /// The relative path to a file to unlink. + path: string, + ) -> result<_, error-code>; + + /// Test whether two descriptors refer to the same filesystem object. + /// + /// In POSIX, this corresponds to testing whether the two descriptors have the + /// same device (`st_dev`) and inode (`st_ino` or `d_ino`) numbers. + /// wasi-filesystem does not expose device and inode numbers, so this function + /// may be used instead. + @since(version = 0.2.0) + is-same-object: func(other: borrow) -> bool; + + /// Return a hash of the metadata associated with a filesystem object referred + /// to by a descriptor. + /// + /// This returns a hash of the last-modification timestamp and file size, and + /// may also include the inode number, device number, birth timestamp, and + /// other metadata fields that may change when the file is modified or + /// replaced. It may also include a secret value chosen by the + /// implementation and not otherwise exposed. + /// + /// Implementations are encouraged to provide the following properties: + /// + /// - If the file is not modified or replaced, the computed hash value should + /// usually not change. + /// - If the object is modified or replaced, the computed hash value should + /// usually change. + /// - The inputs to the hash should not be easily computable from the + /// computed hash. + /// + /// However, none of these is required. + @since(version = 0.2.0) + metadata-hash: func() -> result; + + /// Return a hash of the metadata associated with a filesystem object referred + /// to by a directory descriptor and a relative path. + /// + /// This performs the same hash computation as `metadata-hash`. + @since(version = 0.2.0) + metadata-hash-at: func( + /// Flags determining the method of how the path is resolved. + path-flags: path-flags, + /// The relative path of the file or directory to inspect. + path: string, + ) -> result; + } + + /// A stream of directory entries. + @since(version = 0.2.0) + resource directory-entry-stream { + /// Read a single directory entry from a `directory-entry-stream`. + @since(version = 0.2.0) + read-directory-entry: func() -> result, error-code>; + } + + /// Attempts to extract a filesystem-related `error-code` from the stream + /// `error` provided. + /// + /// Stream operations which return `stream-error::last-operation-failed` + /// have a payload with more information about the operation that failed. + /// This payload can be passed through to this function to see if there's + /// filesystem-related information about the error to return. + /// + /// Note that this function is fallible because not all stream-related + /// errors are filesystem-related errors. + @since(version = 0.2.0) + filesystem-error-code: func(err: borrow) -> option; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/filesystem/world.wit b/examples/components/webgpu-tensorflow/service/wit/deps/filesystem/world.wit new file mode 100644 index 00000000..29405bc2 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/filesystem/world.wit @@ -0,0 +1,9 @@ +package wasi:filesystem@0.2.3; + +@since(version = 0.2.0) +world imports { + @since(version = 0.2.0) + import types; + @since(version = 0.2.0) + import preopens; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/graphics-context/graphics-context.wit b/examples/components/webgpu-tensorflow/service/wit/deps/graphics-context/graphics-context.wit new file mode 100644 index 00000000..9ad87450 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/graphics-context/graphics-context.wit @@ -0,0 +1,18 @@ +package wasi:graphics-context@0.0.1; + +world imports { + import graphics-context; +} + +interface graphics-context { + resource context { + constructor(); + + get-current-buffer: func() -> abstract-buffer; + + // TODO: might want to remove this. + present: func(); + } + + resource abstract-buffer { } +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/http/handler.wit b/examples/components/webgpu-tensorflow/service/wit/deps/http/handler.wit new file mode 100644 index 00000000..6a6c6296 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/http/handler.wit @@ -0,0 +1,49 @@ +/// This interface defines a handler of incoming HTTP Requests. It should +/// be exported by components which can respond to HTTP Requests. +@since(version = 0.2.0) +interface incoming-handler { + @since(version = 0.2.0) + use types.{incoming-request, response-outparam}; + + /// This function is invoked with an incoming HTTP Request, and a resource + /// `response-outparam` which provides the capability to reply with an HTTP + /// Response. The response is sent by calling the `response-outparam.set` + /// method, which allows execution to continue after the response has been + /// sent. This enables both streaming to the response body, and performing other + /// work. + /// + /// The implementor of this function must write a response to the + /// `response-outparam` before returning, or else the caller will respond + /// with an error on its behalf. + @since(version = 0.2.0) + handle: func( + request: incoming-request, + response-out: response-outparam + ); +} + +/// This interface defines a handler of outgoing HTTP Requests. It should be +/// imported by components which wish to make HTTP Requests. +@since(version = 0.2.0) +interface outgoing-handler { + @since(version = 0.2.0) + use types.{ + outgoing-request, request-options, future-incoming-response, error-code + }; + + /// This function is invoked with an outgoing HTTP Request, and it returns + /// a resource `future-incoming-response` which represents an HTTP Response + /// which may arrive in the future. + /// + /// The `options` argument accepts optional parameters for the HTTP + /// protocol's transport layer. + /// + /// This function may return an error if the `outgoing-request` is invalid + /// or not allowed to be made. Otherwise, protocol errors are reported + /// through the `future-incoming-response`. + @since(version = 0.2.0) + handle: func( + request: outgoing-request, + options: option + ) -> result; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/http/proxy.wit b/examples/components/webgpu-tensorflow/service/wit/deps/http/proxy.wit new file mode 100644 index 00000000..de3bbe8a --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/http/proxy.wit @@ -0,0 +1,50 @@ +package wasi:http@0.2.3; + +/// The `wasi:http/imports` world imports all the APIs for HTTP proxies. +/// It is intended to be `include`d in other worlds. +@since(version = 0.2.0) +world imports { + /// HTTP proxies have access to time and randomness. + @since(version = 0.2.0) + import wasi:clocks/monotonic-clock@0.2.3; + @since(version = 0.2.0) + import wasi:clocks/wall-clock@0.2.3; + @since(version = 0.2.0) + import wasi:random/random@0.2.3; + + /// Proxies have standard output and error streams which are expected to + /// terminate in a developer-facing console provided by the host. + @since(version = 0.2.0) + import wasi:cli/stdout@0.2.3; + @since(version = 0.2.0) + import wasi:cli/stderr@0.2.3; + + /// TODO: this is a temporary workaround until component tooling is able to + /// gracefully handle the absence of stdin. Hosts must return an eof stream + /// for this import, which is what wasi-libc + tooling will do automatically + /// when this import is properly removed. + @since(version = 0.2.0) + import wasi:cli/stdin@0.2.3; + + /// This is the default handler to use when user code simply wants to make an + /// HTTP request (e.g., via `fetch()`). + @since(version = 0.2.0) + import outgoing-handler; +} + +/// The `wasi:http/proxy` world captures a widely-implementable intersection of +/// hosts that includes HTTP forward and reverse proxies. Components targeting +/// this world may concurrently stream in and out any number of incoming and +/// outgoing HTTP requests. +@since(version = 0.2.0) +world proxy { + @since(version = 0.2.0) + include imports; + + /// The host delivers incoming HTTP requests to a component by calling the + /// `handle` function of this exported interface. A host may arbitrarily reuse + /// or not reuse component instance when delivering incoming HTTP requests and + /// thus a component must be able to handle 0..N calls to `handle`. + @since(version = 0.2.0) + export incoming-handler; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/http/types.wit b/examples/components/webgpu-tensorflow/service/wit/deps/http/types.wit new file mode 100644 index 00000000..2498f180 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/http/types.wit @@ -0,0 +1,673 @@ +/// This interface defines all of the types and methods for implementing +/// HTTP Requests and Responses, both incoming and outgoing, as well as +/// their headers, trailers, and bodies. +@since(version = 0.2.0) +interface types { + @since(version = 0.2.0) + use wasi:clocks/monotonic-clock@0.2.3.{duration}; + @since(version = 0.2.0) + use wasi:io/streams@0.2.3.{input-stream, output-stream}; + @since(version = 0.2.0) + use wasi:io/error@0.2.3.{error as io-error}; + @since(version = 0.2.0) + use wasi:io/poll@0.2.3.{pollable}; + + /// This type corresponds to HTTP standard Methods. + @since(version = 0.2.0) + variant method { + get, + head, + post, + put, + delete, + connect, + options, + trace, + patch, + other(string) + } + + /// This type corresponds to HTTP standard Related Schemes. + @since(version = 0.2.0) + variant scheme { + HTTP, + HTTPS, + other(string) + } + + /// These cases are inspired by the IANA HTTP Proxy Error Types: + /// + @since(version = 0.2.0) + variant error-code { + DNS-timeout, + DNS-error(DNS-error-payload), + destination-not-found, + destination-unavailable, + destination-IP-prohibited, + destination-IP-unroutable, + connection-refused, + connection-terminated, + connection-timeout, + connection-read-timeout, + connection-write-timeout, + connection-limit-reached, + TLS-protocol-error, + TLS-certificate-error, + TLS-alert-received(TLS-alert-received-payload), + HTTP-request-denied, + HTTP-request-length-required, + HTTP-request-body-size(option), + HTTP-request-method-invalid, + HTTP-request-URI-invalid, + HTTP-request-URI-too-long, + HTTP-request-header-section-size(option), + HTTP-request-header-size(option), + HTTP-request-trailer-section-size(option), + HTTP-request-trailer-size(field-size-payload), + HTTP-response-incomplete, + HTTP-response-header-section-size(option), + HTTP-response-header-size(field-size-payload), + HTTP-response-body-size(option), + HTTP-response-trailer-section-size(option), + HTTP-response-trailer-size(field-size-payload), + HTTP-response-transfer-coding(option), + HTTP-response-content-coding(option), + HTTP-response-timeout, + HTTP-upgrade-failed, + HTTP-protocol-error, + loop-detected, + configuration-error, + /// This is a catch-all error for anything that doesn't fit cleanly into a + /// more specific case. It also includes an optional string for an + /// unstructured description of the error. Users should not depend on the + /// string for diagnosing errors, as it's not required to be consistent + /// between implementations. + internal-error(option) + } + + /// Defines the case payload type for `DNS-error` above: + @since(version = 0.2.0) + record DNS-error-payload { + rcode: option, + info-code: option + } + + /// Defines the case payload type for `TLS-alert-received` above: + @since(version = 0.2.0) + record TLS-alert-received-payload { + alert-id: option, + alert-message: option + } + + /// Defines the case payload type for `HTTP-response-{header,trailer}-size` above: + @since(version = 0.2.0) + record field-size-payload { + field-name: option, + field-size: option + } + + /// Attempts to extract a http-related `error` from the wasi:io `error` + /// provided. + /// + /// Stream operations which return + /// `wasi:io/stream/stream-error::last-operation-failed` have a payload of + /// type `wasi:io/error/error` with more information about the operation + /// that failed. This payload can be passed through to this function to see + /// if there's http-related information about the error to return. + /// + /// Note that this function is fallible because not all io-errors are + /// http-related errors. + @since(version = 0.2.0) + http-error-code: func(err: borrow) -> option; + + /// This type enumerates the different kinds of errors that may occur when + /// setting or appending to a `fields` resource. + @since(version = 0.2.0) + variant header-error { + /// This error indicates that a `field-name` or `field-value` was + /// syntactically invalid when used with an operation that sets headers in a + /// `fields`. + invalid-syntax, + + /// This error indicates that a forbidden `field-name` was used when trying + /// to set a header in a `fields`. + forbidden, + + /// This error indicates that the operation on the `fields` was not + /// permitted because the fields are immutable. + immutable, + } + + /// Field names are always strings. + /// + /// Field names should always be treated as case insensitive by the `fields` + /// resource for the purposes of equality checking. + @since(version = 0.2.1) + type field-name = field-key; + + /// Field keys are always strings. + /// + /// Field keys should always be treated as case insensitive by the `fields` + /// resource for the purposes of equality checking. + /// + /// # Deprecation + /// + /// This type has been deprecated in favor of the `field-name` type. + @since(version = 0.2.0) + @deprecated(version = 0.2.2) + type field-key = string; + + /// Field values should always be ASCII strings. However, in + /// reality, HTTP implementations often have to interpret malformed values, + /// so they are provided as a list of bytes. + @since(version = 0.2.0) + type field-value = list; + + /// This following block defines the `fields` resource which corresponds to + /// HTTP standard Fields. Fields are a common representation used for both + /// Headers and Trailers. + /// + /// A `fields` may be mutable or immutable. A `fields` created using the + /// constructor, `from-list`, or `clone` will be mutable, but a `fields` + /// resource given by other means (including, but not limited to, + /// `incoming-request.headers`, `outgoing-request.headers`) might be be + /// immutable. In an immutable fields, the `set`, `append`, and `delete` + /// operations will fail with `header-error.immutable`. + @since(version = 0.2.0) + resource fields { + + /// Construct an empty HTTP Fields. + /// + /// The resulting `fields` is mutable. + @since(version = 0.2.0) + constructor(); + + /// Construct an HTTP Fields. + /// + /// The resulting `fields` is mutable. + /// + /// The list represents each name-value pair in the Fields. Names + /// which have multiple values are represented by multiple entries in this + /// list with the same name. + /// + /// The tuple is a pair of the field name, represented as a string, and + /// Value, represented as a list of bytes. + /// + /// An error result will be returned if any `field-name` or `field-value` is + /// syntactically invalid, or if a field is forbidden. + @since(version = 0.2.0) + from-list: static func( + entries: list> + ) -> result; + + /// Get all of the values corresponding to a name. If the name is not present + /// in this `fields` or is syntactically invalid, an empty list is returned. + /// However, if the name is present but empty, this is represented by a list + /// with one or more empty field-values present. + @since(version = 0.2.0) + get: func(name: field-name) -> list; + + /// Returns `true` when the name is present in this `fields`. If the name is + /// syntactically invalid, `false` is returned. + @since(version = 0.2.0) + has: func(name: field-name) -> bool; + + /// Set all of the values for a name. Clears any existing values for that + /// name, if they have been set. + /// + /// Fails with `header-error.immutable` if the `fields` are immutable. + /// + /// Fails with `header-error.invalid-syntax` if the `field-name` or any of + /// the `field-value`s are syntactically invalid. + @since(version = 0.2.0) + set: func(name: field-name, value: list) -> result<_, header-error>; + + /// Delete all values for a name. Does nothing if no values for the name + /// exist. + /// + /// Fails with `header-error.immutable` if the `fields` are immutable. + /// + /// Fails with `header-error.invalid-syntax` if the `field-name` is + /// syntactically invalid. + @since(version = 0.2.0) + delete: func(name: field-name) -> result<_, header-error>; + + /// Append a value for a name. Does not change or delete any existing + /// values for that name. + /// + /// Fails with `header-error.immutable` if the `fields` are immutable. + /// + /// Fails with `header-error.invalid-syntax` if the `field-name` or + /// `field-value` are syntactically invalid. + @since(version = 0.2.0) + append: func(name: field-name, value: field-value) -> result<_, header-error>; + + /// Retrieve the full set of names and values in the Fields. Like the + /// constructor, the list represents each name-value pair. + /// + /// The outer list represents each name-value pair in the Fields. Names + /// which have multiple values are represented by multiple entries in this + /// list with the same name. + /// + /// The names and values are always returned in the original casing and in + /// the order in which they will be serialized for transport. + @since(version = 0.2.0) + entries: func() -> list>; + + /// Make a deep copy of the Fields. Equivalent in behavior to calling the + /// `fields` constructor on the return value of `entries`. The resulting + /// `fields` is mutable. + @since(version = 0.2.0) + clone: func() -> fields; + } + + /// Headers is an alias for Fields. + @since(version = 0.2.0) + type headers = fields; + + /// Trailers is an alias for Fields. + @since(version = 0.2.0) + type trailers = fields; + + /// Represents an incoming HTTP Request. + @since(version = 0.2.0) + resource incoming-request { + + /// Returns the method of the incoming request. + @since(version = 0.2.0) + method: func() -> method; + + /// Returns the path with query parameters from the request, as a string. + @since(version = 0.2.0) + path-with-query: func() -> option; + + /// Returns the protocol scheme from the request. + @since(version = 0.2.0) + scheme: func() -> option; + + /// Returns the authority of the Request's target URI, if present. + @since(version = 0.2.0) + authority: func() -> option; + + /// Get the `headers` associated with the request. + /// + /// The returned `headers` resource is immutable: `set`, `append`, and + /// `delete` operations will fail with `header-error.immutable`. + /// + /// The `headers` returned are a child resource: it must be dropped before + /// the parent `incoming-request` is dropped. Dropping this + /// `incoming-request` before all children are dropped will trap. + @since(version = 0.2.0) + headers: func() -> headers; + + /// Gives the `incoming-body` associated with this request. Will only + /// return success at most once, and subsequent calls will return error. + @since(version = 0.2.0) + consume: func() -> result; + } + + /// Represents an outgoing HTTP Request. + @since(version = 0.2.0) + resource outgoing-request { + + /// Construct a new `outgoing-request` with a default `method` of `GET`, and + /// `none` values for `path-with-query`, `scheme`, and `authority`. + /// + /// * `headers` is the HTTP Headers for the Request. + /// + /// It is possible to construct, or manipulate with the accessor functions + /// below, an `outgoing-request` with an invalid combination of `scheme` + /// and `authority`, or `headers` which are not permitted to be sent. + /// It is the obligation of the `outgoing-handler.handle` implementation + /// to reject invalid constructions of `outgoing-request`. + @since(version = 0.2.0) + constructor( + headers: headers + ); + + /// Returns the resource corresponding to the outgoing Body for this + /// Request. + /// + /// Returns success on the first call: the `outgoing-body` resource for + /// this `outgoing-request` can be retrieved at most once. Subsequent + /// calls will return error. + @since(version = 0.2.0) + body: func() -> result; + + /// Get the Method for the Request. + @since(version = 0.2.0) + method: func() -> method; + /// Set the Method for the Request. Fails if the string present in a + /// `method.other` argument is not a syntactically valid method. + @since(version = 0.2.0) + set-method: func(method: method) -> result; + + /// Get the combination of the HTTP Path and Query for the Request. + /// When `none`, this represents an empty Path and empty Query. + @since(version = 0.2.0) + path-with-query: func() -> option; + /// Set the combination of the HTTP Path and Query for the Request. + /// When `none`, this represents an empty Path and empty Query. Fails is the + /// string given is not a syntactically valid path and query uri component. + @since(version = 0.2.0) + set-path-with-query: func(path-with-query: option) -> result; + + /// Get the HTTP Related Scheme for the Request. When `none`, the + /// implementation may choose an appropriate default scheme. + @since(version = 0.2.0) + scheme: func() -> option; + /// Set the HTTP Related Scheme for the Request. When `none`, the + /// implementation may choose an appropriate default scheme. Fails if the + /// string given is not a syntactically valid uri scheme. + @since(version = 0.2.0) + set-scheme: func(scheme: option) -> result; + + /// Get the authority of the Request's target URI. A value of `none` may be used + /// with Related Schemes which do not require an authority. The HTTP and + /// HTTPS schemes always require an authority. + @since(version = 0.2.0) + authority: func() -> option; + /// Set the authority of the Request's target URI. A value of `none` may be used + /// with Related Schemes which do not require an authority. The HTTP and + /// HTTPS schemes always require an authority. Fails if the string given is + /// not a syntactically valid URI authority. + @since(version = 0.2.0) + set-authority: func(authority: option) -> result; + + /// Get the headers associated with the Request. + /// + /// The returned `headers` resource is immutable: `set`, `append`, and + /// `delete` operations will fail with `header-error.immutable`. + /// + /// This headers resource is a child: it must be dropped before the parent + /// `outgoing-request` is dropped, or its ownership is transferred to + /// another component by e.g. `outgoing-handler.handle`. + @since(version = 0.2.0) + headers: func() -> headers; + } + + /// Parameters for making an HTTP Request. Each of these parameters is + /// currently an optional timeout applicable to the transport layer of the + /// HTTP protocol. + /// + /// These timeouts are separate from any the user may use to bound a + /// blocking call to `wasi:io/poll.poll`. + @since(version = 0.2.0) + resource request-options { + /// Construct a default `request-options` value. + @since(version = 0.2.0) + constructor(); + + /// The timeout for the initial connect to the HTTP Server. + @since(version = 0.2.0) + connect-timeout: func() -> option; + + /// Set the timeout for the initial connect to the HTTP Server. An error + /// return value indicates that this timeout is not supported. + @since(version = 0.2.0) + set-connect-timeout: func(duration: option) -> result; + + /// The timeout for receiving the first byte of the Response body. + @since(version = 0.2.0) + first-byte-timeout: func() -> option; + + /// Set the timeout for receiving the first byte of the Response body. An + /// error return value indicates that this timeout is not supported. + @since(version = 0.2.0) + set-first-byte-timeout: func(duration: option) -> result; + + /// The timeout for receiving subsequent chunks of bytes in the Response + /// body stream. + @since(version = 0.2.0) + between-bytes-timeout: func() -> option; + + /// Set the timeout for receiving subsequent chunks of bytes in the Response + /// body stream. An error return value indicates that this timeout is not + /// supported. + @since(version = 0.2.0) + set-between-bytes-timeout: func(duration: option) -> result; + } + + /// Represents the ability to send an HTTP Response. + /// + /// This resource is used by the `wasi:http/incoming-handler` interface to + /// allow a Response to be sent corresponding to the Request provided as the + /// other argument to `incoming-handler.handle`. + @since(version = 0.2.0) + resource response-outparam { + + /// Set the value of the `response-outparam` to either send a response, + /// or indicate an error. + /// + /// This method consumes the `response-outparam` to ensure that it is + /// called at most once. If it is never called, the implementation + /// will respond with an error. + /// + /// The user may provide an `error` to `response` to allow the + /// implementation determine how to respond with an HTTP error response. + @since(version = 0.2.0) + set: static func( + param: response-outparam, + response: result, + ); + } + + /// This type corresponds to the HTTP standard Status Code. + @since(version = 0.2.0) + type status-code = u16; + + /// Represents an incoming HTTP Response. + @since(version = 0.2.0) + resource incoming-response { + + /// Returns the status code from the incoming response. + @since(version = 0.2.0) + status: func() -> status-code; + + /// Returns the headers from the incoming response. + /// + /// The returned `headers` resource is immutable: `set`, `append`, and + /// `delete` operations will fail with `header-error.immutable`. + /// + /// This headers resource is a child: it must be dropped before the parent + /// `incoming-response` is dropped. + @since(version = 0.2.0) + headers: func() -> headers; + + /// Returns the incoming body. May be called at most once. Returns error + /// if called additional times. + @since(version = 0.2.0) + consume: func() -> result; + } + + /// Represents an incoming HTTP Request or Response's Body. + /// + /// A body has both its contents - a stream of bytes - and a (possibly + /// empty) set of trailers, indicating that the full contents of the + /// body have been received. This resource represents the contents as + /// an `input-stream` and the delivery of trailers as a `future-trailers`, + /// and ensures that the user of this interface may only be consuming either + /// the body contents or waiting on trailers at any given time. + @since(version = 0.2.0) + resource incoming-body { + + /// Returns the contents of the body, as a stream of bytes. + /// + /// Returns success on first call: the stream representing the contents + /// can be retrieved at most once. Subsequent calls will return error. + /// + /// The returned `input-stream` resource is a child: it must be dropped + /// before the parent `incoming-body` is dropped, or consumed by + /// `incoming-body.finish`. + /// + /// This invariant ensures that the implementation can determine whether + /// the user is consuming the contents of the body, waiting on the + /// `future-trailers` to be ready, or neither. This allows for network + /// backpressure is to be applied when the user is consuming the body, + /// and for that backpressure to not inhibit delivery of the trailers if + /// the user does not read the entire body. + @since(version = 0.2.0) + %stream: func() -> result; + + /// Takes ownership of `incoming-body`, and returns a `future-trailers`. + /// This function will trap if the `input-stream` child is still alive. + @since(version = 0.2.0) + finish: static func(this: incoming-body) -> future-trailers; + } + + /// Represents a future which may eventually return trailers, or an error. + /// + /// In the case that the incoming HTTP Request or Response did not have any + /// trailers, this future will resolve to the empty set of trailers once the + /// complete Request or Response body has been received. + @since(version = 0.2.0) + resource future-trailers { + + /// Returns a pollable which becomes ready when either the trailers have + /// been received, or an error has occurred. When this pollable is ready, + /// the `get` method will return `some`. + @since(version = 0.2.0) + subscribe: func() -> pollable; + + /// Returns the contents of the trailers, or an error which occurred, + /// once the future is ready. + /// + /// The outer `option` represents future readiness. Users can wait on this + /// `option` to become `some` using the `subscribe` method. + /// + /// The outer `result` is used to retrieve the trailers or error at most + /// once. It will be success on the first call in which the outer option + /// is `some`, and error on subsequent calls. + /// + /// The inner `result` represents that either the HTTP Request or Response + /// body, as well as any trailers, were received successfully, or that an + /// error occurred receiving them. The optional `trailers` indicates whether + /// or not trailers were present in the body. + /// + /// When some `trailers` are returned by this method, the `trailers` + /// resource is immutable, and a child. Use of the `set`, `append`, or + /// `delete` methods will return an error, and the resource must be + /// dropped before the parent `future-trailers` is dropped. + @since(version = 0.2.0) + get: func() -> option, error-code>>>; + } + + /// Represents an outgoing HTTP Response. + @since(version = 0.2.0) + resource outgoing-response { + + /// Construct an `outgoing-response`, with a default `status-code` of `200`. + /// If a different `status-code` is needed, it must be set via the + /// `set-status-code` method. + /// + /// * `headers` is the HTTP Headers for the Response. + @since(version = 0.2.0) + constructor(headers: headers); + + /// Get the HTTP Status Code for the Response. + @since(version = 0.2.0) + status-code: func() -> status-code; + + /// Set the HTTP Status Code for the Response. Fails if the status-code + /// given is not a valid http status code. + @since(version = 0.2.0) + set-status-code: func(status-code: status-code) -> result; + + /// Get the headers associated with the Request. + /// + /// The returned `headers` resource is immutable: `set`, `append`, and + /// `delete` operations will fail with `header-error.immutable`. + /// + /// This headers resource is a child: it must be dropped before the parent + /// `outgoing-request` is dropped, or its ownership is transferred to + /// another component by e.g. `outgoing-handler.handle`. + @since(version = 0.2.0) + headers: func() -> headers; + + /// Returns the resource corresponding to the outgoing Body for this Response. + /// + /// Returns success on the first call: the `outgoing-body` resource for + /// this `outgoing-response` can be retrieved at most once. Subsequent + /// calls will return error. + @since(version = 0.2.0) + body: func() -> result; + } + + /// Represents an outgoing HTTP Request or Response's Body. + /// + /// A body has both its contents - a stream of bytes - and a (possibly + /// empty) set of trailers, inducating the full contents of the body + /// have been sent. This resource represents the contents as an + /// `output-stream` child resource, and the completion of the body (with + /// optional trailers) with a static function that consumes the + /// `outgoing-body` resource, and ensures that the user of this interface + /// may not write to the body contents after the body has been finished. + /// + /// If the user code drops this resource, as opposed to calling the static + /// method `finish`, the implementation should treat the body as incomplete, + /// and that an error has occurred. The implementation should propagate this + /// error to the HTTP protocol by whatever means it has available, + /// including: corrupting the body on the wire, aborting the associated + /// Request, or sending a late status code for the Response. + @since(version = 0.2.0) + resource outgoing-body { + + /// Returns a stream for writing the body contents. + /// + /// The returned `output-stream` is a child resource: it must be dropped + /// before the parent `outgoing-body` resource is dropped (or finished), + /// otherwise the `outgoing-body` drop or `finish` will trap. + /// + /// Returns success on the first call: the `output-stream` resource for + /// this `outgoing-body` may be retrieved at most once. Subsequent calls + /// will return error. + @since(version = 0.2.0) + write: func() -> result; + + /// Finalize an outgoing body, optionally providing trailers. This must be + /// called to signal that the response is complete. If the `outgoing-body` + /// is dropped without calling `outgoing-body.finalize`, the implementation + /// should treat the body as corrupted. + /// + /// Fails if the body's `outgoing-request` or `outgoing-response` was + /// constructed with a Content-Length header, and the contents written + /// to the body (via `write`) does not match the value given in the + /// Content-Length. + @since(version = 0.2.0) + finish: static func( + this: outgoing-body, + trailers: option + ) -> result<_, error-code>; + } + + /// Represents a future which may eventually return an incoming HTTP + /// Response, or an error. + /// + /// This resource is returned by the `wasi:http/outgoing-handler` interface to + /// provide the HTTP Response corresponding to the sent Request. + @since(version = 0.2.0) + resource future-incoming-response { + /// Returns a pollable which becomes ready when either the Response has + /// been received, or an error has occurred. When this pollable is ready, + /// the `get` method will return `some`. + @since(version = 0.2.0) + subscribe: func() -> pollable; + + /// Returns the incoming HTTP Response, or an error, once one is ready. + /// + /// The outer `option` represents future readiness. Users can wait on this + /// `option` to become `some` using the `subscribe` method. + /// + /// The outer `result` is used to retrieve the response or error at most + /// once. It will be success on the first call in which the outer option + /// is `some`, and error on subsequent calls. + /// + /// The inner `result` represents that either the incoming HTTP Response + /// status and headers have received successfully, or that an error + /// occurred. Errors may also occur while consuming the response body, + /// but those will be reported by the `incoming-body` and its + /// `output-stream` child. + @since(version = 0.2.0) + get: func() -> option>>; + } +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/io-0-2-0/error.wit b/examples/components/webgpu-tensorflow/service/wit/deps/io-0-2-0/error.wit new file mode 100644 index 00000000..22e5b648 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/io-0-2-0/error.wit @@ -0,0 +1,34 @@ +package wasi:io@0.2.0; + + +interface error { + /// A resource which represents some error information. + /// + /// The only method provided by this resource is `to-debug-string`, + /// which provides some human-readable information about the error. + /// + /// In the `wasi:io` package, this resource is returned through the + /// `wasi:io/streams/stream-error` type. + /// + /// To provide more specific error information, other interfaces may + /// provide functions to further "downcast" this error into more specific + /// error information. For example, `error`s returned in streams derived + /// from filesystem types to be described using the filesystem's own + /// error-code type, using the function + /// `wasi:filesystem/types/filesystem-error-code`, which takes a parameter + /// `borrow` and returns + /// `option`. + /// + /// The set of functions which can "downcast" an `error` into a more + /// concrete type is open. + resource error { + /// Returns a string that is suitable to assist humans in debugging + /// this error. + /// + /// WARNING: The returned string should not be consumed mechanically! + /// It may change across platforms, hosts, or other implementation + /// details. Parsing this string is a major platform-compatibility + /// hazard. + to-debug-string: func() -> string; + } +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/io-0-2-0/poll.wit b/examples/components/webgpu-tensorflow/service/wit/deps/io-0-2-0/poll.wit new file mode 100644 index 00000000..ddc67f8b --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/io-0-2-0/poll.wit @@ -0,0 +1,41 @@ +package wasi:io@0.2.0; + +/// A poll API intended to let users wait for I/O events on multiple handles +/// at once. +interface poll { + /// `pollable` represents a single I/O event which may be ready, or not. + resource pollable { + + /// Return the readiness of a pollable. This function never blocks. + /// + /// Returns `true` when the pollable is ready, and `false` otherwise. + ready: func() -> bool; + + /// `block` returns immediately if the pollable is ready, and otherwise + /// blocks until ready. + /// + /// This function is equivalent to calling `poll.poll` on a list + /// containing only this pollable. + block: func(); + } + + /// Poll for completion on a set of pollables. + /// + /// This function takes a list of pollables, which identify I/O sources of + /// interest, and waits until one or more of the events is ready for I/O. + /// + /// The result `list` contains one or more indices of handles in the + /// argument list that is ready for I/O. + /// + /// If the list contains more elements than can be indexed with a `u32` + /// value, this function traps. + /// + /// A timeout can be implemented by adding a pollable from the + /// wasi-clocks API to the list. + /// + /// This function does not return a `result`; polling in itself does not + /// do any I/O so it doesn't fail. If any of the I/O sources identified by + /// the pollables has an error, it is indicated by marking the source as + /// being reaedy for I/O. + poll: func(in: list>) -> list; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/io-0-2-0/streams.wit b/examples/components/webgpu-tensorflow/service/wit/deps/io-0-2-0/streams.wit new file mode 100644 index 00000000..6d2f871e --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/io-0-2-0/streams.wit @@ -0,0 +1,262 @@ +package wasi:io@0.2.0; + +/// WASI I/O is an I/O abstraction API which is currently focused on providing +/// stream types. +/// +/// In the future, the component model is expected to add built-in stream types; +/// when it does, they are expected to subsume this API. +interface streams { + use error.{error}; + use poll.{pollable}; + + /// An error for input-stream and output-stream operations. + variant stream-error { + /// The last operation (a write or flush) failed before completion. + /// + /// More information is available in the `error` payload. + last-operation-failed(error), + /// The stream is closed: no more input will be accepted by the + /// stream. A closed output-stream will return this error on all + /// future operations. + closed + } + + /// An input bytestream. + /// + /// `input-stream`s are *non-blocking* to the extent practical on underlying + /// platforms. I/O operations always return promptly; if fewer bytes are + /// promptly available than requested, they return the number of bytes promptly + /// available, which could even be zero. To wait for data to be available, + /// use the `subscribe` function to obtain a `pollable` which can be polled + /// for using `wasi:io/poll`. + resource input-stream { + /// Perform a non-blocking read from the stream. + /// + /// When the source of a `read` is binary data, the bytes from the source + /// are returned verbatim. When the source of a `read` is known to the + /// implementation to be text, bytes containing the UTF-8 encoding of the + /// text are returned. + /// + /// This function returns a list of bytes containing the read data, + /// when successful. The returned list will contain up to `len` bytes; + /// it may return fewer than requested, but not more. The list is + /// empty when no bytes are available for reading at this time. The + /// pollable given by `subscribe` will be ready when more bytes are + /// available. + /// + /// This function fails with a `stream-error` when the operation + /// encounters an error, giving `last-operation-failed`, or when the + /// stream is closed, giving `closed`. + /// + /// When the caller gives a `len` of 0, it represents a request to + /// read 0 bytes. If the stream is still open, this call should + /// succeed and return an empty list, or otherwise fail with `closed`. + /// + /// The `len` parameter is a `u64`, which could represent a list of u8 which + /// is not possible to allocate in wasm32, or not desirable to allocate as + /// as a return value by the callee. The callee may return a list of bytes + /// less than `len` in size while more bytes are available for reading. + read: func( + /// The maximum number of bytes to read + len: u64 + ) -> result, stream-error>; + + /// Read bytes from a stream, after blocking until at least one byte can + /// be read. Except for blocking, behavior is identical to `read`. + blocking-read: func( + /// The maximum number of bytes to read + len: u64 + ) -> result, stream-error>; + + /// Skip bytes from a stream. Returns number of bytes skipped. + /// + /// Behaves identical to `read`, except instead of returning a list + /// of bytes, returns the number of bytes consumed from the stream. + skip: func( + /// The maximum number of bytes to skip. + len: u64, + ) -> result; + + /// Skip bytes from a stream, after blocking until at least one byte + /// can be skipped. Except for blocking behavior, identical to `skip`. + blocking-skip: func( + /// The maximum number of bytes to skip. + len: u64, + ) -> result; + + /// Create a `pollable` which will resolve once either the specified stream + /// has bytes available to read or the other end of the stream has been + /// closed. + /// The created `pollable` is a child resource of the `input-stream`. + /// Implementations may trap if the `input-stream` is dropped before + /// all derived `pollable`s created with this function are dropped. + subscribe: func() -> pollable; + } + + + /// An output bytestream. + /// + /// `output-stream`s are *non-blocking* to the extent practical on + /// underlying platforms. Except where specified otherwise, I/O operations also + /// always return promptly, after the number of bytes that can be written + /// promptly, which could even be zero. To wait for the stream to be ready to + /// accept data, the `subscribe` function to obtain a `pollable` which can be + /// polled for using `wasi:io/poll`. + resource output-stream { + /// Check readiness for writing. This function never blocks. + /// + /// Returns the number of bytes permitted for the next call to `write`, + /// or an error. Calling `write` with more bytes than this function has + /// permitted will trap. + /// + /// When this function returns 0 bytes, the `subscribe` pollable will + /// become ready when this function will report at least 1 byte, or an + /// error. + check-write: func() -> result; + + /// Perform a write. This function never blocks. + /// + /// When the destination of a `write` is binary data, the bytes from + /// `contents` are written verbatim. When the destination of a `write` is + /// known to the implementation to be text, the bytes of `contents` are + /// transcoded from UTF-8 into the encoding of the destination and then + /// written. + /// + /// Precondition: check-write gave permit of Ok(n) and contents has a + /// length of less than or equal to n. Otherwise, this function will trap. + /// + /// returns Err(closed) without writing if the stream has closed since + /// the last call to check-write provided a permit. + write: func( + contents: list + ) -> result<_, stream-error>; + + /// Perform a write of up to 4096 bytes, and then flush the stream. Block + /// until all of these operations are complete, or an error occurs. + /// + /// This is a convenience wrapper around the use of `check-write`, + /// `subscribe`, `write`, and `flush`, and is implemented with the + /// following pseudo-code: + /// + /// ```text + /// let pollable = this.subscribe(); + /// while !contents.is_empty() { + /// // Wait for the stream to become writable + /// pollable.block(); + /// let Ok(n) = this.check-write(); // eliding error handling + /// let len = min(n, contents.len()); + /// let (chunk, rest) = contents.split_at(len); + /// this.write(chunk ); // eliding error handling + /// contents = rest; + /// } + /// this.flush(); + /// // Wait for completion of `flush` + /// pollable.block(); + /// // Check for any errors that arose during `flush` + /// let _ = this.check-write(); // eliding error handling + /// ``` + blocking-write-and-flush: func( + contents: list + ) -> result<_, stream-error>; + + /// Request to flush buffered output. This function never blocks. + /// + /// This tells the output-stream that the caller intends any buffered + /// output to be flushed. the output which is expected to be flushed + /// is all that has been passed to `write` prior to this call. + /// + /// Upon calling this function, the `output-stream` will not accept any + /// writes (`check-write` will return `ok(0)`) until the flush has + /// completed. The `subscribe` pollable will become ready when the + /// flush has completed and the stream can accept more writes. + flush: func() -> result<_, stream-error>; + + /// Request to flush buffered output, and block until flush completes + /// and stream is ready for writing again. + blocking-flush: func() -> result<_, stream-error>; + + /// Create a `pollable` which will resolve once the output-stream + /// is ready for more writing, or an error has occured. When this + /// pollable is ready, `check-write` will return `ok(n)` with n>0, or an + /// error. + /// + /// If the stream is closed, this pollable is always ready immediately. + /// + /// The created `pollable` is a child resource of the `output-stream`. + /// Implementations may trap if the `output-stream` is dropped before + /// all derived `pollable`s created with this function are dropped. + subscribe: func() -> pollable; + + /// Write zeroes to a stream. + /// + /// This should be used precisely like `write` with the exact same + /// preconditions (must use check-write first), but instead of + /// passing a list of bytes, you simply pass the number of zero-bytes + /// that should be written. + write-zeroes: func( + /// The number of zero-bytes to write + len: u64 + ) -> result<_, stream-error>; + + /// Perform a write of up to 4096 zeroes, and then flush the stream. + /// Block until all of these operations are complete, or an error + /// occurs. + /// + /// This is a convenience wrapper around the use of `check-write`, + /// `subscribe`, `write-zeroes`, and `flush`, and is implemented with + /// the following pseudo-code: + /// + /// ```text + /// let pollable = this.subscribe(); + /// while num_zeroes != 0 { + /// // Wait for the stream to become writable + /// pollable.block(); + /// let Ok(n) = this.check-write(); // eliding error handling + /// let len = min(n, num_zeroes); + /// this.write-zeroes(len); // eliding error handling + /// num_zeroes -= len; + /// } + /// this.flush(); + /// // Wait for completion of `flush` + /// pollable.block(); + /// // Check for any errors that arose during `flush` + /// let _ = this.check-write(); // eliding error handling + /// ``` + blocking-write-zeroes-and-flush: func( + /// The number of zero-bytes to write + len: u64 + ) -> result<_, stream-error>; + + /// Read from one stream and write to another. + /// + /// The behavior of splice is equivelant to: + /// 1. calling `check-write` on the `output-stream` + /// 2. calling `read` on the `input-stream` with the smaller of the + /// `check-write` permitted length and the `len` provided to `splice` + /// 3. calling `write` on the `output-stream` with that read data. + /// + /// Any error reported by the call to `check-write`, `read`, or + /// `write` ends the splice and reports that error. + /// + /// This function returns the number of bytes transferred; it may be less + /// than `len`. + splice: func( + /// The stream to read from + src: borrow, + /// The number of bytes to splice + len: u64, + ) -> result; + + /// Read from one stream and write to another, with blocking. + /// + /// This is similar to `splice`, except that it blocks until the + /// `output-stream` is ready for writing, and the `input-stream` + /// is ready for reading, before performing the `splice`. + blocking-splice: func( + /// The stream to read from + src: borrow, + /// The number of bytes to splice + len: u64, + ) -> result; + } +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/io-0-2-0/world.wit b/examples/components/webgpu-tensorflow/service/wit/deps/io-0-2-0/world.wit new file mode 100644 index 00000000..5f0b43fe --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/io-0-2-0/world.wit @@ -0,0 +1,6 @@ +package wasi:io@0.2.0; + +world imports { + import streams; + import poll; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/io/error.wit b/examples/components/webgpu-tensorflow/service/wit/deps/io/error.wit new file mode 100644 index 00000000..97c60687 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/io/error.wit @@ -0,0 +1,34 @@ +package wasi:io@0.2.3; + +@since(version = 0.2.0) +interface error { + /// A resource which represents some error information. + /// + /// The only method provided by this resource is `to-debug-string`, + /// which provides some human-readable information about the error. + /// + /// In the `wasi:io` package, this resource is returned through the + /// `wasi:io/streams/stream-error` type. + /// + /// To provide more specific error information, other interfaces may + /// offer functions to "downcast" this error into more specific types. For example, + /// errors returned from streams derived from filesystem types can be described using + /// the filesystem's own error-code type. This is done using the function + /// `wasi:filesystem/types/filesystem-error-code`, which takes a `borrow` + /// parameter and returns an `option`. + /// + /// The set of functions which can "downcast" an `error` into a more + /// concrete type is open. + @since(version = 0.2.0) + resource error { + /// Returns a string that is suitable to assist humans in debugging + /// this error. + /// + /// WARNING: The returned string should not be consumed mechanically! + /// It may change across platforms, hosts, or other implementation + /// details. Parsing this string is a major platform-compatibility + /// hazard. + @since(version = 0.2.0) + to-debug-string: func() -> string; + } +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/io/poll.wit b/examples/components/webgpu-tensorflow/service/wit/deps/io/poll.wit new file mode 100644 index 00000000..9bcbe8e0 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/io/poll.wit @@ -0,0 +1,47 @@ +package wasi:io@0.2.3; + +/// A poll API intended to let users wait for I/O events on multiple handles +/// at once. +@since(version = 0.2.0) +interface poll { + /// `pollable` represents a single I/O event which may be ready, or not. + @since(version = 0.2.0) + resource pollable { + + /// Return the readiness of a pollable. This function never blocks. + /// + /// Returns `true` when the pollable is ready, and `false` otherwise. + @since(version = 0.2.0) + ready: func() -> bool; + + /// `block` returns immediately if the pollable is ready, and otherwise + /// blocks until ready. + /// + /// This function is equivalent to calling `poll.poll` on a list + /// containing only this pollable. + @since(version = 0.2.0) + block: func(); + } + + /// Poll for completion on a set of pollables. + /// + /// This function takes a list of pollables, which identify I/O sources of + /// interest, and waits until one or more of the events is ready for I/O. + /// + /// The result `list` contains one or more indices of handles in the + /// argument list that is ready for I/O. + /// + /// This function traps if either: + /// - the list is empty, or: + /// - the list contains more elements than can be indexed with a `u32` value. + /// + /// A timeout can be implemented by adding a pollable from the + /// wasi-clocks API to the list. + /// + /// This function does not return a `result`; polling in itself does not + /// do any I/O so it doesn't fail. If any of the I/O sources identified by + /// the pollables has an error, it is indicated by marking the source as + /// being ready for I/O. + @since(version = 0.2.0) + poll: func(in: list>) -> list; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/io/streams.wit b/examples/components/webgpu-tensorflow/service/wit/deps/io/streams.wit new file mode 100644 index 00000000..0de08462 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/io/streams.wit @@ -0,0 +1,290 @@ +package wasi:io@0.2.3; + +/// WASI I/O is an I/O abstraction API which is currently focused on providing +/// stream types. +/// +/// In the future, the component model is expected to add built-in stream types; +/// when it does, they are expected to subsume this API. +@since(version = 0.2.0) +interface streams { + @since(version = 0.2.0) + use error.{error}; + @since(version = 0.2.0) + use poll.{pollable}; + + /// An error for input-stream and output-stream operations. + @since(version = 0.2.0) + variant stream-error { + /// The last operation (a write or flush) failed before completion. + /// + /// More information is available in the `error` payload. + /// + /// After this, the stream will be closed. All future operations return + /// `stream-error::closed`. + last-operation-failed(error), + /// The stream is closed: no more input will be accepted by the + /// stream. A closed output-stream will return this error on all + /// future operations. + closed + } + + /// An input bytestream. + /// + /// `input-stream`s are *non-blocking* to the extent practical on underlying + /// platforms. I/O operations always return promptly; if fewer bytes are + /// promptly available than requested, they return the number of bytes promptly + /// available, which could even be zero. To wait for data to be available, + /// use the `subscribe` function to obtain a `pollable` which can be polled + /// for using `wasi:io/poll`. + @since(version = 0.2.0) + resource input-stream { + /// Perform a non-blocking read from the stream. + /// + /// When the source of a `read` is binary data, the bytes from the source + /// are returned verbatim. When the source of a `read` is known to the + /// implementation to be text, bytes containing the UTF-8 encoding of the + /// text are returned. + /// + /// This function returns a list of bytes containing the read data, + /// when successful. The returned list will contain up to `len` bytes; + /// it may return fewer than requested, but not more. The list is + /// empty when no bytes are available for reading at this time. The + /// pollable given by `subscribe` will be ready when more bytes are + /// available. + /// + /// This function fails with a `stream-error` when the operation + /// encounters an error, giving `last-operation-failed`, or when the + /// stream is closed, giving `closed`. + /// + /// When the caller gives a `len` of 0, it represents a request to + /// read 0 bytes. If the stream is still open, this call should + /// succeed and return an empty list, or otherwise fail with `closed`. + /// + /// The `len` parameter is a `u64`, which could represent a list of u8 which + /// is not possible to allocate in wasm32, or not desirable to allocate as + /// as a return value by the callee. The callee may return a list of bytes + /// less than `len` in size while more bytes are available for reading. + @since(version = 0.2.0) + read: func( + /// The maximum number of bytes to read + len: u64 + ) -> result, stream-error>; + + /// Read bytes from a stream, after blocking until at least one byte can + /// be read. Except for blocking, behavior is identical to `read`. + @since(version = 0.2.0) + blocking-read: func( + /// The maximum number of bytes to read + len: u64 + ) -> result, stream-error>; + + /// Skip bytes from a stream. Returns number of bytes skipped. + /// + /// Behaves identical to `read`, except instead of returning a list + /// of bytes, returns the number of bytes consumed from the stream. + @since(version = 0.2.0) + skip: func( + /// The maximum number of bytes to skip. + len: u64, + ) -> result; + + /// Skip bytes from a stream, after blocking until at least one byte + /// can be skipped. Except for blocking behavior, identical to `skip`. + @since(version = 0.2.0) + blocking-skip: func( + /// The maximum number of bytes to skip. + len: u64, + ) -> result; + + /// Create a `pollable` which will resolve once either the specified stream + /// has bytes available to read or the other end of the stream has been + /// closed. + /// The created `pollable` is a child resource of the `input-stream`. + /// Implementations may trap if the `input-stream` is dropped before + /// all derived `pollable`s created with this function are dropped. + @since(version = 0.2.0) + subscribe: func() -> pollable; + } + + + /// An output bytestream. + /// + /// `output-stream`s are *non-blocking* to the extent practical on + /// underlying platforms. Except where specified otherwise, I/O operations also + /// always return promptly, after the number of bytes that can be written + /// promptly, which could even be zero. To wait for the stream to be ready to + /// accept data, the `subscribe` function to obtain a `pollable` which can be + /// polled for using `wasi:io/poll`. + /// + /// Dropping an `output-stream` while there's still an active write in + /// progress may result in the data being lost. Before dropping the stream, + /// be sure to fully flush your writes. + @since(version = 0.2.0) + resource output-stream { + /// Check readiness for writing. This function never blocks. + /// + /// Returns the number of bytes permitted for the next call to `write`, + /// or an error. Calling `write` with more bytes than this function has + /// permitted will trap. + /// + /// When this function returns 0 bytes, the `subscribe` pollable will + /// become ready when this function will report at least 1 byte, or an + /// error. + @since(version = 0.2.0) + check-write: func() -> result; + + /// Perform a write. This function never blocks. + /// + /// When the destination of a `write` is binary data, the bytes from + /// `contents` are written verbatim. When the destination of a `write` is + /// known to the implementation to be text, the bytes of `contents` are + /// transcoded from UTF-8 into the encoding of the destination and then + /// written. + /// + /// Precondition: check-write gave permit of Ok(n) and contents has a + /// length of less than or equal to n. Otherwise, this function will trap. + /// + /// returns Err(closed) without writing if the stream has closed since + /// the last call to check-write provided a permit. + @since(version = 0.2.0) + write: func( + contents: list + ) -> result<_, stream-error>; + + /// Perform a write of up to 4096 bytes, and then flush the stream. Block + /// until all of these operations are complete, or an error occurs. + /// + /// This is a convenience wrapper around the use of `check-write`, + /// `subscribe`, `write`, and `flush`, and is implemented with the + /// following pseudo-code: + /// + /// ```text + /// let pollable = this.subscribe(); + /// while !contents.is_empty() { + /// // Wait for the stream to become writable + /// pollable.block(); + /// let Ok(n) = this.check-write(); // eliding error handling + /// let len = min(n, contents.len()); + /// let (chunk, rest) = contents.split_at(len); + /// this.write(chunk ); // eliding error handling + /// contents = rest; + /// } + /// this.flush(); + /// // Wait for completion of `flush` + /// pollable.block(); + /// // Check for any errors that arose during `flush` + /// let _ = this.check-write(); // eliding error handling + /// ``` + @since(version = 0.2.0) + blocking-write-and-flush: func( + contents: list + ) -> result<_, stream-error>; + + /// Request to flush buffered output. This function never blocks. + /// + /// This tells the output-stream that the caller intends any buffered + /// output to be flushed. the output which is expected to be flushed + /// is all that has been passed to `write` prior to this call. + /// + /// Upon calling this function, the `output-stream` will not accept any + /// writes (`check-write` will return `ok(0)`) until the flush has + /// completed. The `subscribe` pollable will become ready when the + /// flush has completed and the stream can accept more writes. + @since(version = 0.2.0) + flush: func() -> result<_, stream-error>; + + /// Request to flush buffered output, and block until flush completes + /// and stream is ready for writing again. + @since(version = 0.2.0) + blocking-flush: func() -> result<_, stream-error>; + + /// Create a `pollable` which will resolve once the output-stream + /// is ready for more writing, or an error has occurred. When this + /// pollable is ready, `check-write` will return `ok(n)` with n>0, or an + /// error. + /// + /// If the stream is closed, this pollable is always ready immediately. + /// + /// The created `pollable` is a child resource of the `output-stream`. + /// Implementations may trap if the `output-stream` is dropped before + /// all derived `pollable`s created with this function are dropped. + @since(version = 0.2.0) + subscribe: func() -> pollable; + + /// Write zeroes to a stream. + /// + /// This should be used precisely like `write` with the exact same + /// preconditions (must use check-write first), but instead of + /// passing a list of bytes, you simply pass the number of zero-bytes + /// that should be written. + @since(version = 0.2.0) + write-zeroes: func( + /// The number of zero-bytes to write + len: u64 + ) -> result<_, stream-error>; + + /// Perform a write of up to 4096 zeroes, and then flush the stream. + /// Block until all of these operations are complete, or an error + /// occurs. + /// + /// This is a convenience wrapper around the use of `check-write`, + /// `subscribe`, `write-zeroes`, and `flush`, and is implemented with + /// the following pseudo-code: + /// + /// ```text + /// let pollable = this.subscribe(); + /// while num_zeroes != 0 { + /// // Wait for the stream to become writable + /// pollable.block(); + /// let Ok(n) = this.check-write(); // eliding error handling + /// let len = min(n, num_zeroes); + /// this.write-zeroes(len); // eliding error handling + /// num_zeroes -= len; + /// } + /// this.flush(); + /// // Wait for completion of `flush` + /// pollable.block(); + /// // Check for any errors that arose during `flush` + /// let _ = this.check-write(); // eliding error handling + /// ``` + @since(version = 0.2.0) + blocking-write-zeroes-and-flush: func( + /// The number of zero-bytes to write + len: u64 + ) -> result<_, stream-error>; + + /// Read from one stream and write to another. + /// + /// The behavior of splice is equivalent to: + /// 1. calling `check-write` on the `output-stream` + /// 2. calling `read` on the `input-stream` with the smaller of the + /// `check-write` permitted length and the `len` provided to `splice` + /// 3. calling `write` on the `output-stream` with that read data. + /// + /// Any error reported by the call to `check-write`, `read`, or + /// `write` ends the splice and reports that error. + /// + /// This function returns the number of bytes transferred; it may be less + /// than `len`. + @since(version = 0.2.0) + splice: func( + /// The stream to read from + src: borrow, + /// The number of bytes to splice + len: u64, + ) -> result; + + /// Read from one stream and write to another, with blocking. + /// + /// This is similar to `splice`, except that it blocks until the + /// `output-stream` is ready for writing, and the `input-stream` + /// is ready for reading, before performing the `splice`. + @since(version = 0.2.0) + blocking-splice: func( + /// The stream to read from + src: borrow, + /// The number of bytes to splice + len: u64, + ) -> result; + } +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/io/world.wit b/examples/components/webgpu-tensorflow/service/wit/deps/io/world.wit new file mode 100644 index 00000000..f1d2102d --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/io/world.wit @@ -0,0 +1,10 @@ +package wasi:io@0.2.3; + +@since(version = 0.2.0) +world imports { + @since(version = 0.2.0) + import streams; + + @since(version = 0.2.0) + import poll; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/random/insecure-seed.wit b/examples/components/webgpu-tensorflow/service/wit/deps/random/insecure-seed.wit new file mode 100644 index 00000000..67d024d5 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/random/insecure-seed.wit @@ -0,0 +1,27 @@ +package wasi:random@0.2.3; +/// The insecure-seed interface for seeding hash-map DoS resistance. +/// +/// It is intended to be portable at least between Unix-family platforms and +/// Windows. +@since(version = 0.2.0) +interface insecure-seed { + /// Return a 128-bit value that may contain a pseudo-random value. + /// + /// The returned value is not required to be computed from a CSPRNG, and may + /// even be entirely deterministic. Host implementations are encouraged to + /// provide pseudo-random values to any program exposed to + /// attacker-controlled content, to enable DoS protection built into many + /// languages' hash-map implementations. + /// + /// This function is intended to only be called once, by a source language + /// to initialize Denial Of Service (DoS) protection in its hash-map + /// implementation. + /// + /// # Expected future evolution + /// + /// This will likely be changed to a value import, to prevent it from being + /// called multiple times and potentially used for purposes other than DoS + /// protection. + @since(version = 0.2.0) + insecure-seed: func() -> tuple; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/random/insecure.wit b/examples/components/webgpu-tensorflow/service/wit/deps/random/insecure.wit new file mode 100644 index 00000000..a07dfab3 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/random/insecure.wit @@ -0,0 +1,25 @@ +package wasi:random@0.2.3; +/// The insecure interface for insecure pseudo-random numbers. +/// +/// It is intended to be portable at least between Unix-family platforms and +/// Windows. +@since(version = 0.2.0) +interface insecure { + /// Return `len` insecure pseudo-random bytes. + /// + /// This function is not cryptographically secure. Do not use it for + /// anything related to security. + /// + /// There are no requirements on the values of the returned bytes, however + /// implementations are encouraged to return evenly distributed values with + /// a long period. + @since(version = 0.2.0) + get-insecure-random-bytes: func(len: u64) -> list; + + /// Return an insecure pseudo-random `u64` value. + /// + /// This function returns the same type of pseudo-random data as + /// `get-insecure-random-bytes`, represented as a `u64`. + @since(version = 0.2.0) + get-insecure-random-u64: func() -> u64; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/random/random.wit b/examples/components/webgpu-tensorflow/service/wit/deps/random/random.wit new file mode 100644 index 00000000..91957e63 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/random/random.wit @@ -0,0 +1,29 @@ +package wasi:random@0.2.3; +/// WASI Random is a random data API. +/// +/// It is intended to be portable at least between Unix-family platforms and +/// Windows. +@since(version = 0.2.0) +interface random { + /// Return `len` cryptographically-secure random or pseudo-random bytes. + /// + /// This function must produce data at least as cryptographically secure and + /// fast as an adequately seeded cryptographically-secure pseudo-random + /// number generator (CSPRNG). It must not block, from the perspective of + /// the calling program, under any circumstances, including on the first + /// request and on requests for numbers of bytes. The returned data must + /// always be unpredictable. + /// + /// This function must always return fresh data. Deterministic environments + /// must omit this function, rather than implementing it with deterministic + /// data. + @since(version = 0.2.0) + get-random-bytes: func(len: u64) -> list; + + /// Return a cryptographically-secure random or pseudo-random `u64` value. + /// + /// This function returns the same type of data as `get-random-bytes`, + /// represented as a `u64`. + @since(version = 0.2.0) + get-random-u64: func() -> u64; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/random/world.wit b/examples/components/webgpu-tensorflow/service/wit/deps/random/world.wit new file mode 100644 index 00000000..0c1218f3 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/random/world.wit @@ -0,0 +1,13 @@ +package wasi:random@0.2.3; + +@since(version = 0.2.0) +world imports { + @since(version = 0.2.0) + import random; + + @since(version = 0.2.0) + import insecure; + + @since(version = 0.2.0) + import insecure-seed; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/sockets/instance-network.wit b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/instance-network.wit new file mode 100644 index 00000000..5f6e6c1c --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/instance-network.wit @@ -0,0 +1,11 @@ + +/// This interface provides a value-export of the default network handle.. +@since(version = 0.2.0) +interface instance-network { + @since(version = 0.2.0) + use network.{network}; + + /// Get a handle to the default network. + @since(version = 0.2.0) + instance-network: func() -> network; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/sockets/ip-name-lookup.wit b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/ip-name-lookup.wit new file mode 100644 index 00000000..c1d8a47c --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/ip-name-lookup.wit @@ -0,0 +1,56 @@ +@since(version = 0.2.0) +interface ip-name-lookup { + @since(version = 0.2.0) + use wasi:io/poll@0.2.3.{pollable}; + @since(version = 0.2.0) + use network.{network, error-code, ip-address}; + + /// Resolve an internet host name to a list of IP addresses. + /// + /// Unicode domain names are automatically converted to ASCII using IDNA encoding. + /// If the input is an IP address string, the address is parsed and returned + /// as-is without making any external requests. + /// + /// See the wasi-socket proposal README.md for a comparison with getaddrinfo. + /// + /// This function never blocks. It either immediately fails or immediately + /// returns successfully with a `resolve-address-stream` that can be used + /// to (asynchronously) fetch the results. + /// + /// # Typical errors + /// - `invalid-argument`: `name` is a syntactically invalid domain name or IP address. + /// + /// # References: + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + resolve-addresses: func(network: borrow, name: string) -> result; + + @since(version = 0.2.0) + resource resolve-address-stream { + /// Returns the next address from the resolver. + /// + /// This function should be called multiple times. On each call, it will + /// return the next address in connection order preference. If all + /// addresses have been exhausted, this function returns `none`. + /// + /// This function never returns IPv4-mapped IPv6 addresses. + /// + /// # Typical errors + /// - `name-unresolvable`: Name does not exist or has no suitable associated IP addresses. (EAI_NONAME, EAI_NODATA, EAI_ADDRFAMILY) + /// - `temporary-resolver-failure`: A temporary failure in name resolution occurred. (EAI_AGAIN) + /// - `permanent-resolver-failure`: A permanent failure in name resolution occurred. (EAI_FAIL) + /// - `would-block`: A result is not available yet. (EWOULDBLOCK, EAGAIN) + @since(version = 0.2.0) + resolve-next-address: func() -> result, error-code>; + + /// Create a `pollable` which will resolve once the stream is ready for I/O. + /// + /// Note: this function is here for WASI 0.2 only. + /// It's planned to be removed when `future` is natively supported in Preview3. + @since(version = 0.2.0) + subscribe: func() -> pollable; + } +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/sockets/network.wit b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/network.wit new file mode 100644 index 00000000..f3f60a37 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/network.wit @@ -0,0 +1,169 @@ +@since(version = 0.2.0) +interface network { + @unstable(feature = network-error-code) + use wasi:io/error@0.2.3.{error}; + + /// An opaque resource that represents access to (a subset of) the network. + /// This enables context-based security for networking. + /// There is no need for this to map 1:1 to a physical network interface. + @since(version = 0.2.0) + resource network; + + /// Error codes. + /// + /// In theory, every API can return any error code. + /// In practice, API's typically only return the errors documented per API + /// combined with a couple of errors that are always possible: + /// - `unknown` + /// - `access-denied` + /// - `not-supported` + /// - `out-of-memory` + /// - `concurrency-conflict` + /// + /// See each individual API for what the POSIX equivalents are. They sometimes differ per API. + @since(version = 0.2.0) + enum error-code { + /// Unknown error + unknown, + + /// Access denied. + /// + /// POSIX equivalent: EACCES, EPERM + access-denied, + + /// The operation is not supported. + /// + /// POSIX equivalent: EOPNOTSUPP + not-supported, + + /// One of the arguments is invalid. + /// + /// POSIX equivalent: EINVAL + invalid-argument, + + /// Not enough memory to complete the operation. + /// + /// POSIX equivalent: ENOMEM, ENOBUFS, EAI_MEMORY + out-of-memory, + + /// The operation timed out before it could finish completely. + timeout, + + /// This operation is incompatible with another asynchronous operation that is already in progress. + /// + /// POSIX equivalent: EALREADY + concurrency-conflict, + + /// Trying to finish an asynchronous operation that: + /// - has not been started yet, or: + /// - was already finished by a previous `finish-*` call. + /// + /// Note: this is scheduled to be removed when `future`s are natively supported. + not-in-progress, + + /// The operation has been aborted because it could not be completed immediately. + /// + /// Note: this is scheduled to be removed when `future`s are natively supported. + would-block, + + + /// The operation is not valid in the socket's current state. + invalid-state, + + /// A new socket resource could not be created because of a system limit. + new-socket-limit, + + /// A bind operation failed because the provided address is not an address that the `network` can bind to. + address-not-bindable, + + /// A bind operation failed because the provided address is already in use or because there are no ephemeral ports available. + address-in-use, + + /// The remote address is not reachable + remote-unreachable, + + + /// The TCP connection was forcefully rejected + connection-refused, + + /// The TCP connection was reset. + connection-reset, + + /// A TCP connection was aborted. + connection-aborted, + + + /// The size of a datagram sent to a UDP socket exceeded the maximum + /// supported size. + datagram-too-large, + + + /// Name does not exist or has no suitable associated IP addresses. + name-unresolvable, + + /// A temporary failure in name resolution occurred. + temporary-resolver-failure, + + /// A permanent failure in name resolution occurred. + permanent-resolver-failure, + } + + /// Attempts to extract a network-related `error-code` from the stream + /// `error` provided. + /// + /// Stream operations which return `stream-error::last-operation-failed` + /// have a payload with more information about the operation that failed. + /// This payload can be passed through to this function to see if there's + /// network-related information about the error to return. + /// + /// Note that this function is fallible because not all stream-related + /// errors are network-related errors. + @unstable(feature = network-error-code) + network-error-code: func(err: borrow) -> option; + + @since(version = 0.2.0) + enum ip-address-family { + /// Similar to `AF_INET` in POSIX. + ipv4, + + /// Similar to `AF_INET6` in POSIX. + ipv6, + } + + @since(version = 0.2.0) + type ipv4-address = tuple; + @since(version = 0.2.0) + type ipv6-address = tuple; + + @since(version = 0.2.0) + variant ip-address { + ipv4(ipv4-address), + ipv6(ipv6-address), + } + + @since(version = 0.2.0) + record ipv4-socket-address { + /// sin_port + port: u16, + /// sin_addr + address: ipv4-address, + } + + @since(version = 0.2.0) + record ipv6-socket-address { + /// sin6_port + port: u16, + /// sin6_flowinfo + flow-info: u32, + /// sin6_addr + address: ipv6-address, + /// sin6_scope_id + scope-id: u32, + } + + @since(version = 0.2.0) + variant ip-socket-address { + ipv4(ipv4-socket-address), + ipv6(ipv6-socket-address), + } +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/sockets/tcp-create-socket.wit b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/tcp-create-socket.wit new file mode 100644 index 00000000..eedbd307 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/tcp-create-socket.wit @@ -0,0 +1,30 @@ +@since(version = 0.2.0) +interface tcp-create-socket { + @since(version = 0.2.0) + use network.{network, error-code, ip-address-family}; + @since(version = 0.2.0) + use tcp.{tcp-socket}; + + /// Create a new TCP socket. + /// + /// Similar to `socket(AF_INET or AF_INET6, SOCK_STREAM, IPPROTO_TCP)` in POSIX. + /// On IPv6 sockets, IPV6_V6ONLY is enabled by default and can't be configured otherwise. + /// + /// This function does not require a network capability handle. This is considered to be safe because + /// at time of creation, the socket is not bound to any `network` yet. Up to the moment `bind`/`connect` + /// is called, the socket is effectively an in-memory configuration object, unable to communicate with the outside world. + /// + /// All sockets are non-blocking. Use the wasi-poll interface to block on asynchronous operations. + /// + /// # Typical errors + /// - `not-supported`: The specified `address-family` is not supported. (EAFNOSUPPORT) + /// - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) + /// + /// # References + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + create-tcp-socket: func(address-family: ip-address-family) -> result; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/sockets/tcp.wit b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/tcp.wit new file mode 100644 index 00000000..b4cd87fc --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/tcp.wit @@ -0,0 +1,387 @@ +@since(version = 0.2.0) +interface tcp { + @since(version = 0.2.0) + use wasi:io/streams@0.2.3.{input-stream, output-stream}; + @since(version = 0.2.0) + use wasi:io/poll@0.2.3.{pollable}; + @since(version = 0.2.0) + use wasi:clocks/monotonic-clock@0.2.3.{duration}; + @since(version = 0.2.0) + use network.{network, error-code, ip-socket-address, ip-address-family}; + + @since(version = 0.2.0) + enum shutdown-type { + /// Similar to `SHUT_RD` in POSIX. + receive, + + /// Similar to `SHUT_WR` in POSIX. + send, + + /// Similar to `SHUT_RDWR` in POSIX. + both, + } + + /// A TCP socket resource. + /// + /// The socket can be in one of the following states: + /// - `unbound` + /// - `bind-in-progress` + /// - `bound` (See note below) + /// - `listen-in-progress` + /// - `listening` + /// - `connect-in-progress` + /// - `connected` + /// - `closed` + /// See + /// for more information. + /// + /// Note: Except where explicitly mentioned, whenever this documentation uses + /// the term "bound" without backticks it actually means: in the `bound` state *or higher*. + /// (i.e. `bound`, `listen-in-progress`, `listening`, `connect-in-progress` or `connected`) + /// + /// In addition to the general error codes documented on the + /// `network::error-code` type, TCP socket methods may always return + /// `error(invalid-state)` when in the `closed` state. + @since(version = 0.2.0) + resource tcp-socket { + /// Bind the socket to a specific network on the provided IP address and port. + /// + /// If the IP address is zero (`0.0.0.0` in IPv4, `::` in IPv6), it is left to the implementation to decide which + /// network interface(s) to bind to. + /// If the TCP/UDP port is zero, the socket will be bound to a random free port. + /// + /// Bind can be attempted multiple times on the same socket, even with + /// different arguments on each iteration. But never concurrently and + /// only as long as the previous bind failed. Once a bind succeeds, the + /// binding can't be changed anymore. + /// + /// # Typical errors + /// - `invalid-argument`: The `local-address` has the wrong address family. (EAFNOSUPPORT, EFAULT on Windows) + /// - `invalid-argument`: `local-address` is not a unicast address. (EINVAL) + /// - `invalid-argument`: `local-address` is an IPv4-mapped IPv6 address. (EINVAL) + /// - `invalid-state`: The socket is already bound. (EINVAL) + /// - `address-in-use`: No ephemeral ports available. (EADDRINUSE, ENOBUFS on Windows) + /// - `address-in-use`: Address is already in use. (EADDRINUSE) + /// - `address-not-bindable`: `local-address` is not an address that the `network` can bind to. (EADDRNOTAVAIL) + /// - `not-in-progress`: A `bind` operation is not in progress. + /// - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) + /// + /// # Implementors note + /// When binding to a non-zero port, this bind operation shouldn't be affected by the TIME_WAIT + /// state of a recently closed socket on the same local address. In practice this means that the SO_REUSEADDR + /// socket option should be set implicitly on all platforms, except on Windows where this is the default behavior + /// and SO_REUSEADDR performs something different entirely. + /// + /// Unlike in POSIX, in WASI the bind operation is async. This enables + /// interactive WASI hosts to inject permission prompts. Runtimes that + /// don't want to make use of this ability can simply call the native + /// `bind` as part of either `start-bind` or `finish-bind`. + /// + /// # References + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + start-bind: func(network: borrow, local-address: ip-socket-address) -> result<_, error-code>; + @since(version = 0.2.0) + finish-bind: func() -> result<_, error-code>; + + /// Connect to a remote endpoint. + /// + /// On success: + /// - the socket is transitioned into the `connected` state. + /// - a pair of streams is returned that can be used to read & write to the connection + /// + /// After a failed connection attempt, the socket will be in the `closed` + /// state and the only valid action left is to `drop` the socket. A single + /// socket can not be used to connect more than once. + /// + /// # Typical errors + /// - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) + /// - `invalid-argument`: `remote-address` is not a unicast address. (EINVAL, ENETUNREACH on Linux, EAFNOSUPPORT on MacOS) + /// - `invalid-argument`: `remote-address` is an IPv4-mapped IPv6 address. (EINVAL, EADDRNOTAVAIL on Illumos) + /// - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EADDRNOTAVAIL on Windows) + /// - `invalid-argument`: The port in `remote-address` is set to 0. (EADDRNOTAVAIL on Windows) + /// - `invalid-argument`: The socket is already attached to a different network. The `network` passed to `connect` must be identical to the one passed to `bind`. + /// - `invalid-state`: The socket is already in the `connected` state. (EISCONN) + /// - `invalid-state`: The socket is already in the `listening` state. (EOPNOTSUPP, EINVAL on Windows) + /// - `timeout`: Connection timed out. (ETIMEDOUT) + /// - `connection-refused`: The connection was forcefully rejected. (ECONNREFUSED) + /// - `connection-reset`: The connection was reset. (ECONNRESET) + /// - `connection-aborted`: The connection was aborted. (ECONNABORTED) + /// - `remote-unreachable`: The remote address is not reachable. (EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN, ENONET) + /// - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE, EADDRNOTAVAIL on Linux, EAGAIN on BSD) + /// - `not-in-progress`: A connect operation is not in progress. + /// - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) + /// + /// # Implementors note + /// The POSIX equivalent of `start-connect` is the regular `connect` syscall. + /// Because all WASI sockets are non-blocking this is expected to return + /// EINPROGRESS, which should be translated to `ok()` in WASI. + /// + /// The POSIX equivalent of `finish-connect` is a `poll` for event `POLLOUT` + /// with a timeout of 0 on the socket descriptor. Followed by a check for + /// the `SO_ERROR` socket option, in case the poll signaled readiness. + /// + /// # References + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + start-connect: func(network: borrow, remote-address: ip-socket-address) -> result<_, error-code>; + @since(version = 0.2.0) + finish-connect: func() -> result, error-code>; + + /// Start listening for new connections. + /// + /// Transitions the socket into the `listening` state. + /// + /// Unlike POSIX, the socket must already be explicitly bound. + /// + /// # Typical errors + /// - `invalid-state`: The socket is not bound to any local address. (EDESTADDRREQ) + /// - `invalid-state`: The socket is already in the `connected` state. (EISCONN, EINVAL on BSD) + /// - `invalid-state`: The socket is already in the `listening` state. + /// - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE) + /// - `not-in-progress`: A listen operation is not in progress. + /// - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) + /// + /// # Implementors note + /// Unlike in POSIX, in WASI the listen operation is async. This enables + /// interactive WASI hosts to inject permission prompts. Runtimes that + /// don't want to make use of this ability can simply call the native + /// `listen` as part of either `start-listen` or `finish-listen`. + /// + /// # References + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + start-listen: func() -> result<_, error-code>; + @since(version = 0.2.0) + finish-listen: func() -> result<_, error-code>; + + /// Accept a new client socket. + /// + /// The returned socket is bound and in the `connected` state. The following properties are inherited from the listener socket: + /// - `address-family` + /// - `keep-alive-enabled` + /// - `keep-alive-idle-time` + /// - `keep-alive-interval` + /// - `keep-alive-count` + /// - `hop-limit` + /// - `receive-buffer-size` + /// - `send-buffer-size` + /// + /// On success, this function returns the newly accepted client socket along with + /// a pair of streams that can be used to read & write to the connection. + /// + /// # Typical errors + /// - `invalid-state`: Socket is not in the `listening` state. (EINVAL) + /// - `would-block`: No pending connections at the moment. (EWOULDBLOCK, EAGAIN) + /// - `connection-aborted`: An incoming connection was pending, but was terminated by the client before this listener could accept it. (ECONNABORTED) + /// - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) + /// + /// # References + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + accept: func() -> result, error-code>; + + /// Get the bound local address. + /// + /// POSIX mentions: + /// > If the socket has not been bound to a local name, the value + /// > stored in the object pointed to by `address` is unspecified. + /// + /// WASI is stricter and requires `local-address` to return `invalid-state` when the socket hasn't been bound yet. + /// + /// # Typical errors + /// - `invalid-state`: The socket is not bound to any local address. + /// + /// # References + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + local-address: func() -> result; + + /// Get the remote address. + /// + /// # Typical errors + /// - `invalid-state`: The socket is not connected to a remote address. (ENOTCONN) + /// + /// # References + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + remote-address: func() -> result; + + /// Whether the socket is in the `listening` state. + /// + /// Equivalent to the SO_ACCEPTCONN socket option. + @since(version = 0.2.0) + is-listening: func() -> bool; + + /// Whether this is a IPv4 or IPv6 socket. + /// + /// Equivalent to the SO_DOMAIN socket option. + @since(version = 0.2.0) + address-family: func() -> ip-address-family; + + /// Hints the desired listen queue size. Implementations are free to ignore this. + /// + /// If the provided value is 0, an `invalid-argument` error is returned. + /// Any other value will never cause an error, but it might be silently clamped and/or rounded. + /// + /// # Typical errors + /// - `not-supported`: (set) The platform does not support changing the backlog size after the initial listen. + /// - `invalid-argument`: (set) The provided value was 0. + /// - `invalid-state`: (set) The socket is in the `connect-in-progress` or `connected` state. + @since(version = 0.2.0) + set-listen-backlog-size: func(value: u64) -> result<_, error-code>; + + /// Enables or disables keepalive. + /// + /// The keepalive behavior can be adjusted using: + /// - `keep-alive-idle-time` + /// - `keep-alive-interval` + /// - `keep-alive-count` + /// These properties can be configured while `keep-alive-enabled` is false, but only come into effect when `keep-alive-enabled` is true. + /// + /// Equivalent to the SO_KEEPALIVE socket option. + @since(version = 0.2.0) + keep-alive-enabled: func() -> result; + @since(version = 0.2.0) + set-keep-alive-enabled: func(value: bool) -> result<_, error-code>; + + /// Amount of time the connection has to be idle before TCP starts sending keepalive packets. + /// + /// If the provided value is 0, an `invalid-argument` error is returned. + /// Any other value will never cause an error, but it might be silently clamped and/or rounded. + /// I.e. after setting a value, reading the same setting back may return a different value. + /// + /// Equivalent to the TCP_KEEPIDLE socket option. (TCP_KEEPALIVE on MacOS) + /// + /// # Typical errors + /// - `invalid-argument`: (set) The provided value was 0. + @since(version = 0.2.0) + keep-alive-idle-time: func() -> result; + @since(version = 0.2.0) + set-keep-alive-idle-time: func(value: duration) -> result<_, error-code>; + + /// The time between keepalive packets. + /// + /// If the provided value is 0, an `invalid-argument` error is returned. + /// Any other value will never cause an error, but it might be silently clamped and/or rounded. + /// I.e. after setting a value, reading the same setting back may return a different value. + /// + /// Equivalent to the TCP_KEEPINTVL socket option. + /// + /// # Typical errors + /// - `invalid-argument`: (set) The provided value was 0. + @since(version = 0.2.0) + keep-alive-interval: func() -> result; + @since(version = 0.2.0) + set-keep-alive-interval: func(value: duration) -> result<_, error-code>; + + /// The maximum amount of keepalive packets TCP should send before aborting the connection. + /// + /// If the provided value is 0, an `invalid-argument` error is returned. + /// Any other value will never cause an error, but it might be silently clamped and/or rounded. + /// I.e. after setting a value, reading the same setting back may return a different value. + /// + /// Equivalent to the TCP_KEEPCNT socket option. + /// + /// # Typical errors + /// - `invalid-argument`: (set) The provided value was 0. + @since(version = 0.2.0) + keep-alive-count: func() -> result; + @since(version = 0.2.0) + set-keep-alive-count: func(value: u32) -> result<_, error-code>; + + /// Equivalent to the IP_TTL & IPV6_UNICAST_HOPS socket options. + /// + /// If the provided value is 0, an `invalid-argument` error is returned. + /// + /// # Typical errors + /// - `invalid-argument`: (set) The TTL value must be 1 or higher. + @since(version = 0.2.0) + hop-limit: func() -> result; + @since(version = 0.2.0) + set-hop-limit: func(value: u8) -> result<_, error-code>; + + /// The kernel buffer space reserved for sends/receives on this socket. + /// + /// If the provided value is 0, an `invalid-argument` error is returned. + /// Any other value will never cause an error, but it might be silently clamped and/or rounded. + /// I.e. after setting a value, reading the same setting back may return a different value. + /// + /// Equivalent to the SO_RCVBUF and SO_SNDBUF socket options. + /// + /// # Typical errors + /// - `invalid-argument`: (set) The provided value was 0. + @since(version = 0.2.0) + receive-buffer-size: func() -> result; + @since(version = 0.2.0) + set-receive-buffer-size: func(value: u64) -> result<_, error-code>; + @since(version = 0.2.0) + send-buffer-size: func() -> result; + @since(version = 0.2.0) + set-send-buffer-size: func(value: u64) -> result<_, error-code>; + + /// Create a `pollable` which can be used to poll for, or block on, + /// completion of any of the asynchronous operations of this socket. + /// + /// When `finish-bind`, `finish-listen`, `finish-connect` or `accept` + /// return `error(would-block)`, this pollable can be used to wait for + /// their success or failure, after which the method can be retried. + /// + /// The pollable is not limited to the async operation that happens to be + /// in progress at the time of calling `subscribe` (if any). Theoretically, + /// `subscribe` only has to be called once per socket and can then be + /// (re)used for the remainder of the socket's lifetime. + /// + /// See + /// for more information. + /// + /// Note: this function is here for WASI 0.2 only. + /// It's planned to be removed when `future` is natively supported in Preview3. + @since(version = 0.2.0) + subscribe: func() -> pollable; + + /// Initiate a graceful shutdown. + /// + /// - `receive`: The socket is not expecting to receive any data from + /// the peer. The `input-stream` associated with this socket will be + /// closed. Any data still in the receive queue at time of calling + /// this method will be discarded. + /// - `send`: The socket has no more data to send to the peer. The `output-stream` + /// associated with this socket will be closed and a FIN packet will be sent. + /// - `both`: Same effect as `receive` & `send` combined. + /// + /// This function is idempotent; shutting down a direction more than once + /// has no effect and returns `ok`. + /// + /// The shutdown function does not close (drop) the socket. + /// + /// # Typical errors + /// - `invalid-state`: The socket is not in the `connected` state. (ENOTCONN) + /// + /// # References + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + shutdown: func(shutdown-type: shutdown-type) -> result<_, error-code>; + } +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/sockets/udp-create-socket.wit b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/udp-create-socket.wit new file mode 100644 index 00000000..e8eeacbf --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/udp-create-socket.wit @@ -0,0 +1,30 @@ +@since(version = 0.2.0) +interface udp-create-socket { + @since(version = 0.2.0) + use network.{network, error-code, ip-address-family}; + @since(version = 0.2.0) + use udp.{udp-socket}; + + /// Create a new UDP socket. + /// + /// Similar to `socket(AF_INET or AF_INET6, SOCK_DGRAM, IPPROTO_UDP)` in POSIX. + /// On IPv6 sockets, IPV6_V6ONLY is enabled by default and can't be configured otherwise. + /// + /// This function does not require a network capability handle. This is considered to be safe because + /// at time of creation, the socket is not bound to any `network` yet. Up to the moment `bind` is called, + /// the socket is effectively an in-memory configuration object, unable to communicate with the outside world. + /// + /// All sockets are non-blocking. Use the wasi-poll interface to block on asynchronous operations. + /// + /// # Typical errors + /// - `not-supported`: The specified `address-family` is not supported. (EAFNOSUPPORT) + /// - `new-socket-limit`: The new socket resource could not be created because of a system limit. (EMFILE, ENFILE) + /// + /// # References: + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + create-udp-socket: func(address-family: ip-address-family) -> result; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/sockets/udp.wit b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/udp.wit new file mode 100644 index 00000000..01901ca2 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/udp.wit @@ -0,0 +1,288 @@ +@since(version = 0.2.0) +interface udp { + @since(version = 0.2.0) + use wasi:io/poll@0.2.3.{pollable}; + @since(version = 0.2.0) + use network.{network, error-code, ip-socket-address, ip-address-family}; + + /// A received datagram. + @since(version = 0.2.0) + record incoming-datagram { + /// The payload. + /// + /// Theoretical max size: ~64 KiB. In practice, typically less than 1500 bytes. + data: list, + + /// The source address. + /// + /// This field is guaranteed to match the remote address the stream was initialized with, if any. + /// + /// Equivalent to the `src_addr` out parameter of `recvfrom`. + remote-address: ip-socket-address, + } + + /// A datagram to be sent out. + @since(version = 0.2.0) + record outgoing-datagram { + /// The payload. + data: list, + + /// The destination address. + /// + /// The requirements on this field depend on how the stream was initialized: + /// - with a remote address: this field must be None or match the stream's remote address exactly. + /// - without a remote address: this field is required. + /// + /// If this value is None, the send operation is equivalent to `send` in POSIX. Otherwise it is equivalent to `sendto`. + remote-address: option, + } + + /// A UDP socket handle. + @since(version = 0.2.0) + resource udp-socket { + /// Bind the socket to a specific network on the provided IP address and port. + /// + /// If the IP address is zero (`0.0.0.0` in IPv4, `::` in IPv6), it is left to the implementation to decide which + /// network interface(s) to bind to. + /// If the port is zero, the socket will be bound to a random free port. + /// + /// # Typical errors + /// - `invalid-argument`: The `local-address` has the wrong address family. (EAFNOSUPPORT, EFAULT on Windows) + /// - `invalid-state`: The socket is already bound. (EINVAL) + /// - `address-in-use`: No ephemeral ports available. (EADDRINUSE, ENOBUFS on Windows) + /// - `address-in-use`: Address is already in use. (EADDRINUSE) + /// - `address-not-bindable`: `local-address` is not an address that the `network` can bind to. (EADDRNOTAVAIL) + /// - `not-in-progress`: A `bind` operation is not in progress. + /// - `would-block`: Can't finish the operation, it is still in progress. (EWOULDBLOCK, EAGAIN) + /// + /// # Implementors note + /// Unlike in POSIX, in WASI the bind operation is async. This enables + /// interactive WASI hosts to inject permission prompts. Runtimes that + /// don't want to make use of this ability can simply call the native + /// `bind` as part of either `start-bind` or `finish-bind`. + /// + /// # References + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + start-bind: func(network: borrow, local-address: ip-socket-address) -> result<_, error-code>; + @since(version = 0.2.0) + finish-bind: func() -> result<_, error-code>; + + /// Set up inbound & outbound communication channels, optionally to a specific peer. + /// + /// This function only changes the local socket configuration and does not generate any network traffic. + /// On success, the `remote-address` of the socket is updated. The `local-address` may be updated as well, + /// based on the best network path to `remote-address`. + /// + /// When a `remote-address` is provided, the returned streams are limited to communicating with that specific peer: + /// - `send` can only be used to send to this destination. + /// - `receive` will only return datagrams sent from the provided `remote-address`. + /// + /// This method may be called multiple times on the same socket to change its association, but + /// only the most recently returned pair of streams will be operational. Implementations may trap if + /// the streams returned by a previous invocation haven't been dropped yet before calling `stream` again. + /// + /// The POSIX equivalent in pseudo-code is: + /// ```text + /// if (was previously connected) { + /// connect(s, AF_UNSPEC) + /// } + /// if (remote_address is Some) { + /// connect(s, remote_address) + /// } + /// ``` + /// + /// Unlike in POSIX, the socket must already be explicitly bound. + /// + /// # Typical errors + /// - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) + /// - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EDESTADDRREQ, EADDRNOTAVAIL) + /// - `invalid-argument`: The port in `remote-address` is set to 0. (EDESTADDRREQ, EADDRNOTAVAIL) + /// - `invalid-state`: The socket is not bound. + /// - `address-in-use`: Tried to perform an implicit bind, but there were no ephemeral ports available. (EADDRINUSE, EADDRNOTAVAIL on Linux, EAGAIN on BSD) + /// - `remote-unreachable`: The remote address is not reachable. (ECONNRESET, ENETRESET, EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN, ENONET) + /// - `connection-refused`: The connection was refused. (ECONNREFUSED) + /// + /// # References + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + %stream: func(remote-address: option) -> result, error-code>; + + /// Get the current bound address. + /// + /// POSIX mentions: + /// > If the socket has not been bound to a local name, the value + /// > stored in the object pointed to by `address` is unspecified. + /// + /// WASI is stricter and requires `local-address` to return `invalid-state` when the socket hasn't been bound yet. + /// + /// # Typical errors + /// - `invalid-state`: The socket is not bound to any local address. + /// + /// # References + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + local-address: func() -> result; + + /// Get the address the socket is currently streaming to. + /// + /// # Typical errors + /// - `invalid-state`: The socket is not streaming to a specific remote address. (ENOTCONN) + /// + /// # References + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + remote-address: func() -> result; + + /// Whether this is a IPv4 or IPv6 socket. + /// + /// Equivalent to the SO_DOMAIN socket option. + @since(version = 0.2.0) + address-family: func() -> ip-address-family; + + /// Equivalent to the IP_TTL & IPV6_UNICAST_HOPS socket options. + /// + /// If the provided value is 0, an `invalid-argument` error is returned. + /// + /// # Typical errors + /// - `invalid-argument`: (set) The TTL value must be 1 or higher. + @since(version = 0.2.0) + unicast-hop-limit: func() -> result; + @since(version = 0.2.0) + set-unicast-hop-limit: func(value: u8) -> result<_, error-code>; + + /// The kernel buffer space reserved for sends/receives on this socket. + /// + /// If the provided value is 0, an `invalid-argument` error is returned. + /// Any other value will never cause an error, but it might be silently clamped and/or rounded. + /// I.e. after setting a value, reading the same setting back may return a different value. + /// + /// Equivalent to the SO_RCVBUF and SO_SNDBUF socket options. + /// + /// # Typical errors + /// - `invalid-argument`: (set) The provided value was 0. + @since(version = 0.2.0) + receive-buffer-size: func() -> result; + @since(version = 0.2.0) + set-receive-buffer-size: func(value: u64) -> result<_, error-code>; + @since(version = 0.2.0) + send-buffer-size: func() -> result; + @since(version = 0.2.0) + set-send-buffer-size: func(value: u64) -> result<_, error-code>; + + /// Create a `pollable` which will resolve once the socket is ready for I/O. + /// + /// Note: this function is here for WASI 0.2 only. + /// It's planned to be removed when `future` is natively supported in Preview3. + @since(version = 0.2.0) + subscribe: func() -> pollable; + } + + @since(version = 0.2.0) + resource incoming-datagram-stream { + /// Receive messages on the socket. + /// + /// This function attempts to receive up to `max-results` datagrams on the socket without blocking. + /// The returned list may contain fewer elements than requested, but never more. + /// + /// This function returns successfully with an empty list when either: + /// - `max-results` is 0, or: + /// - `max-results` is greater than 0, but no results are immediately available. + /// This function never returns `error(would-block)`. + /// + /// # Typical errors + /// - `remote-unreachable`: The remote address is not reachable. (ECONNRESET, ENETRESET on Windows, EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN, ENONET) + /// - `connection-refused`: The connection was refused. (ECONNREFUSED) + /// + /// # References + /// - + /// - + /// - + /// - + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + receive: func(max-results: u64) -> result, error-code>; + + /// Create a `pollable` which will resolve once the stream is ready to receive again. + /// + /// Note: this function is here for WASI 0.2 only. + /// It's planned to be removed when `future` is natively supported in Preview3. + @since(version = 0.2.0) + subscribe: func() -> pollable; + } + + @since(version = 0.2.0) + resource outgoing-datagram-stream { + /// Check readiness for sending. This function never blocks. + /// + /// Returns the number of datagrams permitted for the next call to `send`, + /// or an error. Calling `send` with more datagrams than this function has + /// permitted will trap. + /// + /// When this function returns ok(0), the `subscribe` pollable will + /// become ready when this function will report at least ok(1), or an + /// error. + /// + /// Never returns `would-block`. + check-send: func() -> result; + + /// Send messages on the socket. + /// + /// This function attempts to send all provided `datagrams` on the socket without blocking and + /// returns how many messages were actually sent (or queued for sending). This function never + /// returns `error(would-block)`. If none of the datagrams were able to be sent, `ok(0)` is returned. + /// + /// This function semantically behaves the same as iterating the `datagrams` list and sequentially + /// sending each individual datagram until either the end of the list has been reached or the first error occurred. + /// If at least one datagram has been sent successfully, this function never returns an error. + /// + /// If the input list is empty, the function returns `ok(0)`. + /// + /// Each call to `send` must be permitted by a preceding `check-send`. Implementations must trap if + /// either `check-send` was not called or `datagrams` contains more items than `check-send` permitted. + /// + /// # Typical errors + /// - `invalid-argument`: The `remote-address` has the wrong address family. (EAFNOSUPPORT) + /// - `invalid-argument`: The IP address in `remote-address` is set to INADDR_ANY (`0.0.0.0` / `::`). (EDESTADDRREQ, EADDRNOTAVAIL) + /// - `invalid-argument`: The port in `remote-address` is set to 0. (EDESTADDRREQ, EADDRNOTAVAIL) + /// - `invalid-argument`: The socket is in "connected" mode and `remote-address` is `some` value that does not match the address passed to `stream`. (EISCONN) + /// - `invalid-argument`: The socket is not "connected" and no value for `remote-address` was provided. (EDESTADDRREQ) + /// - `remote-unreachable`: The remote address is not reachable. (ECONNRESET, ENETRESET on Windows, EHOSTUNREACH, EHOSTDOWN, ENETUNREACH, ENETDOWN, ENONET) + /// - `connection-refused`: The connection was refused. (ECONNREFUSED) + /// - `datagram-too-large`: The datagram is too large. (EMSGSIZE) + /// + /// # References + /// - + /// - + /// - + /// - + /// - + /// - + /// - + /// - + @since(version = 0.2.0) + send: func(datagrams: list) -> result; + + /// Create a `pollable` which will resolve once the stream is ready to send again. + /// + /// Note: this function is here for WASI 0.2 only. + /// It's planned to be removed when `future` is natively supported in Preview3. + @since(version = 0.2.0) + subscribe: func() -> pollable; + } +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/sockets/world.wit b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/world.wit new file mode 100644 index 00000000..2f0ad0d7 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/sockets/world.wit @@ -0,0 +1,19 @@ +package wasi:sockets@0.2.3; + +@since(version = 0.2.0) +world imports { + @since(version = 0.2.0) + import instance-network; + @since(version = 0.2.0) + import network; + @since(version = 0.2.0) + import udp; + @since(version = 0.2.0) + import udp-create-socket; + @since(version = 0.2.0) + import tcp; + @since(version = 0.2.0) + import tcp-create-socket; + @since(version = 0.2.0) + import ip-name-lookup; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/webgpu/imports.wit b/examples/components/webgpu-tensorflow/service/wit/deps/webgpu/imports.wit new file mode 100644 index 00000000..774b7021 --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/webgpu/imports.wit @@ -0,0 +1,5 @@ +package wasi:webgpu@0.0.1; + +world imports { + import webgpu; +} diff --git a/examples/components/webgpu-tensorflow/service/wit/deps/webgpu/webgpu.wit b/examples/components/webgpu-tensorflow/service/wit/deps/webgpu/webgpu.wit new file mode 100644 index 00000000..3f8929ff --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/deps/webgpu/webgpu.wit @@ -0,0 +1,1085 @@ +package wasi:webgpu@0.0.1; + +interface webgpu { + use wasi:io/poll@0.2.0.{ pollable }; + use wasi:graphics-context/graphics-context@0.0.1.{ context, abstract-buffer }; + resource gpu-supported-limits { + max-texture-dimension1-d: func() -> u32; + max-texture-dimension2-d: func() -> u32; + max-texture-dimension3-d: func() -> u32; + max-texture-array-layers: func() -> u32; + max-bind-groups: func() -> u32; + max-bind-groups-plus-vertex-buffers: func() -> u32; + max-bindings-per-bind-group: func() -> u32; + max-dynamic-uniform-buffers-per-pipeline-layout: func() -> u32; + max-dynamic-storage-buffers-per-pipeline-layout: func() -> u32; + max-sampled-textures-per-shader-stage: func() -> u32; + max-samplers-per-shader-stage: func() -> u32; + max-storage-buffers-per-shader-stage: func() -> u32; + max-storage-textures-per-shader-stage: func() -> u32; + max-uniform-buffers-per-shader-stage: func() -> u32; + max-uniform-buffer-binding-size: func() -> u64; + max-storage-buffer-binding-size: func() -> u64; + min-uniform-buffer-offset-alignment: func() -> u32; + min-storage-buffer-offset-alignment: func() -> u32; + max-vertex-buffers: func() -> u32; + max-buffer-size: func() -> u64; + max-vertex-attributes: func() -> u32; + max-vertex-buffer-array-stride: func() -> u32; + max-inter-stage-shader-variables: func() -> u32; + max-color-attachments: func() -> u32; + max-color-attachment-bytes-per-sample: func() -> u32; + max-compute-workgroup-storage-size: func() -> u32; + max-compute-invocations-per-workgroup: func() -> u32; + max-compute-workgroup-size-x: func() -> u32; + max-compute-workgroup-size-y: func() -> u32; + max-compute-workgroup-size-z: func() -> u32; + max-compute-workgroups-per-dimension: func() -> u32; + } + resource gpu-supported-features { + has: func(value: string) -> bool; + } + resource wgsl-language-features { + has: func(value: string) -> bool; + } + resource gpu-adapter-info { + vendor: func() -> string; + architecture: func() -> string; + device: func() -> string; + description: func() -> string; + subgroup-min-size: func() -> u32; + subgroup-max-size: func() -> u32; + } + resource gpu { + request-adapter: func(options: option) -> option; + get-preferred-canvas-format: func() -> gpu-texture-format; + wgsl-language-features: func() -> wgsl-language-features; + } + enum gpu-power-preference { + low-power, + high-performance, + } + record gpu-request-adapter-options { + feature-level: option, + power-preference: option, + force-fallback-adapter: option, + xr-compatible: option, + } + resource gpu-adapter { + features: func() -> gpu-supported-features; + limits: func() -> gpu-supported-limits; + info: func() -> gpu-adapter-info; + is-fallback-adapter: func() -> bool; + request-device: func(descriptor: option) -> result; + } + resource record-option-gpu-size64 { + constructor(); + add: func(key: string, value: option); + get: func(key: string) -> option>; + has: func(key: string) -> bool; + remove: func(key: string); + keys: func() -> list; + values: func() -> list>; + entries: func() -> list>>; + } + enum gpu-feature-name { + depth-clip-control, + depth32float-stencil8, + texture-compression-bc, + texture-compression-bc-sliced3d, + texture-compression-etc2, + texture-compression-astc, + texture-compression-astc-sliced3d, + timestamp-query, + indirect-first-instance, + shader-f16, + rg11b10ufloat-renderable, + bgra8unorm-storage, + float32-filterable, + float32-blendable, + clip-distances, + dual-source-blending, + subgroups, + } + resource gpu-device { + features: func() -> gpu-supported-features; + limits: func() -> gpu-supported-limits; + adapter-info: func() -> gpu-adapter-info; + queue: func() -> gpu-queue; + destroy: func(); + create-buffer: func(descriptor: gpu-buffer-descriptor) -> gpu-buffer; + create-texture: func(descriptor: gpu-texture-descriptor) -> gpu-texture; + create-sampler: func(descriptor: option) -> gpu-sampler; + create-bind-group-layout: func(descriptor: gpu-bind-group-layout-descriptor) -> gpu-bind-group-layout; + create-pipeline-layout: func(descriptor: gpu-pipeline-layout-descriptor) -> gpu-pipeline-layout; + create-bind-group: func(descriptor: gpu-bind-group-descriptor) -> gpu-bind-group; + create-shader-module: func(descriptor: gpu-shader-module-descriptor) -> gpu-shader-module; + create-compute-pipeline: func(descriptor: gpu-compute-pipeline-descriptor) -> gpu-compute-pipeline; + create-render-pipeline: func(descriptor: gpu-render-pipeline-descriptor) -> gpu-render-pipeline; + create-compute-pipeline-async: func(descriptor: gpu-compute-pipeline-descriptor) -> result; + create-render-pipeline-async: func(descriptor: gpu-render-pipeline-descriptor) -> result; + create-command-encoder: func(descriptor: option) -> gpu-command-encoder; + create-render-bundle-encoder: func(descriptor: gpu-render-bundle-encoder-descriptor) -> gpu-render-bundle-encoder; + create-query-set: func(descriptor: gpu-query-set-descriptor) -> result; + label: func() -> string; + set-label: func(label: string); + lost: func() -> gpu-device-lost-info; + push-error-scope: func(filter: gpu-error-filter); + pop-error-scope: func() -> result, pop-error-scope-error>; + onuncapturederror-subscribe: func() -> pollable; + connect-graphics-context: func(context: borrow); + } + resource gpu-buffer { + size: func() -> gpu-size64-out; + usage: func() -> gpu-flags-constant; + map-state: func() -> gpu-buffer-map-state; + map-async: func(mode: gpu-map-mode-flags, offset: option, size: option) -> result<_, map-async-error>; + get-mapped-range-get-with-copy: func(offset: option, size: option) -> result, get-mapped-range-error>; + unmap: func() -> result<_, unmap-error>; + destroy: func(); + label: func() -> string; + set-label: func(label: string); + get-mapped-range-set-with-copy: func(data: list, offset: option, size: option) -> result<_, get-mapped-range-error>; + } + enum gpu-buffer-map-state { + unmapped, + pending, + mapped, + } + type gpu-buffer-usage-flags = u32; + resource gpu-buffer-usage { + MAP-READ: static func() -> gpu-flags-constant; + MAP-WRITE: static func() -> gpu-flags-constant; + COPY-SRC: static func() -> gpu-flags-constant; + COPY-DST: static func() -> gpu-flags-constant; + INDEX: static func() -> gpu-flags-constant; + VERTEX: static func() -> gpu-flags-constant; + UNIFORM: static func() -> gpu-flags-constant; + STORAGE: static func() -> gpu-flags-constant; + INDIRECT: static func() -> gpu-flags-constant; + QUERY-RESOLVE: static func() -> gpu-flags-constant; + } + type gpu-map-mode-flags = u32; + resource gpu-map-mode { + READ: static func() -> gpu-flags-constant; + WRITE: static func() -> gpu-flags-constant; + } + resource gpu-texture { + create-view: func(descriptor: option) -> gpu-texture-view; + destroy: func(); + width: func() -> gpu-integer-coordinate-out; + height: func() -> gpu-integer-coordinate-out; + depth-or-array-layers: func() -> gpu-integer-coordinate-out; + mip-level-count: func() -> gpu-integer-coordinate-out; + sample-count: func() -> gpu-size32-out; + dimension: func() -> gpu-texture-dimension; + format: func() -> gpu-texture-format; + usage: func() -> gpu-flags-constant; + label: func() -> string; + set-label: func(label: string); + from-graphics-buffer: static func(buffer: abstract-buffer) -> gpu-texture; + } + enum gpu-texture-dimension { + d1, + d2, + d3, + } + type gpu-texture-usage-flags = u32; + resource gpu-texture-usage { + COPY-SRC: static func() -> gpu-flags-constant; + COPY-DST: static func() -> gpu-flags-constant; + TEXTURE-BINDING: static func() -> gpu-flags-constant; + STORAGE-BINDING: static func() -> gpu-flags-constant; + RENDER-ATTACHMENT: static func() -> gpu-flags-constant; + } + resource gpu-texture-view { + label: func() -> string; + set-label: func(label: string); + } + enum gpu-texture-view-dimension { + d1, + d2, + d2-array, + cube, + cube-array, + d3, + } + enum gpu-texture-aspect { + all, + stencil-only, + depth-only, + } + enum gpu-texture-format { + r8unorm, + r8snorm, + r8uint, + r8sint, + r16uint, + r16sint, + r16float, + rg8unorm, + rg8snorm, + rg8uint, + rg8sint, + r32uint, + r32sint, + r32float, + rg16uint, + rg16sint, + rg16float, + rgba8unorm, + rgba8unorm-srgb, + rgba8snorm, + rgba8uint, + rgba8sint, + bgra8unorm, + bgra8unorm-srgb, + rgb9e5ufloat, + rgb10a2uint, + rgb10a2unorm, + rg11b10ufloat, + rg32uint, + rg32sint, + rg32float, + rgba16uint, + rgba16sint, + rgba16float, + rgba32uint, + rgba32sint, + rgba32float, + stencil8, + depth16unorm, + depth24plus, + depth24plus-stencil8, + depth32float, + depth32float-stencil8, + bc1-rgba-unorm, + bc1-rgba-unorm-srgb, + bc2-rgba-unorm, + bc2-rgba-unorm-srgb, + bc3-rgba-unorm, + bc3-rgba-unorm-srgb, + bc4-r-unorm, + bc4-r-snorm, + bc5-rg-unorm, + bc5-rg-snorm, + bc6h-rgb-ufloat, + bc6h-rgb-float, + bc7-rgba-unorm, + bc7-rgba-unorm-srgb, + etc2-rgb8unorm, + etc2-rgb8unorm-srgb, + etc2-rgb8a1unorm, + etc2-rgb8a1unorm-srgb, + etc2-rgba8unorm, + etc2-rgba8unorm-srgb, + eac-r11unorm, + eac-r11snorm, + eac-rg11unorm, + eac-rg11snorm, + astc4x4-unorm, + astc4x4-unorm-srgb, + astc5x4-unorm, + astc5x4-unorm-srgb, + astc5x5-unorm, + astc5x5-unorm-srgb, + astc6x5-unorm, + astc6x5-unorm-srgb, + astc6x6-unorm, + astc6x6-unorm-srgb, + astc8x5-unorm, + astc8x5-unorm-srgb, + astc8x6-unorm, + astc8x6-unorm-srgb, + astc8x8-unorm, + astc8x8-unorm-srgb, + astc10x5-unorm, + astc10x5-unorm-srgb, + astc10x6-unorm, + astc10x6-unorm-srgb, + astc10x8-unorm, + astc10x8-unorm-srgb, + astc10x10-unorm, + astc10x10-unorm-srgb, + astc12x10-unorm, + astc12x10-unorm-srgb, + astc12x12-unorm, + astc12x12-unorm-srgb, + } + resource gpu-sampler { + label: func() -> string; + set-label: func(label: string); + } + enum gpu-address-mode { + clamp-to-edge, + repeat, + mirror-repeat, + } + enum gpu-filter-mode { + nearest, + linear, + } + enum gpu-mipmap-filter-mode { + nearest, + linear, + } + enum gpu-compare-function { + never, + less, + equal, + less-equal, + greater, + not-equal, + greater-equal, + always, + } + record gpu-sampler-descriptor { + address-mode-u: option, + address-mode-v: option, + address-mode-w: option, + mag-filter: option, + min-filter: option, + mipmap-filter: option, + lod-min-clamp: option, + lod-max-clamp: option, + compare: option, + max-anisotropy: option, + label: option, + } + resource gpu-bind-group-layout { + label: func() -> string; + set-label: func(label: string); + } + type gpu-shader-stage-flags = u32; + resource gpu-shader-stage { + VERTEX: static func() -> gpu-flags-constant; + FRAGMENT: static func() -> gpu-flags-constant; + COMPUTE: static func() -> gpu-flags-constant; + } + enum gpu-buffer-binding-type { + uniform, + storage, + read-only-storage, + } + enum gpu-sampler-binding-type { + filtering, + non-filtering, + comparison, + } + record gpu-sampler-binding-layout { + %type: option, + } + enum gpu-texture-sample-type { + float, + unfilterable-float, + depth, + sint, + uint, + } + record gpu-texture-binding-layout { + sample-type: option, + view-dimension: option, + multisampled: option, + } + enum gpu-storage-texture-access { + write-only, + read-only, + read-write, + } + record gpu-storage-texture-binding-layout { + access: option, + format: gpu-texture-format, + view-dimension: option, + } + resource gpu-bind-group { + label: func() -> string; + set-label: func(label: string); + } + resource gpu-pipeline-layout { + label: func() -> string; + set-label: func(label: string); + } + record gpu-pipeline-layout-descriptor { + bind-group-layouts: list>>, + label: option, + } + resource gpu-shader-module { + get-compilation-info: func() -> gpu-compilation-info; + label: func() -> string; + set-label: func(label: string); + } + enum gpu-compilation-message-type { + error, + warning, + info, + } + resource gpu-compilation-message { + message: func() -> string; + %type: func() -> gpu-compilation-message-type; + line-num: func() -> u64; + line-pos: func() -> u64; + offset: func() -> u64; + length: func() -> u64; + } + resource gpu-compilation-info { + messages: func() -> list; + } + enum gpu-pipeline-error-reason { + validation, + internal, + } + variant gpu-layout-mode { + specific(borrow), + auto, + } + record gpu-shader-module-compilation-hint { + entry-point: string, + layout: option, + } + record gpu-shader-module-descriptor { + code: string, + compilation-hints: option>, + label: option, + } + resource record-gpu-pipeline-constant-value { + constructor(); + add: func(key: string, value: gpu-pipeline-constant-value); + get: func(key: string) -> option; + has: func(key: string) -> bool; + remove: func(key: string); + keys: func() -> list; + values: func() -> list; + entries: func() -> list>; + } + record gpu-programmable-stage { + module: borrow, + entry-point: option, + constants: option, + } + type gpu-pipeline-constant-value = f64; + resource gpu-compute-pipeline { + label: func() -> string; + set-label: func(label: string); + get-bind-group-layout: func(index: u32) -> gpu-bind-group-layout; + } + record gpu-compute-pipeline-descriptor { + compute: gpu-programmable-stage, + layout: gpu-layout-mode, + label: option, + } + resource gpu-render-pipeline { + label: func() -> string; + set-label: func(label: string); + get-bind-group-layout: func(index: u32) -> gpu-bind-group-layout; + } + enum gpu-primitive-topology { + point-list, + line-list, + line-strip, + triangle-list, + triangle-strip, + } + enum gpu-front-face { + ccw, + cw, + } + enum gpu-cull-mode { + none, + front, + back, + } + type gpu-color-write-flags = u32; + resource gpu-color-write { + RED: static func() -> gpu-flags-constant; + GREEN: static func() -> gpu-flags-constant; + BLUE: static func() -> gpu-flags-constant; + ALPHA: static func() -> gpu-flags-constant; + ALL: static func() -> gpu-flags-constant; + } + enum gpu-blend-factor { + zero, + one, + src, + one-minus-src, + src-alpha, + one-minus-src-alpha, + dst, + one-minus-dst, + dst-alpha, + one-minus-dst-alpha, + src-alpha-saturated, + constant, + one-minus-constant, + src1, + one-minus-src1, + src1-alpha, + one-minus-src1-alpha, + } + enum gpu-blend-operation { + add, + subtract, + reverse-subtract, + min, + max, + } + record gpu-blend-component { + operation: option, + src-factor: option, + dst-factor: option, + } + record gpu-blend-state { + color: gpu-blend-component, + alpha: gpu-blend-component, + } + record gpu-color-target-state { + format: gpu-texture-format, + blend: option, + write-mask: option, + } + record gpu-fragment-state { + targets: list>, + module: borrow, + entry-point: option, + constants: option, + } + enum gpu-stencil-operation { + keep, + zero, + replace, + invert, + increment-clamp, + decrement-clamp, + increment-wrap, + decrement-wrap, + } + record gpu-stencil-face-state { + compare: option, + fail-op: option, + depth-fail-op: option, + pass-op: option, + } + enum gpu-index-format { + uint16, + uint32, + } + record gpu-primitive-state { + topology: option, + strip-index-format: option, + front-face: option, + cull-mode: option, + unclipped-depth: option, + } + enum gpu-vertex-format { + uint8, + uint8x2, + uint8x4, + sint8, + sint8x2, + sint8x4, + unorm8, + unorm8x2, + unorm8x4, + snorm8, + snorm8x2, + snorm8x4, + uint16, + uint16x2, + uint16x4, + sint16, + sint16x2, + sint16x4, + unorm16, + unorm16x2, + unorm16x4, + snorm16, + snorm16x2, + snorm16x4, + float16, + float16x2, + float16x4, + float32, + float32x2, + float32x3, + float32x4, + uint32, + uint32x2, + uint32x3, + uint32x4, + sint32, + sint32x2, + sint32x3, + sint32x4, + unorm1010102, + unorm8x4-bgra, + } + enum gpu-vertex-step-mode { + vertex, + instance, + } + resource gpu-command-buffer { + label: func() -> string; + set-label: func(label: string); + } + record gpu-command-buffer-descriptor { + label: option, + } + resource gpu-command-encoder { + begin-render-pass: func(descriptor: gpu-render-pass-descriptor) -> gpu-render-pass-encoder; + begin-compute-pass: func(descriptor: option) -> gpu-compute-pass-encoder; + copy-buffer-to-buffer: func(source: borrow, source-offset: gpu-size64, destination: borrow, destination-offset: gpu-size64, size: gpu-size64); + copy-buffer-to-texture: func(source: gpu-texel-copy-buffer-info, destination: gpu-texel-copy-texture-info, copy-size: gpu-extent3-d); + copy-texture-to-buffer: func(source: gpu-texel-copy-texture-info, destination: gpu-texel-copy-buffer-info, copy-size: gpu-extent3-d); + copy-texture-to-texture: func(source: gpu-texel-copy-texture-info, destination: gpu-texel-copy-texture-info, copy-size: gpu-extent3-d); + clear-buffer: func(buffer: borrow, offset: option, size: option); + resolve-query-set: func(query-set: borrow, first-query: gpu-size32, query-count: gpu-size32, destination: borrow, destination-offset: gpu-size64); + finish: func(descriptor: option) -> gpu-command-buffer; + label: func() -> string; + set-label: func(label: string); + push-debug-group: func(group-label: string); + pop-debug-group: func(); + insert-debug-marker: func(marker-label: string); + } + record gpu-command-encoder-descriptor { + label: option, + } + resource gpu-compute-pass-encoder { + set-pipeline: func(pipeline: borrow); + dispatch-workgroups: func(workgroup-count-x: gpu-size32, workgroup-count-y: option, workgroup-count-z: option); + dispatch-workgroups-indirect: func(indirect-buffer: borrow, indirect-offset: gpu-size64); + end: func(); + label: func() -> string; + set-label: func(label: string); + push-debug-group: func(group-label: string); + pop-debug-group: func(); + insert-debug-marker: func(marker-label: string); + set-bind-group: func(index: gpu-index32, bind-group: option>, dynamic-offsets-data: option>, dynamic-offsets-data-start: option, dynamic-offsets-data-length: option) -> result<_, set-bind-group-error>; + } + resource gpu-render-pass-encoder { + set-viewport: func(x: f32, y: f32, width: f32, height: f32, min-depth: f32, max-depth: f32); + set-scissor-rect: func(x: gpu-integer-coordinate, y: gpu-integer-coordinate, width: gpu-integer-coordinate, height: gpu-integer-coordinate); + set-blend-constant: func(color: gpu-color); + set-stencil-reference: func(reference: gpu-stencil-value); + begin-occlusion-query: func(query-index: gpu-size32); + end-occlusion-query: func(); + execute-bundles: func(bundles: list>); + end: func(); + label: func() -> string; + set-label: func(label: string); + push-debug-group: func(group-label: string); + pop-debug-group: func(); + insert-debug-marker: func(marker-label: string); + set-bind-group: func(index: gpu-index32, bind-group: option>, dynamic-offsets-data: option>, dynamic-offsets-data-start: option, dynamic-offsets-data-length: option) -> result<_, set-bind-group-error>; + set-pipeline: func(pipeline: borrow); + set-index-buffer: func(buffer: borrow, index-format: gpu-index-format, offset: option, size: option); + set-vertex-buffer: func(slot: gpu-index32, buffer: option>, offset: option, size: option); + draw: func(vertex-count: gpu-size32, instance-count: option, first-vertex: option, first-instance: option); + draw-indexed: func(index-count: gpu-size32, instance-count: option, first-index: option, base-vertex: option, first-instance: option); + draw-indirect: func(indirect-buffer: borrow, indirect-offset: gpu-size64); + draw-indexed-indirect: func(indirect-buffer: borrow, indirect-offset: gpu-size64); + } + enum gpu-load-op { + load, + clear, + } + enum gpu-store-op { + store, + discard, + } + resource gpu-render-bundle { + label: func() -> string; + set-label: func(label: string); + } + record gpu-render-bundle-descriptor { + label: option, + } + resource gpu-render-bundle-encoder { + finish: func(descriptor: option) -> gpu-render-bundle; + label: func() -> string; + set-label: func(label: string); + push-debug-group: func(group-label: string); + pop-debug-group: func(); + insert-debug-marker: func(marker-label: string); + set-bind-group: func(index: gpu-index32, bind-group: option>, dynamic-offsets-data: option>, dynamic-offsets-data-start: option, dynamic-offsets-data-length: option) -> result<_, set-bind-group-error>; + set-pipeline: func(pipeline: borrow); + set-index-buffer: func(buffer: borrow, index-format: gpu-index-format, offset: option, size: option); + set-vertex-buffer: func(slot: gpu-index32, buffer: option>, offset: option, size: option); + draw: func(vertex-count: gpu-size32, instance-count: option, first-vertex: option, first-instance: option); + draw-indexed: func(index-count: gpu-size32, instance-count: option, first-index: option, base-vertex: option, first-instance: option); + draw-indirect: func(indirect-buffer: borrow, indirect-offset: gpu-size64); + draw-indexed-indirect: func(indirect-buffer: borrow, indirect-offset: gpu-size64); + } + record gpu-queue-descriptor { + label: option, + } + record gpu-device-descriptor { + required-features: option>, + required-limits: option, + default-queue: option, + label: option, + } + resource gpu-queue { + submit: func(command-buffers: list>); + on-submitted-work-done: func(); + write-buffer-with-copy: func(buffer: borrow, buffer-offset: gpu-size64, data: list, data-offset: option, size: option) -> result<_, write-buffer-error>; + write-texture-with-copy: func(destination: gpu-texel-copy-texture-info, data: list, data-layout: gpu-texel-copy-buffer-layout, size: gpu-extent3-d); + label: func() -> string; + set-label: func(label: string); + } + resource gpu-query-set { + destroy: func(); + %type: func() -> gpu-query-type; + count: func() -> gpu-size32-out; + label: func() -> string; + set-label: func(label: string); + } + enum gpu-query-type { + occlusion, + timestamp, + } + resource gpu-canvas-context { + configure: func(configuration: gpu-canvas-configuration); + unconfigure: func(); + get-configuration: func() -> option; + get-current-texture: func() -> gpu-texture; + } + enum gpu-canvas-alpha-mode { + opaque, + premultiplied, + } + enum gpu-canvas-tone-mapping-mode { + standard, + extended, + } + record gpu-canvas-tone-mapping { + mode: option, + } + record gpu-canvas-configuration { + device: borrow, + format: gpu-texture-format, + usage: option, + view-formats: option>, + color-space: option, + tone-mapping: option, + alpha-mode: option, + } + enum gpu-device-lost-reason { + unknown, + destroyed, + } + resource gpu-device-lost-info { + reason: func() -> gpu-device-lost-reason; + message: func() -> string; + } + resource gpu-error { + message: func() -> string; + kind: func() -> gpu-error-kind; + } + enum gpu-error-filter { + validation, + out-of-memory, + internal, + } + resource gpu-uncaptured-error-event { + error: func() -> gpu-error; + } + type gpu-buffer-dynamic-offset = u32; + type gpu-stencil-value = u32; + record gpu-render-pass-depth-stencil-attachment { + view: borrow, + depth-clear-value: option, + depth-load-op: option, + depth-store-op: option, + depth-read-only: option, + stencil-clear-value: option, + stencil-load-op: option, + stencil-store-op: option, + stencil-read-only: option, + } + type gpu-sample-mask = u32; + type gpu-depth-bias = s32; + record gpu-depth-stencil-state { + format: gpu-texture-format, + depth-write-enabled: option, + depth-compare: option, + stencil-front: option, + stencil-back: option, + stencil-read-mask: option, + stencil-write-mask: option, + depth-bias: option, + depth-bias-slope-scale: option, + depth-bias-clamp: option, + } + type gpu-size64 = u64; + record gpu-buffer-descriptor { + size: gpu-size64, + usage: gpu-buffer-usage-flags, + mapped-at-creation: option, + label: option, + } + record gpu-buffer-binding-layout { + %type: option, + has-dynamic-offset: option, + min-binding-size: option, + } + record gpu-buffer-binding { + buffer: borrow, + offset: option, + size: option, + } + variant gpu-binding-resource { + gpu-buffer-binding(gpu-buffer-binding), + gpu-sampler(borrow), + gpu-texture-view(borrow), + } + type gpu-integer-coordinate = u32; + record gpu-texture-view-descriptor { + format: option, + dimension: option, + usage: option, + aspect: option, + base-mip-level: option, + mip-level-count: option, + base-array-layer: option, + array-layer-count: option, + label: option, + } + type gpu-index32 = u32; + record gpu-bind-group-layout-entry { + binding: gpu-index32, + visibility: gpu-shader-stage-flags, + buffer: option, + sampler: option, + texture: option, + storage-texture: option, + } + record gpu-bind-group-layout-descriptor { + entries: list, + label: option, + } + record gpu-bind-group-entry { + binding: gpu-index32, + %resource: gpu-binding-resource, + } + record gpu-bind-group-descriptor { + layout: borrow, + entries: list, + label: option, + } + record gpu-vertex-attribute { + format: gpu-vertex-format, + offset: gpu-size64, + shader-location: gpu-index32, + } + record gpu-vertex-buffer-layout { + array-stride: gpu-size64, + step-mode: option, + attributes: list, + } + record gpu-vertex-state { + buffers: option>>, + module: borrow, + entry-point: option, + constants: option, + } + type gpu-size32 = u32; + record gpu-multisample-state { + count: option, + mask: option, + alpha-to-coverage-enabled: option, + } + record gpu-render-pipeline-descriptor { + vertex: gpu-vertex-state, + primitive: option, + depth-stencil: option, + multisample: option, + fragment: option, + layout: gpu-layout-mode, + label: option, + } + record gpu-texel-copy-buffer-layout { + offset: option, + bytes-per-row: option, + rows-per-image: option, + } + record gpu-texel-copy-buffer-info { + buffer: borrow, + offset: option, + bytes-per-row: option, + rows-per-image: option, + } + record gpu-compute-pass-timestamp-writes { + query-set: borrow, + beginning-of-pass-write-index: option, + end-of-pass-write-index: option, + } + record gpu-compute-pass-descriptor { + timestamp-writes: option, + label: option, + } + record gpu-render-pass-timestamp-writes { + query-set: borrow, + beginning-of-pass-write-index: option, + end-of-pass-write-index: option, + } + record gpu-render-bundle-encoder-descriptor { + depth-read-only: option, + stencil-read-only: option, + color-formats: list>, + depth-stencil-format: option, + sample-count: option, + label: option, + } + record gpu-query-set-descriptor { + %type: gpu-query-type, + count: gpu-size32, + label: option, + } + type gpu-signed-offset32 = s32; + type gpu-size64-out = u64; + type gpu-integer-coordinate-out = u32; + type gpu-size32-out = u32; + type gpu-flags-constant = u32; + record gpu-color { + r: f64, + g: f64, + b: f64, + a: f64, + } + record gpu-render-pass-color-attachment { + view: borrow, + depth-slice: option, + resolve-target: option>, + clear-value: option, + load-op: gpu-load-op, + store-op: gpu-store-op, + } + record gpu-render-pass-descriptor { + color-attachments: list>, + depth-stencil-attachment: option, + occlusion-query-set: option>, + timestamp-writes: option, + max-draw-count: option, + label: option, + } + record gpu-origin3-d { + x: option, + y: option, + z: option, + } + record gpu-texel-copy-texture-info { + texture: borrow, + mip-level: option, + origin: option, + aspect: option, + } + record gpu-copy-external-image-dest-info { + color-space: option, + premultiplied-alpha: option, + texture: borrow, + mip-level: option, + origin: option, + aspect: option, + } + record gpu-extent3-d { + width: gpu-integer-coordinate, + height: option, + depth-or-array-layers: option, + } + record gpu-texture-descriptor { + size: gpu-extent3-d, + mip-level-count: option, + sample-count: option, + dimension: option, + format: gpu-texture-format, + usage: gpu-texture-usage-flags, + view-formats: option>, + label: option, + } + record gpu-canvas-configuration-owned { + device: gpu-device, + format: gpu-texture-format, + usage: option, + view-formats: option>, + color-space: option, + tone-mapping: option, + alpha-mode: option, + } + enum predefined-color-space { + srgb, + display-p3, + } + get-gpu: func() -> gpu; + variant gpu-error-kind { + validation-error, + out-of-memory-error, + internal-error, + } + variant request-device-error-kind { + type-error, + operation-error, + } + record request-device-error { + kind: request-device-error-kind, + message: string, + } + variant create-pipeline-error-kind { + gpu-pipeline-error(gpu-pipeline-error-reason), + } + record create-pipeline-error { + kind: create-pipeline-error-kind, + message: string, + } + variant create-query-set-error-kind { + type-error, + } + record create-query-set-error { + kind: create-query-set-error-kind, + message: string, + } + variant pop-error-scope-error-kind { + operation-error, + } + record pop-error-scope-error { + kind: pop-error-scope-error-kind, + message: string, + } + variant map-async-error-kind { + operation-error, + range-error, + abort-error, + } + record map-async-error { + kind: map-async-error-kind, + message: string, + } + variant get-mapped-range-error-kind { + operation-error, + range-error, + type-error, + } + record get-mapped-range-error { + kind: get-mapped-range-error-kind, + message: string, + } + variant unmap-error-kind { + abort-error, + } + record unmap-error { + kind: unmap-error-kind, + message: string, + } + variant set-bind-group-error-kind { + range-error, + } + record set-bind-group-error { + kind: set-bind-group-error-kind, + message: string, + } + variant write-buffer-error-kind { + operation-error, + } + record write-buffer-error { + kind: write-buffer-error-kind, + message: string, + } +} diff --git a/examples/components/webgpu-tensorflow/service/wit/world.wit b/examples/components/webgpu-tensorflow/service/wit/world.wit new file mode 100644 index 00000000..efd3adaa --- /dev/null +++ b/examples/components/webgpu-tensorflow/service/wit/world.wit @@ -0,0 +1,17 @@ +package wasmcloud:webgpu-tensorflow@0.1.0; + +world service { + // GPU access for TensorFlow.js's WebGPU backend + import wasi:webgpu/webgpu@0.0.1; + import wasi:graphics-context/graphics-context@0.0.1; + + // TCP server for the loopback request protocol + import wasi:sockets/instance-network@0.2.3; + import wasi:sockets/tcp@0.2.3; + import wasi:sockets/tcp-create-socket@0.2.3; + + // wasi-gfx ships against io@0.2.0; sockets@0.2.3 brings io@0.2.3 + import wasi:io/poll@0.2.0; + + export wasi:cli/run@0.2.3; +}