@lenne.tech/cli 1.6.3 → 1.6.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/build/commands/claude/plugins.js +75 -426
- package/build/lib/claude-cli.js +95 -0
- package/build/lib/json-utils.js +20 -0
- package/build/lib/marketplace.js +160 -0
- package/build/lib/plugin-utils.js +453 -0
- package/build/lib/shell-config.js +110 -0
- package/package.json +1 -1
|
@@ -9,192 +9,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const path_1 = require("path");
|
|
16
|
-
const MARKETPLACES = [
|
|
17
|
-
{
|
|
18
|
-
apiBase: 'https://api.github.com/repos/lenneTech/claude-code/contents',
|
|
19
|
-
name: 'lenne-tech',
|
|
20
|
-
rawBase: 'https://raw.githubusercontent.com/lenneTech/claude-code/main',
|
|
21
|
-
repo: 'lenneTech/claude-code',
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
apiBase: 'https://api.github.com/repos/anthropics/claude-plugins-official/contents',
|
|
25
|
-
name: 'claude-plugins-official',
|
|
26
|
-
rawBase: 'https://raw.githubusercontent.com/anthropics/claude-plugins-official/main',
|
|
27
|
-
repo: 'anthropics/claude-plugins-official',
|
|
28
|
-
},
|
|
29
|
-
];
|
|
30
|
-
/**
|
|
31
|
-
* Default plugins to install when no specific plugins are requested
|
|
32
|
-
* These are installed in addition to all plugins from the primary marketplace (lenne-tech)
|
|
33
|
-
*/
|
|
34
|
-
const DEFAULT_EXTERNAL_PLUGINS = [
|
|
35
|
-
{ marketplaceName: 'claude-plugins-official', pluginName: 'typescript-lsp' },
|
|
36
|
-
];
|
|
37
|
-
/**
|
|
38
|
-
* Empty plugin contents constant (used for failed installations)
|
|
39
|
-
*/
|
|
40
|
-
const EMPTY_PLUGIN_CONTENTS = {
|
|
41
|
-
agents: [],
|
|
42
|
-
commands: [],
|
|
43
|
-
hooks: 0,
|
|
44
|
-
mcpServers: [],
|
|
45
|
-
permissions: [],
|
|
46
|
-
skills: [],
|
|
47
|
-
};
|
|
48
|
-
/**
|
|
49
|
-
* Fetch available plugins from all marketplaces
|
|
50
|
-
*/
|
|
51
|
-
function fetchAvailablePlugins(spin) {
|
|
52
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
-
const spinner = spin('Fetching available plugins from marketplaces');
|
|
54
|
-
try {
|
|
55
|
-
// Fetch plugins from all marketplaces in parallel
|
|
56
|
-
const results = yield Promise.all(MARKETPLACES.map(marketplace => fetchPluginsFromMarketplace(marketplace)));
|
|
57
|
-
// Flatten results
|
|
58
|
-
const plugins = results.flat();
|
|
59
|
-
if (plugins.length === 0) {
|
|
60
|
-
spinner.fail('No plugins found in any marketplace');
|
|
61
|
-
throw new Error('No plugins found');
|
|
62
|
-
}
|
|
63
|
-
// Group by marketplace for display
|
|
64
|
-
const byMarketplace = MARKETPLACES.map(m => ({
|
|
65
|
-
count: plugins.filter(p => p.marketplaceName === m.name).length,
|
|
66
|
-
name: m.name,
|
|
67
|
-
})).filter(m => m.count > 0);
|
|
68
|
-
const summary = byMarketplace.map(m => `${m.name}: ${m.count}`).join(', ');
|
|
69
|
-
spinner.succeed(`Found ${plugins.length} plugins (${summary})`);
|
|
70
|
-
return plugins;
|
|
71
|
-
}
|
|
72
|
-
catch (err) {
|
|
73
|
-
spinner.fail('Failed to fetch plugins from marketplaces');
|
|
74
|
-
throw err;
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Fetch available plugins from a single marketplace
|
|
80
|
-
*/
|
|
81
|
-
function fetchPluginsFromMarketplace(marketplace) {
|
|
82
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
-
const plugins = [];
|
|
84
|
-
try {
|
|
85
|
-
// First try to read central marketplace.json (used by official marketplace)
|
|
86
|
-
const marketplaceJsonUrl = `${marketplace.rawBase}/.claude-plugin/marketplace.json`;
|
|
87
|
-
const marketplaceJsonResponse = yield fetch(marketplaceJsonUrl);
|
|
88
|
-
if (marketplaceJsonResponse.ok) {
|
|
89
|
-
try {
|
|
90
|
-
const marketplaceManifest = yield marketplaceJsonResponse.json();
|
|
91
|
-
if (marketplaceManifest.plugins && marketplaceManifest.plugins.length > 0) {
|
|
92
|
-
for (const plugin of marketplaceManifest.plugins) {
|
|
93
|
-
plugins.push({
|
|
94
|
-
description: plugin.description || '',
|
|
95
|
-
marketplaceName: marketplace.name,
|
|
96
|
-
marketplaceRepo: marketplace.repo,
|
|
97
|
-
pluginName: plugin.name,
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
return plugins;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
catch (_a) {
|
|
104
|
-
// Failed to parse marketplace.json, fall through to directory scan
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
// Fallback: Get list of plugin directories and read individual plugin.json files
|
|
108
|
-
const dirResponse = yield fetch(`${marketplace.apiBase}/plugins`);
|
|
109
|
-
if (!dirResponse.ok) {
|
|
110
|
-
return plugins;
|
|
111
|
-
}
|
|
112
|
-
const directories = yield dirResponse.json();
|
|
113
|
-
const pluginDirs = directories.filter(d => d.type === 'dir');
|
|
114
|
-
// Fetch plugin.json for each plugin in parallel
|
|
115
|
-
const manifestPromises = pluginDirs.map((dir) => __awaiter(this, void 0, void 0, function* () {
|
|
116
|
-
try {
|
|
117
|
-
const manifestUrl = `${marketplace.rawBase}/plugins/${dir.name}/.claude-plugin/plugin.json`;
|
|
118
|
-
const manifestResponse = yield fetch(manifestUrl);
|
|
119
|
-
if (manifestResponse.ok) {
|
|
120
|
-
const manifest = yield manifestResponse.json();
|
|
121
|
-
return {
|
|
122
|
-
description: manifest.description,
|
|
123
|
-
marketplaceName: marketplace.name,
|
|
124
|
-
marketplaceRepo: marketplace.repo,
|
|
125
|
-
pluginName: manifest.name,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
catch (_a) {
|
|
130
|
-
// Skip plugins without valid manifest
|
|
131
|
-
}
|
|
132
|
-
return null;
|
|
133
|
-
}));
|
|
134
|
-
const results = yield Promise.all(manifestPromises);
|
|
135
|
-
plugins.push(...results.filter((p) => p !== null));
|
|
136
|
-
}
|
|
137
|
-
catch (_b) {
|
|
138
|
-
// Marketplace fetch failed, return empty array
|
|
139
|
-
}
|
|
140
|
-
return plugins;
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Find the claude CLI executable path
|
|
145
|
-
*/
|
|
146
|
-
function findClaudeCli() {
|
|
147
|
-
const possiblePaths = [
|
|
148
|
-
(0, path_1.join)((0, os_1.homedir)(), '.claude', 'local', 'claude'),
|
|
149
|
-
'/usr/local/bin/claude',
|
|
150
|
-
'/usr/bin/claude',
|
|
151
|
-
];
|
|
152
|
-
for (const p of possiblePaths) {
|
|
153
|
-
if ((0, fs_1.existsSync)(p)) {
|
|
154
|
-
return p;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
try {
|
|
158
|
-
const result = (0, child_process_1.execSync)('which claude', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
159
|
-
const path = result.trim();
|
|
160
|
-
if (path && (0, fs_1.existsSync)(path)) {
|
|
161
|
-
return path;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
catch (_a) {
|
|
165
|
-
// Ignore errors
|
|
166
|
-
}
|
|
167
|
-
return null;
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Recursively find all .md files in a directory
|
|
171
|
-
*/
|
|
172
|
-
function findMarkdownFiles(dir, basePath = '') {
|
|
173
|
-
const results = [];
|
|
174
|
-
if (!(0, fs_1.existsSync)(dir))
|
|
175
|
-
return results;
|
|
176
|
-
try {
|
|
177
|
-
const entries = (0, fs_1.readdirSync)(dir, { withFileTypes: true });
|
|
178
|
-
for (const entry of entries) {
|
|
179
|
-
const fullPath = (0, path_1.join)(dir, entry.name);
|
|
180
|
-
const relativePath = basePath ? `${basePath}/${entry.name}` : entry.name;
|
|
181
|
-
if (entry.isDirectory()) {
|
|
182
|
-
results.push(...findMarkdownFiles(fullPath, relativePath));
|
|
183
|
-
}
|
|
184
|
-
else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
185
|
-
// Convert path to command name (e.g., "git/commit-message.md" -> "/git:commit-message")
|
|
186
|
-
const commandName = relativePath
|
|
187
|
-
.replace(/\.md$/, '')
|
|
188
|
-
.replace(/\//g, ':');
|
|
189
|
-
results.push(`/${commandName}`);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
catch (_a) {
|
|
194
|
-
// Ignore errors
|
|
195
|
-
}
|
|
196
|
-
return results;
|
|
197
|
-
}
|
|
12
|
+
const claude_cli_1 = require("../../lib/claude-cli");
|
|
13
|
+
const marketplace_1 = require("../../lib/marketplace");
|
|
14
|
+
const plugin_utils_1 = require("../../lib/plugin-utils");
|
|
198
15
|
/**
|
|
199
16
|
* Install a single plugin (marketplace must already be added and updated)
|
|
200
17
|
*/
|
|
@@ -204,7 +21,7 @@ function installPlugin(plugin, cli, toolbox) {
|
|
|
204
21
|
// Step 1: Install or update plugin
|
|
205
22
|
const fullPluginName = `${plugin.pluginName}@${plugin.marketplaceName}`;
|
|
206
23
|
const pluginSpinner = spin(`Installing/updating ${plugin.pluginName}`);
|
|
207
|
-
const installResult = runClaudeCommand(cli, `plugin install ${fullPluginName}`);
|
|
24
|
+
const installResult = (0, claude_cli_1.runClaudeCommand)(cli, `plugin install ${fullPluginName}`);
|
|
208
25
|
let pluginAction = 'installed';
|
|
209
26
|
if (installResult.output.includes('already') || installResult.output.includes('up to date')) {
|
|
210
27
|
pluginAction = 'up to date';
|
|
@@ -222,10 +39,10 @@ function installPlugin(plugin, cli, toolbox) {
|
|
|
222
39
|
info('Manual installation:');
|
|
223
40
|
info(` /plugin marketplace add ${plugin.marketplaceRepo}`);
|
|
224
41
|
info(` /plugin install ${fullPluginName}`);
|
|
225
|
-
return { action: 'failed', contents: EMPTY_PLUGIN_CONTENTS, success: false };
|
|
42
|
+
return { action: 'failed', contents: plugin_utils_1.EMPTY_PLUGIN_CONTENTS, postInstall: null, success: false };
|
|
226
43
|
}
|
|
227
44
|
// Step 2: Read plugin contents
|
|
228
|
-
const pluginContents = readPluginContents(plugin.marketplaceName, plugin.pluginName);
|
|
45
|
+
const pluginContents = (0, plugin_utils_1.readPluginContents)(plugin.marketplaceName, plugin.pluginName);
|
|
229
46
|
// Warn if plugin seems empty (but not for LSP plugins which don't have skills/commands)
|
|
230
47
|
const isLspPlugin = plugin.pluginName.endsWith('-lsp');
|
|
231
48
|
if (!isLspPlugin && pluginContents.skills.length === 0 && pluginContents.commands.length === 0) {
|
|
@@ -235,7 +52,7 @@ function installPlugin(plugin, cli, toolbox) {
|
|
|
235
52
|
// Step 3: Setup permissions
|
|
236
53
|
if (pluginContents.permissions.length > 0) {
|
|
237
54
|
const permSpinner = spin(`Configuring permissions for ${plugin.pluginName}`);
|
|
238
|
-
const permResult = setupPermissions(pluginContents.permissions, error);
|
|
55
|
+
const permResult = (0, plugin_utils_1.setupPermissions)(pluginContents.permissions, error);
|
|
239
56
|
if (permResult.success) {
|
|
240
57
|
if (permResult.added.length > 0) {
|
|
241
58
|
permSpinner.succeed(`Permissions configured for ${plugin.pluginName} (${permResult.added.length} added)`);
|
|
@@ -251,7 +68,9 @@ function installPlugin(plugin, cli, toolbox) {
|
|
|
251
68
|
info(JSON.stringify({ permissions: { allow: pluginContents.permissions } }, null, 2));
|
|
252
69
|
}
|
|
253
70
|
}
|
|
254
|
-
|
|
71
|
+
// Step 4: Process post-installation requirements (for LSP plugins, etc.)
|
|
72
|
+
const postInstallResult = (0, plugin_utils_1.processPostInstall)(plugin.pluginName, toolbox);
|
|
73
|
+
return { action: pluginAction, contents: pluginContents, postInstall: postInstallResult, success: true };
|
|
255
74
|
});
|
|
256
75
|
}
|
|
257
76
|
/**
|
|
@@ -269,22 +88,26 @@ function prepareMarketplaces(plugins, cli, toolbox) {
|
|
|
269
88
|
}
|
|
270
89
|
const preparedMarketplaces = new Set();
|
|
271
90
|
for (const [marketplaceName, plugin] of marketplaceMap) {
|
|
272
|
-
//
|
|
273
|
-
const
|
|
274
|
-
|
|
275
|
-
if (
|
|
276
|
-
addSpinner
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
91
|
+
// Check if marketplace already exists
|
|
92
|
+
const marketplaceExists = (0, claude_cli_1.checkMarketplaceExists)(marketplaceName);
|
|
93
|
+
// Add marketplace only if it doesn't exist yet
|
|
94
|
+
if (!marketplaceExists) {
|
|
95
|
+
const addSpinner = spin(`Adding marketplace ${marketplaceName}`);
|
|
96
|
+
const addResult = (0, claude_cli_1.runClaudeCommand)(cli, `plugin marketplace add ${plugin.marketplaceRepo}`);
|
|
97
|
+
if (addResult.success || addResult.output.includes('already')) {
|
|
98
|
+
addSpinner.succeed(`Marketplace ${marketplaceName} added`);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
addSpinner.fail(`Failed to add marketplace ${marketplaceName}`);
|
|
102
|
+
error(addResult.output);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
282
105
|
}
|
|
283
|
-
//
|
|
284
|
-
const updateSpinner = spin(`Updating
|
|
285
|
-
const updateResult = runClaudeCommand(cli, `plugin marketplace update ${marketplaceName}`);
|
|
106
|
+
// Always update marketplace cache to get latest plugin versions
|
|
107
|
+
const updateSpinner = spin(`Updating ${marketplaceName} cache`);
|
|
108
|
+
const updateResult = (0, claude_cli_1.runClaudeCommand)(cli, `plugin marketplace update ${marketplaceName}`);
|
|
286
109
|
if (updateResult.success) {
|
|
287
|
-
updateSpinner.succeed(
|
|
110
|
+
updateSpinner.succeed(`${marketplaceName} cache updated`);
|
|
288
111
|
}
|
|
289
112
|
else {
|
|
290
113
|
updateSpinner.stopAndPersist({ symbol: '⚠', text: `Could not update ${marketplaceName} cache, using cached version` });
|
|
@@ -293,225 +116,40 @@ function prepareMarketplaces(plugins, cli, toolbox) {
|
|
|
293
116
|
}
|
|
294
117
|
return preparedMarketplaces;
|
|
295
118
|
}
|
|
296
|
-
/**
|
|
297
|
-
* Print plugin summary
|
|
298
|
-
*/
|
|
299
|
-
function printPluginSummary(pluginName, contents, info) {
|
|
300
|
-
const isLspPlugin = pluginName.endsWith('-lsp');
|
|
301
|
-
const hasContent = contents.skills.length > 0 || contents.commands.length > 0 || contents.agents.length > 0;
|
|
302
|
-
if (hasContent || isLspPlugin) {
|
|
303
|
-
info('');
|
|
304
|
-
info(`${pluginName}:`);
|
|
305
|
-
// Show LSP indicator for LSP plugins
|
|
306
|
-
if (isLspPlugin) {
|
|
307
|
-
info(` Type: Language Server (LSP)`);
|
|
308
|
-
}
|
|
309
|
-
// Alphabetical order: Agents, Commands, Hooks, MCP Servers, Skills
|
|
310
|
-
if (contents.agents.length > 0) {
|
|
311
|
-
info(` Agents (${contents.agents.length}): ${contents.agents.join(', ')}`);
|
|
312
|
-
}
|
|
313
|
-
if (contents.commands.length > 0) {
|
|
314
|
-
const maxShow = 5;
|
|
315
|
-
const shown = contents.commands.slice(0, maxShow);
|
|
316
|
-
const remaining = contents.commands.length - maxShow;
|
|
317
|
-
const commandsStr = remaining > 0
|
|
318
|
-
? `${shown.join(', ')} and ${remaining} more`
|
|
319
|
-
: shown.join(', ');
|
|
320
|
-
info(` Commands (${contents.commands.length}): ${commandsStr}`);
|
|
321
|
-
}
|
|
322
|
-
if (contents.hooks > 0) {
|
|
323
|
-
info(` Hooks: ${contents.hooks} auto-detection hooks`);
|
|
324
|
-
}
|
|
325
|
-
if (contents.mcpServers.length > 0) {
|
|
326
|
-
info(` MCP Servers (${contents.mcpServers.length}): ${contents.mcpServers.join(', ')}`);
|
|
327
|
-
}
|
|
328
|
-
if (contents.skills.length > 0) {
|
|
329
|
-
info(` Skills (${contents.skills.length}): ${contents.skills.join(', ')}`);
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* Read plugin contents from installed plugin directory
|
|
335
|
-
*/
|
|
336
|
-
function readPluginContents(marketplaceName, pluginName) {
|
|
337
|
-
const pluginDir = (0, path_1.join)((0, os_1.homedir)(), '.claude', 'plugins', 'marketplaces', marketplaceName, 'plugins', pluginName);
|
|
338
|
-
const result = {
|
|
339
|
-
agents: [],
|
|
340
|
-
commands: [],
|
|
341
|
-
hooks: 0,
|
|
342
|
-
mcpServers: [],
|
|
343
|
-
permissions: [],
|
|
344
|
-
skills: [],
|
|
345
|
-
};
|
|
346
|
-
// Read skills
|
|
347
|
-
const skillsDir = (0, path_1.join)(pluginDir, 'skills');
|
|
348
|
-
if ((0, fs_1.existsSync)(skillsDir)) {
|
|
349
|
-
try {
|
|
350
|
-
result.skills = (0, fs_1.readdirSync)(skillsDir, { withFileTypes: true })
|
|
351
|
-
.filter(dirent => dirent.isDirectory())
|
|
352
|
-
.map(dirent => dirent.name);
|
|
353
|
-
}
|
|
354
|
-
catch (_a) {
|
|
355
|
-
// Ignore
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
// Read agents
|
|
359
|
-
const agentsDir = (0, path_1.join)(pluginDir, 'agents');
|
|
360
|
-
if ((0, fs_1.existsSync)(agentsDir)) {
|
|
361
|
-
try {
|
|
362
|
-
result.agents = (0, fs_1.readdirSync)(agentsDir, { withFileTypes: true })
|
|
363
|
-
.filter(dirent => dirent.isFile() && dirent.name.endsWith('.md'))
|
|
364
|
-
.map(dirent => dirent.name.replace(/\.md$/, ''));
|
|
365
|
-
}
|
|
366
|
-
catch (_b) {
|
|
367
|
-
// Ignore
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
// Read commands
|
|
371
|
-
const commandsDir = (0, path_1.join)(pluginDir, 'commands');
|
|
372
|
-
result.commands = findMarkdownFiles(commandsDir);
|
|
373
|
-
// Read hooks
|
|
374
|
-
const hooksPath = (0, path_1.join)(pluginDir, 'hooks', 'hooks.json');
|
|
375
|
-
if ((0, fs_1.existsSync)(hooksPath)) {
|
|
376
|
-
try {
|
|
377
|
-
const hooksContent = JSON.parse((0, fs_1.readFileSync)(hooksPath, 'utf-8'));
|
|
378
|
-
// Count hooks across all event types
|
|
379
|
-
for (const eventHooks of Object.values(hooksContent.hooks || {})) {
|
|
380
|
-
if (Array.isArray(eventHooks)) {
|
|
381
|
-
for (const hookGroup of eventHooks) {
|
|
382
|
-
if (hookGroup.hooks && Array.isArray(hookGroup.hooks)) {
|
|
383
|
-
result.hooks += hookGroup.hooks.length;
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
catch (_c) {
|
|
390
|
-
// Ignore
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
// Read MCP servers
|
|
394
|
-
const mcpPath = (0, path_1.join)(pluginDir, '.mcp.json');
|
|
395
|
-
if ((0, fs_1.existsSync)(mcpPath)) {
|
|
396
|
-
try {
|
|
397
|
-
const mcpContent = JSON.parse((0, fs_1.readFileSync)(mcpPath, 'utf-8'));
|
|
398
|
-
if (mcpContent.mcpServers) {
|
|
399
|
-
result.mcpServers = Object.keys(mcpContent.mcpServers);
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
catch (_d) {
|
|
403
|
-
// Ignore
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
// Read permissions
|
|
407
|
-
const permissionsPath = (0, path_1.join)(pluginDir, 'permissions.json');
|
|
408
|
-
if ((0, fs_1.existsSync)(permissionsPath)) {
|
|
409
|
-
try {
|
|
410
|
-
const content = (0, fs_1.readFileSync)(permissionsPath, 'utf-8');
|
|
411
|
-
const pluginPerms = JSON.parse(content);
|
|
412
|
-
result.permissions = pluginPerms.permissions.map(p => p.pattern);
|
|
413
|
-
}
|
|
414
|
-
catch (_e) {
|
|
415
|
-
// Ignore
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
return result;
|
|
419
|
-
}
|
|
420
|
-
/**
|
|
421
|
-
* Execute a claude CLI command
|
|
422
|
-
*/
|
|
423
|
-
function runClaudeCommand(cli, args) {
|
|
424
|
-
try {
|
|
425
|
-
const result = (0, child_process_1.spawnSync)(cli, args.split(' '), {
|
|
426
|
-
encoding: 'utf-8',
|
|
427
|
-
shell: true,
|
|
428
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
429
|
-
});
|
|
430
|
-
return {
|
|
431
|
-
output: result.stdout + result.stderr,
|
|
432
|
-
success: result.status === 0,
|
|
433
|
-
};
|
|
434
|
-
}
|
|
435
|
-
catch (err) {
|
|
436
|
-
return {
|
|
437
|
-
output: err.message,
|
|
438
|
-
success: false,
|
|
439
|
-
};
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
/**
|
|
443
|
-
* Setup permissions in settings.json
|
|
444
|
-
* Only adds new permissions, does not remove existing ones
|
|
445
|
-
* (User may have customized permissions that should be preserved)
|
|
446
|
-
*/
|
|
447
|
-
function setupPermissions(requiredPermissions, error) {
|
|
448
|
-
const settingsPath = (0, path_1.join)((0, os_1.homedir)(), '.claude', 'settings.json');
|
|
449
|
-
try {
|
|
450
|
-
// Read existing settings
|
|
451
|
-
let settings = {};
|
|
452
|
-
if ((0, fs_1.existsSync)(settingsPath)) {
|
|
453
|
-
const content = (0, fs_1.readFileSync)(settingsPath, 'utf-8');
|
|
454
|
-
settings = JSON.parse(content);
|
|
455
|
-
}
|
|
456
|
-
// Ensure permissions.allow exists
|
|
457
|
-
if (!settings.permissions) {
|
|
458
|
-
settings.permissions = {};
|
|
459
|
-
}
|
|
460
|
-
const perms = settings.permissions;
|
|
461
|
-
if (!perms.allow) {
|
|
462
|
-
perms.allow = [];
|
|
463
|
-
}
|
|
464
|
-
const currentAllowList = perms.allow;
|
|
465
|
-
// Determine what to add
|
|
466
|
-
const added = [];
|
|
467
|
-
const existing = [];
|
|
468
|
-
requiredPermissions.forEach(perm => {
|
|
469
|
-
if (currentAllowList.includes(perm)) {
|
|
470
|
-
existing.push(perm);
|
|
471
|
-
}
|
|
472
|
-
else {
|
|
473
|
-
added.push(perm);
|
|
474
|
-
}
|
|
475
|
-
});
|
|
476
|
-
// Add new permissions
|
|
477
|
-
if (added.length > 0) {
|
|
478
|
-
perms.allow = [...currentAllowList, ...added];
|
|
479
|
-
(0, fs_1.writeFileSync)(settingsPath, JSON.stringify(settings, null, 2));
|
|
480
|
-
}
|
|
481
|
-
return { added, existing, success: true };
|
|
482
|
-
}
|
|
483
|
-
catch (err) {
|
|
484
|
-
error(`Could not configure permissions: ${err.message}`);
|
|
485
|
-
return { added: [], existing: [], success: false };
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
119
|
/**
|
|
489
120
|
* Install/update Claude Code Plugins
|
|
490
121
|
*/
|
|
491
122
|
const PluginsCommand = {
|
|
492
123
|
alias: ['p'],
|
|
493
124
|
description: 'Install Claude Code plugins',
|
|
494
|
-
hidden: false,
|
|
495
125
|
name: 'plugins',
|
|
496
126
|
run: (toolbox) => __awaiter(void 0, void 0, void 0, function* () {
|
|
497
|
-
var _a;
|
|
127
|
+
var _a, _b;
|
|
498
128
|
const { helper, parameters, print: { error, info, spin, success, warning }, system, } = toolbox;
|
|
499
129
|
// Start timer
|
|
500
130
|
const timer = system.startTimer();
|
|
131
|
+
// Check if claude CLI is available (before network requests)
|
|
132
|
+
const cli = (0, claude_cli_1.findClaudeCli)();
|
|
133
|
+
if (!cli) {
|
|
134
|
+
error('Claude CLI not found. Please install Claude Code first.');
|
|
135
|
+
info('');
|
|
136
|
+
info('Installation: https://docs.anthropic.com/en/docs/claude-code');
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
501
139
|
// Fetch available plugins from GitHub
|
|
502
140
|
let availablePlugins;
|
|
503
141
|
try {
|
|
504
|
-
availablePlugins = yield fetchAvailablePlugins(spin);
|
|
142
|
+
availablePlugins = yield (0, marketplace_1.fetchAvailablePlugins)(spin);
|
|
505
143
|
}
|
|
506
144
|
catch (err) {
|
|
507
145
|
error(`Failed to fetch plugins: ${err.message}`);
|
|
508
146
|
info('');
|
|
509
147
|
info('Check your internet connection or try again later.');
|
|
510
|
-
|
|
148
|
+
process.exit(1);
|
|
511
149
|
}
|
|
512
150
|
if (availablePlugins.length === 0) {
|
|
513
151
|
error('No plugins found in the repository.');
|
|
514
|
-
|
|
152
|
+
process.exit(1);
|
|
515
153
|
}
|
|
516
154
|
// Get plugin names from parameters (if provided)
|
|
517
155
|
const requestedPlugins = ((_a = parameters.array) === null || _a === void 0 ? void 0 : _a.filter((p) => typeof p === 'string')) || [];
|
|
@@ -538,21 +176,18 @@ const PluginsCommand = {
|
|
|
538
176
|
if (pluginsToInstall.length === 0) {
|
|
539
177
|
error('No valid plugins to install.');
|
|
540
178
|
info('');
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
info(` ${p.pluginName} - ${p.description}`);
|
|
544
|
-
});
|
|
545
|
-
return process.exit(1);
|
|
179
|
+
(0, marketplace_1.printAvailablePlugins)(availablePlugins, info);
|
|
180
|
+
process.exit(1);
|
|
546
181
|
}
|
|
547
182
|
info(`Installing ${pluginsToInstall.length} plugin${pluginsToInstall.length > 1 ? 's' : ''}: ${pluginsToInstall.map(p => p.pluginName).join(', ')}`);
|
|
548
183
|
}
|
|
549
184
|
else {
|
|
550
185
|
// Install all plugins from primary marketplace (lenne-tech) plus default external plugins
|
|
551
|
-
const primaryMarketplace = MARKETPLACES[0].name;
|
|
186
|
+
const primaryMarketplace = marketplace_1.MARKETPLACES[0].name;
|
|
552
187
|
const primaryPlugins = availablePlugins.filter(p => p.marketplaceName === primaryMarketplace);
|
|
553
188
|
// Add default external plugins
|
|
554
189
|
const externalPlugins = [];
|
|
555
|
-
for (const defaultPlugin of DEFAULT_EXTERNAL_PLUGINS) {
|
|
190
|
+
for (const defaultPlugin of marketplace_1.DEFAULT_EXTERNAL_PLUGINS) {
|
|
556
191
|
const plugin = availablePlugins.find(p => p.pluginName === defaultPlugin.pluginName && p.marketplaceName === defaultPlugin.marketplaceName);
|
|
557
192
|
if (plugin) {
|
|
558
193
|
externalPlugins.push(plugin);
|
|
@@ -568,14 +203,6 @@ const PluginsCommand = {
|
|
|
568
203
|
}
|
|
569
204
|
}
|
|
570
205
|
info('');
|
|
571
|
-
// Check if claude CLI is available
|
|
572
|
-
const cli = findClaudeCli();
|
|
573
|
-
if (!cli) {
|
|
574
|
-
error('Claude CLI not found. Please install Claude Code first.');
|
|
575
|
-
info('');
|
|
576
|
-
info('Installation: https://docs.anthropic.com/en/docs/claude-code');
|
|
577
|
-
return process.exit(1);
|
|
578
|
-
}
|
|
579
206
|
// Prepare marketplaces (add and update cache once per marketplace)
|
|
580
207
|
const preparedMarketplaces = prepareMarketplaces(pluginsToInstall, cli, toolbox);
|
|
581
208
|
info('');
|
|
@@ -586,8 +213,9 @@ const PluginsCommand = {
|
|
|
586
213
|
if (!preparedMarketplaces.has(plugin.marketplaceName)) {
|
|
587
214
|
results.push({
|
|
588
215
|
action: 'failed',
|
|
589
|
-
contents: EMPTY_PLUGIN_CONTENTS,
|
|
216
|
+
contents: plugin_utils_1.EMPTY_PLUGIN_CONTENTS,
|
|
590
217
|
plugin,
|
|
218
|
+
postInstall: null,
|
|
591
219
|
success: false,
|
|
592
220
|
});
|
|
593
221
|
continue;
|
|
@@ -615,7 +243,7 @@ const PluginsCommand = {
|
|
|
615
243
|
info('');
|
|
616
244
|
info('Installed:');
|
|
617
245
|
for (const result of successfulResults) {
|
|
618
|
-
printPluginSummary(result.plugin.pluginName, result.contents, info);
|
|
246
|
+
(0, plugin_utils_1.printPluginSummary)(result.plugin.pluginName, result.contents, info);
|
|
619
247
|
}
|
|
620
248
|
}
|
|
621
249
|
// Print failed installations
|
|
@@ -635,22 +263,43 @@ const PluginsCommand = {
|
|
|
635
263
|
info(` ${name}`);
|
|
636
264
|
}
|
|
637
265
|
info('');
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
266
|
+
(0, marketplace_1.printAvailablePlugins)(availablePlugins, info);
|
|
267
|
+
}
|
|
268
|
+
// Collect missing environment variables from all successful installations
|
|
269
|
+
const allMissingEnvVars = new Map();
|
|
270
|
+
for (const result of successfulResults) {
|
|
271
|
+
if ((_b = result.postInstall) === null || _b === void 0 ? void 0 : _b.envVarsMissing) {
|
|
272
|
+
for (const envVar of result.postInstall.envVarsMissing) {
|
|
273
|
+
if (!allMissingEnvVars.has(envVar.name)) {
|
|
274
|
+
allMissingEnvVars.set(envVar.name, envVar);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
642
278
|
}
|
|
279
|
+
// Handle missing environment variables
|
|
280
|
+
const envVarsResult = yield (0, plugin_utils_1.handleMissingEnvVars)(allMissingEnvVars, toolbox);
|
|
281
|
+
// Show next steps
|
|
643
282
|
if (successCount > 0) {
|
|
644
283
|
info('');
|
|
645
284
|
info('Next:');
|
|
646
|
-
|
|
285
|
+
if (envVarsResult.needed && !envVarsResult.configured) {
|
|
286
|
+
info(' 1. Set required environment variables (see above)');
|
|
287
|
+
info(' 2. Restart Claude Code to activate the plugins');
|
|
288
|
+
}
|
|
289
|
+
else if (envVarsResult.configured || allMissingEnvVars.size > 0) {
|
|
290
|
+
info(' 1. Restart your terminal or run source command');
|
|
291
|
+
info(' 2. Restart Claude Code to activate the plugins');
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
info(' Restart Claude Code to activate the plugins');
|
|
295
|
+
}
|
|
647
296
|
}
|
|
648
297
|
info('');
|
|
649
298
|
if (!toolbox.parameters.options.fromGluegunMenu) {
|
|
650
299
|
process.exit(totalIssues > 0 ? 1 : 0);
|
|
651
300
|
}
|
|
652
|
-
return '
|
|
301
|
+
return `${successCount} plugin${successCount !== 1 ? 's' : ''} installed${totalIssues > 0 ? `, ${totalIssues} failed` : ''}`;
|
|
653
302
|
}),
|
|
654
303
|
};
|
|
655
304
|
exports.default = PluginsCommand;
|
|
656
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jbGF1ZGUvcGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLGlEQUFvRDtBQUNwRCwyQkFBMEU7QUFFMUUsMkJBQTZCO0FBQzdCLCtCQUE0QjtBQWM1QixNQUFNLFlBQVksR0FBd0I7SUFDeEM7UUFDRSxPQUFPLEVBQUUsNkRBQTZEO1FBQ3RFLElBQUksRUFBRSxZQUFZO1FBQ2xCLE9BQU8sRUFBRSw4REFBOEQ7UUFDdkUsSUFBSSxFQUFFLHVCQUF1QjtLQUM5QjtJQUNEO1FBQ0UsT0FBTyxFQUFFLDBFQUEwRTtRQUNuRixJQUFJLEVBQUUseUJBQXlCO1FBQy9CLE9BQU8sRUFBRSwyRUFBMkU7UUFDcEYsSUFBSSxFQUFFLG9DQUFvQztLQUMzQztDQUNGLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLHdCQUF3QixHQUEyRDtJQUN2RixFQUFFLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUU7Q0FDN0UsQ0FBQztBQTJDRjs7R0FFRztBQUNILE1BQU0scUJBQXFCLEdBQW1CO0lBQzVDLE1BQU0sRUFBRSxFQUFFO0lBQ1YsUUFBUSxFQUFFLEVBQUU7SUFDWixLQUFLLEVBQUUsQ0FBQztJQUNSLFVBQVUsRUFBRSxFQUFFO0lBQ2QsV0FBVyxFQUFFLEVBQUU7SUFDZixNQUFNLEVBQUUsRUFBRTtDQUNYLENBQUM7QUF5QkY7O0dBRUc7QUFDSCxTQUFlLHFCQUFxQixDQUNsQyxJQUFzRjs7UUFFdEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFFckUsSUFBSSxDQUFDO1lBQ0gsa0RBQWtEO1lBQ2xELE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDL0IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLDJCQUEyQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQzFFLENBQUM7WUFFRixrQkFBa0I7WUFDbEIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRS9CLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDdEMsQ0FBQztZQUVELG1DQUFtQztZQUNuQyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDM0MsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO2dCQUMvRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7YUFDYixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRTdCLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNFLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxPQUFPLENBQUMsTUFBTSxhQUFhLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDaEUsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7WUFDMUQsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztDQUFBO0FBRUQ7O0dBRUc7QUFDSCxTQUFlLDJCQUEyQixDQUN4QyxXQUE4Qjs7UUFFOUIsTUFBTSxPQUFPLEdBQW1CLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUM7WUFDSCw0RUFBNEU7WUFDNUUsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLFdBQVcsQ0FBQyxPQUFPLGtDQUFrQyxDQUFDO1lBQ3BGLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUVoRSxJQUFJLHVCQUF1QixDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUM7b0JBQ0gsTUFBTSxtQkFBbUIsR0FBd0IsTUFBTSx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDdEYsSUFBSSxtQkFBbUIsQ0FBQyxPQUFPLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDMUUsS0FBSyxNQUFNLE1BQU0sSUFBSSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQzs0QkFDakQsT0FBTyxDQUFDLElBQUksQ0FBQztnQ0FDWCxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFO2dDQUNyQyxlQUFlLEVBQUUsV0FBVyxDQUFDLElBQUk7Z0NBQ2pDLGVBQWUsRUFBRSxXQUFXLENBQUMsSUFBSTtnQ0FDakMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJOzZCQUN4QixDQUFDLENBQUM7d0JBQ0wsQ0FBQzt3QkFDRCxPQUFPLE9BQU8sQ0FBQztvQkFDakIsQ0FBQztnQkFDSCxDQUFDO2dCQUFDLFdBQU0sQ0FBQztvQkFDUCxtRUFBbUU7Z0JBQ3JFLENBQUM7WUFDSCxDQUFDO1lBRUQsaUZBQWlGO1lBQ2pGLE1BQU0sV0FBVyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDLE9BQU8sVUFBVSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQztZQUVELE1BQU0sV0FBVyxHQUFxQixNQUFNLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvRCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztZQUU3RCxnREFBZ0Q7WUFDaEQsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQU8sR0FBRyxFQUFFLEVBQUU7Z0JBQ3BELElBQUksQ0FBQztvQkFDSCxNQUFNLFdBQVcsR0FBRyxHQUFHLFdBQVcsQ0FBQyxPQUFPLFlBQVksR0FBRyxDQUFDLElBQUksNkJBQTZCLENBQUM7b0JBQzVGLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBRWxELElBQUksZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUM7d0JBQ3hCLE1BQU0sUUFBUSxHQUFtQixNQUFNLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO3dCQUMvRCxPQUFPOzRCQUNMLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVzs0QkFDakMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxJQUFJOzRCQUNqQyxlQUFlLEVBQUUsV0FBVyxDQUFDLElBQUk7NEJBQ2pDLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSTt5QkFDVixDQUFDO29CQUNwQixDQUFDO2dCQUNILENBQUM7Z0JBQUMsV0FBTSxDQUFDO29CQUNQLHNDQUFzQztnQkFDeEMsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQSxDQUFDLENBQUM7WUFFSCxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBcUIsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFBQyxXQUFNLENBQUM7WUFDUCwrQ0FBK0M7UUFDakQsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FBQTtBQUVEOztHQUVHO0FBQ0gsU0FBUyxhQUFhO0lBQ3BCLE1BQU0sYUFBYSxHQUFHO1FBQ3BCLElBQUEsV0FBSSxFQUFDLElBQUEsWUFBTyxHQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUM7UUFDN0MsdUJBQXVCO1FBQ3ZCLGlCQUFpQjtLQUNsQixDQUFDO0lBRUYsS0FBSyxNQUFNLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUM5QixJQUFJLElBQUEsZUFBVSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUEsd0JBQVEsRUFBQyxjQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hHLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksSUFBSSxJQUFBLGVBQVUsRUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFBQyxXQUFNLENBQUM7UUFDUCxnQkFBZ0I7SUFDbEIsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxHQUFXLEVBQUUsUUFBUSxHQUFHLEVBQUU7SUFDbkQsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBQzdCLElBQUksQ0FBQyxJQUFBLGVBQVUsRUFBQyxHQUFHLENBQUM7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUVyQyxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFBLGdCQUFXLEVBQUMsR0FBRyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUQsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM1QixNQUFNLFFBQVEsR0FBRyxJQUFBLFdBQUksRUFBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBRXpFLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUM3RCxDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELHdGQUF3RjtnQkFDeEYsTUFBTSxXQUFXLEdBQUcsWUFBWTtxQkFDN0IsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7cUJBQ3BCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUFDLFdBQU0sQ0FBQztRQUNQLGdCQUFnQjtJQUNsQixDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZSxhQUFhLENBQzFCLE1BQW9CLEVBQ3BCLEdBQVcsRUFDWCxPQUErQjs7UUFFL0IsTUFBTSxFQUNKLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQzdCLEdBQUcsT0FBTyxDQUFDO1FBRVosbUNBQW1DO1FBQ25DLE1BQU0sY0FBYyxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN2RSxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFFaEYsSUFBSSxZQUFZLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM1RixZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQzlCLENBQUM7YUFBTSxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDL0YsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUMzQixDQUFDO1FBRUQsSUFBSSxhQUFhLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDckgsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO2FBQU0sQ0FBQztZQUNOLGFBQWEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQzdELEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ1QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLDZCQUE2QixNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMscUJBQXFCLGNBQWMsRUFBRSxDQUFDLENBQUM7WUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMvRSxDQUFDO1FBRUQsK0JBQStCO1FBQy9CLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXJGLHdGQUF3RjtRQUN4RixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvRixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDVCxJQUFJLENBQUMsNENBQTRDLE1BQU0sQ0FBQyxVQUFVLDBDQUEwQyxDQUFDLENBQUM7UUFDaEgsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixJQUFJLGNBQWMsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQywrQkFBK0IsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDN0UsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUV2RSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDaEMsV0FBVyxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsTUFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sU0FBUyxDQUFDLENBQUM7Z0JBQzVHLENBQUM7cUJBQU0sQ0FBQztvQkFDTixXQUFXLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDakYsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixXQUFXLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDN0UsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNULElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzNFLENBQUM7Q0FBQTtBQUVEOzs7R0FHRztBQUNILFNBQVMsbUJBQW1CLENBQzFCLE9BQXVCLEVBQ3ZCLEdBQVcsRUFDWCxPQUErQjtJQUUvQixNQUFNLEVBQ0osS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUN2QixHQUFHLE9BQU8sQ0FBQztJQUVaLHVDQUF1QztJQUN2QyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztJQUN2RCxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ2hELGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUUvQyxLQUFLLE1BQU0sQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLElBQUksY0FBYyxFQUFFLENBQUM7UUFDdkQsa0JBQWtCO1FBQ2xCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNqRSxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBRTVGLElBQUksU0FBUyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzlELFVBQVUsQ0FBQyxPQUFPLENBQUMsZUFBZSxlQUFlLFFBQVEsQ0FBQyxDQUFDO1FBQzdELENBQUM7YUFBTSxDQUFDO1lBQ04sVUFBVSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsZUFBZSxFQUFFLENBQUMsQ0FBQztZQUNoRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hCLFNBQVM7UUFDWCxDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxrQ0FBa0MsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUNoRixNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsNkJBQTZCLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFFM0YsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLGVBQWUsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RSxDQUFDO2FBQU0sQ0FBQztZQUNOLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxvQkFBb0IsZUFBZSw4QkFBOEIsRUFBRSxDQUFDLENBQUM7UUFDekgsQ0FBQztRQUVELG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FBTyxvQkFBb0IsQ0FBQztBQUM5QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGtCQUFrQixDQUN6QixVQUFrQixFQUNsQixRQUF3QixFQUN4QixJQUEyQjtJQUUzQixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRTVHLElBQUksVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNULElBQUksQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFdkIscUNBQXFDO1FBQ3JDLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUVELG1FQUFtRTtRQUNuRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxhQUFhLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDbEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztZQUNyRCxNQUFNLFdBQVcsR0FBRyxTQUFTLEdBQUcsQ0FBQztnQkFDL0IsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxTQUFTLE9BQU87Z0JBQzdDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxlQUFlLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxNQUFNLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxRQUFRLENBQUMsS0FBSyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxrQkFBa0IsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLE1BQU0sUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxhQUFhLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RSxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsa0JBQWtCLENBQUMsZUFBdUIsRUFBRSxVQUFrQjtJQUNyRSxNQUFNLFNBQVMsR0FBRyxJQUFBLFdBQUksRUFDcEIsSUFBQSxZQUFPLEdBQUUsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULGNBQWMsRUFDZCxlQUFlLEVBQ2YsU0FBUyxFQUNULFVBQVUsQ0FDWCxDQUFDO0lBRUYsTUFBTSxNQUFNLEdBQW1CO1FBQzdCLE1BQU0sRUFBRSxFQUFFO1FBQ1YsUUFBUSxFQUFFLEVBQUU7UUFDWixLQUFLLEVBQUUsQ0FBQztRQUNSLFVBQVUsRUFBRSxFQUFFO1FBQ2QsV0FBVyxFQUFFLEVBQUU7UUFDZixNQUFNLEVBQUUsRUFBRTtLQUNYLENBQUM7SUFFRixjQUFjO0lBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLElBQUksSUFBQSxlQUFVLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUEsZ0JBQVcsRUFBQyxTQUFTLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQzVELE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDdEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFBQyxXQUFNLENBQUM7WUFDUCxTQUFTO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjO0lBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLElBQUksSUFBQSxlQUFVLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUEsZ0JBQVcsRUFBQyxTQUFTLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQzVELE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDaEUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUFDLFdBQU0sQ0FBQztZQUNQLFNBQVM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixNQUFNLFdBQVcsR0FBRyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDaEQsTUFBTSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVqRCxhQUFhO0lBQ2IsTUFBTSxTQUFTLEdBQUcsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN6RCxJQUFJLElBQUEsZUFBVSxFQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFBLGlCQUFZLEVBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDbEUscUNBQXFDO1lBQ3JDLEtBQUssTUFBTSxVQUFVLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO3dCQUNuQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzs0QkFDdEQsTUFBTSxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQzt3QkFDekMsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLFdBQU0sQ0FBQztZQUNQLFNBQVM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDN0MsSUFBSSxJQUFBLGVBQVUsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBQSxpQkFBWSxFQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMxQixNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pELENBQUM7UUFDSCxDQUFDO1FBQUMsV0FBTSxDQUFDO1lBQ1AsU0FBUztRQUNYLENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLE1BQU0sZUFBZSxHQUFHLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVELElBQUksSUFBQSxlQUFVLEVBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFBLGlCQUFZLEVBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sV0FBVyxHQUFzQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUFDLFdBQU0sQ0FBQztZQUNQLFNBQVM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsR0FBVyxFQUFFLElBQVk7SUFDakQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBQSx5QkFBUyxFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzdDLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLEtBQUssRUFBRSxJQUFJO1lBQ1gsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7U0FDaEMsQ0FBQyxDQUFDO1FBQ0gsT0FBTztZQUNMLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNO1lBQ3JDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsT0FBTztZQUNMLE1BQU0sRUFBRSxHQUFHLENBQUMsT0FBTztZQUNuQixPQUFPLEVBQUUsS0FBSztTQUNmLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGdCQUFnQixDQUN2QixtQkFBNkIsRUFDN0IsS0FBNEI7SUFFNUIsTUFBTSxZQUFZLEdBQUcsSUFBQSxXQUFJLEVBQUMsSUFBQSxZQUFPLEdBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFakUsSUFBSSxDQUFDO1FBQ0gseUJBQXlCO1FBQ3pCLElBQUksUUFBUSxHQUE0QixFQUFFLENBQUM7UUFDM0MsSUFBSSxJQUFBLGVBQVUsRUFBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUEsaUJBQVksRUFBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDcEQsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBc0MsQ0FBQztRQUM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ25CLENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxLQUFpQixDQUFDO1FBRWpELHdCQUF3QjtRQUN4QixNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1FBRTlCLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILHNCQUFzQjtRQUN0QixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztZQUM5QyxJQUFBLGtCQUFhLEVBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixLQUFLLENBQUMsb0NBQW9DLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3JELENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLGNBQWMsR0FBbUI7SUFDckMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQ1osV0FBVyxFQUFFLDZCQUE2QjtJQUMxQyxNQUFNLEVBQUUsS0FBSztJQUNiLElBQUksRUFBRSxTQUFTO0lBQ2YsR0FBRyxFQUFFLENBQU8sT0FBK0IsRUFBRSxFQUFFOztRQUM3QyxNQUFNLEVBQ0osTUFBTSxFQUNOLFVBQVUsRUFDVixLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQzlDLE1BQU0sR0FDUCxHQUFHLE9BQU8sQ0FBQztRQUVaLGNBQWM7UUFDZCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEMsc0NBQXNDO1FBQ3RDLElBQUksZ0JBQWdDLENBQUM7UUFDckMsSUFBSSxDQUFDO1lBQ0gsZ0JBQWdCLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLEtBQUssQ0FBQyw0QkFBNEIsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ1QsSUFBSSxDQUFDLG9EQUFvRCxDQUFDLENBQUM7WUFDM0QsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztZQUM3QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELGlEQUFpRDtRQUNqRCxNQUFNLGdCQUFnQixHQUFHLENBQUEsTUFBQSxVQUFVLENBQUMsS0FBSywwQ0FBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQWUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxLQUFJLEVBQUUsQ0FBQztRQUVuRyxxQ0FBcUM7UUFDckMsSUFBSSxnQkFBZ0MsQ0FBQztRQUNyQyxNQUFNLGVBQWUsR0FBYSxFQUFFLENBQUM7UUFFckMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsZ0NBQWdDO1lBQ2hDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUV0QixLQUFLLE1BQU0sSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1gsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsQ0FBQztZQUNILENBQUM7WUFFRCwwREFBMEQ7WUFDMUQsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMvQixPQUFPLENBQUMsU0FBUyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckcsQ0FBQztZQUVELDRDQUE0QztZQUM1QyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDVCxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDM0IsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekIsQ0FBQztZQUVELElBQUksQ0FBQyxjQUFjLGdCQUFnQixDQUFDLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2SixDQUFDO2FBQU0sQ0FBQztZQUNOLDBGQUEwRjtZQUMxRixNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDaEQsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDO1lBRTlGLCtCQUErQjtZQUMvQixNQUFNLGVBQWUsR0FBbUIsRUFBRSxDQUFDO1lBQzNDLEtBQUssTUFBTSxhQUFhLElBQUksd0JBQXdCLEVBQUUsQ0FBQztnQkFDckQsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUNsQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssYUFBYSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsZUFBZSxLQUFLLGFBQWEsQ0FBQyxlQUFlLENBQ3RHLENBQUM7Z0JBQ0YsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWCxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQixDQUFDO1lBQ0gsQ0FBQztZQUVELGdCQUFnQixHQUFHLENBQUMsR0FBRyxjQUFjLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQztZQUUzRCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxjQUFjLGNBQWMsQ0FBQyxNQUFNLGlCQUFpQixrQkFBa0IsRUFBRSxDQUFDLENBQUM7Z0JBQy9FLElBQUksQ0FBQyxPQUFPLGVBQWUsQ0FBQyxNQUFNLHFCQUFxQixlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUcsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQywyQkFBMkIsZ0JBQWdCLENBQUMsTUFBTSxNQUFNLENBQUMsQ0FBQztZQUNqRSxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVULG1DQUFtQztRQUNuQyxNQUFNLEdBQUcsR0FBRyxhQUFhLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDVCxJQUFJLENBQUMsOERBQThELENBQUMsQ0FBQztZQUNyRSxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELG1FQUFtRTtRQUNuRSxNQUFNLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFVCxpRUFBaUU7UUFDakUsTUFBTSxPQUFPLEdBQWdHLEVBQUUsQ0FBQztRQUVoSCxLQUFLLE1BQU0sTUFBTSxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDdEMsd0RBQXdEO1lBQ3hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ1gsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLE1BQU07b0JBQ04sT0FBTyxFQUFFLEtBQUs7aUJBQ2YsQ0FBQyxDQUFDO2dCQUNILFNBQVM7WUFDWCxDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6RCxPQUFPLENBQUMsSUFBSSxpQ0FBTSxNQUFNLEtBQUUsTUFBTSxJQUFHLENBQUM7WUFFcEMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzVFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLDhCQUE4QjtZQUMxQyxDQUFDO1FBQ0gsQ0FBQztRQUVELFVBQVU7UUFDVixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUMzRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3pELE1BQU0sV0FBVyxHQUFHLFNBQVMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO1FBRXZELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNULElBQUksV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxHQUFHLFlBQVksVUFBVSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxHQUFHLFlBQVksZUFBZSxXQUFXLFNBQVMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hJLENBQUM7UUFFRCwrQ0FBK0M7UUFDL0MsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELElBQUksaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNULElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuQixLQUFLLE1BQU0sTUFBTSxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3ZDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEUsQ0FBQztRQUNILENBQUM7UUFFRCw2QkFBNkI7UUFDN0IsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDVCxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM5QixLQUFLLE1BQU0sTUFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNULE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN0QixLQUFLLE1BQU0sSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLENBQUM7WUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDVCxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUMzQixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2QsSUFBSSxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVULElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNoRCxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUVELE9BQU8sbUJBQW1CLENBQUM7SUFDN0IsQ0FBQyxDQUFBO0NBQ0YsQ0FBQztBQUVGLGtCQUFlLGNBQWMsQ0FBQyJ9
|
|
305
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jbGF1ZGUvcGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLHFEQUErRjtBQUMvRix1REFNK0I7QUFDL0IseURBVWdDO0FBRWhDOztHQUVHO0FBQ0gsU0FBZSxhQUFhLENBQzFCLE1BQW9CLEVBQ3BCLEdBQVcsRUFDWCxPQUErQjs7UUFFL0IsTUFBTSxFQUNKLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQzdCLEdBQUcsT0FBTyxDQUFDO1FBRVosbUNBQW1DO1FBQ25DLE1BQU0sY0FBYyxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN2RSxNQUFNLGFBQWEsR0FBRyxJQUFBLDZCQUFnQixFQUFDLEdBQUcsRUFBRSxrQkFBa0IsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUVoRixJQUFJLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzVGLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMvRixZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLGFBQWEsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFD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
|