wyrm-mcp 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +667 -0
- package/README.md +384 -0
- package/dist/analytics.d.ts +100 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +368 -0
- package/dist/analytics.js.map +1 -0
- package/dist/auto-orchestrator.d.ts +118 -0
- package/dist/auto-orchestrator.d.ts.map +1 -0
- package/dist/auto-orchestrator.js +325 -0
- package/dist/auto-orchestrator.js.map +1 -0
- package/dist/autoconfig.d.ts +89 -0
- package/dist/autoconfig.d.ts.map +1 -0
- package/dist/autoconfig.js +576 -0
- package/dist/autoconfig.js.map +1 -0
- package/dist/cli.d.ts +148 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +281 -0
- package/dist/cli.js.map +1 -0
- package/dist/cloud-backup.d.ts +100 -0
- package/dist/cloud-backup.d.ts.map +1 -0
- package/dist/cloud-backup.js +545 -0
- package/dist/cloud-backup.js.map +1 -0
- package/dist/crypto.d.ts +72 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +164 -0
- package/dist/crypto.js.map +1 -0
- package/dist/database.d.ts +218 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +1058 -0
- package/dist/database.js.map +1 -0
- package/dist/http-auth.d.ts +68 -0
- package/dist/http-auth.d.ts.map +1 -0
- package/dist/http-auth.js +296 -0
- package/dist/http-auth.js.map +1 -0
- package/dist/http-fast.d.ts +13 -0
- package/dist/http-fast.d.ts.map +1 -0
- package/dist/http-fast.js +325 -0
- package/dist/http-fast.js.map +1 -0
- package/dist/http-server.d.ts +12 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +383 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1695 -0
- package/dist/index.js.map +1 -0
- package/dist/license.d.ts +177 -0
- package/dist/license.d.ts.map +1 -0
- package/dist/license.js +405 -0
- package/dist/license.js.map +1 -0
- package/dist/logger.d.ts +76 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +195 -0
- package/dist/logger.js.map +1 -0
- package/dist/performance.d.ts +114 -0
- package/dist/performance.d.ts.map +1 -0
- package/dist/performance.js +228 -0
- package/dist/performance.js.map +1 -0
- package/dist/resilience.d.ts +146 -0
- package/dist/resilience.d.ts.map +1 -0
- package/dist/resilience.js +563 -0
- package/dist/resilience.js.map +1 -0
- package/dist/security.d.ts +68 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +215 -0
- package/dist/security.js.map +1 -0
- package/dist/setup.d.ts +21 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +261 -0
- package/dist/setup.js.map +1 -0
- package/dist/summarizer.d.ts +30 -0
- package/dist/summarizer.d.ts.map +1 -0
- package/dist/summarizer.js +139 -0
- package/dist/summarizer.js.map +1 -0
- package/dist/sync.d.ts +39 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +356 -0
- package/dist/sync.js.map +1 -0
- package/dist/types.d.ts +267 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +30 -0
- package/dist/types.js.map +1 -0
- package/dist/vectors.d.ts +103 -0
- package/dist/vectors.d.ts.map +1 -0
- package/dist/vectors.js +311 -0
- package/dist/vectors.js.map +1 -0
- package/package.json +73 -0
package/dist/crypto.js
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wyrm Encryption Module
|
|
3
|
+
* AES-256-GCM encryption for sensitive memory data
|
|
4
|
+
*
|
|
5
|
+
* @copyright 2026 Ghost Protocol (Pvt) Ltd. All Rights Reserved.
|
|
6
|
+
* @license Proprietary - See LICENSE file for details.
|
|
7
|
+
* @module crypto
|
|
8
|
+
* @version 3.0.0
|
|
9
|
+
*/
|
|
10
|
+
import { createCipheriv, createDecipheriv, randomBytes, scryptSync, createHash } from 'crypto';
|
|
11
|
+
const ALGORITHM = 'aes-256-gcm';
|
|
12
|
+
const IV_LENGTH = 16;
|
|
13
|
+
const SALT_LENGTH = 32;
|
|
14
|
+
const TAG_LENGTH = 16;
|
|
15
|
+
const KEY_LENGTH = 32;
|
|
16
|
+
/**
|
|
17
|
+
* Wyrm Crypto - Handles encryption/decryption of sensitive data
|
|
18
|
+
*/
|
|
19
|
+
export class WyrmCrypto {
|
|
20
|
+
masterKey = null;
|
|
21
|
+
config;
|
|
22
|
+
constructor(config) {
|
|
23
|
+
this.config = {
|
|
24
|
+
enabled: config?.enabled ?? false,
|
|
25
|
+
keyDerivation: config?.keyDerivation ?? 'scrypt',
|
|
26
|
+
iterations: config?.iterations ?? 100000,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Initialize crypto with a master password
|
|
31
|
+
*/
|
|
32
|
+
initialize(password) {
|
|
33
|
+
if (!password || password.length < 8) {
|
|
34
|
+
throw new Error('Password must be at least 8 characters');
|
|
35
|
+
}
|
|
36
|
+
// Create a consistent master key from password
|
|
37
|
+
const salt = createHash('sha256').update('wyrm-master-salt').digest();
|
|
38
|
+
this.masterKey = scryptSync(password, salt, KEY_LENGTH);
|
|
39
|
+
this.config.enabled = true;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check if encryption is enabled and configured
|
|
43
|
+
*/
|
|
44
|
+
isEnabled() {
|
|
45
|
+
return this.config.enabled && this.masterKey !== null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Derive a unique key for each piece of data
|
|
49
|
+
*/
|
|
50
|
+
deriveKey(salt) {
|
|
51
|
+
if (!this.masterKey) {
|
|
52
|
+
throw new Error('Crypto not initialized. Call initialize() with a password first.');
|
|
53
|
+
}
|
|
54
|
+
return scryptSync(this.masterKey, salt, KEY_LENGTH);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Encrypt a string value
|
|
58
|
+
*/
|
|
59
|
+
encrypt(plaintext) {
|
|
60
|
+
if (!this.isEnabled()) {
|
|
61
|
+
throw new Error('Encryption not enabled');
|
|
62
|
+
}
|
|
63
|
+
const salt = randomBytes(SALT_LENGTH);
|
|
64
|
+
const iv = randomBytes(IV_LENGTH);
|
|
65
|
+
const key = this.deriveKey(salt);
|
|
66
|
+
const cipher = createCipheriv(ALGORITHM, key, iv);
|
|
67
|
+
let encrypted = cipher.update(plaintext, 'utf8', 'hex');
|
|
68
|
+
encrypted += cipher.final('hex');
|
|
69
|
+
const tag = cipher.getAuthTag();
|
|
70
|
+
return {
|
|
71
|
+
iv: iv.toString('hex'),
|
|
72
|
+
salt: salt.toString('hex'),
|
|
73
|
+
tag: tag.toString('hex'),
|
|
74
|
+
data: encrypted,
|
|
75
|
+
version: 1,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Decrypt an encrypted value
|
|
80
|
+
*/
|
|
81
|
+
decrypt(encrypted) {
|
|
82
|
+
if (!this.isEnabled()) {
|
|
83
|
+
throw new Error('Encryption not enabled');
|
|
84
|
+
}
|
|
85
|
+
const salt = Buffer.from(encrypted.salt, 'hex');
|
|
86
|
+
const iv = Buffer.from(encrypted.iv, 'hex');
|
|
87
|
+
const tag = Buffer.from(encrypted.tag, 'hex');
|
|
88
|
+
const key = this.deriveKey(salt);
|
|
89
|
+
const decipher = createDecipheriv(ALGORITHM, key, iv);
|
|
90
|
+
decipher.setAuthTag(tag);
|
|
91
|
+
let decrypted = decipher.update(encrypted.data, 'hex', 'utf8');
|
|
92
|
+
decrypted += decipher.final('utf8');
|
|
93
|
+
return decrypted;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Encrypt if enabled, otherwise return plaintext
|
|
97
|
+
*/
|
|
98
|
+
maybeEncrypt(value) {
|
|
99
|
+
if (!this.isEnabled()) {
|
|
100
|
+
return value;
|
|
101
|
+
}
|
|
102
|
+
const encrypted = this.encrypt(value);
|
|
103
|
+
return `ENC:${JSON.stringify(encrypted)}`;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Decrypt if encrypted, otherwise return as-is
|
|
107
|
+
*/
|
|
108
|
+
maybeDecrypt(value) {
|
|
109
|
+
if (!value.startsWith('ENC:')) {
|
|
110
|
+
return value;
|
|
111
|
+
}
|
|
112
|
+
if (!this.isEnabled()) {
|
|
113
|
+
// Can't decrypt without key
|
|
114
|
+
return '[ENCRYPTED - KEY REQUIRED]';
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
const encrypted = JSON.parse(value.slice(4));
|
|
118
|
+
return this.decrypt(encrypted);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return '[DECRYPT FAILED]';
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Generate a secure random key for API tokens, etc.
|
|
126
|
+
*/
|
|
127
|
+
static generateSecureToken(length = 32) {
|
|
128
|
+
return randomBytes(length).toString('hex');
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Hash a value for comparison (one-way)
|
|
132
|
+
*/
|
|
133
|
+
static hash(value, algorithm = 'sha256') {
|
|
134
|
+
return createHash(algorithm).update(value).digest('hex');
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Verify a hash
|
|
138
|
+
*/
|
|
139
|
+
static verifyHash(value, hash, algorithm = 'sha256') {
|
|
140
|
+
const computed = WyrmCrypto.hash(value, algorithm);
|
|
141
|
+
// Constant-time comparison
|
|
142
|
+
if (computed.length !== hash.length)
|
|
143
|
+
return false;
|
|
144
|
+
let result = 0;
|
|
145
|
+
for (let i = 0; i < computed.length; i++) {
|
|
146
|
+
result |= computed.charCodeAt(i) ^ hash.charCodeAt(i);
|
|
147
|
+
}
|
|
148
|
+
return result === 0;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Singleton instance
|
|
152
|
+
let cryptoInstance = null;
|
|
153
|
+
export function getCrypto() {
|
|
154
|
+
if (!cryptoInstance) {
|
|
155
|
+
cryptoInstance = new WyrmCrypto();
|
|
156
|
+
}
|
|
157
|
+
return cryptoInstance;
|
|
158
|
+
}
|
|
159
|
+
export function initializeCrypto(password) {
|
|
160
|
+
cryptoInstance = new WyrmCrypto({ enabled: true });
|
|
161
|
+
cryptoInstance.initialize(password);
|
|
162
|
+
return cryptoInstance;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wyrm Database - SQLite storage for infinite memory with data lake support
|
|
3
|
+
*
|
|
4
|
+
* @copyright 2026 Ghost Protocol (Pvt) Ltd. All Rights Reserved.
|
|
5
|
+
* @license Proprietary - See LICENSE file for details.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Auto-discovers projects in configured directories
|
|
9
|
+
* - Handles large datasets with pagination and streaming
|
|
10
|
+
* - Write-Ahead Logging (WAL) for concurrent performance
|
|
11
|
+
* - Full-text search for fast context retrieval
|
|
12
|
+
* - Batch operations for bulk imports
|
|
13
|
+
* - Resilient operations with automatic recovery
|
|
14
|
+
*/
|
|
15
|
+
import Database from 'better-sqlite3';
|
|
16
|
+
export interface Project {
|
|
17
|
+
id: number;
|
|
18
|
+
name: string;
|
|
19
|
+
path: string;
|
|
20
|
+
repo?: string;
|
|
21
|
+
stack?: string;
|
|
22
|
+
last_commit?: string;
|
|
23
|
+
branch?: string;
|
|
24
|
+
created_at: string;
|
|
25
|
+
updated_at: string;
|
|
26
|
+
}
|
|
27
|
+
export interface Session {
|
|
28
|
+
id: number;
|
|
29
|
+
project_id: number;
|
|
30
|
+
date: string;
|
|
31
|
+
objectives: string;
|
|
32
|
+
completed: string;
|
|
33
|
+
issues: string;
|
|
34
|
+
commits: string;
|
|
35
|
+
files_changed: string;
|
|
36
|
+
notes: string;
|
|
37
|
+
summary?: string;
|
|
38
|
+
tokens_estimate?: number;
|
|
39
|
+
is_archived: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface Quest {
|
|
42
|
+
id: number;
|
|
43
|
+
project_id: number;
|
|
44
|
+
title: string;
|
|
45
|
+
description: string;
|
|
46
|
+
priority: 'critical' | 'high' | 'medium' | 'low';
|
|
47
|
+
status: 'pending' | 'in_progress' | 'completed' | 'abandoned';
|
|
48
|
+
tags?: string;
|
|
49
|
+
created_at: string;
|
|
50
|
+
completed_at?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface Context {
|
|
53
|
+
id: number;
|
|
54
|
+
project_id: number;
|
|
55
|
+
key: string;
|
|
56
|
+
value: string;
|
|
57
|
+
updated_at: string;
|
|
58
|
+
}
|
|
59
|
+
export interface DataPoint {
|
|
60
|
+
id: number;
|
|
61
|
+
project_id: number;
|
|
62
|
+
category: string;
|
|
63
|
+
key: string;
|
|
64
|
+
value: string;
|
|
65
|
+
metadata?: string;
|
|
66
|
+
created_at: string;
|
|
67
|
+
}
|
|
68
|
+
export interface WatchDir {
|
|
69
|
+
id: number;
|
|
70
|
+
path: string;
|
|
71
|
+
recursive: boolean;
|
|
72
|
+
last_scan: string;
|
|
73
|
+
}
|
|
74
|
+
export interface Skill {
|
|
75
|
+
id: number;
|
|
76
|
+
name: string;
|
|
77
|
+
description: string;
|
|
78
|
+
skill_path: string;
|
|
79
|
+
category?: string;
|
|
80
|
+
author?: string;
|
|
81
|
+
version?: string;
|
|
82
|
+
tags?: string;
|
|
83
|
+
is_active: boolean;
|
|
84
|
+
usage_count: number;
|
|
85
|
+
last_used?: string;
|
|
86
|
+
created_at: string;
|
|
87
|
+
updated_at: string;
|
|
88
|
+
}
|
|
89
|
+
export declare class WyrmDB {
|
|
90
|
+
private db;
|
|
91
|
+
private readonly BATCH_SIZE;
|
|
92
|
+
private resilience;
|
|
93
|
+
private logger;
|
|
94
|
+
private dbPath;
|
|
95
|
+
constructor(dbPath?: string);
|
|
96
|
+
/** Expose the raw database instance for analytics and other modules */
|
|
97
|
+
getDatabase(): Database.Database;
|
|
98
|
+
/** Get the database file path */
|
|
99
|
+
getDatabasePath(): string;
|
|
100
|
+
/**
|
|
101
|
+
* Initialize database with retry logic for handling corruption/locks
|
|
102
|
+
*/
|
|
103
|
+
private initializeDatabase;
|
|
104
|
+
/**
|
|
105
|
+
* Recover incomplete operations from previous session
|
|
106
|
+
*/
|
|
107
|
+
private recoverIncompleteOperations;
|
|
108
|
+
private init;
|
|
109
|
+
addWatchDir(path: string, recursive?: boolean): WatchDir;
|
|
110
|
+
getWatchDirs(): WatchDir[];
|
|
111
|
+
removeWatchDir(path: string): void;
|
|
112
|
+
scanForProjects(rootPath: string, recursive?: boolean): Project[];
|
|
113
|
+
scanAllWatchDirs(): Project[];
|
|
114
|
+
private registerProjectFromPath;
|
|
115
|
+
registerProject(name: string, path: string, repo?: string, stack?: string, lastCommit?: string, branch?: string): Project;
|
|
116
|
+
getProject(path: string): Project | undefined;
|
|
117
|
+
getProjectById(id: number): Project | undefined;
|
|
118
|
+
getProjectByName(name: string): Project | undefined;
|
|
119
|
+
getAllProjects(limit?: number, offset?: number): Project[];
|
|
120
|
+
searchProjects(query: string): Project[];
|
|
121
|
+
createSession(projectId: number, data: Partial<Session>): Session;
|
|
122
|
+
updateSession(id: number, data: Partial<Session>): Session;
|
|
123
|
+
getSession(id: number): Session | undefined;
|
|
124
|
+
getRecentSessions(projectId: number, limit?: number): Session[];
|
|
125
|
+
getTodaySession(projectId: number): Session | undefined;
|
|
126
|
+
searchSessions(query: string, projectId?: number): Session[];
|
|
127
|
+
archiveOldSessions(projectId: number, keepRecent?: number): number;
|
|
128
|
+
getSessionTokenUsage(projectId: number): number;
|
|
129
|
+
addQuest(projectId: number, title: string, description?: string, priority?: Quest['priority'], tags?: string): Quest;
|
|
130
|
+
updateQuest(id: number, status: Quest['status']): Quest;
|
|
131
|
+
getPendingQuests(projectId: number): Quest[];
|
|
132
|
+
getAllPendingQuests(): Quest[];
|
|
133
|
+
searchQuests(query: string): Quest[];
|
|
134
|
+
getRecentlyCompleted(projectId: number, limit?: number): Quest[];
|
|
135
|
+
setContext(projectId: number, key: string, value: string): void;
|
|
136
|
+
getContext(projectId: number, key: string): string | undefined;
|
|
137
|
+
getAllContext(projectId: number): Record<string, string>;
|
|
138
|
+
setGlobalContext(key: string, value: string): void;
|
|
139
|
+
getGlobalContext(key: string): string | undefined;
|
|
140
|
+
getAllGlobalContext(): Record<string, string>;
|
|
141
|
+
registerSkill(name: string, description: string, skillPath: string, category?: string, author?: string, version?: string, tags?: string): Skill;
|
|
142
|
+
getSkill(name: string): Skill | undefined;
|
|
143
|
+
listSkills(active?: boolean, category?: string, search?: string): Skill[];
|
|
144
|
+
searchSkills(query: string, limit?: number): Skill[];
|
|
145
|
+
updateSkill(name: string, updates: Partial<Skill>): Skill | undefined;
|
|
146
|
+
deleteSkill(name: string): boolean;
|
|
147
|
+
deactivateSkill(name: string): Skill | undefined;
|
|
148
|
+
activateSkill(name: string): Skill | undefined;
|
|
149
|
+
getSkillStats(): {
|
|
150
|
+
total: number;
|
|
151
|
+
active: number;
|
|
152
|
+
byCategory: Record<string, number>;
|
|
153
|
+
};
|
|
154
|
+
insertData(projectId: number, category: string, key: string, value: string, metadata?: Record<string, unknown>): DataPoint;
|
|
155
|
+
/**
|
|
156
|
+
* Batch insert with resilience - uses checkpointing for large batches
|
|
157
|
+
*/
|
|
158
|
+
insertDataBatch(data: Array<{
|
|
159
|
+
projectId: number;
|
|
160
|
+
category: string;
|
|
161
|
+
key: string;
|
|
162
|
+
value: string;
|
|
163
|
+
metadata?: Record<string, unknown>;
|
|
164
|
+
}>): number;
|
|
165
|
+
queryData(projectId: number, category?: string, limit?: number, offset?: number): DataPoint[];
|
|
166
|
+
searchData(query: string, projectId?: number): DataPoint[];
|
|
167
|
+
getDataCategories(projectId: number): {
|
|
168
|
+
category: string;
|
|
169
|
+
count: number;
|
|
170
|
+
}[];
|
|
171
|
+
deleteDataCategory(projectId: number, category: string): number;
|
|
172
|
+
streamSessions(projectId: number): Generator<Session>;
|
|
173
|
+
streamData(projectId: number, category?: string): Generator<DataPoint>;
|
|
174
|
+
getStats(): {
|
|
175
|
+
projects: number;
|
|
176
|
+
sessions: number;
|
|
177
|
+
quests: number;
|
|
178
|
+
dataPoints: number;
|
|
179
|
+
totalTokens: number;
|
|
180
|
+
dbSize: string;
|
|
181
|
+
};
|
|
182
|
+
getProjectStats(projectId: number): {
|
|
183
|
+
sessions: number;
|
|
184
|
+
quests: {
|
|
185
|
+
pending: number;
|
|
186
|
+
completed: number;
|
|
187
|
+
};
|
|
188
|
+
dataPoints: number;
|
|
189
|
+
tokens: number;
|
|
190
|
+
};
|
|
191
|
+
private estimateTokens;
|
|
192
|
+
vacuum(): void;
|
|
193
|
+
checkpoint(): void;
|
|
194
|
+
/**
|
|
195
|
+
* Get resilience status for monitoring
|
|
196
|
+
*/
|
|
197
|
+
getResilienceStatus(): {
|
|
198
|
+
circuitState: string;
|
|
199
|
+
failures: number;
|
|
200
|
+
incompleteOps: number;
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* Reset circuit breaker (manual recovery)
|
|
204
|
+
*/
|
|
205
|
+
resetCircuitBreaker(): void;
|
|
206
|
+
/**
|
|
207
|
+
* Safe close with WAL checkpoint and cleanup
|
|
208
|
+
*/
|
|
209
|
+
close(): void;
|
|
210
|
+
/**
|
|
211
|
+
* Check database integrity
|
|
212
|
+
*/
|
|
213
|
+
checkIntegrity(): {
|
|
214
|
+
ok: boolean;
|
|
215
|
+
issues: string[];
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|