@dainprotocol/service-sdk 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,282 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const zod_1 = require("zod");
5
- const supertest_1 = tslib_1.__importDefault(require("supertest"));
6
- const nodeService_1 = require("../service/nodeService");
7
- const core_1 = require("../service/core");
8
- const ed25519_1 = require("@noble/curves/ed25519");
9
- const bs58_1 = tslib_1.__importDefault(require("bs58"));
10
- describe("OAuth2Client in ServiceContext", () => {
11
- let server;
12
- const port = 4567;
13
- // Generate keys for authentication
14
- const privateKey = ed25519_1.ed25519.utils.randomPrivateKey();
15
- const publicKey = ed25519_1.ed25519.getPublicKey(privateKey);
16
- // Create a context that uses OAuth2Client
17
- const userContext = (0, core_1.createContext)({
18
- id: "oauth-test-context",
19
- name: "OAuth Test Context",
20
- description: "Context that uses OAuth2Client",
21
- getContextData: async (agentInfo, extraData) => {
22
- const oauth2Client = extraData?.oauth2Client;
23
- return {
24
- hasOAuth2Client: !!oauth2Client,
25
- canAccessTokenMethods: !!(oauth2Client?.getAccessToken && oauth2Client?.getValidToken),
26
- methods: oauth2Client ? Object.keys(oauth2Client).filter(key => typeof oauth2Client[key] === 'function') : []
27
- };
28
- }
29
- });
30
- // Create a tool that verifies OAuth2Client is in context
31
- const oauthContextTool = (0, core_1.createTool)({
32
- id: "verify-oauth-context",
33
- name: "Verify OAuth Context",
34
- description: "Verifies OAuth2Client is available in tool context",
35
- input: zod_1.z.object({
36
- test: zod_1.z.string().optional()
37
- }),
38
- output: zod_1.z.object({
39
- hasOAuth2Client: zod_1.z.boolean(),
40
- canCallMethods: zod_1.z.boolean()
41
- }),
42
- handler: async (input, agentInfo, context) => {
43
- const hasOAuth2Client = !!context?.oauth2Client;
44
- const canCallMethods = !!(context?.oauth2Client?.getAccessToken &&
45
- context?.oauth2Client?.getValidToken &&
46
- context?.oauth2Client?.getTokensByEmail);
47
- return {
48
- text: hasOAuth2Client
49
- ? "OAuth2Client is available in tool context"
50
- : "OAuth2Client is not available",
51
- data: {
52
- hasOAuth2Client,
53
- canCallMethods
54
- },
55
- ui: undefined
56
- };
57
- }
58
- });
59
- const dainService = (0, nodeService_1.defineDAINService)({
60
- metadata: {
61
- title: "Test OAuth Context",
62
- description: "Testing OAuth2Client in ServiceContext",
63
- version: "1.0.0",
64
- author: "Test",
65
- tags: ["test", "oauth"]
66
- },
67
- identity: {
68
- publicKey: bs58_1.default.encode(publicKey),
69
- privateKey: bs58_1.default.encode(privateKey),
70
- agentId: "oauth-test-agent",
71
- orgId: "oauth-test-org"
72
- },
73
- tools: [oauthContextTool],
74
- contexts: [userContext],
75
- oauth2: {
76
- baseUrl: `http://localhost:${port}`,
77
- providers: {
78
- google: {
79
- clientId: "test-google-client",
80
- clientSecret: "test-google-secret",
81
- authorizationUrl: "https://accounts.google.com/o/oauth2/v2/auth",
82
- tokenUrl: "https://oauth2.googleapis.com/token",
83
- scopes: ["email", "profile"]
84
- }
85
- },
86
- tokenStore: new (require('@dainprotocol/oauth2-token-manager').InMemoryStorageAdapter)()
87
- }
88
- });
89
- beforeAll(async () => {
90
- server = await dainService.startNode({ port });
91
- });
92
- afterAll(async () => {
93
- if (server) {
94
- server.close();
95
- }
96
- });
97
- describe("Context endpoints", () => {
98
- it("should include OAuth2Client when getting single context", async () => {
99
- const response = await (0, supertest_1.default)(`http://localhost:${port}`)
100
- .get("/contexts/oauth-test-context")
101
- .set("x-agent-id", "test-agent")
102
- .set("x-org-id", "test-org")
103
- .set("x-agent-signature", "test-signature")
104
- .set("x-agent-public-key", bs58_1.default.encode(publicKey))
105
- .expect(200);
106
- expect(response.body).toMatchObject({
107
- id: "oauth-test-context",
108
- name: "OAuth Test Context",
109
- description: "Context that uses OAuth2Client",
110
- data: {
111
- hasOAuth2Client: true,
112
- canAccessTokenMethods: true,
113
- methods: expect.arrayContaining([
114
- "getAccessToken",
115
- "getValidToken",
116
- "getTokensByUserId",
117
- "getTokensByEmail",
118
- "deleteToken"
119
- ])
120
- }
121
- });
122
- });
123
- it("should include OAuth2Client when getting all contexts", async () => {
124
- const response = await (0, supertest_1.default)(`http://localhost:${port}`)
125
- .post("/contexts")
126
- .set("x-agent-id", "test-agent")
127
- .set("x-org-id", "test-org")
128
- .set("x-agent-signature", "test-signature")
129
- .set("x-agent-public-key", bs58_1.default.encode(publicKey))
130
- .send({})
131
- .expect(200);
132
- expect(Array.isArray(response.body)).toBe(true);
133
- expect(response.body.length).toBeGreaterThan(0);
134
- const oauthContext = response.body.find((ctx) => ctx.id === "oauth-test-context");
135
- expect(oauthContext).toBeDefined();
136
- expect(oauthContext.data).toMatchObject({
137
- hasOAuth2Client: true,
138
- canAccessTokenMethods: true,
139
- methods: expect.arrayContaining(["getAccessToken", "getValidToken"])
140
- });
141
- });
142
- it("should provide OAuth2Client to tools via context", async () => {
143
- const response = await (0, supertest_1.default)(`http://localhost:${port}`)
144
- .post("/tools/verify-oauth-context")
145
- .set("x-agent-id", "test-agent")
146
- .set("x-org-id", "test-org")
147
- .set("x-agent-signature", "test-signature")
148
- .set("x-agent-public-key", bs58_1.default.encode(publicKey))
149
- .send({ test: "value" })
150
- .expect(200);
151
- expect(response.body).toMatchObject({
152
- text: "OAuth2Client is available in tool context",
153
- data: {
154
- hasOAuth2Client: true,
155
- canCallMethods: true
156
- }
157
- });
158
- });
159
- });
160
- describe("OAuth2Client in streaming context", () => {
161
- it("should include OAuth2Client in SSE streaming context", (done) => {
162
- const req = (0, supertest_1.default)(`http://localhost:${port}`)
163
- .post("/stream")
164
- .set("x-agent-id", "test-agent")
165
- .set("x-org-id", "test-org")
166
- .set("x-agent-signature", "test-signature")
167
- .set("x-agent-public-key", bs58_1.default.encode(publicKey))
168
- .set("Accept", "text/event-stream")
169
- .send({
170
- messages: [
171
- {
172
- role: "user",
173
- content: "Test OAuth context"
174
- }
175
- ],
176
- withContext: true
177
- });
178
- let contextFound = false;
179
- let buffer = "";
180
- req.on("data", (chunk) => {
181
- buffer += chunk.toString();
182
- const lines = buffer.split("\n");
183
- for (let i = 0; i < lines.length - 1; i++) {
184
- const line = lines[i].trim();
185
- if (line.startsWith("data: ")) {
186
- try {
187
- const data = JSON.parse(line.slice(6));
188
- if (data.type === "context" && data.contexts) {
189
- const oauthContext = data.contexts.find((ctx) => ctx.id === "oauth-test-context");
190
- if (oauthContext) {
191
- expect(oauthContext.data).toMatchObject({
192
- hasOAuth2Client: true,
193
- canAccessTokenMethods: true
194
- });
195
- contextFound = true;
196
- }
197
- }
198
- if (data.type === "done" && contextFound) {
199
- done();
200
- return;
201
- }
202
- }
203
- catch (e) {
204
- // Ignore parsing errors for incomplete JSON
205
- }
206
- }
207
- }
208
- buffer = lines[lines.length - 1];
209
- });
210
- req.on("error", done);
211
- req.on("end", () => {
212
- if (!contextFound) {
213
- done(new Error("OAuth context not found in stream"));
214
- }
215
- });
216
- });
217
- });
218
- describe("OAuth2Client availability without OAuth config", () => {
219
- let noOAuthServer;
220
- const noOAuthPort = 4568;
221
- // Generate new keys for second service
222
- const privateKey2 = ed25519_1.ed25519.utils.randomPrivateKey();
223
- const publicKey2 = ed25519_1.ed25519.getPublicKey(privateKey2);
224
- const noOAuthService = (0, nodeService_1.defineDAINService)({
225
- metadata: {
226
- title: "Test No OAuth",
227
- description: "Testing context without OAuth2",
228
- version: "1.0.0",
229
- author: "Test",
230
- tags: ["test"]
231
- },
232
- identity: {
233
- publicKey: bs58_1.default.encode(publicKey2),
234
- privateKey: bs58_1.default.encode(privateKey2),
235
- agentId: "no-oauth-agent",
236
- orgId: "no-oauth-org"
237
- },
238
- tools: [(0, core_1.createTool)({
239
- id: "dummy-tool",
240
- name: "Dummy Tool",
241
- description: "A dummy tool for testing",
242
- input: zod_1.z.object({}),
243
- output: zod_1.z.object({}),
244
- handler: async () => ({ text: "dummy", data: {}, ui: undefined })
245
- })],
246
- contexts: [{
247
- id: "no-oauth-context",
248
- name: "No OAuth Context",
249
- description: "Context without OAuth2Client",
250
- getContextData: async (agentInfo, extraData) => {
251
- return {
252
- hasOAuth2Client: !!extraData?.oauth2Client,
253
- extraDataKeys: Object.keys(extraData || {})
254
- };
255
- }
256
- }]
257
- });
258
- beforeAll(async () => {
259
- noOAuthServer = await noOAuthService.startNode({ port: noOAuthPort });
260
- });
261
- afterAll(async () => {
262
- if (noOAuthServer) {
263
- noOAuthServer.close();
264
- }
265
- });
266
- it("should not have OAuth2Client when OAuth is not configured", async () => {
267
- const response = await (0, supertest_1.default)(`http://localhost:${noOAuthPort}`)
268
- .get("/contexts/no-oauth-context")
269
- .set("x-agent-id", "test-agent")
270
- .set("x-org-id", "test-org")
271
- .set("x-agent-signature", "test-signature")
272
- .set("x-agent-public-key", bs58_1.default.encode(publicKey2))
273
- .expect(200);
274
- expect(response.body.data).toMatchObject({
275
- hasOAuth2Client: false,
276
- extraDataKeys: expect.arrayContaining(["plugins"])
277
- });
278
- expect(response.body.data.extraDataKeys).not.toContain("oauth2Client");
279
- });
280
- });
281
- });
282
- //# sourceMappingURL=oauth-context.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth-context.test.js","sourceRoot":"","sources":["../../src/__tests__/oauth-context.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,165 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const nodeService_1 = require("../service/nodeService");
5
- const zod_1 = require("zod");
6
- const oauth2_token_manager_1 = require("@dainprotocol/oauth2-token-manager");
7
- const tweetnacl_1 = tslib_1.__importDefault(require("tweetnacl"));
8
- const bs58_1 = tslib_1.__importDefault(require("bs58"));
9
- describe("OAuth2Client in Tool Context", () => {
10
- it("should have oauth2Client available in tool context when OAuth2 is configured", async () => {
11
- // Generate test keys
12
- const keyPair = tweetnacl_1.default.sign.keyPair();
13
- const privateKey = bs58_1.default.encode(new Uint8Array([...keyPair.secretKey.slice(0, 32), ...keyPair.publicKey]));
14
- let capturedContext = null;
15
- const service = (0, nodeService_1.defineDAINService)({
16
- metadata: {
17
- title: "Test Service",
18
- description: "Test service with OAuth2",
19
- version: "1.0.0",
20
- author: "Test",
21
- tags: ["test"],
22
- },
23
- identity: {
24
- privateKey: privateKey,
25
- publicKey: bs58_1.default.encode(keyPair.publicKey),
26
- agentId: "test-agent",
27
- orgId: "test-org",
28
- },
29
- oauth2: {
30
- baseUrl: "http://localhost:5555",
31
- tokenStore: new oauth2_token_manager_1.InMemoryStorageAdapter(),
32
- providers: {
33
- google: {
34
- clientId: "test-client-id",
35
- clientSecret: "test-client-secret",
36
- authorizationUrl: "https://accounts.google.com/o/oauth2/v2/auth",
37
- tokenUrl: "https://oauth2.googleapis.com/token",
38
- scopes: ["profile", "email"],
39
- },
40
- },
41
- },
42
- tools: [
43
- (0, nodeService_1.createTool)({
44
- id: "test-oauth-context",
45
- name: "Test OAuth Context",
46
- description: "Tool to test OAuth2 context",
47
- input: zod_1.z.object({}),
48
- output: zod_1.z.object({
49
- hasOAuth2: zod_1.z.boolean(),
50
- hasOAuth2Client: zod_1.z.boolean(),
51
- }),
52
- handler: async (input, agentInfo, context) => {
53
- capturedContext = context;
54
- return {
55
- text: "Context captured",
56
- data: {
57
- hasOAuth2: !!context.oauth2,
58
- hasOAuth2Client: !!context.oauth2Client,
59
- },
60
- ui: null,
61
- };
62
- },
63
- }),
64
- ],
65
- });
66
- const manager = await service.startNode({ port: 5555 });
67
- try {
68
- // Make a request to the tool
69
- const response = await fetch("http://localhost:5555/tools/test-oauth-context", {
70
- method: "POST",
71
- headers: {
72
- "Content-Type": "application/json",
73
- "X-Agent-Id": "test-agent",
74
- "X-Agent-Address": "test-address",
75
- },
76
- body: JSON.stringify({}),
77
- });
78
- const result = await response.json();
79
- // Verify the context has oauth2Client
80
- expect(capturedContext).toBeTruthy();
81
- expect(capturedContext.oauth2).toBeTruthy();
82
- expect(capturedContext.oauth2Client).toBeTruthy();
83
- // Verify the tool response
84
- expect(result.data.hasOAuth2).toBe(true);
85
- expect(result.data.hasOAuth2Client).toBe(true);
86
- // Verify oauth2Client has the expected methods
87
- expect(typeof capturedContext.oauth2Client.queryTokens).toBe("function");
88
- expect(typeof capturedContext.oauth2Client.getValidToken).toBe("function");
89
- expect(typeof capturedContext.oauth2Client.getAccessToken).toBe("function");
90
- }
91
- finally {
92
- await manager.shutdown();
93
- }
94
- });
95
- it("should have oauth2Client as undefined when OAuth2 is not configured", async () => {
96
- // Generate test keys
97
- const keyPair = tweetnacl_1.default.sign.keyPair();
98
- const privateKey = bs58_1.default.encode(new Uint8Array([...keyPair.secretKey.slice(0, 32), ...keyPair.publicKey]));
99
- let capturedContext = null;
100
- const service = (0, nodeService_1.defineDAINService)({
101
- metadata: {
102
- title: "Test Service No OAuth",
103
- description: "Test service without OAuth2",
104
- version: "1.0.0",
105
- author: "Test",
106
- tags: ["test"],
107
- },
108
- identity: {
109
- privateKey: privateKey,
110
- publicKey: bs58_1.default.encode(keyPair.publicKey),
111
- agentId: "test-agent",
112
- orgId: "test-org",
113
- },
114
- // No oauth2 configuration
115
- tools: [
116
- (0, nodeService_1.createTool)({
117
- id: "test-no-oauth-context",
118
- name: "Test No OAuth Context",
119
- description: "Tool to test context without OAuth2",
120
- input: zod_1.z.object({}),
121
- output: zod_1.z.object({
122
- hasOAuth2: zod_1.z.boolean(),
123
- hasOAuth2Client: zod_1.z.boolean(),
124
- }),
125
- handler: async (input, agentInfo, context) => {
126
- capturedContext = context;
127
- return {
128
- text: "Context captured",
129
- data: {
130
- hasOAuth2: !!context.oauth2,
131
- hasOAuth2Client: !!context.oauth2Client,
132
- },
133
- ui: null,
134
- };
135
- },
136
- }),
137
- ],
138
- });
139
- const manager = await service.startNode({ port: 5556 });
140
- try {
141
- // Make a request to the tool
142
- const response = await fetch("http://localhost:5556/tools/test-no-oauth-context", {
143
- method: "POST",
144
- headers: {
145
- "Content-Type": "application/json",
146
- "X-Agent-Id": "test-agent",
147
- "X-Agent-Address": "test-address",
148
- },
149
- body: JSON.stringify({}),
150
- });
151
- const result = await response.json();
152
- // Verify the context doesn't have oauth2Client
153
- expect(capturedContext).toBeTruthy();
154
- expect(capturedContext.oauth2).toBeUndefined();
155
- expect(capturedContext.oauth2Client).toBeUndefined();
156
- // Verify the tool response
157
- expect(result.data.hasOAuth2).toBe(false);
158
- expect(result.data.hasOAuth2Client).toBe(false);
159
- }
160
- finally {
161
- await manager.shutdown();
162
- }
163
- });
164
- });
165
- //# sourceMappingURL=oauth2-client-context.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth2-client-context.test.js","sourceRoot":"","sources":["../../src/__tests__/oauth2-client-context.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,144 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const server_1 = require("../service/server");
5
- const oauth2_token_manager_1 = require("@dainprotocol/oauth2-token-manager");
6
- const core_1 = require("../service/core");
7
- const zod_1 = require("zod");
8
- const tweetnacl_1 = tslib_1.__importDefault(require("tweetnacl"));
9
- describe("OAuth2Client in server.ts", () => {
10
- it("should make oauth2Client available in tool context when OAuth2 is configured", async () => {
11
- // Generate test keys
12
- const keyPair = tweetnacl_1.default.sign.keyPair();
13
- const privateKey = keyPair.secretKey.slice(0, 32);
14
- let capturedContext = null;
15
- const tool = (0, core_1.createTool)({
16
- id: "test-oauth-tool",
17
- name: "Test OAuth Tool",
18
- description: "Test tool",
19
- input: zod_1.z.object({}),
20
- output: zod_1.z.object({ success: zod_1.z.boolean() }),
21
- handler: async (input, agentInfo, context) => {
22
- capturedContext = context;
23
- return {
24
- text: "Success",
25
- data: { success: true },
26
- ui: null,
27
- };
28
- },
29
- });
30
- const config = {
31
- identity: {
32
- orgId: "test-org",
33
- agentId: "test-agent",
34
- },
35
- oauth2: {
36
- baseUrl: "http://localhost:9999",
37
- tokenStore: new oauth2_token_manager_1.InMemoryStorageAdapter(),
38
- providers: {
39
- google: {
40
- clientId: "test-client",
41
- clientSecret: "test-secret",
42
- authorizationUrl: "https://accounts.google.com/o/oauth2/v2/auth",
43
- tokenUrl: "https://oauth2.googleapis.com/token",
44
- scopes: ["profile", "email"],
45
- },
46
- },
47
- },
48
- };
49
- const app = (0, server_1.setupHttpServer)(config, [tool], [], [], {
50
- id: "test",
51
- orgId: "test-org",
52
- agentId: "test-agent",
53
- title: "Test",
54
- description: "Test",
55
- version: "1.0.0",
56
- author: "Test",
57
- tags: [],
58
- }, privateKey, [], [], [], []);
59
- // Verify oauth2 is set on the app
60
- expect(app.oauth2).toBeDefined();
61
- expect(app.oauth2?.client).toBeDefined();
62
- // Log for debugging
63
- console.log("app.oauth2 exists:", !!app.oauth2);
64
- console.log("app.oauth2.client exists:", !!(app.oauth2 && app.oauth2.client));
65
- // Simulate tool execution to capture context - this is what server.ts does
66
- const toolContext = {
67
- app,
68
- oauth2: app.oauth2,
69
- oauth2Client: app.oauth2 ? app.oauth2.client : undefined,
70
- extraData: {},
71
- updateUI: async () => { },
72
- addProcess: async () => { },
73
- };
74
- await tool.handler({}, { agentId: "test", address: "test", id: "test" }, toolContext);
75
- // Log captured context
76
- console.log("Captured context keys:", Object.keys(capturedContext || {}));
77
- console.log("Context oauth2:", !!capturedContext?.oauth2);
78
- console.log("Context oauth2Client:", !!capturedContext?.oauth2Client);
79
- // Verify the captured context
80
- expect(capturedContext).toBeDefined();
81
- expect(capturedContext.oauth2).toBeDefined();
82
- expect(capturedContext.oauth2Client).toBeDefined();
83
- // Verify oauth2Client has the expected methods
84
- expect(typeof capturedContext.oauth2Client.queryTokens).toBe("function");
85
- expect(typeof capturedContext.oauth2Client.getValidToken).toBe("function");
86
- expect(typeof capturedContext.oauth2Client.getAccessToken).toBe("function");
87
- expect(typeof capturedContext.oauth2Client.registerProvider).toBe("function");
88
- });
89
- it("should have oauth2Client as undefined when OAuth2 is not configured", async () => {
90
- // Generate test keys
91
- const keyPair = tweetnacl_1.default.sign.keyPair();
92
- const privateKey = keyPair.secretKey.slice(0, 32);
93
- let capturedContext = null;
94
- const tool = (0, core_1.createTool)({
95
- id: "test-no-oauth-tool",
96
- name: "Test No OAuth Tool",
97
- description: "Test tool",
98
- input: zod_1.z.object({}),
99
- output: zod_1.z.object({ success: zod_1.z.boolean() }),
100
- handler: async (input, agentInfo, context) => {
101
- capturedContext = context;
102
- return {
103
- text: "Success",
104
- data: { success: true },
105
- ui: null,
106
- };
107
- },
108
- });
109
- const config = {
110
- identity: {
111
- orgId: "test-org",
112
- agentId: "test-agent",
113
- },
114
- // No oauth2 configuration
115
- };
116
- const app = (0, server_1.setupHttpServer)(config, [tool], [], [], {
117
- id: "test",
118
- orgId: "test-org",
119
- agentId: "test-agent",
120
- title: "Test",
121
- description: "Test",
122
- version: "1.0.0",
123
- author: "Test",
124
- tags: [],
125
- }, privateKey, [], [], [], []);
126
- // Verify oauth2 is not set on the app
127
- expect(app.oauth2).toBeUndefined();
128
- // Simulate tool execution to capture context - this is what server.ts does
129
- const toolContext = {
130
- app,
131
- oauth2: app.oauth2,
132
- oauth2Client: app.oauth2 ? app.oauth2.client : undefined,
133
- extraData: {},
134
- updateUI: async () => { },
135
- addProcess: async () => { },
136
- };
137
- await tool.handler({}, { agentId: "test", address: "test", id: "test" }, toolContext);
138
- // Verify the captured context
139
- expect(capturedContext).toBeDefined();
140
- expect(capturedContext.oauth2).toBeUndefined();
141
- expect(capturedContext.oauth2Client).toBeUndefined();
142
- });
143
- });
144
- //# sourceMappingURL=oauth2-client-simple.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth2-client-simple.test.js","sourceRoot":"","sources":["../../src/__tests__/oauth2-client-simple.test.ts"],"names":[],"mappings":"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"}