@nlabs/lex 2.0.2 → 2.0.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.
@@ -33,27 +33,12 @@ const checkStorybookInitialization = ()=>{
33
33
  const lexConfigDir = pathResolve(LexConfig.getLexDir(), '.storybook');
34
34
  return existsSync(projectConfigDir) || existsSync(lexConfigDir);
35
35
  };
36
- const extractProgressPercentage = (output)=>{
37
- const lines = output.split('\n');
38
- for (const line of lines){
39
- if (line.includes('[webpack.Progress]') && line.includes('%')) {
40
- const percentageMatch = line.match(/(\d+)%/);
41
- if (percentageMatch) {
42
- return parseInt(percentageMatch[1]);
43
- }
44
- }
45
- }
46
- return null;
47
- };
48
36
  const filterAndBeautifyOutput = (output, isVerbose)=>{
49
37
  if (isVerbose) {
50
38
  return output;
51
39
  }
52
40
  const lines = output.split('\n');
53
41
  const filteredLines = lines.filter((line)=>{
54
- if (line.includes('[webpack.Progress]')) {
55
- return false;
56
- }
57
42
  if (line.includes('Storybook') || line.includes('Local:') || line.includes('http://localhost') || line.includes('info =>') || line.includes('Starting') || line.includes('ready') || line.includes('error') || line.includes('warning')) {
58
43
  return true;
59
44
  }
@@ -125,7 +110,7 @@ export const storybook = async (cmd, callback = ()=>({}))=>{
125
110
  log(chalk.gray(`Project config dir: ${projectConfigDir} (exists: ${existsSync(projectConfigDir)})`), 'info', quiet);
126
111
  log(chalk.gray(`Lex config dir: ${lexConfigDir} (exists: ${existsSync(lexConfigDir)})`), 'info', quiet);
127
112
  if (useLexConfig) {
128
- log(chalk.blue('Using Lex Storybook configuration (--use-lex-config flag)'), 'info', quiet);
113
+ log(chalk.blue('Using Lex Storybook configuration (--useLexConfig flag)'), 'info', quiet);
129
114
  }
130
115
  log(chalk.gray(`Initial config dir: ${configDir}`), 'info', quiet);
131
116
  }
@@ -201,16 +186,8 @@ export const storybook = async (cmd, callback = ()=>({}))=>{
201
186
  stdio: 'pipe'
202
187
  });
203
188
  let urlFound = false;
204
- let lastProgressPercentage = 0;
205
189
  storybookProcess.stdout?.on('data', (data)=>{
206
190
  const output = data.toString();
207
- const progressPercentage = extractProgressPercentage(output);
208
- if (progressPercentage !== null && progressPercentage !== lastProgressPercentage) {
209
- lastProgressPercentage = progressPercentage;
210
- const action = staticBuild ? 'Building' : 'Starting';
211
- spinner.text = `${action} Storybook... ${progressPercentage}%`;
212
- process.stdout.write(`\nWebpack Progress: ${chalk.magenta(`${progressPercentage}%`)}\n`);
213
- }
214
191
  const filteredOutput = filterAndBeautifyOutput(output, verbose);
215
192
  const beautifiedOutput = beautifyOutput(filteredOutput);
216
193
  if (!urlFound && (output.includes('Local:') || output.includes('http://localhost') || output.includes('Storybook'))) {
@@ -250,4 +227,4 @@ export const storybook = async (cmd, callback = ()=>({}))=>{
250
227
  }
251
228
  };
252
229
 
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zdG9yeWJvb2svc3Rvcnlib29rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7ZmluZFRhaWx3aW5kQ3NzUGF0aCwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Rvcnlib29rT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgb3Blbj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3RhdGljPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdXNlTGV4Q29uZmlnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgU3Rvcnlib29rQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmNvbnN0IGZpbmRTdG9yeUZpbGVzID0gKCk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qgc3RvcnlQYXR0ZXJucyA9IFtcbiAgICAnKiovKi5zdG9yaWVzLnt0cyx0c3gsanMsanN4fScsXG4gICAgJyoqLyouc3Rvcnkue3RzLHRzeCxqcyxqc3h9JyxcbiAgICAnKiovc3Rvcmllcy8qKi8qLnt0cyx0c3gsanMsanN4fSdcbiAgXTtcblxuICBjb25zdCBzdG9yeUZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHN0b3J5UGF0dGVybnMuZm9yRWFjaCgocGF0dGVybikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZ2xvYlN5bmMocGF0dGVybiwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgaWdub3JlOiBbJyoqL25vZGVfbW9kdWxlcy8qKicsICcqKi9kaXN0LyoqJywgJyoqL2xpYi8qKicsICcqKi9idWlsZC8qKiddXG4gICAgfSk7XG4gICAgc3RvcnlGaWxlcy5wdXNoKC4uLmZpbGVzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0b3J5RmlsZXM7XG59O1xuXG5jb25zdCBjaGVja1N0b3J5Ym9va0luaXRpYWxpemF0aW9uID0gKCk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBwcm9qZWN0Q29uZmlnRGlyID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5zdG9yeWJvb2snKTtcbiAgY29uc3QgbGV4Q29uZmlnRGlyID0gcGF0aFJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnLnN0b3J5Ym9vaycpO1xuXG4gIHJldHVybiBleGlzdHNTeW5jKHByb2plY3RDb25maWdEaXIpIHx8IGV4aXN0c1N5bmMobGV4Q29uZmlnRGlyKTtcbn07XG5cbmNvbnN0IGV4dHJhY3RQcm9ncmVzc1BlcmNlbnRhZ2UgPSAob3V0cHV0OiBzdHJpbmcpOiBudW1iZXIgfCBudWxsID0+IHtcbiAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpO1xuICBmb3IoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmKGxpbmUuaW5jbHVkZXMoJ1t3ZWJwYWNrLlByb2dyZXNzXScpICYmIGxpbmUuaW5jbHVkZXMoJyUnKSkge1xuICAgICAgY29uc3QgcGVyY2VudGFnZU1hdGNoID0gbGluZS5tYXRjaCgvKFxcZCspJS8pO1xuICAgICAgaWYocGVyY2VudGFnZU1hdGNoKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChwZXJjZW50YWdlTWF0Y2hbMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IGZpbHRlckFuZEJlYXV0aWZ5T3V0cHV0ID0gKG91dHB1dDogc3RyaW5nLCBpc1ZlcmJvc2U6IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuICBpZihpc1ZlcmJvc2UpIHtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBmaWx0ZXJlZExpbmVzID0gbGluZXMuZmlsdGVyKChsaW5lKSA9PiB7XG4gICAgaWYobGluZS5pbmNsdWRlcygnW3dlYnBhY2suUHJvZ3Jlc3NdJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZihsaW5lLmluY2x1ZGVzKCdTdG9yeWJvb2snKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnTG9jYWw6JykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ2h0dHA6Ly9sb2NhbGhvc3QnKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnaW5mbyA9PicpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdTdGFydGluZycpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdyZWFkeScpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdlcnJvcicpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCd3YXJuaW5nJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICByZXR1cm4gZmlsdGVyZWRMaW5lcy5qb2luKCdcXG4nKTtcbn07XG5cbmNvbnN0IGJlYXV0aWZ5T3V0cHV0ID0gKG91dHB1dDogc3RyaW5nKTogc3RyaW5nID0+IG91dHB1dFxuICAucmVwbGFjZSgvU3Rvcnlib29rIHZbXFxkLl0rL2csIGNoYWxrLmN5YW4oJyQmJykpXG4gIC5yZXBsYWNlKC9pbmZvID0+L2csIGNoYWxrLmJsdWUoJ2luZm8gPT4nKSlcbiAgLnJlcGxhY2UoL0xvY2FsOi9nLCBjaGFsay5ncmVlbignTG9jYWw6JykpXG4gIC5yZXBsYWNlKC9PbiB5b3VyIG5ldHdvcms6L2csIGNoYWxrLmdyZWVuKCdPbiB5b3VyIG5ldHdvcms6JykpXG4gIC5yZXBsYWNlKC9TdG9yeWJvb2suKnN0YXJ0ZWQvZywgY2hhbGsuZ3JlZW4oJyQmJykpXG4gIC5yZXBsYWNlKC9TdG9yeWJvb2suKnJlYWR5L2csIGNoYWxrLmdyZWVuKCckJicpKVxuICAucmVwbGFjZSgvZXJyb3IvZywgY2hhbGsucmVkKCckJicpKVxuICAucmVwbGFjZSgvd2FybmluZy9nLCBjaGFsay55ZWxsb3coJyQmJykpXG4gIC5yZXBsYWNlKC8oXFxkKyklL2csIGNoYWxrLm1hZ2VudGEoJyQxJScpKTtcblxuZXhwb3J0IGNvbnN0IHN0b3J5Ym9vayA9IGFzeW5jIChjbWQ6IFN0b3J5Ym9va09wdGlvbnMsIGNhbGxiYWNrOiBTdG9yeWJvb2tDYWxsYmFjayA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBjb25maWcsIG9wZW4gPSBmYWxzZSwgcG9ydCA9IDYwMDcsIHF1aWV0LCBzdGF0aWM6IHN0YXRpY0J1aWxkID0gZmFsc2UsIHVzZUxleENvbmZpZyA9IGZhbHNlLCB2YXJpYWJsZXMsIHZlcmJvc2UgPSBmYWxzZX0gPSBjbWQ7XG5cbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGxvZyhjaGFsay5jeWFuKGAke2NsaU5hbWV9IHN0YXJ0aW5nIFN0b3J5Ym9vay4uLmApLCAnaW5mbycsIHF1aWV0KTtcblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICBsZXQgdmFyaWFibGVzT2JqOiBvYmplY3QgPSB7Tk9ERV9FTlY6ICdkZXZlbG9wbWVudCd9O1xuXG4gIGlmKHZhcmlhYmxlcykge1xuICAgIHRyeSB7XG4gICAgICB2YXJpYWJsZXNPYmogPSBKU09OLnBhcnNlKHZhcmlhYmxlcyk7XG4gICAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRW52aXJvbm1lbnQgdmFyaWFibGVzIG9wdGlvbiBpcyBub3QgYSB2YWxpZCBKU09OIG9iamVjdC5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3MuZW52ID0gey4uLnByb2Nlc3MuZW52LCAuLi52YXJpYWJsZXNPYmp9O1xuXG4gIHNwaW5uZXIuc3RhcnQoJ0ZpbmRpbmcgc3RvcnkgZmlsZXMuLi4nKTtcbiAgY29uc3Qgc3RvcnlGaWxlcyA9IGZpbmRTdG9yeUZpbGVzKCk7XG5cbiAgaWYoc3RvcnlGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICBzcGlubmVyLmZhaWwoJ05vIHN0b3J5IGZpbGVzIGZvdW5kIGluIHRoZSBwcm9qZWN0LicpO1xuICAgIGxvZygnUGxlYXNlIGNyZWF0ZSBzdG9yeSBmaWxlcyB3aXRoIC5zdG9yaWVzLnRzLy5zdG9yaWVzLmpzIGV4dGVuc2lvbnMgb3IgaW4gYSBzdG9yaWVzLyBkaXJlY3RvcnkuJywgJ2luZm8nLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBzcGlubmVyLnN1Y2NlZWQoYEZvdW5kICR7c3RvcnlGaWxlcy5sZW5ndGh9IHN0b3J5IGZpbGUocylgKTtcblxuICBjb25zdCB0YWlsd2luZENzc1BhdGggPSBmaW5kVGFpbHdpbmRDc3NQYXRoKCk7XG5cbiAgY29uc29sZS5sb2coe3RhaWx3aW5kQ3NzUGF0aH0pO1xuICBpZih0YWlsd2luZENzc1BhdGgpIHtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGxvZyhjaGFsay5ncmVlbihg4pyTIFRhaWx3aW5kIENTUyBpbnRlZ3JhdGlvbiBkZXRlY3RlZDogJHt0YWlsd2luZENzc1BhdGh9YCksICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGxvZyhjaGFsay55ZWxsb3coJ+KaoCBObyBUYWlsd2luZCBDU1MgZmlsZSBmb3VuZCBpbiBwcm9qZWN0JyksICdpbmZvJywgcXVpZXQpO1xuICAgICAgbG9nKGNoYWxrLmdyYXkoJ0NyZWF0ZSBhIHRhaWx3aW5kLmNzcyBmaWxlIHdpdGggQHRhaWx3aW5kIGRpcmVjdGl2ZXMgZm9yIGZ1bGwgVGFpbHdpbmQgc3VwcG9ydCcpLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gIH1cblxuICBpZighY2hlY2tTdG9yeWJvb2tJbml0aWFsaXphdGlvbigpKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdTdG9yeWJvb2sgaXMgbm90IGluaXRpYWxpemVkIGluIHRoaXMgcHJvamVjdCBvciBpbiBMZXguJyk7XG4gICAgbG9nKCdQbGVhc2UgcnVuIFwibnB4IHN0b3J5Ym9va0BsYXRlc3QgaW5pdFwiIHRvIHNldCB1cCBTdG9yeWJvb2sgaW4geW91ciBwcm9qZWN0LCBvciBlbnN1cmUgTGV4IGhhcyBhIHZhbGlkIC5zdG9yeWJvb2sgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHByb2plY3RDb25maWdEaXIgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLnN0b3J5Ym9vaycpO1xuICBjb25zdCBsZXhDb25maWdEaXIgPSBwYXRoUmVzb2x2ZShMZXhDb25maWcuZ2V0TGV4RGlyKCksICcuc3Rvcnlib29rJyk7XG5cbiAgbGV0IGNvbmZpZ0RpciA9IGNvbmZpZztcbiAgaWYoIWNvbmZpZ0Rpcikge1xuICAgIGNvbmZpZ0RpciA9IGxleENvbmZpZ0RpcjtcbiAgICBpZighdXNlTGV4Q29uZmlnICYmIGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ0RpcikpIHtcbiAgICAgIGNvbmZpZ0RpciA9IHByb2plY3RDb25maWdEaXI7XG4gICAgfVxuICB9XG5cbiAgaWYoIXF1aWV0KSB7XG4gICAgbG9nKGNoYWxrLmdyYXkoYFByb2plY3QgY29uZmlnIGRpcjogJHtwcm9qZWN0Q29uZmlnRGlyfSAoZXhpc3RzOiAke2V4aXN0c1N5bmMocHJvamVjdENvbmZpZ0Rpcil9KWApLCAnaW5mbycsIHF1aWV0KTtcbiAgICBsb2coY2hhbGsuZ3JheShgTGV4IGNvbmZpZyBkaXI6ICR7bGV4Q29uZmlnRGlyfSAoZXhpc3RzOiAke2V4aXN0c1N5bmMobGV4Q29uZmlnRGlyKX0pYCksICdpbmZvJywgcXVpZXQpO1xuICAgIGlmKHVzZUxleENvbmZpZykge1xuICAgICAgbG9nKGNoYWxrLmJsdWUoJ1VzaW5nIExleCBTdG9yeWJvb2sgY29uZmlndXJhdGlvbiAoLS11c2UtbGV4LWNvbmZpZyBmbGFnKScpLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gICAgbG9nKGNoYWxrLmdyYXkoYEluaXRpYWwgY29uZmlnIGRpcjogJHtjb25maWdEaXJ9YCksICdpbmZvJywgcXVpZXQpO1xuICB9XG5cbiAgaWYoY29uZmlnRGlyID09PSBsZXhDb25maWdEaXIpIHtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGxvZyhjaGFsay5ibHVlKCdVc2luZyBMZXggY29uZmlnLCB3aWxsIGNyZWF0ZSB0ZW1wb3JhcnkgY29uZmlnIGluIHByb2plY3QgLnN0b3J5Ym9vayBkaXJlY3RvcnknKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgfVxuICAgIGNvbnN0IHByb2plY3RTdG9yeWJvb2tEaXIgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLnN0b3J5Ym9vaycpO1xuXG4gICAgY29uc3QgZnMgPSBhd2FpdCBpbXBvcnQoJ2ZzL3Byb21pc2VzJyk7XG4gICAgYXdhaXQgZnMubWtkaXIocHJvamVjdFN0b3J5Ym9va0Rpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgY29uc3QgbGV4TWFpblBhdGggPSBwYXRoUmVzb2x2ZShsZXhDb25maWdEaXIsICdtYWluLnRzJyk7XG4gICAgY29uc3QgcHJvamVjdE1haW5QYXRoID0gcGF0aFJlc29sdmUocHJvamVjdFN0b3J5Ym9va0RpciwgJ21haW4udHMnKTtcbiAgICBsZXQgbWFpbkNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShsZXhNYWluUGF0aCwgJ3V0ZjgnKTtcblxuICAgIG1haW5Db250ZW50ID0gbWFpbkNvbnRlbnQucmVwbGFjZShcbiAgICAgIC9zdG9yaWVzOlxccypcXFsuKj9cXF0vLFxuICAgICAgYHN0b3JpZXM6IFsnJHtwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnc3JjLyoqLyouc3Rvcmllcy5AKHRzfHRzeCknKX0nLCAnJHtwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnc3JjLyoqLyoubWR4Jyl9J11gXG4gICAgKTtcblxuICAgIGNvbnN0IGxleE5vZGVNb2R1bGVzID0gcGF0aFJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnbm9kZV9tb2R1bGVzJyk7XG4gICAgbWFpbkNvbnRlbnQgPSBtYWluQ29udGVudC5yZXBsYWNlKFxuICAgICAgL2NvbnN0IGxleE1vZHVsZSA9IFxcKG1vZHVsZVBhdGg6IHN0cmluZ1xcKSA9PiByZXNvbHZlXFwoZ2V0TGV4Tm9kZU1vZHVsZXNQYXRoXFwoXFwpLCBtb2R1bGVQYXRoXFwpOy8sXG4gICAgICBgY29uc3QgbGV4TW9kdWxlID0gKG1vZHVsZVBhdGg6IHN0cmluZykgPT4gcmVzb2x2ZSgnJHtsZXhOb2RlTW9kdWxlc30nLCBtb2R1bGVQYXRoKTtgXG4gICAgKTtcblxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwcm9qZWN0TWFpblBhdGgsIG1haW5Db250ZW50KTtcblxuICAgIGNvbnN0IGxleFByZXZpZXdQYXRoID0gcGF0aFJlc29sdmUobGV4Q29uZmlnRGlyLCAncHJldmlldy50c3gnKTtcbiAgICBpZihleGlzdHNTeW5jKGxleFByZXZpZXdQYXRoKSkge1xuICAgICAgY29uc3QgcHJldmlld0NvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShsZXhQcmV2aWV3UGF0aCwgJ3V0ZjgnKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoUmVzb2x2ZShwcm9qZWN0U3Rvcnlib29rRGlyLCAncHJldmlldy50c3gnKSwgcHJldmlld0NvbnRlbnQpO1xuICAgIH1cblxuICAgIGNvbmZpZ0RpciA9IHByb2plY3RTdG9yeWJvb2tEaXI7XG4gIH1cbiAgaWYoIWV4aXN0c1N5bmMoY29uZmlnRGlyKSkge1xuICAgIHNwaW5uZXIuZmFpbCgnU3Rvcnlib29rIGNvbmZpZ3VyYXRpb24gbm90IGZvdW5kLicpO1xuICAgIGxvZyhgUHJvamVjdCBjb25maWc6ICR7cHJvamVjdENvbmZpZ0Rpcn1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICBsb2coYExleCBjb25maWc6ICR7bGV4Q29uZmlnRGlyfWAsICdpbmZvJywgcXVpZXQpO1xuICAgIGxvZygnUGxlYXNlIHJ1biBcIm5weCBzdG9yeWJvb2tAbGF0ZXN0IGluaXRcIiB0byBzZXQgdXAgU3Rvcnlib29rIGluIHlvdXIgcHJvamVjdCwgb3IgZW5zdXJlIExleCBoYXMgYSB2YWxpZCAuc3Rvcnlib29rIGNvbmZpZ3VyYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBjb25zdCBzdG9yeWJvb2tQYXRoID0gcmVzb2x2ZUJpbmFyeVBhdGgoJ3N0b3J5Ym9vaycpO1xuXG4gIGlmKCFzdG9yeWJvb2tQYXRoKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBzdG9yeWJvb2sgYmluYXJ5IG5vdCBmb3VuZCBpbiBMZXgncyBub2RlX21vZHVsZXMgb3IgbW9ub3JlcG8gcm9vdGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBsb2coJ1BsZWFzZSByZWluc3RhbGwgTGV4IG9yIGNoZWNrIHlvdXIgU3Rvcnlib29rIGluc3RhbGxhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHN0b3J5Ym9va0FyZ3MgPSBbc3RhdGljQnVpbGQgPyAnYnVpbGQnIDogJ2RldiddO1xuICBzdG9yeWJvb2tBcmdzLnB1c2goJy0tY29uZmlnLWRpcicsIGNvbmZpZ0Rpcik7XG5cbiAgaWYocG9ydCkge1xuICAgIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1wb3J0JywgcG9ydC50b1N0cmluZygpKTtcbiAgfVxuXG4gIGlmKG9wZW4pIHtcbiAgICBzdG9yeWJvb2tBcmdzLnB1c2goJy0tb3BlbicpO1xuICB9XG5cbiAgaWYoc3RhdGljQnVpbGQpIHtcbiAgICBjb25zdCBvdXRwdXREaXIgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnc3Rvcnlib29rLXN0YXRpYycpO1xuICAgIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1vdXRwdXQtZGlyJywgb3V0cHV0RGlyKTtcbiAgfVxuXG4gIGlmKCFxdWlldCkge1xuICAgIGxvZyhjaGFsay5ncmF5KGBDb25maWcgZGlyZWN0b3J5OiAke2NvbmZpZ0Rpcn1gKSwgJ2luZm8nLCBxdWlldCk7XG4gIH1cblxuICBwcm9jZXNzLmVudi5UQUlMV0lORF9DU1NfUEFUSCA9IHRhaWx3aW5kQ3NzUGF0aDtcblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoc3RhdGljQnVpbGQgPyAnQnVpbGRpbmcgc3RhdGljIFN0b3J5Ym9vay4uLicgOiAnU3RhcnRpbmcgU3Rvcnlib29rIGRldmVsb3BtZW50IHNlcnZlci4uLicpO1xuXG4gICAgY29uc3Qgc3Rvcnlib29rUHJvY2VzcyA9IGV4ZWNhKHN0b3J5Ym9va1BhdGggYXMgYW55LCBzdG9yeWJvb2tBcmdzLCB7XG4gICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICBMRVhfUVVJRVQ6IHF1aWV0LFxuICAgICAgICBMRVhfVkVSQk9TRTogdmVyYm9zZSxcbiAgICAgICAgU1RPUllCT09LX09QRU46IG9wZW4sXG4gICAgICAgIC4uLih0YWlsd2luZENzc1BhdGggJiYge1RBSUxXSU5EX0NTU19QQVRIOiB0YWlsd2luZENzc1BhdGh9KVxuICAgICAgfSBhcyBhbnksXG4gICAgICBzdGRpbzogJ3BpcGUnXG4gICAgfSk7XG5cbiAgICBsZXQgdXJsRm91bmQgPSBmYWxzZTtcbiAgICBsZXQgbGFzdFByb2dyZXNzUGVyY2VudGFnZSA9IDA7XG5cbiAgICBzdG9yeWJvb2tQcm9jZXNzLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgY29uc3QgcHJvZ3Jlc3NQZXJjZW50YWdlID0gZXh0cmFjdFByb2dyZXNzUGVyY2VudGFnZShvdXRwdXQpO1xuXG4gICAgICBpZihwcm9ncmVzc1BlcmNlbnRhZ2UgIT09IG51bGwgJiYgcHJvZ3Jlc3NQZXJjZW50YWdlICE9PSBsYXN0UHJvZ3Jlc3NQZXJjZW50YWdlKSB7XG4gICAgICAgIGxhc3RQcm9ncmVzc1BlcmNlbnRhZ2UgPSBwcm9ncmVzc1BlcmNlbnRhZ2U7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHN0YXRpY0J1aWxkID8gJ0J1aWxkaW5nJyA6ICdTdGFydGluZyc7XG4gICAgICAgIChzcGlubmVyIGFzIGFueSkudGV4dCA9IGAke2FjdGlvbn0gU3Rvcnlib29rLi4uICR7cHJvZ3Jlc3NQZXJjZW50YWdlfSVgO1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxuV2VicGFjayBQcm9ncmVzczogJHtjaGFsay5tYWdlbnRhKGAke3Byb2dyZXNzUGVyY2VudGFnZX0lYCl9XFxuYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbHRlcmVkT3V0cHV0ID0gZmlsdGVyQW5kQmVhdXRpZnlPdXRwdXQob3V0cHV0LCB2ZXJib3NlKTtcbiAgICAgIGNvbnN0IGJlYXV0aWZpZWRPdXRwdXQgPSBiZWF1dGlmeU91dHB1dChmaWx0ZXJlZE91dHB1dCk7XG5cbiAgICAgIGlmKCF1cmxGb3VuZCAmJiAob3V0cHV0LmluY2x1ZGVzKCdMb2NhbDonKSB8fCBvdXRwdXQuaW5jbHVkZXMoJ2h0dHA6Ly9sb2NhbGhvc3QnKSB8fCBvdXRwdXQuaW5jbHVkZXMoJ1N0b3J5Ym9vaycpKSkge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoY2hhbGsuZ3JlZW4oJ1N0b3J5Ym9vayBkZXZlbG9wbWVudCBzZXJ2ZXIgaXMgcmVhZHkhJykpO1xuICAgICAgICB1cmxGb3VuZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmKGZpbHRlcmVkT3V0cHV0LnRyaW0oKSkge1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShiZWF1dGlmaWVkT3V0cHV0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0b3J5Ym9va1Byb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBmaWx0ZXJlZE91dHB1dCA9IGZpbHRlckFuZEJlYXV0aWZ5T3V0cHV0KG91dHB1dCwgdmVyYm9zZSk7XG4gICAgICBjb25zdCBiZWF1dGlmaWVkT3V0cHV0ID0gYmVhdXRpZnlPdXRwdXQoZmlsdGVyZWRPdXRwdXQpO1xuXG4gICAgICBpZihmaWx0ZXJlZE91dHB1dC50cmltKCkpIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYmVhdXRpZmllZE91dHB1dCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc3Rvcnlib29rUHJvY2VzcztcbiAgICAgIGlmKCF1cmxGb3VuZCkge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoY2hhbGsuZ3JlZW4oJ1N0b3J5Ym9vayBkZXZlbG9wbWVudCBzZXJ2ZXIgc3RhcnRlZC4nKSk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjaygwKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIHNwaW5uZXIuZmFpbChjaGFsay5yZWQoJ1RoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBydW5uaW5nIHN0b3J5Ym9vay4nKSk7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBzcGlubmVyLmZhaWwoJ1RoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBydW5uaW5nIHN0b3J5Ym9vay4nKTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTsiXSwibmFtZXMiOlsiY2hhbGsiLCJleGVjYSIsImV4aXN0c1N5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwiZmluZFRhaWx3aW5kQ3NzUGF0aCIsInJlc29sdmVCaW5hcnlQYXRoIiwibG9nIiwiZmluZFN0b3J5RmlsZXMiLCJzdG9yeVBhdHRlcm5zIiwic3RvcnlGaWxlcyIsImZvckVhY2giLCJwYXR0ZXJuIiwiZmlsZXMiLCJjd2QiLCJwcm9jZXNzIiwiaWdub3JlIiwicHVzaCIsImNoZWNrU3Rvcnlib29rSW5pdGlhbGl6YXRpb24iLCJwcm9qZWN0Q29uZmlnRGlyIiwibGV4Q29uZmlnRGlyIiwiZ2V0TGV4RGlyIiwiZXh0cmFjdFByb2dyZXNzUGVyY2VudGFnZSIsIm91dHB1dCIsImxpbmVzIiwic3BsaXQiLCJsaW5lIiwiaW5jbHVkZXMiLCJwZXJjZW50YWdlTWF0Y2giLCJtYXRjaCIsInBhcnNlSW50IiwiZmlsdGVyQW5kQmVhdXRpZnlPdXRwdXQiLCJpc1ZlcmJvc2UiLCJmaWx0ZXJlZExpbmVzIiwiZmlsdGVyIiwiam9pbiIsImJlYXV0aWZ5T3V0cHV0IiwicmVwbGFjZSIsImN5YW4iLCJibHVlIiwiZ3JlZW4iLCJyZWQiLCJ5ZWxsb3ciLCJtYWdlbnRhIiwic3Rvcnlib29rIiwiY21kIiwiY2FsbGJhY2siLCJjbGlOYW1lIiwiY29uZmlnIiwib3BlbiIsInBvcnQiLCJxdWlldCIsInN0YXRpYyIsInN0YXRpY0J1aWxkIiwidXNlTGV4Q29uZmlnIiwidmFyaWFibGVzIiwidmVyYm9zZSIsInNwaW5uZXIiLCJwYXJzZUNvbmZpZyIsInZhcmlhYmxlc09iaiIsIk5PREVfRU5WIiwiSlNPTiIsInBhcnNlIiwiX2Vycm9yIiwiZW52Iiwic3RhcnQiLCJsZW5ndGgiLCJmYWlsIiwic3VjY2VlZCIsInRhaWx3aW5kQ3NzUGF0aCIsImNvbnNvbGUiLCJncmF5IiwiY29uZmlnRGlyIiwicHJvamVjdFN0b3J5Ym9va0RpciIsImZzIiwibWtkaXIiLCJyZWN1cnNpdmUiLCJsZXhNYWluUGF0aCIsInByb2plY3RNYWluUGF0aCIsIm1haW5Db250ZW50IiwicmVhZEZpbGUiLCJsZXhOb2RlTW9kdWxlcyIsIndyaXRlRmlsZSIsImxleFByZXZpZXdQYXRoIiwicHJldmlld0NvbnRlbnQiLCJzdG9yeWJvb2tQYXRoIiwic3Rvcnlib29rQXJncyIsInRvU3RyaW5nIiwib3V0cHV0RGlyIiwiVEFJTFdJTkRfQ1NTX1BBVEgiLCJzdG9yeWJvb2tQcm9jZXNzIiwiZW5jb2RpbmciLCJMRVhfUVVJRVQiLCJMRVhfVkVSQk9TRSIsIlNUT1JZQk9PS19PUEVOIiwic3RkaW8iLCJ1cmxGb3VuZCIsImxhc3RQcm9ncmVzc1BlcmNlbnRhZ2UiLCJzdGRvdXQiLCJvbiIsImRhdGEiLCJwcm9ncmVzc1BlcmNlbnRhZ2UiLCJhY3Rpb24iLCJ0ZXh0Iiwid3JpdGUiLCJmaWx0ZXJlZE91dHB1dCIsImJlYXV0aWZpZWRPdXRwdXQiLCJ0cmltIiwic3RkZXJyIiwiZXJyb3IiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsU0FBUUMsS0FBSyxRQUFPLFFBQVE7QUFDNUIsU0FBUUMsVUFBVSxRQUFPLEtBQUs7QUFDOUIsU0FBUUMsUUFBUUMsUUFBUSxRQUFPLE9BQU87QUFDdEMsU0FBUUMsV0FBV0MsV0FBVyxRQUFPLE9BQU87QUFFNUMsU0FBUUMsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxhQUFhLFFBQU8scUJBQXFCO0FBQ2pELFNBQVFDLG1CQUFtQixFQUFFQyxpQkFBaUIsUUFBTyxzQkFBc0I7QUFDM0UsU0FBUUMsR0FBRyxRQUFPLHFCQUFxQjtBQWdCdkMsTUFBTUMsaUJBQWlCO0lBQ3JCLE1BQU1DLGdCQUFnQjtRQUNwQjtRQUNBO1FBQ0E7S0FDRDtJQUVELE1BQU1DLGFBQXVCLEVBQUU7SUFFL0JELGNBQWNFLE9BQU8sQ0FBQyxDQUFDQztRQUNyQixNQUFNQyxRQUFRYixTQUFTWSxTQUFTO1lBQzlCRSxLQUFLQyxRQUFRRCxHQUFHO1lBQ2hCRSxRQUFRO2dCQUFDO2dCQUFzQjtnQkFBYztnQkFBYTthQUFjO1FBQzFFO1FBQ0FOLFdBQVdPLElBQUksSUFBSUo7SUFDckI7SUFFQSxPQUFPSDtBQUNUO0FBRUEsTUFBTVEsK0JBQStCO0lBQ25DLE1BQU1DLG1CQUFtQmpCLFlBQVlhLFFBQVFELEdBQUcsSUFBSTtJQUNwRCxNQUFNTSxlQUFlbEIsWUFBWUMsVUFBVWtCLFNBQVMsSUFBSTtJQUV4RCxPQUFPdkIsV0FBV3FCLHFCQUFxQnJCLFdBQVdzQjtBQUNwRDtBQUVBLE1BQU1FLDRCQUE0QixDQUFDQztJQUNqQyxNQUFNQyxRQUFRRCxPQUFPRSxLQUFLLENBQUM7SUFDM0IsS0FBSSxNQUFNQyxRQUFRRixNQUFPO1FBQ3ZCLElBQUdFLEtBQUtDLFFBQVEsQ0FBQyx5QkFBeUJELEtBQUtDLFFBQVEsQ0FBQyxNQUFNO1lB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
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zdG9yeWJvb2svc3Rvcnlib29rLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7ZmluZFRhaWx3aW5kQ3NzUGF0aCwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Rvcnlib29rT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgb3Blbj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHBvcnQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc3RhdGljPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdXNlTGV4Q29uZmlnPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgU3Rvcnlib29rQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmNvbnN0IGZpbmRTdG9yeUZpbGVzID0gKCk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qgc3RvcnlQYXR0ZXJucyA9IFtcbiAgICAnKiovKi5zdG9yaWVzLnt0cyx0c3gsanMsanN4fScsXG4gICAgJyoqLyouc3Rvcnkue3RzLHRzeCxqcyxqc3h9JyxcbiAgICAnKiovc3Rvcmllcy8qKi8qLnt0cyx0c3gsanMsanN4fSdcbiAgXTtcblxuICBjb25zdCBzdG9yeUZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHN0b3J5UGF0dGVybnMuZm9yRWFjaCgocGF0dGVybikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZ2xvYlN5bmMocGF0dGVybiwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgaWdub3JlOiBbJyoqL25vZGVfbW9kdWxlcy8qKicsICcqKi9kaXN0LyoqJywgJyoqL2xpYi8qKicsICcqKi9idWlsZC8qKiddXG4gICAgfSk7XG4gICAgc3RvcnlGaWxlcy5wdXNoKC4uLmZpbGVzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHN0b3J5RmlsZXM7XG59O1xuXG5jb25zdCBjaGVja1N0b3J5Ym9va0luaXRpYWxpemF0aW9uID0gKCk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBwcm9qZWN0Q29uZmlnRGlyID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5zdG9yeWJvb2snKTtcbiAgY29uc3QgbGV4Q29uZmlnRGlyID0gcGF0aFJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnLnN0b3J5Ym9vaycpO1xuXG4gIHJldHVybiBleGlzdHNTeW5jKHByb2plY3RDb25maWdEaXIpIHx8IGV4aXN0c1N5bmMobGV4Q29uZmlnRGlyKTtcbn07XG5cbmNvbnN0IGZpbHRlckFuZEJlYXV0aWZ5T3V0cHV0ID0gKG91dHB1dDogc3RyaW5nLCBpc1ZlcmJvc2U6IGJvb2xlYW4pOiBzdHJpbmcgPT4ge1xuICBpZihpc1ZlcmJvc2UpIHtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgY29uc3QgbGluZXMgPSBvdXRwdXQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBmaWx0ZXJlZExpbmVzID0gbGluZXMuZmlsdGVyKChsaW5lKSA9PiB7XG4gICAgaWYobGluZS5pbmNsdWRlcygnU3Rvcnlib29rJykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ0xvY2FsOicpIHx8XG4gICAgICBsaW5lLmluY2x1ZGVzKCdodHRwOi8vbG9jYWxob3N0JykgfHxcbiAgICAgIGxpbmUuaW5jbHVkZXMoJ2luZm8gPT4nKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnU3RhcnRpbmcnKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygncmVhZHknKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnZXJyb3InKSB8fFxuICAgICAgbGluZS5pbmNsdWRlcygnd2FybmluZycpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZpbHRlcmVkTGluZXMuam9pbignXFxuJyk7XG59O1xuXG5jb25zdCBiZWF1dGlmeU91dHB1dCA9IChvdXRwdXQ6IHN0cmluZyk6IHN0cmluZyA9PiBvdXRwdXRcbiAgLnJlcGxhY2UoL1N0b3J5Ym9vayB2W1xcZC5dKy9nLCBjaGFsay5jeWFuKCckJicpKVxuICAucmVwbGFjZSgvaW5mbyA9Pi9nLCBjaGFsay5ibHVlKCdpbmZvID0+JykpXG4gIC5yZXBsYWNlKC9Mb2NhbDovZywgY2hhbGsuZ3JlZW4oJ0xvY2FsOicpKVxuICAucmVwbGFjZSgvT24geW91ciBuZXR3b3JrOi9nLCBjaGFsay5ncmVlbignT24geW91ciBuZXR3b3JrOicpKVxuICAucmVwbGFjZSgvU3Rvcnlib29rLipzdGFydGVkL2csIGNoYWxrLmdyZWVuKCckJicpKVxuICAucmVwbGFjZSgvU3Rvcnlib29rLipyZWFkeS9nLCBjaGFsay5ncmVlbignJCYnKSlcbiAgLnJlcGxhY2UoL2Vycm9yL2csIGNoYWxrLnJlZCgnJCYnKSlcbiAgLnJlcGxhY2UoL3dhcm5pbmcvZywgY2hhbGsueWVsbG93KCckJicpKVxuICAucmVwbGFjZSgvKFxcZCspJS9nLCBjaGFsay5tYWdlbnRhKCckMSUnKSk7XG5cbmV4cG9ydCBjb25zdCBzdG9yeWJvb2sgPSBhc3luYyAoY21kOiBTdG9yeWJvb2tPcHRpb25zLCBjYWxsYmFjazogU3Rvcnlib29rQ2FsbGJhY2sgPSAoKSA9PiAoe30pKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge2NsaU5hbWUgPSAnTGV4JywgY29uZmlnLCBvcGVuID0gZmFsc2UsIHBvcnQgPSA2MDA3LCBxdWlldCwgc3RhdGljOiBzdGF0aWNCdWlsZCA9IGZhbHNlLCB1c2VMZXhDb25maWcgPSBmYWxzZSwgdmFyaWFibGVzLCB2ZXJib3NlID0gZmFsc2V9ID0gY21kO1xuXG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICBsb2coY2hhbGsuY3lhbihgJHtjbGlOYW1lfSBzdGFydGluZyBTdG9yeWJvb2suLi5gKSwgJ2luZm8nLCBxdWlldCk7XG5cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG5cbiAgbGV0IHZhcmlhYmxlc09iajogb2JqZWN0ID0ge05PREVfRU5WOiAnZGV2ZWxvcG1lbnQnfTtcblxuICBpZih2YXJpYWJsZXMpIHtcbiAgICB0cnkge1xuICAgICAgdmFyaWFibGVzT2JqID0gSlNPTi5wYXJzZSh2YXJpYWJsZXMpO1xuICAgIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVudmlyb25tZW50IHZhcmlhYmxlcyBvcHRpb24gaXMgbm90IGEgdmFsaWQgSlNPTiBvYmplY3QuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLmVudiA9IHsuLi5wcm9jZXNzLmVudiwgLi4udmFyaWFibGVzT2JqfTtcblxuICBzcGlubmVyLnN0YXJ0KCdGaW5kaW5nIHN0b3J5IGZpbGVzLi4uJyk7XG4gIGNvbnN0IHN0b3J5RmlsZXMgPSBmaW5kU3RvcnlGaWxlcygpO1xuXG4gIGlmKHN0b3J5RmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdObyBzdG9yeSBmaWxlcyBmb3VuZCBpbiB0aGUgcHJvamVjdC4nKTtcbiAgICBsb2coJ1BsZWFzZSBjcmVhdGUgc3RvcnkgZmlsZXMgd2l0aCAuc3Rvcmllcy50cy8uc3Rvcmllcy5qcyBleHRlbnNpb25zIG9yIGluIGEgc3Rvcmllcy8gZGlyZWN0b3J5LicsICdpbmZvJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgc3Bpbm5lci5zdWNjZWVkKGBGb3VuZCAke3N0b3J5RmlsZXMubGVuZ3RofSBzdG9yeSBmaWxlKHMpYCk7XG5cbiAgY29uc3QgdGFpbHdpbmRDc3NQYXRoID0gZmluZFRhaWx3aW5kQ3NzUGF0aCgpO1xuXG4gIGNvbnNvbGUubG9nKHt0YWlsd2luZENzc1BhdGh9KTtcbiAgaWYodGFpbHdpbmRDc3NQYXRoKSB7XG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBsb2coY2hhbGsuZ3JlZW4oYOKckyBUYWlsd2luZCBDU1MgaW50ZWdyYXRpb24gZGV0ZWN0ZWQ6ICR7dGFpbHdpbmRDc3NQYXRofWApLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBsb2coY2hhbGsueWVsbG93KCfimqAgTm8gVGFpbHdpbmQgQ1NTIGZpbGUgZm91bmQgaW4gcHJvamVjdCcpLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIGxvZyhjaGFsay5ncmF5KCdDcmVhdGUgYSB0YWlsd2luZC5jc3MgZmlsZSB3aXRoIEB0YWlsd2luZCBkaXJlY3RpdmVzIGZvciBmdWxsIFRhaWx3aW5kIHN1cHBvcnQnKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgfVxuICB9XG5cbiAgaWYoIWNoZWNrU3Rvcnlib29rSW5pdGlhbGl6YXRpb24oKSkge1xuICAgIHNwaW5uZXIuZmFpbCgnU3Rvcnlib29rIGlzIG5vdCBpbml0aWFsaXplZCBpbiB0aGlzIHByb2plY3Qgb3IgaW4gTGV4LicpO1xuICAgIGxvZygnUGxlYXNlIHJ1biBcIm5weCBzdG9yeWJvb2tAbGF0ZXN0IGluaXRcIiB0byBzZXQgdXAgU3Rvcnlib29rIGluIHlvdXIgcHJvamVjdCwgb3IgZW5zdXJlIExleCBoYXMgYSB2YWxpZCAuc3Rvcnlib29rIGNvbmZpZ3VyYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBjb25zdCBwcm9qZWN0Q29uZmlnRGlyID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5zdG9yeWJvb2snKTtcbiAgY29uc3QgbGV4Q29uZmlnRGlyID0gcGF0aFJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnLnN0b3J5Ym9vaycpO1xuXG4gIGxldCBjb25maWdEaXIgPSBjb25maWc7XG4gIGlmKCFjb25maWdEaXIpIHtcbiAgICBjb25maWdEaXIgPSBsZXhDb25maWdEaXI7XG4gICAgaWYoIXVzZUxleENvbmZpZyAmJiBleGlzdHNTeW5jKHByb2plY3RDb25maWdEaXIpKSB7XG4gICAgICBjb25maWdEaXIgPSBwcm9qZWN0Q29uZmlnRGlyO1xuICAgIH1cbiAgfVxuXG4gIGlmKCFxdWlldCkge1xuICAgIGxvZyhjaGFsay5ncmF5KGBQcm9qZWN0IGNvbmZpZyBkaXI6ICR7cHJvamVjdENvbmZpZ0Rpcn0gKGV4aXN0czogJHtleGlzdHNTeW5jKHByb2plY3RDb25maWdEaXIpfSlgKSwgJ2luZm8nLCBxdWlldCk7XG4gICAgbG9nKGNoYWxrLmdyYXkoYExleCBjb25maWcgZGlyOiAke2xleENvbmZpZ0Rpcn0gKGV4aXN0czogJHtleGlzdHNTeW5jKGxleENvbmZpZ0Rpcil9KWApLCAnaW5mbycsIHF1aWV0KTtcbiAgICBpZih1c2VMZXhDb25maWcpIHtcbiAgICAgIGxvZyhjaGFsay5ibHVlKCdVc2luZyBMZXggU3Rvcnlib29rIGNvbmZpZ3VyYXRpb24gKC0tdXNlTGV4Q29uZmlnIGZsYWcpJyksICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgICBsb2coY2hhbGsuZ3JheShgSW5pdGlhbCBjb25maWcgZGlyOiAke2NvbmZpZ0Rpcn1gKSwgJ2luZm8nLCBxdWlldCk7XG4gIH1cblxuICBpZihjb25maWdEaXIgPT09IGxleENvbmZpZ0Rpcikge1xuICAgIGlmKCFxdWlldCkge1xuICAgICAgbG9nKGNoYWxrLmJsdWUoJ1VzaW5nIExleCBjb25maWcsIHdpbGwgY3JlYXRlIHRlbXBvcmFyeSBjb25maWcgaW4gcHJvamVjdCAuc3Rvcnlib29rIGRpcmVjdG9yeScpLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gICAgY29uc3QgcHJvamVjdFN0b3J5Ym9va0RpciA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuc3Rvcnlib29rJyk7XG5cbiAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydCgnZnMvcHJvbWlzZXMnKTtcbiAgICBhd2FpdCBmcy5ta2Rpcihwcm9qZWN0U3Rvcnlib29rRGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG5cbiAgICBjb25zdCBsZXhNYWluUGF0aCA9IHBhdGhSZXNvbHZlKGxleENvbmZpZ0RpciwgJ21haW4udHMnKTtcbiAgICBjb25zdCBwcm9qZWN0TWFpblBhdGggPSBwYXRoUmVzb2x2ZShwcm9qZWN0U3Rvcnlib29rRGlyLCAnbWFpbi50cycpO1xuICAgIGxldCBtYWluQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGxleE1haW5QYXRoLCAndXRmOCcpO1xuXG4gICAgbWFpbkNvbnRlbnQgPSBtYWluQ29udGVudC5yZXBsYWNlKFxuICAgICAgL3N0b3JpZXM6XFxzKlxcWy4qP1xcXS8sXG4gICAgICBgc3RvcmllczogWycke3BhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzcmMvKiovKi5zdG9yaWVzLkAodHN8dHN4KScpfScsICcke3BhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzcmMvKiovKi5tZHgnKX0nXWBcbiAgICApO1xuXG4gICAgY29uc3QgbGV4Tm9kZU1vZHVsZXMgPSBwYXRoUmVzb2x2ZShMZXhDb25maWcuZ2V0TGV4RGlyKCksICdub2RlX21vZHVsZXMnKTtcbiAgICBtYWluQ29udGVudCA9IG1haW5Db250ZW50LnJlcGxhY2UoXG4gICAgICAvY29uc3QgbGV4TW9kdWxlID0gXFwobW9kdWxlUGF0aDogc3RyaW5nXFwpID0+IHJlc29sdmVcXChnZXRMZXhOb2RlTW9kdWxlc1BhdGhcXChcXCksIG1vZHVsZVBhdGhcXCk7LyxcbiAgICAgIGBjb25zdCBsZXhNb2R1bGUgPSAobW9kdWxlUGF0aDogc3RyaW5nKSA9PiByZXNvbHZlKCcke2xleE5vZGVNb2R1bGVzfScsIG1vZHVsZVBhdGgpO2BcbiAgICApO1xuXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHByb2plY3RNYWluUGF0aCwgbWFpbkNvbnRlbnQpO1xuXG4gICAgY29uc3QgbGV4UHJldmlld1BhdGggPSBwYXRoUmVzb2x2ZShsZXhDb25maWdEaXIsICdwcmV2aWV3LnRzeCcpO1xuICAgIGlmKGV4aXN0c1N5bmMobGV4UHJldmlld1BhdGgpKSB7XG4gICAgICBjb25zdCBwcmV2aWV3Q29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGxleFByZXZpZXdQYXRoLCAndXRmOCcpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGhSZXNvbHZlKHByb2plY3RTdG9yeWJvb2tEaXIsICdwcmV2aWV3LnRzeCcpLCBwcmV2aWV3Q29udGVudCk7XG4gICAgfVxuXG4gICAgY29uZmlnRGlyID0gcHJvamVjdFN0b3J5Ym9va0RpcjtcbiAgfVxuICBpZighZXhpc3RzU3luYyhjb25maWdEaXIpKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdTdG9yeWJvb2sgY29uZmlndXJhdGlvbiBub3QgZm91bmQuJyk7XG4gICAgbG9nKGBQcm9qZWN0IGNvbmZpZzogJHtwcm9qZWN0Q29uZmlnRGlyfWAsICdpbmZvJywgcXVpZXQpO1xuICAgIGxvZyhgTGV4IGNvbmZpZzogJHtsZXhDb25maWdEaXJ9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgbG9nKCdQbGVhc2UgcnVuIFwibnB4IHN0b3J5Ym9va0BsYXRlc3QgaW5pdFwiIHRvIHNldCB1cCBTdG9yeWJvb2sgaW4geW91ciBwcm9qZWN0LCBvciBlbnN1cmUgTGV4IGhhcyBhIHZhbGlkIC5zdG9yeWJvb2sgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IHN0b3J5Ym9va1BhdGggPSByZXNvbHZlQmluYXJ5UGF0aCgnc3Rvcnlib29rJyk7XG5cbiAgaWYoIXN0b3J5Ym9va1BhdGgpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IHN0b3J5Ym9vayBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlcyBvciBtb25vcmVwbyByb290YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBTdG9yeWJvb2sgaW5zdGFsbGF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY29uc3Qgc3Rvcnlib29rQXJncyA9IFtzdGF0aWNCdWlsZCA/ICdidWlsZCcgOiAnZGV2J107XG4gIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1jb25maWctZGlyJywgY29uZmlnRGlyKTtcblxuICBpZihwb3J0KSB7XG4gICAgc3Rvcnlib29rQXJncy5wdXNoKCctLXBvcnQnLCBwb3J0LnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgaWYob3Blbikge1xuICAgIHN0b3J5Ym9va0FyZ3MucHVzaCgnLS1vcGVuJyk7XG4gIH1cblxuICBpZihzdGF0aWNCdWlsZCkge1xuICAgIGNvbnN0IG91dHB1dERpciA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICdzdG9yeWJvb2stc3RhdGljJyk7XG4gICAgc3Rvcnlib29rQXJncy5wdXNoKCctLW91dHB1dC1kaXInLCBvdXRwdXREaXIpO1xuICB9XG5cbiAgaWYoIXF1aWV0KSB7XG4gICAgbG9nKGNoYWxrLmdyYXkoYENvbmZpZyBkaXJlY3Rvcnk6ICR7Y29uZmlnRGlyfWApLCAnaW5mbycsIHF1aWV0KTtcbiAgfVxuXG4gIHByb2Nlc3MuZW52LlRBSUxXSU5EX0NTU19QQVRIID0gdGFpbHdpbmRDc3NQYXRoO1xuXG4gIHRyeSB7XG4gICAgc3Bpbm5lci5zdGFydChzdGF0aWNCdWlsZCA/ICdCdWlsZGluZyBzdGF0aWMgU3Rvcnlib29rLi4uJyA6ICdTdGFydGluZyBTdG9yeWJvb2sgZGV2ZWxvcG1lbnQgc2VydmVyLi4uJyk7XG5cbiAgICBjb25zdCBzdG9yeWJvb2tQcm9jZXNzID0gZXhlY2Eoc3Rvcnlib29rUGF0aCBhcyBhbnksIHN0b3J5Ym9va0FyZ3MsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICBlbnY6IHtcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgIExFWF9RVUlFVDogcXVpZXQsXG4gICAgICAgIExFWF9WRVJCT1NFOiB2ZXJib3NlLFxuICAgICAgICBTVE9SWUJPT0tfT1BFTjogb3BlbixcbiAgICAgICAgLi4uKHRhaWx3aW5kQ3NzUGF0aCAmJiB7VEFJTFdJTkRfQ1NTX1BBVEg6IHRhaWx3aW5kQ3NzUGF0aH0pXG4gICAgICB9IGFzIGFueSxcbiAgICAgIHN0ZGlvOiAncGlwZSdcbiAgICB9KTtcblxuICAgIGxldCB1cmxGb3VuZCA9IGZhbHNlO1xuICAgIHN0b3J5Ym9va1Byb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBmaWx0ZXJlZE91dHB1dCA9IGZpbHRlckFuZEJlYXV0aWZ5T3V0cHV0KG91dHB1dCwgdmVyYm9zZSk7XG4gICAgICBjb25zdCBiZWF1dGlmaWVkT3V0cHV0ID0gYmVhdXRpZnlPdXRwdXQoZmlsdGVyZWRPdXRwdXQpO1xuXG4gICAgICBpZighdXJsRm91bmQgJiYgKG91dHB1dC5pbmNsdWRlcygnTG9jYWw6JykgfHwgb3V0cHV0LmluY2x1ZGVzKCdodHRwOi8vbG9jYWxob3N0JykgfHwgb3V0cHV0LmluY2x1ZGVzKCdTdG9yeWJvb2snKSkpIHtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKGNoYWxrLmdyZWVuKCdTdG9yeWJvb2sgZGV2ZWxvcG1lbnQgc2VydmVyIGlzIHJlYWR5IScpKTtcbiAgICAgICAgdXJsRm91bmQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZihmaWx0ZXJlZE91dHB1dC50cmltKCkpIHtcbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYmVhdXRpZmllZE91dHB1dCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdG9yeWJvb2tQcm9jZXNzLnN0ZGVycj8ub24oJ2RhdGEnLCAoZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgY29uc3QgZmlsdGVyZWRPdXRwdXQgPSBmaWx0ZXJBbmRCZWF1dGlmeU91dHB1dChvdXRwdXQsIHZlcmJvc2UpO1xuICAgICAgY29uc3QgYmVhdXRpZmllZE91dHB1dCA9IGJlYXV0aWZ5T3V0cHV0KGZpbHRlcmVkT3V0cHV0KTtcblxuICAgICAgaWYoZmlsdGVyZWRPdXRwdXQudHJpbSgpKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGJlYXV0aWZpZWRPdXRwdXQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0b3J5Ym9va1Byb2Nlc3M7XG4gICAgICBpZighdXJsRm91bmQpIHtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKGNoYWxrLmdyZWVuKCdTdG9yeWJvb2sgZGV2ZWxvcG1lbnQgc2VydmVyIHN0YXJ0ZWQuJykpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soMCk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoY2hhbGsucmVkKCdUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgcnVubmluZyBzdG9yeWJvb2suJykpO1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgc3Bpbm5lci5mYWlsKCdUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgcnVubmluZyBzdG9yeWJvb2suJyk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJleGVjYSIsImV4aXN0c1N5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwiZmluZFRhaWx3aW5kQ3NzUGF0aCIsInJlc29sdmVCaW5hcnlQYXRoIiwibG9nIiwiZmluZFN0b3J5RmlsZXMiLCJzdG9yeVBhdHRlcm5zIiwic3RvcnlGaWxlcyIsImZvckVhY2giLCJwYXR0ZXJuIiwiZmlsZXMiLCJjd2QiLCJwcm9jZXNzIiwiaWdub3JlIiwicHVzaCIsImNoZWNrU3Rvcnlib29rSW5pdGlhbGl6YXRpb24iLCJwcm9qZWN0Q29uZmlnRGlyIiwibGV4Q29uZmlnRGlyIiwiZ2V0TGV4RGlyIiwiZmlsdGVyQW5kQmVhdXRpZnlPdXRwdXQiLCJvdXRwdXQiLCJpc1ZlcmJvc2UiLCJsaW5lcyIsInNwbGl0IiwiZmlsdGVyZWRMaW5lcyIsImZpbHRlciIsImxpbmUiLCJpbmNsdWRlcyIsImpvaW4iLCJiZWF1dGlmeU91dHB1dCIsInJlcGxhY2UiLCJjeWFuIiwiYmx1ZSIsImdyZWVuIiwicmVkIiwieWVsbG93IiwibWFnZW50YSIsInN0b3J5Ym9vayIsImNtZCIsImNhbGxiYWNrIiwiY2xpTmFtZSIsImNvbmZpZyIsIm9wZW4iLCJwb3J0IiwicXVpZXQiLCJzdGF0aWMiLCJzdGF0aWNCdWlsZCIsInVzZUxleENvbmZpZyIsInZhcmlhYmxlcyIsInZlcmJvc2UiLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJ2YXJpYWJsZXNPYmoiLCJOT0RFX0VOViIsIkpTT04iLCJwYXJzZSIsIl9lcnJvciIsImVudiIsInN0YXJ0IiwibGVuZ3RoIiwiZmFpbCIsInN1Y2NlZWQiLCJ0YWlsd2luZENzc1BhdGgiLCJjb25zb2xlIiwiZ3JheSIsImNvbmZpZ0RpciIsInByb2plY3RTdG9yeWJvb2tEaXIiLCJmcyIsIm1rZGlyIiwicmVjdXJzaXZlIiwibGV4TWFpblBhdGgiLCJwcm9qZWN0TWFpblBhdGgiLCJtYWluQ29udGVudCIsInJlYWRGaWxlIiwibGV4Tm9kZU1vZHVsZXMiLCJ3cml0ZUZpbGUiLCJsZXhQcmV2aWV3UGF0aCIsInByZXZpZXdDb250ZW50Iiwic3Rvcnlib29rUGF0aCIsInN0b3J5Ym9va0FyZ3MiLCJ0b1N0cmluZyIsIm91dHB1dERpciIsIlRBSUxXSU5EX0NTU19QQVRIIiwic3Rvcnlib29rUHJvY2VzcyIsImVuY29kaW5nIiwiTEVYX1FVSUVUIiwiTEVYX1ZFUkJPU0UiLCJTVE9SWUJPT0tfT1BFTiIsInN0ZGlvIiwidXJsRm91bmQiLCJzdGRvdXQiLCJvbiIsImRhdGEiLCJmaWx0ZXJlZE91dHB1dCIsImJlYXV0aWZpZWRPdXRwdXQiLCJ0cmltIiwid3JpdGUiLCJzdGRlcnIiLCJlcnJvciIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFdBQVcsUUFBUTtBQUMxQixTQUFRQyxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxVQUFVLFFBQU8sS0FBSztBQUM5QixTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxT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
package/lib/lex.js CHANGED
@@ -41,13 +41,13 @@ const packageJson = JSON.parse(readFileSync(packagePath, 'utf8'));
41
41
  program.command('build').option('--assist', 'Enable AI assistance for fixing build errors.', false).option('--analyze', 'Generate a Vite bundle report and AI optimization suggestions.', false).addOption(new Option('--bundler <name>', 'Bundler to use. Defaults to Vite for web and SWC otherwise.').choices([
42
42
  'vite',
43
43
  'swc'
44
- ])).option('--entry <value...>', 'A module that is loaded upon startup. Only the last one is exported.').addOption(new Option('--format <value>', 'This sets the output format for the generated JavaScript files. Default: "esm".').choices([
44
+ ])).option('--entry <value...>', 'Entry module. When multiple values are supplied, Lex uses the first.').addOption(new Option('--format <value>', 'This sets the output format for the generated JavaScript files. Default: "esm".').choices([
45
45
  'cjs',
46
46
  'esm'
47
47
  ]).default('esm')).option('--lexConfig <path>', 'Lex configuration file path (lex.config.js).').addOption(new Option('--mode <type>', 'Build mode. Default: "production".').choices([
48
48
  'development',
49
49
  'production'
50
- ]).default('production')).option('--outputPath <value>', 'The output directory as **absolute path** (required).').option('--quiet', 'No Lex notifications printed in the console.', false).option('--remove', 'Removes all files from the output directory before compiling.', false).option('--sourcePath <path>', 'Source path').option('--static', 'Creates static HTML files when building app.', false).option('--translations', 'Process translation files and output flattened JSON.', false).option('--typescript', 'Transpile as Typescript.', false).option('--variables <n>', 'Environment variables to set in "process.env". (ie. "{NODE_ENV: \'production\'}").').option('--watch', 'Watch for changes.', false).action((cmd)=>build(cmd, process.exit).then(()=>{}));
50
+ ]).default('production')).option('--outputPath <value>', 'Output directory. Relative paths resolve from the project directory.').option('--quiet', 'No Lex notifications printed in the console.', false).option('--remove', 'Removes all files from the output directory before compiling.', false).option('--sourcePath <path>', 'Source path').option('--static', 'Creates static HTML files when building app.', false).option('--translations', 'Process translation files and output flattened JSON.', false).option('--typescript', 'Transpile as Typescript.', false).option('--variables <n>', 'Environment variables to set in "process.env". (ie. "{NODE_ENV: \'production\'}").').option('--watch', 'Watch for changes.', false).action((cmd)=>build(cmd, process.exit).then(()=>{}));
51
51
  program.command('clean').option('--quiet', 'No Lex notifications printed in the console.').option('--snapshots', 'Remove all "__snapshots__" directories.').action((cmd)=>clean(cmd, process.exit).then(()=>{}));
52
52
  program.command('config <type>').option('--quiet', 'No Lex notifications printed in the console.').option('--json <path>', 'Save output to json file.').action((type, cmd)=>config(type, cmd, process.exit).then(()=>{}));
53
53
  program.command('compile').option('--config <path>', 'Transpiler configuration file path (ie. tsconfig.json).').option('--environment <n>', 'Target environment. "node" or "web". Default: "node".').addOption(new Option('--format <value>', 'This sets the output format for the generated JavaScript files. Default: "esm".').choices([
@@ -81,16 +81,13 @@ program.command('publish').addOption(new Option('--bump <type>', 'Increments the
81
81
  'yarn'
82
82
  ]).default('npm')).option('--private', 'Publishes the module as restricted.').option('--quiet', 'No Lex notifications printed in the console.').option('--tag <tag>', 'Registers the published package with the given tag.').action((cmd)=>publish(cmd, process.exit).then(()=>{}));
83
83
  program.command('serverless-dev').option('--config <path>', 'Custom configuration file path (default: lex.config.mjs).').option('--host <host>', 'Host to bind the server to (default: localhost).').option('--httpPort <port>', 'HTTP server port (default: 3100).').option('--httpsPort <port>', 'HTTPS server port (default: 3101).').option('--wsPort <port>', 'WebSocket server port (default: 3102).').option('--quiet', 'No Lex notifications printed in the console.').option('--remove', 'Removes all files from the output directory before starting.').option('--usePublicIp', 'Force refresh the cached public IP address.').option('--variables <json>', 'Environment variables to set in process.env.').option('--debug', 'Enable GraphQL debug logging to see queries, variables, and operations.').option('--printOutput', 'Print GraphQL response output including status, headers, and body.').action((cmd)=>serverlessDev(cmd, process.exit).then(()=>{}));
84
- program.command('storybook').option('--config <path>', 'Custom Storybook configuration directory path (ie. .storybook).').option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--open', 'Automatically open Storybook in a new browser window.').option('--port <number>', 'Port number for the Storybook server.').option('--quiet', 'No Lex notifications printed in the console.').option('--static', 'Build a static Storybook site instead of starting dev server.').option('--variables <n>', 'Environment variables to set in "process.env". (ie. "{STORYBOOK_THEME: \'dark\'}").').option('--verbose', 'Show detailed Storybook build progress output.').action((cmd)=>storybook(cmd, process.exit).then(()=>{}));
85
- program.command('test [files...]').option('--analyze', 'Use AI to analyze test coverage and suggest improvements.', false).option('--debugTests', 'Use AI to debug test failures and suggest fixes.', false).option('--generate', 'Use AI to generate test cases for untested code.', false).option('--bail', 'Exit the test suite immediately upon the first failing test suite.').option('--changedFilesWithAncestor', 'Runs tests related to the current changes and the changes made in the last commit.').option('--changedSince', 'Runs tests related the changes since the provided branch.').option('--ci', 'When this option is provided, Vitest will assume it is running in a CI environment.').option('--clearCache', 'Clear Vitest cache.').option('--collectCoverageFrom <glob>', 'A glob pattern relative to matching the files that coverage info needs to be collected from.').option('--colors', 'Forces test results output highlighting even if stdout is not a TTY.').option('--config <path>', 'Custom Vitest configuration file path (ie. vitest.config.mjs).').option('--debug', 'Print debugging info about your Vitest config.').option('--detectOpenHandles', 'Attempt to collect and print open handles preventing Vitest from exiting cleanly').option('--e2e', 'Run Playwright end-to-end tests matching "*.e2e.ts[x]".').option('--e2eConfig <path>', 'Custom Playwright configuration file path (ie. playwright.config.ts).').option('--environment <n>', 'Target environment. "node" or "web". Default: "node".').option('--env', 'The test environment used for all tests. This can point to any file or node module. Examples: happy-dom, jsdom, node or path/to/my-environment.js.').option('--errorOnDeprecated', 'Make calling deprecated APIs throw helpful error messages.').option('--expand', 'Use this flag to show full diffs and errors instead of a patch.').option('--forceExit', 'Force Vitest to exit after all tests have completed running.').option('--json', 'Prints the test results in JSON.').option('--lastCommit', 'Run all tests affected by file changes in the last commit made.').option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--listTests', 'Lists all tests as JSON that Vitest will run given the arguments, and exits.').option('--logHeapUsage', 'Logs the heap usage after every test.').option('--maxWorkers <num>', 'Specifies the maximum number of workers the worker-pool will spawn for running tests. ').option('--noStackTrace', 'Disables stack trace in test results output.').option('--notify', 'Activates notifications for test results.').option('--onlyChanged', 'un based on which files have changed in the current repository. ').option('--outputFile <filename>', 'Write test results to a file when the --json option is also specified.').option('--passWithNoTests', 'Allows the test suite to pass when no files are found.').option('--quiet', 'No Lex notifications printed in the console.').option('--runInBand', 'Run all tests serially in the current process, rather than creating a worker pool of child processes that run tests.').option('--setup <path>', 'Vitest setup file path.').option('--showConfig', 'Print your Vitest config and then exits.').option('--silent', 'Prevent tests from printing messages through the console.').option('--testLocationInResults', 'Adds a location field to test results.').option('--testNamePattern <regex>', 'Run only tests with a name that matches the regex. ').option('--testPathPattern <regex>', 'A regexp pattern string that is matched against all tests paths before executing the test.').option('--typescript', 'Transpile as Typescript.').option('--unit', 'Run Vitest unit tests matching "*.test.ts[x]".').option('--update', 'Update snapshots. Runs "vitest --update"').option('--useStderr', 'Divert all output to stderr.').option('--verbose', 'Display individual test results with the test suite hierarchy.').option('--watch <path>', 'Watch files for changes and rerun tests related to changed files.').option('--watchAll', 'Watch files for changes and rerun all tests when something changes.').action((files, options, cmd)=>test(options, cmd.args, files, process.exit).then(()=>{}));
84
+ program.command('storybook').option('--config <path>', 'Custom Storybook configuration directory path (ie. .storybook).').option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--open', 'Automatically open Storybook in a new browser window.').option('--port <number>', 'Port number for the Storybook server.', '6007').option('--quiet', 'No Lex notifications printed in the console.').option('--static', 'Build a static Storybook site instead of starting dev server.').option('--useLexConfig', 'Use Lex\'s React Vite Storybook configuration instead of the project configuration.').option('--variables <n>', 'Environment variables to set in "process.env". (ie. "{STORYBOOK_THEME: \'dark\'}").').option('--verbose', 'Show detailed Storybook build progress output.').action((cmd)=>storybook(cmd, process.exit).then(()=>{}));
85
+ program.command('test [files...]').option('--analyze', 'Use AI to analyze test coverage and suggest improvements.', false).option('--debugTests', 'Use AI to debug test failures and suggest fixes.', false).option('--generate', 'Use AI to generate test cases for untested code.', false).option('--bail', 'Exit the test suite immediately upon the first failing test suite.').option('--changedFilesWithAncestor', 'Runs tests related to the current changes and the changes made in the last commit.').option('--changedSince <branch>', 'Run tests related to changes since the provided branch.').option('--ci', 'When this option is provided, Vitest will assume it is running in a CI environment.').option('--clearCache', 'Clear Vitest cache.').option('--collectCoverageFrom <glob>', 'A glob pattern relative to matching the files that coverage info needs to be collected from.').option('--colors', 'Forces test results output highlighting even if stdout is not a TTY.').option('--config <path>', 'Custom Vitest configuration file path (ie. vitest.config.mjs).').option('--debug', 'Print debugging info about your Vitest config.').option('--detectOpenHandles', 'Attempt to collect and print open handles preventing Vitest from exiting cleanly').option('--e2e', 'Run Playwright end-to-end tests matching "*.e2e.ts[x]".').option('--e2eConfig <path>', 'Custom Playwright configuration file path (ie. playwright.config.ts).').option('--environment <n>', 'Target environment. "node" or "web". Default: "node".').option('--env <name>', 'Vitest environment, such as happy-dom, jsdom, or node.').option('--errorOnDeprecated', 'Make calling deprecated APIs throw helpful error messages.').option('--expand', 'Use this flag to show full diffs and errors instead of a patch.').option('--forceExit', 'Force Vitest to exit after all tests have completed running.').option('--json', 'Prints the test results in JSON.').option('--lastCommit', 'Run all tests affected by file changes in the last commit made.').option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--listTests', 'Lists all tests as JSON that Vitest will run given the arguments, and exits.').option('--logHeapUsage', 'Logs the heap usage after every test.').option('--maxWorkers <num>', 'Specifies the maximum number of workers the worker-pool will spawn for running tests. ').option('--noStackTrace', 'Disables stack trace in test results output.').option('--notify', 'Activates notifications for test results.').option('--onlyChanged', 'Run tests related to files changed in the current repository.').option('--outputFile <filename>', 'Write test results to a file when the --json option is also specified.').option('--passWithNoTests', 'Allows the test suite to pass when no files are found.').option('--quiet', 'No Lex notifications printed in the console.').option('--runInBand', 'Run all tests serially in the current process, rather than creating a worker pool of child processes that run tests.').option('--setup <path>', 'Vitest setup file path.').option('--showConfig', 'Print your Vitest config and then exits.').option('--silent', 'Prevent tests from printing messages through the console.').option('--testLocationInResults', 'Adds a location field to test results.').option('--testNamePattern <regex>', 'Run only tests with a name that matches the regex. ').option('--testPathPattern <regex>', 'A regexp pattern string that is matched against all tests paths before executing the test.').option('--typescript', 'Transpile as Typescript.').option('--unit', 'Run Vitest unit tests matching "*.test.ts[x]".').option('--update', 'Update snapshots. Runs "vitest --update"').option('--useStderr', 'Divert all output to stderr.').option('--verbose', 'Display individual test results with the test suite hierarchy.').option('--watch <path>', 'Watch files for changes and rerun tests related to changed files.').option('--watchAll', 'Watch files for changes and rerun all tests when something changes.').action((files, options, cmd)=>test(options, cmd.args, files, process.exit).then(()=>{}));
86
86
  program.command('update').option('--interactive', 'Choose which packages to update.').addOption(new Option('--package-manager <manager>', 'Which package manager to use. Default: npm').choices([
87
87
  'npm',
88
88
  'yarn'
89
- ]).default('npm')).option('--quiet', 'No Lex notifications printed in the console.').option('--registry', 'Add a custom registry url.').action((cmd)=>update(cmd, process.exit).then(()=>{}));
90
- program.command('upgrade').addOption(new Option('--package-manager <manager>', 'Which package manager to use. Default: npm').choices([
91
- 'npm',
92
- 'yarn'
93
- ]).default('npm')).option('--quiet', 'No Lex notifications printed in the console.').action((cmd)=>upgrade(cmd, process.exit).then(()=>{}));
89
+ ]).default('npm')).option('--quiet', 'No Lex notifications printed in the console.').option('--registry <url>', 'Registry used while updating packages.').action((cmd)=>update(cmd, process.exit).then(()=>{}));
90
+ program.command('upgrade').option('--quiet', 'No Lex notifications printed in the console.').action((cmd)=>upgrade(cmd, process.exit).then(()=>{}));
94
91
  program.command('ai').option('--context', 'Include project context in the AI prompt.', true).option('--file <path>', 'Specific file to operate on.').option('--lexConfig <path>', 'Custom Lex configuration file path (ie. lex.config.js).').option('--model <model>', 'AI model to use. Default: gpt-4o.').option('--prompt <text>', 'The prompt to send to the AI.').option('--quiet', 'No Lex notifications printed in the console.').addOption(new Option('--task <task>', 'Type of AI task to perform.').choices([
95
92
  'generate',
96
93
  'explain',
@@ -101,4 +98,4 @@ program.command('ai').option('--context', 'Include project context in the AI pro
101
98
  program.command('versions').option('--json', 'Print the version as a JSON object.').action((cmd)=>versions(cmd, process.exit).then(()=>{}));
102
99
  program.version(packageJson.version).parse(process.argv);
103
100
 
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7T3B0aW9uLCBwcm9ncmFtfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7Y3JlYXRlUmVxdWlyZX0gZnJvbSAnbW9kdWxlJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7YWlGdW5jdGlvbn0gZnJvbSAnLi9jb21tYW5kcy9haS9haS5qcyc7XG5pbXBvcnQge2J1aWxkfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkL2J1aWxkLmpzJztcbmltcG9ydCB7Y2xlYW59IGZyb20gJy4vY29tbWFuZHMvY2xlYW4vY2xlYW4uanMnO1xuaW1wb3J0IHtjb21waWxlfSBmcm9tICcuL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS5qcyc7XG5pbXBvcnQge2NvbmZpZ30gZnJvbSAnLi9jb21tYW5kcy9jb25maWcvY29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZS9jcmVhdGUuanMnO1xuaW1wb3J0IHtkZXYsIERFRkFVTFRfREVWX1BPUlR9IGZyb20gJy4vY29tbWFuZHMvZGV2L2Rldi5qcyc7XG5pbXBvcnQge2luaXR9IGZyb20gJy4vY29tbWFuZHMvaW5pdC9pbml0LmpzJztcbmltcG9ydCB7bGlua2VkfSBmcm9tICcuL2NvbW1hbmRzL2xpbmsvbGluay5qcyc7XG5pbXBvcnQge2xpbnR9IGZyb20gJy4vY29tbWFuZHMvbGludC9saW50LmpzJztcbmltcG9ydCB7bWlncmF0ZX0gZnJvbSAnLi9jb21tYW5kcy9taWdyYXRlL21pZ3JhdGUuanMnO1xuaW1wb3J0IHtzZXJ2ZXJsZXNzRGVwbG95fSBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3MtZGVwbG95L3NlcnZlcmxlc3MtZGVwbG95LmpzJztcbmltcG9ydCB7cHVibGlzaH0gZnJvbSAnLi9jb21tYW5kcy9wdWJsaXNoL3B1Ymxpc2guanMnO1xuaW1wb3J0IHtzZXJ2ZXJsZXNzRGV2fSBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3MtZGV2L3NlcnZlcmxlc3MtZGV2LmpzJztcbmltcG9ydCB7c3Rvcnlib29rfSBmcm9tICcuL2NvbW1hbmRzL3N0b3J5Ym9vay9zdG9yeWJvb2suanMnO1xuaW1wb3J0IHt0ZXN0fSBmcm9tICcuL2NvbW1hbmRzL3Rlc3QvdGVzdC5qcyc7XG5pbXBvcnQge3VwZGF0ZX0gZnJvbSAnLi9jb21tYW5kcy91cGRhdGUvdXBkYXRlLmpzJztcbmltcG9ydCB7dXBncmFkZX0gZnJvbSAnLi9jb21tYW5kcy91cGdyYWRlL3VwZ3JhZGUuanMnO1xuaW1wb3J0IHt2ZXJzaW9uc30gZnJvbSAnLi9jb21tYW5kcy92ZXJzaW9ucy92ZXJzaW9ucy5qcyc7XG5cbnByb2Nlc3MuZW52LkxFWF9ST09UID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5jb25zdCBsZXhOb2RlTW9kdWxlcyA9IHJlc29sdmUoZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpLCAnLi4vbm9kZV9tb2R1bGVzJyk7XG5pZighcHJvY2Vzcy5lbnYuTk9ERV9QQVRIKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IGxleE5vZGVNb2R1bGVzO1xufSBlbHNlIGlmKCFwcm9jZXNzLmVudi5OT0RFX1BBVEguc3BsaXQoJzonKS5pbmNsdWRlcyhsZXhOb2RlTW9kdWxlcykpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9QQVRIICs9IGA6JHtsZXhOb2RlTW9kdWxlc31gO1xufVxuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG5yZXF1aXJlKCdtb2R1bGUnKS5Nb2R1bGUuX2luaXRQYXRocygpO1xuXG5jb25zdCBwYWNrYWdlUGF0aCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vcGFja2FnZS5qc29uJywgaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhY2thZ2VQYXRoLCAndXRmOCcpKTtcblxucHJvZ3JhbS5jb21tYW5kKCdidWlsZCcpXG4gIC5vcHRpb24oJy0tYXNzaXN0JywgJ0VuYWJsZSBBSSBhc3Npc3RhbmNlIGZvciBmaXhpbmcgYnVpbGQgZXJyb3JzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWFuYWx5emUnLCAnR2VuZXJhdGUgYSBWaXRlIGJ1bmRsZSByZXBvcnQgYW5kIEFJIG9wdGltaXphdGlvbiBzdWdnZXN0aW9ucy4nLCBmYWxzZSlcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWJ1bmRsZXIgPG5hbWU+JywgJ0J1bmRsZXIgdG8gdXNlLiBEZWZhdWx0cyB0byBWaXRlIGZvciB3ZWIgYW5kIFNXQyBvdGhlcndpc2UuJykuY2hvaWNlcyhbJ3ZpdGUnLCAnc3djJ10pKVxuICAub3B0aW9uKCctLWVudHJ5IDx2YWx1ZS4uLj4nLCAnQSBtb2R1bGUgdGhhdCBpcyBsb2FkZWQgdXBvbiBzdGFydHVwLiBPbmx5IHRoZSBsYXN0IG9uZSBpcyBleHBvcnRlZC4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDx2YWx1ZT4nLCAnVGhpcyBzZXRzIHRoZSBvdXRwdXQgZm9ybWF0IGZvciB0aGUgZ2VuZXJhdGVkIEphdmFTY3JpcHQgZmlsZXMuIERlZmF1bHQ6IFwiZXNtXCIuJykuY2hvaWNlcyhbJ2NqcycsICdlc20nXSkuZGVmYXVsdCgnZXNtJykpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGxleC5jb25maWcuanMpLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1tb2RlIDx0eXBlPicsICdCdWlsZCBtb2RlLiBEZWZhdWx0OiBcInByb2R1Y3Rpb25cIi4nKS5jaG9pY2VzKFsnZGV2ZWxvcG1lbnQnLCAncHJvZHVjdGlvbiddKS5kZWZhdWx0KCdwcm9kdWN0aW9uJykpXG4gIC5vcHRpb24oJy0tb3V0cHV0UGF0aCA8dmFsdWU+JywgJ1RoZSBvdXRwdXQgZGlyZWN0b3J5IGFzICoqYWJzb2x1dGUgcGF0aCoqIChyZXF1aXJlZCkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXJlbW92ZScsICdSZW1vdmVzIGFsbCBmaWxlcyBmcm9tIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSBjb21waWxpbmcuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tc291cmNlUGF0aCA8cGF0aD4nLCAnU291cmNlIHBhdGgnKVxuICAub3B0aW9uKCctLXN0YXRpYycsICdDcmVhdGVzIHN0YXRpYyBIVE1MIGZpbGVzIHdoZW4gYnVpbGRpbmcgYXBwLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXRyYW5zbGF0aW9ucycsICdQcm9jZXNzIHRyYW5zbGF0aW9uIGZpbGVzIGFuZCBvdXRwdXQgZmxhdHRlbmVkIEpTT04uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS12YXJpYWJsZXMgPG4+JywgJ0Vudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gXCJwcm9jZXNzLmVudlwiLiAoaWUuIFwie05PREVfRU5WOiBcXCdwcm9kdWN0aW9uXFwnfVwiKS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoIGZvciBjaGFuZ2VzLicsIGZhbHNlKVxuICAuYWN0aW9uKChjbWQpID0+IGJ1aWxkKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY2xlYW4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1zbmFwc2hvdHMnLCAnUmVtb3ZlIGFsbCBcIl9fc25hcHNob3RzX19cIiBkaXJlY3Rvcmllcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGNsZWFuKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY29uZmlnIDx0eXBlPicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLWpzb24gPHBhdGg+JywgJ1NhdmUgb3V0cHV0IHRvIGpzb24gZmlsZS4nKVxuICAuYWN0aW9uKCh0eXBlLCBjbWQpID0+IGNvbmZpZyh0eXBlLCBjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2NvbXBpbGUnKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnVHJhbnNwaWxlciBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHRzY29uZmlnLmpzb24pLicpXG4gIC5vcHRpb24oJy0tZW52aXJvbm1lbnQgPG4+JywgJ1RhcmdldCBlbnZpcm9ubWVudC4gXCJub2RlXCIgb3IgXCJ3ZWJcIi4gRGVmYXVsdDogXCJub2RlXCIuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ1RoaXMgc2V0cyB0aGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLiBEZWZhdWx0OiBcImVzbVwiLicpLmNob2ljZXMoWydjanMnLCAnZXNtJ10pLmRlZmF1bHQoJ2VzbScpKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tb3V0cHV0UGF0aCA8cGF0aD4nLCAnT3V0cHV0IHBhdGgnKVxuICAub3B0aW9uKCctLXJlbW92ZScsICdSZW1vdmVzIGFsbCBmaWxlcyBmcm9tIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSBjb21waWxpbmcuJylcbiAgLm9wdGlvbignLS1zb3VyY2VQYXRoIDxwYXRoPicsICdTb3VyY2UgcGF0aCcpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS13YXRjaCcsICdXYXRjaGVzIGZvciBjaGFuZ2VzIGFuZCBjb21waWxlcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGNvbXBpbGUoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdjcmVhdGUgPHR5cGU+JylcbiAgLm9wdGlvbignLS1vdXRwdXRGaWxlIDxwYXRoPicsICdPdXRwdXQgZmlsZW5hbWUuJylcbiAgLm9wdGlvbignLS1vdXRwdXROYW1lIDxuPicsICdPdXRwdXQgbmFtZS4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ0NyZWF0ZSBUeXBlc2NyaXB0IHZlcnNpb24uJylcbiAgLmFjdGlvbigodHlwZSwgY21kKSA9PiBjcmVhdGUodHlwZSwgY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdkZXYnKVxuICAub3B0aW9uKCctLWJ1bmRsZUFuYWx5emVyJywgJ1J1biBidW5kbGUgYW5hbHl6ZXIuJylcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW9wZW4nLCAnQXV0b21hdGljYWxseSBvcGVuIGRldiBzZXJ2ZXIgaW4gYSBuZXcgYnJvd3NlciB3aW5kb3cuJylcbiAgLm9wdGlvbignLS1vdXRwdXRQYXRoIDxwYXRoPicsICdPdXRwdXQgcGF0aCcpXG4gIC5vcHRpb24oJy0tcG9ydCA8bnVtYmVyPicsIGBQb3J0IG51bWJlciBmb3IgdGhlIGRldmVsb3BtZW50IHNlcnZlciAoZGVmYXVsdDogJHtERUZBVUxUX0RFVl9QT1JUfSkuYClcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIGNvbXBpbGluZy4nKVxuICAub3B0aW9uKCctLXNvdXJjZVBhdGggPHBhdGg+JywgJ1NvdXJjZSBwYXRoJylcbiAgLm9wdGlvbignLS10cmFuc2xhdGlvbnMnLCAnUHJvY2VzcyB0cmFuc2xhdGlvbiBmaWxlcyBhbmQgb3V0cHV0IGZsYXR0ZW5lZCBKU09OLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVHJhbnNwaWxlIGFzIFR5cGVzY3JpcHQuJylcbiAgLm9wdGlvbignLS11c2VQdWJsaWNJcCcsICdGb3JjZSByZWZyZXNoIHRoZSBjYWNoZWQgcHVibGljIElQIGFkZHJlc3MuJylcbiAgLm9wdGlvbignLS12YXJpYWJsZXMgPG4+JywgJ0Vudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gXCJwcm9jZXNzLmVudlwiLiAoaWUuIFwie05PREVfRU5WOiBcXCdkZXZlbG9wbWVudFxcJ31cIikuJylcbiAgLm9wdGlvbignLS13YXRjaCcsICdXYXRjaCBmb3IgY2hhbmdlcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGRldihjbWQpLnRoZW4oKHN0YXR1cykgPT4ge1xuICAgIGlmKHN0YXR1cyAhPT0gMCkgcHJvY2Vzcy5leGl0Q29kZSA9IHN0YXR1cztcbiAgfSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2luaXQgPGFwcE5hbWU+IFtwYWNrYWdlTmFtZV0nKVxuICAub3B0aW9uKCctLWluc3RhbGwnLCAnSW5zdGFsbCBkZXBlbmRlbmNpZXMuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ1VzZSBhIFR5cGVzY3JpcHQgYmFzZWQgYXBwLicpXG4gIC5hY3Rpb24oKGFwcE5hbWUsIHBhY2thZ2VOYW1lLCBjbWQpID0+IGluaXQoYXBwTmFtZSwgcGFja2FnZU5hbWUsIGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnbGlua2VkJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gbGlua2VkKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnbGludCcpXG4gIC5vcHRpb24oJy0tY2FjaGUnLCAnT25seSBjaGVjayBjaGFuZ2VkIGZpbGVzLiBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1jYWNoZUxvY2F0aW9uIDxwYXRoPicsICdQYXRoIHRvIHRoZSBjYWNoZSBmaWxlIG9yIGRpcmVjdG9yeS4nKVxuICAub3B0aW9uKCctLWNvbG9yJywgJ0ZvcmNlIGVuYWJsaW5nIG9mIGNvbG9yLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnVXNlIHRoaXMgY29uZmlndXJhdGlvbiwgb3ZlcnJpZGluZyAuZXNsaW50cmMuKiBjb25maWcgb3B0aW9ucyBpZiBwcmVzZW50LiBJZiBub3Qgc3BlY2lmaWVkIGFuZCBubyBsb2NhbCBjb25maWcgZXhpc3RzLCBMZXggd2lsbCB1c2UgaXRzIGRlZmF1bHQgY29uZmlnLicpXG4gIC5vcHRpb24oJy0tZGVidWcnLCAnT3V0cHV0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1lbnZJbmZvJywgJ091dHB1dCBleGVjdXRpb24gZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWVudiA8bj4nLCAnU3BlY2lmeSBlbnZpcm9ubWVudHMuJylcbiAgLm9wdGlvbignLS1maXgnLCAnQXBwbHkgQUkgZml4ZXMgYWZ0ZXIgYnVpbHQtaW4gRVNMaW50IGZpeGVzIChzYW1lIGFzIC0tZml4KS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1maXhEcnlSdW4nLCAnQXV0b21hdGljYWxseSBmaXggcHJvYmxlbXMgd2l0aG91dCBzYXZpbmcgdGhlIGNoYW5nZXMgdG8gdGhlIGZpbGUgc3lzdGVtLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWZpeFR5cGUgPHR5cGU+JywgJ1NwZWNpZnkgdGhlIHR5cGVzIG9mIGZpeGVzIHRvIGFwcGx5IChwcm9ibGVtLCBzdWdnZXN0aW9uLCBsYXlvdXQpLicpXG4gIC5vcHRpb24oJy0tZm9ybWF0IDxuPicsICdVc2UgYSBzcGVjaWZpYyBvdXRwdXQgZm9ybWF0LiBEZWZhdWx0OiBzdHlsaXNoLicpXG4gIC5vcHRpb24oJy0tZ2xvYmFsIDx2YXJpYWJsZXM+JywgJ0RlZmluZSBnbG9iYWwgdmFyaWFibGVzLicpXG4gIC5vcHRpb24oJy0taWdub3JlUGF0aCA8cGF0aD4nLCAnU3BlY2lmeSBwYXRoIG9mIGlnbm9yZSBmaWxlLicpXG4gIC5vcHRpb24oJy0taWdub3JlUGF0dGVybiA8cGF0dGVybj4nLCAnUGF0dGVybiBvZiBmaWxlcyB0byBpZ25vcmUgKGluIGFkZGl0aW9uIHRvIHRob3NlIGluIC5lc2xpbnRpZ25vcmUpLicpXG4gIC5vcHRpb24oJy0taW5pdCcsICdSdW4gY29uZmlnIGluaXRpYWxpemF0aW9uIHdpemFyZC4gRGVmYXVsdDogZmFsc2UuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbWF4V2FybmluZ3MgPG51bT4nLCAnTnVtYmVyIG9mIHdhcm5pbmdzIHRvIHRyaWdnZXIgbm9uemVybyBleGl0IGNvZGUuIERlZmF1bHQ6IC0xLicpXG4gIC5vcHRpb24oJy0tbm9Db2xvcicsICdGb3JjZSBkaXNhYmxpbmcgb2YgY29sb3IuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9Fc2xpbnRyYycsICdEaXNhYmxlIHVzZSBvZiBjb25maWd1cmF0aW9uIGZyb20gLmVzbGludHJjLiouJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9JZ25vcmUnLCAnRGlzYWJsZSB1c2Ugb2YgaWdub3JlIGZpbGVzIGFuZCBwYXR0ZXJucy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub0lubGluZUNvbmZpZycsICdQcmV2ZW50IGNvbW1lbnRzIGZyb20gY2hhbmdpbmcgY29uZmlnIG9yIHJ1bGVzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW91dHB1dEZpbGUgPHBhdGg+JywgJ1NwZWNpZnkgZmlsZSB0byB3cml0ZSByZXBvcnQgdG8uJylcbiAgLm9wdGlvbignLS1wYXJzZXIgPG4+JywgJ1NwZWNpZnkgdGhlIHBhcnNlciB0byBiZSB1c2VkLicpXG4gIC5vcHRpb24oJy0tcGFyc2VyT3B0aW9ucyA8b3B0aW9ucz4nLCAnU3BlY2lmeSBwYXJzZXIgb3B0aW9ucy4nKVxuICAub3B0aW9uKCctLXBsdWdpbiA8cGx1Z2lucz4nLCAnU3BlY2lmeSBwbHVnaW5zLicpXG4gIC5vcHRpb24oJy0tcHJpbnRDb25maWcgPHBhdGg+JywgJ1ByaW50IHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2l2ZW4gZmlsZS4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tcmVtb3ZlLWNvbW1lbnRzJywgJ1JlbW92ZSBhbGwgY29tbWVudHMgZXhjZXB0IFRPRE9zIGFuZCBjb3B5cmlnaHQgbm90aWNlcy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZXBvcnRVbnVzZWREaXNhYmxlRGlyZWN0aXZlcycsICdBZGRzIHJlcG9ydGVkIGVycm9ycyBmb3IgdW51c2VkIGVzbGludC1kaXNhYmxlIGRpcmVjdGl2ZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tcmVzb2x2ZVBsdWdpbnNSZWxhdGl2ZVRvIDxwYXRoPicsICdBIGZvbGRlciB3aGVyZSBwbHVnaW5zIHNob3VsZCBiZSByZXNvbHZlZCBmcm9tLicpXG4gIC5vcHRpb24oJy0tcnVsZSA8cGF0aD4nLCAnU3BlY2lmeSBydWxlcy4nKVxuICAub3B0aW9uKCctLXJ1bGVzZGlyIDxwYXRoPicsICdVc2UgYWRkaXRpb25hbCBydWxlcyBmcm9tIHRoaXMgZGlyZWN0b3J5LicpXG4gIC5vcHRpb24oJy0tc3RkaW4nLCAnTGludCBjb2RlIHByb3ZpZGVkIG9uIDxTVERJTj4gLSBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1zdGRpbkZpbGVuYW1lIDxuPicsICdTcGVjaWZ5IGZpbGVuYW1lIHRvIHByb2Nlc3MgU1RESU4gYXMuJylcbiAgLmFjdGlvbigoY21kKSA9PiBsaW50KGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnbWlncmF0ZScpXG4gIC5vcHRpb24oJy1xLCAtLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLmFjdGlvbigoY21kKSA9PiBtaWdyYXRlKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnc2VydmVybGVzcy1kZXBsb3knKVxuICAucmVxdWlyZWRPcHRpb24oJy0tZW50cnkgPHBhdGg+JywgJ0xhbWJkYSBlbnRyeSBmaWxlIHRvIGJ1bmRsZS4nKVxuICAub3B0aW9uKCctLWNvcHlOb2RlTW9kdWxlIDx2YWx1ZS4uLj4nLCAnUnVudGltZSBub2RlX21vZHVsZXMgcGFja2FnZXMgdG8gY29weSBpbnRvIHRoZSBwYWNrYWdlIGFmdGVyIGJ1bmRsaW5nLicpXG4gIC5vcHRpb24oJy0tZXh0ZXJuYWwgPHZhbHVlLi4uPicsICdQYWNrYWdlcyBvciBwYWNrYWdlIHBhdHRlcm5zIHRvIGtlZXAgZXh0ZXJuYWwgZnJvbSB0aGUgYnVuZGxlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPHZhbHVlPicsICdKYXZhU2NyaXB0IG91dHB1dCBmb3JtYXQuIERlZmF1bHQ6IFwiY2pzXCIuJykuY2hvaWNlcyhbJ2NqcycsICdlc20nXSkuZGVmYXVsdCgnY2pzJykpXG4gIC5vcHRpb24oJy0tbWFpbkZpZWxkcyA8dmFsdWU+JywgJ1BhY2thZ2UgZmllbGRzIGVzYnVpbGQgc2hvdWxkIHByZWZlci4gRGVmYXVsdDogXCJtb2R1bGUsbWFpblwiLicpXG4gIC5vcHRpb24oJy0tbWluaWZ5JywgJ01pbmlmeSB0aGUgYnVuZGxlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vZGVNb2R1bGVzUGF0aCA8cGF0aD4nLCAnUGF0aCB0byBydW50aW1lIG5vZGVfbW9kdWxlcyBjb3BpZWQgYnkgLS1jb3B5Tm9kZU1vZHVsZS4gRGVmYXVsdDogXCIuL25vZGVfbW9kdWxlc1wiLicpXG4gIC5vcHRpb24oJy0tb3V0ZmlsZSA8cGF0aD4nLCAnQnVuZGxlZCBvdXRwdXQgZmlsZSBwYXRoIGluc2lkZSB0aGUgcGFja2FnZSBkaXJlY3RvcnkuJylcbiAgLm9wdGlvbignLS1vdXRwdXQgPHBhdGg+JywgJ1ppcCBvdXRwdXQgcGF0aC4gRGVmYXVsdDogXCIuL2xhbWJkYS1wYWNrYWdlLnppcFwiLicpXG4gIC5vcHRpb24oJy0tcGFja2FnZURpciA8cGF0aD4nLCAnVGVtcG9yYXJ5IHBhY2thZ2UgZGlyZWN0b3J5LiBEZWZhdWx0OiBcIi4vLmxleC9sYW1iZGEtcGFja2FnZVwiLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXNvdXJjZW1hcCcsICdHZW5lcmF0ZSBhIHNvdXJjZW1hcC4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS10YXJnZXQgPHZhbHVlPicsICdlc2J1aWxkIHJ1bnRpbWUgdGFyZ2V0LiBEZWZhdWx0OiBcIm5vZGUyNFwiLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gc2VydmVybGVzc0RlcGxveShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3B1Ymxpc2gnKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYnVtcCA8dHlwZT4nLCAnSW5jcmVtZW50cyB0aGUgdmVyc2lvbi4gVHlwZXMgaW5jbHVkZTogbWFqb3IsIG1pbm9yLCBwYXRjaCwgYmV0YSwgYWxwaGEsIHJjLiBEZWZhdWx0OiBcInBhdGNoXCIuJykuY2hvaWNlcyhbJ21ham9yJywgJ21pbm9yJywgJ3BhdGNoJywgJ2JldGEnLCAnYWxwaGEnLCAncmMnXSkuZGVmYXVsdCgncGF0Y2gnKSlcbiAgLm9wdGlvbignLS1uZXdWZXJzaW9uIDx2ZXJzaW9uTnVtYmVyPicsICdQdWJsaXNoIGFzIGEgc3BlY2lmaWMgdmVyc2lvbi4nKVxuICAub3B0aW9uKCctLW90cCA8Y29kZT4nLCAnUHJvdmlkZSBhIHR3by1mYWN0b3IgY29kZS4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcGFja2FnZS1tYW5hZ2VyIDxtYW5hZ2VyPicsICdXaGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBEZWZhdWx0OiBucG0nKS5jaG9pY2VzKFsnbnBtJywgJ3lhcm4nXSkuZGVmYXVsdCgnbnBtJykpXG4gIC5vcHRpb24oJy0tcHJpdmF0ZScsICdQdWJsaXNoZXMgdGhlIG1vZHVsZSBhcyByZXN0cmljdGVkLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXRhZyA8dGFnPicsICdSZWdpc3RlcnMgdGhlIHB1Ymxpc2hlZCBwYWNrYWdlIHdpdGggdGhlIGdpdmVuIHRhZy4nKVxuICAuYWN0aW9uKChjbWQpID0+IHB1Ymxpc2goY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdzZXJ2ZXJsZXNzLWRldicpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGRlZmF1bHQ6IGxleC5jb25maWcubWpzKS4nKVxuICAub3B0aW9uKCctLWhvc3QgPGhvc3Q+JywgJ0hvc3QgdG8gYmluZCB0aGUgc2VydmVyIHRvIChkZWZhdWx0OiBsb2NhbGhvc3QpLicpXG4gIC5vcHRpb24oJy0taHR0cFBvcnQgPHBvcnQ+JywgJ0hUVFAgc2VydmVyIHBvcnQgKGRlZmF1bHQ6IDMxMDApLicpXG4gIC5vcHRpb24oJy0taHR0cHNQb3J0IDxwb3J0PicsICdIVFRQUyBzZXJ2ZXIgcG9ydCAoZGVmYXVsdDogMzEwMSkuJylcbiAgLm9wdGlvbignLS13c1BvcnQgPHBvcnQ+JywgJ1dlYlNvY2tldCBzZXJ2ZXIgcG9ydCAoZGVmYXVsdDogMzEwMikuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIHN0YXJ0aW5nLicpXG4gIC5vcHRpb24oJy0tdXNlUHVibGljSXAnLCAnRm9yY2UgcmVmcmVzaCB0aGUgY2FjaGVkIHB1YmxpYyBJUCBhZGRyZXNzLicpXG4gIC5vcHRpb24oJy0tdmFyaWFibGVzIDxqc29uPicsICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIHByb2Nlc3MuZW52LicpXG4gIC5vcHRpb24oJy0tZGVidWcnLCAnRW5hYmxlIEdyYXBoUUwgZGVidWcgbG9nZ2luZyB0byBzZWUgcXVlcmllcywgdmFyaWFibGVzLCBhbmQgb3BlcmF0aW9ucy4nKVxuICAub3B0aW9uKCctLXByaW50T3V0cHV0JywgJ1ByaW50IEdyYXBoUUwgcmVzcG9uc2Ugb3V0cHV0IGluY2x1ZGluZyBzdGF0dXMsIGhlYWRlcnMsIGFuZCBib2R5LicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gc2VydmVybGVzc0RldihjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3N0b3J5Ym9vaycpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gU3Rvcnlib29rIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IHBhdGggKGllLiAuc3Rvcnlib29rKS4nKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tb3BlbicsICdBdXRvbWF0aWNhbGx5IG9wZW4gU3Rvcnlib29rIGluIGEgbmV3IGJyb3dzZXIgd2luZG93LicpXG4gIC5vcHRpb24oJy0tcG9ydCA8bnVtYmVyPicsICdQb3J0IG51bWJlciBmb3IgdGhlIFN0b3J5Ym9vayBzZXJ2ZXIuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tc3RhdGljJywgJ0J1aWxkIGEgc3RhdGljIFN0b3J5Ym9vayBzaXRlIGluc3RlYWQgb2Ygc3RhcnRpbmcgZGV2IHNlcnZlci4nKVxuICAub3B0aW9uKCctLXZhcmlhYmxlcyA8bj4nLCAnRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiBcInByb2Nlc3MuZW52XCIuIChpZS4gXCJ7U1RPUllCT09LX1RIRU1FOiBcXCdkYXJrXFwnfVwiKS4nKVxuICAub3B0aW9uKCctLXZlcmJvc2UnLCAnU2hvdyBkZXRhaWxlZCBTdG9yeWJvb2sgYnVpbGQgcHJvZ3Jlc3Mgb3V0cHV0LicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gc3Rvcnlib29rKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndGVzdCBbZmlsZXMuLi5dJylcbiAgLm9wdGlvbignLS1hbmFseXplJywgJ1VzZSBBSSB0byBhbmFseXplIHRlc3QgY292ZXJhZ2UgYW5kIHN1Z2dlc3QgaW1wcm92ZW1lbnRzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWRlYnVnVGVzdHMnLCAnVXNlIEFJIHRvIGRlYnVnIHRlc3QgZmFpbHVyZXMgYW5kIHN1Z2dlc3QgZml4ZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZ2VuZXJhdGUnLCAnVXNlIEFJIHRvIGdlbmVyYXRlIHRlc3QgY2FzZXMgZm9yIHVudGVzdGVkIGNvZGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tYmFpbCcsICdFeGl0IHRoZSB0ZXN0IHN1aXRlIGltbWVkaWF0ZWx5IHVwb24gdGhlIGZpcnN0IGZhaWxpbmcgdGVzdCBzdWl0ZS4nKVxuICAub3B0aW9uKCctLWNoYW5nZWRGaWxlc1dpdGhBbmNlc3RvcicsICdSdW5zIHRlc3RzIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgY2hhbmdlcyBhbmQgdGhlIGNoYW5nZXMgbWFkZSBpbiB0aGUgbGFzdCBjb21taXQuJylcbiAgLm9wdGlvbignLS1jaGFuZ2VkU2luY2UnLCAnUnVucyB0ZXN0cyByZWxhdGVkIHRoZSBjaGFuZ2VzIHNpbmNlIHRoZSBwcm92aWRlZCBicmFuY2guJylcbiAgLm9wdGlvbignLS1jaScsICdXaGVuIHRoaXMgb3B0aW9uIGlzIHByb3ZpZGVkLCBWaXRlc3Qgd2lsbCBhc3N1bWUgaXQgaXMgcnVubmluZyBpbiBhIENJIGVudmlyb25tZW50LicpXG4gIC5vcHRpb24oJy0tY2xlYXJDYWNoZScsICdDbGVhciBWaXRlc3QgY2FjaGUuJylcbiAgLm9wdGlvbignLS1jb2xsZWN0Q292ZXJhZ2VGcm9tIDxnbG9iPicsICdBIGdsb2IgcGF0dGVybiByZWxhdGl2ZSB0byBtYXRjaGluZyB0aGUgZmlsZXMgdGhhdCBjb3ZlcmFnZSBpbmZvIG5lZWRzIHRvIGJlIGNvbGxlY3RlZCBmcm9tLicpXG4gIC5vcHRpb24oJy0tY29sb3JzJywgJ0ZvcmNlcyB0ZXN0IHJlc3VsdHMgb3V0cHV0IGhpZ2hsaWdodGluZyBldmVuIGlmIHN0ZG91dCBpcyBub3QgYSBUVFkuJylcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ0N1c3RvbSBWaXRlc3QgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiB2aXRlc3QuY29uZmlnLm1qcykuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdQcmludCBkZWJ1Z2dpbmcgaW5mbyBhYm91dCB5b3VyIFZpdGVzdCBjb25maWcuJylcbiAgLm9wdGlvbignLS1kZXRlY3RPcGVuSGFuZGxlcycsICdBdHRlbXB0IHRvIGNvbGxlY3QgYW5kIHByaW50IG9wZW4gaGFuZGxlcyBwcmV2ZW50aW5nIFZpdGVzdCBmcm9tIGV4aXRpbmcgY2xlYW5seScpXG4gIC5vcHRpb24oJy0tZTJlJywgJ1J1biBQbGF5d3JpZ2h0IGVuZC10by1lbmQgdGVzdHMgbWF0Y2hpbmcgXCIqLmUyZS50c1t4XVwiLicpXG4gIC5vcHRpb24oJy0tZTJlQ29uZmlnIDxwYXRoPicsICdDdXN0b20gUGxheXdyaWdodCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHBsYXl3cmlnaHQuY29uZmlnLnRzKS4nKVxuICAub3B0aW9uKCctLWVudmlyb25tZW50IDxuPicsICdUYXJnZXQgZW52aXJvbm1lbnQuIFwibm9kZVwiIG9yIFwid2ViXCIuIERlZmF1bHQ6IFwibm9kZVwiLicpXG4gIC5vcHRpb24oJy0tZW52JywgJ1RoZSB0ZXN0IGVudmlyb25tZW50IHVzZWQgZm9yIGFsbCB0ZXN0cy4gVGhpcyBjYW4gcG9pbnQgdG8gYW55IGZpbGUgb3Igbm9kZSBtb2R1bGUuIEV4YW1wbGVzOiBoYXBweS1kb20sIGpzZG9tLCBub2RlIG9yIHBhdGgvdG8vbXktZW52aXJvbm1lbnQuanMuJylcbiAgLm9wdGlvbignLS1lcnJvck9uRGVwcmVjYXRlZCcsICdNYWtlIGNhbGxpbmcgZGVwcmVjYXRlZCBBUElzIHRocm93IGhlbHBmdWwgZXJyb3IgbWVzc2FnZXMuJylcbiAgLm9wdGlvbignLS1leHBhbmQnLCAnVXNlIHRoaXMgZmxhZyB0byBzaG93IGZ1bGwgZGlmZnMgYW5kIGVycm9ycyBpbnN0ZWFkIG9mIGEgcGF0Y2guJylcbiAgLm9wdGlvbignLS1mb3JjZUV4aXQnLCAnRm9yY2UgVml0ZXN0IHRvIGV4aXQgYWZ0ZXIgYWxsIHRlc3RzIGhhdmUgY29tcGxldGVkIHJ1bm5pbmcuJylcbiAgLm9wdGlvbignLS1qc29uJywgJ1ByaW50cyB0aGUgdGVzdCByZXN1bHRzIGluIEpTT04uJylcbiAgLm9wdGlvbignLS1sYXN0Q29tbWl0JywgJ1J1biBhbGwgdGVzdHMgYWZmZWN0ZWQgYnkgZmlsZSBjaGFuZ2VzIGluIHRoZSBsYXN0IGNvbW1pdCBtYWRlLicpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdDdXN0b20gTGV4IGNvbmZpZ3VyYXRpb24gZmlsZSBwYXRoIChpZS4gbGV4LmNvbmZpZy5qcykuJylcbiAgLm9wdGlvbignLS1saXN0VGVzdHMnLCAnTGlzdHMgYWxsIHRlc3RzIGFzIEpTT04gdGhhdCBWaXRlc3Qgd2lsbCBydW4gZ2l2ZW4gdGhlIGFyZ3VtZW50cywgYW5kIGV4aXRzLicpXG4gIC5vcHRpb24oJy0tbG9nSGVhcFVzYWdlJywgJ0xvZ3MgdGhlIGhlYXAgdXNhZ2UgYWZ0ZXIgZXZlcnkgdGVzdC4nKVxuICAub3B0aW9uKCctLW1heFdvcmtlcnMgPG51bT4nLCAnU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB3b3JrZXJzIHRoZSB3b3JrZXItcG9vbCB3aWxsIHNwYXduIGZvciBydW5uaW5nIHRlc3RzLiAnKVxuICAub3B0aW9uKCctLW5vU3RhY2tUcmFjZScsICdEaXNhYmxlcyBzdGFjayB0cmFjZSBpbiB0ZXN0IHJlc3VsdHMgb3V0cHV0LicpXG4gIC5vcHRpb24oJy0tbm90aWZ5JywgJ0FjdGl2YXRlcyBub3RpZmljYXRpb25zIGZvciB0ZXN0IHJlc3VsdHMuJylcbiAgLm9wdGlvbignLS1vbmx5Q2hhbmdlZCcsICd1biBiYXNlZCBvbiB3aGljaCBmaWxlcyBoYXZlIGNoYW5nZWQgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4gJylcbiAgLm9wdGlvbignLS1vdXRwdXRGaWxlIDxmaWxlbmFtZT4nLCAnV3JpdGUgdGVzdCByZXN1bHRzIHRvIGEgZmlsZSB3aGVuIHRoZSAtLWpzb24gb3B0aW9uIGlzIGFsc28gc3BlY2lmaWVkLicpXG4gIC5vcHRpb24oJy0tcGFzc1dpdGhOb1Rlc3RzJywgJ0FsbG93cyB0aGUgdGVzdCBzdWl0ZSB0byBwYXNzIHdoZW4gbm8gZmlsZXMgYXJlIGZvdW5kLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXJ1bkluQmFuZCcsICdSdW4gYWxsIHRlc3RzIHNlcmlhbGx5IGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgd29ya2VyIHBvb2wgb2YgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgcnVuIHRlc3RzLicpXG4gIC5vcHRpb24oJy0tc2V0dXAgPHBhdGg+JywgJ1ZpdGVzdCBzZXR1cCBmaWxlIHBhdGguJylcbiAgLm9wdGlvbignLS1zaG93Q29uZmlnJywgJ1ByaW50IHlvdXIgVml0ZXN0IGNvbmZpZyBhbmQgdGhlbiBleGl0cy4nKVxuICAub3B0aW9uKCctLXNpbGVudCcsICdQcmV2ZW50IHRlc3RzIGZyb20gcHJpbnRpbmcgbWVzc2FnZXMgdGhyb3VnaCB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXRlc3RMb2NhdGlvbkluUmVzdWx0cycsICdBZGRzIGEgbG9jYXRpb24gZmllbGQgdG8gdGVzdCByZXN1bHRzLicpXG4gIC5vcHRpb24oJy0tdGVzdE5hbWVQYXR0ZXJuIDxyZWdleD4nLCAnUnVuIG9ubHkgdGVzdHMgd2l0aCBhIG5hbWUgdGhhdCBtYXRjaGVzIHRoZSByZWdleC4gJylcbiAgLm9wdGlvbignLS10ZXN0UGF0aFBhdHRlcm4gPHJlZ2V4PicsICdBIHJlZ2V4cCBwYXR0ZXJuIHN0cmluZyB0aGF0IGlzIG1hdGNoZWQgYWdhaW5zdCBhbGwgdGVzdHMgcGF0aHMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgdGVzdC4nKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVHJhbnNwaWxlIGFzIFR5cGVzY3JpcHQuJylcbiAgLm9wdGlvbignLS11bml0JywgJ1J1biBWaXRlc3QgdW5pdCB0ZXN0cyBtYXRjaGluZyBcIioudGVzdC50c1t4XVwiLicpXG4gIC5vcHRpb24oJy0tdXBkYXRlJywgJ1VwZGF0ZSBzbmFwc2hvdHMuIFJ1bnMgXCJ2aXRlc3QgLS11cGRhdGVcIicpXG4gIC5vcHRpb24oJy0tdXNlU3RkZXJyJywgJ0RpdmVydCBhbGwgb3V0cHV0IHRvIHN0ZGVyci4nKVxuICAub3B0aW9uKCctLXZlcmJvc2UnLCAnRGlzcGxheSBpbmRpdmlkdWFsIHRlc3QgcmVzdWx0cyB3aXRoIHRoZSB0ZXN0IHN1aXRlIGhpZXJhcmNoeS4nKVxuICAub3B0aW9uKCctLXdhdGNoIDxwYXRoPicsICdXYXRjaCBmaWxlcyBmb3IgY2hhbmdlcyBhbmQgcmVydW4gdGVzdHMgcmVsYXRlZCB0byBjaGFuZ2VkIGZpbGVzLicpXG4gIC5vcHRpb24oJy0td2F0Y2hBbGwnLCAnV2F0Y2ggZmlsZXMgZm9yIGNoYW5nZXMgYW5kIHJlcnVuIGFsbCB0ZXN0cyB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLicpXG4gIC5hY3Rpb24oKGZpbGVzLCBvcHRpb25zLCBjbWQpID0+IHRlc3Qob3B0aW9ucywgY21kLmFyZ3MsIGZpbGVzLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCd1cGRhdGUnKVxuICAub3B0aW9uKCctLWludGVyYWN0aXZlJywgJ0Nob29zZSB3aGljaCBwYWNrYWdlcyB0byB1cGRhdGUuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1yZWdpc3RyeScsICdBZGQgYSBjdXN0b20gcmVnaXN0cnkgdXJsLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdXBkYXRlKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndXBncmFkZScpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wYWNrYWdlLW1hbmFnZXIgPG1hbmFnZXI+JywgJ1doaWNoIHBhY2thZ2UgbWFuYWdlciB0byB1c2UuIERlZmF1bHQ6IG5wbScpLmNob2ljZXMoWyducG0nLCAneWFybiddKS5kZWZhdWx0KCducG0nKSlcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdXBncmFkZShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2FpJylcbiAgLm9wdGlvbignLS1jb250ZXh0JywgJ0luY2x1ZGUgcHJvamVjdCBjb250ZXh0IGluIHRoZSBBSSBwcm9tcHQuJywgdHJ1ZSlcbiAgLm9wdGlvbignLS1maWxlIDxwYXRoPicsICdTcGVjaWZpYyBmaWxlIHRvIG9wZXJhdGUgb24uJylcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW1vZGVsIDxtb2RlbD4nLCAnQUkgbW9kZWwgdG8gdXNlLiBEZWZhdWx0OiBncHQtNG8uJylcbiAgLm9wdGlvbignLS1wcm9tcHQgPHRleHQ+JywgJ1RoZSBwcm9tcHQgdG8gc2VuZCB0byB0aGUgQUkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10YXNrIDx0YXNrPicsICdUeXBlIG9mIEFJIHRhc2sgdG8gcGVyZm9ybS4nKS5jaG9pY2VzKFsnZ2VuZXJhdGUnLCAnZXhwbGFpbicsICd0ZXN0JywgJ29wdGltaXplJywgJ2hlbHAnXSkuZGVmYXVsdCgnaGVscCcpKVxuICAuYWN0aW9uKChjbWQpID0+IGFpRnVuY3Rpb24oY21kKS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndmVyc2lvbnMnKVxuICAub3B0aW9uKCctLWpzb24nLCAnUHJpbnQgdGhlIHZlcnNpb24gYXMgYSBKU09OIG9iamVjdC4nKVxuICAuYWN0aW9uKChjbWQpID0+IHZlcnNpb25zKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW1cbiAgLnZlcnNpb24ocGFja2FnZUpzb24udmVyc2lvbilcbiAgLnBhcnNlKHByb2Nlc3MuYXJndik7XG4iXSwibmFtZXMiOlsiT3B0aW9uIiwicHJvZ3JhbSIsInJlYWRGaWxlU3luYyIsImNyZWF0ZVJlcXVpcmUiLCJkaXJuYW1lIiwicmVzb2x2ZSIsImZpbGVVUkxUb1BhdGgiLCJhaUZ1bmN0aW9uIiwiYnVpbGQiLCJjbGVhbiIsImNvbXBpbGUiLCJjb25maWciLCJjcmVhdGUiLCJkZXYiLCJERUZBVUxUX0RFVl9QT1JUIiwiaW5pdCIsImxpbmtlZCIsImxpbnQiLCJtaWdyYXRlIiwic2VydmVybGVzc0RlcGxveSIsInB1Ymxpc2giLCJzZXJ2ZXJsZXNzRGV2Iiwic3Rvcnlib29rIiwidGVzdCIsInVwZGF0ZSIsInVwZ3JhZGUiLCJ2ZXJzaW9ucyIsInByb2Nlc3MiLCJlbnYiLCJMRVhfUk9PVCIsInVybCIsImxleE5vZGVNb2R1bGVzIiwiTk9ERV9QQVRIIiwic3BsaXQiLCJpbmNsdWRlcyIsInJlcXVpcmUiLCJNb2R1bGUiLCJfaW5pdFBhdGhzIiwicGFja2FnZVBhdGgiLCJVUkwiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsImNvbW1hbmQiLCJvcHRpb24iLCJhZGRPcHRpb24iLCJjaG9pY2VzIiwiZGVmYXVsdCIsImFjdGlvbiIsImNtZCIsImV4aXQiLCJ0aGVuIiwidHlwZSIsInN0YXR1cyIsImV4aXRDb2RlIiwiYXBwTmFtZSIsInBhY2thZ2VOYW1lIiwicmVxdWlyZWRPcHRpb24iLCJmaWxlcyIsIm9wdGlvbnMiLCJh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
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9sZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7T3B0aW9uLCBwcm9ncmFtfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtyZWFkRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7Y3JlYXRlUmVxdWlyZX0gZnJvbSAnbW9kdWxlJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7YWlGdW5jdGlvbn0gZnJvbSAnLi9jb21tYW5kcy9haS9haS5qcyc7XG5pbXBvcnQge2J1aWxkfSBmcm9tICcuL2NvbW1hbmRzL2J1aWxkL2J1aWxkLmpzJztcbmltcG9ydCB7Y2xlYW59IGZyb20gJy4vY29tbWFuZHMvY2xlYW4vY2xlYW4uanMnO1xuaW1wb3J0IHtjb21waWxlfSBmcm9tICcuL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS5qcyc7XG5pbXBvcnQge2NvbmZpZ30gZnJvbSAnLi9jb21tYW5kcy9jb25maWcvY29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlfSBmcm9tICcuL2NvbW1hbmRzL2NyZWF0ZS9jcmVhdGUuanMnO1xuaW1wb3J0IHtkZXYsIERFRkFVTFRfREVWX1BPUlR9IGZyb20gJy4vY29tbWFuZHMvZGV2L2Rldi5qcyc7XG5pbXBvcnQge2luaXR9IGZyb20gJy4vY29tbWFuZHMvaW5pdC9pbml0LmpzJztcbmltcG9ydCB7bGlua2VkfSBmcm9tICcuL2NvbW1hbmRzL2xpbmsvbGluay5qcyc7XG5pbXBvcnQge2xpbnR9IGZyb20gJy4vY29tbWFuZHMvbGludC9saW50LmpzJztcbmltcG9ydCB7bWlncmF0ZX0gZnJvbSAnLi9jb21tYW5kcy9taWdyYXRlL21pZ3JhdGUuanMnO1xuaW1wb3J0IHtzZXJ2ZXJsZXNzRGVwbG95fSBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3MtZGVwbG95L3NlcnZlcmxlc3MtZGVwbG95LmpzJztcbmltcG9ydCB7cHVibGlzaH0gZnJvbSAnLi9jb21tYW5kcy9wdWJsaXNoL3B1Ymxpc2guanMnO1xuaW1wb3J0IHtzZXJ2ZXJsZXNzRGV2fSBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3MtZGV2L3NlcnZlcmxlc3MtZGV2LmpzJztcbmltcG9ydCB7c3Rvcnlib29rfSBmcm9tICcuL2NvbW1hbmRzL3N0b3J5Ym9vay9zdG9yeWJvb2suanMnO1xuaW1wb3J0IHt0ZXN0fSBmcm9tICcuL2NvbW1hbmRzL3Rlc3QvdGVzdC5qcyc7XG5pbXBvcnQge3VwZGF0ZX0gZnJvbSAnLi9jb21tYW5kcy91cGRhdGUvdXBkYXRlLmpzJztcbmltcG9ydCB7dXBncmFkZX0gZnJvbSAnLi9jb21tYW5kcy91cGdyYWRlL3VwZ3JhZGUuanMnO1xuaW1wb3J0IHt2ZXJzaW9uc30gZnJvbSAnLi9jb21tYW5kcy92ZXJzaW9ucy92ZXJzaW9ucy5qcyc7XG5cbnByb2Nlc3MuZW52LkxFWF9ST09UID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG5jb25zdCBsZXhOb2RlTW9kdWxlcyA9IHJlc29sdmUoZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpLCAnLi4vbm9kZV9tb2R1bGVzJyk7XG5pZighcHJvY2Vzcy5lbnYuTk9ERV9QQVRIKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IGxleE5vZGVNb2R1bGVzO1xufSBlbHNlIGlmKCFwcm9jZXNzLmVudi5OT0RFX1BBVEguc3BsaXQoJzonKS5pbmNsdWRlcyhsZXhOb2RlTW9kdWxlcykpIHtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9QQVRIICs9IGA6JHtsZXhOb2RlTW9kdWxlc31gO1xufVxuXG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG5yZXF1aXJlKCdtb2R1bGUnKS5Nb2R1bGUuX2luaXRQYXRocygpO1xuXG5jb25zdCBwYWNrYWdlUGF0aCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vcGFja2FnZS5qc29uJywgaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhY2thZ2VQYXRoLCAndXRmOCcpKTtcblxucHJvZ3JhbS5jb21tYW5kKCdidWlsZCcpXG4gIC5vcHRpb24oJy0tYXNzaXN0JywgJ0VuYWJsZSBBSSBhc3Npc3RhbmNlIGZvciBmaXhpbmcgYnVpbGQgZXJyb3JzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWFuYWx5emUnLCAnR2VuZXJhdGUgYSBWaXRlIGJ1bmRsZSByZXBvcnQgYW5kIEFJIG9wdGltaXphdGlvbiBzdWdnZXN0aW9ucy4nLCBmYWxzZSlcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWJ1bmRsZXIgPG5hbWU+JywgJ0J1bmRsZXIgdG8gdXNlLiBEZWZhdWx0cyB0byBWaXRlIGZvciB3ZWIgYW5kIFNXQyBvdGhlcndpc2UuJykuY2hvaWNlcyhbJ3ZpdGUnLCAnc3djJ10pKVxuICAub3B0aW9uKCctLWVudHJ5IDx2YWx1ZS4uLj4nLCAnRW50cnkgbW9kdWxlLiBXaGVuIG11bHRpcGxlIHZhbHVlcyBhcmUgc3VwcGxpZWQsIExleCB1c2VzIHRoZSBmaXJzdC4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZm9ybWF0IDx2YWx1ZT4nLCAnVGhpcyBzZXRzIHRoZSBvdXRwdXQgZm9ybWF0IGZvciB0aGUgZ2VuZXJhdGVkIEphdmFTY3JpcHQgZmlsZXMuIERlZmF1bHQ6IFwiZXNtXCIuJykuY2hvaWNlcyhbJ2NqcycsICdlc20nXSkuZGVmYXVsdCgnZXNtJykpXG4gIC5vcHRpb24oJy0tbGV4Q29uZmlnIDxwYXRoPicsICdMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGxleC5jb25maWcuanMpLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1tb2RlIDx0eXBlPicsICdCdWlsZCBtb2RlLiBEZWZhdWx0OiBcInByb2R1Y3Rpb25cIi4nKS5jaG9pY2VzKFsnZGV2ZWxvcG1lbnQnLCAncHJvZHVjdGlvbiddKS5kZWZhdWx0KCdwcm9kdWN0aW9uJykpXG4gIC5vcHRpb24oJy0tb3V0cHV0UGF0aCA8dmFsdWU+JywgJ091dHB1dCBkaXJlY3RvcnkuIFJlbGF0aXZlIHBhdGhzIHJlc29sdmUgZnJvbSB0aGUgcHJvamVjdCBkaXJlY3RvcnkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXJlbW92ZScsICdSZW1vdmVzIGFsbCBmaWxlcyBmcm9tIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSBjb21waWxpbmcuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tc291cmNlUGF0aCA8cGF0aD4nLCAnU291cmNlIHBhdGgnKVxuICAub3B0aW9uKCctLXN0YXRpYycsICdDcmVhdGVzIHN0YXRpYyBIVE1MIGZpbGVzIHdoZW4gYnVpbGRpbmcgYXBwLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXRyYW5zbGF0aW9ucycsICdQcm9jZXNzIHRyYW5zbGF0aW9uIGZpbGVzIGFuZCBvdXRwdXQgZmxhdHRlbmVkIEpTT04uJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS12YXJpYWJsZXMgPG4+JywgJ0Vudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gXCJwcm9jZXNzLmVudlwiLiAoaWUuIFwie05PREVfRU5WOiBcXCdwcm9kdWN0aW9uXFwnfVwiKS4nKVxuICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoIGZvciBjaGFuZ2VzLicsIGZhbHNlKVxuICAuYWN0aW9uKChjbWQpID0+IGJ1aWxkKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY2xlYW4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1zbmFwc2hvdHMnLCAnUmVtb3ZlIGFsbCBcIl9fc25hcHNob3RzX19cIiBkaXJlY3Rvcmllcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGNsZWFuKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnY29uZmlnIDx0eXBlPicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLWpzb24gPHBhdGg+JywgJ1NhdmUgb3V0cHV0IHRvIGpzb24gZmlsZS4nKVxuICAuYWN0aW9uKCh0eXBlLCBjbWQpID0+IGNvbmZpZyh0eXBlLCBjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2NvbXBpbGUnKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnVHJhbnNwaWxlciBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHRzY29uZmlnLmpzb24pLicpXG4gIC5vcHRpb24oJy0tZW52aXJvbm1lbnQgPG4+JywgJ1RhcmdldCBlbnZpcm9ubWVudC4gXCJub2RlXCIgb3IgXCJ3ZWJcIi4gRGVmYXVsdDogXCJub2RlXCIuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZvcm1hdCA8dmFsdWU+JywgJ1RoaXMgc2V0cyB0aGUgb3V0cHV0IGZvcm1hdCBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0IGZpbGVzLiBEZWZhdWx0OiBcImVzbVwiLicpLmNob2ljZXMoWydjanMnLCAnZXNtJ10pLmRlZmF1bHQoJ2VzbScpKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tb3V0cHV0UGF0aCA8cGF0aD4nLCAnT3V0cHV0IHBhdGgnKVxuICAub3B0aW9uKCctLXJlbW92ZScsICdSZW1vdmVzIGFsbCBmaWxlcyBmcm9tIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSBjb21waWxpbmcuJylcbiAgLm9wdGlvbignLS1zb3VyY2VQYXRoIDxwYXRoPicsICdTb3VyY2UgcGF0aCcpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS13YXRjaCcsICdXYXRjaGVzIGZvciBjaGFuZ2VzIGFuZCBjb21waWxlcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGNvbXBpbGUoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdjcmVhdGUgPHR5cGU+JylcbiAgLm9wdGlvbignLS1vdXRwdXRGaWxlIDxwYXRoPicsICdPdXRwdXQgZmlsZW5hbWUuJylcbiAgLm9wdGlvbignLS1vdXRwdXROYW1lIDxuPicsICdPdXRwdXQgbmFtZS4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ0NyZWF0ZSBUeXBlc2NyaXB0IHZlcnNpb24uJylcbiAgLmFjdGlvbigodHlwZSwgY21kKSA9PiBjcmVhdGUodHlwZSwgY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdkZXYnKVxuICAub3B0aW9uKCctLWJ1bmRsZUFuYWx5emVyJywgJ1J1biBidW5kbGUgYW5hbHl6ZXIuJylcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW9wZW4nLCAnQXV0b21hdGljYWxseSBvcGVuIGRldiBzZXJ2ZXIgaW4gYSBuZXcgYnJvd3NlciB3aW5kb3cuJylcbiAgLm9wdGlvbignLS1vdXRwdXRQYXRoIDxwYXRoPicsICdPdXRwdXQgcGF0aCcpXG4gIC5vcHRpb24oJy0tcG9ydCA8bnVtYmVyPicsIGBQb3J0IG51bWJlciBmb3IgdGhlIGRldmVsb3BtZW50IHNlcnZlciAoZGVmYXVsdDogJHtERUZBVUxUX0RFVl9QT1JUfSkuYClcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIGNvbXBpbGluZy4nKVxuICAub3B0aW9uKCctLXNvdXJjZVBhdGggPHBhdGg+JywgJ1NvdXJjZSBwYXRoJylcbiAgLm9wdGlvbignLS10cmFuc2xhdGlvbnMnLCAnUHJvY2VzcyB0cmFuc2xhdGlvbiBmaWxlcyBhbmQgb3V0cHV0IGZsYXR0ZW5lZCBKU09OLicsIGZhbHNlKVxuICAub3B0aW9uKCctLXR5cGVzY3JpcHQnLCAnVHJhbnNwaWxlIGFzIFR5cGVzY3JpcHQuJylcbiAgLm9wdGlvbignLS11c2VQdWJsaWNJcCcsICdGb3JjZSByZWZyZXNoIHRoZSBjYWNoZWQgcHVibGljIElQIGFkZHJlc3MuJylcbiAgLm9wdGlvbignLS12YXJpYWJsZXMgPG4+JywgJ0Vudmlyb25tZW50IHZhcmlhYmxlcyB0byBzZXQgaW4gXCJwcm9jZXNzLmVudlwiLiAoaWUuIFwie05PREVfRU5WOiBcXCdkZXZlbG9wbWVudFxcJ31cIikuJylcbiAgLm9wdGlvbignLS13YXRjaCcsICdXYXRjaCBmb3IgY2hhbmdlcy4nKVxuICAuYWN0aW9uKChjbWQpID0+IGRldihjbWQpLnRoZW4oKHN0YXR1cykgPT4ge1xuICAgIGlmKHN0YXR1cyAhPT0gMCkgcHJvY2Vzcy5leGl0Q29kZSA9IHN0YXR1cztcbiAgfSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2luaXQgPGFwcE5hbWU+IFtwYWNrYWdlTmFtZV0nKVxuICAub3B0aW9uKCctLWluc3RhbGwnLCAnSW5zdGFsbCBkZXBlbmRlbmNpZXMuJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhY2thZ2UtbWFuYWdlciA8bWFuYWdlcj4nLCAnV2hpY2ggcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS4gRGVmYXVsdDogbnBtJykuY2hvaWNlcyhbJ25wbScsICd5YXJuJ10pLmRlZmF1bHQoJ25wbScpKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS10eXBlc2NyaXB0JywgJ1VzZSBhIFR5cGVzY3JpcHQgYmFzZWQgYXBwLicpXG4gIC5hY3Rpb24oKGFwcE5hbWUsIHBhY2thZ2VOYW1lLCBjbWQpID0+IGluaXQoYXBwTmFtZSwgcGFja2FnZU5hbWUsIGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnbGlua2VkJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gbGlua2VkKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnbGludCcpXG4gIC5vcHRpb24oJy0tY2FjaGUnLCAnT25seSBjaGVjayBjaGFuZ2VkIGZpbGVzLiBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1jYWNoZUxvY2F0aW9uIDxwYXRoPicsICdQYXRoIHRvIHRoZSBjYWNoZSBmaWxlIG9yIGRpcmVjdG9yeS4nKVxuICAub3B0aW9uKCctLWNvbG9yJywgJ0ZvcmNlIGVuYWJsaW5nIG9mIGNvbG9yLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWNvbmZpZyA8cGF0aD4nLCAnVXNlIHRoaXMgY29uZmlndXJhdGlvbiwgb3ZlcnJpZGluZyAuZXNsaW50cmMuKiBjb25maWcgb3B0aW9ucyBpZiBwcmVzZW50LiBJZiBub3Qgc3BlY2lmaWVkIGFuZCBubyBsb2NhbCBjb25maWcgZXhpc3RzLCBMZXggd2lsbCB1c2UgaXRzIGRlZmF1bHQgY29uZmlnLicpXG4gIC5vcHRpb24oJy0tZGVidWcnLCAnT3V0cHV0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1lbnZJbmZvJywgJ091dHB1dCBleGVjdXRpb24gZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uIERlZmF1bHQ6IGZhbHNlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWVudiA8bj4nLCAnU3BlY2lmeSBlbnZpcm9ubWVudHMuJylcbiAgLm9wdGlvbignLS1maXgnLCAnQXBwbHkgQUkgZml4ZXMgYWZ0ZXIgYnVpbHQtaW4gRVNMaW50IGZpeGVzIChzYW1lIGFzIC0tZml4KS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1maXhEcnlSdW4nLCAnQXV0b21hdGljYWxseSBmaXggcHJvYmxlbXMgd2l0aG91dCBzYXZpbmcgdGhlIGNoYW5nZXMgdG8gdGhlIGZpbGUgc3lzdGVtLicsIGZhbHNlKVxuICAub3B0aW9uKCctLWZpeFR5cGUgPHR5cGU+JywgJ1NwZWNpZnkgdGhlIHR5cGVzIG9mIGZpeGVzIHRvIGFwcGx5IChwcm9ibGVtLCBzdWdnZXN0aW9uLCBsYXlvdXQpLicpXG4gIC5vcHRpb24oJy0tZm9ybWF0IDxuPicsICdVc2UgYSBzcGVjaWZpYyBvdXRwdXQgZm9ybWF0LiBEZWZhdWx0OiBzdHlsaXNoLicpXG4gIC5vcHRpb24oJy0tZ2xvYmFsIDx2YXJpYWJsZXM+JywgJ0RlZmluZSBnbG9iYWwgdmFyaWFibGVzLicpXG4gIC5vcHRpb24oJy0taWdub3JlUGF0aCA8cGF0aD4nLCAnU3BlY2lmeSBwYXRoIG9mIGlnbm9yZSBmaWxlLicpXG4gIC5vcHRpb24oJy0taWdub3JlUGF0dGVybiA8cGF0dGVybj4nLCAnUGF0dGVybiBvZiBmaWxlcyB0byBpZ25vcmUgKGluIGFkZGl0aW9uIHRvIHRob3NlIGluIC5lc2xpbnRpZ25vcmUpLicpXG4gIC5vcHRpb24oJy0taW5pdCcsICdSdW4gY29uZmlnIGluaXRpYWxpemF0aW9uIHdpemFyZC4gRGVmYXVsdDogZmFsc2UuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbWF4V2FybmluZ3MgPG51bT4nLCAnTnVtYmVyIG9mIHdhcm5pbmdzIHRvIHRyaWdnZXIgbm9uemVybyBleGl0IGNvZGUuIERlZmF1bHQ6IC0xLicpXG4gIC5vcHRpb24oJy0tbm9Db2xvcicsICdGb3JjZSBkaXNhYmxpbmcgb2YgY29sb3IuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9Fc2xpbnRyYycsICdEaXNhYmxlIHVzZSBvZiBjb25maWd1cmF0aW9uIGZyb20gLmVzbGludHJjLiouJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tbm9JZ25vcmUnLCAnRGlzYWJsZSB1c2Ugb2YgaWdub3JlIGZpbGVzIGFuZCBwYXR0ZXJucy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1ub0lubGluZUNvbmZpZycsICdQcmV2ZW50IGNvbW1lbnRzIGZyb20gY2hhbmdpbmcgY29uZmlnIG9yIHJ1bGVzLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW91dHB1dEZpbGUgPHBhdGg+JywgJ1NwZWNpZnkgZmlsZSB0byB3cml0ZSByZXBvcnQgdG8uJylcbiAgLm9wdGlvbignLS1wYXJzZXIgPG4+JywgJ1NwZWNpZnkgdGhlIHBhcnNlciB0byBiZSB1c2VkLicpXG4gIC5vcHRpb24oJy0tcGFyc2VyT3B0aW9ucyA8b3B0aW9ucz4nLCAnU3BlY2lmeSBwYXJzZXIgb3B0aW9ucy4nKVxuICAub3B0aW9uKCctLXBsdWdpbiA8cGx1Z2lucz4nLCAnU3BlY2lmeSBwbHVnaW5zLicpXG4gIC5vcHRpb24oJy0tcHJpbnRDb25maWcgPHBhdGg+JywgJ1ByaW50IHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2l2ZW4gZmlsZS4nKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tcmVtb3ZlLWNvbW1lbnRzJywgJ1JlbW92ZSBhbGwgY29tbWVudHMgZXhjZXB0IFRPRE9zIGFuZCBjb3B5cmlnaHQgbm90aWNlcy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1yZXBvcnRVbnVzZWREaXNhYmxlRGlyZWN0aXZlcycsICdBZGRzIHJlcG9ydGVkIGVycm9ycyBmb3IgdW51c2VkIGVzbGludC1kaXNhYmxlIGRpcmVjdGl2ZXMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tcmVzb2x2ZVBsdWdpbnNSZWxhdGl2ZVRvIDxwYXRoPicsICdBIGZvbGRlciB3aGVyZSBwbHVnaW5zIHNob3VsZCBiZSByZXNvbHZlZCBmcm9tLicpXG4gIC5vcHRpb24oJy0tcnVsZSA8cGF0aD4nLCAnU3BlY2lmeSBydWxlcy4nKVxuICAub3B0aW9uKCctLXJ1bGVzZGlyIDxwYXRoPicsICdVc2UgYWRkaXRpb25hbCBydWxlcyBmcm9tIHRoaXMgZGlyZWN0b3J5LicpXG4gIC5vcHRpb24oJy0tc3RkaW4nLCAnTGludCBjb2RlIHByb3ZpZGVkIG9uIDxTVERJTj4gLSBEZWZhdWx0OiBmYWxzZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1zdGRpbkZpbGVuYW1lIDxuPicsICdTcGVjaWZ5IGZpbGVuYW1lIHRvIHByb2Nlc3MgU1RESU4gYXMuJylcbiAgLmFjdGlvbigoY21kKSA9PiBsaW50KGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnbWlncmF0ZScpXG4gIC5vcHRpb24oJy1xLCAtLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLmFjdGlvbigoY21kKSA9PiBtaWdyYXRlKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgnc2VydmVybGVzcy1kZXBsb3knKVxuICAucmVxdWlyZWRPcHRpb24oJy0tZW50cnkgPHBhdGg+JywgJ0xhbWJkYSBlbnRyeSBmaWxlIHRvIGJ1bmRsZS4nKVxuICAub3B0aW9uKCctLWNvcHlOb2RlTW9kdWxlIDx2YWx1ZS4uLj4nLCAnUnVudGltZSBub2RlX21vZHVsZXMgcGFja2FnZXMgdG8gY29weSBpbnRvIHRoZSBwYWNrYWdlIGFmdGVyIGJ1bmRsaW5nLicpXG4gIC5vcHRpb24oJy0tZXh0ZXJuYWwgPHZhbHVlLi4uPicsICdQYWNrYWdlcyBvciBwYWNrYWdlIHBhdHRlcm5zIHRvIGtlZXAgZXh0ZXJuYWwgZnJvbSB0aGUgYnVuZGxlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mb3JtYXQgPHZhbHVlPicsICdKYXZhU2NyaXB0IG91dHB1dCBmb3JtYXQuIERlZmF1bHQ6IFwiY2pzXCIuJykuY2hvaWNlcyhbJ2NqcycsICdlc20nXSkuZGVmYXVsdCgnY2pzJykpXG4gIC5vcHRpb24oJy0tbWFpbkZpZWxkcyA8dmFsdWU+JywgJ1BhY2thZ2UgZmllbGRzIGVzYnVpbGQgc2hvdWxkIHByZWZlci4gRGVmYXVsdDogXCJtb2R1bGUsbWFpblwiLicpXG4gIC5vcHRpb24oJy0tbWluaWZ5JywgJ01pbmlmeSB0aGUgYnVuZGxlLicsIGZhbHNlKVxuICAub3B0aW9uKCctLW5vZGVNb2R1bGVzUGF0aCA8cGF0aD4nLCAnUGF0aCB0byBydW50aW1lIG5vZGVfbW9kdWxlcyBjb3BpZWQgYnkgLS1jb3B5Tm9kZU1vZHVsZS4gRGVmYXVsdDogXCIuL25vZGVfbW9kdWxlc1wiLicpXG4gIC5vcHRpb24oJy0tb3V0ZmlsZSA8cGF0aD4nLCAnQnVuZGxlZCBvdXRwdXQgZmlsZSBwYXRoIGluc2lkZSB0aGUgcGFja2FnZSBkaXJlY3RvcnkuJylcbiAgLm9wdGlvbignLS1vdXRwdXQgPHBhdGg+JywgJ1ppcCBvdXRwdXQgcGF0aC4gRGVmYXVsdDogXCIuL2xhbWJkYS1wYWNrYWdlLnppcFwiLicpXG4gIC5vcHRpb24oJy0tcGFja2FnZURpciA8cGF0aD4nLCAnVGVtcG9yYXJ5IHBhY2thZ2UgZGlyZWN0b3J5LiBEZWZhdWx0OiBcIi4vLmxleC9sYW1iZGEtcGFja2FnZVwiLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXNvdXJjZW1hcCcsICdHZW5lcmF0ZSBhIHNvdXJjZW1hcC4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS10YXJnZXQgPHZhbHVlPicsICdlc2J1aWxkIHJ1bnRpbWUgdGFyZ2V0LiBEZWZhdWx0OiBcIm5vZGUyNFwiLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gc2VydmVybGVzc0RlcGxveShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3B1Ymxpc2gnKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYnVtcCA8dHlwZT4nLCAnSW5jcmVtZW50cyB0aGUgdmVyc2lvbi4gVHlwZXMgaW5jbHVkZTogbWFqb3IsIG1pbm9yLCBwYXRjaCwgYmV0YSwgYWxwaGEsIHJjLiBEZWZhdWx0OiBcInBhdGNoXCIuJykuY2hvaWNlcyhbJ21ham9yJywgJ21pbm9yJywgJ3BhdGNoJywgJ2JldGEnLCAnYWxwaGEnLCAncmMnXSkuZGVmYXVsdCgncGF0Y2gnKSlcbiAgLm9wdGlvbignLS1uZXdWZXJzaW9uIDx2ZXJzaW9uTnVtYmVyPicsICdQdWJsaXNoIGFzIGEgc3BlY2lmaWMgdmVyc2lvbi4nKVxuICAub3B0aW9uKCctLW90cCA8Y29kZT4nLCAnUHJvdmlkZSBhIHR3by1mYWN0b3IgY29kZS4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcGFja2FnZS1tYW5hZ2VyIDxtYW5hZ2VyPicsICdXaGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBEZWZhdWx0OiBucG0nKS5jaG9pY2VzKFsnbnBtJywgJ3lhcm4nXSkuZGVmYXVsdCgnbnBtJykpXG4gIC5vcHRpb24oJy0tcHJpdmF0ZScsICdQdWJsaXNoZXMgdGhlIG1vZHVsZSBhcyByZXN0cmljdGVkLicpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXRhZyA8dGFnPicsICdSZWdpc3RlcnMgdGhlIHB1Ymxpc2hlZCBwYWNrYWdlIHdpdGggdGhlIGdpdmVuIHRhZy4nKVxuICAuYWN0aW9uKChjbWQpID0+IHB1Ymxpc2goY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCdzZXJ2ZXJsZXNzLWRldicpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGRlZmF1bHQ6IGxleC5jb25maWcubWpzKS4nKVxuICAub3B0aW9uKCctLWhvc3QgPGhvc3Q+JywgJ0hvc3QgdG8gYmluZCB0aGUgc2VydmVyIHRvIChkZWZhdWx0OiBsb2NhbGhvc3QpLicpXG4gIC5vcHRpb24oJy0taHR0cFBvcnQgPHBvcnQ+JywgJ0hUVFAgc2VydmVyIHBvcnQgKGRlZmF1bHQ6IDMxMDApLicpXG4gIC5vcHRpb24oJy0taHR0cHNQb3J0IDxwb3J0PicsICdIVFRQUyBzZXJ2ZXIgcG9ydCAoZGVmYXVsdDogMzEwMSkuJylcbiAgLm9wdGlvbignLS13c1BvcnQgPHBvcnQ+JywgJ1dlYlNvY2tldCBzZXJ2ZXIgcG9ydCAoZGVmYXVsdDogMzEwMikuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tcmVtb3ZlJywgJ1JlbW92ZXMgYWxsIGZpbGVzIGZyb20gdGhlIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIHN0YXJ0aW5nLicpXG4gIC5vcHRpb24oJy0tdXNlUHVibGljSXAnLCAnRm9yY2UgcmVmcmVzaCB0aGUgY2FjaGVkIHB1YmxpYyBJUCBhZGRyZXNzLicpXG4gIC5vcHRpb24oJy0tdmFyaWFibGVzIDxqc29uPicsICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIHByb2Nlc3MuZW52LicpXG4gIC5vcHRpb24oJy0tZGVidWcnLCAnRW5hYmxlIEdyYXBoUUwgZGVidWcgbG9nZ2luZyB0byBzZWUgcXVlcmllcywgdmFyaWFibGVzLCBhbmQgb3BlcmF0aW9ucy4nKVxuICAub3B0aW9uKCctLXByaW50T3V0cHV0JywgJ1ByaW50IEdyYXBoUUwgcmVzcG9uc2Ugb3V0cHV0IGluY2x1ZGluZyBzdGF0dXMsIGhlYWRlcnMsIGFuZCBib2R5LicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gc2VydmVybGVzc0RldihjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3N0b3J5Ym9vaycpXG4gIC5vcHRpb24oJy0tY29uZmlnIDxwYXRoPicsICdDdXN0b20gU3Rvcnlib29rIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IHBhdGggKGllLiAuc3Rvcnlib29rKS4nKVxuICAub3B0aW9uKCctLWxleENvbmZpZyA8cGF0aD4nLCAnQ3VzdG9tIExleCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIGxleC5jb25maWcuanMpLicpXG4gIC5vcHRpb24oJy0tb3BlbicsICdBdXRvbWF0aWNhbGx5IG9wZW4gU3Rvcnlib29rIGluIGEgbmV3IGJyb3dzZXIgd2luZG93LicpXG4gIC5vcHRpb24oJy0tcG9ydCA8bnVtYmVyPicsICdQb3J0IG51bWJlciBmb3IgdGhlIFN0b3J5Ym9vayBzZXJ2ZXIuJywgJzYwMDcnKVxuICAub3B0aW9uKCctLXF1aWV0JywgJ05vIExleCBub3RpZmljYXRpb25zIHByaW50ZWQgaW4gdGhlIGNvbnNvbGUuJylcbiAgLm9wdGlvbignLS1zdGF0aWMnLCAnQnVpbGQgYSBzdGF0aWMgU3Rvcnlib29rIHNpdGUgaW5zdGVhZCBvZiBzdGFydGluZyBkZXYgc2VydmVyLicpXG4gIC5vcHRpb24oJy0tdXNlTGV4Q29uZmlnJywgJ1VzZSBMZXhcXCdzIFJlYWN0IFZpdGUgU3Rvcnlib29rIGNvbmZpZ3VyYXRpb24gaW5zdGVhZCBvZiB0aGUgcHJvamVjdCBjb25maWd1cmF0aW9uLicpXG4gIC5vcHRpb24oJy0tdmFyaWFibGVzIDxuPicsICdFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IGluIFwicHJvY2Vzcy5lbnZcIi4gKGllLiBcIntTVE9SWUJPT0tfVEhFTUU6IFxcJ2RhcmtcXCd9XCIpLicpXG4gIC5vcHRpb24oJy0tdmVyYm9zZScsICdTaG93IGRldGFpbGVkIFN0b3J5Ym9vayBidWlsZCBwcm9ncmVzcyBvdXRwdXQuJylcbiAgLmFjdGlvbigoY21kKSA9PiBzdG9yeWJvb2soY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCd0ZXN0IFtmaWxlcy4uLl0nKVxuICAub3B0aW9uKCctLWFuYWx5emUnLCAnVXNlIEFJIHRvIGFuYWx5emUgdGVzdCBjb3ZlcmFnZSBhbmQgc3VnZ2VzdCBpbXByb3ZlbWVudHMuJywgZmFsc2UpXG4gIC5vcHRpb24oJy0tZGVidWdUZXN0cycsICdVc2UgQUkgdG8gZGVidWcgdGVzdCBmYWlsdXJlcyBhbmQgc3VnZ2VzdCBmaXhlcy4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1nZW5lcmF0ZScsICdVc2UgQUkgdG8gZ2VuZXJhdGUgdGVzdCBjYXNlcyBmb3IgdW50ZXN0ZWQgY29kZS4nLCBmYWxzZSlcbiAgLm9wdGlvbignLS1iYWlsJywgJ0V4aXQgdGhlIHRlc3Qgc3VpdGUgaW1tZWRpYXRlbHkgdXBvbiB0aGUgZmlyc3QgZmFpbGluZyB0ZXN0IHN1aXRlLicpXG4gIC5vcHRpb24oJy0tY2hhbmdlZEZpbGVzV2l0aEFuY2VzdG9yJywgJ1J1bnMgdGVzdHMgcmVsYXRlZCB0byB0aGUgY3VycmVudCBjaGFuZ2VzIGFuZCB0aGUgY2hhbmdlcyBtYWRlIGluIHRoZSBsYXN0IGNvbW1pdC4nKVxuICAub3B0aW9uKCctLWNoYW5nZWRTaW5jZSA8YnJhbmNoPicsICdSdW4gdGVzdHMgcmVsYXRlZCB0byBjaGFuZ2VzIHNpbmNlIHRoZSBwcm92aWRlZCBicmFuY2guJylcbiAgLm9wdGlvbignLS1jaScsICdXaGVuIHRoaXMgb3B0aW9uIGlzIHByb3ZpZGVkLCBWaXRlc3Qgd2lsbCBhc3N1bWUgaXQgaXMgcnVubmluZyBpbiBhIENJIGVudmlyb25tZW50LicpXG4gIC5vcHRpb24oJy0tY2xlYXJDYWNoZScsICdDbGVhciBWaXRlc3QgY2FjaGUuJylcbiAgLm9wdGlvbignLS1jb2xsZWN0Q292ZXJhZ2VGcm9tIDxnbG9iPicsICdBIGdsb2IgcGF0dGVybiByZWxhdGl2ZSB0byBtYXRjaGluZyB0aGUgZmlsZXMgdGhhdCBjb3ZlcmFnZSBpbmZvIG5lZWRzIHRvIGJlIGNvbGxlY3RlZCBmcm9tLicpXG4gIC5vcHRpb24oJy0tY29sb3JzJywgJ0ZvcmNlcyB0ZXN0IHJlc3VsdHMgb3V0cHV0IGhpZ2hsaWdodGluZyBldmVuIGlmIHN0ZG91dCBpcyBub3QgYSBUVFkuJylcbiAgLm9wdGlvbignLS1jb25maWcgPHBhdGg+JywgJ0N1c3RvbSBWaXRlc3QgY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiB2aXRlc3QuY29uZmlnLm1qcykuJylcbiAgLm9wdGlvbignLS1kZWJ1ZycsICdQcmludCBkZWJ1Z2dpbmcgaW5mbyBhYm91dCB5b3VyIFZpdGVzdCBjb25maWcuJylcbiAgLm9wdGlvbignLS1kZXRlY3RPcGVuSGFuZGxlcycsICdBdHRlbXB0IHRvIGNvbGxlY3QgYW5kIHByaW50IG9wZW4gaGFuZGxlcyBwcmV2ZW50aW5nIFZpdGVzdCBmcm9tIGV4aXRpbmcgY2xlYW5seScpXG4gIC5vcHRpb24oJy0tZTJlJywgJ1J1biBQbGF5d3JpZ2h0IGVuZC10by1lbmQgdGVzdHMgbWF0Y2hpbmcgXCIqLmUyZS50c1t4XVwiLicpXG4gIC5vcHRpb24oJy0tZTJlQ29uZmlnIDxwYXRoPicsICdDdXN0b20gUGxheXdyaWdodCBjb25maWd1cmF0aW9uIGZpbGUgcGF0aCAoaWUuIHBsYXl3cmlnaHQuY29uZmlnLnRzKS4nKVxuICAub3B0aW9uKCctLWVudmlyb25tZW50IDxuPicsICdUYXJnZXQgZW52aXJvbm1lbnQuIFwibm9kZVwiIG9yIFwid2ViXCIuIERlZmF1bHQ6IFwibm9kZVwiLicpXG4gIC5vcHRpb24oJy0tZW52IDxuYW1lPicsICdWaXRlc3QgZW52aXJvbm1lbnQsIHN1Y2ggYXMgaGFwcHktZG9tLCBqc2RvbSwgb3Igbm9kZS4nKVxuICAub3B0aW9uKCctLWVycm9yT25EZXByZWNhdGVkJywgJ01ha2UgY2FsbGluZyBkZXByZWNhdGVkIEFQSXMgdGhyb3cgaGVscGZ1bCBlcnJvciBtZXNzYWdlcy4nKVxuICAub3B0aW9uKCctLWV4cGFuZCcsICdVc2UgdGhpcyBmbGFnIHRvIHNob3cgZnVsbCBkaWZmcyBhbmQgZXJyb3JzIGluc3RlYWQgb2YgYSBwYXRjaC4nKVxuICAub3B0aW9uKCctLWZvcmNlRXhpdCcsICdGb3JjZSBWaXRlc3QgdG8gZXhpdCBhZnRlciBhbGwgdGVzdHMgaGF2ZSBjb21wbGV0ZWQgcnVubmluZy4nKVxuICAub3B0aW9uKCctLWpzb24nLCAnUHJpbnRzIHRoZSB0ZXN0IHJlc3VsdHMgaW4gSlNPTi4nKVxuICAub3B0aW9uKCctLWxhc3RDb21taXQnLCAnUnVuIGFsbCB0ZXN0cyBhZmZlY3RlZCBieSBmaWxlIGNoYW5nZXMgaW4gdGhlIGxhc3QgY29tbWl0IG1hZGUuJylcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLWxpc3RUZXN0cycsICdMaXN0cyBhbGwgdGVzdHMgYXMgSlNPTiB0aGF0IFZpdGVzdCB3aWxsIHJ1biBnaXZlbiB0aGUgYXJndW1lbnRzLCBhbmQgZXhpdHMuJylcbiAgLm9wdGlvbignLS1sb2dIZWFwVXNhZ2UnLCAnTG9ncyB0aGUgaGVhcCB1c2FnZSBhZnRlciBldmVyeSB0ZXN0LicpXG4gIC5vcHRpb24oJy0tbWF4V29ya2VycyA8bnVtPicsICdTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHdvcmtlcnMgdGhlIHdvcmtlci1wb29sIHdpbGwgc3Bhd24gZm9yIHJ1bm5pbmcgdGVzdHMuICcpXG4gIC5vcHRpb24oJy0tbm9TdGFja1RyYWNlJywgJ0Rpc2FibGVzIHN0YWNrIHRyYWNlIGluIHRlc3QgcmVzdWx0cyBvdXRwdXQuJylcbiAgLm9wdGlvbignLS1ub3RpZnknLCAnQWN0aXZhdGVzIG5vdGlmaWNhdGlvbnMgZm9yIHRlc3QgcmVzdWx0cy4nKVxuICAub3B0aW9uKCctLW9ubHlDaGFuZ2VkJywgJ1J1biB0ZXN0cyByZWxhdGVkIHRvIGZpbGVzIGNoYW5nZWQgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4nKVxuICAub3B0aW9uKCctLW91dHB1dEZpbGUgPGZpbGVuYW1lPicsICdXcml0ZSB0ZXN0IHJlc3VsdHMgdG8gYSBmaWxlIHdoZW4gdGhlIC0tanNvbiBvcHRpb24gaXMgYWxzbyBzcGVjaWZpZWQuJylcbiAgLm9wdGlvbignLS1wYXNzV2l0aE5vVGVzdHMnLCAnQWxsb3dzIHRoZSB0ZXN0IHN1aXRlIHRvIHBhc3Mgd2hlbiBubyBmaWxlcyBhcmUgZm91bmQuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tcnVuSW5CYW5kJywgJ1J1biBhbGwgdGVzdHMgc2VyaWFsbHkgaW4gdGhlIGN1cnJlbnQgcHJvY2VzcywgcmF0aGVyIHRoYW4gY3JlYXRpbmcgYSB3b3JrZXIgcG9vbCBvZiBjaGlsZCBwcm9jZXNzZXMgdGhhdCBydW4gdGVzdHMuJylcbiAgLm9wdGlvbignLS1zZXR1cCA8cGF0aD4nLCAnVml0ZXN0IHNldHVwIGZpbGUgcGF0aC4nKVxuICAub3B0aW9uKCctLXNob3dDb25maWcnLCAnUHJpbnQgeW91ciBWaXRlc3QgY29uZmlnIGFuZCB0aGVuIGV4aXRzLicpXG4gIC5vcHRpb24oJy0tc2lsZW50JywgJ1ByZXZlbnQgdGVzdHMgZnJvbSBwcmludGluZyBtZXNzYWdlcyB0aHJvdWdoIHRoZSBjb25zb2xlLicpXG4gIC5vcHRpb24oJy0tdGVzdExvY2F0aW9uSW5SZXN1bHRzJywgJ0FkZHMgYSBsb2NhdGlvbiBmaWVsZCB0byB0ZXN0IHJlc3VsdHMuJylcbiAgLm9wdGlvbignLS10ZXN0TmFtZVBhdHRlcm4gPHJlZ2V4PicsICdSdW4gb25seSB0ZXN0cyB3aXRoIGEgbmFtZSB0aGF0IG1hdGNoZXMgdGhlIHJlZ2V4LiAnKVxuICAub3B0aW9uKCctLXRlc3RQYXRoUGF0dGVybiA8cmVnZXg+JywgJ0EgcmVnZXhwIHBhdHRlcm4gc3RyaW5nIHRoYXQgaXMgbWF0Y2hlZCBhZ2FpbnN0IGFsbCB0ZXN0cyBwYXRocyBiZWZvcmUgZXhlY3V0aW5nIHRoZSB0ZXN0LicpXG4gIC5vcHRpb24oJy0tdHlwZXNjcmlwdCcsICdUcmFuc3BpbGUgYXMgVHlwZXNjcmlwdC4nKVxuICAub3B0aW9uKCctLXVuaXQnLCAnUnVuIFZpdGVzdCB1bml0IHRlc3RzIG1hdGNoaW5nIFwiKi50ZXN0LnRzW3hdXCIuJylcbiAgLm9wdGlvbignLS11cGRhdGUnLCAnVXBkYXRlIHNuYXBzaG90cy4gUnVucyBcInZpdGVzdCAtLXVwZGF0ZVwiJylcbiAgLm9wdGlvbignLS11c2VTdGRlcnInLCAnRGl2ZXJ0IGFsbCBvdXRwdXQgdG8gc3RkZXJyLicpXG4gIC5vcHRpb24oJy0tdmVyYm9zZScsICdEaXNwbGF5IGluZGl2aWR1YWwgdGVzdCByZXN1bHRzIHdpdGggdGhlIHRlc3Qgc3VpdGUgaGllcmFyY2h5LicpXG4gIC5vcHRpb24oJy0td2F0Y2ggPHBhdGg+JywgJ1dhdGNoIGZpbGVzIGZvciBjaGFuZ2VzIGFuZCByZXJ1biB0ZXN0cyByZWxhdGVkIHRvIGNoYW5nZWQgZmlsZXMuJylcbiAgLm9wdGlvbignLS13YXRjaEFsbCcsICdXYXRjaCBmaWxlcyBmb3IgY2hhbmdlcyBhbmQgcmVydW4gYWxsIHRlc3RzIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMuJylcbiAgLmFjdGlvbigoZmlsZXMsIG9wdGlvbnMsIGNtZCkgPT4gdGVzdChvcHRpb25zLCBjbWQuYXJncywgZmlsZXMsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ3VwZGF0ZScpXG4gIC5vcHRpb24oJy0taW50ZXJhY3RpdmUnLCAnQ2hvb3NlIHdoaWNoIHBhY2thZ2VzIHRvIHVwZGF0ZS4nKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcGFja2FnZS1tYW5hZ2VyIDxtYW5hZ2VyPicsICdXaGljaCBwYWNrYWdlIG1hbmFnZXIgdG8gdXNlLiBEZWZhdWx0OiBucG0nKS5jaG9pY2VzKFsnbnBtJywgJ3lhcm4nXSkuZGVmYXVsdCgnbnBtJykpXG4gIC5vcHRpb24oJy0tcXVpZXQnLCAnTm8gTGV4IG5vdGlmaWNhdGlvbnMgcHJpbnRlZCBpbiB0aGUgY29uc29sZS4nKVxuICAub3B0aW9uKCctLXJlZ2lzdHJ5IDx1cmw+JywgJ1JlZ2lzdHJ5IHVzZWQgd2hpbGUgdXBkYXRpbmcgcGFja2FnZXMuJylcbiAgLmFjdGlvbigoY21kKSA9PiB1cGRhdGUoY21kLCBwcm9jZXNzLmV4aXQpLnRoZW4oKCkgPT4ge30pKTtcblxucHJvZ3JhbS5jb21tYW5kKCd1cGdyYWRlJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hY3Rpb24oKGNtZCkgPT4gdXBncmFkZShjbWQsIHByb2Nlc3MuZXhpdCkudGhlbigoKSA9PiB7fSkpO1xuXG5wcm9ncmFtLmNvbW1hbmQoJ2FpJylcbiAgLm9wdGlvbignLS1jb250ZXh0JywgJ0luY2x1ZGUgcHJvamVjdCBjb250ZXh0IGluIHRoZSBBSSBwcm9tcHQuJywgdHJ1ZSlcbiAgLm9wdGlvbignLS1maWxlIDxwYXRoPicsICdTcGVjaWZpYyBmaWxlIHRvIG9wZXJhdGUgb24uJylcbiAgLm9wdGlvbignLS1sZXhDb25maWcgPHBhdGg+JywgJ0N1c3RvbSBMZXggY29uZmlndXJhdGlvbiBmaWxlIHBhdGggKGllLiBsZXguY29uZmlnLmpzKS4nKVxuICAub3B0aW9uKCctLW1vZGVsIDxtb2RlbD4nLCAnQUkgbW9kZWwgdG8gdXNlLiBEZWZhdWx0OiBncHQtNG8uJylcbiAgLm9wdGlvbignLS1wcm9tcHQgPHRleHQ+JywgJ1RoZSBwcm9tcHQgdG8gc2VuZCB0byB0aGUgQUkuJylcbiAgLm9wdGlvbignLS1xdWlldCcsICdObyBMZXggbm90aWZpY2F0aW9ucyBwcmludGVkIGluIHRoZSBjb25zb2xlLicpXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10YXNrIDx0YXNrPicsICdUeXBlIG9mIEFJIHRhc2sgdG8gcGVyZm9ybS4nKS5jaG9pY2VzKFsnZ2VuZXJhdGUnLCAnZXhwbGFpbicsICd0ZXN0JywgJ29wdGltaXplJywgJ2hlbHAnXSkuZGVmYXVsdCgnaGVscCcpKVxuICAuYWN0aW9uKChjbWQpID0+IGFpRnVuY3Rpb24oY21kKS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW0uY29tbWFuZCgndmVyc2lvbnMnKVxuICAub3B0aW9uKCctLWpzb24nLCAnUHJpbnQgdGhlIHZlcnNpb24gYXMgYSBKU09OIG9iamVjdC4nKVxuICAuYWN0aW9uKChjbWQpID0+IHZlcnNpb25zKGNtZCwgcHJvY2Vzcy5leGl0KS50aGVuKCgpID0+IHt9KSk7XG5cbnByb2dyYW1cbiAgLnZlcnNpb24ocGFja2FnZUpzb24udmVyc2lvbilcbiAgLnBhcnNlKHByb2Nlc3MuYXJndik7XG4iXSwibmFtZXMiOlsiT3B0aW9uIiwicHJvZ3JhbSIsInJlYWRGaWxlU3luYyIsImNyZWF0ZVJlcXVpcmUiLCJkaXJuYW1lIiwicmVzb2x2ZSIsImZpbGVVUkxUb1BhdGgiLCJhaUZ1bmN0aW9uIiwiYnVpbGQiLCJjbGVhbiIsImNvbXBpbGUiLCJjb25maWciLCJjcmVhdGUiLCJkZXYiLCJERUZBVUxUX0RFVl9QT1JUIiwiaW5pdCIsImxpbmtlZCIsImxpbnQiLCJtaWdyYXRlIiwic2VydmVybGVzc0RlcGxveSIsInB1Ymxpc2giLCJzZXJ2ZXJsZXNzRGV2Iiwic3Rvcnlib29rIiwidGVzdCIsInVwZGF0ZSIsInVwZ3JhZGUiLCJ2ZXJzaW9ucyIsInByb2Nlc3MiLCJlbnYiLCJMRVhfUk9PVCIsInVybCIsImxleE5vZGVNb2R1bGVzIiwiTk9ERV9QQVRIIiwic3BsaXQiLCJpbmNsdWRlcyIsInJlcXVpcmUiLCJNb2R1bGUiLCJfaW5pdFBhdGhzIiwicGFja2FnZVBhdGgiLCJVUkwiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsImNvbW1hbmQiLCJvcHRpb24iLCJhZGRPcHRpb24iLCJjaG9pY2VzIiwiZGVmYXVsdCIsImFjdGlvbiIsImNtZCIsImV4aXQiLCJ0aGVuIiwidHlwZSIsInN0YXR1cyIsImV4aXRDb2RlIiwiYXBwTmFtZSIsInBhY2thZ2VOYW1lIiwicmVxdWlyZWRPcHRpb24iLCJmaWxlcyIsIm9wdGlvbnMiLCJhcmdzIiwidmVyc2lvbiIsImFyZ3YiXSwibWFwcGluZ3MiOiI7QUFDQTs7O0NBR0MsR0FDRCxTQUFRQSxNQUFNLEVBQUVDLE9BQU8sUUFBTyxZQUFZO0FBQzFDLFNBQVFDLFlBQVksUUFBTyxLQUFLO0FBQ2hDLFNBQVFDLGFBQWEsUUFBTyxTQUFTO0FBQ3JDLFNBQVFDLE9BQU8sRUFBRUMsT0FBTyxRQUFPLE9BQU87QUFDdEMsU0FBUUMsYUFBYSxRQUFPLE1BQU07QUFFbEMsU0FBUUMsVUFBVSxRQUFPLHNCQUFzQjtBQUMvQyxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLEtBQUssUUFBTyw0QkFBNEI7QUFDaEQsU0FBUUMsT0FBTyxRQUFPLGdDQUFnQztBQUN0RCxTQUFRQyxNQUFNLFFBQU8sOEJBQThCO0FBQ25ELFNBQVFDLE1BQU0sUUFBTyw4QkFBOEI7QUFDbkQsU0FBUUMsR0FBRyxFQUFFQyxnQkFBZ0IsUUFBTyx3QkFBd0I7QUFDNUQsU0FBUUMsSUFBSSxRQUFPLDBCQUEwQjtBQUM3QyxTQUFRQyxNQUFNLFFBQU8sMEJBQTBCO0FBQy9DLFNBQVFDLElBQUksUUFBTywwQkFBMEI7QUFDN0MsU0FBUUMsT0FBTyxRQUFPLGdDQUFnQztBQUN0RCxTQUFRQyxnQkFBZ0IsUUFBTyxvREFBb0Q7QUFDbkYsU0FBUUMsT0FBTyxRQUFPLGdDQUFnQztBQUN0RCxTQUFRQyxhQUFhLFFBQU8sOENBQThDO0FBQzFFLFNBQVFDLFNBQVMsUUFBTyxvQ0FBb0M7QUFDNUQsU0FBUUMsSUFBSSxRQUFPLDBCQUEwQjtBQUM3QyxTQUFRQyxNQUFNLFFBQU8sOEJBQThCO0FBQ25ELFNBQVFDLE9BQU8sUUFBTyxnQ0FBZ0M7QUFDdEQsU0FBUUMsUUFBUSxRQUFPLGtDQUFrQztBQUV6REMsUUFBUUMsR0FBRyxDQUFDQyxRQUFRLEdBQUd6QixRQUFRRSxjQUFjLFlBQVl3QixHQUFHO0FBRTVELE1BQU1DLGlCQUFpQjFCLFFBQVFELFFBQVFFLGNBQWMsWUFBWXdCLEdBQUcsSUFBSTtBQUN4RSxJQUFHLENBQUNILFFBQVFDLEdBQUcsQ0FBQ0ksU0FBUyxFQUFFO0lBQ3pCTCxRQUFRQyxHQUFHLENBQUNJLFNBQVMsR0FBR0Q7QUFDMUIsT0FBTyxJQUFHLENBQUNKLFFBQVFDLEdBQUcsQ0FBQ0ksU0FBUyxDQUFDQyxLQUFLLENBQUMsS0FBS0MsUUFBUSxDQUFDSCxpQkFBaUI7SUFDcEVKLFFBQVFDLEdBQUcsQ0FBQ0ksU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFRCxnQkFBZ0I7QUFDL0M7QUFFQSxNQUFNSSxVQUFVaEMsY0FBYyxZQUFZMkIsR0FBRztBQUM3QyxnREFBZ0Q7QUFDaERLLFFBQVEsVUFBVUMsTUFBTSxDQUFDQyxVQUFVO0FBRW5DLE1BQU1DLGNBQWNoQyxjQUFjLElBQUlpQyxJQUFJLG1CQUFtQixZQUFZVCxHQUFHO0FBQzVFLE1BQU1VLGNBQWNDLEtBQUtDLEtBQUssQ0FBQ3hDLGFBQWFvQyxhQUFhO0FBRXpEckMsUUFBUTBDLE9BQU8sQ0FBQyxTQUNiQyxNQUFNLENBQUMsWUFBWSxpREFBaUQsT0FDcEVBLE1BQU0sQ0FBQyxhQUFhLGtFQUFrRSxPQUN0RkMsU0FBUyxDQUFDLElBQUk3QyxPQUFPLG9CQUFvQiwrREFBK0Q4QyxPQUFPLENBQUM7SUFBQztJQUFRO0NBQU0sR0FDL0hGLE1BQU0sQ0FBQyxzQkFBc0Isd0VBQzdCQyxTQUFTLENBQUMsSUFBSTdDLE9BQU8sb0JBQW9CLG1GQUFtRjhDLE9BQU8sQ0FBQztJQUFDO0lBQU87Q0FBTSxFQUFFQyxPQUFPLENBQUMsUUFDNUpILE1BQU0sQ0FBQyxzQkFBc0IsZ0RBQzdCQyxTQUFTLENBQUMsSUFBSTdDLE9BQU8saUJBQWlCLHNDQUFzQzhDLE9BQU8sQ0FBQztJQUFDO0lBQWU7Q0FBYSxFQUFFQyxPQUFPLENBQUMsZUFDM0hILE1BQU0sQ0FBQyx3QkFBd0Isd0VBQy9CQSxNQUFNLENBQUMsV0FBVyxnREFBZ0QsT0FDbEVBLE1BQU0sQ0FBQyxZQUFZLGlFQUFpRSxPQUNwRkEsTUFBTSxDQUFDLHVCQUF1QixlQUM5QkEsTUFBTSxDQUFDLFlBQVksZ0RBQWdELE9BQ25FQSxNQUFNLENBQUMsa0JBQWtCLHdEQUF3RCxPQUNqRkEsTUFBTSxDQUFDLGdCQUFnQiw0QkFBNEIsT0FDbkRBLE1BQU0sQ0FBQyxtQkFBbUIsc0ZBQzFCQSxNQUFNLENBQUMsV0FBVyxzQkFBc0IsT0FDeENJLE1BQU0sQ0FBQyxDQUFDQyxNQUFRekMsTUFBTXlDLEtBQUt0QixRQUFRdUIsSUFBSSxFQUFFQyxJQUFJLENBQUMsS0FBTztBQUV4RGxELFFBQVEwQyxPQUFPLENBQUMsU0FDYkMsTUFBTSxDQUFDLFdBQVcsZ0RBQ2xCQSxNQUFNLENBQUMsZUFBZSwyQ0FDdEJJLE1BQU0sQ0FBQyxDQUFDQyxNQUFReEMsTUFBTXdDLEtBQUt0QixRQUFRdUIsSUFBSSxFQUFFQyxJQUFJLENBQUMsS0FBTztBQUV4RGxELFFBQVEwQyxPQUFPLENBQUMsaUJBQ2JDLE1BQU0sQ0FBQyxXQUFXLGdEQUNsQkEsTUFBTSxDQUFDLGlCQUFpQiw2QkFDeEJJLE1BQU0sQ0FBQyxDQUFDSSxNQUFNSCxNQUFRdEMsT0FBT3lDLE1BQU1ILEtBQUt0QixRQUFRdUIsSUFBSSxFQUFFQyxJQUFJLENBQUMsS0FBTztBQUVyRWxELFFBQVEwQyxPQUFPLENBQUMsV0FDYkMsTUFBTSxDQUFDLG1CQUFtQiwyREFDMUJBLE1BQU0sQ0FBQyxxQkFBcUIseURBQzVCQyxTQUFTLENBQUMsSUFBSTdDLE9BQU8sb0JBQW9CLG1GQUFtRjhDLE9BQU8sQ0FBQztJQUFDO0lBQU87Q0FBTSxFQUFFQyxPQUFPLENBQUMsUUFDNUpILE1BQU0sQ0FBQyxzQkFBc0IsMkRBQzdCQSxNQUFNLENBQUMsdUJBQXVCLGVBQzlCQSxNQUFNLENBQUMsWUFBWSxpRUFDbkJBLE1BQU0sQ0FBQyx1QkFBdUIsZUFDOUJBLE1BQU0sQ0FBQyxnQkFBZ0IsNEJBQ3ZCQSxNQUFNLENBQUMsV0FBVyxnREFDbEJBLE1BQU0sQ0FBQyxXQUFXLHFDQUNsQkksTUFBTSxDQUFDLENBQUNDLE1BQVF2QyxRQUFRdUMsS0FBS3RCLFFBQVF1QixJQUFJLEVBQUVDLElBQUksQ0FBQyxLQUFPO0FBRTFEbEQsUUFBUTBDLE9BQU8sQ0FBQyxpQkFDYkMsTUFBTSxDQUFDLHVCQUF1QixvQkFDOUJBLE1BQU0sQ0FBQyxvQkFBb0IsZ0JBQzNCQSxNQUFNLENBQUMsV0FBVyxnREFDbEJBLE1BQU0sQ0FBQyxnQkFBZ0IsOEJBQ3ZCSSxNQUFNLENBQUMsQ0FBQ0ksTUFBTUgsTUFBUXJDLE9BQU93QyxNQUFNSCxLQUFLdEIsUUFBUXVCLElBQUksRUFBRUMsSUFBSSxDQUFDLEtBQU87QUFFckVsRCxRQUFRMEMsT0FBTyxDQUFDLE9BQ2JDLE1BQU0sQ0FBQyxvQkFBb0Isd0JBQzNCQSxNQUFNLENBQUMsc0JBQXNCLDJEQUM3QkEsTUFBTSxDQUFDLFVBQVUsMERBQ2pCQSxNQUFNLENBQUMsdUJBQXVCLGVBQzlCQSxNQUFNLENBQUMsbUJBQW1CLENBQUMsaURBQWlELEVBQUU5QixpQkFBaUIsRUFBRSxDQUFDLEVBQ2xHOEIsTUFBTSxDQUFDLFdBQVcsZ0RBQ2xCQSxNQUFNLENBQUMsWUFBWSxpRUFDbkJBLE1BQU0sQ0FBQyx1QkFBdUIsZUFDOUJBLE1BQU0sQ0FBQyxrQkFBa0Isd0RBQXdELE9BQ2pGQSxNQUFNLENBQUMsZ0JBQWdCLDRCQUN2QkEsTUFBTSxDQUFDLGlCQUFpQiwrQ0FDeEJBLE1BQU0sQ0FBQyxtQkFBbUIsdUZBQzFCQSxNQUFNLENBQUMsV0FBVyxzQkFDbEJJLE1BQU0sQ0FBQyxDQUFDQyxNQUFRcEMsSUFBSW9DLEtBQUtFLElBQUksQ0FBQyxDQUFDRTtRQUM5QixJQUFHQSxXQUFXLEdBQUcxQixRQUFRMkIsUUFBUSxHQUFHRDtJQUN0QztBQUVGcEQsUUFBUTBDLE9BQU8sQ0FBQyxnQ0FDYkMsTUFBTSxDQUFDLGFBQWEseUJBQ3BCQyxTQUFTLENBQUMsSUFBSTdDLE9BQU8sK0JBQStCLDhDQUE4QzhDLE9BQU8sQ0FBQztJQUFDO0lBQU87Q0FBTyxFQUFFQyxPQUFPLENBQUMsUUFDbklILE1BQU0sQ0FBQyxXQUFXLGdEQUNsQkEsTUFBTSxDQUFDLGdCQUFnQiwrQkFDdkJJLE1BQU0sQ0FBQyxDQUFDTyxTQUFTQyxhQUFhUCxNQUFRbEMsS0FBS3dDLFNBQVNDLGFBQWFQLEtBQUt0QixRQUFRdUIsSUFBSSxFQUFFQyxJQUFJLENBQUMsS0FBTztBQUVuR2xELFFBQVEwQyxPQUFPLENBQUMsVUFDYkMsTUFBTSxDQUFDLFdBQVcsZ0RBQ2xCSSxNQUFNLENBQUMsQ0FBQ0MsTUFBUWpDLE9BQU9pQyxLQUFLdEIsUUFBUXVCLElBQUksRUFBRUMsSUFBSSxDQUFDLEtBQU87QUFFekRsRCxRQUFRMEMsT0FBTyxDQUFDLFFBQ2JDLE1BQU0sQ0FBQyxXQUFXLDZDQUE2QyxPQUMvREEsTUFBTSxDQUFDLDBCQUEwQix3Q0FDakNBLE1BQU0sQ0FBQyxXQUFXLDRCQUE0QixPQUM5Q0EsTUFBTSxDQUFDLG1CQUFtQiwySkFDMUJBLE1BQU0sQ0FBQyxXQUFXLGlDQUFpQyxPQUNuREEsTUFBTSxDQUFDLGFBQWEsNkRBQTZELE9BQ2pGQSxNQUFNLENBQUMsYUFBYSx5QkFDcEJBLE1BQU0sQ0FBQyxTQUFTLCtEQUErRCxPQUMvRUEsTUFBTSxDQUFDLGVBQWUsNkVBQTZFLE9BQ25HQSxNQUFNLENBQUMsb0JBQW9CLHNFQUMzQkEsTUFBTSxDQUFDLGdCQUFnQixtREFDdkJBLE1BQU0sQ0FBQyx3QkFBd0IsNEJBQy9CQSxNQUFNLENBQUMsdUJBQXVCLGdDQUM5QkEsTUFBTSxDQUFDLDZCQUE2Qix1RUFDcENBLE1BQU0sQ0FBQyxVQUFVLHFEQUFxRCxPQUN0RUEsTUFBTSxDQUFDLHVCQUF1QixpRUFDOUJBLE1BQU0sQ0FBQyxhQUFhLDZCQUE2QixPQUNqREEsTUFBTSxDQUFDLGdCQUFnQixrREFBa0QsT0FDekVBLE1BQU0sQ0FBQyxjQUFjLDZDQUE2QyxPQUNsRUEsTUFBTSxDQUFDLG9CQUFvQixtREFBbUQsT0FDOUVBLE1BQU0sQ0FBQyx1QkFBdUIsb0NBQzlCQSxNQUFNLENBQUMsZ0JBQWdCLGtDQUN2QkEsTUFBTSxDQUFDLDZCQUE2QiwyQkFDcENBLE1BQU0sQ0FBQyxzQkFBc0Isb0JBQzdCQSxNQUFNLENBQUMsd0JBQXdCLCtDQUMvQkEsTUFBTSxDQUFDLFdBQVcsZ0RBQWdELE9BQ2xFQSxNQUFNLENBQUMscUJBQXFCLDJEQUEyRCxPQUN2RkEsTUFBTSxDQUFDLG1DQUFtQyw4REFBOEQsT0FDeEdBLE1BQU0sQ0FBQyxxQ0FBcUMsbURBQzVDQSxNQUFNLENBQUMsaUJBQWlCLGtCQUN4QkEsTUFBTSxDQUFDLHFCQUFxQiw2Q0FDNUJBLE1BQU0sQ0FBQyxXQUFXLG1EQUFtRCxPQUNyRUEsTUFBTSxDQUFDLHVCQUF1Qix5Q0FDOUJJLE1BQU0sQ0FBQyxDQUFDQyxNQUFRaEMsS0FBS2dDLEtBQUt0QixRQUFRdUIsSUFBSSxFQUFFQyxJQUFJLENBQUMsS0FBTztBQUV2RGxELFFBQVEwQyxPQUFPLENBQUMsV0FDYkMsTUFBTSxDQUFDLGVBQWUsZ0RBQ3RCSSxNQUFNLENBQUMsQ0FBQ0MsTUFBUS9CLFFBQVErQixLQUFLdEIsUUFBUXVCLElBQUksRUFBRUMsSUFBSSxDQUFDLEtBQU87QUFFMURsRCxRQUFRMEMsT0FBTyxDQUFDLHFCQUNiYyxjQUFjLENBQUMsa0JBQWtCLGdDQUNqQ2IsTUFBTSxDQUFDLCtCQUErQiwwRUFDdENBLE1BQU0sQ0FBQyx5QkFBeUIsa0VBQ2hDQyxTQUFTLENBQUMsSUFBSTdDLE9BQU8sb0JBQW9CLDZDQUE2QzhDLE9BQU8sQ0FBQztJQUFDO0lBQU87Q0FBTSxFQUFFQyxPQUFPLENBQUMsUUFDdEhILE1BQU0sQ0FBQyx3QkFBd0IsaUVBQy9CQSxNQUFNLENBQUMsWUFBWSxzQkFBc0IsT0FDekNBLE1BQU0sQ0FBQyw0QkFBNEIsdUZBQ25DQSxNQUFNLENBQUMsb0JBQW9CLDBEQUMzQkEsTUFBTSxDQUFDLG1CQUFtQixxREFDMUJBLE1BQU0sQ0FBQyx1QkFBdUIsa0VBQzlCQSxNQUFNLENBQUMsV0FBVyxnREFDbEJBLE1BQU0sQ0FBQyxlQUFlLHlCQUF5QixPQUMvQ0EsTUFBTSxDQUFDLG9CQUFvQiw4Q0FDM0JJLE1BQU0sQ0FBQyxDQUFDQyxNQUFROUIsaUJBQWlCOEIsS0FBS3RCLFFBQVF1QixJQUFJLEVBQUVDLElBQUksQ0FBQyxLQUFPO0FBRW5FbEQsUUFBUTBDLE9BQU8sQ0FBQyxXQUNiRSxTQUFTLENBQUMsSUFBSTdDLE9BQU8saUJBQWlCLGtHQUFrRzhDLE9BQU8sQ0FBQztJQUFDO0lBQVM7SUFBUztJQUFTO0lBQVE7SUFBUztDQUFLLEVBQUVDLE9BQU8sQ0FBQyxVQUM1TUgsTUFBTSxDQUFDLGdDQUFnQyxrQ0FDdkNBLE1BQU0sQ0FBQyxnQkFBZ0IsOEJBQ3ZCQyxTQUFTLENBQUMsSUFBSTdDLE9BQU8sK0JBQStCLDhDQUE4QzhDLE9BQU8sQ0FBQztJQUFDO0lBQU87Q0FBTyxFQUFFQyxPQUFPLENBQUMsUUFDbklILE1BQU0sQ0FBQyxhQUFhLHVDQUNwQkEsTUFBTSxDQUFDLFdBQVcsZ0RBQ2xCQSxNQUFNLENBQUMsZUFBZSx1REFDdEJJLE1BQU0sQ0FBQyxDQUFDQyxNQUFRN0IsUUFBUTZCLEtBQUt0QixRQUFRdUIsSUFBSSxFQUFFQyxJQUFJLENBQUMsS0FBTztBQUUxRGxELFFBQVEwQyxPQUFPLENBQUMsa0JBQ2JDLE1BQU0sQ0FBQyxtQkFBbUIsNkRBQzFCQSxNQUFNLENBQUMsaUJBQWlCLG9EQUN4QkEsTUFBTSxDQUFDLHFCQUFxQixxQ0FDNUJBLE1BQU0sQ0FBQyxzQkFBc0Isc0NBQzdCQSxNQUFNLENBQUMsbUJBQW1CLDBDQUMxQkEsTUFBTSxDQUFDLFdBQVcsZ0RBQ2xCQSxNQUFNLENBQUMsWUFBWSxnRUFDbkJBLE1BQU0sQ0FBQyxpQkFBaUIsK0NBQ3hCQSxNQUFNLENBQUMsc0JBQXNCLGdEQUM3QkEsTUFBTSxDQUFDLFdBQVcsMkVBQ2xCQSxNQUFNLENBQUMsaUJBQWlCLHNFQUN4QkksTUFBTSxDQUFDLENBQUNDLE1BQVE1QixjQUFjNEIsS0FBS3RCLFFBQVF1QixJQUFJLEVBQUVDLElBQUksQ0FBQyxLQUFPO0FBRWhFbEQsUUFBUTBDLE9BQU8sQ0FBQyxhQUNiQyxNQUFNLENBQUMsbUJBQW1CLG1FQUMxQkEsTUFBTSxDQUFDLHNCQUFzQiwyREFDN0JBLE1BQU0sQ0FBQyxVQUFVLHlEQUNqQkEsTUFBTSxDQUFDLG1CQUFtQix5Q0FBeUMsUUFDbkVBLE1BQU0sQ0FBQyxXQUFXLGdEQUNsQkEsTUFBTSxDQUFDLFlBQVksaUVBQ25CQSxNQUFNLENBQUMsa0JBQWtCLHVGQUN6QkEsTUFBTSxDQUFDLG1CQUFtQix1RkFDMUJBLE1BQU0sQ0FBQyxhQUFhLGtEQUNwQkksTUFBTSxDQUFDLENBQUNDLE1BQVEzQixVQUFVMkIsS0FBS3RCLFFBQVF1QixJQUFJLEVBQUVDLElBQUksQ0FBQyxLQUFPO0FBRTVEbEQsUUFBUTBDLE9BQU8sQ0FBQyxtQkFDYkMsTUFBTSxDQUFDLGFBQWEsNkRBQTZELE9BQ2pGQSxNQUFNLENBQUMsZ0JBQWdCLG9EQUFvRCxPQUMzRUEsTUFBTSxDQUFDLGNBQWMsb0RBQW9ELE9BQ3pFQSxNQUFNLENBQUMsVUFBVSxzRUFDakJBLE1BQU0sQ0FBQyw4QkFBOEIsc0ZBQ3JDQSxNQUFNLENBQUMsMkJBQTJCLDJEQUNsQ0EsTUFBTSxDQUFDLFFBQVEsdUZBQ2ZBLE1BQU0sQ0FBQyxnQkFBZ0IsdUJBQ3ZCQSxNQUFNLENBQUMsZ0NBQWdDLGdHQUN2Q0EsTUFBTSxDQUFDLFlBQVksd0VBQ25CQSxNQUFNLENBQUMsbUJBQW1CLGtFQUMxQkEsTUFBTSxDQUFDLFdBQVcsa0RBQ2xCQSxNQUFNLENBQUMsdUJBQXVCLG9GQUM5QkEsTUFBTSxDQUFDLFNBQVMsMkRBQ2hCQSxNQUFNLENBQUMsc0JBQXNCLHlFQUM3QkEsTUFBTSxDQUFDLHFCQUFxQix5REFDNUJBLE1BQU0sQ0FBQyxnQkFBZ0IsMERBQ3ZCQSxNQUFNLENBQUMsdUJBQXVCLDhEQUM5QkEsTUFBTSxDQUFDLFlBQVksbUVBQ25CQSxNQUFNLENBQUMsZUFBZSxnRUFDdEJBLE1BQU0sQ0FBQyxVQUFVLG9DQUNqQkEsTUFBTSxDQUFDLGdCQUFnQixtRUFDdkJBLE1BQU0sQ0FBQyxzQkFBc0IsMkRBQzdCQSxNQUFNLENBQUMsZUFBZSxnRkFDdEJBLE1BQU0sQ0FBQyxrQkFBa0IseUNBQ3pCQSxNQUFNLENBQUMsc0JBQXNCLDBGQUM3QkEsTUFBTSxDQUFDLGtCQUFrQixnREFDekJBLE1BQU0sQ0FBQyxZQUFZLDZDQUNuQkEsTUFBTSxDQUFDLGlCQUFpQixpRUFDeEJBLE1BQU0sQ0FBQywyQkFBMkIsMEVBQ2xDQSxNQUFNLENBQUMscUJBQXFCLDBEQUM1QkEsTUFBTSxDQUFDLFdBQVcsZ0RBQ2xCQSxNQUFNLENBQUMsZUFBZSx3SEFDdEJBLE1BQU0sQ0FBQyxrQkFBa0IsMkJBQ3pCQSxNQUFNLENBQUMsZ0JBQWdCLDRDQUN2QkEsTUFBTSxDQUFDLFlBQVksNkRBQ25CQSxNQUFNLENBQUMsMkJBQTJCLDBDQUNsQ0EsTUFBTSxDQUFDLDZCQUE2Qix1REFDcENBLE1BQU0sQ0FBQyw2QkFBNkIsOEZBQ3BDQSxNQUFNLENBQUMsZ0JBQWdCLDRCQUN2QkEsTUFBTSxDQUFDLFVBQVUsa0RBQ2pCQSxNQUFNLENBQUMsWUFBWSw0Q0FDbkJBLE1BQU0sQ0FBQyxlQUFlLGdDQUN0QkEsTUFBTSxDQUFDLGFBQWEsa0VBQ3BCQSxNQUFNLENBQUMsa0JBQWtCLHFFQUN6QkEsTUFBTSxDQUFDLGNBQWMsdUVBQ3JCSSxNQUFNLENBQUMsQ0FBQ1UsT0FBT0MsU0FBU1YsTUFBUTFCLEtBQUtvQyxTQUFTVixJQUFJVyxJQUFJLEVBQUVGLE9BQU8vQixRQUFRdUIsSUFBSSxFQUFFQyxJQUFJLENBQUMsS0FBTztBQUU1RmxELFFBQVEwQyxPQUFPLENBQUMsVUFDYkMsTUFBTSxDQUFDLGlCQUFpQixvQ0FDeEJDLFNBQVMsQ0FBQyxJQUFJN0MsT0FBTywrQkFBK0IsOENBQThDOEMsT0FBTyxDQUFDO0lBQUM7SUFBTztDQUFPLEVBQUVDLE9BQU8sQ0FBQyxRQUNuSUgsTUFBTSxDQUFDLFdBQVcsZ0RBQ2xCQSxNQUFNLENBQUMsb0JBQW9CLDBDQUMzQkksTUFBTSxDQUFDLENBQUNDLE1BQVF6QixPQUFPeUIsS0FBS3RCLFFBQVF1QixJQUFJLEVBQUVDLElBQUksQ0FBQyxLQUFPO0FBRXpEbEQsUUFBUTBDLE9BQU8sQ0FBQyxXQUNiQyxNQUFNLENBQUMsV0FBVyxnREFDbEJJLE1BQU0sQ0FBQyxDQUFDQyxNQUFReEIsUUFBUXdCLEtBQUt0QixRQUFRdUIsSUFBSSxFQUFFQyxJQUFJLENBQUMsS0FBTztBQUUxRGxELFFBQVEwQyxPQUFPLENBQUMsTUFDYkMsTUFBTSxDQUFDLGFBQWEsNkNBQTZDLE1BQ2pFQSxNQUFNLENBQUMsaUJBQWlCLGdDQUN4QkEsTUFBTSxDQUFDLHNCQUFzQiwyREFDN0JBLE1BQU0sQ0FBQyxtQkFBbUIscUNBQzFCQSxNQUFNLENBQUMsbUJBQW1CLGlDQUMxQkEsTUFBTSxDQUFDLFdBQVcsZ0RBQ2xCQyxTQUFTLENBQUMsSUFBSTdDLE9BQU8saUJBQWlCLCtCQUErQjhDLE9BQU8sQ0FBQztJQUFDO0lBQVk7SUFBVztJQUFRO0lBQVk7Q0FBTyxFQUFFQyxPQUFPLENBQUMsU0FDMUlDLE1BQU0sQ0FBQyxDQUFDQyxNQUFRMUMsV0FBVzBDLEtBQUtFLElBQUksQ0FBQyxLQUFPO0FBRS9DbEQsUUFBUTBDLE9BQU8sQ0FBQyxZQUNiQyxNQUFNLENBQUMsVUFBVSx1Q0FDakJJLE1BQU0sQ0FBQyxDQUFDQyxNQUFRdkIsU0FBU3VCLEtBQUt0QixRQUFRdUIsSUFBSSxFQUFFQyxJQUFJLENBQUMsS0FBTztBQUUzRGxELFFBQ0c0RCxPQUFPLENBQUNyQixZQUFZcUIsT0FBTyxFQUMzQm5CLEtBQUssQ0FBQ2YsUUFBUW1DLElBQUkifQ==
@@ -23,6 +23,11 @@ const browserGlobalInjectExcludes = [
23
23
  '**/node_modules/buffer/**',
24
24
  '**/node_modules/process/**'
25
25
  ];
26
+ const developmentCacheHeaders = {
27
+ 'Cache-Control': 'no-store, no-cache, must-revalidate, max-age=0',
28
+ Expires: '0',
29
+ Pragma: 'no-cache'
30
+ };
26
31
  const contentTypes = {
27
32
  '.css': 'text/css',
28
33
  '.gif': 'image/gif',
@@ -255,6 +260,9 @@ export const createLexViteConfig = (options)=>{
255
260
  logLevel: options.quiet ? 'silent' : 'info',
256
261
  mode: options.mode || (options.command === 'build' ? 'production' : 'development'),
257
262
  optimizeDeps: options.ssr ? undefined : {
263
+ ...options.command === 'serve' ? {
264
+ force: true
265
+ } : {},
258
266
  include: [
259
267
  'buffer/index.js',
260
268
  'process/browser.js'
@@ -301,7 +309,10 @@ export const createLexViteConfig = (options)=>{
301
309
  },
302
310
  root: sourcePath,
303
311
  server: {
312
+ allowedHosts: true,
313
+ headers: developmentCacheHeaders,
304
314
  hmr: false,
315
+ host: '0.0.0.0',
305
316
  open: options.open,
306
317
  port: options.port,
307
318
  strictPort: true
@@ -321,4 +332,4 @@ export const createLexViteConfig = (options)=>{
321
332
  return mergeConfig(viteConfig, config.vite || {});
322
333
  };
323
334
 
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy92aXRlL2NvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IGluamVjdCBmcm9tICdAcm9sbHVwL3BsdWdpbi1pbmplY3QnO1xuaW1wb3J0IHt0cmFuc2Zvcm19IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtkaXJuYW1lLCBleHRuYW1lLCByZXNvbHZlfSBmcm9tICdwYXRoJztcbmltcG9ydCB7bWVyZ2VDb25maWd9IGZyb20gJ3ZpdGUnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Z2VuZXJhdGVMZXhGYXZpY29ucywgZ2V0RGV2QXNzZXR9IGZyb20gJy4vYXNzZXRzLmpzJztcblxuaW1wb3J0IHR5cGUge0lubGluZUNvbmZpZywgUGx1Z2lufSBmcm9tICd2aXRlJztcblxuY29uc3QgY3JlYXRlSW5qZWN0UGx1Z2luID0gaW5qZWN0IGFzIHVua25vd24gYXMgKG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBQbHVnaW47XG5cbmV4cG9ydCBjb25zdCBicm93c2VyR2xvYmFsTW9kdWxlcyA9IHtcbiAgQnVmZmVyOiBbJ2J1ZmZlci9pbmRleC5qcycsICdCdWZmZXInXSxcbiAgcHJvY2VzczogWydwcm9jZXNzL2Jyb3dzZXIuanMnLCAnZGVmYXVsdCddXG59IGFzIGNvbnN0O1xuXG5jb25zdCBicm93c2VyR2xvYmFsSW5qZWN0RXhjbHVkZXMgPSBbXG4gICcqKi9ub2RlX21vZHVsZXMvYnVmZmVyLyoqJyxcbiAgJyoqL25vZGVfbW9kdWxlcy9wcm9jZXNzLyoqJ1xuXTtcblxuZXhwb3J0IGludGVyZmFjZSBMZXhWaXRlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGFuYWx5emU/OiBib29sZWFuO1xuICByZWFkb25seSBjb21tYW5kOiAnYnVpbGQnIHwgJ3NlcnZlJztcbiAgcmVhZG9ubHkgZW50cnk/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1vZGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9wZW4/OiBib29sZWFuO1xuICByZWFkb25seSBwb3J0PzogbnVtYmVyO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNzcj86IGJvb2xlYW47XG59XG5cbmNvbnN0IGNvbnRlbnRUeXBlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJy5jc3MnOiAndGV4dC9jc3MnLFxuICAnLmdpZic6ICdpbWFnZS9naWYnLFxuICAnLmh0bWwnOiAndGV4dC9odG1sJyxcbiAgJy5pY28nOiAnaW1hZ2UveC1pY29uJyxcbiAgJy5qcGVnJzogJ2ltYWdlL2pwZWcnLFxuICAnLmpwZyc6ICdpbWFnZS9qcGVnJyxcbiAgJy5qc29uJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAnLnBuZyc6ICdpbWFnZS9wbmcnLFxuICAnLnN2Zyc6ICdpbWFnZS9zdmcreG1sJyxcbiAgJy50dGYnOiAnZm9udC90dGYnLFxuICAnLnR4dCc6ICd0ZXh0L3BsYWluJyxcbiAgJy53b2ZmJzogJ2ZvbnQvd29mZicsXG4gICcud29mZjInOiAnZm9udC93b2ZmMidcbn07XG5cbmNvbnN0IGVtcHR5Q3J5cHRvUGx1Z2luID0gKCk6IFBsdWdpbiA9PiAoe1xuICBsb2FkKGlkKSB7XG4gICAgcmV0dXJuIGlkID09PSAnXFwwbGV4LWVtcHR5LWNyeXB0bycgPyAnZXhwb3J0IGRlZmF1bHQge307IGV4cG9ydCBjb25zdCB3ZWJjcnlwdG8gPSB1bmRlZmluZWQ7JyA6IG51bGw7XG4gIH0sXG4gIG5hbWU6ICdsZXgtZW1wdHktY3J5cHRvJyxcbiAgcmVzb2x2ZUlkKGlkKSB7XG4gICAgcmV0dXJuIGlkID09PSAnY3J5cHRvJyB8fCBpZCA9PT0gJ25vZGU6Y3J5cHRvJyA/ICdcXDBsZXgtZW1wdHktY3J5cHRvJyA6IG51bGw7XG4gIH1cbn0pO1xuXG5jb25zdCBub2RlUG9seWZpbGxNb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBhc3NlcnQ6ICdhc3NlcnQvYnVpbGQvYXNzZXJ0LmpzJyxcbiAgYnVmZmVyOiAnYnVmZmVyL2luZGV4LmpzJyxcbiAgaHR0cDogJ3N0cmVhbS1odHRwL2luZGV4LmpzJyxcbiAgaHR0cHM6ICdodHRwcy1icm93c2VyaWZ5L2luZGV4LmpzJyxcbiAgb3M6ICdvcy1icm93c2VyaWZ5L2Jyb3dzZXIuanMnLFxuICBwYXRoOiAncGF0aC1icm93c2VyaWZ5L2luZGV4LmpzJyxcbiAgcHJvY2VzczogJ3Byb2Nlc3MvYnJvd3Nlci5qcycsXG4gIHN0cmVhbTogJ3N0cmVhbS1icm93c2VyaWZ5L2luZGV4LmpzJyxcbiAgdXRpbDogJ3V0aWwvdXRpbC5qcycsXG4gIHZtOiAndm0tYnJvd3NlcmlmeS9pbmRleC5qcydcbn07XG5cbmNvbnN0IG5vZGVQb2x5ZmlsbHNQbHVnaW4gPSAoKTogUGx1Z2luID0+ICh7XG4gIG5hbWU6ICdsZXgtbm9kZS1wb2x5ZmlsbHMnLFxuICByZXNvbHZlSWQoaWQpIHtcbiAgICBjb25zdCBtb2R1bGVOYW1lID0gaWQuc3RhcnRzV2l0aCgnbm9kZTonKSA/IGlkLnNsaWNlKDUpIDogaWQ7XG4gICAgY29uc3QgcmVwbGFjZW1lbnQgPSBub2RlUG9seWZpbGxNb2R1bGVzW21vZHVsZU5hbWVdO1xuICAgIHJldHVybiByZXBsYWNlbWVudCA/IHJlc29sdmVQcm9qZWN0UGFja2FnZShyZXBsYWNlbWVudCkgOiBudWxsO1xuICB9XG59KTtcblxuY29uc3QgZ3JhcGhxbFBsdWdpbiA9ICgpOiBQbHVnaW4gPT4gKHtcbiAgbG9hZChpZCkge1xuICAgIGlmKCEvXFwuKGdxbHxncmFwaHFsKSQvLnRlc3QoaWQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc291cmNlID0gSlNPTi5zdHJpbmdpZnkocmVhZEZpbGVTeW5jKGlkLCAndXRmOCcpKTtcbiAgICByZXR1cm4gYGltcG9ydCBncWwgZnJvbSAnZ3JhcGhxbC10YWcnOyBleHBvcnQgZGVmYXVsdCBncWwoJHtzb3VyY2V9KTtgO1xuICB9LFxuICBuYW1lOiAnbGV4LWdyYXBocWwnXG59KTtcblxuY29uc3Qgc3djUGx1Z2luID0gKHNvdXJjZVBhdGg6IHN0cmluZyk6IFBsdWdpbiA9PiAoe1xuICBlbmZvcmNlOiAncHJlJyxcbiAgbmFtZTogJ2xleC1zd2MnLFxuICBhc3luYyB0cmFuc2Zvcm0oc291cmNlLCBpZCkge1xuICAgIGNvbnN0IGNsZWFuSWQgPSBpZC5zcGxpdCgnPycpWzBdO1xuICAgIGlmKCFjbGVhbklkLnN0YXJ0c1dpdGgoc291cmNlUGF0aCkgfHwgIS9cXC5banRdc3g/JC8udGVzdChjbGVhbklkKSB8fCAvXFwuKHRlc3R8c3BlY3xpbnRlZ3JhdGlvbnxlMmUpXFwuW2p0XXN4PyQvLnRlc3QoY2xlYW5JZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN3Y0NvbmZpZyA9IExleENvbmZpZy5nZXRTV0NDb25maWdXaXRoUmVhY3RDb21waWxlcigpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2UsIHtcbiAgICAgIC4uLnN3Y0NvbmZpZyxcbiAgICAgIGZpbGVuYW1lOiBjbGVhbklkLFxuICAgICAgbW9kdWxlOiB7Li4uc3djQ29uZmlnPy5tb2R1bGUsIHR5cGU6ICdlczYnfSxcbiAgICAgIHNvdXJjZU1hcHM6IHRydWVcbiAgICB9KTtcblxuICAgIGNvbnN0IG5lZWRzUmVhY3QgPSAvXFxiUmVhY3RcXHMqXFwuLy50ZXN0KHJlc3VsdC5jb2RlKSAmJiAhL2Zyb21cXHMrWydcIl1yZWFjdFsnXCJdLy50ZXN0KHJlc3VsdC5jb2RlKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogbmVlZHNSZWFjdCA/IGBpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xcbiR7cmVzdWx0LmNvZGV9YCA6IHJlc3VsdC5jb2RlLFxuICAgICAgbWFwOiByZXN1bHQubWFwIHx8IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgaW1wb3J0TWV0YUNvbXBhdGliaWxpdHlQbHVnaW4gPSAoc291cmNlUGF0aDogc3RyaW5nKTogUGx1Z2luID0+ICh7XG4gIGVuZm9yY2U6ICdwb3N0JyxcbiAgbmFtZTogJ2xleC1pbXBvcnQtbWV0YS1jb21wYXRpYmlsaXR5JyxcbiAgdHJhbnNmb3JtKHNvdXJjZSwgaWQpIHtcbiAgICBjb25zdCBjbGVhbklkID0gaWQuc3BsaXQoJz8nKVswXTtcbiAgICBpZighY2xlYW5JZC5zdGFydHNXaXRoKHNvdXJjZVBhdGgpIHx8ICFzb3VyY2UuaW5jbHVkZXMoJ2ltcG9ydC5tZXRhLnVybCcpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXBsYWNlbWVudCA9ICcodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgPyBuZXcgVVJMKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjLCB3aW5kb3cubG9jYXRpb24uaHJlZikuaHJlZiA6ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gbmV3IFVSTChcIlwiLCB3aW5kb3cubG9jYXRpb24uaHJlZikuaHJlZiA6IFwiXCIpKSc7XG4gICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlQWxsKCdpbXBvcnQubWV0YS51cmwnLCByZXBsYWNlbWVudCk7XG4gIH1cbn0pO1xuXG5jb25zdCBhc3NldHNEZXZQbHVnaW4gPSAoKTogUGx1Z2luID0+IHtcbiAgbGV0IGZhdmljb25IdG1sOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgYnVpbGRTdGFydCgpIHtcbiAgICAgIGNvbnN0IGdlbmVyYXRlZEZhdmljb25zID0gYXdhaXQgZ2VuZXJhdGVMZXhGYXZpY29ucyhMZXhDb25maWcuY29uZmlnKTtcbiAgICAgIGZhdmljb25IdG1sID0gZ2VuZXJhdGVkRmF2aWNvbnM/Lmh0bWwgfHwgW107XG4gICAgfSxcbiAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyKSB7XG4gICAgICBzZXJ2ZXIubWlkZGxld2FyZXMudXNlKGFzeW5jIChyZXF1ZXN0LCByZXNwb25zZSwgbmV4dCkgPT4ge1xuICAgICAgICBpZighcmVxdWVzdC51cmwpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgZ2V0RGV2QXNzZXQoTGV4Q29uZmlnLmNvbmZpZywgcmVxdWVzdC51cmwpO1xuICAgICAgICBpZighYXNzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDIwMDtcbiAgICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZXNbZXh0bmFtZShyZXF1ZXN0LnVybC5zcGxpdCgnPycpWzBdKV0gfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZW5kKGFzc2V0KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbmFtZTogJ2xleC1hc3NldHMtZGV2JyxcbiAgICB0cmFuc2Zvcm1JbmRleEh0bWwoaHRtbCkge1xuICAgICAgaWYoZmF2aWNvbkh0bWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBodG1sO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZSgnPC9oZWFkPicsIGAgICAgJHtmYXZpY29uSHRtbC5qb2luKCdcXG4gICAgJyl9XFxuICA8L2hlYWQ+YCk7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgYW5hbHl6ZXJQbHVnaW4gPSAoZW5hYmxlZDogYm9vbGVhbik6IFBsdWdpbiA9PiAoe1xuICBnZW5lcmF0ZUJ1bmRsZShfb3B0aW9ucywgYnVuZGxlKSB7XG4gICAgaWYoIWVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXBvcnQgPSBPYmplY3QuZW50cmllcyhidW5kbGUpLm1hcCgoW2ZpbGVOYW1lLCBvdXRwdXRdKSA9PiAoe1xuICAgICAgZmlsZU5hbWUsXG4gICAgICBzaXplOiBvdXRwdXQudHlwZSA9PT0gJ2Fzc2V0J1xuICAgICAgICA/IEJ1ZmZlci5ieXRlTGVuZ3RoKHR5cGVvZiBvdXRwdXQuc291cmNlID09PSAnc3RyaW5nJyA/IG91dHB1dC5zb3VyY2UgOiBvdXRwdXQuc291cmNlKVxuICAgICAgICA6IEJ1ZmZlci5ieXRlTGVuZ3RoKG91dHB1dC5jb2RlKSxcbiAgICAgIHR5cGU6IG91dHB1dC50eXBlXG4gICAgfSkpO1xuXG4gICAgdGhpcy5lbWl0RmlsZSh7ZmlsZU5hbWU6ICdidW5kbGUtcmVwb3J0Lmpzb24nLCBzb3VyY2U6IEpTT04uc3RyaW5naWZ5KHJlcG9ydCwgbnVsbCwgMiksIHR5cGU6ICdhc3NldCd9KTtcbiAgfSxcbiAgbmFtZTogJ2xleC1idW5kbGUtYW5hbHl6ZXInXG59KTtcblxuY29uc3QgZ2V0TGlicmFyeUZvcm1hdHMgPSAobGlicmFyeVRhcmdldD86IHN0cmluZyk6IEFycmF5PCdjanMnIHwgJ2VzJyB8ICdpaWZlJyB8ICd1bWQnPiA9PiB7XG4gIGlmKGxpYnJhcnlUYXJnZXQgPT09ICdjb21tb25qcycgfHwgbGlicmFyeVRhcmdldCA9PT0gJ2NvbW1vbmpzMicpIHtcbiAgICByZXR1cm4gWydjanMnXTtcbiAgfVxuICBpZihsaWJyYXJ5VGFyZ2V0ID09PSAndmFyJyB8fCBsaWJyYXJ5VGFyZ2V0ID09PSAnd2luZG93Jykge1xuICAgIHJldHVybiBbJ2lpZmUnXTtcbiAgfVxuICBpZihsaWJyYXJ5VGFyZ2V0ID09PSAndW1kJykge1xuICAgIHJldHVybiBbJ3VtZCddO1xuICB9XG4gIHJldHVybiBbJ2VzJ107XG59O1xuXG5jb25zdCBmaW5kTm9kZU1vZHVsZXNQYWNrYWdlID0gKHN0YXJ0UGF0aDogc3RyaW5nLCBwYWNrYWdlTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgbGV0IGN1cnJlbnRQYXRoID0gcmVzb2x2ZShzdGFydFBhdGgpO1xuXG4gIHdoaWxlKHRydWUpIHtcbiAgICBjb25zdCBjYW5kaWRhdGVQYXRoID0gcmVzb2x2ZShjdXJyZW50UGF0aCwgJ25vZGVfbW9kdWxlcycsIHBhY2thZ2VOYW1lKTtcbiAgICBpZihleGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpKSB7XG4gICAgICByZXR1cm4gY2FuZGlkYXRlUGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRQYXRoID0gZGlybmFtZShjdXJyZW50UGF0aCk7XG4gICAgaWYocGFyZW50UGF0aCA9PT0gY3VycmVudFBhdGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGN1cnJlbnRQYXRoID0gcGFyZW50UGF0aDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVQcm9qZWN0UGFja2FnZSA9IChwYWNrYWdlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IGZpbmROb2RlTW9kdWxlc1BhY2thZ2UocHJvY2Vzcy5jd2QoKSwgcGFja2FnZU5hbWUpXG4gICAgfHwgZmluZE5vZGVNb2R1bGVzUGFja2FnZShMZXhDb25maWcuZ2V0TGV4RGlyKCksIHBhY2thZ2VOYW1lKVxuICAgIHx8IHJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnbm9kZV9tb2R1bGVzJywgcGFja2FnZU5hbWUpO1xuXG5leHBvcnQgY29uc3QgZ2V0QnJvd3Nlckdsb2JhbEluamVjdE9wdGlvbnMgPSAoY29tbWFuZDogTGV4Vml0ZU9wdGlvbnNbJ2NvbW1hbmQnXSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+ICh7XG4gIC4uLihjb21tYW5kID09PSAnc2VydmUnID8gYnJvd3Nlckdsb2JhbE1vZHVsZXMgOiB7XG4gICAgQnVmZmVyOiBbcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdidWZmZXIvaW5kZXguanMnKSwgJ0J1ZmZlciddLFxuICAgIHByb2Nlc3M6IFtyZXNvbHZlUHJvamVjdFBhY2thZ2UoJ3Byb2Nlc3MvYnJvd3Nlci5qcycpLCAnZGVmYXVsdCddXG4gIH0pLFxuICBleGNsdWRlOiBicm93c2VyR2xvYmFsSW5qZWN0RXhjbHVkZXNcbn0pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTGV4Vml0ZUNvbmZpZyA9IChvcHRpb25zOiBMZXhWaXRlT3B0aW9ucyk6IElubGluZUNvbmZpZyA9PiB7XG4gIGNvbnN0IHtjb25maWd9ID0gTGV4Q29uZmlnO1xuICBjb25zdCBzb3VyY2VQYXRoID0gY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY29uZmlnLnNvdXJjZVBhdGggfHwgJy4vc3JjJyk7XG4gIGNvbnN0IG91dHB1dFBhdGggPSBjb25maWcub3V0cHV0RnVsbFBhdGggfHwgcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBjb25maWcub3V0cHV0UGF0aCB8fCAnLi9saWInKTtcbiAgY29uc3QgZW50cnlQYXRoID0gcmVzb2x2ZShzb3VyY2VQYXRoLCBvcHRpb25zLmVudHJ5IHx8IGNvbmZpZy5lbnRyeUpzIHx8ICdpbmRleC5qcycpO1xuICBjb25zdCBodG1sUGF0aCA9IHJlc29sdmUoc291cmNlUGF0aCwgY29uZmlnLmVudHJ5SFRNTCB8fCAnaW5kZXguaHRtbCcpO1xuICBjb25zdCBoYXNIdG1sRW50cnkgPSBleGlzdHNTeW5jKGh0bWxQYXRoKSAmJiAhb3B0aW9ucy5zc3I7XG4gIGNvbnN0IG91dHB1dEhhc2ggPSBjb25maWcub3V0cHV0SGFzaCB8fCBvcHRpb25zLm1vZGUgPT09ICdwcm9kdWN0aW9uJztcbiAgY29uc3QgZmlsZU5hbWUgPSBjb25maWcub3V0cHV0RmlsZSB8fCAob3V0cHV0SGFzaCA/ICdbbmFtZV0uW2hhc2hdLmpzJyA6ICdbbmFtZV0uanMnKTtcblxuICBjb25zdCB2aXRlQ29uZmlnOiBJbmxpbmVDb25maWcgPSB7XG4gICAgYXBwVHlwZTogaGFzSHRtbEVudHJ5ID8gJ3NwYScgOiAnY3VzdG9tJyxcbiAgICBiYXNlOiAnLycsXG4gICAgYnVpbGQ6IHtcbiAgICAgIGNzc0NvZGVTcGxpdDogdHJ1ZSxcbiAgICAgIGVtcHR5T3V0RGlyOiBmYWxzZSxcbiAgICAgIG1pbmlmeTogb3B0aW9ucy5tb2RlID09PSAncHJvZHVjdGlvbicsXG4gICAgICBvdXREaXI6IG91dHB1dFBhdGgsXG4gICAgICByb2xsZG93bk9wdGlvbnM6IHtcbiAgICAgICAgaW5wdXQ6IGhhc0h0bWxFbnRyeSA/IGh0bWxQYXRoIDogZW50cnlQYXRoLFxuICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICBhc3NldEZpbGVOYW1lczogb3V0cHV0SGFzaCA/ICdhc3NldHMvW25hbWVdLltoYXNoXVtleHRuYW1lXScgOiAnYXNzZXRzL1tuYW1lXVtleHRuYW1lXScsXG4gICAgICAgICAgY2h1bmtGaWxlTmFtZXM6IG91dHB1dEhhc2ggPyAnW25hbWVdLltoYXNoXS5jaHVuay5qcycgOiAnW25hbWVdLmNodW5rLmpzJyxcbiAgICAgICAgICBlbnRyeUZpbGVOYW1lczogZmlsZU5hbWUsXG4gICAgICAgICAgbWFudWFsQ2h1bmtzKGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJykgPyAndmVuZG9ycycgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlbWFwOiAhIWNvbmZpZy5zd2M/LnNvdXJjZU1hcHMsXG4gICAgICBzc3I6IG9wdGlvbnMuc3NyID8gZW50cnlQYXRoIDogZmFsc2UsXG4gICAgICB0YXJnZXQ6IGNvbmZpZy5zd2M/LmpzYz8udGFyZ2V0Py50b1N0cmluZygpIHx8ICdlczIwMjAnXG4gICAgfSxcbiAgICBjbGVhclNjcmVlbjogZmFsc2UsXG4gICAgY29uZmlnRmlsZTogZmFsc2UsXG4gICAgY3NzOiB7XG4gICAgICBwb3N0Y3NzOiByZXNvbHZlKExleENvbmZpZy5nZXRMZXhEaXIoKSwgJ3Bvc3Rjc3MuY29uZmlnLmpzJylcbiAgICB9LFxuICAgIGRlZmluZToge1xuICAgICAgZ2xvYmFsOiAnZ2xvYmFsVGhpcycsXG4gICAgICAncHJvY2Vzcy5lbnYuTk9ERV9FTlYnOiBKU09OLnN0cmluZ2lmeShvcHRpb25zLm1vZGUgfHwgKG9wdGlvbnMuY29tbWFuZCA9PT0gJ2J1aWxkJyA/ICdwcm9kdWN0aW9uJyA6ICdkZXZlbG9wbWVudCcpKVxuICAgIH0sXG4gICAgZW52RGlyOiBwcm9jZXNzLmN3ZCgpLFxuICAgIGxvZ0xldmVsOiBvcHRpb25zLnF1aWV0ID8gJ3NpbGVudCcgOiAnaW5mbycsXG4gICAgbW9kZTogb3B0aW9ucy5tb2RlIHx8IChvcHRpb25zLmNvbW1hbmQgPT09ICdidWlsZCcgPyAncHJvZHVjdGlvbicgOiAnZGV2ZWxvcG1lbnQnKSxcbiAgICBvcHRpbWl6ZURlcHM6IG9wdGlvbnMuc3NyID8gdW5kZWZpbmVkIDoge1xuICAgICAgaW5jbHVkZTogWydidWZmZXIvaW5kZXguanMnLCAncHJvY2Vzcy9icm93c2VyLmpzJ11cbiAgICB9LFxuICAgIHBsdWdpbnM6IFtcbiAgICAgIC4uLihvcHRpb25zLnNzciA/IFtdIDogW1xuICAgICAgICBlbXB0eUNyeXB0b1BsdWdpbigpLFxuICAgICAgICBub2RlUG9seWZpbGxzUGx1Z2luKCksXG4gICAgICAgIGNyZWF0ZUluamVjdFBsdWdpbihnZXRCcm93c2VyR2xvYmFsSW5qZWN0T3B0aW9ucyhvcHRpb25zLmNvbW1hbmQpKVxuICAgICAgXSksXG4gICAgICBzd2NQbHVnaW4oc291cmNlUGF0aCksXG4gICAgICBncmFwaHFsUGx1Z2luKCksXG4gICAgICAuLi4ob3B0aW9ucy5zc3IgPyBbXSA6IFtcbiAgICAgICAgaW1wb3J0TWV0YUNvbXBhdGliaWxpdHlQbHVnaW4oc291cmNlUGF0aCksXG4gICAgICAgIGFzc2V0c0RldlBsdWdpbigpLFxuICAgICAgICBhbmFseXplclBsdWdpbihCb29sZWFuKG9wdGlvbnMuYW5hbHl6ZSkpXG4gICAgICBdKVxuICAgIF0sXG4gICAgcHVibGljRGlyOiBmYWxzZSxcbiAgICByZXNvbHZlOiB7XG4gICAgICBhbGlhczoge1xuICAgICAgICBCdWZmZXI6IHJlc29sdmVQcm9qZWN0UGFja2FnZSgnYnVmZmVyJyksXG4gICAgICAgICdjb3JlLWpzJzogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdjb3JlLWpzJyksXG4gICAgICAgIGdsb2JhbDogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdnbG9iYWwnKSxcbiAgICAgICAgJ2dyYXBocWwtdGFnJzogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdncmFwaHFsLXRhZycpLFxuICAgICAgICByYW5kb21ieXRlczogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdyYW5kb21ieXRlcycpLFxuICAgICAgICByZWFjdDogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdyZWFjdCcpLFxuICAgICAgICAncmVhY3QtZG9tJzogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdyZWFjdC1kb20nKSxcbiAgICAgICAgJ3JlZ2VuZXJhdG9yLXJ1bnRpbWUnOiByZXNvbHZlUHJvamVjdFBhY2thZ2UoJ3JlZ2VuZXJhdG9yLXJ1bnRpbWUnKVxuICAgICAgfSxcbiAgICAgIGV4dGVuc2lvbnM6IFsnLm1qcycsICcuanMnLCAnLnRzJywgJy50c3gnLCAnLmpzeCcsICcuanNvbicsICcuZ3FsJywgJy5ncmFwaHFsJ10sXG4gICAgICBwcmVzZXJ2ZVN5bWxpbmtzOiBmYWxzZSxcbiAgICAgIHRzY29uZmlnUGF0aHM6IHRydWVcbiAgICB9LFxuICAgIHJvb3Q6IHNvdXJjZVBhdGgsXG4gICAgc2VydmVyOiB7XG4gICAgICBobXI6IGZhbHNlLFxuICAgICAgb3Blbjogb3B0aW9ucy5vcGVuLFxuICAgICAgcG9ydDogb3B0aW9ucy5wb3J0LFxuICAgICAgc3RyaWN0UG9ydDogdHJ1ZVxuICAgIH1cbiAgfTtcblxuICBpZighaGFzSHRtbEVudHJ5ICYmIGNvbmZpZy5saWJyYXJ5TmFtZSAmJiAhb3B0aW9ucy5zc3IpIHtcbiAgICB2aXRlQ29uZmlnLmJ1aWxkID0ge1xuICAgICAgLi4udml0ZUNvbmZpZy5idWlsZCxcbiAgICAgIGxpYjoge1xuICAgICAgICBlbnRyeTogZW50cnlQYXRoLFxuICAgICAgICBmaWxlTmFtZTogKCkgPT4gY29uZmlnLm91dHB1dEZpbGUgfHwgJ2luZGV4LmpzJyxcbiAgICAgICAgZm9ybWF0czogZ2V0TGlicmFyeUZvcm1hdHMoY29uZmlnLmxpYnJhcnlUYXJnZXQpLFxuICAgICAgICBuYW1lOiBjb25maWcubGlicmFyeU5hbWVcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlQ29uZmlnKHZpdGVDb25maWcsIGNvbmZpZy52aXRlIHx8IHt9KSBhcyBJbmxpbmVDb25maWc7XG59O1xuIl0sIm5hbWVzIjpbImluamVjdCIsInRyYW5zZm9ybSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJkaXJuYW1lIiwiZXh0bmFtZSIsInJlc29sdmUiLCJtZXJnZUNvbmZpZyIsIkxleENvbmZpZyIsImdlbmVyYXRlTGV4RmF2aWNvbnMiLCJnZXREZXZBc3NldCIsImNyZWF0ZUluamVjdFBsdWdpbiIsImJyb3dzZXJHbG9iYWxNb2R1bGVzIiwiQnVmZmVyIiwicHJvY2VzcyIsImJyb3dzZXJHbG9iYWxJbmplY3RFeGNsdWRlcyIsImNvbnRlbnRUeXBlcyIsImVtcHR5Q3J5cHRvUGx1Z2luIiwibG9hZCIsImlkIiwibmFtZSIsInJlc29sdmVJZCIsIm5vZGVQb2x5ZmlsbE1vZHVsZXMiLCJhc3NlcnQiLCJidWZmZXIiLCJodHRwIiwiaHR0cHMiLCJvcyIsInBhdGgiLCJzdHJlYW0iLCJ1dGlsIiwidm0iLCJub2RlUG9seWZpbGxzUGx1Z2luIiwibW9kdWxlTmFtZSIsInN0YXJ0c1dpdGgiLCJzbGljZSIsInJlcGxhY2VtZW50IiwicmVzb2x2ZVByb2plY3RQYWNrYWdlIiwiZ3JhcGhxbFBsdWdpbiIsInRlc3QiLCJzb3VyY2UiLCJKU09OIiwic3RyaW5naWZ5Iiwic3djUGx1Z2luIiwic291cmNlUGF0aCIsImVuZm9yY2UiLCJjbGVhbklkIiwic3BsaXQiLCJzd2NDb25maWciLCJnZXRTV0NDb25maWdXaXRoUmVhY3RDb21waWxlciIsInJlc3VsdCIsImZpbGVuYW1lIiwibW9kdWxlIiwidHlwZSIsInNvdXJjZU1hcHMiLCJuZWVkc1JlYWN0IiwiY29kZSIsIm1hcCIsImltcG9ydE1ldGFDb21wYXRpYmlsaXR5UGx1Z2luIiwiaW5jbHVkZXMiLCJyZXBsYWNlQWxsIiwiYXNzZXRzRGV2UGx1Z2luIiwiZmF2aWNvbkh0bWwiLCJidWlsZFN0YXJ0IiwiZ2VuZXJhdGVkRmF2aWNvbnMiLCJjb25maWciLCJodG1sIiwiY29uZmlndXJlU2VydmVyIiwic2VydmVyIiwibWlkZGxld2FyZXMiLCJ1c2UiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJuZXh0IiwidXJsIiwiYXNzZXQiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwiZW5kIiwidHJhbnNmb3JtSW5kZXhIdG1sIiwibGVuZ3RoIiwicmVwbGFjZSIsImpvaW4iLCJhbmFseXplclBsdWdpbiIsImVuYWJsZWQiLCJnZW5lcmF0ZUJ1bmRsZSIsIl9vcHRpb25zIiwiYnVuZGxlIiwicmVwb3J0IiwiT2JqZWN0IiwiZW50cmllcyIsImZpbGVOYW1lIiwib3V0cHV0Iiwic2l6ZSIsImJ5dGVMZW5ndGgiLCJlbWl0RmlsZSIsImdldExpYnJhcnlGb3JtYXRzIiwibGlicmFyeVRhcmdldCIsImZpbmROb2RlTW9kdWxlc1BhY2thZ2UiLCJzdGFydFBhdGgiLCJwYWNrYWdlTmFtZSIsImN1cnJlbnRQYXRoIiwiY2FuZGlkYXRlUGF0aCIsInBhcmVudFBhdGgiLCJ1bmRlZmluZWQiLCJjd2QiLCJnZXRMZXhEaXIiLCJnZXRCcm93c2VyR2xvYmFsSW5qZWN0T3B0aW9ucyIsImNvbW1hbmQiLCJleGNsdWRlIiwiY3JlYXRlTGV4Vml0ZUNvbmZpZyIsIm9wdGlvbnMiLCJzb3VyY2VGdWxsUGF0aCIsIm91dHB1dFBhdGgiLCJvdXRwdXRGdWxsUGF0aCIsImVudHJ5UGF0aCIsImVudHJ5IiwiZW50cnlKcyIsImh0bWxQYXRoIiwiZW50cnlIVE1MIiwiaGFzSHRtbEVudHJ5Iiwic3NyIiwib3V0cHV0SGFzaCIsIm1vZGUiLCJvdXRwdXRGaWxlIiwidml0ZUNvbmZpZyIsImFwcFR5cGUiLCJiYXNlIiwiYnVpbGQiLCJjc3NDb2RlU3BsaXQiLCJlbXB0eU91dERpciIsIm1pbmlmeSIsIm91dERpciIsInJvbGxkb3duT3B0aW9ucyIsImlucHV0IiwiYXNzZXRGaWxlTmFtZXMiLCJjaHVua0ZpbGVOYW1lcyIsImVudHJ5RmlsZU5hbWVzIiwibWFudWFsQ2h1bmtzIiwic291cmNlbWFwIiwic3djIiwidGFyZ2V0IiwianNjIiwidG9TdHJpbmciLCJjbGVhclNjcmVlbiIsImNvbmZpZ0ZpbGUiLCJjc3MiLCJwb3N0Y3NzIiwiZGVmaW5lIiwiZ2xvYmFsIiwiZW52RGlyIiwibG9nTGV2ZWwiLCJxdWlldCIsIm9wdGltaXplRGVwcyIsImluY2x1ZGUiLCJwbHVnaW5zIiwiQm9vbGVhbiIsImFuYWx5emUiLCJwdWJsaWNEaXIiLCJhbGlhcyIsInJhbmRvbWJ5dGVzIiwicmVhY3QiLCJleHRlbnNpb25zIiwicHJlc2VydmVTeW1saW5rcyIsInRzY29uZmlnUGF0aHMiLCJyb290IiwiaG1yIiwib3BlbiIsInBvcnQiLCJzdHJpY3RQb3J0IiwibGlicmFyeU5hbWUiLCJsaWIiLCJmb3JtYXRzIiwidml0ZSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsT0FBT0EsWUFBWSx3QkFBd0I7QUFDM0MsU0FBUUMsU0FBUyxRQUFPLFlBQVk7QUFDcEMsU0FB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
335
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy92aXRlL2NvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IGluamVjdCBmcm9tICdAcm9sbHVwL3BsdWdpbi1pbmplY3QnO1xuaW1wb3J0IHt0cmFuc2Zvcm19IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtkaXJuYW1lLCBleHRuYW1lLCByZXNvbHZlfSBmcm9tICdwYXRoJztcbmltcG9ydCB7bWVyZ2VDb25maWd9IGZyb20gJ3ZpdGUnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Z2VuZXJhdGVMZXhGYXZpY29ucywgZ2V0RGV2QXNzZXR9IGZyb20gJy4vYXNzZXRzLmpzJztcblxuaW1wb3J0IHR5cGUge0lubGluZUNvbmZpZywgUGx1Z2lufSBmcm9tICd2aXRlJztcblxuY29uc3QgY3JlYXRlSW5qZWN0UGx1Z2luID0gaW5qZWN0IGFzIHVua25vd24gYXMgKG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBQbHVnaW47XG5cbmV4cG9ydCBjb25zdCBicm93c2VyR2xvYmFsTW9kdWxlcyA9IHtcbiAgQnVmZmVyOiBbJ2J1ZmZlci9pbmRleC5qcycsICdCdWZmZXInXSxcbiAgcHJvY2VzczogWydwcm9jZXNzL2Jyb3dzZXIuanMnLCAnZGVmYXVsdCddXG59IGFzIGNvbnN0O1xuXG5jb25zdCBicm93c2VyR2xvYmFsSW5qZWN0RXhjbHVkZXMgPSBbXG4gICcqKi9ub2RlX21vZHVsZXMvYnVmZmVyLyoqJyxcbiAgJyoqL25vZGVfbW9kdWxlcy9wcm9jZXNzLyoqJ1xuXTtcblxuY29uc3QgZGV2ZWxvcG1lbnRDYWNoZUhlYWRlcnMgPSB7XG4gICdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlLCBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlLCBtYXgtYWdlPTAnLFxuICBFeHBpcmVzOiAnMCcsXG4gIFByYWdtYTogJ25vLWNhY2hlJ1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBMZXhWaXRlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGFuYWx5emU/OiBib29sZWFuO1xuICByZWFkb25seSBjb21tYW5kOiAnYnVpbGQnIHwgJ3NlcnZlJztcbiAgcmVhZG9ubHkgZW50cnk/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1vZGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9wZW4/OiBib29sZWFuO1xuICByZWFkb25seSBwb3J0PzogbnVtYmVyO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNzcj86IGJvb2xlYW47XG59XG5cbmNvbnN0IGNvbnRlbnRUeXBlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJy5jc3MnOiAndGV4dC9jc3MnLFxuICAnLmdpZic6ICdpbWFnZS9naWYnLFxuICAnLmh0bWwnOiAndGV4dC9odG1sJyxcbiAgJy5pY28nOiAnaW1hZ2UveC1pY29uJyxcbiAgJy5qcGVnJzogJ2ltYWdlL2pwZWcnLFxuICAnLmpwZyc6ICdpbWFnZS9qcGVnJyxcbiAgJy5qc29uJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAnLnBuZyc6ICdpbWFnZS9wbmcnLFxuICAnLnN2Zyc6ICdpbWFnZS9zdmcreG1sJyxcbiAgJy50dGYnOiAnZm9udC90dGYnLFxuICAnLnR4dCc6ICd0ZXh0L3BsYWluJyxcbiAgJy53b2ZmJzogJ2ZvbnQvd29mZicsXG4gICcud29mZjInOiAnZm9udC93b2ZmMidcbn07XG5cbmNvbnN0IGVtcHR5Q3J5cHRvUGx1Z2luID0gKCk6IFBsdWdpbiA9PiAoe1xuICBsb2FkKGlkKSB7XG4gICAgcmV0dXJuIGlkID09PSAnXFwwbGV4LWVtcHR5LWNyeXB0bycgPyAnZXhwb3J0IGRlZmF1bHQge307IGV4cG9ydCBjb25zdCB3ZWJjcnlwdG8gPSB1bmRlZmluZWQ7JyA6IG51bGw7XG4gIH0sXG4gIG5hbWU6ICdsZXgtZW1wdHktY3J5cHRvJyxcbiAgcmVzb2x2ZUlkKGlkKSB7XG4gICAgcmV0dXJuIGlkID09PSAnY3J5cHRvJyB8fCBpZCA9PT0gJ25vZGU6Y3J5cHRvJyA/ICdcXDBsZXgtZW1wdHktY3J5cHRvJyA6IG51bGw7XG4gIH1cbn0pO1xuXG5jb25zdCBub2RlUG9seWZpbGxNb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBhc3NlcnQ6ICdhc3NlcnQvYnVpbGQvYXNzZXJ0LmpzJyxcbiAgYnVmZmVyOiAnYnVmZmVyL2luZGV4LmpzJyxcbiAgaHR0cDogJ3N0cmVhbS1odHRwL2luZGV4LmpzJyxcbiAgaHR0cHM6ICdodHRwcy1icm93c2VyaWZ5L2luZGV4LmpzJyxcbiAgb3M6ICdvcy1icm93c2VyaWZ5L2Jyb3dzZXIuanMnLFxuICBwYXRoOiAncGF0aC1icm93c2VyaWZ5L2luZGV4LmpzJyxcbiAgcHJvY2VzczogJ3Byb2Nlc3MvYnJvd3Nlci5qcycsXG4gIHN0cmVhbTogJ3N0cmVhbS1icm93c2VyaWZ5L2luZGV4LmpzJyxcbiAgdXRpbDogJ3V0aWwvdXRpbC5qcycsXG4gIHZtOiAndm0tYnJvd3NlcmlmeS9pbmRleC5qcydcbn07XG5cbmNvbnN0IG5vZGVQb2x5ZmlsbHNQbHVnaW4gPSAoKTogUGx1Z2luID0+ICh7XG4gIG5hbWU6ICdsZXgtbm9kZS1wb2x5ZmlsbHMnLFxuICByZXNvbHZlSWQoaWQpIHtcbiAgICBjb25zdCBtb2R1bGVOYW1lID0gaWQuc3RhcnRzV2l0aCgnbm9kZTonKSA/IGlkLnNsaWNlKDUpIDogaWQ7XG4gICAgY29uc3QgcmVwbGFjZW1lbnQgPSBub2RlUG9seWZpbGxNb2R1bGVzW21vZHVsZU5hbWVdO1xuICAgIHJldHVybiByZXBsYWNlbWVudCA/IHJlc29sdmVQcm9qZWN0UGFja2FnZShyZXBsYWNlbWVudCkgOiBudWxsO1xuICB9XG59KTtcblxuY29uc3QgZ3JhcGhxbFBsdWdpbiA9ICgpOiBQbHVnaW4gPT4gKHtcbiAgbG9hZChpZCkge1xuICAgIGlmKCEvXFwuKGdxbHxncmFwaHFsKSQvLnRlc3QoaWQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc291cmNlID0gSlNPTi5zdHJpbmdpZnkocmVhZEZpbGVTeW5jKGlkLCAndXRmOCcpKTtcbiAgICByZXR1cm4gYGltcG9ydCBncWwgZnJvbSAnZ3JhcGhxbC10YWcnOyBleHBvcnQgZGVmYXVsdCBncWwoJHtzb3VyY2V9KTtgO1xuICB9LFxuICBuYW1lOiAnbGV4LWdyYXBocWwnXG59KTtcblxuY29uc3Qgc3djUGx1Z2luID0gKHNvdXJjZVBhdGg6IHN0cmluZyk6IFBsdWdpbiA9PiAoe1xuICBlbmZvcmNlOiAncHJlJyxcbiAgbmFtZTogJ2xleC1zd2MnLFxuICBhc3luYyB0cmFuc2Zvcm0oc291cmNlLCBpZCkge1xuICAgIGNvbnN0IGNsZWFuSWQgPSBpZC5zcGxpdCgnPycpWzBdO1xuICAgIGlmKCFjbGVhbklkLnN0YXJ0c1dpdGgoc291cmNlUGF0aCkgfHwgIS9cXC5banRdc3g/JC8udGVzdChjbGVhbklkKSB8fCAvXFwuKHRlc3R8c3BlY3xpbnRlZ3JhdGlvbnxlMmUpXFwuW2p0XXN4PyQvLnRlc3QoY2xlYW5JZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN3Y0NvbmZpZyA9IExleENvbmZpZy5nZXRTV0NDb25maWdXaXRoUmVhY3RDb21waWxlcigpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2UsIHtcbiAgICAgIC4uLnN3Y0NvbmZpZyxcbiAgICAgIGZpbGVuYW1lOiBjbGVhbklkLFxuICAgICAgbW9kdWxlOiB7Li4uc3djQ29uZmlnPy5tb2R1bGUsIHR5cGU6ICdlczYnfSxcbiAgICAgIHNvdXJjZU1hcHM6IHRydWVcbiAgICB9KTtcblxuICAgIGNvbnN0IG5lZWRzUmVhY3QgPSAvXFxiUmVhY3RcXHMqXFwuLy50ZXN0KHJlc3VsdC5jb2RlKSAmJiAhL2Zyb21cXHMrWydcIl1yZWFjdFsnXCJdLy50ZXN0KHJlc3VsdC5jb2RlKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogbmVlZHNSZWFjdCA/IGBpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xcbiR7cmVzdWx0LmNvZGV9YCA6IHJlc3VsdC5jb2RlLFxuICAgICAgbWFwOiByZXN1bHQubWFwIHx8IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgaW1wb3J0TWV0YUNvbXBhdGliaWxpdHlQbHVnaW4gPSAoc291cmNlUGF0aDogc3RyaW5nKTogUGx1Z2luID0+ICh7XG4gIGVuZm9yY2U6ICdwb3N0JyxcbiAgbmFtZTogJ2xleC1pbXBvcnQtbWV0YS1jb21wYXRpYmlsaXR5JyxcbiAgdHJhbnNmb3JtKHNvdXJjZSwgaWQpIHtcbiAgICBjb25zdCBjbGVhbklkID0gaWQuc3BsaXQoJz8nKVswXTtcbiAgICBpZighY2xlYW5JZC5zdGFydHNXaXRoKHNvdXJjZVBhdGgpIHx8ICFzb3VyY2UuaW5jbHVkZXMoJ2ltcG9ydC5tZXRhLnVybCcpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXBsYWNlbWVudCA9ICcodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgPyBuZXcgVVJMKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjLCB3aW5kb3cubG9jYXRpb24uaHJlZikuaHJlZiA6ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gbmV3IFVSTChcIlwiLCB3aW5kb3cubG9jYXRpb24uaHJlZikuaHJlZiA6IFwiXCIpKSc7XG4gICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlQWxsKCdpbXBvcnQubWV0YS51cmwnLCByZXBsYWNlbWVudCk7XG4gIH1cbn0pO1xuXG5jb25zdCBhc3NldHNEZXZQbHVnaW4gPSAoKTogUGx1Z2luID0+IHtcbiAgbGV0IGZhdmljb25IdG1sOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgYnVpbGRTdGFydCgpIHtcbiAgICAgIGNvbnN0IGdlbmVyYXRlZEZhdmljb25zID0gYXdhaXQgZ2VuZXJhdGVMZXhGYXZpY29ucyhMZXhDb25maWcuY29uZmlnKTtcbiAgICAgIGZhdmljb25IdG1sID0gZ2VuZXJhdGVkRmF2aWNvbnM/Lmh0bWwgfHwgW107XG4gICAgfSxcbiAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyKSB7XG4gICAgICBzZXJ2ZXIubWlkZGxld2FyZXMudXNlKGFzeW5jIChyZXF1ZXN0LCByZXNwb25zZSwgbmV4dCkgPT4ge1xuICAgICAgICBpZighcmVxdWVzdC51cmwpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgZ2V0RGV2QXNzZXQoTGV4Q29uZmlnLmNvbmZpZywgcmVxdWVzdC51cmwpO1xuICAgICAgICBpZighYXNzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9IDIwMDtcbiAgICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCBjb250ZW50VHlwZXNbZXh0bmFtZShyZXF1ZXN0LnVybC5zcGxpdCgnPycpWzBdKV0gfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZW5kKGFzc2V0KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbmFtZTogJ2xleC1hc3NldHMtZGV2JyxcbiAgICB0cmFuc2Zvcm1JbmRleEh0bWwoaHRtbCkge1xuICAgICAgaWYoZmF2aWNvbkh0bWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBodG1sO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGh0bWwucmVwbGFjZSgnPC9oZWFkPicsIGAgICAgJHtmYXZpY29uSHRtbC5qb2luKCdcXG4gICAgJyl9XFxuICA8L2hlYWQ+YCk7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgYW5hbHl6ZXJQbHVnaW4gPSAoZW5hYmxlZDogYm9vbGVhbik6IFBsdWdpbiA9PiAoe1xuICBnZW5lcmF0ZUJ1bmRsZShfb3B0aW9ucywgYnVuZGxlKSB7XG4gICAgaWYoIWVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXBvcnQgPSBPYmplY3QuZW50cmllcyhidW5kbGUpLm1hcCgoW2ZpbGVOYW1lLCBvdXRwdXRdKSA9PiAoe1xuICAgICAgZmlsZU5hbWUsXG4gICAgICBzaXplOiBvdXRwdXQudHlwZSA9PT0gJ2Fzc2V0J1xuICAgICAgICA/IEJ1ZmZlci5ieXRlTGVuZ3RoKHR5cGVvZiBvdXRwdXQuc291cmNlID09PSAnc3RyaW5nJyA/IG91dHB1dC5zb3VyY2UgOiBvdXRwdXQuc291cmNlKVxuICAgICAgICA6IEJ1ZmZlci5ieXRlTGVuZ3RoKG91dHB1dC5jb2RlKSxcbiAgICAgIHR5cGU6IG91dHB1dC50eXBlXG4gICAgfSkpO1xuXG4gICAgdGhpcy5lbWl0RmlsZSh7ZmlsZU5hbWU6ICdidW5kbGUtcmVwb3J0Lmpzb24nLCBzb3VyY2U6IEpTT04uc3RyaW5naWZ5KHJlcG9ydCwgbnVsbCwgMiksIHR5cGU6ICdhc3NldCd9KTtcbiAgfSxcbiAgbmFtZTogJ2xleC1idW5kbGUtYW5hbHl6ZXInXG59KTtcblxuY29uc3QgZ2V0TGlicmFyeUZvcm1hdHMgPSAobGlicmFyeVRhcmdldD86IHN0cmluZyk6IEFycmF5PCdjanMnIHwgJ2VzJyB8ICdpaWZlJyB8ICd1bWQnPiA9PiB7XG4gIGlmKGxpYnJhcnlUYXJnZXQgPT09ICdjb21tb25qcycgfHwgbGlicmFyeVRhcmdldCA9PT0gJ2NvbW1vbmpzMicpIHtcbiAgICByZXR1cm4gWydjanMnXTtcbiAgfVxuICBpZihsaWJyYXJ5VGFyZ2V0ID09PSAndmFyJyB8fCBsaWJyYXJ5VGFyZ2V0ID09PSAnd2luZG93Jykge1xuICAgIHJldHVybiBbJ2lpZmUnXTtcbiAgfVxuICBpZihsaWJyYXJ5VGFyZ2V0ID09PSAndW1kJykge1xuICAgIHJldHVybiBbJ3VtZCddO1xuICB9XG4gIHJldHVybiBbJ2VzJ107XG59O1xuXG5jb25zdCBmaW5kTm9kZU1vZHVsZXNQYWNrYWdlID0gKHN0YXJ0UGF0aDogc3RyaW5nLCBwYWNrYWdlTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgbGV0IGN1cnJlbnRQYXRoID0gcmVzb2x2ZShzdGFydFBhdGgpO1xuXG4gIHdoaWxlKHRydWUpIHtcbiAgICBjb25zdCBjYW5kaWRhdGVQYXRoID0gcmVzb2x2ZShjdXJyZW50UGF0aCwgJ25vZGVfbW9kdWxlcycsIHBhY2thZ2VOYW1lKTtcbiAgICBpZihleGlzdHNTeW5jKGNhbmRpZGF0ZVBhdGgpKSB7XG4gICAgICByZXR1cm4gY2FuZGlkYXRlUGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRQYXRoID0gZGlybmFtZShjdXJyZW50UGF0aCk7XG4gICAgaWYocGFyZW50UGF0aCA9PT0gY3VycmVudFBhdGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGN1cnJlbnRQYXRoID0gcGFyZW50UGF0aDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVQcm9qZWN0UGFja2FnZSA9IChwYWNrYWdlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IGZpbmROb2RlTW9kdWxlc1BhY2thZ2UocHJvY2Vzcy5jd2QoKSwgcGFja2FnZU5hbWUpXG4gICAgfHwgZmluZE5vZGVNb2R1bGVzUGFja2FnZShMZXhDb25maWcuZ2V0TGV4RGlyKCksIHBhY2thZ2VOYW1lKVxuICAgIHx8IHJlc29sdmUoTGV4Q29uZmlnLmdldExleERpcigpLCAnbm9kZV9tb2R1bGVzJywgcGFja2FnZU5hbWUpO1xuXG5leHBvcnQgY29uc3QgZ2V0QnJvd3Nlckdsb2JhbEluamVjdE9wdGlvbnMgPSAoY29tbWFuZDogTGV4Vml0ZU9wdGlvbnNbJ2NvbW1hbmQnXSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+ICh7XG4gIC4uLihjb21tYW5kID09PSAnc2VydmUnID8gYnJvd3Nlckdsb2JhbE1vZHVsZXMgOiB7XG4gICAgQnVmZmVyOiBbcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdidWZmZXIvaW5kZXguanMnKSwgJ0J1ZmZlciddLFxuICAgIHByb2Nlc3M6IFtyZXNvbHZlUHJvamVjdFBhY2thZ2UoJ3Byb2Nlc3MvYnJvd3Nlci5qcycpLCAnZGVmYXVsdCddXG4gIH0pLFxuICBleGNsdWRlOiBicm93c2VyR2xvYmFsSW5qZWN0RXhjbHVkZXNcbn0pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTGV4Vml0ZUNvbmZpZyA9IChvcHRpb25zOiBMZXhWaXRlT3B0aW9ucyk6IElubGluZUNvbmZpZyA9PiB7XG4gIGNvbnN0IHtjb25maWd9ID0gTGV4Q29uZmlnO1xuICBjb25zdCBzb3VyY2VQYXRoID0gY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY29uZmlnLnNvdXJjZVBhdGggfHwgJy4vc3JjJyk7XG4gIGNvbnN0IG91dHB1dFBhdGggPSBjb25maWcub3V0cHV0RnVsbFBhdGggfHwgcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBjb25maWcub3V0cHV0UGF0aCB8fCAnLi9saWInKTtcbiAgY29uc3QgZW50cnlQYXRoID0gcmVzb2x2ZShzb3VyY2VQYXRoLCBvcHRpb25zLmVudHJ5IHx8IGNvbmZpZy5lbnRyeUpzIHx8ICdpbmRleC5qcycpO1xuICBjb25zdCBodG1sUGF0aCA9IHJlc29sdmUoc291cmNlUGF0aCwgY29uZmlnLmVudHJ5SFRNTCB8fCAnaW5kZXguaHRtbCcpO1xuICBjb25zdCBoYXNIdG1sRW50cnkgPSBleGlzdHNTeW5jKGh0bWxQYXRoKSAmJiAhb3B0aW9ucy5zc3I7XG4gIGNvbnN0IG91dHB1dEhhc2ggPSBjb25maWcub3V0cHV0SGFzaCB8fCBvcHRpb25zLm1vZGUgPT09ICdwcm9kdWN0aW9uJztcbiAgY29uc3QgZmlsZU5hbWUgPSBjb25maWcub3V0cHV0RmlsZSB8fCAob3V0cHV0SGFzaCA/ICdbbmFtZV0uW2hhc2hdLmpzJyA6ICdbbmFtZV0uanMnKTtcblxuICBjb25zdCB2aXRlQ29uZmlnOiBJbmxpbmVDb25maWcgPSB7XG4gICAgYXBwVHlwZTogaGFzSHRtbEVudHJ5ID8gJ3NwYScgOiAnY3VzdG9tJyxcbiAgICBiYXNlOiAnLycsXG4gICAgYnVpbGQ6IHtcbiAgICAgIGNzc0NvZGVTcGxpdDogdHJ1ZSxcbiAgICAgIGVtcHR5T3V0RGlyOiBmYWxzZSxcbiAgICAgIG1pbmlmeTogb3B0aW9ucy5tb2RlID09PSAncHJvZHVjdGlvbicsXG4gICAgICBvdXREaXI6IG91dHB1dFBhdGgsXG4gICAgICByb2xsZG93bk9wdGlvbnM6IHtcbiAgICAgICAgaW5wdXQ6IGhhc0h0bWxFbnRyeSA/IGh0bWxQYXRoIDogZW50cnlQYXRoLFxuICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICBhc3NldEZpbGVOYW1lczogb3V0cHV0SGFzaCA/ICdhc3NldHMvW25hbWVdLltoYXNoXVtleHRuYW1lXScgOiAnYXNzZXRzL1tuYW1lXVtleHRuYW1lXScsXG4gICAgICAgICAgY2h1bmtGaWxlTmFtZXM6IG91dHB1dEhhc2ggPyAnW25hbWVdLltoYXNoXS5jaHVuay5qcycgOiAnW25hbWVdLmNodW5rLmpzJyxcbiAgICAgICAgICBlbnRyeUZpbGVOYW1lczogZmlsZU5hbWUsXG4gICAgICAgICAgbWFudWFsQ2h1bmtzKGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJykgPyAndmVuZG9ycycgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc291cmNlbWFwOiAhIWNvbmZpZy5zd2M/LnNvdXJjZU1hcHMsXG4gICAgICBzc3I6IG9wdGlvbnMuc3NyID8gZW50cnlQYXRoIDogZmFsc2UsXG4gICAgICB0YXJnZXQ6IGNvbmZpZy5zd2M/LmpzYz8udGFyZ2V0Py50b1N0cmluZygpIHx8ICdlczIwMjAnXG4gICAgfSxcbiAgICBjbGVhclNjcmVlbjogZmFsc2UsXG4gICAgY29uZmlnRmlsZTogZmFsc2UsXG4gICAgY3NzOiB7XG4gICAgICBwb3N0Y3NzOiByZXNvbHZlKExleENvbmZpZy5nZXRMZXhEaXIoKSwgJ3Bvc3Rjc3MuY29uZmlnLmpzJylcbiAgICB9LFxuICAgIGRlZmluZToge1xuICAgICAgZ2xvYmFsOiAnZ2xvYmFsVGhpcycsXG4gICAgICAncHJvY2Vzcy5lbnYuTk9ERV9FTlYnOiBKU09OLnN0cmluZ2lmeShvcHRpb25zLm1vZGUgfHwgKG9wdGlvbnMuY29tbWFuZCA9PT0gJ2J1aWxkJyA/ICdwcm9kdWN0aW9uJyA6ICdkZXZlbG9wbWVudCcpKVxuICAgIH0sXG4gICAgZW52RGlyOiBwcm9jZXNzLmN3ZCgpLFxuICAgIGxvZ0xldmVsOiBvcHRpb25zLnF1aWV0ID8gJ3NpbGVudCcgOiAnaW5mbycsXG4gICAgbW9kZTogb3B0aW9ucy5tb2RlIHx8IChvcHRpb25zLmNvbW1hbmQgPT09ICdidWlsZCcgPyAncHJvZHVjdGlvbicgOiAnZGV2ZWxvcG1lbnQnKSxcbiAgICBvcHRpbWl6ZURlcHM6IG9wdGlvbnMuc3NyID8gdW5kZWZpbmVkIDoge1xuICAgICAgLi4uKG9wdGlvbnMuY29tbWFuZCA9PT0gJ3NlcnZlJyA/IHtmb3JjZTogdHJ1ZX0gOiB7fSksXG4gICAgICBpbmNsdWRlOiBbJ2J1ZmZlci9pbmRleC5qcycsICdwcm9jZXNzL2Jyb3dzZXIuanMnXVxuICAgIH0sXG4gICAgcGx1Z2luczogW1xuICAgICAgLi4uKG9wdGlvbnMuc3NyID8gW10gOiBbXG4gICAgICAgIGVtcHR5Q3J5cHRvUGx1Z2luKCksXG4gICAgICAgIG5vZGVQb2x5ZmlsbHNQbHVnaW4oKSxcbiAgICAgICAgY3JlYXRlSW5qZWN0UGx1Z2luKGdldEJyb3dzZXJHbG9iYWxJbmplY3RPcHRpb25zKG9wdGlvbnMuY29tbWFuZCkpXG4gICAgICBdKSxcbiAgICAgIHN3Y1BsdWdpbihzb3VyY2VQYXRoKSxcbiAgICAgIGdyYXBocWxQbHVnaW4oKSxcbiAgICAgIC4uLihvcHRpb25zLnNzciA/IFtdIDogW1xuICAgICAgICBpbXBvcnRNZXRhQ29tcGF0aWJpbGl0eVBsdWdpbihzb3VyY2VQYXRoKSxcbiAgICAgICAgYXNzZXRzRGV2UGx1Z2luKCksXG4gICAgICAgIGFuYWx5emVyUGx1Z2luKEJvb2xlYW4ob3B0aW9ucy5hbmFseXplKSlcbiAgICAgIF0pXG4gICAgXSxcbiAgICBwdWJsaWNEaXI6IGZhbHNlLFxuICAgIHJlc29sdmU6IHtcbiAgICAgIGFsaWFzOiB7XG4gICAgICAgIEJ1ZmZlcjogcmVzb2x2ZVByb2plY3RQYWNrYWdlKCdidWZmZXInKSxcbiAgICAgICAgJ2NvcmUtanMnOiByZXNvbHZlUHJvamVjdFBhY2thZ2UoJ2NvcmUtanMnKSxcbiAgICAgICAgZ2xvYmFsOiByZXNvbHZlUHJvamVjdFBhY2thZ2UoJ2dsb2JhbCcpLFxuICAgICAgICAnZ3JhcGhxbC10YWcnOiByZXNvbHZlUHJvamVjdFBhY2thZ2UoJ2dyYXBocWwtdGFnJyksXG4gICAgICAgIHJhbmRvbWJ5dGVzOiByZXNvbHZlUHJvamVjdFBhY2thZ2UoJ3JhbmRvbWJ5dGVzJyksXG4gICAgICAgIHJlYWN0OiByZXNvbHZlUHJvamVjdFBhY2thZ2UoJ3JlYWN0JyksXG4gICAgICAgICdyZWFjdC1kb20nOiByZXNvbHZlUHJvamVjdFBhY2thZ2UoJ3JlYWN0LWRvbScpLFxuICAgICAgICAncmVnZW5lcmF0b3ItcnVudGltZSc6IHJlc29sdmVQcm9qZWN0UGFja2FnZSgncmVnZW5lcmF0b3ItcnVudGltZScpXG4gICAgICB9LFxuICAgICAgZXh0ZW5zaW9uczogWycubWpzJywgJy5qcycsICcudHMnLCAnLnRzeCcsICcuanN4JywgJy5qc29uJywgJy5ncWwnLCAnLmdyYXBocWwnXSxcbiAgICAgIHByZXNlcnZlU3ltbGlua3M6IGZhbHNlLFxuICAgICAgdHNjb25maWdQYXRoczogdHJ1ZVxuICAgIH0sXG4gICAgcm9vdDogc291cmNlUGF0aCxcbiAgICBzZXJ2ZXI6IHtcbiAgICAgIGFsbG93ZWRIb3N0czogdHJ1ZSxcbiAgICAgIGhlYWRlcnM6IGRldmVsb3BtZW50Q2FjaGVIZWFkZXJzLFxuICAgICAgaG1yOiBmYWxzZSxcbiAgICAgIGhvc3Q6ICcwLjAuMC4wJyxcbiAgICAgIG9wZW46IG9wdGlvbnMub3BlbixcbiAgICAgIHBvcnQ6IG9wdGlvbnMucG9ydCxcbiAgICAgIHN0cmljdFBvcnQ6IHRydWVcbiAgICB9XG4gIH07XG5cbiAgaWYoIWhhc0h0bWxFbnRyeSAmJiBjb25maWcubGlicmFyeU5hbWUgJiYgIW9wdGlvbnMuc3NyKSB7XG4gICAgdml0ZUNvbmZpZy5idWlsZCA9IHtcbiAgICAgIC4uLnZpdGVDb25maWcuYnVpbGQsXG4gICAgICBsaWI6IHtcbiAgICAgICAgZW50cnk6IGVudHJ5UGF0aCxcbiAgICAgICAgZmlsZU5hbWU6ICgpID0+IGNvbmZpZy5vdXRwdXRGaWxlIHx8ICdpbmRleC5qcycsXG4gICAgICAgIGZvcm1hdHM6IGdldExpYnJhcnlGb3JtYXRzKGNvbmZpZy5saWJyYXJ5VGFyZ2V0KSxcbiAgICAgICAgbmFtZTogY29uZmlnLmxpYnJhcnlOYW1lXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBtZXJnZUNvbmZpZyh2aXRlQ29uZmlnLCBjb25maWcudml0ZSB8fCB7fSkgYXMgSW5saW5lQ29uZmlnO1xufTtcbiJdLCJuYW1lcyI6WyJpbmplY3QiLCJ0cmFuc2Zvcm0iLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwiZGlybmFtZSIsImV4dG5hbWUiLCJyZXNvbHZlIiwibWVyZ2VDb25maWciLCJMZXhDb25maWciLCJnZW5lcmF0ZUxleEZhdmljb25zIiwiZ2V0RGV2QXNzZXQiLCJjcmVhdGVJbmplY3RQbHVnaW4iLCJicm93c2VyR2xvYmFsTW9kdWxlcyIsIkJ1ZmZlciIsInByb2Nlc3MiLCJicm93c2VyR2xvYmFsSW5qZWN0RXhjbHVkZXMiLCJkZXZlbG9wbWVudENhY2hlSGVhZGVycyIsIkV4cGlyZXMiLCJQcmFnbWEiLCJjb250ZW50VHlwZXMiLCJlbXB0eUNyeXB0b1BsdWdpbiIsImxvYWQiLCJpZCIsIm5hbWUiLCJyZXNvbHZlSWQiLCJub2RlUG9seWZpbGxNb2R1bGVzIiwiYXNzZXJ0IiwiYnVmZmVyIiwiaHR0cCIsImh0dHBzIiwib3MiLCJwYXRoIiwic3RyZWFtIiwidXRpbCIsInZtIiwibm9kZVBvbHlmaWxsc1BsdWdpbiIsIm1vZHVsZU5hbWUiLCJzdGFydHNXaXRoIiwic2xpY2UiLCJyZXBsYWNlbWVudCIsInJlc29sdmVQcm9qZWN0UGFja2FnZSIsImdyYXBocWxQbHVnaW4iLCJ0ZXN0Iiwic291cmNlIiwiSlNPTiIsInN0cmluZ2lmeSIsInN3Y1BsdWdpbiIsInNvdXJjZVBhdGgiLCJlbmZvcmNlIiwiY2xlYW5JZCIsInNwbGl0Iiwic3djQ29uZmlnIiwiZ2V0U1dDQ29uZmlnV2l0aFJlYWN0Q29tcGlsZXIiLCJyZXN1bHQiLCJmaWxlbmFtZSIsIm1vZHVsZSIsInR5cGUiLCJzb3VyY2VNYXBzIiwibmVlZHNSZWFjdCIsImNvZGUiLCJtYXAiLCJpbXBvcnRNZXRhQ29tcGF0aWJpbGl0eVBsdWdpbiIsImluY2x1ZGVzIiwicmVwbGFjZUFsbCIsImFzc2V0c0RldlBsdWdpbiIsImZhdmljb25IdG1sIiwiYnVpbGRTdGFydCIsImdlbmVyYXRlZEZhdmljb25zIiwiY29uZmlnIiwiaHRtbCIsImNvbmZpZ3VyZVNlcnZlciIsInNlcnZlciIsIm1pZGRsZXdhcmVzIiwidXNlIiwicmVxdWVzdCIsInJlc3BvbnNlIiwibmV4dCIsInVybCIsImFzc2V0Iiwic3RhdHVzQ29kZSIsInNldEhlYWRlciIsImVuZCIsInRyYW5zZm9ybUluZGV4SHRtbCIsImxlbmd0aCIsInJlcGxhY2UiLCJqb2luIiwiYW5hbHl6ZXJQbHVnaW4iLCJlbmFibGVkIiwiZ2VuZXJhdGVCdW5kbGUiLCJfb3B0aW9ucyIsImJ1bmRsZSIsInJlcG9ydCIsIk9iamVjdCIsImVudHJpZXMiLCJmaWxlTmFtZSIsIm91dHB1dCIsInNpemUiLCJieXRlTGVuZ3RoIiwiZW1pdEZpbGUiLCJnZXRMaWJyYXJ5Rm9ybWF0cyIsImxpYnJhcnlUYXJnZXQiLCJmaW5kTm9kZU1vZHVsZXNQYWNrYWdlIiwic3RhcnRQYXRoIiwicGFja2FnZU5hbWUiLCJjdXJyZW50UGF0aCIsImNhbmRpZGF0ZVBhdGgiLCJwYXJlbnRQYXRoIiwidW5kZWZpbmVkIiwiY3dkIiwiZ2V0TGV4RGlyIiwiZ2V0QnJvd3Nlckdsb2JhbEluamVjdE9wdGlvbnMiLCJjb21tYW5kIiwiZXhjbHVkZSIsImNyZWF0ZUxleFZpdGVDb25maWciLCJvcHRpb25zIiwic291cmNlRnVsbFBhdGgiLCJvdXRwdXRQYXRoIiwib3V0cHV0RnVsbFBhdGgiLCJlbnRyeVBhdGgiLCJlbnRyeSIsImVudHJ5SnMiLCJodG1sUGF0aCIsImVudHJ5SFRNTCIsImhhc0h0bWxFbnRyeSIsInNzciIsIm91dHB1dEhhc2giLCJtb2RlIiwib3V0cHV0RmlsZSIsInZpdGVDb25maWciLCJhcHBUeXBlIiwiYmFzZSIsImJ1aWxkIiwiY3NzQ29kZVNwbGl0IiwiZW1wdHlPdXREaXIiLCJtaW5pZnkiLCJvdXREaXIiLCJyb2xsZG93bk9wdGlvbnMiLCJpbnB1dCIsImFzc2V0RmlsZU5hbWVzIiwiY2h1bmtGaWxlTmFtZXMiLCJlbnRyeUZpbGVOYW1lcyIsIm1hbnVhbENodW5rcyIsInNvdXJjZW1hcCIsInN3YyIsInRhcmdldCIsImpzYyIsInRvU3RyaW5nIiwiY2xlYXJTY3JlZW4iLCJjb25maWdGaWxlIiwiY3NzIiwicG9zdGNzcyIsImRlZmluZSIsImdsb2JhbCIsImVudkRpciIsImxvZ0xldmVsIiwicXVpZXQiLCJvcHRpbWl6ZURlcHMiLCJmb3JjZSIsImluY2x1ZGUiLCJwbHVnaW5zIiwiQm9vbGVhbiIsImFuYWx5emUiLCJwdWJsaWNEaXIiLCJhbGlhcyIsInJhbmRvbWJ5dGVzIiwicmVhY3QiLCJleHRlbnNpb25zIiwicHJlc2VydmVTeW1saW5rcyIsInRzY29uZmlnUGF0aHMiLCJyb290IiwiYWxsb3dlZEhvc3RzIiwiaGVhZGVycyIsImhtciIsImhvc3QiLCJvcGVuIiwicG9ydCIsInN0cmljdFBvcnQiLCJsaWJyYXJ5TmFtZSIsImxpYiIsImZvcm1hdHMiLCJ2aXRlIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxPQUFPQSxZQUFZLHdCQUF3QjtBQUMzQyxTQUFRQyxTQUFTLFFBQU8sWUFBWTtBQUNwQyxTQUFRQyxVQUFVLEVBQUVDLFlBQVksUUFBTyxLQUFLO0FBQzVDLFNBQVFDLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxPQUFPLFFBQU8sT0FBTztBQUMvQyxTQUFRQyxXQUFXLFFBQU8sT0FBTztBQUVqQyxTQUFRQyxTQUFTLFFBQU8scUJBQXFCO0FBQzdDLFNBQVFDLG1CQUFtQixFQUFFQyxXQUFXLFFBQU8sY0FBYztBQUk3RCxNQUFNQyxxQkFBcUJYO0FBRTNCLE9BQU8sTUFBTVksdUJBQXVCO0lBQ2xDQyxRQUFRO1FBQUM7UUFBbUI7S0FBUztJQUNyQ0MsU0FBUztRQUFDO1FBQXNCO0tBQVU7QUFDNUMsRUFBVztBQUVYLE1BQU1DLDhCQUE4QjtJQUNsQztJQUNBO0NBQ0Q7QUFFRCxNQUFNQywwQkFBMEI7SUFDOUIsaUJBQWlCO0lBQ2pCQyxTQUFTO0lBQ1RDLFFBQVE7QUFDVjtBQWFBLE1BQU1DLGVBQXVDO0lBQzNDLFFBQVE7SUFDUixRQUFRO0lBQ1IsU0FBUztJQUNULFFBQVE7SUFDUixTQUFTO0lBQ1QsUUFBUTtJQUNSLFNBQVM7SUFDVCxRQUFRO0lBQ1IsUUFBUTtJQUNSLFFBQVE7SUFDUixRQUFRO0lBQ1Is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