@cloudflare/sandbox 0.13.0-next.651.1 → 0.13.0-next.709.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/Dockerfile +12 -17
  2. package/README.md +48 -2
  3. package/dist/bridge/index.d.ts.map +1 -1
  4. package/dist/bridge/index.js +1365 -1054
  5. package/dist/bridge/index.js.map +1 -1
  6. package/dist/{contexts-BS0Bs6IU.d.ts → contexts-1EsLHByO.d.ts} +240 -15
  7. package/dist/contexts-1EsLHByO.d.ts.map +1 -0
  8. package/dist/{dist-DF8sudAg.js → dist-Duor5GbS.js} +38 -147
  9. package/dist/dist-Duor5GbS.js.map +1 -0
  10. package/dist/errors/index.d.ts +4 -0
  11. package/dist/errors/index.js +4 -0
  12. package/dist/{errors-BG6NZiPD.js → errors-CXR0xBpw.js} +82 -13
  13. package/dist/errors-CXR0xBpw.js.map +1 -0
  14. package/dist/errors-QYlSkVGz.js +893 -0
  15. package/dist/errors-QYlSkVGz.js.map +1 -0
  16. package/dist/extensions/index.d.ts +4 -74
  17. package/dist/extensions/index.js +5 -152
  18. package/dist/extensions-CFB2xHqY.js +1023 -0
  19. package/dist/extensions-CFB2xHqY.js.map +1 -0
  20. package/dist/filesystem-BWAZCZER.d.ts +732 -0
  21. package/dist/filesystem-BWAZCZER.d.ts.map +1 -0
  22. package/dist/git/index.d.ts +63 -0
  23. package/dist/git/index.d.ts.map +1 -0
  24. package/dist/git/index.js +338 -0
  25. package/dist/git/index.js.map +1 -0
  26. package/dist/index-Bs4bqXDR.d.ts +438 -0
  27. package/dist/index-Bs4bqXDR.d.ts.map +1 -0
  28. package/dist/index-HNYBk-az.d.ts +444 -0
  29. package/dist/index-HNYBk-az.d.ts.map +1 -0
  30. package/dist/index.d.ts +487 -181
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +12 -43
  33. package/dist/index.js.map +1 -1
  34. package/dist/interpreter/index.d.ts +311 -0
  35. package/dist/interpreter/index.d.ts.map +1 -0
  36. package/dist/interpreter/index.js +292 -0
  37. package/dist/interpreter/index.js.map +1 -0
  38. package/dist/openai/index.d.ts +5 -4
  39. package/dist/openai/index.d.ts.map +1 -1
  40. package/dist/openai/index.js +11 -6
  41. package/dist/openai/index.js.map +1 -1
  42. package/dist/opencode/index.d.ts +133 -161
  43. package/dist/opencode/index.d.ts.map +1 -1
  44. package/dist/opencode/index.js +284 -203
  45. package/dist/opencode/index.js.map +1 -1
  46. package/dist/process-types-GStiZ8f8.d.ts +73 -0
  47. package/dist/process-types-GStiZ8f8.d.ts.map +1 -0
  48. package/dist/sandbox-Auuwfnur.js +10010 -0
  49. package/dist/sandbox-Auuwfnur.js.map +1 -0
  50. package/dist/sandbox-BbAabq93.d.ts +42 -0
  51. package/dist/sandbox-BbAabq93.d.ts.map +1 -0
  52. package/dist/xterm/index.d.ts +11 -7
  53. package/dist/xterm/index.d.ts.map +1 -1
  54. package/dist/xterm/index.js +61 -18
  55. package/dist/xterm/index.js.map +1 -1
  56. package/package.json +28 -4
  57. package/dist/contexts-BS0Bs6IU.d.ts.map +0 -1
  58. package/dist/dist-DF8sudAg.js.map +0 -1
  59. package/dist/errors-BG6NZiPD.js.map +0 -1
  60. package/dist/extensions/index.d.ts.map +0 -1
  61. package/dist/extensions/index.js.map +0 -1
  62. package/dist/rpc-types-PBUY-xXM.d.ts +0 -1679
  63. package/dist/rpc-types-PBUY-xXM.d.ts.map +0 -1
  64. package/dist/sandbox-BgwMBQ7S.js +0 -8273
  65. package/dist/sandbox-BgwMBQ7S.js.map +0 -1
  66. package/dist/sandbox-D_MMqExx.d.ts +0 -1077
  67. package/dist/sandbox-D_MMqExx.d.ts.map +0 -1
