@liquidmetal-ai/drizzle 0.4.7 → 0.4.9

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 (31) hide show
  1. package/.turbo/turbo-build.log +9 -9
  2. package/.turbo/turbo-test.log +277 -83
  3. package/CHANGELOG.md +12 -0
  4. package/dist/liquidmetal/v1alpha1/catalog_pb.d.ts +1 -1
  5. package/dist/liquidmetal/v1alpha1/catalog_pb.d.ts.map +1 -1
  6. package/dist/liquidmetal/v1alpha1/catalog_pb.js +2 -2
  7. package/dist/liquidmetal/v1alpha1/events_connect.d.ts +39 -0
  8. package/dist/liquidmetal/v1alpha1/events_connect.d.ts.map +1 -0
  9. package/dist/liquidmetal/v1alpha1/events_connect.js +43 -0
  10. package/dist/liquidmetal/v1alpha1/events_pb.d.ts +175 -0
  11. package/dist/liquidmetal/v1alpha1/events_pb.d.ts.map +1 -0
  12. package/dist/liquidmetal/v1alpha1/events_pb.js +51 -0
  13. package/dist/liquidmetal/v1alpha1/logging_pb.d.ts +87 -0
  14. package/dist/liquidmetal/v1alpha1/logging_pb.d.ts.map +1 -0
  15. package/dist/liquidmetal/v1alpha1/logging_pb.js +25 -0
  16. package/dist/liquidmetal/v1alpha1/riverjack_pb.d.ts +74 -0
  17. package/dist/liquidmetal/v1alpha1/riverjack_pb.d.ts.map +1 -0
  18. package/dist/liquidmetal/v1alpha1/riverjack_pb.js +24 -0
  19. package/dist/unsafe/framework.d.ts.map +1 -1
  20. package/dist/unsafe/framework.js +48 -12
  21. package/dist/unsafe/framework.test.js +97 -62
  22. package/eslint.config.mjs +7 -4
  23. package/package.json +14 -15
  24. package/src/liquidmetal/v1alpha1/catalog_pb.ts +3 -3
  25. package/src/liquidmetal/v1alpha1/events_connect.ts +48 -0
  26. package/src/liquidmetal/v1alpha1/events_pb.ts +210 -0
  27. package/src/liquidmetal/v1alpha1/logging_pb.ts +108 -0
  28. package/src/liquidmetal/v1alpha1/riverjack_pb.ts +92 -0
  29. package/src/unsafe/framework.test.ts +96 -64
  30. package/src/unsafe/framework.ts +50 -10
  31. package/tsconfig.tsbuildinfo +1 -1
@@ -2,11 +2,29 @@ import { exec } from 'node:child_process';
2
2
  import { lstat } from 'node:fs/promises';
3
3
  import { dirname, join, parse } from 'node:path';
4
4
  import { promisify } from 'node:util';
5
+ import { readFile } from 'node:fs/promises';
5
6
  /**
6
7
  * The name of the framework package
7
8
  */
8
9
  export const FRAMEWORK_PACKAGE = '@liquidmetal-ai/raindrop-framework';
9
10
  const execAsync = promisify(exec);
11
+ async function resolveWorkspaceLink(version, currentDir) {
12
+ if (!version.startsWith('link:')) {
13
+ return version;
14
+ }
15
+ const linkPath = version.substring(5); // Remove 'link:' prefix
16
+ const absolutePath = join(currentDir, linkPath);
17
+ try {
18
+ const packageJsonPath = join(absolutePath, 'package.json');
19
+ const packageJsonContent = await readFile(packageJsonPath, 'utf8');
20
+ const packageJson = JSON.parse(packageJsonContent);
21
+ return packageJson.version || null;
22
+ }
23
+ catch (error) {
24
+ console.error(`Error reading version from linked package at ${absolutePath}:`, error);
25
+ return null;
26
+ }
27
+ }
10
28
  function findDependencyVersion(deps, packageName) {
11
29
  if (!deps)
12
30
  return null;
@@ -32,36 +50,54 @@ async function fileExists(path) {
32
50
  }
33
51
  }
34
52
  async function detectPackageManager(dir) {
35
- if (await fileExists(join(dir, 'package-lock.json')))
36
- return 'npm';
37
- if (await fileExists(join(dir, 'yarn.lock')))
38
- return 'yarn';
39
- if (await fileExists(join(dir, 'pnpm-lock.yaml')))
40
- return 'pnpm';
53
+ let currentDir = dir;
54
+ while (currentDir !== parse(currentDir).root) {
55
+ if (await fileExists(join(currentDir, 'package-lock.json')))
56
+ return 'npm';
57
+ if (await fileExists(join(currentDir, 'yarn.lock')))
58
+ return 'yarn';
59
+ if (await fileExists(join(currentDir, 'pnpm-lock.yaml')))
60
+ return 'pnpm';
61
+ currentDir = dirname(currentDir);
62
+ }
41
63
  return null;
42
64
  }
