@oflow-ai/oflow-cli 0.1.2 → 0.1.4
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/dist/cli.js +37 -20
- package/dist/updater.d.ts +14 -2
- package/dist/updater.js +93 -12
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -55,13 +55,14 @@ let sessionStats = {
|
|
|
55
55
|
};
|
|
56
56
|
let contextTokens = 0;
|
|
57
57
|
let maxContextTokens = 128000;
|
|
58
|
-
|
|
58
|
+
let currentModel = 'gpt-4o';
|
|
59
|
+
function drawStatusBar() {
|
|
59
60
|
const terminalWidth = process.stdout.columns || 80;
|
|
60
61
|
const contextPercent = Math.min(100, Math.round((contextTokens / maxContextTokens) * 100));
|
|
61
62
|
const contextColor = contextPercent > 80 ? chalk_1.default.red : contextPercent > 50 ? chalk_1.default.yellow : chalk_1.default.green;
|
|
62
63
|
const thinkingStatus = currentShowThinking ? chalk_1.default.cyan('ON') : chalk_1.default.gray('OFF');
|
|
63
64
|
const statusLine1 = [
|
|
64
|
-
`${chalk_1.default.blue('Model:')} ${chalk_1.default.white(
|
|
65
|
+
`${chalk_1.default.blue('Model:')} ${chalk_1.default.white(currentModel)}`,
|
|
65
66
|
`${chalk_1.default.blue('Context:')} ${contextColor(contextPercent + '%')}`,
|
|
66
67
|
`${chalk_1.default.blue('Thinking:')} ${thinkingStatus}`
|
|
67
68
|
].join(' | ');
|
|
@@ -70,7 +71,6 @@ function drawStatusBar(model) {
|
|
|
70
71
|
? '...' + currentDir.slice(-(terminalWidth - 13))
|
|
71
72
|
: currentDir;
|
|
72
73
|
const statusLine2 = `${chalk_1.default.blue('Dir:')} ${chalk_1.default.gray(dirDisplay)}`;
|
|
73
|
-
console.log('');
|
|
74
74
|
console.log(chalk_1.default.gray('─'.repeat(Math.min(terminalWidth, 60))));
|
|
75
75
|
console.log(statusLine1);
|
|
76
76
|
console.log(statusLine2);
|
|
@@ -122,14 +122,31 @@ async function startInteractiveMode(options) {
|
|
|
122
122
|
console.log(chalk_1.default.red('Not authenticated. Run `oflow auth` first.'));
|
|
123
123
|
return;
|
|
124
124
|
}
|
|
125
|
-
//
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
125
|
+
// 显示当前版本
|
|
126
|
+
const currentVersion = await (0, updater_1.getCurrentVersion)();
|
|
127
|
+
const versionDisplay = 'v' + currentVersion;
|
|
128
|
+
console.log('');
|
|
129
|
+
console.log(chalk_1.default.bold.blue(' oflow CLI ' + chalk_1.default.white(versionDisplay)));
|
|
130
|
+
console.log('');
|
|
131
|
+
// 后台检测更新(不阻塞当前 session)
|
|
132
|
+
let updateNoticeShown = false;
|
|
133
|
+
(0, updater_1.checkForUpdates)().then(updateInfo => {
|
|
134
|
+
if (updateInfo.hasUpdate) {
|
|
135
|
+
console.log(chalk_1.default.yellow(' New version available: ' + updateInfo.latestVersion));
|
|
136
|
+
console.log(chalk_1.default.gray(' Updating in background...'));
|
|
137
|
+
// 后台更新
|
|
138
|
+
(0, updater_1.performBackgroundUpdate)((success) => {
|
|
139
|
+
if (success && !updateNoticeShown) {
|
|
140
|
+
updateNoticeShown = true;
|
|
141
|
+
console.log('');
|
|
142
|
+
console.log(chalk_1.default.green(' Update completed! Restart oflow to use v' + updateInfo.latestVersion));
|
|
143
|
+
console.log('');
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}).catch(() => {
|
|
148
|
+
// 忽略更新检查错误
|
|
149
|
+
});
|
|
133
150
|
if (options.sandbox || configManager.get('sandbox')) {
|
|
134
151
|
try {
|
|
135
152
|
sandboxExecutor = await (0, core_1.createSandboxExecutor)();
|
|
@@ -137,11 +154,11 @@ async function startInteractiveMode(options) {
|
|
|
137
154
|
catch { }
|
|
138
155
|
}
|
|
139
156
|
currentShowThinking = options.showThinking ?? configManager.getShowThinking();
|
|
140
|
-
|
|
141
|
-
if (
|
|
157
|
+
currentModel = options.model || configManager.getDefaultModel() || 'gpt-4o';
|
|
158
|
+
if (currentModel.includes('gpt-4') || currentModel.includes('gpt-4o')) {
|
|
142
159
|
maxContextTokens = 128000;
|
|
143
160
|
}
|
|
144
|
-
else if (
|
|
161
|
+
else if (currentModel.includes('deepseek')) {
|
|
145
162
|
maxContextTokens = 64000;
|
|
146
163
|
}
|
|
147
164
|
else {
|
|
@@ -149,7 +166,7 @@ async function startInteractiveMode(options) {
|
|
|
149
166
|
}
|
|
150
167
|
let provider;
|
|
151
168
|
try {
|
|
152
|
-
provider = (0, core_1.createAIProvider)(auth,
|
|
169
|
+
provider = (0, core_1.createAIProvider)(auth, currentModel);
|
|
153
170
|
}
|
|
154
171
|
catch (error) {
|
|
155
172
|
console.log(chalk_1.default.red('Failed to create AI provider: ' + (error instanceof Error ? error.message : String(error))));
|
|
@@ -195,7 +212,6 @@ async function startInteractiveMode(options) {
|
|
|
195
212
|
}
|
|
196
213
|
});
|
|
197
214
|
conversation.setSystemPrompt(getSystemPrompt());
|
|
198
|
-
console.log(chalk_1.default.bold.blue('\nWelcome to oflow CLI'));
|
|
199
215
|
console.log(chalk_1.default.gray('Type /help for commands, /exit to quit'));
|
|
200
216
|
console.log('');
|
|
201
217
|
const rl = readline.createInterface({
|
|
@@ -203,13 +219,14 @@ async function startInteractiveMode(options) {
|
|
|
203
219
|
output: process.stdout
|
|
204
220
|
});
|
|
205
221
|
const showPrompt = () => {
|
|
206
|
-
|
|
207
|
-
rl.setPrompt(chalk_1.default.green('\n> '));
|
|
222
|
+
rl.setPrompt(chalk_1.default.green('> '));
|
|
208
223
|
rl.prompt();
|
|
209
224
|
};
|
|
210
225
|
showPrompt();
|
|
211
226
|
rl.on('line', async (line) => {
|
|
212
227
|
const input = line.trim();
|
|
228
|
+
// 显示状态栏在输入框下面
|
|
229
|
+
drawStatusBar();
|
|
213
230
|
if (!input) {
|
|
214
231
|
showPrompt();
|
|
215
232
|
return;
|
|
@@ -228,7 +245,7 @@ async function startInteractiveMode(options) {
|
|
|
228
245
|
return;
|
|
229
246
|
}
|
|
230
247
|
if (input.toLowerCase() === '/update') {
|
|
231
|
-
await (0, updater_1.performUpdate)();
|
|
248
|
+
await (0, updater_1.performUpdate)(false);
|
|
232
249
|
showPrompt();
|
|
233
250
|
return;
|
|
234
251
|
}
|
|
@@ -468,4 +485,4 @@ Your primary goal is to help users safely and efficiently complete programming t
|
|
|
468
485
|
Current working directory: ${process.cwd()}
|
|
469
486
|
`;
|
|
470
487
|
}
|
|
471
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtIQSxvREFvTUM7QUF5REQsNENBdUNDO0FBdFpELG1EQUFxQztBQUNyQyxrREFBMEI7QUFDMUIsOENBQXNCO0FBQ3RCLHlDQVF3QjtBQUN4Qix5Q0FBaUU7QUFDakUsdUNBQTJEO0FBaUIzRCxJQUFJLGVBQWUsR0FBMkIsSUFBSSxDQUFDO0FBQ25ELElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLElBQUksWUFBWSxHQUFpQjtJQUMvQixjQUFjLEVBQUUsQ0FBQztJQUNqQixTQUFTLEVBQUUsRUFBRTtJQUNiLFlBQVksRUFBRSxFQUFFO0lBQ2hCLFdBQVcsRUFBRSxFQUFFO0lBQ2YsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO0NBQ3RCLENBQUM7QUFDRixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDdEIsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFFOUIsU0FBUyxhQUFhLENBQUMsS0FBYTtJQUNsQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDbkQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0YsTUFBTSxZQUFZLEdBQUcsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLEtBQUssQ0FBQztJQUN4RyxNQUFNLGNBQWMs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QUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNuRCxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxHQUFHLFFBQVEsR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLG1CQUFtQixDQUFDLENBQUM7WUFDbEcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLE1BQU0sQ0FBQywrQkFBK0IsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsZUFBZTtJQUN0QixPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZCQXFDb0IsT0FBTyxDQUFDLEdBQUcsRUFBRTtDQUN6QyxDQUFDO0FBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ3JlYWRsaW5lJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQge1xuICBnZXRDb25maWdNYW5hZ2VyLFxuICBjcmVhdGVBSVByb3ZpZGVyLFxuICBDb252ZXJzYXRpb24sXG4gIEFnZW50RmFjdG9yeSxcbiAgQWdlbnRUeXBlLFxuICBjcmVhdGVTYW5kYm94RXhlY3V0b3IsXG4gIFNhbmRib3hFeGVjdXRvclxufSBmcm9tICdAb2Zsb3ctYWkvY29yZSc7XG5pbXBvcnQgeyBpc1NsYXNoQ29tbWFuZCwgZXhlY3V0ZVNsYXNoQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0IHsgY2hlY2tGb3JVcGRhdGVzLCBwZXJmb3JtVXBkYXRlIH0gZnJvbSAnLi91cGRhdGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBDTElPcHRpb25zIHtcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIHlvbG8/OiBib29sZWFuO1xuICBzYW5kYm94PzogYm9vbGVhbjtcbiAgc2hvd1RoaW5raW5nPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFNlc3Npb25TdGF0cyB7XG4gIHRvb2xDYWxsc0NvdW50OiBudW1iZXI7XG4gIGZpbGVzUmVhZDogc3RyaW5nW107XG4gIGZpbGVzV3JpdHRlbjogc3RyaW5nW107XG4gIGNvbW1hbmRzUnVuOiBzdHJpbmdbXTtcbiAgc3RhcnRUaW1lOiBEYXRlO1xufVxuXG5sZXQgc2FuZGJveEV4ZWN1dG9yOiBTYW5kYm94RXhlY3V0b3IgfCBudWxsID0gbnVsbDtcbmxldCBjdXJyZW50U2hvd1RoaW5raW5nID0gZmFsc2U7XG5sZXQgc2Vzc2lvblN0YXRzOiBTZXNzaW9uU3RhdHMgPSB7XG4gIHRvb2xDYWxsc0NvdW50OiAwLFxuICBmaWxlc1JlYWQ6IFtdLFxuICBmaWxlc1dyaXR0ZW46IFtdLFxuICBjb21tYW5kc1J1bjogW10sXG4gIHN0YXJ0VGltZTogbmV3IERhdGUoKVxufTtcbmxldCBjb250ZXh0VG9rZW5zID0gMDtcbmxldCBtYXhDb250ZXh0VG9rZW5zID0gMTI4MDAwO1xuXG5mdW5jdGlvbiBkcmF3U3RhdHVzQmFyKG1vZGVsOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgdGVybWluYWxXaWR0aCA9IHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODA7XG4gIGNvbnN0IGNvbnRleHRQZXJjZW50ID0gTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKChjb250ZXh0VG9rZW5zIC8gbWF4Q29udGV4dFRva2VucykgKiAxMDApKTtcbiAgY29uc3QgY29udGV4dENvbG9yID0gY29udGV4dFBlcmNlbnQgPiA4MCA/IGNoYWxrLnJlZCA6IGNvbnRleHRQZXJjZW50ID4gNTAgPyBjaGFsay55ZWxsb3cgOiBjaGFsay5ncmVlbjtcbiAgY29uc3QgdGhpbmtpbmdTdGF0dXMgPSBjdXJyZW50U2hvd1RoaW5raW5nID8gY2hhbGsuY3lhbignT04nKSA6IGNoYWxrLmdyYXkoJ09GRicpO1xuICBcbiAgY29uc3Qgc3RhdHVzTGluZTEgPSBbXG4gICAgYCR7Y2hhbGsuYmx1ZSgnTW9kZWw6Jyl9ICR7Y2hhbGsud2hpdGUobW9kZWwpfWAsXG4gICAgYCR7Y2hhbGsuYmx1ZSgnQ29udGV4dDonKX0gJHtjb250ZXh0Q29sb3IoY29udGV4dFBlcmNlbnQgKyAnJScpfWAsXG4gICAgYCR7Y2hhbGsuYmx1ZSgnVGhpbmtpbmc6Jyl9ICR7dGhpbmtpbmdTdGF0dXN9YFxuICBdLmpvaW4oJyAgfCAgJyk7XG4gIFxuICBjb25zdCBjdXJyZW50RGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgZGlyRGlzcGxheSA9IGN1cnJlbnREaXIubGVuZ3RoID4gdGVybWluYWxXaWR0aCAtIDEwIFxuICAgID8gJy4uLicgKyBjdXJyZW50RGlyLnNsaWNlKC0odGVybWluYWxXaWR0aCAtIDEzKSlcbiAgICA6IGN1cnJlbnREaXI7XG4gIGNvbnN0IHN0YXR1c0xpbmUyID0gYCR7Y2hhbGsuYmx1ZSgnRGlyOicpfSAke2NoYWxrLmdyYXkoZGlyRGlzcGxheSl9YDtcbiAgXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgn4pSAJy5yZXBlYXQoTWF0aC5taW4odGVybWluYWxXaWR0aCwgNjApKSkpO1xuICBjb25zb2xlLmxvZyhzdGF0dXNMaW5lMSk7XG4gIGNvbnNvbGUubG9nKHN0YXR1c0xpbmUyKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgn4pSAJy5yZXBlYXQoTWF0aC5taW4odGVybWluYWxXaWR0aCwgNjApKSkpO1xufVxuXG5mdW5jdGlvbiBzaG93VGFza1N1bW1hcnkoKTogdm9pZCB7XG4gIGNvbnN0IGR1cmF0aW9uID0gTWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIHNlc3Npb25TdGF0cy5zdGFydFRpbWUuZ2V0VGltZSgpKSAvIDEwMDApO1xuICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihkdXJhdGlvbiAvIDYwKTtcbiAgY29uc3Qgc2Vjb25kcyA9IGR1cmF0aW9uICUgNjA7XG4gIFxuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuY3lhbign4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oJyAgICAgICAgICAgVGFzayBTdW1tYXJ5JykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oJ+KVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBcbiAgY29uc29sZS5sb2coYCR7Y2hhbGsud2hpdGUoJ0R1cmF0aW9uOicpfSAke2NoYWxrLnllbGxvdyhtaW51dGVzICsgJ20gJyArIHNlY29uZHMgKyAncycpfWApO1xuICBjb25zb2xlLmxvZyhgJHtjaGFsay53aGl0ZSgnVG9vbCBjYWxsczonKX0gJHtjaGFsay55ZWxsb3coc2Vzc2lvblN0YXRzLnRvb2xDYWxsc0NvdW50LnRvU3RyaW5nKCkpfWApO1xuICBcbiAgaWYgKHNlc3Npb25TdGF0cy5maWxlc1JlYWQubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGAke2NoYWxrLndoaXRlKCdGaWxlcyByZWFkOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLmxlbmd0aC50b1N0cmluZygpKX1gKTtcbiAgICBzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLnNsaWNlKDAsIDUpLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLSAnICsgZikpKTtcbiAgICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5sZW5ndGggPiA1KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLi4uIGFuZCAnICsgKHNlc3Npb25TdGF0cy5maWxlc1JlYWQubGVuZ3RoIC0gNSkgKyAnIG1vcmUnKSk7XG4gICAgfVxuICB9XG4gIFxuICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsud2hpdGUoJ0ZpbGVzIG1vZGlmaWVkOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLmxlbmd0aC50b1N0cmluZygpKX1gKTtcbiAgICBzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLnNsaWNlKDAsIDUpLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLSAnICsgZikpKTtcbiAgICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5sZW5ndGggPiA1KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLi4uIGFuZCAnICsgKHNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4ubGVuZ3RoIC0gNSkgKyAnIG1vcmUnKSk7XG4gICAgfVxuICB9XG4gIFxuICBpZiAoc2Vzc2lvblN0YXRzLmNvbW1hbmRzUnVuLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhgJHtjaGFsay53aGl0ZSgnQ29tbWFuZHMgcnVuOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuY29tbWFuZHNSdW4ubGVuZ3RoLnRvU3RyaW5nKCkpfWApO1xuICB9XG4gIFxuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuY3lhbign4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQJykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICBzZXNzaW9uU3RhdHMgPSB7XG4gICAgdG9vbENhbGxzQ291bnQ6IDAsXG4gICAgZmlsZXNSZWFkOiBbXSxcbiAgICBmaWxlc1dyaXR0ZW46IFtdLFxuICAgIGNvbW1hbmRzUnVuOiBbXSxcbiAgICBzdGFydFRpbWU6IG5ldyBEYXRlKClcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0SW50ZXJhY3RpdmVNb2RlKG9wdGlvbnM6IENMSU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGlmICghYXV0aCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnTm90IGF1dGhlbnRpY2F0ZWQuIFJ1biBgb2Zsb3cgYXV0aGAgZmlyc3QuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciB1cGRhdGVzXG4gIGNvbnN0IHVwZGF0ZUluZm8gPSBhd2FpdCBjaGVja0ZvclVwZGF0ZXMoKTtcbiAgaWYgKHVwZGF0ZUluZm8uaGFzVXBkYXRlKSB7XG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnTmV3IHZlcnNpb24gYXZhaWxhYmxlOiAnICsgdXBkYXRlSW5mby5sYXRlc3RWZXJzaW9uKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdSdW4gL3VwZGF0ZSB0byB1cGRhdGUnKSk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2FuZGJveCB8fCBjb25maWdNYW5hZ2VyLmdldCgnc2FuZGJveCcpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNhbmRib3hFeGVjdXRvciA9IGF3YWl0IGNyZWF0ZVNhbmRib3hFeGVjdXRvcigpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIGN1cnJlbnRTaG93VGhpbmtpbmcgPSBvcHRpb25zLnNob3dUaGlua2luZyA/PyBjb25maWdNYW5hZ2VyLmdldFNob3dUaGlua2luZygpO1xuICBjb25zdCBtb2RlbCA9IG9wdGlvbnMubW9kZWwgfHwgY29uZmlnTWFuYWdlci5nZXREZWZhdWx0TW9kZWwoKSB8fCAnZ3B0LTRvJztcblxuICBpZiAobW9kZWwuaW5jbHVkZXMoJ2dwdC00JykgfHwgbW9kZWwuaW5jbHVkZXMoJ2dwdC00bycpKSB7XG4gICAgbWF4Q29udGV4dFRva2VucyA9IDEyODAwMDtcbiAgfSBlbHNlIGlmIChtb2RlbC5pbmNsdWRlcygnZGVlcHNlZWsnKSkge1xuICAgIG1heENvbnRleHRUb2tlbnMgPSA2NDAwMDtcbiAgfSBlbHNlIHtcbiAgICBtYXhDb250ZXh0VG9rZW5zID0gMTI4MDAwO1xuICB9XG5cbiAgbGV0IHByb3ZpZGVyO1xuICB0cnkge1xuICAgIHByb3ZpZGVyID0gY3JlYXRlQUlQcm92aWRlcihhdXRoLCBtb2RlbCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdGYWlsZWQgdG8gY3JlYXRlIEFJIHByb3ZpZGVyOiAnICsgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb252ZXJzYXRpb24gPSBuZXcgQ29udmVyc2F0aW9uKHtcbiAgICBwcm92aWRlcixcbiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9jZXNzLmN3ZCgpLFxuICAgIG1heFRva2VuczogY29uZmlnTWFuYWdlci5nZXQoJ21heFRva2VucycpLFxuICAgIHRlbXBlcmF0dXJlOiBjb25maWdNYW5hZ2VyLmdldCgndGVtcGVyYXR1cmUnKSxcbiAgICBzaG93VGhpbmtpbmc6IGN1cnJlbnRTaG93VGhpbmtpbmcsXG4gICAgb25Db250ZW50OiAoY29udGVudCkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoY2hhbGsud2hpdGUoY29udGVudCkpO1xuICAgIH0sXG4gICAgb25UaGlua2luZzogKHRoaW5raW5nKSA9PiB7XG4gICAgICBpZiAoY3VycmVudFNob3dUaGlua2luZykge1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaGFsay5tYWdlbnRhKHRoaW5raW5nKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvblRvb2xDYWxsOiAodG9vbENhbGwpID0+IHtcbiAgICAgIHNlc3Npb25TdGF0cy50b29sQ2FsbHNDb3VudCsrO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbignXFxuVXNpbmcgdG9vbDogJyArIHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUpKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBKU09OLnBhcnNlKHRvb2xDYWxsLmZ1bmN0aW9uLmFyZ3VtZW50cyk7XG4gICAgICAgIGlmICh0b29sQ2FsbC5mdW5jdGlvbi5uYW1lID09PSAncmVhZF9maWxlJyAmJiBhcmdzLmFic29sdXRlX3BhdGgpIHtcbiAgICAgICAgICBpZiAoIXNlc3Npb25TdGF0cy5maWxlc1JlYWQuaW5jbHVkZXMoYXJncy5hYnNvbHV0ZV9wYXRoKSkge1xuICAgICAgICAgICAgc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5wdXNoKGFyZ3MuYWJzb2x1dGVfcGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCh0b29sQ2FsbC5mdW5jdGlvbi5uYW1lID09PSAnd3JpdGVfZmlsZScgfHwgdG9vbENhbGwuZnVuY3Rpb24ubmFtZSA9PT0gJ3JlcGxhY2UnKSAmJiBhcmdzLmZpbGVfcGF0aCkge1xuICAgICAgICAgIGlmICghc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5pbmNsdWRlcyhhcmdzLmZpbGVfcGF0aCkpIHtcbiAgICAgICAgICAgIHNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4ucHVzaChhcmdzLmZpbGVfcGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUgPT09ICdydW5fc2hlbGxfY29tbWFuZCcgJiYgYXJncy5jb21tYW5kKSB7XG4gICAgICAgICAgc2Vzc2lvblN0YXRzLmNvbW1hbmRzUnVuLnB1c2goYXJncy5jb21tYW5kKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7fVxuICAgIH0sXG4gICAgb25Ub29sUmVzdWx0OiAocmVzdWx0KSA9PiB7XG4gICAgICBjb250ZXh0VG9rZW5zICs9IE1hdGguY2VpbChyZXN1bHQubGVuZ3RoIC8gNCk7XG4gICAgfVxuICB9KTtcblxuICBjb252ZXJzYXRpb24uc2V0U3lzdGVtUHJvbXB0KGdldFN5c3RlbVByb21wdCgpKTtcblxuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmJsdWUoJ1xcbldlbGNvbWUgdG8gb2Zsb3cgQ0xJJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUeXBlIC9oZWxwIGZvciBjb21tYW5kcywgL2V4aXQgdG8gcXVpdCcpKTtcbiAgY29uc29sZS5sb2coJycpO1xuXG4gIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHtcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcbiAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0XG4gIH0pO1xuXG4gIGNvbnN0IHNob3dQcm9tcHQgPSAoKSA9PiB7XG4gICAgZHJhd1N0YXR1c0Jhcihtb2RlbCk7XG4gICAgcmwuc2V0UHJvbXB0KGNoYWxrLmdyZWVuKCdcXG4+ICcpKTtcbiAgICBybC5wcm9tcHQoKTtcbiAgfTtcblxuICBzaG93UHJvbXB0KCk7XG5cbiAgcmwub24oJ2xpbmUnLCBhc3luYyAobGluZSkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gbGluZS50cmltKCk7XG4gICAgXG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc1NsYXNoQ29tbWFuZChpbnB1dCkpIHtcbiAgICAgIGlmIChpbnB1dC50b0xvd2VyQ2FzZSgpID09PSAnL3RoaW5raW5nJykge1xuICAgICAgICBjdXJyZW50U2hvd1RoaW5raW5nID0gIWN1cnJlbnRTaG93VGhpbmtpbmc7XG4gICAgICAgIGNvbmZpZ01hbmFnZXIuc2V0U2hvd1RoaW5raW5nKGN1cnJlbnRTaG93VGhpbmtpbmcpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignVGhpbmtpbmc6ICcgKyAoY3VycmVudFNob3dUaGlua2luZyA/ICdPTicgOiAnT0ZGJykpKTtcbiAgICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnB1dC50b0xvd2VyQ2FzZSgpID09PSAnL3N1bW1hcnknKSB7XG4gICAgICAgIHNob3dUYXNrU3VtbWFyeSgpO1xuICAgICAgICBzaG93UHJvbXB0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlucHV0LnRvTG93ZXJDYXNlKCkgPT09ICcvdXBkYXRlJykge1xuICAgICAgICBhd2FpdCBwZXJmb3JtVXBkYXRlKCk7XG4gICAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzaG91bGRDb250aW51ZSA9IGF3YWl0IGV4ZWN1dGVTbGFzaENvbW1hbmQoaW5wdXQsIHtcbiAgICAgICAgY29udmVyc2F0aW9uLFxuICAgICAgICBybCxcbiAgICAgICAgY29uZmlnTWFuYWdlclxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmICghc2hvdWxkQ29udGludWUpIHtcbiAgICAgICAgcmwuY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICBzaG93UHJvbXB0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgICAgYXdhaXQgaGFuZGxlQWdlbnRDYWxsKGlucHV0LCBwcm92aWRlcik7XG4gICAgICBzaG93UHJvbXB0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJyEnKSkge1xuICAgICAgYXdhaXQgZXhlY3V0ZVNoZWxsQ29tbWFuZChpbnB1dC5zbGljZSgxKSwgc2FuZGJveEV4ZWN1dG9yKTtcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9jZXNzZWRJbnB1dCA9IGF3YWl0IHByb2Nlc3NGaWxlUmVmZXJlbmNlcyhpbnB1dCk7XG4gICAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnVGhpbmtpbmcuLi4nKS5zdGFydCgpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbnZlcnNhdGlvbi5zZW5kTWVzc2FnZShwcm9jZXNzZWRJbnB1dCk7XG4gICAgICBzcGlubmVyLnN0b3AoKTtcbiAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgIFxuICAgICAgaWYgKHNlc3Npb25TdGF0cy50b29sQ2FsbHNDb3VudCA+PSAzKSB7XG4gICAgICAgIHNob3dUYXNrU3VtbWFyeSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dFRva2VucyArPSBNYXRoLmNlaWwocmVzcG9uc2UubGVuZ3RoIC8gNCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc3Bpbm5lci5mYWlsKCdFcnJvcicpO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yTWVzc2FnZSkpO1xuICAgICAgXG4gICAgICBpZiAoZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCc0MDAnKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ0NoZWNrIEFQSSBrZXkgYW5kIG1vZGVsIG5hbWUsIG9yIHJ1biBcIm9mbG93IGF1dGhcIicpKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3JNZXNzYWdlLmluY2x1ZGVzKCc0MDEnKSkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCwgcnVuIFwib2Zsb3cgYXV0aFwiJykpO1xuICAgICAgfSBlbHNlIGlmIChlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJzQyOScpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnUmF0ZSBsaW1pdCwgcGxlYXNlIHdhaXQgYW5kIHJldHJ5JykpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBzaG93UHJvbXB0KCk7XG4gICAgfVxuICB9KTtcblxuICBybC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuR29vZGJ5ZSFcXG4nKSk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcblxuICBwcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuR29vZGJ5ZSFcXG4nKSk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQWdlbnRDYWxsKGlucHV0OiBzdHJpbmcsIHByb3ZpZGVyOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgbWF0Y2ggPSBpbnB1dC5tYXRjaCgvXlxcJChcXHcrKD86LVxcdyspKilcXHMqKC4qKSQvKTtcbiAgXG4gIGlmICghbWF0Y2gpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ0ludmFsaWQgZm9ybWF0LiBVc2U6ICRhZ2VudC10eXBlIFwidGFza1wiJykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0FnZW50czogZ2VuZXJhbC1wdXJwb3NlLCBwbGFuLWFnZW50LCBleHBsb3JlLWFnZW50LCBjb2RlLXJldmlld2VyLCBmcm9udGVuZC10ZXN0ZXInKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWdlbnRUeXBlID0gbWF0Y2hbMV0gYXMgQWdlbnRUeXBlO1xuICBjb25zdCB0YXNrID0gbWF0Y2hbMl0ucmVwbGFjZSgvXltcIiddfFtcIiddJC9nLCAnJyk7XG5cbiAgaWYgKCF0YXNrKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdQbGVhc2UgcHJvdmlkZSBhIHRhc2suJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYWdlbnRGYWN0b3J5ID0gbmV3IEFnZW50RmFjdG9yeShwcm92aWRlciwgcHJvY2Vzcy5jd2QoKSk7XG4gICAgY29uc3QgYWdlbnQgPSBhZ2VudEZhY3RvcnkuY3JlYXRlQWdlbnQoYWdlbnRUeXBlKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5TdGFydGluZyAnICsgYWdlbnRUeXBlICsgJyBhZ2VudC4uLicpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUYXNrOiAnICsgdGFzayArICdcXG4nKSk7XG5cbiAgICBjb25zdCBzcGlubmVyID0gb3JhKCdBZ2VudCB3b3JraW5nLi4uJykuc3RhcnQoKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhZ2VudC5leGVjdXRlKHRhc2ssICh1cGRhdGUpID0+IHtcbiAgICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUodXBkYXRlKTtcbiAgICAgIHNwaW5uZXIuc3RhcnQoKTtcbiAgICB9KTtcblxuICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgIFxuICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1xcbkFnZW50IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKSk7XG4gICAgICBpZiAocmVzdWx0LmZpbGVzTW9kaWZpZWQgJiYgcmVzdWx0LmZpbGVzTW9kaWZpZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdGaWxlcyBtb2RpZmllZDonKSk7XG4gICAgICAgIHJlc3VsdC5maWxlc01vZGlmaWVkLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIC0gJyArIGYpKSk7XG4gICAgICAgIHNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4ucHVzaCguLi5yZXN1bHQuZmlsZXNNb2RpZmllZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnXFxuQWdlbnQgZW5jb3VudGVyZWQgZXJyb3JzOicpKTtcbiAgICAgIHJlc3VsdC5lcnJvcnM/LmZvckVhY2goZSA9PiBjb25zb2xlLmxvZyhjaGFsay5yZWQoJyAgLSAnICsgZSkpKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Lm91dHB1dCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnXFxuT3V0cHV0OicpKTtcbiAgICAgIGNvbnNvbGUubG9nKHJlc3VsdC5vdXRwdXQpO1xuICAgIH1cblxuICAgIHNob3dUYXNrU3VtbWFyeSgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU2luZ2xlQ29tbWFuZChwcm9tcHQ6IHN0cmluZywgb3B0aW9uczogQ0xJT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb25maWdNYW5hZ2VyID0gZ2V0Q29uZmlnTWFuYWdlcigpO1xuICBjb25zdCBhdXRoID0gY29uZmlnTWFuYWdlci5nZXRBdXRoKCk7XG5cbiAgaWYgKCFhdXRoKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdOb3QgYXV0aGVudGljYXRlZC4gUnVuIGBvZmxvdyBhdXRoYCBmaXJzdC4nKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2FuZGJveCB8fCBjb25maWdNYW5hZ2VyLmdldCgnc2FuZGJveCcpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNhbmRib3hFeGVjdXRvciA9IGF3YWl0IGNyZWF0ZVNhbmRib3hFeGVjdXRvcigpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIGNvbnN0IG1vZGVsID0gb3B0aW9ucy5tb2RlbCB8fCBjb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpIHx8ICdncHQtNG8nO1xuICBjb25zdCBwcm92aWRlciA9IGNyZWF0ZUFJUHJvdmlkZXIoYXV0aCwgbW9kZWwpO1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBuZXcgQ29udmVyc2F0aW9uKHtcbiAgICBwcm92aWRlcixcbiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9jZXNzLmN3ZCgpLFxuICAgIG1heFRva2VuczogY29uZmlnTWFuYWdlci5nZXQoJ21heFRva2VucycpLFxuICAgIHRlbXBlcmF0dXJlOiBjb25maWdNYW5hZ2VyLmdldCgndGVtcGVyYXR1cmUnKSxcbiAgICBvbkNvbnRlbnQ6IChjb250ZW50KSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaGFsay53aGl0ZShjb250ZW50KSk7XG4gICAgfVxuICB9KTtcblxuICBjb252ZXJzYXRpb24uc2V0U3lzdGVtUHJvbXB0KGdldFN5c3RlbVByb21wdCgpKTtcbiAgY29uc3QgcHJvY2Vzc2VkSW5wdXQgPSBhd2FpdCBwcm9jZXNzRmlsZVJlZmVyZW5jZXMocHJvbXB0KTtcbiAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnUHJvY2Vzc2luZy4uLicpLnN0YXJ0KCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjb252ZXJzYXRpb24uc2VuZE1lc3NhZ2UocHJvY2Vzc2VkSW5wdXQpO1xuICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBzcGlubmVyLmZhaWwoJ0Vycm9yJyk7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVTaGVsbENvbW1hbmQoY29tbWFuZDogc3RyaW5nLCBzYW5kYm94PzogU2FuZGJveEV4ZWN1dG9yIHwgbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHNwYXduIH0gPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7XG4gIHNlc3Npb25TdGF0cy5jb21tYW5kc1J1bi5wdXNoKGNvbW1hbmQpO1xuICBcbiAgaWYgKHNhbmRib3ggJiYgc2FuZGJveFsnY29uZmlnJ10/LmJhY2tlbmQgIT09ICdub25lJykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzYW5kYm94LmV4ZWN1dGUoY29tbWFuZCwgcHJvY2Vzcy5jd2QoKSk7XG4gICAgICBpZiAocmVzdWx0LnN0ZG91dCkgY29uc29sZS5sb2cocmVzdWx0LnN0ZG91dCk7XG4gICAgICBpZiAocmVzdWx0LnN0ZGVycikgY29uc29sZS5lcnJvcihyZXN1bHQuc3RkZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3QgaXNXaW5kb3dzID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbiAgICBjb25zdCBzaGVsbCA9IGlzV2luZG93cyA/ICdwb3dlcnNoZWxsLmV4ZScgOiAnL2Jpbi9iYXNoJztcbiAgICBjb25zdCBhcmdzID0gaXNXaW5kb3dzID8gWyctTm9Qcm9maWxlJywgJy1Db21tYW5kJywgY29tbWFuZF0gOiBbJy1jJywgY29tbWFuZF07XG5cbiAgICBjb25zdCBwcm9jID0gc3Bhd24oc2hlbGwsIGFyZ3MsIHtcbiAgICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKClcbiAgICB9KTtcblxuICAgIHByb2Mub24oJ2Nsb3NlJywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICBwcm9jLm9uKCdlcnJvcicsIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ0ZhaWxlZDogJyArIGVyci5tZXNzYWdlKSk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzRmlsZVJlZmVyZW5jZXMoaW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVSZWZSZWdleCA9IC9AKFteXFxzXSspL2c7XG4gIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaEFsbChmaWxlUmVmUmVnZXgpO1xuICBsZXQgcmVzdWx0ID0gaW5wdXQ7XG4gIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcblxuICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IG1hdGNoWzFdO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKG1hdGNoWzBdLCAnXFxuW0ZpbGU6ICcgKyBmaWxlUGF0aCArICddXFxuJyArIGNvbnRlbnQgKyAnXFxuW0VuZCBvZiBmaWxlXVxcbicpO1xuICAgICAgc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5wdXNoKGZpbGVQYXRoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnV2FybmluZzogQ291bGQgbm90IHJlYWQgZmlsZSAnICsgZmlsZVBhdGgpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXRTeXN0ZW1Qcm9tcHQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBZb3UgYXJlIG9mbG93IENMSSwgYW4gaW50ZXJhY3RpdmUgQ0xJIGFnZW50IHNwZWNpYWxpemluZyBpbiBzb2Z0d2FyZSBlbmdpbmVlcmluZyB0YXNrcy5cblxuWW91ciBwcmltYXJ5IGdvYWwgaXMgdG8gaGVscCB1c2VycyBzYWZlbHkgYW5kIGVmZmljaWVudGx5IGNvbXBsZXRlIHByb2dyYW1taW5nIHRhc2tzLlxuXG4jIENvcmUgQ2FwYWJpbGl0aWVzXG4tIFJlYWQsIHdyaXRlLCBhbmQgZWRpdCBmaWxlc1xuLSBFeGVjdXRlIHNoZWxsIGNvbW1hbmRzXG4tIFNlYXJjaCBhbmQgYW5hbHl6ZSBjb2RlXG4tIFdlYiBzZWFyY2ggYW5kIGZldGNoIGNvbnRlbnRcbi0gTWFuYWdlIHByb2plY3Qgc3RydWN0dXJlXG4tIExhdW5jaCBzcGVjaWFsaXplZCBzdWItYWdlbnRzXG5cbiMgVG9vbHMgQXZhaWxhYmxlXG4tIHJlYWRfZmlsZTogUmVhZCBmaWxlIGNvbnRlbnRzXG4tIHdyaXRlX2ZpbGU6IFdyaXRlIHRvIGZpbGVzXG4tIGxpc3RfZGlyZWN0b3J5OiBMaXN0IGRpcmVjdG9yeSBjb250ZW50c1xuLSBnbG9iOiBGaW5kIGZpbGVzIGJ5IHBhdHRlcm5cbi0gc2VhcmNoX2ZpbGVfY29udGVudDogU2VhcmNoIHdpdGhpbiBmaWxlc1xuLSBydW5fc2hlbGxfY29tbWFuZDogRXhlY3V0ZSBzaGVsbCBjb21tYW5kc1xuLSB3ZWJfc2VhcmNoOiBTZWFyY2ggdGhlIHdlYlxuLSB3ZWJfZmV0Y2g6IEZldGNoIHdlYiBjb250ZW50XG4tIHJlcGxhY2U6IFJlcGxhY2UgdGV4dCBpbiBmaWxlc1xuLSBpbWFnZV9yZWFkOiBBbmFseXplIGltYWdlc1xuLSBwZGZfZXh0cmFjdDogRXh0cmFjdCBjb250ZW50IGZyb20gUERGc1xuLSBhc2tfdXNlcl9xdWVzdGlvbjogQXNrIHVzZXIgZm9yIGlucHV0XG4tIHRhc2s6IExhdW5jaCBzdWItYWdlbnRzXG4tIHNhdmVfbWVtb3J5OiBTYXZlIGluZm9ybWF0aW9uIGZvciBmdXR1cmUgc2Vzc2lvbnNcblxuIyBHdWlkZWxpbmVzXG4xLiBCZSBjb25jaXNlIGFuZCBoZWxwZnVsXG4yLiBBbHdheXMgZXhwbGFpbiB3aGF0IHlvdSdyZSBkb2luZyBiZWZvcmUgdXNpbmcgdG9vbHNcbjMuIEFzayBmb3IgY2xhcmlmaWNhdGlvbiB3aGVuIG5lZWRlZFxuNC4gUHJlZmVyIGVkaXRpbmcgZXhpc3RpbmcgZmlsZXMgb3ZlciBjcmVhdGluZyBuZXcgb25lc1xuNS4gVXNlIGFwcHJvcHJpYXRlIHRvb2xzIGZvciBlYWNoIHRhc2tcbjYuIFZlcmlmeSBjaGFuZ2VzIGFmdGVyIG1ha2luZyB0aGVtXG43LiBBZnRlciBjb21wbGV0aW5nIGEgY29tcGxleCB0YXNrLCBwcm92aWRlIGEgYnJpZWYgc3VtbWFyeVxuXG5DdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5OiAke3Byb2Nlc3MuY3dkKCl9XG5gO1xufVxuIl19
|
|
488
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtIQSxvREF3TkM7QUF5REQsNENBdUNDO0FBMWFELG1EQUFxQztBQUNyQyxrREFBMEI7QUFDMUIsOENBQXNCO0FBQ3RCLHlDQVF3QjtBQUN4Qix5Q0FBaUU7QUFDakUsdUNBQXVHO0FBaUJ2RyxJQUFJLGVBQWUsR0FBMkIsSUFBSSxDQUFDO0FBQ25ELElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLElBQUksWUFBWSxHQUFpQjtJQUMvQixjQUFjLEVBQUUsQ0FBQztJQUNqQixTQUFTLEVBQUUsRUFBRTtJQUNiLFlBQVksRUFBRSxFQUFFO0lBQ2hCLFdBQVcsRUFBRSxFQUFFO0lBQ2YsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO0NBQ3RCLENBQUM7QUFDRixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDdEIsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFDOUIsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBRTVCLFNBQVMsYUFBYTtJQUNwQixNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDbkQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0YsTUFBTSxZQUFZLEdBQUcsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBSyxDQUFDLEtBQUss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O1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsZUFBZTtJQUN0QixPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZCQXFDb0IsT0FBTyxDQUFDLEdBQUcsRUFBRTtDQUN6QyxDQUFDO0FBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gJ3JlYWRsaW5lJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQge1xuICBnZXRDb25maWdNYW5hZ2VyLFxuICBjcmVhdGVBSVByb3ZpZGVyLFxuICBDb252ZXJzYXRpb24sXG4gIEFnZW50RmFjdG9yeSxcbiAgQWdlbnRUeXBlLFxuICBjcmVhdGVTYW5kYm94RXhlY3V0b3IsXG4gIFNhbmRib3hFeGVjdXRvclxufSBmcm9tICdAb2Zsb3ctYWkvY29yZSc7XG5pbXBvcnQgeyBpc1NsYXNoQ29tbWFuZCwgZXhlY3V0ZVNsYXNoQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMnO1xuaW1wb3J0IHsgY2hlY2tGb3JVcGRhdGVzLCBwZXJmb3JtVXBkYXRlLCBnZXRDdXJyZW50VmVyc2lvbiwgcGVyZm9ybUJhY2tncm91bmRVcGRhdGUgfSBmcm9tICcuL3VwZGF0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIENMSU9wdGlvbnMge1xuICBtb2RlbD86IHN0cmluZztcbiAgeW9sbz86IGJvb2xlYW47XG4gIHNhbmRib3g/OiBib29sZWFuO1xuICBzaG93VGhpbmtpbmc/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgU2Vzc2lvblN0YXRzIHtcbiAgdG9vbENhbGxzQ291bnQ6IG51bWJlcjtcbiAgZmlsZXNSZWFkOiBzdHJpbmdbXTtcbiAgZmlsZXNXcml0dGVuOiBzdHJpbmdbXTtcbiAgY29tbWFuZHNSdW46IHN0cmluZ1tdO1xuICBzdGFydFRpbWU6IERhdGU7XG59XG5cbmxldCBzYW5kYm94RXhlY3V0b3I6IFNhbmRib3hFeGVjdXRvciB8IG51bGwgPSBudWxsO1xubGV0IGN1cnJlbnRTaG93VGhpbmtpbmcgPSBmYWxzZTtcbmxldCBzZXNzaW9uU3RhdHM6IFNlc3Npb25TdGF0cyA9IHtcbiAgdG9vbENhbGxzQ291bnQ6IDAsXG4gIGZpbGVzUmVhZDogW10sXG4gIGZpbGVzV3JpdHRlbjogW10sXG4gIGNvbW1hbmRzUnVuOiBbXSxcbiAgc3RhcnRUaW1lOiBuZXcgRGF0ZSgpXG59O1xubGV0IGNvbnRleHRUb2tlbnMgPSAwO1xubGV0IG1heENvbnRleHRUb2tlbnMgPSAxMjgwMDA7XG5sZXQgY3VycmVudE1vZGVsID0gJ2dwdC00byc7XG5cbmZ1bmN0aW9uIGRyYXdTdGF0dXNCYXIoKTogdm9pZCB7XG4gIGNvbnN0IHRlcm1pbmFsV2lkdGggPSBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwO1xuICBjb25zdCBjb250ZXh0UGVyY2VudCA9IE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCgoY29udGV4dFRva2VucyAvIG1heENvbnRleHRUb2tlbnMpICogMTAwKSk7XG4gIGNvbnN0IGNvbnRleHRDb2xvciA9IGNvbnRleHRQZXJjZW50ID4gODAgPyBjaGFsay5yZWQgOiBjb250ZXh0UGVyY2VudCA+IDUwID8gY2hhbGsueWVsbG93IDogY2hhbGsuZ3JlZW47XG4gIGNvbnN0IHRoaW5raW5nU3RhdHVzID0gY3VycmVudFNob3dUaGlua2luZyA/IGNoYWxrLmN5YW4oJ09OJykgOiBjaGFsay5ncmF5KCdPRkYnKTtcbiAgXG4gIGNvbnN0IHN0YXR1c0xpbmUxID0gW1xuICAgIGAke2NoYWxrLmJsdWUoJ01vZGVsOicpfSAke2NoYWxrLndoaXRlKGN1cnJlbnRNb2RlbCl9YCxcbiAgICBgJHtjaGFsay5ibHVlKCdDb250ZXh0OicpfSAke2NvbnRleHRDb2xvcihjb250ZXh0UGVyY2VudCArICclJyl9YCxcbiAgICBgJHtjaGFsay5ibHVlKCdUaGlua2luZzonKX0gJHt0aGlua2luZ1N0YXR1c31gXG4gIF0uam9pbignICB8ICAnKTtcbiAgXG4gIGNvbnN0IGN1cnJlbnREaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBkaXJEaXNwbGF5ID0gY3VycmVudERpci5sZW5ndGggPiB0ZXJtaW5hbFdpZHRoIC0gMTAgXG4gICAgPyAnLi4uJyArIGN1cnJlbnREaXIuc2xpY2UoLSh0ZXJtaW5hbFdpZHRoIC0gMTMpKVxuICAgIDogY3VycmVudERpcjtcbiAgY29uc3Qgc3RhdHVzTGluZTIgPSBgJHtjaGFsay5ibHVlKCdEaXI6Jyl9ICR7Y2hhbGsuZ3JheShkaXJEaXNwbGF5KX1gO1xuICBcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgn4pSAJy5yZXBlYXQoTWF0aC5taW4odGVybWluYWxXaWR0aCwgNjApKSkpO1xuICBjb25zb2xlLmxvZyhzdGF0dXNMaW5lMSk7XG4gIGNvbnNvbGUubG9nKHN0YXR1c0xpbmUyKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgn4pSAJy5yZXBlYXQoTWF0aC5taW4odGVybWluYWxXaWR0aCwgNjApKSkpO1xufVxuXG5mdW5jdGlvbiBzaG93VGFza1N1bW1hcnkoKTogdm9pZCB7XG4gIGNvbnN0IGR1cmF0aW9uID0gTWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIHNlc3Npb25TdGF0cy5zdGFydFRpbWUuZ2V0VGltZSgpKSAvIDEwMDApO1xuICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihkdXJhdGlvbiAvIDYwKTtcbiAgY29uc3Qgc2Vjb25kcyA9IGR1cmF0aW9uICUgNjA7XG4gIFxuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuY3lhbign4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oJyAgICAgICAgICAgVGFzayBTdW1tYXJ5JykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkLmN5YW4oJ+KVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBcbiAgY29uc29sZS5sb2coYCR7Y2hhbGsud2hpdGUoJ0R1cmF0aW9uOicpfSAke2NoYWxrLnllbGxvdyhtaW51dGVzICsgJ20gJyArIHNlY29uZHMgKyAncycpfWApO1xuICBjb25zb2xlLmxvZyhgJHtjaGFsay53aGl0ZSgnVG9vbCBjYWxsczonKX0gJHtjaGFsay55ZWxsb3coc2Vzc2lvblN0YXRzLnRvb2xDYWxsc0NvdW50LnRvU3RyaW5nKCkpfWApO1xuICBcbiAgaWYgKHNlc3Npb25TdGF0cy5maWxlc1JlYWQubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGAke2NoYWxrLndoaXRlKCdGaWxlcyByZWFkOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLmxlbmd0aC50b1N0cmluZygpKX1gKTtcbiAgICBzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLnNsaWNlKDAsIDUpLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLSAnICsgZikpKTtcbiAgICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5sZW5ndGggPiA1KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLi4uIGFuZCAnICsgKHNlc3Npb25TdGF0cy5maWxlc1JlYWQubGVuZ3RoIC0gNSkgKyAnIG1vcmUnKSk7XG4gICAgfVxuICB9XG4gIFxuICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsud2hpdGUoJ0ZpbGVzIG1vZGlmaWVkOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLmxlbmd0aC50b1N0cmluZygpKX1gKTtcbiAgICBzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLnNsaWNlKDAsIDUpLmZvckVhY2goZiA9PiBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLSAnICsgZikpKTtcbiAgICBpZiAoc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5sZW5ndGggPiA1KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICAgLi4uIGFuZCAnICsgKHNlc3Npb25TdGF0cy5maWxlc1dyaXR0ZW4ubGVuZ3RoIC0gNSkgKyAnIG1vcmUnKSk7XG4gICAgfVxuICB9XG4gIFxuICBpZiAoc2Vzc2lvblN0YXRzLmNvbW1hbmRzUnVuLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhgJHtjaGFsay53aGl0ZSgnQ29tbWFuZHMgcnVuOicpfSAke2NoYWxrLnllbGxvdyhzZXNzaW9uU3RhdHMuY29tbWFuZHNSdW4ubGVuZ3RoLnRvU3RyaW5nKCkpfWApO1xuICB9XG4gIFxuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQuY3lhbign4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQJykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICBzZXNzaW9uU3RhdHMgPSB7XG4gICAgdG9vbENhbGxzQ291bnQ6IDAsXG4gICAgZmlsZXNSZWFkOiBbXSxcbiAgICBmaWxlc1dyaXR0ZW46IFtdLFxuICAgIGNvbW1hbmRzUnVuOiBbXSxcbiAgICBzdGFydFRpbWU6IG5ldyBEYXRlKClcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0SW50ZXJhY3RpdmVNb2RlKG9wdGlvbnM6IENMSU9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGlmICghYXV0aCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnTm90IGF1dGhlbnRpY2F0ZWQuIFJ1biBgb2Zsb3cgYXV0aGAgZmlyc3QuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIOaYvuekuuW9k+WJjeeJiOacrFxuICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IGF3YWl0IGdldEN1cnJlbnRWZXJzaW9uKCk7XG4gIGNvbnN0IHZlcnNpb25EaXNwbGF5ID0gJ3YnICsgY3VycmVudFZlcnNpb247XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZC5ibHVlKCcgIG9mbG93IENMSSAnICsgY2hhbGsud2hpdGUodmVyc2lvbkRpc3BsYXkpKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcblxuICAvLyDlkI7lj7Dmo4DmtYvmm7TmlrDvvIjkuI3pmLvloZ7lvZPliY0gc2Vzc2lvbu+8iVxuICBsZXQgdXBkYXRlTm90aWNlU2hvd24gPSBmYWxzZTtcbiAgY2hlY2tGb3JVcGRhdGVzKCkudGhlbih1cGRhdGVJbmZvID0+IHtcbiAgICBpZiAodXBkYXRlSW5mby5oYXNVcGRhdGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnICBOZXcgdmVyc2lvbiBhdmFpbGFibGU6ICcgKyB1cGRhdGVJbmZvLmxhdGVzdFZlcnNpb24pKTtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgVXBkYXRpbmcgaW4gYmFja2dyb3VuZC4uLicpKTtcbiAgICAgIFxuICAgICAgLy8g5ZCO5Y+w5pu05pawXG4gICAgICBwZXJmb3JtQmFja2dyb3VuZFVwZGF0ZSgoc3VjY2VzcykgPT4ge1xuICAgICAgICBpZiAoc3VjY2VzcyAmJiAhdXBkYXRlTm90aWNlU2hvd24pIHtcbiAgICAgICAgICB1cGRhdGVOb3RpY2VTaG93biA9IHRydWU7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCcgIFVwZGF0ZSBjb21wbGV0ZWQhIFJlc3RhcnQgb2Zsb3cgdG8gdXNlIHYnICsgdXBkYXRlSW5mby5sYXRlc3RWZXJzaW9uKSk7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pLmNhdGNoKCgpID0+IHtcbiAgICAvLyDlv73nlaXmm7TmlrDmo4Dmn6XplJnor69cbiAgfSk7XG5cbiAgaWYgKG9wdGlvbnMuc2FuZGJveCB8fCBjb25maWdNYW5hZ2VyLmdldCgnc2FuZGJveCcpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNhbmRib3hFeGVjdXRvciA9IGF3YWl0IGNyZWF0ZVNhbmRib3hFeGVjdXRvcigpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIGN1cnJlbnRTaG93VGhpbmtpbmcgPSBvcHRpb25zLnNob3dUaGlua2luZyA/PyBjb25maWdNYW5hZ2VyLmdldFNob3dUaGlua2luZygpO1xuICBjdXJyZW50TW9kZWwgPSBvcHRpb25zLm1vZGVsIHx8IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgfHwgJ2dwdC00byc7XG5cbiAgaWYgKGN1cnJlbnRNb2RlbC5pbmNsdWRlcygnZ3B0LTQnKSB8fCBjdXJyZW50TW9kZWwuaW5jbHVkZXMoJ2dwdC00bycpKSB7XG4gICAgbWF4Q29udGV4dFRva2VucyA9IDEyODAwMDtcbiAgfSBlbHNlIGlmIChjdXJyZW50TW9kZWwuaW5jbHVkZXMoJ2RlZXBzZWVrJykpIHtcbiAgICBtYXhDb250ZXh0VG9rZW5zID0gNjQwMDA7XG4gIH0gZWxzZSB7XG4gICAgbWF4Q29udGV4dFRva2VucyA9IDEyODAwMDtcbiAgfVxuXG4gIGxldCBwcm92aWRlcjtcbiAgdHJ5IHtcbiAgICBwcm92aWRlciA9IGNyZWF0ZUFJUHJvdmlkZXIoYXV0aCwgY3VycmVudE1vZGVsKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ0ZhaWxlZCB0byBjcmVhdGUgQUkgcHJvdmlkZXI6ICcgKyAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IG5ldyBDb252ZXJzYXRpb24oe1xuICAgIHByb3ZpZGVyLFxuICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHByb2Nlc3MuY3dkKCksXG4gICAgbWF4VG9rZW5zOiBjb25maWdNYW5hZ2VyLmdldCgnbWF4VG9rZW5zJyksXG4gICAgdGVtcGVyYXR1cmU6IGNvbmZpZ01hbmFnZXIuZ2V0KCd0ZW1wZXJhdHVyZScpLFxuICAgIHNob3dUaGlua2luZzogY3VycmVudFNob3dUaGlua2luZyxcbiAgICBvbkNvbnRlbnQ6IChjb250ZW50KSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaGFsay53aGl0ZShjb250ZW50KSk7XG4gICAgfSxcbiAgICBvblRoaW5raW5nOiAodGhpbmtpbmcpID0+IHtcbiAgICAgIGlmIChjdXJyZW50U2hvd1RoaW5raW5nKSB7XG4gICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLm1hZ2VudGEodGhpbmtpbmcpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uVG9vbENhbGw6ICh0b29sQ2FsbCkgPT4ge1xuICAgICAgc2Vzc2lvblN0YXRzLnRvb2xDYWxsc0NvdW50Kys7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5Vc2luZyB0b29sOiAnICsgdG9vbENhbGwuZnVuY3Rpb24ubmFtZSkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXJncyA9IEpTT04ucGFyc2UodG9vbENhbGwuZnVuY3Rpb24uYXJndW1lbnRzKTtcbiAgICAgICAgaWYgKHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUgPT09ICdyZWFkX2ZpbGUnICYmIGFyZ3MuYWJzb2x1dGVfcGF0aCkge1xuICAgICAgICAgIGlmICghc2Vzc2lvblN0YXRzLmZpbGVzUmVhZC5pbmNsdWRlcyhhcmdzLmFic29sdXRlX3BhdGgpKSB7XG4gICAgICAgICAgICBzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLnB1c2goYXJncy5hYnNvbHV0ZV9wYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKHRvb2xDYWxsLmZ1bmN0aW9uLm5hbWUgPT09ICd3cml0ZV9maWxlJyB8fCB0b29sQ2FsbC5mdW5jdGlvbi5uYW1lID09PSAncmVwbGFjZScpICYmIGFyZ3MuZmlsZV9wYXRoKSB7XG4gICAgICAgICAgaWYgKCFzZXNzaW9uU3RhdHMuZmlsZXNXcml0dGVuLmluY2x1ZGVzKGFyZ3MuZmlsZV9wYXRoKSkge1xuICAgICAgICAgICAgc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5wdXNoKGFyZ3MuZmlsZV9wYXRoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodG9vbENhbGwuZnVuY3Rpb24ubmFtZSA9PT0gJ3J1bl9zaGVsbF9jb21tYW5kJyAmJiBhcmdzLmNvbW1hbmQpIHtcbiAgICAgICAgICBzZXNzaW9uU3RhdHMuY29tbWFuZHNSdW4ucHVzaChhcmdzLmNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHt9XG4gICAgfSxcbiAgICBvblRvb2xSZXN1bHQ6IChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnRleHRUb2tlbnMgKz0gTWF0aC5jZWlsKHJlc3VsdC5sZW5ndGggLyA0KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnZlcnNhdGlvbi5zZXRTeXN0ZW1Qcm9tcHQoZ2V0U3lzdGVtUHJvbXB0KCkpO1xuXG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1R5cGUgL2hlbHAgZm9yIGNvbW1hbmRzLCAvZXhpdCB0byBxdWl0JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG5cbiAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXRcbiAgfSk7XG5cbiAgY29uc3Qgc2hvd1Byb21wdCA9ICgpID0+IHtcbiAgICBybC5zZXRQcm9tcHQoY2hhbGsuZ3JlZW4oJz4gJykpO1xuICAgIHJsLnByb21wdCgpO1xuICB9O1xuXG4gIHNob3dQcm9tcHQoKTtcblxuICBybC5vbignbGluZScsIGFzeW5jIChsaW5lKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBsaW5lLnRyaW0oKTtcbiAgICBcbiAgICAvLyDmmL7npLrnirbmgIHmoI/lnKjovpPlhaXmoYbkuIvpnaJcbiAgICBkcmF3U3RhdHVzQmFyKCk7XG4gICAgXG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc1NsYXNoQ29tbWFuZChpbnB1dCkpIHtcbiAgICAgIGlmIChpbnB1dC50b0xvd2VyQ2FzZSgpID09PSAnL3RoaW5raW5nJykge1xuICAgICAgICBjdXJyZW50U2hvd1RoaW5raW5nID0gIWN1cnJlbnRTaG93VGhpbmtpbmc7XG4gICAgICAgIGNvbmZpZ01hbmFnZXIuc2V0U2hvd1RoaW5raW5nKGN1cnJlbnRTaG93VGhpbmtpbmcpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignVGhpbmtpbmc6ICcgKyAoY3VycmVudFNob3dUaGlua2luZyA/ICdPTicgOiAnT0ZGJykpKTtcbiAgICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnB1dC50b0xvd2VyQ2FzZSgpID09PSAnL3N1bW1hcnknKSB7XG4gICAgICAgIHNob3dUYXNrU3VtbWFyeSgpO1xuICAgICAgICBzaG93UHJvbXB0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlucHV0LnRvTG93ZXJDYXNlKCkgPT09ICcvdXBkYXRlJykge1xuICAgICAgICBhd2FpdCBwZXJmb3JtVXBkYXRlKGZhbHNlKTtcbiAgICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNob3VsZENvbnRpbnVlID0gYXdhaXQgZXhlY3V0ZVNsYXNoQ29tbWFuZChpbnB1dCwge1xuICAgICAgICBjb252ZXJzYXRpb24sXG4gICAgICAgIHJsLFxuICAgICAgICBjb25maWdNYW5hZ2VyXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgaWYgKCFzaG91bGRDb250aW51ZSkge1xuICAgICAgICBybC5jbG9zZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnJCcpKSB7XG4gICAgICBhd2FpdCBoYW5kbGVBZ2VudENhbGwoaW5wdXQsIHByb3ZpZGVyKTtcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aCgnIScpKSB7XG4gICAgICBhd2FpdCBleGVjdXRlU2hlbGxDb21tYW5kKGlucHV0LnNsaWNlKDEpLCBzYW5kYm94RXhlY3V0b3IpO1xuICAgICAgc2hvd1Byb21wdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2Nlc3NlZElucHV0ID0gYXdhaXQgcHJvY2Vzc0ZpbGVSZWZlcmVuY2VzKGlucHV0KTtcbiAgICBjb25zdCBzcGlubmVyID0gb3JhKCdUaGlua2luZy4uLicpLnN0YXJ0KCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29udmVyc2F0aW9uLnNlbmRNZXNzYWdlKHByb2Nlc3NlZElucHV0KTtcbiAgICAgIHNwaW5uZXIuc3RvcCgpO1xuICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgXG4gICAgICBpZiAoc2Vzc2lvblN0YXRzLnRvb2xDYWxsc0NvdW50ID49IDMpIHtcbiAgICAgICAgc2hvd1Rhc2tTdW1tYXJ5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0VG9rZW5zICs9IE1hdGguY2VpbChyZXNwb25zZS5sZW5ndGggLyA0KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgc2hvd1Byb21wdCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0Vycm9yJyk7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3JNZXNzYWdlKSk7XG4gICAgICBcbiAgICAgIGlmIChlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJzQwMCcpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnQ2hlY2sgQVBJIGtleSBhbmQgbW9kZWwgbmFtZSwgb3IgcnVuIFwib2Zsb3cgYXV0aFwiJykpO1xuICAgICAgfSBlbHNlIGlmIChlcnJvck1lc3NhZ2UuaW5jbHVkZXMoJzQwMScpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnQXV0aGVudGljYXRpb24gZmFpbGVkLCBydW4gXCJvZmxvdyBhdXRoXCInKSk7XG4gICAgICB9IGVsc2UgaWYgKGVycm9yTWVzc2FnZS5pbmNsdWRlcygnNDI5JykpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdSYXRlIGxpbWl0LCBwbGVhc2Ugd2FpdCBhbmQgcmV0cnknKSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHNob3dQcm9tcHQoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJsLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5Hb29kYnllIVxcbicpKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH0pO1xuXG4gIHByb2Nlc3Mub24oJ1NJR0lOVCcsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5Hb29kYnllIVxcbicpKTtcbiAgICBwcm9jZXNzLmV4aXQoMCk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVBZ2VudENhbGwoaW5wdXQ6IHN0cmluZywgcHJvdmlkZXI6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoKC9eXFwkKFxcdysoPzotXFx3KykqKVxccyooLiopJC8pO1xuICBcbiAgaWYgKCFtYXRjaCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnSW52YWxpZCBmb3JtYXQuIFVzZTogJGFnZW50LXR5cGUgXCJ0YXNrXCInKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnQWdlbnRzOiBnZW5lcmFsLXB1cnBvc2UsIHBsYW4tYWdlbnQsIGV4cGxvcmUtYWdlbnQsIGNvZGUtcmV2aWV3ZXIsIGZyb250ZW5kLXRlc3RlcicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhZ2VudFR5cGUgPSBtYXRjaFsxXSBhcyBBZ2VudFR5cGU7XG4gIGNvbnN0IHRhc2sgPSBtYXRjaFsyXS5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csICcnKTtcblxuICBpZiAoIXRhc2spIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1BsZWFzZSBwcm92aWRlIGEgdGFzay4nKSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhZ2VudEZhY3RvcnkgPSBuZXcgQWdlbnRGYWN0b3J5KHByb3ZpZGVyLCBwcm9jZXNzLmN3ZCgpKTtcbiAgICBjb25zdCBhZ2VudCA9IGFnZW50RmFjdG9yeS5jcmVhdGVBZ2VudChhZ2VudFR5cGUpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ1xcblN0YXJ0aW5nICcgKyBhZ2VudFR5cGUgKyAnIGFnZW50Li4uJykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1Rhc2s6ICcgKyB0YXNrICsgJ1xcbicpKTtcblxuICAgIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0FnZW50IHdvcmtpbmcuLi4nKS5zdGFydCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFnZW50LmV4ZWN1dGUodGFzaywgKHVwZGF0ZSkgPT4ge1xuICAgICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSh1cGRhdGUpO1xuICAgICAgc3Bpbm5lci5zdGFydCgpO1xuICAgIH0pO1xuXG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgXG4gICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignXFxuQWdlbnQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpKTtcbiAgICAgIGlmIChyZXN1bHQuZmlsZXNNb2RpZmllZCAmJiByZXN1bHQuZmlsZXNNb2RpZmllZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0ZpbGVzIG1vZGlmaWVkOicpKTtcbiAgICAgICAgcmVzdWx0LmZpbGVzTW9kaWZpZWQuZm9yRWFjaChmID0+IGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgLSAnICsgZikpKTtcbiAgICAgICAgc2Vzc2lvblN0YXRzLmZpbGVzV3JpdHRlbi5wdXNoKC4uLnJlc3VsdC5maWxlc01vZGlmaWVkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdcXG5BZ2VudCBlbmNvdW50ZXJlZCBlcnJvcnM6JykpO1xuICAgICAgcmVzdWx0LmVycm9ycz8uZm9yRWFjaChlID0+IGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnICAtICcgKyBlKSkpO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQub3V0cHV0KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdcXG5PdXRwdXQ6JykpO1xuICAgICAgY29uc29sZS5sb2cocmVzdWx0Lm91dHB1dCk7XG4gICAgfVxuXG4gICAgc2hvd1Rhc2tTdW1tYXJ5KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSkpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TaW5nbGVDb21tYW5kKHByb21wdDogc3RyaW5nLCBvcHRpb25zOiBDTElPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBnZXRDb25maWdNYW5hZ2VyKCk7XG4gIGNvbnN0IGF1dGggPSBjb25maWdNYW5hZ2VyLmdldEF1dGgoKTtcblxuICBpZiAoIWF1dGgpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ05vdCBhdXRoZW50aWNhdGVkLiBSdW4gYG9mbG93IGF1dGhgIGZpcnN0LicpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAob3B0aW9ucy5zYW5kYm94IHx8IGNvbmZpZ01hbmFnZXIuZ2V0KCdzYW5kYm94JykpIHtcbiAgICB0cnkge1xuICAgICAgc2FuZGJveEV4ZWN1dG9yID0gYXdhaXQgY3JlYXRlU2FuZGJveEV4ZWN1dG9yKCk7XG4gICAgfSBjYXRjaCB7fVxuICB9XG5cbiAgY29uc3QgbW9kZWwgPSBvcHRpb25zLm1vZGVsIHx8IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgfHwgJ2dwdC00byc7XG4gIGNvbnN0IHByb3ZpZGVyID0gY3JlYXRlQUlQcm92aWRlcihhdXRoLCBtb2RlbCk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IG5ldyBDb252ZXJzYXRpb24oe1xuICAgIHByb3ZpZGVyLFxuICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHByb2Nlc3MuY3dkKCksXG4gICAgbWF4VG9rZW5zOiBjb25maWdNYW5hZ2VyLmdldCgnbWF4VG9rZW5zJyksXG4gICAgdGVtcGVyYXR1cmU6IGNvbmZpZ01hbmFnZXIuZ2V0KCd0ZW1wZXJhdHVyZScpLFxuICAgIG9uQ29udGVudDogKGNvbnRlbnQpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNoYWxrLndoaXRlKGNvbnRlbnQpKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnZlcnNhdGlvbi5zZXRTeXN0ZW1Qcm9tcHQoZ2V0U3lzdGVtUHJvbXB0KCkpO1xuICBjb25zdCBwcm9jZXNzZWRJbnB1dCA9IGF3YWl0IHByb2Nlc3NGaWxlUmVmZXJlbmNlcyhwcm9tcHQpO1xuICBjb25zdCBzcGlubmVyID0gb3JhKCdQcm9jZXNzaW5nLi4uJykuc3RhcnQoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNvbnZlcnNhdGlvbi5zZW5kTWVzc2FnZShwcm9jZXNzZWRJbnB1dCk7XG4gICAgc3Bpbm5lci5zdG9wKCk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnRXJyb3InKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVNoZWxsQ29tbWFuZChjb21tYW5kOiBzdHJpbmcsIHNhbmRib3g/OiBTYW5kYm94RXhlY3V0b3IgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgc3Bhd24gfSA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcbiAgc2Vzc2lvblN0YXRzLmNvbW1hbmRzUnVuLnB1c2goY29tbWFuZCk7XG4gIFxuICBpZiAoc2FuZGJveCAmJiBzYW5kYm94Wydjb25maWcnXT8uYmFja2VuZCAhPT0gJ25vbmUnKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNhbmRib3guZXhlY3V0ZShjb21tYW5kLCBwcm9jZXNzLmN3ZCgpKTtcbiAgICAgIGlmIChyZXN1bHQuc3Rkb3V0KSBjb25zb2xlLmxvZyhyZXN1bHQuc3Rkb3V0KTtcbiAgICAgIGlmIChyZXN1bHQuc3RkZXJyKSBjb25zb2xlLmVycm9yKHJlc3VsdC5zdGRlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgIGNvbnN0IHNoZWxsID0gaXNXaW5kb3dzID8gJ3Bvd2Vyc2hlbGwuZXhlJyA6ICcvYmluL2Jhc2gnO1xuICAgIGNvbnN0IGFyZ3MgPSBpc1dpbmRvd3MgPyBbJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBjb21tYW5kXSA6IFsnLWMnLCBjb21tYW5kXTtcblxuICAgIGNvbnN0IHByb2MgPSBzcGF3bihzaGVsbCwgYXJncywge1xuICAgICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKVxuICAgIH0pO1xuXG4gICAgcHJvYy5vbignY2xvc2UnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgIHByb2Mub24oJ2Vycm9yJywgKGVycjogRXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnRmFpbGVkOiAnICsgZXJyLm1lc3NhZ2UpKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGaWxlUmVmZXJlbmNlcyhpbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZmlsZVJlZlJlZ2V4ID0gL0AoW15cXHNdKykvZztcbiAgY29uc3QgbWF0Y2hlcyA9IGlucHV0Lm1hdGNoQWxsKGZpbGVSZWZSZWdleCk7XG4gIGxldCByZXN1bHQgPSBpbnB1dDtcbiAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gbWF0Y2hbMV07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UobWF0Y2hbMF0sICdcXG5bRmlsZTogJyArIGZpbGVQYXRoICsgJ11cXG4nICsgY29udGVudCArICdcXG5bRW5kIG9mIGZpbGVdXFxuJyk7XG4gICAgICBzZXNzaW9uU3RhdHMuZmlsZXNSZWFkLnB1c2goZmlsZVBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdXYXJuaW5nOiBDb3VsZCBub3QgcmVhZCBmaWxlICcgKyBmaWxlUGF0aCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGdldFN5c3RlbVByb21wdCgpOiBzdHJpbmcge1xuICByZXR1cm4gYFlvdSBhcmUgb2Zsb3cgQ0xJLCBhbiBpbnRlcmFjdGl2ZSBDTEkgYWdlbnQgc3BlY2lhbGl6aW5nIGluIHNvZnR3YXJlIGVuZ2luZWVyaW5nIHRhc2tzLlxuXG5Zb3VyIHByaW1hcnkgZ29hbCBpcyB0byBoZWxwIHVzZXJzIHNhZmVseSBhbmQgZWZmaWNpZW50bHkgY29tcGxldGUgcHJvZ3JhbW1pbmcgdGFza3MuXG5cbiMgQ29yZSBDYXBhYmlsaXRpZXNcbi0gUmVhZCwgd3JpdGUsIGFuZCBlZGl0IGZpbGVzXG4tIEV4ZWN1dGUgc2hlbGwgY29tbWFuZHNcbi0gU2VhcmNoIGFuZCBhbmFseXplIGNvZGVcbi0gV2ViIHNlYXJjaCBhbmQgZmV0Y2ggY29udGVudFxuLSBNYW5hZ2UgcHJvamVjdCBzdHJ1Y3R1cmVcbi0gTGF1bmNoIHNwZWNpYWxpemVkIHN1Yi1hZ2VudHNcblxuIyBUb29scyBBdmFpbGFibGVcbi0gcmVhZF9maWxlOiBSZWFkIGZpbGUgY29udGVudHNcbi0gd3JpdGVfZmlsZTogV3JpdGUgdG8gZmlsZXNcbi0gbGlzdF9kaXJlY3Rvcnk6IExpc3QgZGlyZWN0b3J5IGNvbnRlbnRzXG4tIGdsb2I6IEZpbmQgZmlsZXMgYnkgcGF0dGVyblxuLSBzZWFyY2hfZmlsZV9jb250ZW50OiBTZWFyY2ggd2l0aGluIGZpbGVzXG4tIHJ1bl9zaGVsbF9jb21tYW5kOiBFeGVjdXRlIHNoZWxsIGNvbW1hbmRzXG4tIHdlYl9zZWFyY2g6IFNlYXJjaCB0aGUgd2ViXG4tIHdlYl9mZXRjaDogRmV0Y2ggd2ViIGNvbnRlbnRcbi0gcmVwbGFjZTogUmVwbGFjZSB0ZXh0IGluIGZpbGVzXG4tIGltYWdlX3JlYWQ6IEFuYWx5emUgaW1hZ2VzXG4tIHBkZl9leHRyYWN0OiBFeHRyYWN0IGNvbnRlbnQgZnJvbSBQREZzXG4tIGFza191c2VyX3F1ZXN0aW9uOiBBc2sgdXNlciBmb3IgaW5wdXRcbi0gdGFzazogTGF1bmNoIHN1Yi1hZ2VudHNcbi0gc2F2ZV9tZW1vcnk6IFNhdmUgaW5mb3JtYXRpb24gZm9yIGZ1dHVyZSBzZXNzaW9uc1xuXG4jIEd1aWRlbGluZXNcbjEuIEJlIGNvbmNpc2UgYW5kIGhlbHBmdWxcbjIuIEFsd2F5cyBleHBsYWluIHdoYXQgeW91J3JlIGRvaW5nIGJlZm9yZSB1c2luZyB0b29sc1xuMy4gQXNrIGZvciBjbGFyaWZpY2F0aW9uIHdoZW4gbmVlZGVkXG40LiBQcmVmZXIgZWRpdGluZyBleGlzdGluZyBmaWxlcyBvdmVyIGNyZWF0aW5nIG5ldyBvbmVzXG41LiBVc2UgYXBwcm9wcmlhdGUgdG9vbHMgZm9yIGVhY2ggdGFza1xuNi4gVmVyaWZ5IGNoYW5nZXMgYWZ0ZXIgbWFraW5nIHRoZW1cbjcuIEFmdGVyIGNvbXBsZXRpbmcgYSBjb21wbGV4IHRhc2ssIHByb3ZpZGUgYSBicmllZiBzdW1tYXJ5XG5cbkN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnk6ICR7cHJvY2Vzcy5jd2QoKX1cbmA7XG59Il19
|
package/dist/updater.d.ts
CHANGED
|
@@ -3,15 +3,27 @@ interface UpdateInfo {
|
|
|
3
3
|
currentVersion: string;
|
|
4
4
|
latestVersion: string;
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* 获取当前安装的版本
|
|
8
|
+
*/
|
|
9
|
+
export declare function getCurrentVersion(): Promise<string>;
|
|
6
10
|
/**
|
|
7
11
|
* 检查是否有更新
|
|
8
12
|
*/
|
|
9
13
|
export declare function checkForUpdates(): Promise<UpdateInfo>;
|
|
10
14
|
/**
|
|
11
|
-
*
|
|
15
|
+
* 后台执行更新(不阻塞当前 session)
|
|
16
|
+
*/
|
|
17
|
+
export declare function performBackgroundUpdate(onComplete?: (success: boolean) => void): void;
|
|
18
|
+
/**
|
|
19
|
+
* 手动执行更新
|
|
12
20
|
*/
|
|
13
|
-
export declare function performUpdate(): Promise<{
|
|
21
|
+
export declare function performUpdate(silent?: boolean): Promise<{
|
|
14
22
|
success: boolean;
|
|
15
23
|
message: string;
|
|
16
24
|
}>;
|
|
25
|
+
/**
|
|
26
|
+
* 检查更新是否已完成
|
|
27
|
+
*/
|
|
28
|
+
export declare function isUpdateCompleted(): boolean;
|
|
17
29
|
export {};
|
package/dist/updater.js
CHANGED
|
@@ -3,25 +3,51 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getCurrentVersion = getCurrentVersion;
|
|
6
7
|
exports.checkForUpdates = checkForUpdates;
|
|
8
|
+
exports.performBackgroundUpdate = performBackgroundUpdate;
|
|
7
9
|
exports.performUpdate = performUpdate;
|
|
10
|
+
exports.isUpdateCompleted = isUpdateCompleted;
|
|
8
11
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
12
|
const child_process_1 = require("child_process");
|
|
10
13
|
const util_1 = require("util");
|
|
11
14
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
12
15
|
const PACKAGE_NAME = '@oflow-ai/oflow-cli';
|
|
13
16
|
const NPM_REGISTRY = 'https://registry.npmjs.org';
|
|
17
|
+
let updateInProgress = false;
|
|
18
|
+
let updateCompleted = false;
|
|
14
19
|
/**
|
|
15
20
|
* 获取当前安装的版本
|
|
16
21
|
*/
|
|
17
22
|
async function getCurrentVersion() {
|
|
18
23
|
try {
|
|
19
|
-
|
|
20
|
-
|
|
24
|
+
// 从已安装的包获取版本
|
|
25
|
+
const { stdout } = await execAsync(`npm list -g ${PACKAGE_NAME} --depth=0 --json`, {
|
|
26
|
+
timeout: 5000
|
|
27
|
+
});
|
|
28
|
+
const data = JSON.parse(stdout);
|
|
29
|
+
const version = data?.dependencies?.[PACKAGE_NAME]?.version;
|
|
30
|
+
if (version) {
|
|
31
|
+
return version;
|
|
32
|
+
}
|
|
21
33
|
}
|
|
22
34
|
catch {
|
|
23
|
-
|
|
35
|
+
// 忽略错误,尝试其他方式
|
|
36
|
+
}
|
|
37
|
+
// 备用方案:从本地 package.json 读取
|
|
38
|
+
try {
|
|
39
|
+
const fs = require('fs');
|
|
40
|
+
const path = require('path');
|
|
41
|
+
const packageJsonPath = path.join(__dirname, '..', 'package.json');
|
|
42
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
43
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
44
|
+
return packageJson.version;
|
|
45
|
+
}
|
|
24
46
|
}
|
|
47
|
+
catch {
|
|
48
|
+
// 忽略错误
|
|
49
|
+
}
|
|
50
|
+
return '0.0.0';
|
|
25
51
|
}
|
|
26
52
|
/**
|
|
27
53
|
* 从npm获取最新版本
|
|
@@ -34,7 +60,6 @@ async function getLatestVersion() {
|
|
|
34
60
|
return stdout.trim();
|
|
35
61
|
}
|
|
36
62
|
catch {
|
|
37
|
-
// 如果npm命令失败,尝试直接访问registry
|
|
38
63
|
try {
|
|
39
64
|
const https = require('https');
|
|
40
65
|
return new Promise((resolve, reject) => {
|
|
@@ -102,25 +127,81 @@ async function checkForUpdates() {
|
|
|
102
127
|
};
|
|
103
128
|
}
|
|
104
129
|
/**
|
|
105
|
-
*
|
|
130
|
+
* 后台执行更新(不阻塞当前 session)
|
|
131
|
+
*/
|
|
132
|
+
function performBackgroundUpdate(onComplete) {
|
|
133
|
+
if (updateInProgress || updateCompleted) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
updateInProgress = true;
|
|
137
|
+
// 使用 spawn 在后台执行更新
|
|
138
|
+
const updateProcess = (0, child_process_1.spawn)('npm', ['install', '-g', `${PACKAGE_NAME}@latest`], {
|
|
139
|
+
detached: true,
|
|
140
|
+
stdio: 'ignore',
|
|
141
|
+
shell: true
|
|
142
|
+
});
|
|
143
|
+
updateProcess.unref();
|
|
144
|
+
updateProcess.on('error', () => {
|
|
145
|
+
updateInProgress = false;
|
|
146
|
+
onComplete?.(false);
|
|
147
|
+
});
|
|
148
|
+
// 设置超时检查
|
|
149
|
+
setTimeout(async () => {
|
|
150
|
+
try {
|
|
151
|
+
const { stdout } = await execAsync(`npm list -g ${PACKAGE_NAME} --depth=0 --json`, {
|
|
152
|
+
timeout: 5000
|
|
153
|
+
});
|
|
154
|
+
const data = JSON.parse(stdout);
|
|
155
|
+
const newVersion = data?.dependencies?.[PACKAGE_NAME]?.version;
|
|
156
|
+
if (newVersion) {
|
|
157
|
+
const updateInfo = await checkForUpdates();
|
|
158
|
+
if (!updateInfo.hasUpdate) {
|
|
159
|
+
updateCompleted = true;
|
|
160
|
+
updateInProgress = false;
|
|
161
|
+
onComplete?.(true);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// 忽略错误
|
|
168
|
+
}
|
|
169
|
+
updateInProgress = false;
|
|
170
|
+
onComplete?.(false);
|
|
171
|
+
}, 30000);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* 手动执行更新
|
|
106
175
|
*/
|
|
107
|
-
async function performUpdate() {
|
|
108
|
-
|
|
176
|
+
async function performUpdate(silent = false) {
|
|
177
|
+
if (!silent) {
|
|
178
|
+
console.log(chalk_1.default.cyan('\nUpdating oflow CLI...\n'));
|
|
179
|
+
}
|
|
109
180
|
try {
|
|
110
181
|
const { stdout, stderr } = await execAsync(`npm install -g ${PACKAGE_NAME}@latest`, {
|
|
111
182
|
timeout: 60000
|
|
112
183
|
});
|
|
113
|
-
|
|
114
|
-
|
|
184
|
+
if (!silent) {
|
|
185
|
+
console.log(chalk_1.default.green('\noflow CLI updated successfully!'));
|
|
186
|
+
console.log(chalk_1.default.gray('Please restart oflow to use the new version.\n'));
|
|
187
|
+
}
|
|
115
188
|
return { success: true, message: 'Update completed' };
|
|
116
189
|
}
|
|
117
190
|
catch (error) {
|
|
118
191
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
119
|
-
|
|
120
|
-
|
|
192
|
+
if (!silent) {
|
|
193
|
+
console.log(chalk_1.default.red('\nUpdate failed'));
|
|
194
|
+
console.log(chalk_1.default.gray('You can manually update with: npm install -g @oflow-ai/oflow-cli@latest\n'));
|
|
195
|
+
}
|
|
121
196
|
return { success: false, message: errorMsg };
|
|
122
197
|
}
|
|
123
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* 检查更新是否已完成
|
|
201
|
+
*/
|
|
202
|
+
function isUpdateCompleted() {
|
|
203
|
+
return updateCompleted;
|
|
204
|
+
}
|
|
124
205
|
/**
|
|
125
206
|
* 获取缓存的更新信息
|
|
126
207
|
*/
|
|
@@ -164,4 +245,4 @@ function setCachedUpdateInfo(key, value) {
|
|
|
164
245
|
// Ignore cache errors
|
|
165
246
|
}
|
|
166
247
|
}
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91cGRhdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBK0VBLDBDQTRCQztBQUtELHNDQW1CQztBQW5JRCxrREFBMEI7QUFDMUIsaURBQXFDO0FBQ3JDLCtCQUFpQztBQUVqQyxNQUFNLFNBQVMsR0FBRyxJQUFBLGdCQUFTLEVBQUMsb0JBQUksQ0FBQyxDQUFDO0FBRWxDLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDO0FBQzNDLE1BQU0sWUFBWSxHQUFHLDRCQUE0QixDQUFDO0FBUWxEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLGlCQUFpQjtJQUM5QixJQUFJLENBQUM7UUFDSCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNsRCxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsZ0JBQWdCO0lBQzdCLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxZQUFZLFlBQVksVUFBVSxFQUFFO1lBQ3JFLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLDJCQUEyQjtRQUMzQixJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDckMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxL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QUUsQ0FBQztZQUM3QixFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLElBQUksR0FBd0IsRUFBRSxDQUFDO1FBQ25DLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDbEIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHNCQUFzQjtJQUN4QixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJztcblxuY29uc3QgZXhlY0FzeW5jID0gcHJvbWlzaWZ5KGV4ZWMpO1xuXG5jb25zdCBQQUNLQUdFX05BTUUgPSAnQG9mbG93LWFpL29mbG93LWNsaSc7XG5jb25zdCBOUE1fUkVHSVNUUlkgPSAnaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcnO1xuXG5pbnRlcmZhY2UgVXBkYXRlSW5mbyB7XG4gIGhhc1VwZGF0ZTogYm9vbGVhbjtcbiAgY3VycmVudFZlcnNpb246IHN0cmluZztcbiAgbGF0ZXN0VmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIOiOt+WPluW9k+WJjeWuieijheeahOeJiOacrFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50VmVyc2lvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJyk7XG4gICAgcmV0dXJuIHBhY2thZ2VKc29uLnZlcnNpb247XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnMC4wLjAnO1xuICB9XG59XG5cbi8qKlxuICog5LuObnBt6I635Y+W5pyA5paw54mI5pysXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldExhdGVzdFZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgZXhlY0FzeW5jKGBucG0gdmlldyAke1BBQ0tBR0VfTkFNRX0gdmVyc2lvbmAsIHtcbiAgICAgIHRpbWVvdXQ6IDEwMDAwXG4gICAgfSk7XG4gICAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIOWmguaenG5wbeWRveS7pOWksei0pe+8jOWwneivleebtOaOpeiuv+mXrnJlZ2lzdHJ5XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGh0dHBzLmdldChgJHtOUE1fUkVHSVNUUll9LyR7UEFDS0FHRV9OQU1FLnJlcGxhY2UoJy8nLCAnJTJGJyl9L2xhdGVzdGAsIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGxldCBkYXRhID0gJyc7XG4gICAgICAgICAgcmVzLm9uKCdkYXRhJywgKGNodW5rOiBzdHJpbmcpID0+IHsgZGF0YSArPSBjaHVuazsgfSk7XG4gICAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShqc29uLnZlcnNpb24pO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSByZXNwb25zZScpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICcwLjAuMCc7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICog5q+U6L6D54mI5pys5Y+3XG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyh2MTogc3RyaW5nLCB2Mjogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgcGFydHMxID0gdjEuc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgY29uc3QgcGFydHMyID0gdjIuc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWF4KHBhcnRzMS5sZW5ndGgsIHBhcnRzMi5sZW5ndGgpOyBpKyspIHtcbiAgICBjb25zdCBwMSA9IHBhcnRzMVtpXSB8fCAwO1xuICAgIGNvbnN0IHAyID0gcGFydHMyW2ldIHx8IDA7XG4gICAgaWYgKHAxID4gcDIpIHJldHVybiAxO1xuICAgIGlmIChwMSA8IHAyKSByZXR1cm4gLTE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8qKlxuICog5qOA5p+l5piv5ZCm5pyJ5pu05pawXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0ZvclVwZGF0ZXMoKTogUHJvbWlzZTxVcGRhdGVJbmZvPiB7XG4gIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gYXdhaXQgZ2V0Q3VycmVudFZlcnNpb24oKTtcbiAgXG4gIC8vIOajgOafpee8k+WtmO+8iOavj+WkqeWPquajgOafpeS4gOasoe+8iVxuICBjb25zdCBjYWNoZUtleSA9ICdvZmxvd19sYXN0X3VwZGF0ZV9jaGVjayc7XG4gIGNvbnN0IGNhY2hlZERhdGEgPSBnZXRDYWNoZWRVcGRhdGVJbmZvKGNhY2hlS2V5KTtcbiAgXG4gIGlmIChjYWNoZWREYXRhICYmIERhdGUubm93KCkgLSBjYWNoZWREYXRhLnRpbWVzdGFtcCA8IDI0ICogNjAgKiA2MCAqIDEwMDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzVXBkYXRlOiBjb21wYXJlVmVyc2lvbnMoY3VycmVudFZlcnNpb24sIGNhY2hlZERhdGEubGF0ZXN0VmVyc2lvbikgPCAwLFxuICAgICAgY3VycmVudFZlcnNpb24sXG4gICAgICBsYXRlc3RWZXJzaW9uOiBjYWNoZWREYXRhLmxhdGVzdFZlcnNpb25cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbGF0ZXN0VmVyc2lvbiA9IGF3YWl0IGdldExhdGVzdFZlcnNpb24oKTtcbiAgXG4gIC8vIOe8k+WtmOe7k+aenFxuICBzZXRDYWNoZWRVcGRhdGVJbmZvKGNhY2hlS2V5LCB7IFxuICAgIGxhdGVzdFZlcnNpb24sIFxuICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSBcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNVcGRhdGU6IGNvbXBhcmVWZXJzaW9ucyhjdXJyZW50VmVyc2lvbiwgbGF0ZXN0VmVyc2lvbikgPCAwLFxuICAgIGN1cnJlbnRWZXJzaW9uLFxuICAgIGxhdGVzdFZlcnNpb25cbiAgfTtcbn1cblxuLyoqXG4gKiDmiafooYzmm7TmlrBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1VcGRhdGUoKTogUHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZyB9PiB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ1xcbvCflIQgVXBkYXRpbmcgb2Zsb3cgQ0xJLi4uXFxuJykpO1xuICBcbiAgdHJ5IHtcbiAgICBjb25zdCB7IHN0ZG91dCwgc3RkZXJyIH0gPSBhd2FpdCBleGVjQXN5bmMoYG5wbSBpbnN0YWxsIC1nICR7UEFDS0FHRV9OQU1FfUBsYXRlc3RgLCB7XG4gICAgICB0aW1lb3V0OiA2MDAwMFxuICAgIH0pO1xuICAgIFxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCdcXG7inJMgb2Zsb3cgQ0xJIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IScpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdQbGVhc2UgcmVzdGFydCBvZmxvdyB0byB1c2UgdGhlIG5ldyB2ZXJzaW9uLlxcbicpKTtcbiAgICBcbiAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBtZXNzYWdlOiAnVXBkYXRlIGNvbXBsZXRlZCcgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJvck1zZyA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ1xcbuKclyBVcGRhdGUgZmFpbGVkJykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1lvdSBjYW4gbWFudWFsbHkgdXBkYXRlIHdpdGg6IG5wbSBpbnN0YWxsIC1nIEBvZmxvdy1haS9vZmxvdy1jbGlAbGF0ZXN0XFxuJykpO1xuICAgIFxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBtZXNzYWdlOiBlcnJvck1zZyB9O1xuICB9XG59XG5cbi8qKlxuICog6I635Y+W57yT5a2Y55qE5pu05paw5L+h5oGvXG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlZFVwZGF0ZUluZm8oa2V5OiBzdHJpbmcpOiB7IGxhdGVzdFZlcnNpb246IHN0cmluZzsgdGltZXN0YW1wOiBudW1iZXIgfSB8IG51bGwge1xuICB0cnkge1xuICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuICAgIGNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbiAgICBcbiAgICBjb25zdCBjYWNoZUZpbGUgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9mbG93JywgJ3VwZGF0ZS1jYWNoZS5qc29uJyk7XG4gICAgXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoY2FjaGVGaWxlKSkge1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGNhY2hlRmlsZSwgJ3V0Zi04JykpO1xuICAgICAgcmV0dXJuIGRhdGFba2V5XSB8fCBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIGVycm9yc1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIOe8k+WtmOabtOaWsOS/oeaBr1xuICovXG5mdW5jdGlvbiBzZXRDYWNoZWRVcGRhdGVJbmZvKGtleTogc3RyaW5nLCB2YWx1ZTogeyBsYXRlc3RWZXJzaW9uOiBzdHJpbmc7IHRpbWVzdGFtcDogbnVtYmVyIH0pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbiAgICBjb25zdCBvcyA9IHJlcXVpcmUoJ29zJyk7XG4gICAgXG4gICAgY29uc3QgY2FjaGVEaXIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9mbG93Jyk7XG4gICAgY29uc3QgY2FjaGVGaWxlID0gcGF0aC5qb2luKGNhY2hlRGlyLCAndXBkYXRlLWNhY2hlLmpzb24nKTtcbiAgICBcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoY2FjaGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgICBcbiAgICBsZXQgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGNhY2hlRmlsZSkpIHtcbiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjYWNoZUZpbGUsICd1dGYtOCcpKTtcbiAgICB9XG4gICAgXG4gICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgZnMud3JpdGVGaWxlU3luYyhjYWNoZUZpbGUsIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIGVycm9yc1xuICB9XG59XG4iXX0=
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91cGRhdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBcUJBLDhDQTZCQztBQXFERCwwQ0E0QkM7QUFLRCwwREE2Q0M7QUFLRCxzQ0F5QkM7QUFLRCw4Q0FFQztBQTFORCxrREFBMEI7QUFDMUIsaURBQTRDO0FBQzVDLCtCQUFpQztBQUVqQyxNQUFNLFNBQVMsR0FBRyxJQUFBLGdCQUFTLEVBQUMsb0JBQUksQ0FBQyxDQUFDO0FBRWxDLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDO0FBQzNDLE1BQU0sWUFBWSxHQUFHLDRCQUE0QixDQUFDO0FBUWxELElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQzdCLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztBQUU1Qjs7R0FFRztBQUNJLEtBQUssVUFBVSxpQkFBaUI7SUFDckMsSUFBSSxDQUFDO1FBQ0gsYUFBYTtRQUNiLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxlQUFlLFlBQVksbUJBQW1CLEVBQUU7WUFDakYsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDNUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsY0FBYztJQUNoQixDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENB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LElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM3QixFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLElBQUksR0FBd0IsRUFBRSxDQUFDO1FBQ25DLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDbEIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHNCQUFzQjtJQUN4QixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBleGVjLCBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAndXRpbCc7XG5cbmNvbnN0IGV4ZWNBc3luYyA9IHByb21pc2lmeShleGVjKTtcblxuY29uc3QgUEFDS0FHRV9OQU1FID0gJ0BvZmxvdy1haS9vZmxvdy1jbGknO1xuY29uc3QgTlBNX1JFR0lTVFJZID0gJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnJztcblxuaW50ZXJmYWNlIFVwZGF0ZUluZm8ge1xuICBoYXNVcGRhdGU6IGJvb2xlYW47XG4gIGN1cnJlbnRWZXJzaW9uOiBzdHJpbmc7XG4gIGxhdGVzdFZlcnNpb246IHN0cmluZztcbn1cblxubGV0IHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbmxldCB1cGRhdGVDb21wbGV0ZWQgPSBmYWxzZTtcblxuLyoqXG4gKiDojrflj5blvZPliY3lronoo4XnmoTniYjmnKxcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRWZXJzaW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHRyeSB7XG4gICAgLy8g5LuO5bey5a6J6KOF55qE5YyF6I635Y+W54mI5pysXG4gICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNBc3luYyhgbnBtIGxpc3QgLWcgJHtQQUNLQUdFX05BTUV9IC0tZGVwdGg9MCAtLWpzb25gLCB7XG4gICAgICB0aW1lb3V0OiA1MDAwXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgICBjb25zdCB2ZXJzaW9uID0gZGF0YT8uZGVwZW5kZW5jaWVzPy5bUEFDS0FHRV9OQU1FXT8udmVyc2lvbjtcbiAgICBpZiAodmVyc2lvbikge1xuICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyDlv73nlaXplJnor6/vvIzlsJ3or5Xlhbbku5bmlrnlvI9cbiAgfVxuXG4gIC8vIOWkh+eUqOaWueahiO+8muS7juacrOWcsCBwYWNrYWdlLmpzb24g6K+75Y+WXG4gIHRyeSB7XG4gICAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG4gICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHBhY2thZ2VKc29uUGF0aCkpIHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmLTgnKSk7XG4gICAgICByZXR1cm4gcGFja2FnZUpzb24udmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIOW/veeVpemUmeivr1xuICB9XG5cbiAgcmV0dXJuICcwLjAuMCc7XG59XG5cbi8qKlxuICog5LuObnBt6I635Y+W5pyA5paw54mI5pysXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldExhdGVzdFZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgZXhlY0FzeW5jKGBucG0gdmlldyAke1BBQ0tBR0VfTkFNRX0gdmVyc2lvbmAsIHtcbiAgICAgIHRpbWVvdXQ6IDEwMDAwXG4gICAgfSk7XG4gICAgcmV0dXJuIHN0ZG91dC50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBodHRwcy5nZXQoYCR7TlBNX1JFR0lTVFJZfS8ke1BBQ0tBR0VfTkFNRS5yZXBsYWNlKCcvJywgJyUyRicpfS9sYXRlc3RgLCAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBsZXQgZGF0YSA9ICcnO1xuICAgICAgICAgIHJlcy5vbignZGF0YScsIChjaHVuazogc3RyaW5nKSA9PiB7IGRhdGEgKz0gY2h1bms7IH0pO1xuICAgICAgICAgIHJlcy5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICAgIHJlc29sdmUoanNvbi52ZXJzaW9uKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gcGFyc2UgcmVzcG9uc2UnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLm9uKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAnMC4wLjAnO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIOavlOi+g+eJiOacrOWPt1xuICovXG5mdW5jdGlvbiBjb21wYXJlVmVyc2lvbnModjE6IHN0cmluZywgdjI6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHBhcnRzMSA9IHYxLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG4gIGNvbnN0IHBhcnRzMiA9IHYyLnNwbGl0KCcuJykubWFwKE51bWJlcik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1heChwYXJ0czEubGVuZ3RoLCBwYXJ0czIubGVuZ3RoKTsgaSsrKSB7XG4gICAgY29uc3QgcDEgPSBwYXJ0czFbaV0gfHwgMDtcbiAgICBjb25zdCBwMiA9IHBhcnRzMltpXSB8fCAwO1xuICAgIGlmIChwMSA+IHAyKSByZXR1cm4gMTtcbiAgICBpZiAocDEgPCBwMikgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIOajgOafpeaYr+WQpuacieabtOaWsFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tGb3JVcGRhdGVzKCk6IFByb21pc2U8VXBkYXRlSW5mbz4ge1xuICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IGF3YWl0IGdldEN1cnJlbnRWZXJzaW9uKCk7XG4gIFxuICAvLyDmo4Dmn6XnvJPlrZjvvIjmr4/lpKnlj6rmo4Dmn6XkuIDmrKHvvIlcbiAgY29uc3QgY2FjaGVLZXkgPSAnb2Zsb3dfbGFzdF91cGRhdGVfY2hlY2snO1xuICBjb25zdCBjYWNoZWREYXRhID0gZ2V0Q2FjaGVkVXBkYXRlSW5mbyhjYWNoZUtleSk7XG4gIFxuICBpZiAoY2FjaGVkRGF0YSAmJiBEYXRlLm5vdygpIC0gY2FjaGVkRGF0YS50aW1lc3RhbXAgPCAyNCAqIDYwICogNjAgKiAxMDAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc1VwZGF0ZTogY29tcGFyZVZlcnNpb25zKGN1cnJlbnRWZXJzaW9uLCBjYWNoZWREYXRhLmxhdGVzdFZlcnNpb24pIDwgMCxcbiAgICAgIGN1cnJlbnRWZXJzaW9uLFxuICAgICAgbGF0ZXN0VmVyc2lvbjogY2FjaGVkRGF0YS5sYXRlc3RWZXJzaW9uXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGxhdGVzdFZlcnNpb24gPSBhd2FpdCBnZXRMYXRlc3RWZXJzaW9uKCk7XG4gIFxuICAvLyDnvJPlrZjnu5PmnpxcbiAgc2V0Q2FjaGVkVXBkYXRlSW5mbyhjYWNoZUtleSwgeyBcbiAgICBsYXRlc3RWZXJzaW9uLCBcbiAgICB0aW1lc3RhbXA6IERhdGUubm93KCkgXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgaGFzVXBkYXRlOiBjb21wYXJlVmVyc2lvbnMoY3VycmVudFZlcnNpb24sIGxhdGVzdFZlcnNpb24pIDwgMCxcbiAgICBjdXJyZW50VmVyc2lvbixcbiAgICBsYXRlc3RWZXJzaW9uXG4gIH07XG59XG5cbi8qKlxuICog5ZCO5Y+w5omn6KGM5pu05paw77yI5LiN6Zi75aGe5b2T5YmNIHNlc3Npb27vvIlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlcmZvcm1CYWNrZ3JvdW5kVXBkYXRlKG9uQ29tcGxldGU/OiAoc3VjY2VzczogYm9vbGVhbikgPT4gdm9pZCk6IHZvaWQge1xuICBpZiAodXBkYXRlSW5Qcm9ncmVzcyB8fCB1cGRhdGVDb21wbGV0ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcblxuICAvLyDkvb/nlKggc3Bhd24g5Zyo5ZCO5Y+w5omn6KGM5pu05pawXG4gIGNvbnN0IHVwZGF0ZVByb2Nlc3MgPSBzcGF3bignbnBtJywgWydpbnN0YWxsJywgJy1nJywgYCR7UEFDS0FHRV9OQU1FfUBsYXRlc3RgXSwge1xuICAgIGRldGFjaGVkOiB0cnVlLFxuICAgIHN0ZGlvOiAnaWdub3JlJyxcbiAgICBzaGVsbDogdHJ1ZVxuICB9KTtcblxuICB1cGRhdGVQcm9jZXNzLnVucmVmKCk7XG5cbiAgdXBkYXRlUHJvY2Vzcy5vbignZXJyb3InLCAoKSA9PiB7XG4gICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIG9uQ29tcGxldGU/LihmYWxzZSk7XG4gIH0pO1xuXG4gIC8vIOiuvue9rui2heaXtuajgOafpVxuICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IGV4ZWNBc3luYyhgbnBtIGxpc3QgLWcgJHtQQUNLQUdFX05BTUV9IC0tZGVwdGg9MCAtLWpzb25gLCB7XG4gICAgICAgIHRpbWVvdXQ6IDUwMDBcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgICAgIGNvbnN0IG5ld1ZlcnNpb24gPSBkYXRhPy5kZXBlbmRlbmNpZXM/LltQQUNLQUdFX05BTUVdPy52ZXJzaW9uO1xuICAgICAgXG4gICAgICBpZiAobmV3VmVyc2lvbikge1xuICAgICAgICBjb25zdCB1cGRhdGVJbmZvID0gYXdhaXQgY2hlY2tGb3JVcGRhdGVzKCk7XG4gICAgICAgIGlmICghdXBkYXRlSW5mby5oYXNVcGRhdGUpIHtcbiAgICAgICAgICB1cGRhdGVDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICBvbkNvbXBsZXRlPy4odHJ1ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyDlv73nlaXplJnor69cbiAgICB9XG4gICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIG9uQ29tcGxldGU/LihmYWxzZSk7XG4gIH0sIDMwMDAwKTtcbn1cblxuLyoqXG4gKiDmiYvliqjmiafooYzmm7TmlrBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBlcmZvcm1VcGRhdGUoc2lsZW50OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHsgc3VjY2VzczogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0+IHtcbiAgaWYgKCFzaWxlbnQpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5VcGRhdGluZyBvZmxvdyBDTEkuLi5cXG4nKSk7XG4gIH1cbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgeyBzdGRvdXQsIHN0ZGVyciB9ID0gYXdhaXQgZXhlY0FzeW5jKGBucG0gaW5zdGFsbCAtZyAke1BBQ0tBR0VfTkFNRX1AbGF0ZXN0YCwge1xuICAgICAgdGltZW91dDogNjAwMDBcbiAgICB9KTtcbiAgICBcbiAgICBpZiAoIXNpbGVudCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1xcbm9mbG93IENMSSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSEnKSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdQbGVhc2UgcmVzdGFydCBvZmxvdyB0byB1c2UgdGhlIG5ldyB2ZXJzaW9uLlxcbicpKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgbWVzc2FnZTogJ1VwZGF0ZSBjb21wbGV0ZWQnIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnXFxuVXBkYXRlIGZhaWxlZCcpKTtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1lvdSBjYW4gbWFudWFsbHkgdXBkYXRlIHdpdGg6IG5wbSBpbnN0YWxsIC1nIEBvZmxvdy1haS9vZmxvdy1jbGlAbGF0ZXN0XFxuJykpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgbWVzc2FnZTogZXJyb3JNc2cgfTtcbiAgfVxufVxuXG4vKipcbiAqIOajgOafpeabtOaWsOaYr+WQpuW3suWujOaIkFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVcGRhdGVDb21wbGV0ZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiB1cGRhdGVDb21wbGV0ZWQ7XG59XG5cbi8qKlxuICog6I635Y+W57yT5a2Y55qE5pu05paw5L+h5oGvXG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlZFVwZGF0ZUluZm8oa2V5OiBzdHJpbmcpOiB7IGxhdGVzdFZlcnNpb246IHN0cmluZzsgdGltZXN0YW1wOiBudW1iZXIgfSB8IG51bGwge1xuICB0cnkge1xuICAgIGNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICBjb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuICAgIGNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbiAgICBcbiAgICBjb25zdCBjYWNoZUZpbGUgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9mbG93JywgJ3VwZGF0ZS1jYWNoZS5qc29uJyk7XG4gICAgXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoY2FjaGVGaWxlKSkge1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGNhY2hlRmlsZSwgJ3V0Zi04JykpO1xuICAgICAgcmV0dXJuIGRhdGFba2V5XSB8fCBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIGVycm9yc1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIOe8k+WtmOabtOaWsOS/oeaBr1xuICovXG5mdW5jdGlvbiBzZXRDYWNoZWRVcGRhdGVJbmZvKGtleTogc3RyaW5nLCB2YWx1ZTogeyBsYXRlc3RWZXJzaW9uOiBzdHJpbmc7IHRpbWVzdGFtcDogbnVtYmVyIH0pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbiAgICBjb25zdCBvcyA9IHJlcXVpcmUoJ29zJyk7XG4gICAgXG4gICAgY29uc3QgY2FjaGVEaXIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9mbG93Jyk7XG4gICAgY29uc3QgY2FjaGVGaWxlID0gcGF0aC5qb2luKGNhY2hlRGlyLCAndXBkYXRlLWNhY2hlLmpzb24nKTtcbiAgICBcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoY2FjaGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgICBcbiAgICBsZXQgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGNhY2hlRmlsZSkpIHtcbiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhjYWNoZUZpbGUsICd1dGYtOCcpKTtcbiAgICB9XG4gICAgXG4gICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgZnMud3JpdGVGaWxlU3luYyhjYWNoZUZpbGUsIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIGNhY2hlIGVycm9yc1xuICB9XG59Il19
|