@@ -1,14 +1,15 @@
1
- import { n as Sandbox } from "../sandbox-D_MMqExx.js";
2
- import "../rpc-types-PBUY-xXM.js";
3
- import { s as OpencodeStartupContext } from "../contexts-BS0Bs6IU.js";
1
+ import { D as OpenCodeStartupContext } from "../contexts-1EsLHByO.js";
2
+ import "../process-types-GStiZ8f8.js";
3
+ import "../filesystem-BWAZCZER.js";
4
+ import { c as SandboxExtension, l as SandboxLike } from "../index-Bs4bqXDR.js";
4
5
  import { OpencodeClient } from "@opencode-ai/sdk/v2/client";
5
6
  import { Config } from "@opencode-ai/sdk/v2";
6
7
 
7
- //#region src/opencode/types.d.ts
8
+ //#region ../../extensions/opencode/src/types.d.ts
8
9
  /**
9
10
  * Configuration options for starting OpenCode server
10
11
  */
11
- interface OpencodeOptions {
12
+ interface OpenCodeOptions {
12
13
  /** Port for OpenCode server (default: 4096) */
13
14
  port?: number;
14
15
  /** Working directory for OpenCode (default: container's cwd) */
@@ -21,7 +22,7 @@ interface OpencodeOptions {
21
22
  /**
22
23
  * Server lifecycle management
23
24
  */
24
- interface OpencodeServer {
25
+ interface OpenCodeServer {
25
26
  /** Port the server is running on */
26
27
  port: number;
27
28
  /** Base URL for SDK client (http://localhost:{port}) */
@@ -29,182 +30,153 @@ interface OpencodeServer {
29
30
  /** Close the server gracefully */
30
31
  close(): Promise<void>;
31
32
  }
32
- /**
33
- * Result from createOpencode()
34
- * Client type comes from @opencode-ai/sdk (user's version)
35
- */
36
- interface OpencodeResult<TClient = OpencodeClient> {
37
- /** OpenCode SDK client with Sandbox transport */
38
- client: TClient;
39
- /** Server lifecycle management */
40
- server: OpencodeServer;
41
- }
42
33
  /**
43
34
  * Error thrown when OpenCode server fails to start
44
35
  */
45
- declare class OpencodeStartupError extends Error {
36
+ declare class OpenCodeStartupError extends Error {
46
37
  readonly code: "OPENCODE_STARTUP_FAILED";
47
- readonly context: OpencodeStartupContext;
48
- constructor(message: string, context: OpencodeStartupContext, options?: ErrorOptions);
38
+ readonly context: OpenCodeStartupContext;
39
+ constructor(message: string, context: OpenCodeStartupContext, options?: ErrorOptions);
40
+ }
41
+ //#endregion
42
+ //#region ../../extensions/opencode/src/opencode.d.ts
43
+ interface OpenCodeSandboxLike extends SandboxLike {
44
+ exec: NonNullable<SandboxLike['exec']>;
45
+ getProcess: NonNullable<SandboxLike['getProcess']>;
46
+ listProcesses: NonNullable<SandboxLike['listProcesses']>;
47
+ containerFetch(request: Request, port: number): Promise<Response>;
49
48
  }
50
49
  //#endregion
51
- //#region src/opencode/opencode.d.ts
50
+ //#region ../../extensions/opencode/src/lifecycle.d.ts
51
+ /** Resolved server metadata that is safe to return across the RPC boundary. */
52
+ interface OpenCodeServerInfo {
53
+ port: number;
54
+ url: string;
55
+ }
56
+ /** Snapshot of the resolved lifecycle configuration. */
57
+ interface OpenCodeConfig {
58
+ port: number;
59
+ directory?: string;
60
+ }
61
+ /** Current server status as observed in the container. */
62
+ interface OpenCodeStatus extends OpenCodeServerInfo {
63
+ running: boolean;
64
+ }
52
65
  /**
53
- * Starts an OpenCode server inside a Sandbox container.
54
- *
55
- * This function manages the server lifecycle only - use `createOpencode()` if you
56
- * also need a typed SDK client for programmatic access.
57
- *
58
- * If an OpenCode server is already running on the specified port, this function
59
- * will reuse it instead of starting a new one.
60
- *
61
- * @param sandbox - The Sandbox instance to run OpenCode in
62
- * @param options - Configuration options
63
- * @returns Promise resolving to server handle { port, url, close() }
64
- *
65
- * @example
66
- * ```typescript
67
- * import { getSandbox } from '@cloudflare/sandbox'
68
- * import { createOpencodeServer } from '@cloudflare/sandbox/opencode'
69
- *
70
- * const sandbox = getSandbox(env.Sandbox, 'my-agent')
71
- * const server = await createOpencodeServer(sandbox, {
72
- * directory: '/home/user/my-project',
73
- * config: {
74
- * provider: {
75
- * anthropic: {
76
- * options: { apiKey: env.ANTHROPIC_KEY }
77
- * },
78
- * // Or use Cloudflare AI Gateway (with unified billing, no provider keys needed).
79
- * // 'cloudflare-ai-gateway': {
80
- * // options: {
81
- * // accountId: env.CF_ACCOUNT_ID,
82
- * // gatewayId: env.CF_GATEWAY_ID,
83
- * // apiToken: env.CF_API_TOKEN
84
- * // },
85
- * // models: { 'anthropic/claude-sonnet-4-5-20250929': {} }
86
- * // }
87
- * }
88
- * }
89
- * })
90
- *
91
- * // Proxy requests to the web UI
92
- * return sandbox.containerFetch(request, server.port)
93
- *
94
- * // When done
95
- * await server.close()
96
- * ```
66
+ * The slice of `DurableObjectStorage` the handle uses to persist desired-state.
67
+ * Pass `this.ctx.storage` so the server config survives a Durable Object
68
+ * eviction (cold start) and is recovered lazily on the next `start()`.
97
69
  */
98
- declare function createOpencodeServer(sandbox: Sandbox<unknown>, options?: OpencodeOptions): Promise<OpencodeServer>;
70
+ interface OpenCodeStateStorage {
71
+ get<T>(key: string): Promise<T | undefined>;
72
+ put<T>(key: string, value: T): Promise<void>;
73
+ }
74
+ /** Options for {@link withOpenCode}: server defaults plus optional storage. */
75
+ interface WithOpenCodeOptions extends OpenCodeOptions {
76
+ /** Persist desired-state here so it survives DO eviction. */
77
+ storage?: OpenCodeStateStorage;
78
+ }
99
79
  /**
100
- * Creates an OpenCode server inside a Sandbox container and returns a typed SDK client.
101
- *
102
- * This function is API-compatible with OpenCode's own createOpencode(), but uses
103
- * Sandbox process management instead of Node.js spawn. The returned client uses
104
- * a custom fetch adapter to route requests through the Sandbox container.
105
- *
106
- * If an OpenCode server is already running on the specified port, this function
107
- * will reuse it instead of starting a new one.
80
+ * DO-resident lifecycle handle for an OpenCode server. Owns the durable
81
+ * `opencode serve` process: start/reuse, stop, status, and request proxying.
108
82
  *
109
- * @param sandbox - The Sandbox instance to run OpenCode in
110
- * @param options - Configuration options
111
- * @returns Promise resolving to { client, server }
83
+ * It extends {@link SandboxExtension}, so the DO stub exposes it as
84
+ * `sandbox.opencode` and method calls dispatch through `callExtension` — the
85
+ * same path the interpreter extension uses. `createOpenCodeClient` consumes the
86
+ * same handle from either the Worker stub or the in-DO object.
112
87
  *
113
- * @example
114
- * ```typescript
115
- * import { getSandbox } from '@cloudflare/sandbox'
116
- * import { createOpencode } from '@cloudflare/sandbox/opencode'
117
- *
118
- * const sandbox = getSandbox(env.Sandbox, 'my-agent')
119
- * const { client, server } = await createOpencode(sandbox, {
120
- * directory: '/home/user/my-project',
121
- * config: {
122
- * provider: {
123
- * anthropic: {
124
- * options: { apiKey: env.ANTHROPIC_KEY }
125
- * },
126
- * // Or use Cloudflare AI Gateway (with unified billing, no provider keys needed).
127
- * // 'cloudflare-ai-gateway': {
128
- * // options: {
129
- * // accountId: env.CF_ACCOUNT_ID,
130
- * // gatewayId: env.CF_GATEWAY_ID,
131
- * // apiToken: env.CF_API_TOKEN
132
- * // },
133
- * // models: { 'anthropic/claude-sonnet-4-5-20250929': {} }
134
- * // }
135
- * }
136
- * },
137
- * // Optional: Pass additional environment variables (e.g., for OTEL telemetry)
138
- * env: {
139
- * OTEL_EXPORTER_OTLP_ENDPOINT: 'http://127.0.0.1:4318',
140
- * TRACEPARENT: '00-abc123-def456-01'
141
- * }
142
- * })
143
- *
144
- * // Use the SDK client for programmatic access
145
- * const session = await client.session.create()
146
- *
147
- * // When done
148
- * await server.close()
149
- * ```
88
+ * The server starts lazily: nothing runs until `start()` (or `fetch()`, which
89
+ * calls it) is invoked. To start optimistically, call `opencode.start()` from
90
+ * your Sandbox subclass's `onStart`.
150
91
  */
151
- declare function createOpencode<TClient = OpencodeClient>(sandbox: Sandbox<unknown>, options?: OpencodeOptions): Promise<OpencodeResult<TClient>>;
92
+ declare class OpenCodeHandle extends SandboxExtension {
93
+ #private;
94
+ constructor(sandbox: OpenCodeSandboxLike, defaults?: OpenCodeOptions, storage?: OpenCodeStateStorage, stateIndex?: number);
95
+ /**
96
+ * Start or reuse the OpenCode server, returning RPC-safe metadata. With no
97
+ * options it reuses the last-used config, recovering persisted desired-state
98
+ * after a cold start. Retries once on a transient `CONTAINER_UNAVAILABLE`
99
+ * (e.g. a rollout in flight).
100
+ */
101
+ start(options?: OpenCodeOptions): Promise<OpenCodeServerInfo>;
102
+ /** Stop the running server, if one was started through this handle. */
103
+ stop(): Promise<void>;
104
+ /** Report whether the named OpenCode server is currently running. */
105
+ status(): Promise<OpenCodeStatus>;
106
+ /** Snapshot of the resolved configuration the client builder reads. */
107
+ config(): Promise<OpenCodeConfig>;
108
+ /**
109
+ * Start the server then route a request into the container. This is the
110
+ * transport the SDK client's `fetch` adapter and the Worker proxy use, so it
111
+ * works identically from the Worker stub (one RPC hop) or in-DO (local).
112
+ */
113
+ fetch(request: Request): Promise<Response>;
114
+ }
152
115
  /**
153
- * Proxy a request directly to the OpenCode server.
116
+ * Factory — attach as a field on a Sandbox subclass:
117
+ * `opencode = withOpenCode(this, { directory, config, storage: this.ctx.storage })`.
154
118
  *
155
- * Unlike `proxyToOpencode()`, this helper does not apply any web UI redirects
156
- * or query parameter rewrites. Use it for API/CLI traffic where raw request
157
- * forwarding is preferred.
119
+ * Pass `storage` to persist desired-state so the server is recovered after a DO
120
+ * eviction (cold start). The server starts lazily on first use.
158
121
  */
159
- declare function proxyToOpencodeServer(request: Request, sandbox: Sandbox<unknown>, server: OpencodeServer): Promise<Response>;
122
+ declare function withOpenCode(sandbox: OpenCodeSandboxLike, options?: WithOpenCodeOptions): OpenCodeHandle;
123
+ //#endregion
124
+ //#region ../../extensions/opencode/src/client.d.ts
160
125
  /**
161
- * Proxy a request to the OpenCode web UI.
162
- *
163
- * This function handles the redirect and proxying only - you must start the
164
- * server separately using `createOpencodeServer()`.
126
+ * Build a typed OpenCode SDK client from a lifecycle handle.
165
127
  *
166
- * Specifically handles:
167
- * 1. Ensuring the `?url=` parameter is set (required for OpenCode's frontend to
168
- * make API calls through the proxy instead of directly to localhost:4096)
169
- * 2. Proxying the request to the container
128
+ * Works against either the Worker stub (`sandbox.opencode`) or the in-DO object
129
+ * (`this.opencode`): it ensures the server through the handle, reads the stored
130
+ * config, and routes every request through `handle.fetch`. Because the handle
131
+ * owns `containerFetch`, this helper never touches sandbox transport directly.
170
132
  *
171
- * @param request - The incoming HTTP request
172
- * @param sandbox - The Sandbox instance running OpenCode
173
- * @param server - The OpenCode server handle from createOpencodeServer()
174
- * @returns Response from OpenCode or a redirect response
175
- *
176
- * @example
177
- * ```typescript
178
- * import { getSandbox } from '@cloudflare/sandbox'
179
- * import { createOpencodeServer, proxyToOpencode } from '@cloudflare/sandbox/opencode'
133
+ * The SDK is imported lazily so the peer dependency is only required when an
134
+ * OpenCode client is actually built.
135
+ */
136
+ declare function createOpenCodeClient<TClient = OpencodeClient>(handle: OpenCodeHandle, options?: OpenCodeOptions): Promise<TClient>;
137
+ //#endregion
138
+ //#region ../../extensions/opencode/src/proxy.d.ts
139
+ /** Configuration for {@link createOpenCodeProxy}. */
140
+ interface OpenCodeProxyOptions {
141
+ /** Origin the OpenCode web UI should call back through. Defaults to the request origin. */
142
+ callbackOrigin?: string;
143
+ }
144
+ /**
145
+ * Proxy a request to the OpenCode web UI through a lifecycle handle.
180
146
  *
181
- * export default {
182
- * async fetch(request: Request, env: Env) {
183
- * const sandbox = getSandbox(env.Sandbox, 'opencode')
184
- * const server = await createOpencodeServer(sandbox, {
185
- * directory: '/home/user/project',
186
- * config: {
187
- * provider: {
188
- * anthropic: {
189
- * options: { apiKey: env.ANTHROPIC_KEY }
190
- * },
191
- * // Optional: Route all providers through Cloudflare AI Gateway
192
- * 'cloudflare-ai-gateway': {
193
- * options: {
194
- * accountId: env.CF_ACCOUNT_ID,
195
- * gatewayId: env.CF_GATEWAY_ID,
196
- * apiToken: env.CF_API_TOKEN
197
- * }
198
- * }
199
- * }
200
- * }
201
- * })
202
- * return proxyToOpencode(request, sandbox, server)
147
+ * For an initial HTML page load that still lacks the `?url=` parameter, returns
148
+ * a redirect that adds it (so the OpenCode frontend calls back through the
149
+ * proxy instead of `127.0.0.1:4096`). Every other request is routed through
150
+ * `handle.fetch`, which ensures the server is running before forwarding into the
151
+ * container.
152
+ */
153
+ declare function proxyToOpenCodeUI(request: Request, handle: OpenCodeHandle, options?: OpenCodeProxyOptions): Response | Promise<Response>;
154
+ /**
155
+ * Curried Worker fetch wrapper for OpenCode.
156
+ *
157
+ * `createOpenCodeProxy(resolve, options?)` captures a lazy per-request resolver
158
+ * for the OpenCode lifecycle handle (`sandbox.opencode`) and returns a function
159
+ * that wraps the user's worker entrypoint.
160
+ *
161
+ * The wrapped handler runs first. If it returns a 404 (or has no `fetch`), the
162
+ * request falls through to the OpenCode web-UI proxy — the redirect handshake
163
+ * for HTML loads and an ensure-then-forward into the container for everything
164
+ * else. A 404 from the user handler is the "not mine, proxy it" signal, so the
165
+ * handler only needs to own its own routes and `return new Response('Not
166
+ * found', { status: 404 })` for the rest.
167
+ *
168
+ * ```ts
169
+ * export default createOpenCodeProxy(
170
+ * (env) => getSandbox(env.Sandbox, 'my-sandbox').opencode
171
+ * )({
172
+ * async fetch(request, env) {
173
+ * // handle your own routes, else:
174
+ * return new Response('Not found', { status: 404 });
203
175
  * }
204
- * }
176
+ * });
205
177
  * ```
206
178
  */
207
- declare function proxyToOpencode(request: Request, sandbox: Sandbox<unknown>, server: OpencodeServer): Response | Promise<Response>;
179
+ declare function createOpenCodeProxy<Env>(resolve: (env: Env) => OpenCodeHandle, options?: OpenCodeProxyOptions): (handler: ExportedHandler<Env>) => ExportedHandler<Env>;
208
180
  //#endregion
209
- export { type OpencodeOptions, type OpencodeResult, type OpencodeServer, OpencodeStartupError, createOpencode, createOpencodeServer, proxyToOpencode, proxyToOpencodeServer };
181
+ export { type OpenCodeConfig, OpenCodeHandle, type OpenCodeOptions, type OpenCodeProxyOptions, type OpenCodeServer, type OpenCodeServerInfo, OpenCodeStartupError, type OpenCodeStateStorage, type OpenCodeStatus, type WithOpenCodeOptions, createOpenCodeClient, createOpenCodeProxy, proxyToOpenCodeUI, withOpenCode };
210
182
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/opencode/types.ts","../../src/opencode/opencode.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;UAOiB,eAAA;EAAA;EAcA,IAAA,CAAA,EAAA,MAAA;EAaA;EAAyB,SAAA,CAAA,EAAA,MAAA;EAEhC;EAEA,MAAA,CAAA,EAzBC,MAyBD;EAAc;EAMX,GAAA,CAAA,EA7BL,MA6BK,CAAA,MAAA,EAAA,MAAqB,CAAA;;;;;AAAa,UAvB9B,cAAA,CAuB8B;;;;EC+QzB,GAAA,EAAA,MAAA;EACX;EACC,KAAA,EAAA,EDlSD,OCkSC,CAAA,IAAA,CAAA;;;;AAsEZ;;AACW,UDlWM,cCkWN,CAAA,UDlW+B,cCkW/B,CAAA,CAAA;EACC;EACc,MAAA,EDlWhB,OCkWgB;EAAf;EAAR,MAAA,EDhWO,cCgWP;;AA0BH;;;AAGU,cDvXG,oBAAA,SAA6B,KAAA,CCuXhC;EACC,SAAA,IAAA,EAAA,yBAAA;EAAR,SAAA,OAAA,EDtXwB,sBCsXxB;EAAO,WAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EDlXG,sBCkXH,EAAA,OAAA,CAAA,EDjXI,YCiXJ;AAmDV;;;;;;;ADhdA;AAcA;AAaA;;;;;AAUA;;;;;;;;;AC+QA;;;;;;AAwEA;;;;;;;;AA6BA;;;;;;;AAuDA;;;;;AAIsB,iBAhKA,oBAAA,CAgKA,OAAA,EA/JX,OA+JW,CAAA,OAAA,CAAA,EAAA,OAAA,CAAA,EA9JV,eA8JU,CAAA,EA7JnB,OA6JmB,CA7JX,cA6JW,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAxFA,yBAAyB,yBACpC,4BACC,kBACT,QAAQ,eAAe;;;;;;;;iBA0BV,qBAAA,UACL,kBACA,0BACD,iBACP,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmDK,eAAA,UACL,kBACA,0BACD,iBACP,WAAW,QAAQ"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../../extensions/opencode/src/types.ts","../../../../extensions/opencode/src/opencode.ts","../../../../extensions/opencode/src/lifecycle.ts","../../../../extensions/opencode/src/client.ts","../../../../extensions/opencode/src/proxy.ts"],"sourcesContent":[],"mappings":"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"}