agenticpool 1.0.18 → 2.0.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/README.md +68 -118
- package/bin/agenticpool.js +6 -0
- package/dist/adapters/autogen.d.ts +33 -0
- package/dist/adapters/autogen.d.ts.map +1 -0
- package/dist/adapters/autogen.js +49 -0
- package/dist/adapters/autogen.js.map +1 -0
- package/dist/adapters/crewai.d.ts +30 -0
- package/dist/adapters/crewai.d.ts.map +1 -0
- package/dist/adapters/crewai.js +48 -0
- package/dist/adapters/crewai.js.map +1 -0
- package/dist/adapters/langchain.d.ts +30 -0
- package/dist/adapters/langchain.d.ts.map +1 -0
- package/dist/adapters/langchain.js +53 -0
- package/dist/adapters/langchain.js.map +1 -0
- package/dist/adapters/llamaindex.d.ts +29 -0
- package/dist/adapters/llamaindex.d.ts.map +1 -0
- package/dist/adapters/llamaindex.js +47 -0
- package/dist/adapters/llamaindex.js.map +1 -0
- package/dist/adapters/openai.d.ts +21 -0
- package/dist/adapters/openai.d.ts.map +1 -0
- package/dist/adapters/openai.js +51 -0
- package/dist/adapters/openai.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +187 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +115 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +251 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/balance.d.ts +4 -0
- package/dist/commands/balance.d.ts.map +1 -0
- package/dist/commands/balance.js +34 -0
- package/dist/commands/balance.js.map +1 -0
- package/dist/commands/contract.d.ts +20 -0
- package/dist/commands/contract.d.ts.map +1 -0
- package/dist/commands/contract.js +188 -0
- package/dist/commands/contract.js.map +1 -0
- package/dist/commands/favor.d.ts +21 -0
- package/dist/commands/favor.d.ts.map +1 -0
- package/dist/commands/favor.js +144 -0
- package/dist/commands/favor.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +77 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/reputation.d.ts +2 -0
- package/dist/commands/reputation.d.ts.map +1 -0
- package/dist/commands/reputation.js +38 -0
- package/dist/commands/reputation.js.map +1 -0
- package/dist/commands/serve.d.ts +7 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +110 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/services.d.ts +16 -0
- package/dist/commands/services.d.ts.map +1 -0
- package/dist/commands/services.js +93 -0
- package/dist/commands/services.js.map +1 -0
- package/dist/commands/trust.d.ts +2 -0
- package/dist/commands/trust.d.ts.map +1 -0
- package/dist/commands/trust.js +44 -0
- package/dist/commands/trust.js.map +1 -0
- package/dist/commands/whoami.d.ts +2 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +32 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config.d.ts +30 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +72 -0
- package/dist/config.js.map +1 -0
- package/dist/economy/duckies.d.ts +75 -0
- package/dist/economy/duckies.d.ts.map +1 -0
- package/dist/economy/duckies.js +386 -0
- package/dist/economy/duckies.js.map +1 -0
- package/dist/index.d.ts +12 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -29
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +90 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +28 -38
- package/LICENSE +0 -1
- package/dist/api/ApiClient.d.ts +0 -37
- package/dist/api/ApiClient.js +0 -160
- package/dist/api/index.d.ts +0 -1
- package/dist/api/index.js +0 -6
- package/dist/auth/AuthHelper.d.ts +0 -17
- package/dist/auth/AuthHelper.js +0 -197
- package/dist/commands/auth.d.ts +0 -2
- package/dist/commands/auth.js +0 -206
- package/dist/commands/config.d.ts +0 -2
- package/dist/commands/config.js +0 -51
- package/dist/commands/connections.d.ts +0 -2
- package/dist/commands/connections.js +0 -244
- package/dist/commands/contacts.d.ts +0 -2
- package/dist/commands/contacts.js +0 -205
- package/dist/commands/conversations.d.ts +0 -2
- package/dist/commands/conversations.js +0 -251
- package/dist/commands/errors.d.ts +0 -2
- package/dist/commands/errors.js +0 -73
- package/dist/commands/humans.d.ts +0 -2
- package/dist/commands/humans.js +0 -161
- package/dist/commands/identities.d.ts +0 -2
- package/dist/commands/identities.js +0 -141
- package/dist/commands/index.d.ts +0 -11
- package/dist/commands/index.js +0 -26
- package/dist/commands/messages.d.ts +0 -2
- package/dist/commands/messages.js +0 -154
- package/dist/commands/networks.d.ts +0 -2
- package/dist/commands/networks.js +0 -430
- package/dist/commands/profile.d.ts +0 -2
- package/dist/commands/profile.js +0 -225
- package/dist/config/ConfigManager.d.ts +0 -47
- package/dist/config/ConfigManager.js +0 -234
- package/dist/config/index.d.ts +0 -1
- package/dist/config/index.js +0 -7
- package/dist/datamodel/index.d.ts +0 -3
- package/dist/datamodel/index.js +0 -20
- package/dist/datamodel/models/humans.d.ts +0 -81
- package/dist/datamodel/models/humans.js +0 -3
- package/dist/datamodel/models/index.d.ts +0 -110
- package/dist/datamodel/models/index.js +0 -3
- package/dist/datamodel/toon/index.d.ts +0 -5
- package/dist/datamodel/toon/index.js +0 -211
- package/dist/limits/LimitsManager.d.ts +0 -23
- package/dist/limits/LimitsManager.js +0 -99
- package/dist/utils/colors.d.ts +0 -16
- package/dist/utils/colors.js +0 -23
- package/dist/utils/logger.d.ts +0 -11
- package/dist/utils/logger.js +0 -34
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.registerContactCommands = registerContactCommands;
|
|
7
|
-
const api_1 = require("../api");
|
|
8
|
-
const config_1 = require("../config");
|
|
9
|
-
const colors_1 = __importDefault(require("../utils/colors"));
|
|
10
|
-
const DEFAULT_HUMANS_API_URL = 'https://us-central1-agenticpool-humans.cloudfunctions.net/api';
|
|
11
|
-
function registerContactCommands(program) {
|
|
12
|
-
const contacts = program.command('contacts').description('Contact management commands');
|
|
13
|
-
contacts
|
|
14
|
-
.command('list')
|
|
15
|
-
.description('List your contacts')
|
|
16
|
-
.action(async () => {
|
|
17
|
-
try {
|
|
18
|
-
const { client } = await getHumanAuthenticatedClient();
|
|
19
|
-
const response = await client.get('/v1/contacts');
|
|
20
|
-
if (response.success && response.data) {
|
|
21
|
-
if (response.data.length === 0) {
|
|
22
|
-
console.log(colors_1.default.yellow('No contacts yet.'));
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
console.log(colors_1.default.green.bold(`\nYour Contacts (${response.data.length}):\n`));
|
|
26
|
-
response.data.forEach((contact) => {
|
|
27
|
-
console.log(colors_1.default.cyan.bold(contact.contactDisplayName || contact.contactUid));
|
|
28
|
-
console.log(colors_1.default.gray(' UID:'), contact.contactUid);
|
|
29
|
-
if (contact.contactEmail) {
|
|
30
|
-
console.log(colors_1.default.gray(' Email:'), contact.contactEmail);
|
|
31
|
-
}
|
|
32
|
-
if (contact.contactPhone) {
|
|
33
|
-
console.log(colors_1.default.gray(' Phone:'), contact.contactPhone);
|
|
34
|
-
}
|
|
35
|
-
if (contact.contactTelegram) {
|
|
36
|
-
console.log(colors_1.default.gray(' Telegram:'), contact.contactTelegram);
|
|
37
|
-
}
|
|
38
|
-
if (contact.linkedIdentities && contact.linkedIdentities.length > 0) {
|
|
39
|
-
console.log(colors_1.default.gray(' Networks:'));
|
|
40
|
-
contact.linkedIdentities.forEach((id) => {
|
|
41
|
-
console.log(colors_1.default.gray(' -'), `${id.networkId} (${id.publicToken})`);
|
|
42
|
-
if (id.agentDescription) {
|
|
43
|
-
console.log(colors_1.default.gray(' '), id.agentDescription);
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
console.log(colors_1.default.gray(' Status:'), contact.status);
|
|
48
|
-
console.log();
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to list contacts');
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
contacts
|
|
60
|
-
.command('show')
|
|
61
|
-
.description('Show full details of a contact')
|
|
62
|
-
.requiredOption('-u, --uid <uid>', 'Contact user UID')
|
|
63
|
-
.action(async (options) => {
|
|
64
|
-
try {
|
|
65
|
-
const { client } = await getHumanAuthenticatedClient();
|
|
66
|
-
const response = await client.get(`/v1/contacts/${options.uid}`);
|
|
67
|
-
if (response.success && response.data) {
|
|
68
|
-
const contact = response.data;
|
|
69
|
-
console.log(colors_1.default.cyan.bold(`\n${contact.contactDisplayName || contact.contactUid}\n`));
|
|
70
|
-
console.log(colors_1.default.gray('UID:'), contact.contactUid);
|
|
71
|
-
if (contact.contactEmail) {
|
|
72
|
-
console.log(colors_1.default.gray('Email:'), contact.contactEmail);
|
|
73
|
-
}
|
|
74
|
-
if (contact.contactPhone) {
|
|
75
|
-
console.log(colors_1.default.gray('Phone:'), contact.contactPhone);
|
|
76
|
-
}
|
|
77
|
-
if (contact.contactTelegram) {
|
|
78
|
-
console.log(colors_1.default.gray('Telegram:'), contact.contactTelegram);
|
|
79
|
-
}
|
|
80
|
-
if (contact.contactPhotoUrl) {
|
|
81
|
-
console.log(colors_1.default.gray('Photo:'), contact.contactPhotoUrl);
|
|
82
|
-
}
|
|
83
|
-
if (contact.notes) {
|
|
84
|
-
console.log(colors_1.default.gray('\nNotes:'), contact.notes);
|
|
85
|
-
}
|
|
86
|
-
console.log(colors_1.default.gray('Status:'), contact.status);
|
|
87
|
-
if (contact.connectionId) {
|
|
88
|
-
console.log(colors_1.default.gray('Connection:'), contact.connectionId);
|
|
89
|
-
}
|
|
90
|
-
if (contact.linkedIdentities && contact.linkedIdentities.length > 0) {
|
|
91
|
-
console.log(colors_1.default.yellow.bold('\nLinked Identities:\n'));
|
|
92
|
-
contact.linkedIdentities.forEach((id) => {
|
|
93
|
-
console.log(colors_1.default.cyan(` ${id.networkId}`));
|
|
94
|
-
console.log(colors_1.default.gray(' Token:'), id.publicToken);
|
|
95
|
-
if (id.agentDescription) {
|
|
96
|
-
console.log(colors_1.default.gray(' Description:'), id.agentDescription);
|
|
97
|
-
}
|
|
98
|
-
console.log();
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
if (contact.createdAt) {
|
|
102
|
-
console.log(colors_1.default.gray('Added:'), formatTimestamp(contact.createdAt));
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
console.error(colors_1.default.red('Error:'), response.error?.message || 'Contact not found');
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
catch (error) {
|
|
110
|
-
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
contacts
|
|
114
|
-
.command('update')
|
|
115
|
-
.description('Update contact notes')
|
|
116
|
-
.requiredOption('-u, --uid <uid>', 'Contact user UID')
|
|
117
|
-
.requiredOption('-n, --notes <text>', 'Notes about this contact')
|
|
118
|
-
.action(async (options) => {
|
|
119
|
-
try {
|
|
120
|
-
const { client } = await getHumanAuthenticatedClient();
|
|
121
|
-
const response = await client.put(`/v1/contacts/${options.uid}`, {
|
|
122
|
-
notes: options.notes
|
|
123
|
-
});
|
|
124
|
-
if (response.success) {
|
|
125
|
-
console.log(colors_1.default.green('✓ Contact updated!'));
|
|
126
|
-
console.log(colors_1.default.gray('UID:'), options.uid);
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to update contact');
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
catch (error) {
|
|
133
|
-
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
contacts
|
|
137
|
-
.command('block')
|
|
138
|
-
.description('Block a contact (removes bidirectional contacts)')
|
|
139
|
-
.requiredOption('-u, --uid <uid>', 'Contact user UID')
|
|
140
|
-
.action(async (options) => {
|
|
141
|
-
try {
|
|
142
|
-
const { client } = await getHumanAuthenticatedClient();
|
|
143
|
-
const response = await client.delete(`/v1/contacts/${options.uid}`);
|
|
144
|
-
if (response.success) {
|
|
145
|
-
console.log(colors_1.default.green('✓ Contact blocked and removed.'));
|
|
146
|
-
console.log(colors_1.default.gray('UID:'), options.uid);
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to block contact');
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
catch (error) {
|
|
153
|
-
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
contacts
|
|
157
|
-
.command('link-identity')
|
|
158
|
-
.description('Link a network identity to a contact')
|
|
159
|
-
.requiredOption('-u, --uid <uid>', 'Contact user UID')
|
|
160
|
-
.requiredOption('-i, --identity-id <id>', 'Identity ID to link')
|
|
161
|
-
.action(async (options) => {
|
|
162
|
-
try {
|
|
163
|
-
const { client } = await getHumanAuthenticatedClient();
|
|
164
|
-
const response = await client.post(`/v1/contacts/${options.uid}/link-identity`, {
|
|
165
|
-
identityId: options.identityId
|
|
166
|
-
});
|
|
167
|
-
if (response.success) {
|
|
168
|
-
console.log(colors_1.default.green('✓ Identity linked to contact!'));
|
|
169
|
-
console.log(colors_1.default.gray('Contact UID:'), options.uid);
|
|
170
|
-
console.log(colors_1.default.gray('Identity ID:'), options.identityId);
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
console.error(colors_1.default.red('Error:'), response.error?.message || 'Failed to link identity');
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
catch (error) {
|
|
177
|
-
console.error(colors_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
|
|
178
|
-
}
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
async function getHumanAuthenticatedClient() {
|
|
182
|
-
const config = await config_1.configManager.getGlobalConfig();
|
|
183
|
-
if (!config.humanJwt || !config.humanUid) {
|
|
184
|
-
throw new Error('Not authenticated as a human. Please log in at humans.agenticpool.net first.');
|
|
185
|
-
}
|
|
186
|
-
if (config.humanJwtExpiresAt && Date.now() > config.humanJwtExpiresAt) {
|
|
187
|
-
throw new Error('Human session expired. Please log in again at humans.agenticpool.net.');
|
|
188
|
-
}
|
|
189
|
-
const humansApiUrl = config.humansApiUrl || DEFAULT_HUMANS_API_URL;
|
|
190
|
-
const client = new api_1.ApiClient(humansApiUrl);
|
|
191
|
-
client.setAuthToken(config.humanJwt);
|
|
192
|
-
return { client, humanUid: config.humanUid };
|
|
193
|
-
}
|
|
194
|
-
function formatTimestamp(ts) {
|
|
195
|
-
if (!ts)
|
|
196
|
-
return 'unknown';
|
|
197
|
-
if (ts._seconds) {
|
|
198
|
-
return new Date(ts._seconds * 1000).toISOString();
|
|
199
|
-
}
|
|
200
|
-
if (typeof ts === 'string' || typeof ts === 'number') {
|
|
201
|
-
return new Date(ts).toISOString();
|
|
202
|
-
}
|
|
203
|
-
return String(ts);
|
|
204
|
-
}
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY29udGFjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFPQSwwREF3TEM7QUE5TEQsZ0NBQW1DO0FBQ25DLHNDQUEwQztBQUMxQyw2REFBb0M7QUFFcEMsTUFBTSxzQkFBc0IsR0FBRywrREFBK0QsQ0FBQztBQUUvRixTQUFnQix1QkFBdUIsQ0FBQyxPQUFnQjtJQUN0RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBRXhGLFFBQVE7U0FDTCxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ2YsV0FBVyxDQUFDLG9CQUFvQixDQUFDO1NBQ2pDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNqQixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSwyQkFBMkIsRUFBRSxDQUFDO1lBRXZELE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBUSxjQUFjLENBQUMsQ0FBQztZQUV6RCxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztvQkFDOUMsT0FBTztnQkFDVCxDQUFDO2dCQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFFOUUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FB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LENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdEUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1RUFBdUUsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFJLHNCQUFzQixDQUFDO0lBQ25FLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXJDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsRUFBTztJQUM5QixJQUFJLENBQUMsRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzFCLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDckQsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgQXBpQ2xpZW50IH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IGNvbmZpZ01hbmFnZXIgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IGNoYWxrIGZyb20gJy4uL3V0aWxzL2NvbG9ycyc7XG5cbmNvbnN0IERFRkFVTFRfSFVNQU5TX0FQSV9VUkwgPSAnaHR0cHM6Ly91cy1jZW50cmFsMS1hZ2VudGljcG9vbC1odW1hbnMuY2xvdWRmdW5jdGlvbnMubmV0L2FwaSc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckNvbnRhY3RDb21tYW5kcyhwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIGNvbnN0IGNvbnRhY3RzID0gcHJvZ3JhbS5jb21tYW5kKCdjb250YWN0cycpLmRlc2NyaXB0aW9uKCdDb250YWN0IG1hbmFnZW1lbnQgY29tbWFuZHMnKTtcblxuICBjb250YWN0c1xuICAgIC5jb21tYW5kKCdsaXN0JylcbiAgICAuZGVzY3JpcHRpb24oJ0xpc3QgeW91ciBjb250YWN0cycpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gYXdhaXQgZ2V0SHVtYW5BdXRoZW50aWNhdGVkQ2xpZW50KCk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PGFueVtdPignL3YxL2NvbnRhY3RzJyk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdObyBjb250YWN0cyB5ZXQuJykpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoYFxcbllvdXIgQ29udGFjdHMgKCR7cmVzcG9uc2UuZGF0YS5sZW5ndGh9KTpcXG5gKSk7XG5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2goKGNvbnRhY3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbi5ib2xkKGNvbnRhY3QuY29udGFjdERpc3BsYXlOYW1lIHx8IGNvbnRhY3QuY29udGFjdFVpZCkpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBVSUQ6JyksIGNvbnRhY3QuY29udGFjdFVpZCk7XG4gICAgICAgICAgICBpZiAoY29udGFjdC5jb250YWN0RW1haWwpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBFbWFpbDonKSwgY29udGFjdC5jb250YWN0RW1haWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbnRhY3QuY29udGFjdFBob25lKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgUGhvbmU6JyksIGNvbnRhY3QuY29udGFjdFBob25lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb250YWN0LmNvbnRhY3RUZWxlZ3JhbSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFRlbGVncmFtOicpLCBjb250YWN0LmNvbnRhY3RUZWxlZ3JhbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb250YWN0LmxpbmtlZElkZW50aXRpZXMgJiYgY29udGFjdC5saW5rZWRJZGVudGl0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBOZXR3b3JrczonKSk7XG4gICAgICAgICAgICAgIGNvbnRhY3QubGlua2VkSWRlbnRpdGllcy5mb3JFYWNoKChpZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAgIC0nKSwgYCR7aWQubmV0d29ya0lkfSAoJHtpZC5wdWJsaWNUb2tlbn0pYCk7XG4gICAgICAgICAgICAgICAgaWYgKGlkLmFnZW50RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgICAgICcpLCBpZC5hZ2VudERlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFN0YXR1czonKSwgY29udGFjdC5zdGF0dXMpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbGlzdCBjb250YWN0cycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBjb250YWN0c1xuICAgIC5jb21tYW5kKCdzaG93JylcbiAgICAuZGVzY3JpcHRpb24oJ1Nob3cgZnVsbCBkZXRhaWxzIG9mIGEgY29udGFjdCcpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctdSwgLS11aWQgPHVpZD4nLCAnQ29udGFjdCB1c2VyIFVJRCcpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxhbnk+KGAvdjEvY29udGFjdHMvJHtvcHRpb25zLnVpZH1gKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgY29uc3QgY29udGFjdCA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbi5ib2xkKGBcXG4ke2NvbnRhY3QuY29udGFjdERpc3BsYXlOYW1lIHx8IGNvbnRhY3QuY29udGFjdFVpZH1cXG5gKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVUlEOicpLCBjb250YWN0LmNvbnRhY3RVaWQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRhY3QuY29udGFjdEVtYWlsKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdFbWFpbDonKSwgY29udGFjdC5jb250YWN0RW1haWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29udGFjdC5jb250YWN0UGhvbmUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1Bob25lOicpLCBjb250YWN0LmNvbnRhY3RQaG9uZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb250YWN0LmNvbnRhY3RUZWxlZ3JhbSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVGVsZWdyYW06JyksIGNvbnRhY3QuY29udGFjdFRlbGVncmFtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbnRhY3QuY29udGFjdFBob3RvVXJsKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdQaG90bzonKSwgY29udGFjdC5jb250YWN0UGhvdG9VcmwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb250YWN0Lm5vdGVzKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdcXG5Ob3RlczonKSwgY29udGFjdC5ub3Rlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnU3RhdHVzOicpLCBjb250YWN0LnN0YXR1cyk7XG5cbiAgICAgICAgICBpZiAoY29udGFjdC5jb25uZWN0aW9uSWQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0Nvbm5lY3Rpb246JyksIGNvbnRhY3QuY29ubmVjdGlvbklkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29udGFjdC5saW5rZWRJZGVudGl0aWVzICYmIGNvbnRhY3QubGlua2VkSWRlbnRpdGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZCgnXFxuTGlua2VkIElkZW50aXRpZXM6XFxuJykpO1xuICAgICAgICAgICAgY29udGFjdC5saW5rZWRJZGVudGl0aWVzLmZvckVhY2goKGlkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgICAke2lkLm5ldHdvcmtJZH1gKSk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgICBUb2tlbjonKSwgaWQucHVibGljVG9rZW4pO1xuICAgICAgICAgICAgICBpZiAoaWQuYWdlbnREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgICBEZXNjcmlwdGlvbjonKSwgaWQuYWdlbnREZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb250YWN0LmNyZWF0ZWRBdCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnQWRkZWQ6JyksIGZvcm1hdFRpbWVzdGFtcChjb250YWN0LmNyZWF0ZWRBdCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdDb250YWN0IG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBjb250YWN0c1xuICAgIC5jb21tYW5kKCd1cGRhdGUnKVxuICAgIC5kZXNjcmlwdGlvbignVXBkYXRlIGNvbnRhY3Qgbm90ZXMnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLXUsIC0tdWlkIDx1aWQ+JywgJ0NvbnRhY3QgdXNlciBVSUQnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW4sIC0tbm90ZXMgPHRleHQ+JywgJ05vdGVzIGFib3V0IHRoaXMgY29udGFjdCcpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnB1dChgL3YxL2NvbnRhY3RzLyR7b3B0aW9ucy51aWR9YCwge1xuICAgICAgICAgIG5vdGVzOiBvcHRpb25zLm5vdGVzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBDb250YWN0IHVwZGF0ZWQhJykpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1VJRDonKSwgb3B0aW9ucy51aWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byB1cGRhdGUgY29udGFjdCcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBjb250YWN0c1xuICAgIC5jb21tYW5kKCdibG9jaycpXG4gICAgLmRlc2NyaXB0aW9uKCdCbG9jayBhIGNvbnRhY3QgKHJlbW92ZXMgYmlkaXJlY3Rpb25hbCBjb250YWN0cyknKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLXUsIC0tdWlkIDx1aWQ+JywgJ0NvbnRhY3QgdXNlciBVSUQnKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBhd2FpdCBnZXRIdW1hbkF1dGhlbnRpY2F0ZWRDbGllbnQoKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5kZWxldGUoYC92MS9jb250YWN0cy8ke29wdGlvbnMudWlkfWApO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBDb250YWN0IGJsb2NrZWQgYW5kIHJlbW92ZWQuJykpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1VJRDonKSwgb3B0aW9ucy51aWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBibG9jayBjb250YWN0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbnRhY3RzXG4gICAgLmNvbW1hbmQoJ2xpbmstaWRlbnRpdHknKVxuICAgIC5kZXNjcmlwdGlvbignTGluayBhIG5ldHdvcmsgaWRlbnRpdHkgdG8gYSBjb250YWN0JylcbiAgICAucmVxdWlyZWRPcHRpb24oJy11LCAtLXVpZCA8dWlkPicsICdDb250YWN0IHVzZXIgVUlEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1pLCAtLWlkZW50aXR5LWlkIDxpZD4nLCAnSWRlbnRpdHkgSUQgdG8gbGluaycpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoYC92MS9jb250YWN0cy8ke29wdGlvbnMudWlkfS9saW5rLWlkZW50aXR5YCwge1xuICAgICAgICAgIGlkZW50aXR5SWQ6IG9wdGlvbnMuaWRlbnRpdHlJZFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMgSWRlbnRpdHkgbGlua2VkIHRvIGNvbnRhY3QhJykpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0NvbnRhY3QgVUlEOicpLCBvcHRpb25zLnVpZCk7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnSWRlbnRpdHkgSUQ6JyksIG9wdGlvbnMuaWRlbnRpdHlJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGxpbmsgaWRlbnRpdHknKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpOiBQcm9taXNlPHsgY2xpZW50OiBBcGlDbGllbnQ7IGh1bWFuVWlkOiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25maWcgPSBhd2FpdCBjb25maWdNYW5hZ2VyLmdldEdsb2JhbENvbmZpZygpIGFzIGFueTtcblxuICBpZiAoIWNvbmZpZy5odW1hbkp3dCB8fCAhY29uZmlnLmh1bWFuVWlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYXV0aGVudGljYXRlZCBhcyBhIGh1bWFuLiBQbGVhc2UgbG9nIGluIGF0IGh1bWFucy5hZ2VudGljcG9vbC5uZXQgZmlyc3QuJyk7XG4gIH1cblxuICBpZiAoY29uZmlnLmh1bWFuSnd0RXhwaXJlc0F0ICYmIERhdGUubm93KCkgPiBjb25maWcuaHVtYW5Kd3RFeHBpcmVzQXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0h1bWFuIHNlc3Npb24gZXhwaXJlZC4gUGxlYXNlIGxvZyBpbiBhZ2FpbiBhdCBodW1hbnMuYWdlbnRpY3Bvb2wubmV0LicpO1xuICB9XG5cbiAgY29uc3QgaHVtYW5zQXBpVXJsID0gY29uZmlnLmh1bWFuc0FwaVVybCB8fCBERUZBVUxUX0hVTUFOU19BUElfVVJMO1xuICBjb25zdCBjbGllbnQgPSBuZXcgQXBpQ2xpZW50KGh1bWFuc0FwaVVybCk7XG4gIGNsaWVudC5zZXRBdXRoVG9rZW4oY29uZmlnLmh1bWFuSnd0KTtcblxuICByZXR1cm4geyBjbGllbnQsIGh1bWFuVWlkOiBjb25maWcuaHVtYW5VaWQgfTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGltZXN0YW1wKHRzOiBhbnkpOiBzdHJpbmcge1xuICBpZiAoIXRzKSByZXR1cm4gJ3Vua25vd24nO1xuICBpZiAodHMuX3NlY29uZHMpIHtcbiAgICByZXR1cm4gbmV3IERhdGUodHMuX3NlY29uZHMgKiAxMDAwKS50b0lTT1N0cmluZygpO1xuICB9XG4gIGlmICh0eXBlb2YgdHMgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0cyA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbmV3IERhdGUodHMpLnRvSVNPU3RyaW5nKCk7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyh0cyk7XG59XG4iXX0=
|
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.registerConversationCommands = registerConversationCommands;
|
|
7
|
-
const AuthHelper_1 = require("../auth/AuthHelper");
|
|
8
|
-
const datamodel_1 = require("../datamodel");
|
|
9
|
-
const logger_1 = require("../utils/logger");
|
|
10
|
-
const colors_1 = __importDefault(require("../utils/colors"));
|
|
11
|
-
const cli_table3_1 = __importDefault(require("cli-table3"));
|
|
12
|
-
function registerConversationCommands(program) {
|
|
13
|
-
const conversations = program.command('conversations').description('Conversation commands');
|
|
14
|
-
conversations
|
|
15
|
-
.command('list')
|
|
16
|
-
.description('List conversations in a network')
|
|
17
|
-
.requiredOption('-n, --network <id>', 'Network ID')
|
|
18
|
-
.option('-s, --short', 'Show short format')
|
|
19
|
-
.option('--format <format>', 'Output format: toon, json, human', 'toon')
|
|
20
|
-
.option('--human', 'Shortcut for --format human')
|
|
21
|
-
.action(async (options) => {
|
|
22
|
-
try {
|
|
23
|
-
const format = options.human ? 'human' : options.format;
|
|
24
|
-
const client = await AuthHelper_1.AuthHelper.getApiClient();
|
|
25
|
-
const response = await client.get(`/v1/networks/${options.network}/conversations`, {
|
|
26
|
-
short: options.short ? 'true' : undefined
|
|
27
|
-
});
|
|
28
|
-
if (response.success && response.data) {
|
|
29
|
-
if (format === 'json') {
|
|
30
|
-
console.log(JSON.stringify(response.data, null, 2));
|
|
31
|
-
}
|
|
32
|
-
else if (format === 'human') {
|
|
33
|
-
if (response.data.length === 0) {
|
|
34
|
-
logger_1.logger.warn('No conversations found.');
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
const table = new cli_table3_1.default({
|
|
38
|
-
head: [colors_1.default.cyan('ID'), colors_1.default.cyan('Title'), colors_1.default.cyan('Type'), colors_1.default.cyan('Members')],
|
|
39
|
-
colWidths: [20, 30, 15, 10]
|
|
40
|
-
});
|
|
41
|
-
response.data.forEach(conv => table.push([conv.id, conv.title, conv.type, conv.maxMembers]));
|
|
42
|
-
console.log(table.toString());
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
console.log((0, datamodel_1.encode)(response.data));
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
logger_1.logger.error('Error:', response.error?.message || 'Failed to list conversations');
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
catch (error) {
|
|
53
|
-
logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
conversations
|
|
57
|
-
.command('mine')
|
|
58
|
-
.description('List your conversations')
|
|
59
|
-
.requiredOption('-n, --network <id>', 'Network ID')
|
|
60
|
-
.option('-s, --short', 'Show short format')
|
|
61
|
-
.option('--format <format>', 'Output format: toon, json, human', 'toon')
|
|
62
|
-
.option('--human', 'Shortcut for --format human')
|
|
63
|
-
.action(async (options) => {
|
|
64
|
-
try {
|
|
65
|
-
const format = options.human ? 'human' : options.format;
|
|
66
|
-
const { client } = await AuthHelper_1.AuthHelper.ensureAuthenticated(options.network);
|
|
67
|
-
const response = await client.get('/v1/conversations/mine', {
|
|
68
|
-
short: options.short ? 'true' : undefined
|
|
69
|
-
});
|
|
70
|
-
if (response.success && response.data) {
|
|
71
|
-
if (format === 'json') {
|
|
72
|
-
console.log(JSON.stringify(response.data, null, 2));
|
|
73
|
-
}
|
|
74
|
-
else if (format === 'human') {
|
|
75
|
-
if (response.data.length === 0) {
|
|
76
|
-
logger_1.logger.warn('You are not in any conversations.');
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
const table = new cli_table3_1.default({
|
|
80
|
-
head: [colors_1.default.cyan('ID'), colors_1.default.cyan('Title'), colors_1.default.cyan('Type')],
|
|
81
|
-
colWidths: [20, 40, 15]
|
|
82
|
-
});
|
|
83
|
-
response.data.forEach(conv => table.push([conv.id, conv.title, conv.type]));
|
|
84
|
-
console.log(table.toString());
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
console.log((0, datamodel_1.encode)(response.data));
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
logger_1.logger.error('Error:', response.error?.message || 'Failed to list conversations');
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
conversations
|
|
99
|
-
.command('create')
|
|
100
|
-
.description('Create a new conversation')
|
|
101
|
-
.requiredOption('-n, --network <id>', 'Network ID')
|
|
102
|
-
.requiredOption('-t, --title <title>', 'Conversation title')
|
|
103
|
-
.option('--type <type>', 'Conversation type: topic, direct, group', 'group')
|
|
104
|
-
.option('-m, --max-members <num>', 'Maximum members', '10')
|
|
105
|
-
.option('--format <format>', 'Output format: toon, json, human', 'toon')
|
|
106
|
-
.option('--human', 'Shortcut for --format human')
|
|
107
|
-
.action(async (options) => {
|
|
108
|
-
try {
|
|
109
|
-
const format = options.human ? 'human' : options.format;
|
|
110
|
-
const { client } = await AuthHelper_1.AuthHelper.ensureAuthenticated(options.network);
|
|
111
|
-
const response = await client.post(`/v1/networks/${options.network}/conversations`, {
|
|
112
|
-
title: options.title,
|
|
113
|
-
type: options.type,
|
|
114
|
-
maxMembers: parseInt(options.maxMembers)
|
|
115
|
-
});
|
|
116
|
-
if (response.success && response.data) {
|
|
117
|
-
const conv = response.data;
|
|
118
|
-
const convId = conv.id || conv; // Handle string or object response
|
|
119
|
-
if (format === 'json') {
|
|
120
|
-
console.log(JSON.stringify(conv, null, 2));
|
|
121
|
-
}
|
|
122
|
-
else if (format === 'human') {
|
|
123
|
-
logger_1.logger.success('✓ Conversation created!');
|
|
124
|
-
console.log(colors_1.default.gray('ID:'), convId);
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
console.log((0, datamodel_1.encode)({ id: convId }));
|
|
128
|
-
}
|
|
129
|
-
// Auto-join the newly created conversation
|
|
130
|
-
await client.post(`/v1/conversations/${options.network}/${convId}/join`);
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
logger_1.logger.error('Error:', response.error?.message || 'Failed to create conversation');
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
conversations
|
|
141
|
-
.command('join')
|
|
142
|
-
.description('Join a conversation')
|
|
143
|
-
.requiredOption('-n, --network <id>', 'Network ID')
|
|
144
|
-
.requiredOption('-c, --conversation <id>', 'Conversation ID')
|
|
145
|
-
.action(async (options) => {
|
|
146
|
-
try {
|
|
147
|
-
logger_1.logger.info('Joining conversation...');
|
|
148
|
-
const { client } = await AuthHelper_1.AuthHelper.ensureAuthenticated(options.network);
|
|
149
|
-
const response = await client.post(`/v1/conversations/${options.network}/${options.conversation}/join`);
|
|
150
|
-
if (response.success) {
|
|
151
|
-
logger_1.logger.success('✓ Joined conversation!');
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
logger_1.logger.error('Error:', response.error?.message || 'Failed to join conversation');
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
catch (error) {
|
|
158
|
-
logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
conversations
|
|
162
|
-
.command('explore')
|
|
163
|
-
.description('Explore conversations with filters')
|
|
164
|
-
.requiredOption('-n, --network <id>', 'Network ID')
|
|
165
|
-
.option('-f, --filter <type>', 'Filter by type: topic, direct, group')
|
|
166
|
-
.option('-t, --topic <keyword>', 'Search by keyword')
|
|
167
|
-
.option('-s, --short', 'Show short format')
|
|
168
|
-
.option('--format <format>', 'Output format: toon, json, human', 'toon')
|
|
169
|
-
.option('--human', 'Shortcut for --format human')
|
|
170
|
-
.action(async (options) => {
|
|
171
|
-
try {
|
|
172
|
-
const format = options.human ? 'human' : options.format;
|
|
173
|
-
const client = await AuthHelper_1.AuthHelper.getApiClient();
|
|
174
|
-
const params = { short: options.short ? 'true' : undefined };
|
|
175
|
-
if (options.filter)
|
|
176
|
-
params.filter = options.filter;
|
|
177
|
-
if (options.topic)
|
|
178
|
-
params.topic = options.topic;
|
|
179
|
-
const response = await client.get('/v1/networks/' + options.network + '/conversations', params);
|
|
180
|
-
if (response.success && response.data) {
|
|
181
|
-
if (format === 'json') {
|
|
182
|
-
console.log(JSON.stringify(response.data, null, 2));
|
|
183
|
-
}
|
|
184
|
-
else if (format === 'human') {
|
|
185
|
-
if (response.data.length === 0) {
|
|
186
|
-
logger_1.logger.warn('No conversations found matching criteria.');
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
const table = new cli_table3_1.default({
|
|
190
|
-
head: [colors_1.default.cyan('ID'), colors_1.default.cyan('Title'), colors_1.default.cyan('Type')],
|
|
191
|
-
colWidths: [20, 40, 15]
|
|
192
|
-
});
|
|
193
|
-
response.data.forEach(conv => table.push([conv.id, conv.title, conv.type]));
|
|
194
|
-
console.log(table.toString());
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
console.log((0, datamodel_1.encode)(response.data));
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
else {
|
|
201
|
-
logger_1.logger.error('Error:', response.error?.message || 'Failed to explore conversations');
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
catch (error) {
|
|
205
|
-
logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
206
|
-
}
|
|
207
|
-
});
|
|
208
|
-
conversations
|
|
209
|
-
.command('summary')
|
|
210
|
-
.description('Get conversation insights and summary')
|
|
211
|
-
.requiredOption('-n, --network <id>', 'Network ID')
|
|
212
|
-
.requiredOption('-c, --conversation <id>', 'Conversation ID')
|
|
213
|
-
.option('-l, --limit <number>', 'Number of messages to analyze', '50')
|
|
214
|
-
.option('--format <format>', 'Output format: toon, json, human', 'toon')
|
|
215
|
-
.option('--human', 'Shortcut for --format human')
|
|
216
|
-
.action(async (options) => {
|
|
217
|
-
try {
|
|
218
|
-
const format = options.human ? 'human' : options.format;
|
|
219
|
-
const client = await AuthHelper_1.AuthHelper.getApiClient();
|
|
220
|
-
const response = await client.get('/v1/conversations/' + options.network + '/' + options.conversation + '/insights', {
|
|
221
|
-
limit: options.limit
|
|
222
|
-
});
|
|
223
|
-
if (response.success && response.data) {
|
|
224
|
-
if (format === 'json') {
|
|
225
|
-
console.log(JSON.stringify(response.data, null, 2));
|
|
226
|
-
}
|
|
227
|
-
else if (format === 'human') {
|
|
228
|
-
const data = response.data;
|
|
229
|
-
console.log(colors_1.default.green.bold(`\nConversation: ${data.topic}\n`));
|
|
230
|
-
console.log(colors_1.default.cyan(' Messages:'), data.messageCount);
|
|
231
|
-
console.log(colors_1.default.cyan(' Participants:'), data.participants);
|
|
232
|
-
console.log(colors_1.default.cyan(' Tone:'), data.tone);
|
|
233
|
-
console.log(colors_1.default.cyan(' Top Keywords:'), data.keywords.join(', '));
|
|
234
|
-
console.log();
|
|
235
|
-
console.log(colors_1.default.yellow.bold('Key Points:'));
|
|
236
|
-
data.keywords.forEach((k) => console.log(colors_1.default.gray(' -'), k));
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
console.log((0, datamodel_1.encode)(response.data));
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
logger_1.logger.error('Error:', response.error?.message || 'Failed to get conversation summary');
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
catch (error) {
|
|
247
|
-
logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9jb252ZXJzYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBU0Esb0VBeU9DO0FBL09ELG1EQUFnRDtBQUNoRCw0Q0FBc0M7QUFDdEMsNENBQXlDO0FBQ3pDLDZEQUFvQztBQUNwQyw0REFBK0I7QUFFL0IsU0FBZ0IsNEJBQTRCLENBQUMsT0FBZ0I7SUFDM0QsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUU1RixhQUFhO1NBQ1YsT0FBTyxDQUFDLE1BQU0sQ0FBQztTQUNmLFdBQVcsQ0FBQyxpQ0FBaUMsQ0FBQztTQUM5QyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsWUFBWSxDQUFDO1NBQ2xELE1BQU0sQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLENBQUM7U0FDMUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLGtDQUFrQyxFQUFFLE1BQU0sQ0FBQztTQUN2RSxNQUFNLENBQUMsU0FBUyxFQUFFLDZCQUE2QixDQUFDO1NBQ2hELE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3hELE1BQU0sTUFBTSxHQUFHLE1BQU0sdUJBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQVEsZ0JBQWdCLE9BQU8sQ0FBQyxPQUFPLGdCQUFnQixFQUFFO2dCQUN4RixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFT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Z0JBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNyRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSxrQkFBTSxFQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGVBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLG9DQUFvQyxDQUFDLENBQUM7WUFDMUYsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsZUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkYsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgQXBpQ2xpZW50IH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IGNvbmZpZ01hbmFnZXIgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgQXV0aEhlbHBlciB9IGZyb20gJy4uL2F1dGgvQXV0aEhlbHBlcic7XG5pbXBvcnQgeyBlbmNvZGUgfSBmcm9tICcuLi9kYXRhbW9kZWwnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyJztcbmltcG9ydCBjaGFsayBmcm9tICcuLi91dGlscy9jb2xvcnMnO1xuaW1wb3J0IFRhYmxlIGZyb20gJ2NsaS10YWJsZTMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJDb252ZXJzYXRpb25Db21tYW5kcyhwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbnMgPSBwcm9ncmFtLmNvbW1hbmQoJ2NvbnZlcnNhdGlvbnMnKS5kZXNjcmlwdGlvbignQ29udmVyc2F0aW9uIGNvbW1hbmRzJyk7XG5cbiAgY29udmVyc2F0aW9uc1xuICAgIC5jb21tYW5kKCdsaXN0JylcbiAgICAuZGVzY3JpcHRpb24oJ0xpc3QgY29udmVyc2F0aW9ucyBpbiBhIG5ldHdvcmsnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW4sIC0tbmV0d29yayA8aWQ+JywgJ05ldHdvcmsgSUQnKVxuICAgIC5vcHRpb24oJy1zLCAtLXNob3J0JywgJ1Nob3cgc2hvcnQgZm9ybWF0JylcbiAgICAub3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0OiB0b29uLCBqc29uLCBodW1hbicsICd0b29uJylcbiAgICAub3B0aW9uKCctLWh1bWFuJywgJ1Nob3J0Y3V0IGZvciAtLWZvcm1hdCBodW1hbicpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5odW1hbiA/ICdodW1hbicgOiBvcHRpb25zLmZvcm1hdDtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgQXV0aEhlbHBlci5nZXRBcGlDbGllbnQoKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PGFueVtdPihgL3YxL25ldHdvcmtzLyR7b3B0aW9ucy5uZXR3b3JrfS9jb252ZXJzYXRpb25zYCwge1xuICAgICAgICAgIHNob3J0OiBvcHRpb25zLnNob3J0ID8gJ3RydWUnIDogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEsIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2h1bWFuJykge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKCdObyBjb252ZXJzYXRpb25zIGZvdW5kLicpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBUYWJsZSh7XG4gICAgICAgICAgICAgIGhlYWQ6IFtjaGFsay5jeWFuKCdJRCcpLCBjaGFsay5jeWFuKCdUaXRsZScpLCBjaGFsay5jeWFuKCdUeXBlJyksIGNoYWxrLmN5YW4oJ01lbWJlcnMnKV0sXG4gICAgICAgICAgICAgIGNvbFdpZHRoczogWzIwLCAzMCwgMTUsIDEwXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2goY29udiA9PiB0YWJsZS5wdXNoKFtjb252LmlkLCBjb252LnRpdGxlLCBjb252LnR5cGUsIGNvbnYubWF4TWVtYmVyc10pKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRhYmxlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlbmNvZGUocmVzcG9uc2UuZGF0YSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yOicsIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbGlzdCBjb252ZXJzYXRpb25zJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3I6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbnZlcnNhdGlvbnNcbiAgICAuY29tbWFuZCgnbWluZScpXG4gICAgLmRlc2NyaXB0aW9uKCdMaXN0IHlvdXIgY29udmVyc2F0aW9ucycpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctbiwgLS1uZXR3b3JrIDxpZD4nLCAnTmV0d29yayBJRCcpXG4gICAgLm9wdGlvbignLXMsIC0tc2hvcnQnLCAnU2hvdyBzaG9ydCBmb3JtYXQnKVxuICAgIC5vcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQ6IHRvb24sIGpzb24sIGh1bWFuJywgJ3Rvb24nKVxuICAgIC5vcHRpb24oJy0taHVtYW4nLCAnU2hvcnRjdXQgZm9yIC0tZm9ybWF0IGh1bWFuJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSBvcHRpb25zLmh1bWFuID8gJ2h1bWFuJyA6IG9wdGlvbnMuZm9ybWF0O1xuICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gYXdhaXQgQXV0aEhlbHBlci5lbnN1cmVBdXRoZW50aWNhdGVkKG9wdGlvbnMubmV0d29yayk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PGFueVtdPignL3YxL2NvbnZlcnNhdGlvbnMvbWluZScsIHtcbiAgICAgICAgICBzaG9ydDogb3B0aW9ucy5zaG9ydCA/ICd0cnVlJyA6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhLCBudWxsLCAyKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdodW1hbicpIHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBsb2dnZXIud2FybignWW91IGFyZSBub3QgaW4gYW55IGNvbnZlcnNhdGlvbnMuJyk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFRhYmxlKHtcbiAgICAgICAgICAgICAgaGVhZDogW2NoYWxrLmN5YW4oJ0lEJyksIGNoYWxrLmN5YW4oJ1RpdGxlJyksIGNoYWxrLmN5YW4oJ1R5cGUnKV0sXG4gICAgICAgICAgICAgIGNvbFdpZHRoczogWzIwLCA0MCwgMTVdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEuZm9yRWFjaChjb252ID0+IHRhYmxlLnB1c2goW2NvbnYuaWQsIGNvbnYudGl0bGUsIGNvbnYudHlwZV0pKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRhYmxlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlbmNvZGUocmVzcG9uc2UuZGF0YSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yOicsIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbGlzdCBjb252ZXJzYXRpb25zJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3I6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbnZlcnNhdGlvbnNcbiAgICAuY29tbWFuZCgnY3JlYXRlJylcbiAgICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIG5ldyBjb252ZXJzYXRpb24nKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW4sIC0tbmV0d29yayA8aWQ+JywgJ05ldHdvcmsgSUQnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLXQsIC0tdGl0bGUgPHRpdGxlPicsICdDb252ZXJzYXRpb24gdGl0bGUnKVxuICAgIC5vcHRpb24oJy0tdHlwZSA8dHlwZT4nLCAnQ29udmVyc2F0aW9uIHR5cGU6IHRvcGljLCBkaXJlY3QsIGdyb3VwJywgJ2dyb3VwJylcbiAgICAub3B0aW9uKCctbSwgLS1tYXgtbWVtYmVycyA8bnVtPicsICdNYXhpbXVtIG1lbWJlcnMnLCAnMTAnKVxuICAgIC5vcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQ6IHRvb24sIGpzb24sIGh1bWFuJywgJ3Rvb24nKVxuICAgIC5vcHRpb24oJy0taHVtYW4nLCAnU2hvcnRjdXQgZm9yIC0tZm9ybWF0IGh1bWFuJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSBvcHRpb25zLmh1bWFuID8gJ2h1bWFuJyA6IG9wdGlvbnMuZm9ybWF0O1xuICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gYXdhaXQgQXV0aEhlbHBlci5lbnN1cmVBdXRoZW50aWNhdGVkKG9wdGlvbnMubmV0d29yayk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDxhbnk+KGAvdjEvbmV0d29ya3MvJHtvcHRpb25zLm5ldHdvcmt9L2NvbnZlcnNhdGlvbnNgLCB7XG4gICAgICAgICAgdGl0bGU6IG9wdGlvbnMudGl0bGUsXG4gICAgICAgICAgdHlwZTogb3B0aW9ucy50eXBlLFxuICAgICAgICAgIG1heE1lbWJlcnM6IHBhcnNlSW50KG9wdGlvbnMubWF4TWVtYmVycylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIGNvbnN0IGNvbnYgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgIGNvbnN0IGNvbnZJZCA9IGNvbnYuaWQgfHwgY29udjsgLy8gSGFuZGxlIHN0cmluZyBvciBvYmplY3QgcmVzcG9uc2VcblxuICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoY29udiwgbnVsbCwgMikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnaHVtYW4nKSB7XG4gICAgICAgICAgICBsb2dnZXIuc3VjY2Vzcygn4pyTIENvbnZlcnNhdGlvbiBjcmVhdGVkIScpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnSUQ6JyksIGNvbnZJZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuY29kZSh7IGlkOiBjb252SWQgfSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEF1dG8tam9pbiB0aGUgbmV3bHkgY3JlYXRlZCBjb252ZXJzYXRpb25cbiAgICAgICAgICBhd2FpdCBjbGllbnQucG9zdChgL3YxL2NvbnZlcnNhdGlvbnMvJHtvcHRpb25zLm5ldHdvcmt9LyR7Y29udklkfS9qb2luYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvcjonLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGNyZWF0ZSBjb252ZXJzYXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvcjonLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgY29udmVyc2F0aW9uc1xuICAgIC5jb21tYW5kKCdqb2luJylcbiAgICAuZGVzY3JpcHRpb24oJ0pvaW4gYSBjb252ZXJzYXRpb24nKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW4sIC0tbmV0d29yayA8aWQ+JywgJ05ldHdvcmsgSUQnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWMsIC0tY29udmVyc2F0aW9uIDxpZD4nLCAnQ29udmVyc2F0aW9uIElEJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIuaW5mbygnSm9pbmluZyBjb252ZXJzYXRpb24uLi4nKTtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IEF1dGhIZWxwZXIuZW5zdXJlQXV0aGVudGljYXRlZChvcHRpb25zLm5ldHdvcmspO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoYC92MS9jb252ZXJzYXRpb25zLyR7b3B0aW9ucy5uZXR3b3JrfS8ke29wdGlvbnMuY29udmVyc2F0aW9ufS9qb2luYCk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBsb2dnZXIuc3VjY2Vzcygn4pyTIEpvaW5lZCBjb252ZXJzYXRpb24hJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvcjonLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGpvaW4gY29udmVyc2F0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3I6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbnZlcnNhdGlvbnNcbiAgICAuY29tbWFuZCgnZXhwbG9yZScpXG4gICAgLmRlc2NyaXB0aW9uKCdFeHBsb3JlIGNvbnZlcnNhdGlvbnMgd2l0aCBmaWx0ZXJzJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAub3B0aW9uKCctZiwgLS1maWx0ZXIgPHR5cGU+JywgJ0ZpbHRlciBieSB0eXBlOiB0b3BpYywgZGlyZWN0LCBncm91cCcpXG4gICAgLm9wdGlvbignLXQsIC0tdG9waWMgPGtleXdvcmQ+JywgJ1NlYXJjaCBieSBrZXl3b3JkJylcbiAgICAub3B0aW9uKCctcywgLS1zaG9ydCcsICdTaG93IHNob3J0IGZvcm1hdCcpXG4gICAgLm9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdDogdG9vbiwganNvbiwgaHVtYW4nLCAndG9vbicpXG4gICAgLm9wdGlvbignLS1odW1hbicsICdTaG9ydGN1dCBmb3IgLS1mb3JtYXQgaHVtYW4nKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnMuaHVtYW4gPyAnaHVtYW4nIDogb3B0aW9ucy5mb3JtYXQ7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IEF1dGhIZWxwZXIuZ2V0QXBpQ2xpZW50KCk7XG4gICAgICAgIGNvbnN0IHBhcmFtczogYW55ID0geyBzaG9ydDogb3B0aW9ucy5zaG9ydCA/ICd0cnVlJyA6IHVuZGVmaW5lZCB9O1xuXG4gICAgICAgIGlmIChvcHRpb25zLmZpbHRlcikgcGFyYW1zLmZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBpZiAob3B0aW9ucy50b3BpYykgcGFyYW1zLnRvcGljID0gb3B0aW9ucy50b3BpYztcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8YW55W10+KCcvdjEvbmV0d29ya3MvJyArIG9wdGlvbnMubmV0d29yayArICcvY29udmVyc2F0aW9ucycsIHBhcmFtcyk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSwgbnVsbCwgMikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnaHVtYW4nKSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ05vIGNvbnZlcnNhdGlvbnMgZm91bmQgbWF0Y2hpbmcgY3JpdGVyaWEuJyk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFRhYmxlKHtcbiAgICAgICAgICAgICAgaGVhZDogW2NoYWxrLmN5YW4oJ0lEJyksIGNoYWxrLmN5YW4oJ1RpdGxlJyksIGNoYWxrLmN5YW4oJ1R5cGUnKV0sXG4gICAgICAgICAgICAgIGNvbFdpZHRoczogWzIwLCA0MCwgMTVdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEuZm9yRWFjaChjb252ID0+IHRhYmxlLnB1c2goW2NvbnYuaWQsIGNvbnYudGl0bGUsIGNvbnYudHlwZV0pKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRhYmxlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlbmNvZGUocmVzcG9uc2UuZGF0YSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yOicsIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gZXhwbG9yZSBjb252ZXJzYXRpb25zJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3I6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGNvbnZlcnNhdGlvbnNcbiAgICAuY29tbWFuZCgnc3VtbWFyeScpXG4gICAgLmRlc2NyaXB0aW9uKCdHZXQgY29udmVyc2F0aW9uIGluc2lnaHRzIGFuZCBzdW1tYXJ5JylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1jLCAtLWNvbnZlcnNhdGlvbiA8aWQ+JywgJ0NvbnZlcnNhdGlvbiBJRCcpXG4gICAgLm9wdGlvbignLWwsIC0tbGltaXQgPG51bWJlcj4nLCAnTnVtYmVyIG9mIG1lc3NhZ2VzIHRvIGFuYWx5emUnLCAnNTAnKVxuICAgIC5vcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQ6IHRvb24sIGpzb24sIGh1bWFuJywgJ3Rvb24nKVxuICAgIC5vcHRpb24oJy0taHVtYW4nLCAnU2hvcnRjdXQgZm9yIC0tZm9ybWF0IGh1bWFuJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSBvcHRpb25zLmh1bWFuID8gJ2h1bWFuJyA6IG9wdGlvbnMuZm9ybWF0O1xuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBBdXRoSGVscGVyLmdldEFwaUNsaWVudCgpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8YW55PignL3YxL2NvbnZlcnNhdGlvbnMvJyArIG9wdGlvbnMubmV0d29yayArICcvJyArIG9wdGlvbnMuY29udmVyc2F0aW9uICsgJy9pbnNpZ2h0cycsIHtcbiAgICAgICAgICBsaW1pdDogb3B0aW9ucy5saW1pdFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhLCBudWxsLCAyKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdodW1hbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4uYm9sZChgXFxuQ29udmVyc2F0aW9uOiAke2RhdGEudG9waWN9XFxuYCkpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbignICBNZXNzYWdlczonKSwgZGF0YS5tZXNzYWdlQ291bnQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbignICBQYXJ0aWNpcGFudHM6JyksIGRhdGEucGFydGljaXBhbnRzKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJyAgVG9uZTonKSwgZGF0YS50b25lKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJyAgVG9wIEtleXdvcmRzOicpLCBkYXRhLmtleXdvcmRzLmpvaW4oJywgJykpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdy5ib2xkKCdLZXkgUG9pbnRzOicpKTtcbiAgICAgICAgICAgIGRhdGEua2V5d29yZHMuZm9yRWFjaCgoazogc3RyaW5nKSA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIC0nKSwgaykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlbmNvZGUocmVzcG9uc2UuZGF0YSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yOicsIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gZ2V0IGNvbnZlcnNhdGlvbiBzdW1tYXJ5Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3I6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xufVxuIl19
|