43
- const getVersionFromCommand = async (packageName, packageManager) => {
65
+ const getVersionFromCommand = async (packageName, packageManager, currentDir) => {
44
66
  try {
45
67
  const command = {
46
68
  npm: `npm list ${packageName} --json`,
47
69
  yarn: `yarn list --pattern "${packageName}" --json`,
48
70
  pnpm: `pnpm list ${packageName} --json`,
49
71
  }[packageManager];
50
- const { stdout } = await execAsync(command);
72
+ const { stdout } = await execAsync(command, { cwd: currentDir });
51
73
  if (packageManager === 'yarn') {
52
74
  const lines = stdout.split('\n').filter((line) => line.trim());
53
75
  for (const line of lines) {
54
76
  const parsed = JSON.parse(line);
55
77
  if (parsed.data?.trees) {
56
78
  const match = parsed.data.trees.find((t) => t.name === packageName);
57
- if (match)
58
- return match.version;
79
+ if (match) {
80
+ return await resolveWorkspaceLink(match.version, currentDir);
81
+ }
59
82
  }
60
83
  }
61
84
  }
62
85
  else {
63
86
  const data = JSON.parse(stdout);
64
- return findDependencyVersion(data.dependencies, packageName);
87
+ // Handle pnpm array format vs npm object format
88
+ let dependencies;
89
+ if (Array.isArray(data)) {
90
+ // pnpm format: array of objects
91
+ dependencies = data[0]?.dependencies;
92
+ }
93
+ else {
94
+ // npm format: single object with dependencies
95
+ dependencies = data.dependencies;
96
+ }
97
+ const version = findDependencyVersion(dependencies, packageName);
98
+ if (version) {
99
+ return await resolveWorkspaceLink(version, currentDir);
100
+ }
65
101
  }
66
102
  }
67
103
  catch (error) {
@@ -81,7 +117,7 @@ export async function getPackageVersion(packageName) {
81
117
  while (currentDir !== parse(currentDir).root) {
82
118
  const packageManager = await detectPackageManager(currentDir);
83
119
  if (packageManager) {
84
- const version = await getVersionFromCommand(packageName, packageManager);
120
+ const version = await getVersionFromCommand(packageName, packageManager, currentDir);
85
121
  if (version)
86
122
  return version;
87
123
  }
@@ -21,17 +21,22 @@ describe('getPackageVersion', () => {
21
21
  // Create package-lock.json to indicate npm
22
22
  await writeFile(join(tempDir, 'package-lock.json'), JSON.stringify({ name: 'test' }));
23
23
  // Mock npm list command output
24
- vi.mocked(exec).mockImplementation((command, callback) => {
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ vi.mocked(exec).mockImplementation((command, options, callback) => {
26
+ // Handle both (command, callback) and (command, options, callback) signatures
27
+ const cb = typeof options === 'function' ? options : callback;
25
28
  if (command.includes('npm list')) {
26
- callback(null, {
27
- stdout: JSON.stringify({
28
- dependencies: {
29
- 'test-package': {
30
- version: '1.2.3',
29
+ process.nextTick(() => {
30
+ cb?.(null, {
31
+ stdout: JSON.stringify({
32
+ dependencies: {
33
+ 'test-package': {
34
+ version: '1.2.3',
35
+ },
31
36
  },
32
- },
33
- }),
34
- stderr: '',
37
+ }),
38
+ stderr: '',
39
+ });
35
40
  });
36
41
  }
37
42
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -44,20 +49,25 @@ describe('getPackageVersion', () => {
44
49
  // Create yarn.lock to indicate yarn
45
50
  await writeFile(join(tempDir, 'yarn.lock'), 'yarn lock contents');
46
51
  // Mock yarn list command output
47
- vi.mocked(exec).mockImplementation((command, callback) => {
52
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
53
+ vi.mocked(exec).mockImplementation((command, options, callback) => {
54
+ // Handle both (command, callback) and (command, options, callback) signatures
55
+ const cb = typeof options === 'function' ? options : callback;
48
56
  if (command.includes('yarn list')) {
49
- callback(null, {
50
- stdout: JSON.stringify({
51
- data: {
52
- trees: [
53
- {
54
- name: 'test-package',
55
- version: '2.3.4',
56
- },
57
- ],
58
- },
59
- }),
60
- stderr: '',
57
+ process.nextTick(() => {
58
+ cb?.(null, {
59
+ stdout: JSON.stringify({
60
+ data: {
61
+ trees: [
62
+ {
63
+ name: 'test-package',
64
+ version: '2.3.4',
65
+ },
66
+ ],
67
+ },
68
+ }),
69
+ stderr: '',
70
+ });
61
71
  });
62
72
  }
63
73
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -70,17 +80,22 @@ describe('getPackageVersion', () => {
70
80
  // Create pnpm-lock.yaml to indicate pnpm
71
81
  await writeFile(join(tempDir, 'pnpm-lock.yaml'), 'pnpm lock contents');
72
82
  // Mock pnpm list command output
73
- vi.mocked(exec).mockImplementation((command, callback) => {
83
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
84
+ vi.mocked(exec).mockImplementation((command, options, callback) => {
85
+ // Handle both (command, callback) and (command, options, callback) signatures
86
+ const cb = typeof options === 'function' ? options : callback;
74
87
  if (command.includes('pnpm list')) {
75
- callback(null, {
76
- stdout: JSON.stringify({
77
- dependencies: {
78
- 'test-package': {
79
- version: '3.4.5',
88
+ process.nextTick(() => {
89
+ cb?.(null, {
90
+ stdout: JSON.stringify({
91
+ dependencies: {
92
+ 'test-package': {
93
+ version: '3.4.5',
94
+ },
80
95
  },
81
- },
82
- }),
83
- stderr: '',
96
+ }),
97
+ stderr: '',
98
+ });
84
99
  });
85
100
  }
86
101
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -91,22 +106,27 @@ describe('getPackageVersion', () => {
91
106
  });
92
107
  it('should handle nested dependencies', async () => {
93
108
  await writeFile(join(tempDir, 'package-lock.json'), JSON.stringify({ name: 'test' }));
94
- vi.mocked(exec).mockImplementation((command, callback) => {
109
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
110
+ vi.mocked(exec).mockImplementation((command, options, callback) => {
111
+ // Handle both (command, callback) and (command, options, callback) signatures
112
+ const cb = typeof options === 'function' ? options : callback;
95
113
  if (command.includes('npm list')) {
96
- callback(null, {
97
- stdout: JSON.stringify({
98
- dependencies: {
99
- 'parent-package': {
100
- version: '1.0.0',
101
- dependencies: {
102
- 'test-package': {
103
- version: '4.5.6',
114
+ process.nextTick(() => {
115
+ cb?.(null, {
116
+ stdout: JSON.stringify({
117
+ dependencies: {
118
+ 'parent-package': {
119
+ version: '1.0.0',
120
+ dependencies: {
121
+ 'test-package': {
122
+ version: '4.5.6',
123
+ },
104
124
  },
105
125
  },
106
126
  },
107
- },
108
- }),
109
- stderr: '',
127
+ }),
128
+ stderr: '',
129
+ });
110
130
  });
111
131
  }
112
132
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -117,13 +137,18 @@ describe('getPackageVersion', () => {
117
137
  });
118
138
  it('should return null when package is not found', async () => {
119
139
  await writeFile(join(tempDir, 'package-lock.json'), JSON.stringify({ name: 'test' }));
120
- vi.mocked(exec).mockImplementation((command, callback) => {
140
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
141
+ vi.mocked(exec).mockImplementation((command, options, callback) => {
142
+ // Handle both (command, callback) and (command, options, callback) signatures
143
+ const cb = typeof options === 'function' ? options : callback;
121
144
  if (command.includes('npm list')) {
122
- callback(null, {
123
- stdout: JSON.stringify({
124
- dependencies: {},
125
- }),
126
- stderr: '',
145
+ process.nextTick(() => {
146
+ cb?.(null, {
147
+ stdout: JSON.stringify({
148
+ dependencies: {},
149
+ }),
150
+ stderr: '',
151
+ });
127
152
  });
128
153
  }
129
154
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -140,17 +165,22 @@ describe('getPackageVersion', () => {
140
165
  await writeFile(join(tempDir, 'package-lock.json'), JSON.stringify({ name: 'test' }));
141
166
  // Set cwd to nested directory
142
167
  vi.spyOn(process, 'cwd').mockReturnValue(nestedDir);
143
- vi.mocked(exec).mockImplementation((command, callback) => {
168
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
169
+ vi.mocked(exec).mockImplementation((command, options, callback) => {
170
+ // Handle both (command, callback) and (command, options, callback) signatures
171
+ const cb = typeof options === 'function' ? options : callback;
144
172
  if (command.includes('npm list')) {
145
- callback(null, {
146
- stdout: JSON.stringify({
147
- dependencies: {
148
- 'test-package': {
149
- version: '5.6.7',
173
+ process.nextTick(() => {
174
+ cb?.(null, {
175
+ stdout: JSON.stringify({
176
+ dependencies: {
177
+ 'test-package': {
178
+ version: '5.6.7',
179
+ },
150
180
  },
151
- },
152
- }),
153
- stderr: '',
181
+ }),
182
+ stderr: '',
183
+ });
154
184
  });
155
185
  }
156
186
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -161,10 +191,15 @@ describe('getPackageVersion', () => {
161
191
  });
162
192
  it('should handle command execution errors', async () => {
163
193
  await writeFile(join(tempDir, 'package-lock.json'), JSON.stringify({ name: 'test' }));
164
- vi.mocked(exec).mockImplementation((_command, callback) => {
165
- callback(new Error('Command failed'), {
166
- stdout: '',
167
- stderr: 'failure',
194
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
195
+ vi.mocked(exec).mockImplementation((command, options, callback) => {
196
+ // Handle both (command, callback) and (command, options, callback) signatures
197
+ const cb = typeof options === 'function' ? options : callback;
198
+ process.nextTick(() => {
199
+ cb?.(new Error('Command failed'), {
200
+ stdout: '',
201
+ stderr: 'failure',
202
+ });
168
203
  });
169
204
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
170
205
  return {};
package/eslint.config.mjs CHANGED
@@ -1,5 +1,8 @@
1
- import repo_config from '@repo/eslint-config/eslint.config.mjs';
1
+ import repo_config from '@liquidmetal-ai/eslint-config/eslint.config.mjs';
2
2
 
3
- export default repo_config.concat([
4
- { ignores: ['src/liquidmetal/v1alpha1/*'] },
5
- ]);
3
+ /**
4
+ * @type {import('eslint').Linter.Config[]}
5
+ */
6
+ const config = [...repo_config, { ignores: ['src/liquidmetal/v1alpha1/*'] }];
7
+
8
+ export default config;
package/package.json CHANGED
@@ -1,27 +1,15 @@
1
1
  {
2
2
  "name": "@liquidmetal-ai/drizzle",
3
- "version": "0.4.7",
3
+ "version": "0.4.9",
4
4
  "description": "Raindrop core operational libraries",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
7
- "scripts": {
8
- "prebuild": "npm install --ignore-scripts",
9
- "prepublishOnly": "npm run build",
10
- "build": "shx rm -rf dist && tsc -b",
11
- "format": "prettier --write \"**/*.{ts,tsx,md}\"",
12
- "lint": "eslint . --max-warnings=0",
13
- "posttest": "npm run lint",
14
- "test": "vitest run",
15
- "test:watch": "vitest"
16
- },
17
7
  "author": "Ian Sung-Schenck",
18
8
  "license": "MIT",
19
9
  "devDependencies": {
20
10
  "@bufbuild/protobuf": "^2.2.3",
21
11
  "@changesets/cli": "^2.27.9",
22
12
  "@eslint/js": "^9.11.1",
23
- "@repo/eslint-config": "*",
24
- "@repo/typescript-config": "*",
25
13
  "@types/node": "^22",
26
14
  "@vitest/coverage-v8": "^2.1.1",
27
15
  "chai": "^5",
@@ -31,7 +19,9 @@
31
19
  "typescript": "^5",
32
20
  "typescript-eslint": "^8.7.0",
33
21
  "vitest": "^2.1.1",
34
- "@liquidmetal-ai/raindrop-framework": "*"
22
+ "@liquidmetal-ai/eslint-config": "0.0.0",
23
+ "@liquidmetal-ai/typescript-config": "0.0.0",
24
+ "@liquidmetal-ai/raindrop-framework": "0.4.9"
35
25
  },
36
26
  "dependencies": {
37
27
  "fflate": "^0.8.2"
@@ -45,5 +35,14 @@
45
35
  "import": "./dist/*.js",
46
36
  "types": "./dist/*.d.ts"
47
37
  }
38
+ },
39
+ "scripts": {
40
+ "prebuild": "pnpm install --ignore-scripts",
41
+ "build": "shx rm -rf dist && tsc -b",
42
+ "format": "prettier --write \"**/*.{ts,tsx,md}\"",
43
+ "lint": "eslint . --max-warnings=0",
44
+ "posttest": "pnpm run lint",
45
+ "test": "vitest run",
46
+ "test:watch": "vitest"
48
47
  }
49
- }
48
+ }
@@ -6,17 +6,17 @@ import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobu
6
6
  import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv1";
7
7
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
8
8
  import { file_google_protobuf_struct, file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
9
- import type { BucketLocator, BucketResponse } from "./bucket_name_pb.js";
10
- import { file_liquidmetal_v1alpha1_bucket_name } from "./bucket_name_pb.js";
11
9
  import type { AgentMemoryLocator, AgentMemoryResponse } from "./agent_memory_name_pb.js";
12
10
  import { file_liquidmetal_v1alpha1_agent_memory_name } from "./agent_memory_name_pb.js";
11
+ import type { BucketLocator, BucketResponse } from "./bucket_name_pb.js";
12
+ import { file_liquidmetal_v1alpha1_bucket_name } from "./bucket_name_pb.js";
13
13
  import type { JsonObject, Message } from "@bufbuild/protobuf";
14
14
 
15
15
  /**
16
16
  * Describes the file liquidmetal/v1alpha1/catalog.proto.
17
17
  */
18
18
  export const file_liquidmetal_v1alpha1_catalog: GenFile = /*@__PURE__*/
19
- fileDesc("CiJsaXF1aWRtZXRhbC92MWFscGhhMS9jYXRhbG9nLnByb3RvEhRsaXF1aWRtZXRhbC52MWFscGhhMSKHAQoTQXBwbGljYXRpb25zUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIUCgxzaG93X2RlbGV0ZWQYAyABKAgSHAoPbmV4dF9wYWdlX3Rva2VuGAQgASgJSACIAQFCEgoQX25leHRfcGFnZV90b2tlbiKEBQoUQXBwbGljYXRpb25zUmVzcG9uc2USTAoMYXBwbGljYXRpb25zGAEgAygLMjYubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2UuQXBwbGljYXRpb24SHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEa6wMKC0FwcGxpY2F0aW9uEgwKBG5hbWUYASABKAkSEgoKdmVyc2lvbl9pZBgCIAEoCRIQCghtYW5pZmVzdBgDIAEoCRISCgVzdWl0ZRgEIAEoCUgAiAEBEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmRlbGV0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESEQoJaXNfYWN0aXZlGAggASgIEhcKD29yZ2FuaXphdGlvbl9pZBgJIAEoCRITCgZicmFuY2gYCiABKAlIAogBARIUCgxpc19zYW5kYm94ZWQYCyABKAgSIAoTcHJldmlvdXNfdmVyc2lvbl9pZBgMIAEoCUgDiAEBEi4KBXN0YXRlGA0gASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEhEKBGxvY2sYDiABKAlIBIgBAUIICgZfc3VpdGVCDQoLX2RlbGV0ZWRfYXRCCQoHX2JyYW5jaEIWChRfcHJldmlvdXNfdmVyc2lvbl9pZEIHCgVfbG9ja0ISChBfbmV4dF9wYWdlX3Rva2VuItIBChBCb290c3RyYXBSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEg0KBXRva2VuGAMgASgJEh0KFWNsb3VkZmxhcmVfYWNjb3VudF9pZBgEIAEoCRIfChdjbG91ZGZsYXJlX2JlYXJlcl90b2tlbhgFIAEoCRIjChtsaXF1aWRtZXRhbF9zZXJ2aWNlc19kb21haW4YBiABKAkSIAoYY3VzdG9tZXJfc2VydmljZXNfZG9tYWluGAcgASgJIhMKEUJvb3RzdHJhcFJlc3BvbnNlIiwKKkludGVybmFsQXBwbGljYXRpb25zUmVxdWVzdFBhZ2luYXRpb25Ub2tlbiLeAQoTVXBsb2FkQnVuZGxlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYBCABKAkSEwoLYnVuZGxlX25hbWUYBSABKAkSPQoMYXJjaGl2ZV90eXBlGAYgASgOMicubGlxdWlkbWV0YWwudjFhbHBoYTEuQnVuZGxlQXJjaGl2ZVR5cGUSDwoHYXJjaGl2ZRgHIAEoDCIWChRVcGxvYWRCdW5kbGVSZXNwb25zZSJ7ChVRdWVyeVJlc291cmNlc1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSGAoQYXBwbGljYXRpb25fbmFtZRgDIAEoCRIeChZhcHBsaWNhdGlvbl92ZXJzaW9uX2lkGAQgASgJIvUHChZRdWVyeVJlc291cmNlc1Jlc3BvbnNlEkgKCXJlc291cmNlcxgBIAMoCzI1LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVzcG9uc2UuUmVzb3VyY2USHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEa3gYKCFJlc291cmNlEhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAIgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYAyABKAkSEwoLcmVzb3VyY2VfaWQYBCABKAkSDAoEbmFtZRgFIAEoCRIMCgR0eXBlGAYgASgJElkKDXJlc291cmNlX3R5cGUYByABKA4yQi5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeVJlc291cmNlc1Jlc3BvbnNlLlJlc291cmNlLlJlc291cmNlVHlwZRIrCgphdHRyaWJ1dGVzGAggASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpjcmVhdGVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLlAwoMUmVzb3VyY2VUeXBlEh0KGVJFU09VUkNFX1RZUEVfVU5TUEVDSUZJRUQQABIgChxSRVNPVVJDRV9UWVBFX1FVRVVFX0NPTlNVTUVSEAESGAoUUkVTT1VSQ0VfVFlQRV9TQ1JJUFQQAhIUChBSRVNPVVJDRV9UWVBFX0QxEAMSGgoWUkVTT1VSQ0VfVFlQRV9EMV9RVUVSWRAEEhsKF1JFU09VUkNFX1RZUEVfVkVDVE9SSVpFEAUSGQoVUkVTT1VSQ0VfVFlQRV9FTlZfVkFSEAYSGAoUUkVTT1VSQ0VfVFlQRV9CVUNLRVQQBxIXChNSRVNPVVJDRV9UWVBFX1FVRVVFEAgSIAocUkVTT1VSQ0VfVFlQRV9TQ1JJUFRfQklORElORxAJEiUKIVJFU09VUkNFX1RZUEVfQlVDS0VUX05PVElGSUNBVElPThAKEhoKFlJFU09VUkNFX1RZUEVfTUVUQURBVEEQCxIfChtSRVNPVVJDRV9UWVBFX0NVU1RPTV9ET01BSU4QDBIXChNSRVNPVVJDRV9UWVBFX1JPVVRFEA0SHgoaUkVTT1VSQ0VfVFlQRV9TTUFSVF9CVUNLRVQQDhIeChpSRVNPVVJDRV9UWVBFX0FHRU5UX01FTU9SWRAPQhIKEF9uZXh0X3BhZ2VfdG9rZW4ipAQKDURlcGxveVJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSRQoMYXBwbGljYXRpb25zGAMgAygLMi8ubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdC5BcHBsaWNhdGlvbhouChNBcHBsaWNhdGlvbk1ldGFkYXRhEhcKD3J1bnRpbWVfdmVyc2lvbhgBIAEoCRrxAgoLQXBwbGljYXRpb24SDQoFc3VpdGUYASABKAkSEwoLYXBwbGljYXRpb24YAiABKAkSIAoTcHJldmlvdXNfdmVyc2lvbl9pZBgDIAEoCUgAiAEBEh8KEmN1cnJlbnRfdmVyc2lvbl9pZBgEIAEoCUgBiAEBEhMKBmJyYW5jaBgFIAEoCUgCiAEBEhAKCG1hbmlmZXN0GAYgASgJEkkKCG1ldGFkYXRhGAcgASgLMjcubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdC5BcHBsaWNhdGlvbk1ldGFkYXRhEg0KBWFtZW5kGAggASgIEhYKCWlzX2FjdGl2ZRgJIAEoCEgDiAEBEhEKBGxvY2sYCiABKAlIBIgBAUIWChRfcHJldmlvdXNfdmVyc2lvbl9pZEIVChNfY3VycmVudF92ZXJzaW9uX2lkQgkKB19icmFuY2hCDAoKX2lzX2FjdGl2ZUIHCgVfbG9jayLUAQoORGVwbG95UmVzcG9uc2USFwoPb3JnYW5pemF0aW9uX2lkGAEgASgJEkYKDGFwcGxpY2F0aW9ucxgCIAMoCzIwLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlc3BvbnNlLkFwcGxpY2F0aW9uGmEKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEg4KBmJyYW5jaBgDIAEoCRIMCgRsb2NrGAQgASgJIt4BCg5TZXRFbnZzUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRI2CgRlbnZzGAMgAygLMigubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0RW52c1JlcXVlc3QuRW52GmoKA0VudhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRILCgNrZXkYAyABKAkSDQoFdmFsdWUYBCABKAkSEQoJaXNfc2VjcmV0GAUgASgIIhEKD1NldEVudnNSZXNwb25zZSK8AQoOR2V0RW52c1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSNgoEZW52cxgDIAMoCzIoLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXF1ZXN0LkVudhpICgNFbnYSGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkSCwoDa2V5GAMgASgJIrYBCg9HZXRFbnZzUmVzcG9uc2USNwoEZW52cxgBIAMoCzIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXNwb25zZS5FbnYaagoDRW52EhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEgsKA2tleRgDIAEoCRINCgV2YWx1ZRgEIAEoCRIRCglpc19zZWNyZXQYBSABKAgiwAEKDlJlbGVhc2VSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEjgKBWxvY2tzGAMgAygLMikubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVsZWFzZVJlcXVlc3QuTG9jaxpKCgRMb2NrEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEgwKBGxvY2sYAyABKAkiEQoPUmVsZWFzZVJlc3BvbnNlIsMBCgxXYXRjaFJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSRAoMYXBwbGljYXRpb25zGAMgAygLMi4ubGlxdWlkbWV0YWwudjFhbHBoYTEuV2F0Y2hSZXF1ZXN0LkFwcGxpY2F0aW9uGkMKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJIpkBCg1XYXRjaFJlc3BvbnNlEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEhAKCGV2ZW50X2lkGAMgASgJEkAKCmV2ZW50X3R5cGUYBCABKA4yLC5saXF1aWRtZXRhbC52MWFscGhhMS5XYXRjaFJlc3BvbnNlRXZlbnRUeXBlIsUBCg1EZWxldGVSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkUKDGFwcGxpY2F0aW9ucxgDIAMoCzIvLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlbGV0ZVJlcXVlc3QuQXBwbGljYXRpb24aQwoLQXBwbGljYXRpb24SGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkiEAoORGVsZXRlUmVzcG9uc2Ui3gEKEFNldEFjdGl2ZVJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSSAoMYXBwbGljYXRpb25zGAMgAygLMjIubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0QWN0aXZlUmVxdWVzdC5BcHBsaWNhdGlvbhpWCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIRCglpc19hY3RpdmUYAyABKAgiEwoRU2V0QWN0aXZlUmVzcG9uc2Ui4wEKEVNldFNhbmRib3hSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkkKDGFwcGxpY2F0aW9ucxgDIAMoCzIzLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldFNhbmRib3hSZXF1ZXN0LkFwcGxpY2F0aW9uGlkKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEhQKDGlzX3NhbmRib3hlZBgDIAEoCCIUChJTZXRTYW5kYm94UmVzcG9uc2UibwoNU3RhdHVzUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgEIAEoCSLwAQoOU3RhdHVzUmVzcG9uc2USLgoFc3RhdGUYASABKA4yHy5saXF1aWRtZXRhbC52MWFscGhhMS5Vbml0U3RhdGUSPAoHbW9kdWxlcxgCIAMoCzIrLmxpcXVpZG1ldGFsLnYxYWxwaGExLlN0YXR1c1Jlc3BvbnNlLk1vZHVsZRIRCgRsb2NrGAMgASgJSACIAQEaVAoGTW9kdWxlEgwKBG5hbWUYASABKAkSLgoFc3RhdGUYAiABKA4yHy5saXF1aWRtZXRhbC52MWFscGhhMS5Vbml0U3RhdGUSDAoEdXJscxgDIAMoCUIHCgVfbG9jayLdAQoTUXVlcnlNb2R1bGVzUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIdChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJSACIAQESIwoWYXBwbGljYXRpb25fdmVyc2lvbl9pZBgEIAEoCUgBiAEBEhgKC21vZHVsZV90eXBlGAUgASgJSAKIAQFCEwoRX2FwcGxpY2F0aW9uX25hbWVCGQoXX2FwcGxpY2F0aW9uX3ZlcnNpb25faWRCDgoMX21vZHVsZV90eXBlIvINChRRdWVyeU1vZHVsZXNSZXNwb25zZRJCCgdtb2R1bGVzGAEgAygLMjEubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuTW9kdWxlEhwKD25leHRfcGFnZV90b2tlbhgCIAEoCUgAiAEBGiAKEVNtYXJ0QnVja2V0TW9kdWxlEgsKA3VybBgBIAEoCRobCgxCdWNrZXRNb2R1bGUSCwoDdXJsGAEgASgJGg8KDVNlcnZpY2VNb2R1bGUaEAoOT2JzZXJ2ZXJNb2R1bGUaDAoKVGFza01vZHVsZRoTChFTUUxEYXRhYmFzZU1vZHVsZRoTChFWZWN0b3JJbmRleE1vZHVsZRoNCgtRdWV1ZU1vZHVsZRoPCg1LVlN0b3JlTW9kdWxlGhMKEUFnZW50TWVtb3J5TW9kdWxlGsUICgZNb2R1bGUSFwoPb3JnYW5pemF0aW9uX2lkGAEgASgJEhgKEGFwcGxpY2F0aW9uX25hbWUYAiABKAkSHgoWYXBwbGljYXRpb25fdmVyc2lvbl9pZBgDIAEoCRIRCgltb2R1bGVfaWQYBCABKAkSDAoEbmFtZRgFIAEoCRIMCgR0eXBlGAYgASgJEkoKC21vZHVsZV90eXBlGAcgASgOMjUubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuTW9kdWxlVHlwZRI1Cgxjb252ZXJnZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESVAoMc21hcnRfYnVja2V0GAkgASgLMjwubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuU21hcnRCdWNrZXRNb2R1bGVIABJJCgZidWNrZXQYCiABKAsyNy5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeU1vZHVsZXNSZXNwb25zZS5CdWNrZXRNb2R1bGVIABJLCgdzZXJ2aWNlGAsgASgLMjgubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuU2VydmljZU1vZHVsZUgAEk0KCG9ic2VydmVyGAwgASgLMjkubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuT2JzZXJ2ZXJNb2R1bGVIABJFCgR0YXNrGA0gASgLMjUubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuVGFza01vZHVsZUgAElQKDHNxbF9kYXRhYmFzZRgOIAEoCzI8LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLlNRTERhdGFiYXNlTW9kdWxlSAASVAoMdmVjdG9yX2luZGV4GA8gASgLMjwubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuVmVjdG9ySW5kZXhNb2R1bGVIABJHCgVxdWV1ZRgQIAEoCzI2LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLlF1ZXVlTW9kdWxlSAASTAoIa3Zfc3RvcmUYESABKAsyOC5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeU1vZHVsZXNSZXNwb25zZS5LVlN0b3JlTW9kdWxlSAASVAoMYWdlbnRfbWVtb3J5GBIgASgLMjwubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuQWdlbnRNZW1vcnlNb2R1bGVIAEIICgZtb2R1bGVCDwoNX2NvbnZlcmdlZF9hdCLMAgoKTW9kdWxlVHlwZRIbChdNT0RVTEVfVFlQRV9VTlNQRUNJRklFRBAAEhwKGE1PRFVMRV9UWVBFX1NNQVJUX0JVQ0tFVBABEhYKEk1PRFVMRV9UWVBFX0JVQ0tFVBACEhcKE01PRFVMRV9UWVBFX1NFUlZJQ0UQAxIYChRNT0RVTEVfVFlQRV9PQlNFUlZFUhAEEhQKEE1PRFVMRV9UWVBFX1RBU0sQBRIcChhNT0RVTEVfVFlQRV9TUUxfREFUQUJBU0UQBhIcChhNT0RVTEVfVFlQRV9WRUNUT1JfSU5ERVgQBxIXChNNT0RVTEVfVFlQRV9FTlZfVkFSEAgSFQoRTU9EVUxFX1RZUEVfUVVFVUUQCRIYChRNT0RVTEVfVFlQRV9LVl9TVE9SRRAKEhwKGE1PRFVMRV9UWVBFX0FHRU5UX01FTU9SWRALQhIKEF9uZXh0X3BhZ2VfdG9rZW4ikAEKJlJlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWRSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEjwKD2J1Y2tldF9sb2NhdGlvbhgDIAEoCzIjLmxpcXVpZG1ldGFsLnYxYWxwaGExLkJ1Y2tldExvY2F0b3IiZQomUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvblJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSEQoJbW9kdWxlX2lkGAMgASgJIl8KJ1Jlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWRSZXNwb25zZRI0CgZidWNrZXQYASABKAsyJC5saXF1aWRtZXRhbC52MWFscGhhMS5CdWNrZXRSZXNwb25zZSJfCidSZXNvbHZlTW9kdWxlSWRUb0J1Y2tldExvY2F0aW9uUmVzcG9uc2USNAoGYnVja2V0GAEgASgLMiQubGlxdWlkbWV0YWwudjFhbHBoYTEuQnVja2V0UmVzcG9uc2UioAEKK1Jlc29sdmVBZ2VudE1lbW9yeUxvY2F0aW9uVG9Nb2R1bGVJZFJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSRwoVYWdlbnRfbWVtb3J5X2xvY2F0aW9uGAMgASgLMigubGlxdWlkbWV0YWwudjFhbHBoYTEuQWdlbnRNZW1vcnlMb2NhdG9yImoKK1Jlc29sdmVNb2R1bGVJZFRvQWdlbnRNZW1vcnlMb2NhdGlvblJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSEQoJbW9kdWxlX2lkGAMgASgJIm8KLFJlc29sdmVBZ2VudE1lbW9yeUxvY2F0aW9uVG9Nb2R1bGVJZFJlc3BvbnNlEj8KDGFnZW50X21lbW9yeRgBIAEoCzIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLkFnZW50TWVtb3J5UmVzcG9uc2UibwosUmVzb2x2ZU1vZHVsZUlkVG9BZ2VudE1lbW9yeUxvY2F0aW9uUmVzcG9uc2USPwoMYWdlbnRfbWVtb3J5GAEgASgLMikubGlxdWlkbWV0YWwudjFhbHBoYTEuQWdlbnRNZW1vcnlSZXNwb25zZSrSAQoJVW5pdFN0YXRlEhoKFlVOSVRfU1RBVEVfVU5TUEVDSUZJRUQQABIWChJVTklUX1NUQVRFX1BFTkRJTkcQARIXChNVTklUX1NUQVRFX1NUQVJUSU5HEAISFgoSVU5JVF9TVEFURV9SVU5OSU5HEAMSFwoTVU5JVF9TVEFURV9TVE9QUElORxAEEhYKElVOSVRfU1RBVEVfU1RPUFBFRBAFEhcKE1VOSVRfU1RBVEVfREVMRVRJTkcQBhIWChJVTklUX1NUQVRFX0RFTEVURUQQBypVChFCdW5kbGVBcmNoaXZlVHlwZRIjCh9CVU5ETEVfQVJDSElWRV9UWVBFX1VOU1BFQ0lGSUVEEAASGwoXQlVORExFX0FSQ0hJVkVfVFlQRV9aSVAQASqSAQoWV2F0Y2hSZXNwb25zZUV2ZW50VHlwZRIpCiVXQVRDSF9SRVNQT05TRV9FVkVOVF9UWVBFX1VOU1BFQ0lGSUVEEAASJQohV0FUQ0hfUkVTUE9OU0VfRVZFTlRfVFlQRV9NRVNTQUdFEAESJgoiV0FUQ0hfUkVTUE9OU0VfRVZFTlRfVFlQRV9DT01QTEVURRACMswPCg5DYXRhbG9nU2VydmljZRJrCg5RdWVyeVJlc291cmNlcxIrLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVxdWVzdBosLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVzcG9uc2USZQoMUXVlcnlNb2R1bGVzEikubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVxdWVzdBoqLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlElwKCUJvb3RzdHJhcBImLmxpcXVpZG1ldGFsLnYxYWxwaGExLkJvb3RzdHJhcFJlcXVlc3QaJy5saXF1aWRtZXRhbC52MWFscGhhMS5Cb290c3RyYXBSZXNwb25zZRJlCgxBcHBsaWNhdGlvbnMSKS5saXF1aWRtZXRhbC52MWFscGhhMS5BcHBsaWNhdGlvbnNSZXF1ZXN0GioubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2USUwoGRGVwbG95EiMubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdBokLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlc3BvbnNlEmUKDFVwbG9hZEJ1bmRsZRIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLlVwbG9hZEJ1bmRsZVJlcXVlc3QaKi5saXF1aWRtZXRhbC52MWFscGhhMS5VcGxvYWRCdW5kbGVSZXNwb25zZRJWCgdTZXRFbnZzEiQubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0RW52c1JlcXVlc3QaJS5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRFbnZzUmVzcG9uc2USVgoHR2V0RW52cxIkLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXF1ZXN0GiUubGlxdWlkbWV0YWwudjFhbHBoYTEuR2V0RW52c1Jlc3BvbnNlElYKB1JlbGVhc2USJC5saXF1aWRtZXRhbC52MWFscGhhMS5SZWxlYXNlUmVxdWVzdBolLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlbGVhc2VSZXNwb25zZRJSCgVXYXRjaBIiLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVxdWVzdBojLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVzcG9uc2UwARJTCgZEZWxldGUSIy5saXF1aWRtZXRhbC52MWFscGhhMS5EZWxldGVSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVsZXRlUmVzcG9uc2USXAoJU2V0QWN0aXZlEiYubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0QWN0aXZlUmVxdWVzdBonLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEFjdGl2ZVJlc3BvbnNlEl8KClNldFNhbmRib3gSJy5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRTYW5kYm94UmVxdWVzdBooLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldFNhbmRib3hSZXNwb25zZRJTCgZTdGF0dXMSIy5saXF1aWRtZXRhbC52MWFscGhhMS5TdGF0dXNSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuU3RhdHVzUmVzcG9uc2USngEKH1Jlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWQSPC5saXF1aWRtZXRhbC52MWFscGhhMS5SZXNvbHZlQnVja2V0TG9jYXRpb25Ub01vZHVsZUlkUmVxdWVzdBo9LmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWRSZXNwb25zZRKeAQofUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvbhI8LmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVNb2R1bGVJZFRvQnVja2V0TG9jYXRpb25SZXF1ZXN0Gj0ubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvblJlc3BvbnNlEq0BCiRSZXNvbHZlQWdlbnRNZW1vcnlMb2NhdGlvblRvTW9kdWxlSWQSQS5saXF1aWRtZXRhbC52MWFscGhhMS5SZXNvbHZlQWdlbnRNZW1vcnlMb2NhdGlvblRvTW9kdWxlSWRSZXF1ZXN0GkIubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVzb2x2ZUFnZW50TWVtb3J5TG9jYXRpb25Ub01vZHVsZUlkUmVzcG9uc2USrQEKJFJlc29sdmVNb2R1bGVJZFRvQWdlbnRNZW1vcnlMb2NhdGlvbhJBLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVNb2R1bGVJZFRvQWdlbnRNZW1vcnlMb2NhdGlvblJlcXVlc3QaQi5saXF1aWRtZXRhbC52MWFscGhhMS5SZXNvbHZlTW9kdWxlSWRUb0FnZW50TWVtb3J5TG9jYXRpb25SZXNwb25zZULnAQoYY29tLmxpcXVpZG1ldGFsLnYxYWxwaGExQgxDYXRhbG9nUHJvdG9QAVpMZ2l0aHViLmNvbS9saXF1aWRtZXRhbC1haS9wcm90b2dlbjIvbGlxdWlkbWV0YWwvdjFhbHBoYTE7bGlxdWlkbWV0YWx2MWFscGhhMaICA0xYWKoCFExpcXVpZG1ldGFsLlYxYWxwaGExygIUTGlxdWlkbWV0YWxcVjFhbHBoYTHiAiBMaXF1aWRtZXRhbFxWMWFscGhhMVxHUEJNZXRhZGF0YeoCFUxpcXVpZG1ldGFsOjpWMWFscGhhMWIGcHJvdG8z", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_liquidmetal_v1alpha1_bucket_name, file_liquidmetal_v1alpha1_agent_memory_name]);
19
+ fileDesc("CiJsaXF1aWRtZXRhbC92MWFscGhhMS9jYXRhbG9nLnByb3RvEhRsaXF1aWRtZXRhbC52MWFscGhhMSKHAQoTQXBwbGljYXRpb25zUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIUCgxzaG93X2RlbGV0ZWQYAyABKAgSHAoPbmV4dF9wYWdlX3Rva2VuGAQgASgJSACIAQFCEgoQX25leHRfcGFnZV90b2tlbiKEBQoUQXBwbGljYXRpb25zUmVzcG9uc2USTAoMYXBwbGljYXRpb25zGAEgAygLMjYubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2UuQXBwbGljYXRpb24SHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEa6wMKC0FwcGxpY2F0aW9uEgwKBG5hbWUYASABKAkSEgoKdmVyc2lvbl9pZBgCIAEoCRIQCghtYW5pZmVzdBgDIAEoCRISCgVzdWl0ZRgEIAEoCUgAiAEBEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmRlbGV0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESEQoJaXNfYWN0aXZlGAggASgIEhcKD29yZ2FuaXphdGlvbl9pZBgJIAEoCRITCgZicmFuY2gYCiABKAlIAogBARIUCgxpc19zYW5kYm94ZWQYCyABKAgSIAoTcHJldmlvdXNfdmVyc2lvbl9pZBgMIAEoCUgDiAEBEi4KBXN0YXRlGA0gASgOMh8ubGlxdWlkbWV0YWwudjFhbHBoYTEuVW5pdFN0YXRlEhEKBGxvY2sYDiABKAlIBIgBAUIICgZfc3VpdGVCDQoLX2RlbGV0ZWRfYXRCCQoHX2JyYW5jaEIWChRfcHJldmlvdXNfdmVyc2lvbl9pZEIHCgVfbG9ja0ISChBfbmV4dF9wYWdlX3Rva2VuItIBChBCb290c3RyYXBSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEg0KBXRva2VuGAMgASgJEh0KFWNsb3VkZmxhcmVfYWNjb3VudF9pZBgEIAEoCRIfChdjbG91ZGZsYXJlX2JlYXJlcl90b2tlbhgFIAEoCRIjChtsaXF1aWRtZXRhbF9zZXJ2aWNlc19kb21haW4YBiABKAkSIAoYY3VzdG9tZXJfc2VydmljZXNfZG9tYWluGAcgASgJIhMKEUJvb3RzdHJhcFJlc3BvbnNlIiwKKkludGVybmFsQXBwbGljYXRpb25zUmVxdWVzdFBhZ2luYXRpb25Ub2tlbiLeAQoTVXBsb2FkQnVuZGxlUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYBCABKAkSEwoLYnVuZGxlX25hbWUYBSABKAkSPQoMYXJjaGl2ZV90eXBlGAYgASgOMicubGlxdWlkbWV0YWwudjFhbHBoYTEuQnVuZGxlQXJjaGl2ZVR5cGUSDwoHYXJjaGl2ZRgHIAEoDCIWChRVcGxvYWRCdW5kbGVSZXNwb25zZSJ7ChVRdWVyeVJlc291cmNlc1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSGAoQYXBwbGljYXRpb25fbmFtZRgDIAEoCRIeChZhcHBsaWNhdGlvbl92ZXJzaW9uX2lkGAQgASgJIvUHChZRdWVyeVJlc291cmNlc1Jlc3BvbnNlEkgKCXJlc291cmNlcxgBIAMoCzI1LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVzcG9uc2UuUmVzb3VyY2USHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQEa3gYKCFJlc291cmNlEhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAIgASgJEh4KFmFwcGxpY2F0aW9uX3ZlcnNpb25faWQYAyABKAkSEwoLcmVzb3VyY2VfaWQYBCABKAkSDAoEbmFtZRgFIAEoCRIMCgR0eXBlGAYgASgJElkKDXJlc291cmNlX3R5cGUYByABKA4yQi5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeVJlc291cmNlc1Jlc3BvbnNlLlJlc291cmNlLlJlc291cmNlVHlwZRIrCgphdHRyaWJ1dGVzGAggASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIuCgpjcmVhdGVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLlAwoMUmVzb3VyY2VUeXBlEh0KGVJFU09VUkNFX1RZUEVfVU5TUEVDSUZJRUQQABIgChxSRVNPVVJDRV9UWVBFX1FVRVVFX0NPTlNVTUVSEAESGAoUUkVTT1VSQ0VfVFlQRV9TQ1JJUFQQAhIUChBSRVNPVVJDRV9UWVBFX0QxEAMSGgoWUkVTT1VSQ0VfVFlQRV9EMV9RVUVSWRAEEhsKF1JFU09VUkNFX1RZUEVfVkVDVE9SSVpFEAUSGQoVUkVTT1VSQ0VfVFlQRV9FTlZfVkFSEAYSGAoUUkVTT1VSQ0VfVFlQRV9CVUNLRVQQBxIXChNSRVNPVVJDRV9UWVBFX1FVRVVFEAgSIAocUkVTT1VSQ0VfVFlQRV9TQ1JJUFRfQklORElORxAJEiUKIVJFU09VUkNFX1RZUEVfQlVDS0VUX05PVElGSUNBVElPThAKEhoKFlJFU09VUkNFX1RZUEVfTUVUQURBVEEQCxIfChtSRVNPVVJDRV9UWVBFX0NVU1RPTV9ET01BSU4QDBIXChNSRVNPVVJDRV9UWVBFX1JPVVRFEA0SHgoaUkVTT1VSQ0VfVFlQRV9TTUFSVF9CVUNLRVQQDhIeChpSRVNPVVJDRV9UWVBFX0FHRU5UX01FTU9SWRAPQhIKEF9uZXh0X3BhZ2VfdG9rZW4ipAQKDURlcGxveVJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSRQoMYXBwbGljYXRpb25zGAMgAygLMi8ubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdC5BcHBsaWNhdGlvbhouChNBcHBsaWNhdGlvbk1ldGFkYXRhEhcKD3J1bnRpbWVfdmVyc2lvbhgBIAEoCRrxAgoLQXBwbGljYXRpb24SDQoFc3VpdGUYASABKAkSEwoLYXBwbGljYXRpb24YAiABKAkSIAoTcHJldmlvdXNfdmVyc2lvbl9pZBgDIAEoCUgAiAEBEh8KEmN1cnJlbnRfdmVyc2lvbl9pZBgEIAEoCUgBiAEBEhMKBmJyYW5jaBgFIAEoCUgCiAEBEhAKCG1hbmlmZXN0GAYgASgJEkkKCG1ldGFkYXRhGAcgASgLMjcubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdC5BcHBsaWNhdGlvbk1ldGFkYXRhEg0KBWFtZW5kGAggASgIEhYKCWlzX2FjdGl2ZRgJIAEoCEgDiAEBEhEKBGxvY2sYCiABKAlIBIgBAUIWChRfcHJldmlvdXNfdmVyc2lvbl9pZEIVChNfY3VycmVudF92ZXJzaW9uX2lkQgkKB19icmFuY2hCDAoKX2lzX2FjdGl2ZUIHCgVfbG9jayLUAQoORGVwbG95UmVzcG9uc2USFwoPb3JnYW5pemF0aW9uX2lkGAEgASgJEkYKDGFwcGxpY2F0aW9ucxgCIAMoCzIwLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlc3BvbnNlLkFwcGxpY2F0aW9uGmEKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEg4KBmJyYW5jaBgDIAEoCRIMCgRsb2NrGAQgASgJIt4BCg5TZXRFbnZzUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRI2CgRlbnZzGAMgAygLMigubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0RW52c1JlcXVlc3QuRW52GmoKA0VudhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRILCgNrZXkYAyABKAkSDQoFdmFsdWUYBCABKAkSEQoJaXNfc2VjcmV0GAUgASgIIhEKD1NldEVudnNSZXNwb25zZSK8AQoOR2V0RW52c1JlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSNgoEZW52cxgDIAMoCzIoLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXF1ZXN0LkVudhpICgNFbnYSGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkSCwoDa2V5GAMgASgJIrYBCg9HZXRFbnZzUmVzcG9uc2USNwoEZW52cxgBIAMoCzIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXNwb25zZS5FbnYaagoDRW52EhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEgsKA2tleRgDIAEoCRINCgV2YWx1ZRgEIAEoCRIRCglpc19zZWNyZXQYBSABKAgiwAEKDlJlbGVhc2VSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEjgKBWxvY2tzGAMgAygLMikubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVsZWFzZVJlcXVlc3QuTG9jaxpKCgRMb2NrEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEgwKBGxvY2sYAyABKAkiEQoPUmVsZWFzZVJlc3BvbnNlIsMBCgxXYXRjaFJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSRAoMYXBwbGljYXRpb25zGAMgAygLMi4ubGlxdWlkbWV0YWwudjFhbHBoYTEuV2F0Y2hSZXF1ZXN0LkFwcGxpY2F0aW9uGkMKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJIpkBCg1XYXRjaFJlc3BvbnNlEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEhAKCGV2ZW50X2lkGAMgASgJEkAKCmV2ZW50X3R5cGUYBCABKA4yLC5saXF1aWRtZXRhbC52MWFscGhhMS5XYXRjaFJlc3BvbnNlRXZlbnRUeXBlIsUBCg1EZWxldGVSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkUKDGFwcGxpY2F0aW9ucxgDIAMoCzIvLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlbGV0ZVJlcXVlc3QuQXBwbGljYXRpb24aQwoLQXBwbGljYXRpb24SGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRIaChJjdXJyZW50X3ZlcnNpb25faWQYAiABKAkiEAoORGVsZXRlUmVzcG9uc2Ui3gEKEFNldEFjdGl2ZVJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSSAoMYXBwbGljYXRpb25zGAMgAygLMjIubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0QWN0aXZlUmVxdWVzdC5BcHBsaWNhdGlvbhpWCgtBcHBsaWNhdGlvbhIYChBhcHBsaWNhdGlvbl9uYW1lGAEgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgCIAEoCRIRCglpc19hY3RpdmUYAyABKAgiEwoRU2V0QWN0aXZlUmVzcG9uc2Ui4wEKEVNldFNhbmRib3hSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEkkKDGFwcGxpY2F0aW9ucxgDIAMoCzIzLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldFNhbmRib3hSZXF1ZXN0LkFwcGxpY2F0aW9uGlkKC0FwcGxpY2F0aW9uEhgKEGFwcGxpY2F0aW9uX25hbWUYASABKAkSGgoSY3VycmVudF92ZXJzaW9uX2lkGAIgASgJEhQKDGlzX3NhbmRib3hlZBgDIAEoCCIUChJTZXRTYW5kYm94UmVzcG9uc2UibwoNU3RhdHVzUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIYChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJEhoKEmN1cnJlbnRfdmVyc2lvbl9pZBgEIAEoCSLwAQoOU3RhdHVzUmVzcG9uc2USLgoFc3RhdGUYASABKA4yHy5saXF1aWRtZXRhbC52MWFscGhhMS5Vbml0U3RhdGUSPAoHbW9kdWxlcxgCIAMoCzIrLmxpcXVpZG1ldGFsLnYxYWxwaGExLlN0YXR1c1Jlc3BvbnNlLk1vZHVsZRIRCgRsb2NrGAMgASgJSACIAQEaVAoGTW9kdWxlEgwKBG5hbWUYASABKAkSLgoFc3RhdGUYAiABKA4yHy5saXF1aWRtZXRhbC52MWFscGhhMS5Vbml0U3RhdGUSDAoEdXJscxgDIAMoCUIHCgVfbG9jayLdAQoTUXVlcnlNb2R1bGVzUmVxdWVzdBIPCgd1c2VyX2lkGAEgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgCIAEoCRIdChBhcHBsaWNhdGlvbl9uYW1lGAMgASgJSACIAQESIwoWYXBwbGljYXRpb25fdmVyc2lvbl9pZBgEIAEoCUgBiAEBEhgKC21vZHVsZV90eXBlGAUgASgJSAKIAQFCEwoRX2FwcGxpY2F0aW9uX25hbWVCGQoXX2FwcGxpY2F0aW9uX3ZlcnNpb25faWRCDgoMX21vZHVsZV90eXBlIvINChRRdWVyeU1vZHVsZXNSZXNwb25zZRJCCgdtb2R1bGVzGAEgAygLMjEubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuTW9kdWxlEhwKD25leHRfcGFnZV90b2tlbhgCIAEoCUgAiAEBGiAKEVNtYXJ0QnVja2V0TW9kdWxlEgsKA3VybBgBIAEoCRobCgxCdWNrZXRNb2R1bGUSCwoDdXJsGAEgASgJGg8KDVNlcnZpY2VNb2R1bGUaEAoOT2JzZXJ2ZXJNb2R1bGUaDAoKVGFza01vZHVsZRoTChFTUUxEYXRhYmFzZU1vZHVsZRoTChFWZWN0b3JJbmRleE1vZHVsZRoNCgtRdWV1ZU1vZHVsZRoPCg1LVlN0b3JlTW9kdWxlGhMKEUFnZW50TWVtb3J5TW9kdWxlGsUICgZNb2R1bGUSFwoPb3JnYW5pemF0aW9uX2lkGAEgASgJEhgKEGFwcGxpY2F0aW9uX25hbWUYAiABKAkSHgoWYXBwbGljYXRpb25fdmVyc2lvbl9pZBgDIAEoCRIRCgltb2R1bGVfaWQYBCABKAkSDAoEbmFtZRgFIAEoCRIMCgR0eXBlGAYgASgJEkoKC21vZHVsZV90eXBlGAcgASgOMjUubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuTW9kdWxlVHlwZRI1Cgxjb252ZXJnZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESVAoMc21hcnRfYnVja2V0GAkgASgLMjwubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuU21hcnRCdWNrZXRNb2R1bGVIABJJCgZidWNrZXQYCiABKAsyNy5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeU1vZHVsZXNSZXNwb25zZS5CdWNrZXRNb2R1bGVIABJLCgdzZXJ2aWNlGAsgASgLMjgubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuU2VydmljZU1vZHVsZUgAEk0KCG9ic2VydmVyGAwgASgLMjkubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuT2JzZXJ2ZXJNb2R1bGVIABJFCgR0YXNrGA0gASgLMjUubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuVGFza01vZHVsZUgAElQKDHNxbF9kYXRhYmFzZRgOIAEoCzI8LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLlNRTERhdGFiYXNlTW9kdWxlSAASVAoMdmVjdG9yX2luZGV4GA8gASgLMjwubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuVmVjdG9ySW5kZXhNb2R1bGVIABJHCgVxdWV1ZRgQIAEoCzI2LmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlLlF1ZXVlTW9kdWxlSAASTAoIa3Zfc3RvcmUYESABKAsyOC5saXF1aWRtZXRhbC52MWFscGhhMS5RdWVyeU1vZHVsZXNSZXNwb25zZS5LVlN0b3JlTW9kdWxlSAASVAoMYWdlbnRfbWVtb3J5GBIgASgLMjwubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVzcG9uc2UuQWdlbnRNZW1vcnlNb2R1bGVIAEIICgZtb2R1bGVCDwoNX2NvbnZlcmdlZF9hdCLMAgoKTW9kdWxlVHlwZRIbChdNT0RVTEVfVFlQRV9VTlNQRUNJRklFRBAAEhwKGE1PRFVMRV9UWVBFX1NNQVJUX0JVQ0tFVBABEhYKEk1PRFVMRV9UWVBFX0JVQ0tFVBACEhcKE01PRFVMRV9UWVBFX1NFUlZJQ0UQAxIYChRNT0RVTEVfVFlQRV9PQlNFUlZFUhAEEhQKEE1PRFVMRV9UWVBFX1RBU0sQBRIcChhNT0RVTEVfVFlQRV9TUUxfREFUQUJBU0UQBhIcChhNT0RVTEVfVFlQRV9WRUNUT1JfSU5ERVgQBxIXChNNT0RVTEVfVFlQRV9FTlZfVkFSEAgSFQoRTU9EVUxFX1RZUEVfUVVFVUUQCRIYChRNT0RVTEVfVFlQRV9LVl9TVE9SRRAKEhwKGE1PRFVMRV9UWVBFX0FHRU5UX01FTU9SWRALQhIKEF9uZXh0X3BhZ2VfdG9rZW4ikAEKJlJlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWRSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEjwKD2J1Y2tldF9sb2NhdGlvbhgDIAEoCzIjLmxpcXVpZG1ldGFsLnYxYWxwaGExLkJ1Y2tldExvY2F0b3IiZQomUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvblJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSEQoJbW9kdWxlX2lkGAMgASgJIl8KJ1Jlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWRSZXNwb25zZRI0CgZidWNrZXQYASABKAsyJC5saXF1aWRtZXRhbC52MWFscGhhMS5CdWNrZXRSZXNwb25zZSJfCidSZXNvbHZlTW9kdWxlSWRUb0J1Y2tldExvY2F0aW9uUmVzcG9uc2USNAoGYnVja2V0GAEgASgLMiQubGlxdWlkbWV0YWwudjFhbHBoYTEuQnVja2V0UmVzcG9uc2UioAEKK1Jlc29sdmVBZ2VudE1lbW9yeUxvY2F0aW9uVG9Nb2R1bGVJZFJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSRwoVYWdlbnRfbWVtb3J5X2xvY2F0aW9uGAMgASgLMigubGlxdWlkbWV0YWwudjFhbHBoYTEuQWdlbnRNZW1vcnlMb2NhdG9yImoKK1Jlc29sdmVNb2R1bGVJZFRvQWdlbnRNZW1vcnlMb2NhdGlvblJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSEQoJbW9kdWxlX2lkGAMgASgJIm8KLFJlc29sdmVBZ2VudE1lbW9yeUxvY2F0aW9uVG9Nb2R1bGVJZFJlc3BvbnNlEj8KDGFnZW50X21lbW9yeRgBIAEoCzIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLkFnZW50TWVtb3J5UmVzcG9uc2UibwosUmVzb2x2ZU1vZHVsZUlkVG9BZ2VudE1lbW9yeUxvY2F0aW9uUmVzcG9uc2USPwoMYWdlbnRfbWVtb3J5GAEgASgLMikubGlxdWlkbWV0YWwudjFhbHBoYTEuQWdlbnRNZW1vcnlSZXNwb25zZSrSAQoJVW5pdFN0YXRlEhoKFlVOSVRfU1RBVEVfVU5TUEVDSUZJRUQQABIWChJVTklUX1NUQVRFX1BFTkRJTkcQARIXChNVTklUX1NUQVRFX1NUQVJUSU5HEAISFgoSVU5JVF9TVEFURV9SVU5OSU5HEAMSFwoTVU5JVF9TVEFURV9TVE9QUElORxAEEhYKElVOSVRfU1RBVEVfU1RPUFBFRBAFEhcKE1VOSVRfU1RBVEVfREVMRVRJTkcQBhIWChJVTklUX1NUQVRFX0RFTEVURUQQBypVChFCdW5kbGVBcmNoaXZlVHlwZRIjCh9CVU5ETEVfQVJDSElWRV9UWVBFX1VOU1BFQ0lGSUVEEAASGwoXQlVORExFX0FSQ0hJVkVfVFlQRV9aSVAQASqSAQoWV2F0Y2hSZXNwb25zZUV2ZW50VHlwZRIpCiVXQVRDSF9SRVNQT05TRV9FVkVOVF9UWVBFX1VOU1BFQ0lGSUVEEAASJQohV0FUQ0hfUkVTUE9OU0VfRVZFTlRfVFlQRV9NRVNTQUdFEAESJgoiV0FUQ0hfUkVTUE9OU0VfRVZFTlRfVFlQRV9DT01QTEVURRACMswPCg5DYXRhbG9nU2VydmljZRJrCg5RdWVyeVJlc291cmNlcxIrLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVxdWVzdBosLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5UmVzb3VyY2VzUmVzcG9uc2USZQoMUXVlcnlNb2R1bGVzEikubGlxdWlkbWV0YWwudjFhbHBoYTEuUXVlcnlNb2R1bGVzUmVxdWVzdBoqLmxpcXVpZG1ldGFsLnYxYWxwaGExLlF1ZXJ5TW9kdWxlc1Jlc3BvbnNlElwKCUJvb3RzdHJhcBImLmxpcXVpZG1ldGFsLnYxYWxwaGExLkJvb3RzdHJhcFJlcXVlc3QaJy5saXF1aWRtZXRhbC52MWFscGhhMS5Cb290c3RyYXBSZXNwb25zZRJlCgxBcHBsaWNhdGlvbnMSKS5saXF1aWRtZXRhbC52MWFscGhhMS5BcHBsaWNhdGlvbnNSZXF1ZXN0GioubGlxdWlkbWV0YWwudjFhbHBoYTEuQXBwbGljYXRpb25zUmVzcG9uc2USUwoGRGVwbG95EiMubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVwbG95UmVxdWVzdBokLmxpcXVpZG1ldGFsLnYxYWxwaGExLkRlcGxveVJlc3BvbnNlEmUKDFVwbG9hZEJ1bmRsZRIpLmxpcXVpZG1ldGFsLnYxYWxwaGExLlVwbG9hZEJ1bmRsZVJlcXVlc3QaKi5saXF1aWRtZXRhbC52MWFscGhhMS5VcGxvYWRCdW5kbGVSZXNwb25zZRJWCgdTZXRFbnZzEiQubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0RW52c1JlcXVlc3QaJS5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRFbnZzUmVzcG9uc2USVgoHR2V0RW52cxIkLmxpcXVpZG1ldGFsLnYxYWxwaGExLkdldEVudnNSZXF1ZXN0GiUubGlxdWlkbWV0YWwudjFhbHBoYTEuR2V0RW52c1Jlc3BvbnNlElYKB1JlbGVhc2USJC5saXF1aWRtZXRhbC52MWFscGhhMS5SZWxlYXNlUmVxdWVzdBolLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlbGVhc2VSZXNwb25zZRJSCgVXYXRjaBIiLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVxdWVzdBojLmxpcXVpZG1ldGFsLnYxYWxwaGExLldhdGNoUmVzcG9uc2UwARJTCgZEZWxldGUSIy5saXF1aWRtZXRhbC52MWFscGhhMS5EZWxldGVSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuRGVsZXRlUmVzcG9uc2USXAoJU2V0QWN0aXZlEiYubGlxdWlkbWV0YWwudjFhbHBoYTEuU2V0QWN0aXZlUmVxdWVzdBonLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldEFjdGl2ZVJlc3BvbnNlEl8KClNldFNhbmRib3gSJy5saXF1aWRtZXRhbC52MWFscGhhMS5TZXRTYW5kYm94UmVxdWVzdBooLmxpcXVpZG1ldGFsLnYxYWxwaGExLlNldFNhbmRib3hSZXNwb25zZRJTCgZTdGF0dXMSIy5saXF1aWRtZXRhbC52MWFscGhhMS5TdGF0dXNSZXF1ZXN0GiQubGlxdWlkbWV0YWwudjFhbHBoYTEuU3RhdHVzUmVzcG9uc2USngEKH1Jlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWQSPC5saXF1aWRtZXRhbC52MWFscGhhMS5SZXNvbHZlQnVja2V0TG9jYXRpb25Ub01vZHVsZUlkUmVxdWVzdBo9LmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVCdWNrZXRMb2NhdGlvblRvTW9kdWxlSWRSZXNwb25zZRKeAQofUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvbhI8LmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVNb2R1bGVJZFRvQnVja2V0TG9jYXRpb25SZXF1ZXN0Gj0ubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVzb2x2ZU1vZHVsZUlkVG9CdWNrZXRMb2NhdGlvblJlc3BvbnNlEq0BCiRSZXNvbHZlQWdlbnRNZW1vcnlMb2NhdGlvblRvTW9kdWxlSWQSQS5saXF1aWRtZXRhbC52MWFscGhhMS5SZXNvbHZlQWdlbnRNZW1vcnlMb2NhdGlvblRvTW9kdWxlSWRSZXF1ZXN0GkIubGlxdWlkbWV0YWwudjFhbHBoYTEuUmVzb2x2ZUFnZW50TWVtb3J5TG9jYXRpb25Ub01vZHVsZUlkUmVzcG9uc2USrQEKJFJlc29sdmVNb2R1bGVJZFRvQWdlbnRNZW1vcnlMb2NhdGlvbhJBLmxpcXVpZG1ldGFsLnYxYWxwaGExLlJlc29sdmVNb2R1bGVJZFRvQWdlbnRNZW1vcnlMb2NhdGlvblJlcXVlc3QaQi5saXF1aWRtZXRhbC52MWFscGhhMS5SZXNvbHZlTW9kdWxlSWRUb0FnZW50TWVtb3J5TG9jYXRpb25SZXNwb25zZULnAQoYY29tLmxpcXVpZG1ldGFsLnYxYWxwaGExQgxDYXRhbG9nUHJvdG9QAVpMZ2l0aHViLmNvbS9saXF1aWRtZXRhbC1haS9wcm90b2dlbjIvbGlxdWlkbWV0YWwvdjFhbHBoYTE7bGlxdWlkbWV0YWx2MWFscGhhMaICA0xYWKoCFExpcXVpZG1ldGFsLlYxYWxwaGExygIUTGlxdWlkbWV0YWxcVjFhbHBoYTHiAiBMaXF1aWRtZXRhbFxWMWFscGhhMVxHUEJNZXRhZGF0YeoCFUxpcXVpZG1ldGFsOjpWMWFscGhhMWIGcHJvdG8z", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_liquidmetal_v1alpha1_agent_memory_name, file_liquidmetal_v1alpha1_bucket_name]);
20
20
 
21
21
  /**
22
22
  * @generated from message liquidmetal.v1alpha1.ApplicationsRequest
@@ -0,0 +1,48 @@
1
+ // @generated by protoc-gen-connect-es v1.4.0 with parameter "target=ts,import_extension=.js"
2
+ // @generated from file liquidmetal/v1alpha1/events.proto (package liquidmetal.v1alpha1, syntax proto3)
3
+ /* eslint-disable */
4
+ // @ts-nocheck
5
+
6
+ import { RecordEventRequest, RecordEventResponse, TailEventsRequest, TailEventsResponse } from "./events_pb.js";
7
+ import { MethodKind } from "@bufbuild/protobuf";
8
+
9
+ /**
10
+ * EventIngressService receives and processes events from various sources
11
+ *
12
+ * @generated from service liquidmetal.v1alpha1.EventIngressService
13
+ */
14
+ export const EventIngressService = {
15
+ typeName: "liquidmetal.v1alpha1.EventIngressService",
16
+ methods: {
17
+ /**
18
+ * @generated from rpc liquidmetal.v1alpha1.EventIngressService.RecordEvent
19
+ */
20
+ recordEvent: {
21
+ name: "RecordEvent",
22
+ I: RecordEventRequest,
23
+ O: RecordEventResponse,
24
+ kind: MethodKind.Unary,
25
+ },
26
+ }
27
+ } as const;
28
+
29
+ /**
30
+ * EventStreamService provides a stream of events to clients
31
+ *
32
+ * @generated from service liquidmetal.v1alpha1.EventStreamService
33
+ */
34
+ export const EventStreamService = {
35
+ typeName: "liquidmetal.v1alpha1.EventStreamService",
36
+ methods: {
37
+ /**
38
+ * @generated from rpc liquidmetal.v1alpha1.EventStreamService.TailEvents
39
+ */
40
+ tailEvents: {
41
+ name: "TailEvents",
42
+ I: TailEventsRequest,
43
+ O: TailEventsResponse,
44
+ kind: MethodKind.ServerStreaming,
45
+ },
46
+ }
47
+ } as const;
48
+