yds-tool 1.0.6 → 1.0.8

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.
Files changed (3) hide show
  1. package/bin/main.js +20 -11
  2. package/package.json +1 -1
  3. package/src/main.ts +19 -10
package/bin/main.js CHANGED
@@ -143,7 +143,8 @@ class Main {
143
143
  }
144
144
  const gitExists = yield vweb_core_1.util.cmd.exists('git');
145
145
  logger.info(`检查是否安装了git >> ${gitExists ? '已安装' : '未安装'}`);
146
- if (!gitExists && !fs.existsSync(`${dir}/git-for-windows`)) {
146
+ const gitHome = `${dir}/git-for-windows`;
147
+ if (!gitExists && !fs.existsSync(gitHome)) {
147
148
  const gitZipName = 'git-for-windows.zip';
148
149
  logger.info(`下载git 安装包 ${gitZipName}`);
149
150
  const gitZipFile = `${dir}/${gitZipName}`;
@@ -154,6 +155,8 @@ class Main {
154
155
  yield execCmd(`${wget} ${RS_URL}/${gitZipName} -O "${gitZipFile}"`);
155
156
  logger.info(`解压安装包 ${gitZipFile}`);
156
157
  yield execCmd(`"${unzip}" "${gitZipFile}" -d "${dir}"`);
158
+ logger.info(`配置git环境变量`);
159
+ yield execCmd(`setx PATH "%PATH%;${gitHome}\\bin;"`);
157
160
  fs.rmSync(gitZipFile);
158
161
  logger.info(`git 安装完成`);
159
162
  }
@@ -199,7 +202,7 @@ class Main {
199
202
  }
200
203
  }
201
204
  const mavenHome = `${dir}/maven-3.8.6`;
202
- const mavenExists = vweb_core_1.util.cmd.exists('mvn');
205
+ const mavenExists = yield vweb_core_1.util.cmd.exists('mvn');
203
206
  logger.info(`检查是否安装了maven >> ${mavenExists ? '已安装' : '未安装'}`);
204
207
  if (!mavenExists) {
205
208
  const mavenZipName = 'maven-3.8.6.zip';
@@ -224,7 +227,7 @@ class Main {
224
227
  logger.info(`maven 安装完成`);
225
228
  }
226
229
  logger.info(`初始化node环境`);
227
- yield execCmd('npm install -g pnpm typescript --registry=https://registry.npmmirror.com');
230
+ yield execCmd('npm install -g typescript --registry=https://registry.npmmirror.com');
228
231
  logger.info(`初始化node环境完成`);
229
232
  logger.info(`检测code是否存在`);
230
233
  const codeDir = `${dir}/yds-1.0.3`;
@@ -274,7 +277,10 @@ class Main {
274
277
  logger.info(`配置文件yds.json已经生成,请使用编辑器对配置内容进行修改`);
275
278
  }
276
279
  logger.info(`初始化YDS制盘环境完成,如果是首次执行请关闭当前窗口,并重新打开`);
277
- })).hook('postAction', () => process.exit(0));
280
+ })).hook('postAction', () => {
281
+ logger.info(`如果执行过程中出现报错请关闭当前终端,重启终端后执行 yds init 直到无报错内容为止`);
282
+ process.exit(0);
283
+ });
278
284
  commander_1.program
279
285
  .command('start <catalog> [workdir]')
280
286
  .usage('start <catalog> [workdir]')
@@ -311,14 +317,17 @@ class Main {
311
317
  }
312
318
  let settingXml = path.resolve(`${dir}/settings.xml`);
313
319
  let mvnCmd = 'mvn';
314
- if (!fs.existsSync(settingXml)) {
315
- let mavenHome = `${dir}/maven-3.8.6`;
320
+ let mvnExists = yield vweb_core_1.util.cmd.exists(mvnCmd);
321
+ let mavenHome = `${dir}/maven-3.8.6`;
322
+ if (!fs.existsSync(mavenHome)) {
323
+ if (!fs.existsSync(settingXml)) {
324
+ logger.warn(`未找到maven配置文件 ${settingXml}, 下载settings.xml文件`);
325
+ yield execCmd(`${wget} ${RS_URL}/settings.xml`, dir);
326
+ }
327
+ }
328
+ else {
316
329
  mvnCmd = `"${mavenHome}/bin/mvn.cmd"`;
317
330
  settingXml = `${mavenHome}/conf/settings.xml`;
318
- if (!fs.existsSync(mvnCmd)) {
319
- logger.error(`未找到mvn命令 ${mvnCmd}, 请先执行 init 初始化制盘环境`);
320
- process.exit(1);
321
- }
322
331
  }
323
332
  let idePath = `${dir}/yds-1.0.3`;
324
333
  if (!fs.existsSync(idePath)) {
@@ -505,4 +514,4 @@ class Main {
505
514
  }
506
515
  }
507
516
  exports.default = Main;
508
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQWtDO0FBQ2xDLGlEQUFtQztBQUNuQyx5Q0FBOEM7QUFDOUMsZ0RBQWtDO0FBQ2xDLGtFQUFvRDtBQUNwRCw0Q0FBOEI7QUFDOUIsNENBQThCO0FBQzlCLG1DQUFpQztBQUVqQyxNQUFNLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQztBQUMxQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUN2QyxNQUFNLE1BQU0sR0FBRyw2QkFBNkIsQ0FBQztBQUU3QyxNQUFNLE1BQU0sR0FBVyx5QkFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV0RCxNQUFNLEdBQUcscUJBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FDakIsQ0FBQTtBQUVELE1BQU0sT0FBTyxHQUFHLENBQU8sT0FBZSxFQUFFLEdBQVksRUFBRSxFQUFFO0lBQ3BELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNELElBQUksS0FBSyxHQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN4QixhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUM1QixHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU87UUFDdEIsT0FBTyxFQUFFLENBQUM7UUFDVixLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHO0tBQ04sQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLE9BQU8saUJBQWlCLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FB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RSxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDbEMsQ0FBQztpQkFBTSxDQUFDO2dCQUVKLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7Z0JBQzNCLElBQUksVUFBVSxHQUFHLEdBQUcsU0FBUyxVQUFVLENBQUM7Z0JBQ3hDLE1BQU0sT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLE1BQU0sZ0JBQWdCLFVBQVUsR0FBRyxDQUFDLENBQUM7Z0JBRTlELE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxVQUFVLEVBQUUsQ0FBQyxDQUFBO2dCQUNwQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxVQUFVLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDdkQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUN6QixDQUFDO1lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyQixNQUFNLE9BQU8sQ0FBQyxJQUFJLE9BQU8sb0RBQW9ELE9BQU8sNkNBQTZDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFFL0ksTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUN2RCxNQUFNLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqRCxtQkFBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDL0IsQ0FBQztDQUNKO0FBOWNELHVCQThjQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cHJvZ3JhbX0gZnJvbSBcImNvbW1hbmRlclwiO1xyXG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gXCJwcm9jZXNzXCI7XHJcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeSwgdXRpbH0gZnJvbSBcInZ3ZWItY29yZVwiO1xyXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcclxuaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XHJcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzXCI7XHJcbmltcG9ydCAqIGFzIG9zIGZyb20gJ25vZGU6b3MnO1xyXG5pbXBvcnQge3JhbmRvbVVVSUR9IGZyb20gJ2NyeXB0bydcclxuXHJcbmNvbnN0IGRvbWFpbktleSA9ICdwLWhjYy1pMDAwLXAwMGEtaHJjcGUnO1xyXG5jb25zdCBwa2cgPSByZXF1aXJlKCcuLi9wYWNrYWdlLmpzb24nKTtcclxuY29uc3QgUlNfVVJMID0gJ2h0dHBzOi8vZGZzLnpoaXBlci5jb20vdjNyNic7XHJcblxyXG5jb25zdCBsb2dnZXI6IExvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdZRFMnKTtcclxuXHJcbmNvbnN0IGVudiA9IHtcclxuICAgIC4uLnByb2Nlc3MuZW52XHJcbn1cclxuXHJcbmNvbnN0IGV4ZWNDbWQgPSBhc3luYyAoY29tbWFuZDogc3RyaW5nLCBjd2Q/OiBzdHJpbmcpID0+IHtcclxuICAgIGxvZ2dlci5pbmZvKGDmiafooYzlkb3ku6QgJHtjb21tYW5kfSAke2N3ZCA/IGDvvIzmiafooYznm67lvZXkuLoke2N3ZH1gIDonJ31gKTtcclxuICAgIGxldCBzdGFydCAgPSBEYXRlLm5vdygpO1xyXG4gICAgY2hpbGRfcHJvY2Vzcy5leGVjU3luYyhjb21tYW5kLCB7XHJcbiAgICAgICAgY3dkLCBlbmNvZGluZzogJ3V0Zi04JyxcclxuICAgICAgICB0aW1lb3V0OiAwLCAvLyDorr7kuLrkuI3ov4fmnJ/vvIzkuIvovb3pgJ/luqbov4fmhaLkvJrlr7zoh7TotoXml7ZcclxuICAgICAgICBzdGRpbzogWzAsIDEsIDJdLFxyXG4gICAgICAgIGVudlxyXG4gICAgfSk7XHJcbiAgICBsb2dnZXIuaW5mbyhg5omn6KGM5ZG95LukICR7Y29tbWFuZH0g6ICX5pe2IFxceDFCWzM0bSA8JHtEYXRlLm5vdygpIC0gc3RhcnR9bXM+XWApXHJcbn1cclxuXHJcbmNvbnN0IHBsYXRmb3JtID0gb3MucGxhdGZvcm0oKVxyXG5pZiAocGxhdGZvcm0gIT09ICd3aW4zMicpIHtcclxuICAgIGxvZ2dlci5lcnJvcign5b2T5YmN5bel5YW35LuF5pSv5oyBd2luZG93c+ezu+e7nycpO1xyXG4gICAgcHJvY2Vzcy5leGl0KDEpO1xyXG59XHJcblxyXG5jb25zdCBpc0FkbWluID0gKCkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICAvLyDlsJ3or5XmiafooYzkuIDkuKrlj6rmnInnrqHnkIblkZjmiY3og73ov5DooYznmoTlkb3ku6RcclxuICAgICAgICAvLyDkvb/nlKggPm51bCAyPiYxIOadpeaKkeWItui+k+WHulxyXG4gICAgICAgIGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMoJ25ldCBzZXNzaW9uID5udWwgMj4mMScpO1xyXG4gICAgICAgIHJldHVybiB0cnVlOyAvLyDmiJDlip/miafooYxcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8g5omn6KGM5aSx6LSl77yM5p2D6ZmQ5LiN6LazXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCB3Z2V0ID0gcGF0aC5qb2luKF9fZGlybmFtZSAsJy4uL3dnZXQuZXhlJyk7XHJcbmxldCB6aXAgPSBwYXRoLmpvaW4oX19kaXJuYW1lICwnLi4vemlwLmV4ZScpO1xyXG5sZXQgdW56aXAgPSBwYXRoLmpvaW4oX19kaXJuYW1lICwnLi4vdW56aXAuZXhlJyk7XHJcblxyXG5wcm9ncmFtLm5hbWUoXCJ5ZHNcIilcclxuICAgIC51c2FnZShcIltjb21tYW5kXSBbb3B0aW9uc11cIilcclxuICAgIC5kZXNjcmlwdGlvbihcInlkcyDliLbnm5jlt6Xlhbcg5aaC5p6c5ZG95Luk5Y+C5pWw5Lit5a2Y5Zyo56m65qC8IOS9v+eUqOWPjOW8leWPt1xcXCJcXFwi5YyF6KO5XCIpXHJcbiAgICAudmVyc2lvbihgeWRzICR7cGtnLnZlcnNpb259YCk7XHJcblxyXG50eXBlIE1pY3JvU2VydmljZSA9ICdocmNwZScgfCAnZmVjb2RlJztcclxuXHJcbnR5cGUgR2l0ID0ge1xyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBicmFuY2g6IHN0cmluZ1xyXG59XHJcblxyXG50eXBlIFlkc0NvbmZpZyA9IHtcclxuICAgIGhvc3RzOiBBcnJheTxzdHJpbmc+O1xyXG4gICAgZ2l0OiBSZWNvcmQ8TWljcm9TZXJ2aWNlLCBzdHJpbmc+O1xyXG4gICAgY2F0YWxvZ3M6IHtcclxuICAgICAgICBbY2F0YWxvZzogc3RyaW5nXTogUmVjb3JkPE1pY3JvU2VydmljZSwgc3RyaW5nIHwgR2l0PlxyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBjb25mRWcgPSBge1xyXG4gICAgaG9zdHM/OiBBcnJheTxzdHJpbmc+O1xyXG4gICAgZ2l0OiBSZWNvcmQ8J2hyY3BlJyB8ICdmZWNvZGUnLCBzdHJpbmc+O1xyXG4gICAgY2F0YWxvZ3M6IHtcclxuICAgICAgICBbY2F0YWxvZzogc3RyaW5nXTogUmVjb3JkPCdocmNwZScgfCAnZmVjb2RlJywgc3RyaW5nIHwgeyB1cmw6IHN0cmluZywgYnJhbmNoOiBzdHJpbmcgfT5cclxuICAgIH1cclxufWBcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haW4ge1xyXG5cclxuICAgIHN0YXJ0dXAoKSB7XHJcbiAgICAgICAgcHJvZ3JhbVxyXG4gICAgICAgICAgICAuY29tbWFuZCgnY2xlYW4gW3dvcmtkaXJdJylcclxuICAgICAgICAgICAgLnVzYWdlKCdjbGVhbiBbd29ya2Rpcl0nKVxyXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oJ+a4heeQhuWItuebmOW3peS9nOebruW9lSwgd29ya2RpcuihqOekuuWItuebmOW3peS9nOebruW9le+8jOWmguaenOS4jeaMh+WumuWImeS9v+eUqOW9k+WJjeebruW9lScpXHJcbiAgICAgICAgICAgIC5hY3Rpb24oYXN5bmMgKHdvcmtkaXI6IHN0cmluZyA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpKSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlyID0gcGF0aC5yZXNvbHZlKHdvcmtkaXIpO1xyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOa4heeQhuWItuebmOW3peS9nOebruW9lSAke2Rpcn1gKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGZpbGUgb2YgZnMucmVhZGRpclN5bmMoZGlyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWxlU3RhdCA9IGZzLnN0YXRTeW5jKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZzLnJtU3luYyhmaWxlLCB7cmVjdXJzaXZlOiBmaWxlU3RhdC5pc0RpcmVjdG9yeSgpfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5Yi255uY5bel5L2c55uu5b2V5riF55CG5a6M5oiQYCk7XHJcbiAgICAgICAgICAgIH0pLmhvb2soJ3Bvc3RBY3Rpb24nLCAoKSA9PiBwcm9jZXNzLmV4aXQoMCkpO1xyXG5cclxuICAgICAgICBwcm9ncmFtXHJcbiAgICAgICAgICAgIC5jb21tYW5kKCdpbml0IFt3b3JrZGlyXScpXHJcbiAgICAgICAgICAgIC51c2FnZSgnaW5pdCBbd29ya2Rpcl0nKVxyXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oJ+WIneWni+WMlllEU+WItuebmOeOr+Wigywgd29ya2RpcuihqOekuuWItuebmOW3peS9nOebruW9le+8jOWmguaenOS4jeaMh+WumuWImeS9v+eUqOW9k+WJjeebruW9lScpXHJcbiAgICAgICAgICAgIC5hY3Rpb24oYXN5bmMgKHdvcmtkaXI6IHN0cmluZyA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpKSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlyID0gcGF0aC5yZXNvbHZlKHdvcmtkaXIpO1xyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOWIneWni+WMlllEU+WItuebmOeOr+WigyDlt6XkvZznm67lvZXvvJoke2Rpcn1gKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY29uZmlnRmlsZSA9IHBhdGgucmVzb2x2ZShkaXIsICd5ZHMuanNvbicpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbmZpZ0ZpbGVDcmVhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg55Sf5oiQ6YWN572u5paH5Lu2IHlkcy5qc29uYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhjb25maWdGaWxlLCBgI+ivt+agueaNruivtOaYjuS/ruaUuemFjee9ruaWh+S7tuW5tuWIoOmZpOaJgOacieazqOmHiuivtOaYjuWQjuS/neWtmFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJob3N0c1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIuWmguaenOS9v+eUqOS6hnlkcy5iYXTliJ3lp4vnjq/looPvvIzlt7Lnu4/mt7vliqDkuoYgMTkyLjE2OC41MC40MCByZXBvLnl5cmQuY29tIDE5Mi4xNjguNTAuNDEgYmlwNS56aGlwZXIuY29tIDE5Mi4xNjguNTAuNDIgYmlwMy56aGlwZXIuY29tIGhvc3Rz6YWN572u6aG55Y+v5Lul5Yig6ZmkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hdmVu5LuT5bqT56eB5pyN5a+55bqU55qEaG9zdOaYoOWwhFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpc3blvIDlj5Hnjq/looPlr7nlupTnmoRob3N05pig5bCEXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJnaXRcIjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJocmNwZVwiOiBcIuWQjuerr+acjeWKoeWvueW6lOeahGdpdOWcsOWdgFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmZWNvZGVcIjogXCLmiqXlkYrmnI3liqHlr7nlupRnaXTlnLDlnYBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNhdGFsb2dzXCI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg5a6i5oi35Luj56CB77yM55So5LqO5ZCv5Yqo5ZG95Luk55qEY2F0YWxvZ+WPguaVsFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZWVyXCI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhyY3BlXCI6IFwi5ZCO56uv5pyN5Yqh5YiG5pSvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmZWNvZGVcIjogXCLmiqXlkYrmnI3liqHliIbmlK9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGVDcmVhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBnaXRFeGlzdHMgPSBhd2FpdCB1dGlsLmNtZC5leGlzdHMoJ2dpdCcpO1xyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOajgOafpeaYr+WQpuWuieijheS6hmdpdCA+PiAke2dpdEV4aXN0cyA/ICflt7Llronoo4UnIDogJ+acquWuieijhSd9YCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdpdEV4aXN0cyAmJiAhZnMuZXhpc3RzU3luYyhgJHtkaXJ9L2dpdC1mb3Itd2luZG93c2ApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2l0WmlwTmFtZSA9ICdnaXQtZm9yLXdpbmRvd3MuemlwJ1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDkuIvovb1naXQg5a6J6KOF5YyFICR7Z2l0WmlwTmFtZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBnaXRaaXBGaWxlID0gYCR7ZGlyfS8ke2dpdFppcE5hbWV9YDtcclxuICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XmmK/lkKblt7Lnu4/lrZjlnKjlronoo4XljIUg5aaC5p6c5pyJ5YWI5Yig6ZmkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZ2l0WmlwRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOWIoOmZpOW3suWtmOWcqOWuieijheWMhSAke2dpdFppcEZpbGV9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZzLnJtU3luYyhnaXRaaXBGaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5LiL6L295a6J6KOF5YyF5bm26L6T5Ye65pel5b+XXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgJHt3Z2V0fSAke1JTX1VSTH0vJHtnaXRaaXBOYW1lfSAtTyBcIiR7Z2l0WmlwRmlsZX1cImApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDop6Pljovlronoo4XljIUgJHtnaXRaaXBGaWxlfWApXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgXCIke3VuemlwfVwiIFwiJHtnaXRaaXBGaWxlfVwiIC1kIFwiJHtkaXJ9XCJgKTtcclxuICAgICAgICAgICAgICAgICAgICBmcy5ybVN5bmMoZ2l0WmlwRmlsZSlcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgZ2l0IOWuieijheWujOaIkGApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGphdmFFeGlzdHMgPSBhd2FpdCB1dGlsLmNtZC5leGlzdHMoJ2phdmEnKTtcclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDmo4Dmn6XmmK/lkKblronoo4XkuoZqYXZhID4+ICR7amF2YUV4aXN0cyA/ICflt7Llronoo4UnIDogJ+acquWuieijhSd9YCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWphdmFFeGlzdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygn5pyq5om+5YiwamF2Ye+8jOWHhuWkh+WuieijhWphdmHvvIzlvIDlp4vkuIvovb1qZGsnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqZGtaaXBOYW1lID0gJ2pkay0xMS4wLjE1LjFfd2luZG93cy14NjRfYmluLnppcCdcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGAke3dnZXR9ICR7UlNfVVJMfS8ke2pka1ppcE5hbWV9IC1PIFwiJHtkaXJ9LyR7amRrWmlwTmFtZX1cImApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDop6PljotqZGsg5a6J6KOF5YyFICR7ZGlyfS8ke2pka1ppcE5hbWV9YClcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGBcIiR7dW56aXB9XCIgXCIke2Rpcn0vJHtqZGtaaXBOYW1lfVwiYCwgZGlyKTtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg6YWN572uamF2YeeOr+Wig+WPmOmHj2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqYXZhSG9tZSA9IGAke2Rpcn0vamRrLTExLjAuMTUuMWA7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgc2V0eCBKQVZBX0hPTUUgXCIke2phdmFIb21lfVwiYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgc2V0eCBDTEFTU19QQVRIIFwiLjslSkFWQV9IT01FJVxcXFxsaWI7XCJgKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKCBgc2V0eCBQQVRIIFwiJVBBVEglOyVKQVZBX0hPTUUlXFxcXGJpbjtcImAgKTtcclxuICAgICAgICAgICAgICAgICAgICBlbnYuSkFWQV9IT01FID0gamF2YUhvbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZW52LkNMQVNTX1BBVEggPSBcIi47JUpBVkFfSE9NRSVcXFxcbGliO1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIGVudi5QQVRIID0gXCIlUEFUSCU7JUpBVkFfSE9NRSVcXFxcYmluO1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBqYXZhIOWuieijheWujOaIkCDor7fph43lkK/nu4jnq69gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5qOA5p+lamF2YeeJiOacrGApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgamF2YUhvbWUgPSBlbnYuSkFWQV9IT01FO1xyXG5cclxuICAgICAgICAgICAgICAgIGF3YWl0IGV4ZWNDbWQoYFwiJHtqYXZhSG9tZX0vYmluL2phdmFcIiAtdmVyc2lvbmApO1xyXG4gICAgICAgICAgICAgICAgLy8g5a+85YWl6K+B5Lmm5YiwamF2YSDlpoLmnpxqYXZh5pivMS4454mI5pysIOmcgOimgeWvvOWFpeWIsCBKQVZBX0hPTUUvanJlL2xpYi9zZWN1cml0eS9jYWNlcnRzIOWmguaenOaYrzEx54mI5pysIOmcgOimgeWvvOWFpeWIsCBKQVZBX0hPTUUvbGliL3NlY3VyaXR5L2NhY2VydHNcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoamF2YUhvbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2VydHNGaWxlbmFtZSA9ICdsaWIvc2VjdXJpdHkvY2FjZXJ0cyc7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNlcnRzRmlsZSA9IGAke2phdmFIb21lfS8ke2NlcnRzRmlsZW5hbWV9YDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY2VydHNGaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjZXJ0c0ZpbGUgPSBgJHtqYXZhSG9tZX0vanJlLyR7Y2VydHNGaWxlbmFtZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5qOA5p+lamF2YeivgeS5puebruW9lSAke2NlcnRzRmlsZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhjZXJ0c0ZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXRvb2xDbWQgPSBgXCIke2phdmFIb21lfS9iaW4va2V5dG9vbFwiYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Yik5pat6K+B5Lmm5piv5ZCm5bey57uP5a+85YWlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGAke2tleXRvb2xDbWR9IC1saXN0IC12IC1rZXlzdG9yZSBcIiR7Y2VydHNGaWxlfVwiIC1zdG9yZXBhc3MgY2hhbmdlaXQgLS1hbGlhcyB5eXJkYClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGB5eXJkLmNydCDor4Hkuablt7LlrZjlnKhgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6K+B5Lmm5LiN5a2Y5ZyoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5a+85YWlIHl5cmQuY3J0IOivgeS5puWIsGphdmEgJHtjZXJ0c0ZpbGV9YCk7IC8vICR7ZGlyfS95eXJkLmNydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgJHtrZXl0b29sQ21kfSAtaW1wb3J0Y2VydCAtZmlsZSBcIiR7cGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL3l5cmQuY3J0Jyl9XCIgLWtleXN0b3JlIFwiJHtjZXJ0c0ZpbGV9XCIgLXN0b3JlcGFzcyBjaGFuZ2VpdCAtbm9wcm9tcHQgLS1hbGlhcyB5eXJkYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgeXlyZC5jcnQg6K+B5Lmm5a+85YWl5a6M5oiQYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF2ZW5Ib21lID0gYCR7ZGlyfS9tYXZlbi0zLjguNmA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXZlbkV4aXN0cyA9IHV0aWwuY21kLmV4aXN0cygnbXZuJyk7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5qOA5p+l5piv5ZCm5a6J6KOF5LqGbWF2ZW4gPj4gJHttYXZlbkV4aXN0cyA/ICflt7Llronoo4UnIDogJ+acquWuieijhSd9YCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdmVuRXhpc3RzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF2ZW5aaXBOYW1lID0gJ21hdmVuLTMuOC42LnppcCdcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5LiL6L29bWF2ZW4g5a6J6KOF5YyFICR7bWF2ZW5aaXBOYW1lfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdmVuWmlwRmlsZSA9IGAke2Rpcn0vJHttYXZlblppcE5hbWV9YDtcclxuICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XmmK/lkKblt7Lnu4/lrZjlnKjlronoo4XljIUg5aaC5p6c5pyJ5YWI5Yig6ZmkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMobWF2ZW5aaXBGaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5Yig6Zmk5bey5a2Y5Zyo5a6J6KOF5YyFICR7bWF2ZW5aaXBGaWxlfWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcy5ybVN5bmMobWF2ZW5aaXBGaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5LiL6L295a6J6KOF5YyF5bm26L6T5Ye65pel5b+XXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgJHt3Z2V0fSAke1JTX1VSTH0vJHttYXZlblppcE5hbWV9IC1PIFwiJHttYXZlblppcEZpbGV9XCJgKTtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg6Kej5Y6L5a6J6KOF5YyFICR7bWF2ZW5aaXBGaWxlfWApXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgXCIke3VuemlwfVwiIFwiJHttYXZlblppcEZpbGV9XCIgLWQgXCIke2Rpcn1cImApO1xyXG4gICAgICAgICAgICAgICAgICAgIGZzLnJtU3luYyhtYXZlblppcEZpbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmt7vliqBtYXZlbiDnjq/looPlj5jph49cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXaW5kb3dz5qC45b+D5ZG95Luk77ya5rC45LmF6L+95Yqg6Lev5b6E5Yiw44CQ55So5oi3546v5aKD5Y+Y6YePUEFUSOOAke+8jOawuOS5heeUn+aViFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXZuUGF0aCA9IHBhdGgucmVzb2x2ZShgJHttYXZlbkhvbWV9L2JpbmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKCBgc2V0eCBQQVRIIFwiJVBBVEglOyR7bXZuUGF0aH1cImAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOKchSDmiJDlip/vvIFNYXZlbui3r+W+hOOAkCR7bXZuUGF0aH3jgJHlt7Lmt7vliqDliLDns7vnu59QQVRI546v5aKD5Y+Y6YePYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCDmt7vliqDlpLHotKXvvJonLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgbWF2ZW4g5a6J6KOF5a6M5oiQYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOWIneWni+WMlm5vZGXnjq/looNgKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGV4ZWNDbWQoJ25wbSBpbnN0YWxsIC1nIHBucG0gdHlwZXNjcmlwdCAtLXJlZ2lzdHJ5PWh0dHBzOi8vcmVnaXN0cnkubnBtbWlycm9yLmNvbScpO1xyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOWIneWni+WMlm5vZGXnjq/looPlrozmiJBgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5qOA5rWLY29kZeaYr+WQpuWtmOWcqGApXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2RlRGlyID0gYCR7ZGlyfS95ZHMtMS4wLjNgO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvZGVEaXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29kZVppcE5hbWUgPSAneWRzLTEuMC4zLWpkay04LXdpbmRvd3MteDg2XzY0LnppcCdcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5LiL6L29Y29kZSBJREUg5a6J6KOF5YyFICR7Y29kZVppcE5hbWV9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29kZVppcEZpbGUgPSBgJHtkaXJ9LyR7Y29kZVppcE5hbWV9YDtcclxuICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XmmK/lkKblt7Lnu4/lrZjlnKjlronoo4XljIUg5aaC5p6c5pyJ5YWI5Yig6ZmkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoY29kZVppcEZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDliKDpmaTlt7LlrZjlnKjlronoo4XljIUgJHtjb2RlWmlwRmlsZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnMucm1TeW5jKGNvZGVaaXBGaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5LiL6L295a6J6KOF5YyF5bm26L6T5Ye65pel5b+XXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgJHt3Z2V0fSBodHRwczovL3lvbmNvbW11bml0eS55b255b3VjbG91ZC5jb20vWURTRG93bmxvYWQvV2luZG93L3g2NC8ke2NvZGVaaXBOYW1lfSAtTyBcIiR7Y29kZVppcEZpbGV9XCJgKTtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg6Kej5Y6L5a6J6KOF5YyFICR7Y29kZVppcEZpbGV9YClcclxuICAgICAgICAgICAgICAgICAgICBmcy5ta2RpclN5bmMoY29kZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgXCIke3VuemlwfVwiIFwiJHtjb2RlWmlwRmlsZX1cIiAtZCBcIiR7Y29kZURpcn1cImApO1xyXG4gICAgICAgICAgICAgICAgICAgIGZzLnJtU3luYyhjb2RlWmlwRmlsZSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCA1MDAwKSlcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgY29kZSBJREUg5a6J6KOF5a6M5oiQYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5Yid5aeL5YyWWURTIElERSDlhajlsYDphY3nva5gKVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3NKc29uID0gYCR7Y29kZURpcn0vQ29kZS9kYXRhL3VzZXItZGF0YS9Vc2VyL3NldHRpbmdzLmpzb25gO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNldHRpbmdzSnNvbk9iaiA9IHt9O1xyXG4gICAgICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc2V0dGluZ3NKc29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzSnNvbk9iaiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHNldHRpbmdzSnNvbikudG9TdHJpbmcoJ3V0Zi04JykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IHNldHRpbmdYbWwgPSBwYXRoLnJlc29sdmUoYCR7bWF2ZW5Ib21lfS9jb25mL3NldHRpbmdzLnhtbGApO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHNldHRpbmdYbWwpICYmICFmcy5leGlzdHNTeW5jKGAke2Rpcn0vc2V0dGluZ3MueG1sYCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGAke3dnZXR9ICR7UlNfVVJMfS9zZXR0aW5ncy54bWxgKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5nWG1sID0gcGF0aC5yZXNvbHZlKGAke2Rpcn0vc2V0dGluZ3MueG1sYClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHNldHRpbmdzSnNvbk9ialtcImphdmEuY29uZmlndXJhdGlvbi5tYXZlbi5nbG9iYWxTZXR0aW5nc1wiXSA9IHNldHRpbmdYbWw7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0pzb25PYmpbXCJqYXZhLmNvbmZpZ3VyYXRpb24ubWF2ZW4udXNlclNldHRpbmdzXCJdID0gc2V0dGluZ1htbDtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzSnNvbk9ialtcIm1hdmVuLnNldHRpbmdzRmlsZVwiXSA9IHNldHRpbmdYbWw7XHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHNldHRpbmdzSnNvbiwgSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3NKc29uT2JqLCBudWxsLCA0KSk7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5Yid5aeL5YyWWURTIElERSDlhajlsYDphY3nva7lrozmiJBgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyDmo4Dmn6XlvZPliY3nlKjmiLfnm67lvZXkuIsuc3No5piv5ZCm5a2Y5ZyoIGlkX2VkMjU1MTkucHViIOWvhumSpeaWh+S7tu+8jOWmguaenOayoeacieWImeaUvuWIsC5zc2gg55uu5b2V5LiLXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzc2hEaXIgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuVVNFUlBST0ZJTEUsICcuc3NoJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoc3NoRGlyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZzLm1rZGlyU3luYyhzc2hEaXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGAke3NzaERpcn0vaWRfZWQyNTUxOS5wdWJgKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDmi7fotJ3lr4bpkqXmlofku7ZgKTtcclxuICAgICAgICAgICAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2lkX2VkMjU1MTkucHViJyksIGAke3NzaERpcn0vaWRfZWQyNTUxOS5wdWJgKTtcclxuICAgICAgICAgICAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2lkX2VkMjU1MTknKSwgYCR7c3NoRGlyfS9pZF9lZDI1NTE5YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOaLt+i0neWvhumSpeaWh+S7tuWujOaIkGApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjb25maWdGaWxlQ3JlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDphY3nva7mlofku7Z5ZHMuanNvbuW3sue7j+eUn+aIkO+8jOivt+S9v+eUqOe8lui+keWZqOWvuemFjee9ruWGheWuuei/m+ihjOS/ruaUuWApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5Yid5aeL5YyWWURT5Yi255uY546v5aKD5a6M5oiQ77yM5aaC5p6c5piv6aaW5qyh5omn6KGM6K+35YWz6Zet5b2T5YmN56qX5Y+j77yM5bm26YeN5paw5omT5byAYClcclxuICAgICAgICAgICAgfSkuaG9vaygncG9zdEFjdGlvbicsICgpID0+IHByb2Nlc3MuZXhpdCgwKSk7XHJcblxyXG4gICAgICAgIHByb2dyYW1cclxuICAgICAgICAgICAgLmNvbW1hbmQoJ3N0YXJ0IDxjYXRhbG9nPiBbd29ya2Rpcl0nKVxyXG4gICAgICAgICAgICAudXNhZ2UoJ3N0YXJ0IDxjYXRhbG9nPiBbd29ya2Rpcl0nKVxyXG4gICAgICAgICAgICAub3B0aW9uKCctZiwgLS1maWxlIDxmaWxlPicsICfphY3nva7mlofku7YnKVxyXG4gICAgICAgICAgICAuYWRkSGVscFRleHQoJ2FmdGVyJywgYOmFjee9ruaWh+S7tuWGheWuueekuuS+i++8miR7Y29uZkVnfWApXHJcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbign5ZCv5Yqo5Yi255uY546v5aKD77yMY2F0YWxvZ+ihqOekuumcgOimgeWItuebmOeahOaooeWdl++8jOWvueW6lOmFjee9ruaWh+S7tuS4rWNhdGFsb2dz55qEa2V55YC877yM55So5LqO5oyH5a6a6ZyA6KaB5Ye655uY55qE5L+h5oGv77yMd29ya2RpcuihqOekuuWItuebmOW3peS9nOebruW9le+8jOWmguaenOS4jeaMh+WumuWImeS9v+eUqOW9k+WJjeebruW9lScpXHJcbiAgICAgICAgICAgIC5hY3Rpb24oYXN5bmMgKGNhdGFsb2c6IHN0cmluZywgd29ya2Rpcjogc3RyaW5nID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCkpLCBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICBmaWxlOiBzdHJpbmdcclxuICAgICAgICAgICAgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlyID0gcGF0aC5yZXNvbHZlKHdvcmtkaXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIOWmguaenOacquaMh+WumumFjee9ruaWh+S7tlxyXG4gICAgICAgICAgICAgICAgbGV0IHlkc0pzb246IHN0cmluZztcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB5ZHNKc29uID0gcGF0aC5yZXNvbHZlKG9wdGlvbnMuZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6K+75Y+W6YWN572u5paH5Lu2XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHlkc0pzb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihg5pyq5om+5Yiw6YWN572u5paH5Lu2ICR7eWRzSnNvbn1gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeWRzSnNvbiA9IHBhdGgucmVzb2x2ZShgJHtkaXJ9L3lkcy5qc29uYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6K+75Y+W6YWN572u5paH5Lu2XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHlkc0pzb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihg6K+36YCa6L+H5Y+C5pWwIC1mIOaMh+WumumcgOimgeS9v+eUqOeahOmFjee9ruaWh+S7tuaIluiAheWcqOW9k+WJjeebruW9leS4i+WIm+W7unlkcy5qc29u5paH5Lu277yM5YaF5a655Y+C6ICDJHtjb25mRWd9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOW8gOWni+WItuebmCAke2NhdGFsb2d9IOW3peS9nOebruW9le+8miR7ZGlyfWApO1xyXG5cclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDlvIDlp4vmo4DmtYvliLbnm5jnjq/looPmo4DmtYtgKTtcclxuICAgICAgICAgICAgICAgIGxldCBnaXRDbWQgPSAnZ2l0JztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdpdEV4aXN0cyA9IGF3YWl0IHV0aWwuY21kLmV4aXN0cyhnaXRDbWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFnaXRFeGlzdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBnaXRDbWQgPSBgJHtkaXJ9L2dpdC1mb3Itd2luZG93cy9iaW4vZ2l0LmV4ZWA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGdpdENtZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGDmnKrmib7liLBnaXTlkb3ku6QgJHtnaXRDbWR9LCDor7flhYjmiafooYwgaW5pdCDliJ3lp4vljJbliLbnm5jnjq/looNgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBzZXR0aW5nWG1sID0gcGF0aC5yZXNvbHZlKGAke2Rpcn0vc2V0dGluZ3MueG1sYCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgbXZuQ21kID0gJ212bic7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoc2V0dGluZ1htbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF2ZW5Ib21lID0gYCR7ZGlyfS9tYXZlbi0zLjguNmA7XHJcbiAgICAgICAgICAgICAgICAgICAgbXZuQ21kID0gYFwiJHttYXZlbkhvbWV9L2Jpbi9tdm4uY21kXCJgO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdYbWwgPSBgJHttYXZlbkhvbWV9L2NvbmYvc2V0dGluZ3MueG1sYDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMobXZuQ21kKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYOacquaJvuWIsG12buWRveS7pCAke212bkNtZH0sIOivt+WFiOaJp+ihjCBpbml0IOWIneWni+WMluWItuebmOeOr+Wig2ApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGlkZVBhdGggPSBgJHtkaXJ9L3lkcy0xLjAuM2BcclxuICAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhpZGVQYXRoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihg5pyq5om+5YiwSURFICR7aWRlUGF0aH0sIOivt+WFiOaJp+ihjCBpbml0IOWIneWni+WMluWItuebmOeOr+Wig2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDliLbnm5jnjq/looPmo4DmtYvlrozmiJBgKVxyXG4gICAgICAgICAgICAgICAgbGV0IHlkc0pzb25TdHIgPSBmcy5yZWFkRmlsZVN5bmMoeWRzSnNvbikudG9TdHJpbmcoJ3V0Zi04Jyk7XHJcbiAgICAgICAgICAgICAgICAvLyDmm7/mjaLmiYDmnIkjIOW8gOWktOeahOazqOmHiuivtOaYjuihjFxyXG4gICAgICAgICAgICAgICAgeWRzSnNvblN0ciA9IHlkc0pzb25TdHIucmVwbGFjZSgvXiMuKi9nbSwgJycpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIOajgOa1i+mFjee9ruaWh+S7tuaYr+WQpuWujOaVtFxyXG4gICAgICAgICAgICAgICAgbGV0IGNvbmZpZzogWWRzQ29uZmlnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hlY2tDb25maWdFcnJvciA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYOmFjee9ruaWh+S7tiAke3lkc0pzb259IOagvOW8j+mUmeivryDlj4LogIPnpLrkvovvvJoke2NvbmZFZ31gKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IEpTT04ucGFyc2UoeWRzSnNvblN0cik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWcuY2F0YWxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tDb25maWdFcnJvcigpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrQ29uZmlnRXJyb3IoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZ2l0ID0gY29uZmlnLmdpdDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhdGFsb2dDb25maWcgPSBjb25maWcuY2F0YWxvZ3NbY2F0YWxvZ107XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhdGFsb2dDb25maWcgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGDphY3nva7mlofku7YgJHt5ZHNKc29ufSDmib7kuI3liLAgY2F0YWxvZ3MuJHtjYXRhbG9nfSDlhYjlhbPphY3nva5gKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhdGFsb2dDb25maWcuaHJjcGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBjYXRhbG9nQ29uZmlnLmZlY29kZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYOmFjee9ruaWh+S7tiAke3lkc0pzb259IGNhdGFsb2dzLiR7Y2F0YWxvZ30uaHJjcGUg5oiWIGNhdGFsb2dzLiR7Y2F0YWxvZ30uZmVjb2RlIOWtl+autee8uuWksWApO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lc3BhY2UgPSBgJHtkaXJ9LyR7Y2F0YWxvZ31gO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG5hbWVzcGFjZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5Yib5bu655uu5b2VICR7bmFtZXNwYWNlfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGZzLm1rZGlyU3luYyhuYW1lc3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg55uu5b2VICR7bmFtZXNwYWNlfSDlt7LlrZjlnKhgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBocmNwZVVybCA9IHR5cGVvZiBjYXRhbG9nQ29uZmlnLmhyY3BlID09PSAnc3RyaW5nJyA/IGdpdD8uaHJjcGUgOiBjYXRhbG9nQ29uZmlnLmhyY3BlLnVybDtcclxuICAgICAgICAgICAgICAgIGlmICghaHJjcGVVcmwpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYOmFjee9ruaWh+S7tiAke3lkc0pzb259IGNhdGFsb2dzLiR7Y2F0YWxvZ30g5ZCO56uv5pyN5YqhIOacquaMh+WumuS7k+W6k+WcsOWdgO+8jOivt+mAmui/hyBnaXQuaHJjcGUg5oiW6ICFIGNhdGFsb2dzLiR7Y2F0YWxvZ30uaHJjcGUudXJsIOaMh+WumuS7k+W6k+WcsOWdgGApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOW8gOWni+aLieWPluWQjuerr+acjeWKoeS7k+W6kyAke2hyY3BlVXJsfWApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoYCR7bmFtZXNwYWNlfS8uZ2l0YCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg55uu5b2VICR7bmFtZXNwYWNlfSDlt7LlrZjlnKjvvIzlvIDlp4vmm7TmlrDku5PlupNgKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGBcIiR7Z2l0Q21kfVwiIHB1bGxgLCBuYW1lc3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg55uu5b2VICR7bmFtZXNwYWNlfSDkuI3lrZjlnKjvvIzlvIDlp4vliJvlu7rku5PlupNgKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYnJhbmNoID0gdHlwZW9mIGNhdGFsb2dDb25maWcuaHJjcGUgPT09ICdzdHJpbmcnID8gY2F0YWxvZ0NvbmZpZy5ocmNwZSA6IGNhdGFsb2dDb25maWcuaHJjcGUuYnJhbmNoO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYnJhbmNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihg6YWN572u5paH5Lu2ICR7eWRzSnNvbn0gY2F0YWxvZ3MuJHtjYXRhbG9nfSDlkI7nq6/mnI3liqEg5pyq5oyH5a6a5YiG5pSv77yM6K+36YCa6L+HIGdpdC5ocmNwZSDmiJbogIUgY2F0YWxvZ3MuJHtjYXRhbG9nfS5ocmNwZS5icmFuY2gg6YWN572u5YiG5pSvYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgXCIke2dpdENtZH1cIiBjbG9uZSAtYiAke2JyYW5jaH0gJHtocmNwZVVybH0gJHtuYW1lc3BhY2V9YCwgbmFtZXNwYWNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDmi4nlj5blkI7nq6/mnI3liqHku5PlupPlrozmiJBgKTtcclxuICAgICAgICAgICAgICAgIGxldCBib29zdHJhcFBvbVhtbCA9IGAke25hbWVzcGFjZX0vJHtkb21haW5LZXl9LWJlL2Rldi0ke2RvbWFpbktleX0tYm9vdHN0cmFwL3BvbS54bWxgO1xyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOabv+aNouaWh+S7tiAke2Jvb3N0cmFwUG9tWG1sfSDkuK3nmoRST09U5Li6ZG9tYWluS2V577yM5ZCm5YiZ5Lya5a+86Ie05Yi255uY5aSx6LSl77yM5peg5rOV5om+5Yiw5Yi25ZOBYCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBib29zdHJhcFBvbVhtbFN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhib29zdHJhcFBvbVhtbCkudG9TdHJpbmcoJ3V0Zi04Jyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYm9vc3RyYXBQb21YbWxTdHJpbmcuaW5jbHVkZXMoJ1JPT1QnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoYm9vc3RyYXBQb21YbWwsIGJvb3N0cmFwUG9tWG1sU3RyaW5nLnJlcGxhY2UoL1JPT1QvZywgZG9tYWluS2V5KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5ob3N0cyAmJiBjb25maWcuaG9zdHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOWtmOWcqGhvc3Rz6YWN572u77yM5qOA5rWL57O757ufaG9zdHPphY3nva7mlofku7bmmK/lkKblt7Lnu4/phY3nva5gKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaG9zdHNGaWxlID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52LldJTkRJUiwgJ1N5c3RlbTMyJywgJ2RyaXZlcnMnLCAnZXRjJywgJ2hvc3RzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG9zdExpc3QgPSBmcy5yZWFkRmlsZVN5bmMoaG9zdHNGaWxlKS50b1N0cmluZygndXRmLTgnKS5zcGxpdCgnXFxuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFwcGVuZEhvc3RzID0gWy4uLmNvbmZpZy5ob3N0c11cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBob3N0SXRlbSBvZiBob3N0TGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoLyMvLnRlc3QoaG9zdEl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhcHBlbmRIb3N0IG9mIGNvbmZpZy5ob3N0cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW2lwLCBkb21haW5dID0gYXBwZW5kSG9zdC5zcGxpdCgnICcpLmZpbHRlcihpdGVtID0+IGl0ZW0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9zdEl0ZW0uaW5jbHVkZXMoaXApICYmIGhvc3RJdGVtLmluY2x1ZGVzKGRvbWFpbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg57O757ufaG9zdHPphY3nva7mlofku7blt7LlrZjlnKggJHthcHBlbmRIb3N0fWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEhvc3RzLnJlbW92ZShhcHBlbmRIb3N0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyDor7vlj5bns7vnu59ob3N0c+mFjee9ruaWh+S7tlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBlbmRIb3N0cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWRtaW4oKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnMuYXBwZW5kRmlsZVN5bmMoaG9zdHNGaWxlLCBgXFxuJHthcHBlbmRIb3N0cy5qb2luKCdcXG4nKX1cXG5gLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6ICd1dGYtOCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYOW9k+WJjemdnueuoeeQhuWRmOWQr+WKqOaXoOazleabtOaUuWhvc3Rz5paH5Lu277yM6K+35L2/55So566h55CG5ZGY5ZCv5Yqo5oiW6ICF5omL5Yqo5re75YqgICR7YXBwZW5kSG9zdHMuam9pbignXFxuJyl9IOWIsOaWh+S7tiAke2hvc3RzRmlsZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgaG9zdHMg6YWN572u5qOA5rWL5a6M5oiQYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ+WIneWni+WMlumhueebrm1hdmVu546v5aKDJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgbXZuQ29uZmlnRGlyID0gYCR7bmFtZXNwYWNlfS8ubXZuYDtcclxuICAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhtdm5Db25maWdEaXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgJHttdm5DbWR9IC1OIGlvLnRha2FyaTptYXZlbjp3cmFwcGVyIC1EbWF2ZW49My44LjZgLCBuYW1lc3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8g5YaZ5YWlbWF2ZW7phY3nva7liLAgLm12bi9tYXZlbi5jb25maWdcclxuICAgICAgICAgICAgICAgIGxldCBjb25maWdGaWxlID0gYCR7bXZuQ29uZmlnRGlyfS9tYXZlbi5jb25maWdgO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmcy5ybVN5bmMoY29uZmlnRmlsZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoYCR7bXZuQ29uZmlnRGlyfS9tYXZlbi5jb25maWdgLCBgLXNcXG4ke3NldHRpbmdYbWx9XFxuLURtYXZlbi53YWdvbi5odHRwLnNzbC5pbnNlY3VyZT10cnVlXFxuLURtYXZlbi53YWdvbi5odHRwLnNzbC5hbGxvd2FsbD10cnVlYCk7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5b2T5YmNbWF2ZW7kv6Hmga9gKVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgJHttdm5DbWR9IC0tdmVyc2lvbmAsIG5hbWVzcGFjZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ+mhueebrm1hdmVu5riF55CGJylcclxuICAgICAgICAgICAgICAgIGF3YWl0IGV4ZWNDbWQoYCR7bXZuQ21kfSBjbGVhbiAtRHNraXBUZXN0c2AsIGAke25hbWVzcGFjZX0vJHtkb21haW5LZXl9LWJlYCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ+WkhOeQhuWJjeerr+aehOW7uu+8jOWinuWKoOaehOW7uuaWh+S7ticpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZlRGlyID0gYCR7bmFtZXNwYWNlfS8ke2RvbWFpbktleX0tZmVgO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZlQnVpbGRKcyA9IGAke2ZlRGlyfS9idWlsZC5qc2A7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmVCdWlsZEpzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZzLmNwU3luYyhwYXRoLmpvaW4oX19kaXJuYW1lICwnLi4vZmUtYnVpbGQuanMnKSwgZmVCdWlsZEpzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBmZVBhY2thZ2VKc29uID0gYCR7ZmVEaXJ9L3BhY2thZ2UuanNvbmA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYWNrYWdlU3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGZlUGFja2FnZUpzb24pLnRvU3RyaW5nKCd1dGYtOCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFwYWNrYWdlU3RyaW5nLmluY2x1ZGVzKCdidWlsZC5qcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOS/ruaUuSR7ZmVQYWNrYWdlSnNvbn1gKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocGFja2FnZVN0cmluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFja2FnZUpzb24uc2NyaXB0c1snYnVpbGQ6ZXh0ZW5kJ10gKz0gJyAmJiBub2RlIGJ1aWxkLmpzJztcclxuICAgICAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGZlUGFja2FnZUpzb24sIEpTT04uc3RyaW5naWZ5KHBhY2thZ2VKc29uLCBudWxsLCA0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOS/ruaUuSR7ZmVQYWNrYWdlSnNvbn3lrozmiJBgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGZlY29kZVVybCA9IHR5cGVvZiBjYXRhbG9nQ29uZmlnLmZlY29kZSA9PT0gJ3N0cmluZycgPyBnaXQ/LmZlY29kZSA6IGNhdGFsb2dDb25maWcuZmVjb2RlLnVybDtcclxuICAgICAgICAgICAgICAgIGlmICghZmVjb2RlVXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGDphY3nva7mlofku7YgJHt5ZHNKc29ufSBjYXRhbG9ncy4ke2NhdGFsb2d9IOWQjuerr+acjeWKoSDmnKrmjIflrprku5PlupPlnLDlnYDvvIzor7fpgJrov4cgZ2l0LmZlY29kZSDmiJbogIUgY2F0YWxvZ3MuJHtjYXRhbG9nfS5mZWNvZGUudXJsIOaMh+WumuS7k+W6k+WcsOWdgGApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOW8gOWni+aLieWPluaKpeWRiuacjeWKoeS7k+W6kyAke2ZlY29kZVVybH1gKTtcclxuICAgICAgICAgICAgICAgIGxldCByZXBvcnROYW1lc3BhY2UgPSBgJHtuYW1lc3BhY2V9L3lvbmJpcC15aXN2LWl6cDEtZGV2LWZlY29kZWA7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhgJHtyZXBvcnROYW1lc3BhY2V9Ly5naXRgKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDnm67lvZUgJHtyZXBvcnROYW1lc3BhY2V9IOW3suWtmOWcqO+8jOW8gOWni+abtOaWsOS7k+W6k2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV4ZWNDbWQoYFwiJHtnaXRDbWR9XCIgcHVsbGAsIHJlcG9ydE5hbWVzcGFjZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDnm67lvZUgJHtyZXBvcnROYW1lc3BhY2V9IOS4jeWtmOWcqO+8jOW8gOWni+WIm+W7uuS7k+W6k2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBicmFuY2ggPSB0eXBlb2YgY2F0YWxvZ0NvbmZpZy5mZWNvZGUgPT09ICdzdHJpbmcnID8gY2F0YWxvZ0NvbmZpZy5mZWNvZGUgOiBjYXRhbG9nQ29uZmlnLmZlY29kZS5icmFuY2g7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFicmFuY2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGDphY3nva7mlofku7YgJHt5ZHNKc29ufSBjYXRhbG9ncy4ke2NhdGFsb2d9IOaKpeWRiuacjeWKoeacquaMh+WumuWIhuaUr++8jOivt+mAmui/hyBnaXQuZmVjb2RlIOaIluiAhSBjYXRhbG9ncy4ke2NhdGFsb2d9LmZlY29kZS5icmFuY2gg6YWN572u5YiG5pSvYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgXCIke2dpdENtZH1cIiBjbG9uZSAtYiAke2JyYW5jaH0gJHtmZWNvZGVVcmx9ICR7cmVwb3J0TmFtZXNwYWNlfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOaLieWPluaKpeWRiuacjeWKoeS7k+W6k+WujOaIkGApO1xyXG5cclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCflpITnkIbmiqXlkYrmnoTlu7rvvIzlop7liqDmnoTlu7rmlofku7YnKTtcclxuICAgICAgICAgICAgICAgIGxldCBmZWNvZGVCdWlsZEpzID0gYCR7cmVwb3J0TmFtZXNwYWNlfS9idWlsZC5qc2A7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmVjb2RlQnVpbGRKcykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmcy5jcFN5bmMocGF0aC5qb2luKF9fZGlybmFtZSAsJy4uL2ZlY29kZS1idWlsZC5qcycpLCBmZWNvZGVCdWlsZEpzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBmZWNvZGVQYWNrYWdlSnNvbiA9IGAke3JlcG9ydE5hbWVzcGFjZX0vcGFja2FnZS5qc29uYDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZlY29kZVBhY2thZ2VTdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZmVjb2RlUGFja2FnZUpzb24pLnRvU3RyaW5nKCd1dGYtOCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmZWNvZGVQYWNrYWdlU3RyaW5nLmluY2x1ZGVzKCdidWlsZC5qcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOS/ruaUuSR7ZmVjb2RlUGFja2FnZUpzb259YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGZlY29kZVBhY2thZ2VTdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhY2thZ2VKc29uLnNjcmlwdHNbJ2J1aWxkJ10gKz0gJyAmJiBub2RlIGJ1aWxkLmpzJztcclxuICAgICAgICAgICAgICAgICAgICBwYWNrYWdlSnNvbi5kb21haW5LZXkgPSBkb21haW5LZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Yig6Zmk5q2k5L6d6LWWIOS8muWvvOiHtG5wbSBpIOWksei0pVxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMuemxpYlxyXG4gICAgICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZmVjb2RlUGFja2FnZUpzb24sIEpTT04uc3RyaW5naWZ5KHBhY2thZ2VKc29uLCBudWxsLCA0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOS/ruaUuSR7ZmVjb2RlUGFja2FnZUpzb2595a6M5oiQYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOWuieijheaKpeWRiuacjeWKoeS+nei1lmApO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZCgnbnBtIGknLCByZXBvcnROYW1lc3BhY2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDnlJ/miJB2ZXJzaW9uLmpzb24g5paH5Lu2YClcclxuICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSByYW5kb21VVUlEKCkudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhgJHtyZXBvcnROYW1lc3BhY2V9L3ZlcnNpb24uanNvbmAsIGB7XCJ2ZXJzaW9uXCI6IFwiJHt1dWlkfVwifWApO1xyXG5cclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCfliJ3lp4vljJbpobnnm67njq/looPotYTmupAnKTtcclxuICAgICAgICAgICAgICAgIC8vIOWmguaenCBuYW1lc3BhY2UvKGRpc2t8ZGlza3MpIOWmguaenOWtmOWcqCDot7Pov4dcclxuICAgICAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGAke25hbWVzcGFjZX0vZGlza2ApIHx8IGZzLmV4aXN0c1N5bmMoYCR7bmFtZXNwYWNlfS9kaXNrc2ApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOW3suWtmOWcqO+8jOi3s+i/h+eOr+Wig+i1hOa6kOaWh+S7tuS4i+i9vWApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2Rmcy56aGlwZXIuY29tL3YzcjYvZW52LnppcFxyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDlvIDlp4vkuIvovb3pobnnm67njq/looPotYTmupDmlofku7ZgKVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnaXRaaXBGaWxlID0gYCR7bmFtZXNwYWNlfS9lbnYuemlwYDtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGAke3dnZXR9ICR7UlNfVVJMfS9lbnYuemlwIC1PIFwiJHtnaXRaaXBGaWxlfVwiYCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDop6PljovotYTmupDmlofku7bljIUgJHtnaXRaaXBGaWxlfWApXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgXCIke3VuemlwfVwiIFwiJHtnaXRaaXBGaWxlfVwiYCwgbmFtZXNwYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICBmcy5ybVN5bmMoZ2l0WmlwRmlsZSlcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygn5ZCv5YqoSURFJyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGBcIiR7aWRlUGF0aH0vQ29kZS9iaW4vY29kZVwiIC0tbm8tc2FuZGJveCAtLWxvZyBkZWJ1ZyAtLWdvdG8gXCIke2lkZVBhdGh9L0NvZGUvZGF0YS91c2VyLWRhdGEvVXNlci9zZXR0aW5ncy5qc29uXCIgXCIke25hbWVzcGFjZX1cImApO1xyXG4gICAgICAgICAgICAgICAgLy8g6ZyA6KaB562J5b6FSURF5ZCv5Yqo5a6M5oiQ5ZCO5YWz6ZetXHJcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwMCkpXHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygn5bey5ZCv5YqoSURF77yM54K55Ye75bem5L6n6I+c5Y2V6YCJ5oup4oCcWURT4oCd77yM6K+35oyJ54Wn5paH5qGj6K+05piO6L+b6KGM5Yi255uY5pON5L2cJyk7XHJcbiAgICAgICAgICAgIH0pLmhvb2soJ3Bvc3RBY3Rpb24nLCAoKSA9PiBwcm9jZXNzLmV4aXQoMCkpO1xyXG5cclxuICAgICAgICBwcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndilcclxuICAgIH1cclxufVxyXG4iXX0=
517
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUNBQWtDO0FBQ2xDLGlEQUFtQztBQUNuQyx5Q0FBOEM7QUFDOUMsZ0RBQWtDO0FBQ2xDLGtFQUFvRDtBQUNwRCw0Q0FBOEI7QUFDOUIsNENBQThCO0FBQzlCLG1DQUFpQztBQUVqQyxNQUFNLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQztBQUMxQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUN2QyxNQUFNLE1BQU0sR0FBRyw2QkFBNkIsQ0FBQztBQUU3QyxNQUFNLE1BQU0sR0FBVyx5QkFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV0RCxNQUFNLEdBQUcscUJBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FDakIsQ0FBQTtBQUVELE1BQU0sT0FBTyxHQUFHLENBQU8sT0FBZSxFQUFFLEdBQVksRUFBRSxFQUFFO0lBQ3BELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNELElBQUksS0FBSyxHQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN4QixhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUM1QixHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU87UUFDdEIsT0FBTyxFQUFFLENBQUM7UUFDVixLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixHQUFHO0tBQ04sQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLE9BQU8saUJBQWlCLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FB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QyxJQUFJLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpELG1CQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMvQixDQUFDO0NBQ0o7QUF2ZEQsdUJBdWRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwcm9ncmFtfSBmcm9tIFwiY29tbWFuZGVyXCI7XHJcbmltcG9ydCAqIGFzIHByb2Nlc3MgZnJvbSBcInByb2Nlc3NcIjtcclxuaW1wb3J0IHtMb2dnZXJGYWN0b3J5LCB1dGlsfSBmcm9tIFwidndlYi1jb3JlXCI7XHJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xyXG5pbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcclxuaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcclxuaW1wb3J0ICogYXMgb3MgZnJvbSAnbm9kZTpvcyc7XHJcbmltcG9ydCB7cmFuZG9tVVVJRH0gZnJvbSAnY3J5cHRvJ1xyXG5cclxuY29uc3QgZG9tYWluS2V5ID0gJ3AtaGNjLWkwMDAtcDAwYS1ocmNwZSc7XHJcbmNvbnN0IHBrZyA9IHJlcXVpcmUoJy4uL3BhY2thZ2UuanNvbicpO1xyXG5jb25zdCBSU19VUkwgPSAnaHR0cHM6Ly9kZnMuemhpcGVyLmNvbS92M3I2JztcclxuXHJcbmNvbnN0IGxvZ2dlcjogTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1lEUycpO1xyXG5cclxuY29uc3QgZW52ID0ge1xyXG4gICAgLi4ucHJvY2Vzcy5lbnZcclxufVxyXG5cclxuY29uc3QgZXhlY0NtZCA9IGFzeW5jIChjb21tYW5kOiBzdHJpbmcsIGN3ZD86IHN0cmluZykgPT4ge1xyXG4gICAgbG9nZ2VyLmluZm8oYOaJp+ihjOWRveS7pCAke2NvbW1hbmR9ICR7Y3dkID8gYO+8jOaJp+ihjOebruW9leS4uiR7Y3dkfWAgOicnfWApO1xyXG4gICAgbGV0IHN0YXJ0ICA9IERhdGUubm93KCk7XHJcbiAgICBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKGNvbW1hbmQsIHtcclxuICAgICAgICBjd2QsIGVuY29kaW5nOiAndXRmLTgnLFxyXG4gICAgICAgIHRpbWVvdXQ6IDAsIC8vIOiuvuS4uuS4jei/h+acn++8jOS4i+i9vemAn+W6pui/h+aFouS8muWvvOiHtOi2heaXtlxyXG4gICAgICAgIHN0ZGlvOiBbMCwgMSwgMl0sXHJcbiAgICAgICAgZW52XHJcbiAgICB9KTtcclxuICAgIGxvZ2dlci5pbmZvKGDmiafooYzlkb3ku6QgJHtjb21tYW5kfSDogJfml7YgXFx4MUJbMzRtIDwke0RhdGUubm93KCkgLSBzdGFydH1tcz5dYClcclxufVxyXG5cclxuY29uc3QgcGxhdGZvcm0gPSBvcy5wbGF0Zm9ybSgpXHJcbmlmIChwbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xyXG4gICAgbG9nZ2VyLmVycm9yKCflvZPliY3lt6Xlhbfku4XmlK/mjIF3aW5kb3dz57O757ufJyk7XHJcbiAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbn1cclxuXHJcbmNvbnN0IGlzQWRtaW4gPSAoKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIOWwneivleaJp+ihjOS4gOS4quWPquacieeuoeeQhuWRmOaJjeiDvei/kOihjOeahOWRveS7pFxyXG4gICAgICAgIC8vIOS9v+eUqCA+bnVsIDI+JjEg5p2l5oqR5Yi26L6T5Ye6XHJcbiAgICAgICAgY2hpbGRfcHJvY2Vzcy5leGVjU3luYygnbmV0IHNlc3Npb24gPm51bCAyPiYxJyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIOaIkOWKn+aJp+ihjFxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyDmiafooYzlpLHotKXvvIzmnYPpmZDkuI3otrNcclxuICAgIH1cclxufVxyXG5cclxubGV0IHdnZXQgPSBwYXRoLmpvaW4oX19kaXJuYW1lICwnLi4vd2dldC5leGUnKTtcclxubGV0IHppcCA9IHBhdGguam9pbihfX2Rpcm5hbWUgLCcuLi96aXAuZXhlJyk7XHJcbmxldCB1bnppcCA9IHBhdGguam9pbihfX2Rpcm5hbWUgLCcuLi91bnppcC5leGUnKTtcclxuXHJcbnByb2dyYW0ubmFtZShcInlkc1wiKVxyXG4gICAgLnVzYWdlKFwiW2NvbW1hbmRdIFtvcHRpb25zXVwiKVxyXG4gICAgLmRlc2NyaXB0aW9uKFwieWRzIOWItuebmOW3peWFtyDlpoLmnpzlkb3ku6Tlj4LmlbDkuK3lrZjlnKjnqbrmoLwg5L2/55So5Y+M5byV5Y+3XFxcIlxcXCLljIXoo7lcIilcclxuICAgIC52ZXJzaW9uKGB5ZHMgJHtwa2cudmVyc2lvbn1gKTtcclxuXHJcbnR5cGUgTWljcm9TZXJ2aWNlID0gJ2hyY3BlJyB8ICdmZWNvZGUnO1xyXG5cclxudHlwZSBHaXQgPSB7XHJcbiAgICB1cmw6IHN0cmluZyxcclxuICAgIGJyYW5jaDogc3RyaW5nXHJcbn1cclxuXHJcbnR5cGUgWWRzQ29uZmlnID0ge1xyXG4gICAgaG9zdHM6IEFycmF5PHN0cmluZz47XHJcbiAgICBnaXQ6IFJlY29yZDxNaWNyb1NlcnZpY2UsIHN0cmluZz47XHJcbiAgICBjYXRhbG9nczoge1xyXG4gICAgICAgIFtjYXRhbG9nOiBzdHJpbmddOiBSZWNvcmQ8TWljcm9TZXJ2aWNlLCBzdHJpbmcgfCBHaXQ+XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZFZyA9IGB7XHJcbiAgICBob3N0cz86IEFycmF5PHN0cmluZz47XHJcbiAgICBnaXQ6IFJlY29yZDwnaHJjcGUnIHwgJ2ZlY29kZScsIHN0cmluZz47XHJcbiAgICBjYXRhbG9nczoge1xyXG4gICAgICAgIFtjYXRhbG9nOiBzdHJpbmddOiBSZWNvcmQ8J2hyY3BlJyB8ICdmZWNvZGUnLCBzdHJpbmcgfCB7IHVybDogc3RyaW5nLCBicmFuY2g6IHN0cmluZyB9PlxyXG4gICAgfVxyXG59YFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFpbiB7XHJcblxyXG4gICAgc3RhcnR1cCgpIHtcclxuICAgICAgICBwcm9ncmFtXHJcbiAgICAgICAgICAgIC5jb21tYW5kKCdjbGVhbiBbd29ya2Rpcl0nKVxyXG4gICAgICAgICAgICAudXNhZ2UoJ2NsZWFuIFt3b3JrZGlyXScpXHJcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbign5riF55CG5Yi255uY5bel5L2c55uu5b2VLCB3b3JrZGly6KGo56S65Yi255uY5bel5L2c55uu5b2V77yM5aaC5p6c5LiN5oyH5a6a5YiZ5L2/55So5b2T5YmN55uu5b2VJylcclxuICAgICAgICAgICAgLmFjdGlvbihhc3luYyAod29ya2Rpcjogc3RyaW5nID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCkpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXIgPSBwYXRoLnJlc29sdmUod29ya2Rpcik7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5riF55CG5Yi255uY5bel5L2c55uu5b2VICR7ZGlyfWApO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBmcy5yZWFkZGlyU3luYyhkaXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGVTdGF0ID0gZnMuc3RhdFN5bmMoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnMucm1TeW5jKGZpbGUsIHtyZWN1cnNpdmU6IGZpbGVTdGF0LmlzRGlyZWN0b3J5KCl9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDliLbnm5jlt6XkvZznm67lvZXmuIXnkIblrozmiJBgKTtcclxuICAgICAgICAgICAgfSkuaG9vaygncG9zdEFjdGlvbicsICgpID0+IHByb2Nlc3MuZXhpdCgwKSk7XHJcblxyXG4gICAgICAgIHByb2dyYW1cclxuICAgICAgICAgICAgLmNvbW1hbmQoJ2luaXQgW3dvcmtkaXJdJylcclxuICAgICAgICAgICAgLnVzYWdlKCdpbml0IFt3b3JrZGlyXScpXHJcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbign5Yid5aeL5YyWWURT5Yi255uY546v5aKDLCB3b3JrZGly6KGo56S65Yi255uY5bel5L2c55uu5b2V77yM5aaC5p6c5LiN5oyH5a6a5YiZ5L2/55So5b2T5YmN55uu5b2VJylcclxuICAgICAgICAgICAgLmFjdGlvbihhc3luYyAod29ya2Rpcjogc3RyaW5nID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCkpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXIgPSBwYXRoLnJlc29sdmUod29ya2Rpcik7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5Yid5aeL5YyWWURT5Yi255uY546v5aKDIOW3peS9nOebruW9le+8miR7ZGlyfWApO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjb25maWdGaWxlID0gcGF0aC5yZXNvbHZlKGRpciwgJ3lkcy5qc29uJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29uZmlnRmlsZUNyZWF0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDnlJ/miJDphY3nva7mlofku7YgeWRzLmpzb25gKTtcclxuICAgICAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGNvbmZpZ0ZpbGUsIGAj6K+35qC55o2u6K+05piO5L+u5pS56YWN572u5paH5Lu25bm25Yig6Zmk5omA5pyJ5rOo6YeK6K+05piO5ZCO5L+d5a2YXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhvc3RzXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwi5aaC5p6c5L2/55So5LqGeWRzLmJhdOWIneWni+eOr+Wig++8jOW3sue7j+a3u+WKoOS6hiAxOTIuMTY4LjUwLjQwIHJlcG8ueXlyZC5jb20gMTkyLjE2OC41MC40MSBiaXA1LnpoaXBlci5jb20gMTkyLjE2OC41MC40MiBiaXAzLnpoaXBlci5jb20gaG9zdHPphY3nva7pobnlj6/ku6XliKDpmaRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWF2ZW7ku5PlupPnp4HmnI3lr7nlupTnmoRob3N05pig5bCEXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlzduW8gOWPkeeOr+Wig+WvueW6lOeahGhvc3TmmKDlsIRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImdpdFwiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhyY3BlXCI6IFwi5ZCO56uv5pyN5Yqh5a+55bqU55qEZ2l05Zyw5Z2AXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZlY29kZVwiOiBcIuaKpeWRiuacjeWKoeWvueW6lGdpdOWcsOWdgFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY2F0YWxvZ3NcIjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyDlrqLmiLfku6PnoIHvvIznlKjkuo7lkK/liqjlkb3ku6TnmoRjYXRhbG9n5Y+C5pWwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdlZXJcIjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaHJjcGVcIjogXCLlkI7nq6/mnI3liqHliIbmlK9cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZlY29kZVwiOiBcIuaKpeWRiuacjeWKoeWIhuaUr1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnRmlsZUNyZWF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGdpdEV4aXN0cyA9IGF3YWl0IHV0aWwuY21kLmV4aXN0cygnZ2l0Jyk7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5qOA5p+l5piv5ZCm5a6J6KOF5LqGZ2l0ID4+ICR7Z2l0RXhpc3RzID8gJ+W3suWuieijhScgOiAn5pyq5a6J6KOFJ31gKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdpdEhvbWUgPSBgJHtkaXJ9L2dpdC1mb3Itd2luZG93c2BcclxuICAgICAgICAgICAgICAgIGlmICghZ2l0RXhpc3RzICYmICFmcy5leGlzdHNTeW5jKGdpdEhvbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2l0WmlwTmFtZSA9ICdnaXQtZm9yLXdpbmRvd3MuemlwJ1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDkuIvovb1naXQg5a6J6KOF5YyFICR7Z2l0WmlwTmFtZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBnaXRaaXBGaWxlID0gYCR7ZGlyfS8ke2dpdFppcE5hbWV9YDtcclxuICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XmmK/lkKblt7Lnu4/lrZjlnKjlronoo4XljIUg5aaC5p6c5pyJ5YWI5Yig6ZmkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZ2l0WmlwRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOWIoOmZpOW3suWtmOWcqOWuieijheWMhSAke2dpdFppcEZpbGV9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZzLnJtU3luYyhnaXRaaXBGaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5LiL6L295a6J6KOF5YyF5bm26L6T5Ye65pel5b+XXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgJHt3Z2V0fSAke1JTX1VSTH0vJHtnaXRaaXBOYW1lfSAtTyBcIiR7Z2l0WmlwRmlsZX1cImApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDop6Pljovlronoo4XljIUgJHtnaXRaaXBGaWxlfWApXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgXCIke3VuemlwfVwiIFwiJHtnaXRaaXBGaWxlfVwiIC1kIFwiJHtkaXJ9XCJgKTtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg6YWN572uZ2l0546v5aKD5Y+Y6YePYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZCggYHNldHggUEFUSCBcIiVQQVRIJTske2dpdEhvbWV9XFxcXGJpbjtcImAgKTtcclxuICAgICAgICAgICAgICAgICAgICBmcy5ybVN5bmMoZ2l0WmlwRmlsZSlcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgZ2l0IOWuieijheWujOaIkGApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGphdmFFeGlzdHMgPSBhd2FpdCB1dGlsLmNtZC5leGlzdHMoJ2phdmEnKTtcclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDmo4Dmn6XmmK/lkKblronoo4XkuoZqYXZhID4+ICR7amF2YUV4aXN0cyA/ICflt7Llronoo4UnIDogJ+acquWuieijhSd9YCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWphdmFFeGlzdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygn5pyq5om+5YiwamF2Ye+8jOWHhuWkh+WuieijhWphdmHvvIzlvIDlp4vkuIvovb1qZGsnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqZGtaaXBOYW1lID0gJ2pkay0xMS4wLjE1LjFfd2luZG93cy14NjRfYmluLnppcCdcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGAke3dnZXR9ICR7UlNfVVJMfS8ke2pka1ppcE5hbWV9IC1PIFwiJHtkaXJ9LyR7amRrWmlwTmFtZX1cImApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDop6PljotqZGsg5a6J6KOF5YyFICR7ZGlyfS8ke2pka1ppcE5hbWV9YClcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGBcIiR7dW56aXB9XCIgXCIke2Rpcn0vJHtqZGtaaXBOYW1lfVwiYCwgZGlyKTtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg6YWN572uamF2YeeOr+Wig+WPmOmHj2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqYXZhSG9tZSA9IGAke2Rpcn0vamRrLTExLjAuMTUuMWA7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgc2V0eCBKQVZBX0hPTUUgXCIke2phdmFIb21lfVwiYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgc2V0eCBDTEFTU19QQVRIIFwiLjslSkFWQV9IT01FJVxcXFxsaWI7XCJgKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKCBgc2V0eCBQQVRIIFwiJVBBVEglOyVKQVZBX0hPTUUlXFxcXGJpbjtcImAgKTtcclxuICAgICAgICAgICAgICAgICAgICBlbnYuSkFWQV9IT01FID0gamF2YUhvbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZW52LkNMQVNTX1BBVEggPSBcIi47JUpBVkFfSE9NRSVcXFxcbGliO1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIGVudi5QQVRIID0gXCIlUEFUSCU7JUpBVkFfSE9NRSVcXFxcYmluO1wiO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBqYXZhIOWuieijheWujOaIkCDor7fph43lkK/nu4jnq69gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5qOA5p+lamF2YeeJiOacrGApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgamF2YUhvbWUgPSBlbnYuSkFWQV9IT01FO1xyXG5cclxuICAgICAgICAgICAgICAgIGF3YWl0IGV4ZWNDbWQoYFwiJHtqYXZhSG9tZX0vYmluL2phdmFcIiAtdmVyc2lvbmApO1xyXG4gICAgICAgICAgICAgICAgLy8g5a+85YWl6K+B5Lmm5YiwamF2YSDlpoLmnpxqYXZh5pivMS4454mI5pysIOmcgOimgeWvvOWFpeWIsCBKQVZBX0hPTUUvanJlL2xpYi9zZWN1cml0eS9jYWNlcnRzIOWmguaenOaYrzEx54mI5pysIOmcgOimgeWvvOWFpeWIsCBKQVZBX0hPTUUvbGliL3NlY3VyaXR5L2NhY2VydHNcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoamF2YUhvbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2VydHNGaWxlbmFtZSA9ICdsaWIvc2VjdXJpdHkvY2FjZXJ0cyc7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNlcnRzRmlsZSA9IGAke2phdmFIb21lfS8ke2NlcnRzRmlsZW5hbWV9YDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY2VydHNGaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjZXJ0c0ZpbGUgPSBgJHtqYXZhSG9tZX0vanJlLyR7Y2VydHNGaWxlbmFtZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5qOA5p+lamF2YeivgeS5puebruW9lSAke2NlcnRzRmlsZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhjZXJ0c0ZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXRvb2xDbWQgPSBgXCIke2phdmFIb21lfS9iaW4va2V5dG9vbFwiYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Yik5pat6K+B5Lmm5piv5ZCm5bey57uP5a+85YWlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGAke2tleXRvb2xDbWR9IC1saXN0IC12IC1rZXlzdG9yZSBcIiR7Y2VydHNGaWxlfVwiIC1zdG9yZXBhc3MgY2hhbmdlaXQgLS1hbGlhcyB5eXJkYClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGB5eXJkLmNydCDor4Hkuablt7LlrZjlnKhgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6K+B5Lmm5LiN5a2Y5ZyoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5a+85YWlIHl5cmQuY3J0IOivgeS5puWIsGphdmEgJHtjZXJ0c0ZpbGV9YCk7IC8vICR7ZGlyfS95eXJkLmNydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgJHtrZXl0b29sQ21kfSAtaW1wb3J0Y2VydCAtZmlsZSBcIiR7cGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL3l5cmQuY3J0Jyl9XCIgLWtleXN0b3JlIFwiJHtjZXJ0c0ZpbGV9XCIgLXN0b3JlcGFzcyBjaGFuZ2VpdCAtbm9wcm9tcHQgLS1hbGlhcyB5eXJkYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgeXlyZC5jcnQg6K+B5Lmm5a+85YWl5a6M5oiQYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF2ZW5Ib21lID0gYCR7ZGlyfS9tYXZlbi0zLjguNmA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXZlbkV4aXN0cyA9IGF3YWl0IHV0aWwuY21kLmV4aXN0cygnbXZuJyk7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5qOA5p+l5piv5ZCm5a6J6KOF5LqGbWF2ZW4gPj4gJHttYXZlbkV4aXN0cyA/ICflt7Llronoo4UnIDogJ+acquWuieijhSd9YCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdmVuRXhpc3RzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF2ZW5aaXBOYW1lID0gJ21hdmVuLTMuOC42LnppcCdcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5LiL6L29bWF2ZW4g5a6J6KOF5YyFICR7bWF2ZW5aaXBOYW1lfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdmVuWmlwRmlsZSA9IGAke2Rpcn0vJHttYXZlblppcE5hbWV9YDtcclxuICAgICAgICAgICAgICAgICAgICAvLyDmo4Dmn6XmmK/lkKblt7Lnu4/lrZjlnKjlronoo4XljIUg5aaC5p6c5pyJ5YWI5Yig6ZmkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMobWF2ZW5aaXBGaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5Yig6Zmk5bey5a2Y5Zyo5a6J6KOF5YyFICR7bWF2ZW5aaXBGaWxlfWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcy5ybVN5bmMobWF2ZW5aaXBGaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5LiL6L295a6J6KOF5YyF5bm26L6T5Ye65pel5b+XXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgJHt3Z2V0fSAke1JTX1VSTH0vJHttYXZlblppcE5hbWV9IC1PIFwiJHttYXZlblppcEZpbGV9XCJgKTtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg6Kej5Y6L5a6J6KOF5YyFICR7bWF2ZW5aaXBGaWxlfWApXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgXCIke3VuemlwfVwiIFwiJHttYXZlblppcEZpbGV9XCIgLWQgXCIke2Rpcn1cImApO1xyXG4gICAgICAgICAgICAgICAgICAgIGZzLnJtU3luYyhtYXZlblppcEZpbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmt7vliqBtYXZlbiDnjq/looPlj5jph49cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXaW5kb3dz5qC45b+D5ZG95Luk77ya5rC45LmF6L+95Yqg6Lev5b6E5Yiw44CQ55So5oi3546v5aKD5Y+Y6YePUEFUSOOAke+8jOawuOS5heeUn+aViFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXZuUGF0aCA9IHBhdGgucmVzb2x2ZShgJHttYXZlbkhvbWV9L2JpbmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKCBgc2V0eCBQQVRIIFwiJVBBVEglOyR7bXZuUGF0aH1cImAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOKchSDmiJDlip/vvIFNYXZlbui3r+W+hOOAkCR7bXZuUGF0aH3jgJHlt7Lmt7vliqDliLDns7vnu59QQVRI546v5aKD5Y+Y6YePYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCDmt7vliqDlpLHotKXvvJonLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgbWF2ZW4g5a6J6KOF5a6M5oiQYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOWIneWni+WMlm5vZGXnjq/looNgKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGV4ZWNDbWQoJ25wbSBpbnN0YWxsIC1nIHR5cGVzY3JpcHQgLS1yZWdpc3RyeT1odHRwczovL3JlZ2lzdHJ5Lm5wbW1pcnJvci5jb20nKTtcclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDliJ3lp4vljJZub2Rl546v5aKD5a6M5oiQYCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOajgOa1i2NvZGXmmK/lkKblrZjlnKhgKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY29kZURpciA9IGAke2Rpcn0veWRzLTEuMC4zYDtcclxuICAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb2RlRGlyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVaaXBOYW1lID0gJ3lkcy0xLjAuMy1qZGstOC13aW5kb3dzLXg4Nl82NC56aXAnXHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOS4i+i9vWNvZGUgSURFIOWuieijheWMhSAke2NvZGVaaXBOYW1lfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVaaXBGaWxlID0gYCR7ZGlyfS8ke2NvZGVaaXBOYW1lfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qOA5p+l5piv5ZCm5bey57uP5a2Y5Zyo5a6J6KOF5YyFIOWmguaenOacieWFiOWIoOmZpFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNvZGVaaXBGaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5Yig6Zmk5bey5a2Y5Zyo5a6J6KOF5YyFICR7Y29kZVppcEZpbGV9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZzLnJtU3luYyhjb2RlWmlwRmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS4i+i9veWuieijheWMheW5tui+k+WHuuaXpeW/l1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV4ZWNDbWQoYCR7d2dldH0gaHR0cHM6Ly95b25jb21tdW5pdHkueW9ueW91Y2xvdWQuY29tL1lEU0Rvd25sb2FkL1dpbmRvdy94NjQvJHtjb2RlWmlwTmFtZX0gLU8gXCIke2NvZGVaaXBGaWxlfVwiYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOino+WOi+WuieijheWMhSAke2NvZGVaaXBGaWxlfWApXHJcbiAgICAgICAgICAgICAgICAgICAgZnMubWtkaXJTeW5jKGNvZGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV4ZWNDbWQoYFwiJHt1bnppcH1cIiBcIiR7Y29kZVppcEZpbGV9XCIgLWQgXCIke2NvZGVEaXJ9XCJgKTtcclxuICAgICAgICAgICAgICAgICAgICBmcy5ybVN5bmMoY29kZVppcEZpbGUpXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgNTAwMCkpXHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYGNvZGUgSURFIOWuieijheWujOaIkGApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOWIneWni+WMlllEUyBJREUg5YWo5bGA6YWN572uYClcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzSnNvbiA9IGAke2NvZGVEaXJ9L0NvZGUvZGF0YS91c2VyLWRhdGEvVXNlci9zZXR0aW5ncy5qc29uYDtcclxuICAgICAgICAgICAgICAgIGxldCBzZXR0aW5nc0pzb25PYmogPSB7fTtcclxuICAgICAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHNldHRpbmdzSnNvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5nc0pzb25PYmogPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhzZXR0aW5nc0pzb24pLnRvU3RyaW5nKCd1dGYtOCcpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBzZXR0aW5nWG1sID0gcGF0aC5yZXNvbHZlKGAke21hdmVuSG9tZX0vY29uZi9zZXR0aW5ncy54bWxgKTtcclxuICAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhzZXR0aW5nWG1sKSAmJiAhZnMuZXhpc3RzU3luYyhgJHtkaXJ9L3NldHRpbmdzLnhtbGApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgJHt3Z2V0fSAke1JTX1VSTH0vc2V0dGluZ3MueG1sYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ1htbCA9IHBhdGgucmVzb2x2ZShgJHtkaXJ9L3NldHRpbmdzLnhtbGApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0pzb25PYmpbXCJqYXZhLmNvbmZpZ3VyYXRpb24ubWF2ZW4uZ2xvYmFsU2V0dGluZ3NcIl0gPSBzZXR0aW5nWG1sO1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NKc29uT2JqW1wiamF2YS5jb25maWd1cmF0aW9uLm1hdmVuLnVzZXJTZXR0aW5nc1wiXSA9IHNldHRpbmdYbWw7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0pzb25PYmpbXCJtYXZlbi5zZXR0aW5nc0ZpbGVcIl0gPSBzZXR0aW5nWG1sO1xyXG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhzZXR0aW5nc0pzb24sIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzSnNvbk9iaiwgbnVsbCwgNCkpO1xyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOWIneWni+WMlllEUyBJREUg5YWo5bGA6YWN572u5a6M5oiQYCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8g5qOA5p+l5b2T5YmN55So5oi355uu5b2V5LiLLnNzaOaYr+WQpuWtmOWcqCBpZF9lZDI1NTE5LnB1YiDlr4bpkqXmlofku7bvvIzlpoLmnpzmsqHmnInliJnmlL7liLAuc3NoIOebruW9leS4i1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3NoRGlyID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52LlVTRVJQUk9GSUxFLCAnLnNzaCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHNzaERpcikpIHtcclxuICAgICAgICAgICAgICAgICAgICBmcy5ta2RpclN5bmMoc3NoRGlyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhgJHtzc2hEaXJ9L2lkX2VkMjU1MTkucHViYCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5ou36LSd5a+G6ZKl5paH5Lu2YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnMuY29weUZpbGVTeW5jKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9pZF9lZDI1NTE5LnB1YicpLCBgJHtzc2hEaXJ9L2lkX2VkMjU1MTkucHViYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnMuY29weUZpbGVTeW5jKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9pZF9lZDI1NTE5JyksIGAke3NzaERpcn0vaWRfZWQyNTUxOWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDmi7fotJ3lr4bpkqXmlofku7blrozmiJBgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnRmlsZUNyZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg6YWN572u5paH5Lu2eWRzLmpzb27lt7Lnu4/nlJ/miJDvvIzor7fkvb/nlKjnvJbovpHlmajlr7nphY3nva7lhoXlrrnov5vooYzkv67mlLlgKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOWIneWni+WMlllEU+WItuebmOeOr+Wig+WujOaIkO+8jOWmguaenOaYr+mmluasoeaJp+ihjOivt+WFs+mXreW9k+WJjeeql+WPo++8jOW5tumHjeaWsOaJk+W8gGApXHJcbiAgICAgICAgICAgIH0pLmhvb2soJ3Bvc3RBY3Rpb24nLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5aaC5p6c5omn6KGM6L+H56iL5Lit5Ye6546w5oql6ZSZ6K+35YWz6Zet5b2T5YmN57uI56uv77yM6YeN5ZCv57uI56uv5ZCO5omn6KGMIHlkcyBpbml0IOebtOWIsOaXoOaKpemUmeWGheWuueS4uuatomApXHJcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBwcm9ncmFtXHJcbiAgICAgICAgICAgIC5jb21tYW5kKCdzdGFydCA8Y2F0YWxvZz4gW3dvcmtkaXJdJylcclxuICAgICAgICAgICAgLnVzYWdlKCdzdGFydCA8Y2F0YWxvZz4gW3dvcmtkaXJdJylcclxuICAgICAgICAgICAgLm9wdGlvbignLWYsIC0tZmlsZSA8ZmlsZT4nLCAn6YWN572u5paH5Lu2JylcclxuICAgICAgICAgICAgLmFkZEhlbHBUZXh0KCdhZnRlcicsIGDphY3nva7mlofku7blhoXlrrnnpLrkvovvvJoke2NvbmZFZ31gKVxyXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oJ+WQr+WKqOWItuebmOeOr+Wig++8jGNhdGFsb2fooajnpLrpnIDopoHliLbnm5jnmoTmqKHlnZfvvIzlr7nlupTphY3nva7mlofku7bkuK1jYXRhbG9nc+eahGtleeWAvO+8jOeUqOS6juaMh+WumumcgOimgeWHuuebmOeahOS/oeaBr++8jHdvcmtkaXLooajnpLrliLbnm5jlt6XkvZznm67lvZXvvIzlpoLmnpzkuI3mjIflrprliJnkvb/nlKjlvZPliY3nm67lvZUnKVxyXG4gICAgICAgICAgICAuYWN0aW9uKGFzeW5jIChjYXRhbG9nOiBzdHJpbmcsIHdvcmtkaXI6IHN0cmluZyA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpKSwgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgZmlsZTogc3RyaW5nXHJcbiAgICAgICAgICAgIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpciA9IHBhdGgucmVzb2x2ZSh3b3JrZGlyKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzmnKrmjIflrprphY3nva7mlofku7ZcclxuICAgICAgICAgICAgICAgIGxldCB5ZHNKc29uOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5maWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeWRzSnNvbiA9IHBhdGgucmVzb2x2ZShvcHRpb25zLmZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOivu+WPlumFjee9ruaWh+S7tlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh5ZHNKc29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYOacquaJvuWIsOmFjee9ruaWh+S7tiAke3lkc0pzb259YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHlkc0pzb24gPSBwYXRoLnJlc29sdmUoYCR7ZGlyfS95ZHMuanNvbmApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOivu+WPlumFjee9ruaWh+S7tlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh5ZHNKc29uKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYOivt+mAmui/h+WPguaVsCAtZiDmjIflrprpnIDopoHkvb/nlKjnmoTphY3nva7mlofku7bmiJbogIXlnKjlvZPliY3nm67lvZXkuIvliJvlu7p5ZHMuanNvbuaWh+S7tu+8jOWGheWuueWPguiAgyR7Y29uZkVnfWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDlvIDlp4vliLbnm5ggJHtjYXRhbG9nfSDlt6XkvZznm67lvZXvvJoke2Rpcn1gKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5byA5aeL5qOA5rWL5Yi255uY546v5aKD5qOA5rWLYCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZ2l0Q21kID0gJ2dpdCc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBnaXRFeGlzdHMgPSBhd2FpdCB1dGlsLmNtZC5leGlzdHMoZ2l0Q21kKTtcclxuICAgICAgICAgICAgICAgIGlmICghZ2l0RXhpc3RzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2l0Q21kID0gYCR7ZGlyfS9naXQtZm9yLXdpbmRvd3MvYmluL2dpdC5leGVgO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhnaXRDbWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihg5pyq5om+5YiwZ2l05ZG95LukICR7Z2l0Q21kfSwg6K+35YWI5omn6KGMIGluaXQg5Yid5aeL5YyW5Yi255uY546v5aKDYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgc2V0dGluZ1htbCA9IHBhdGgucmVzb2x2ZShgJHtkaXJ9L3NldHRpbmdzLnhtbGApO1xyXG4gICAgICAgICAgICAgICAgbGV0IG12bkNtZCA9ICdtdm4nO1xyXG4gICAgICAgICAgICAgICAgbGV0IG12bkV4aXN0cyA9IGF3YWl0IHV0aWwuY21kLmV4aXN0cyhtdm5DbWQpO1xyXG4gICAgICAgICAgICAgICAgbGV0IG1hdmVuSG9tZSA9IGAke2Rpcn0vbWF2ZW4tMy44LjZgO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG1hdmVuSG9tZSkpIHsgLy8g5L2/55So5YWo5bGAbWF2ZW5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmsqHmnIlzZXR0aW5ncyDkuIvovb1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoc2V0dGluZ1htbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYOacquaJvuWIsG1hdmVu6YWN572u5paH5Lu2ICR7c2V0dGluZ1htbH0sIOS4i+i9vXNldHRpbmdzLnhtbOaWh+S7tmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGAke3dnZXR9ICR7UlNfVVJMfS9zZXR0aW5ncy54bWxgLCBkaXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbXZuQ21kID0gYFwiJHttYXZlbkhvbWV9L2Jpbi9tdm4uY21kXCJgO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdYbWwgPSBgJHttYXZlbkhvbWV9L2NvbmYvc2V0dGluZ3MueG1sYDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgaWRlUGF0aCA9IGAke2Rpcn0veWRzLTEuMC4zYFxyXG4gICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGlkZVBhdGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGDmnKrmib7liLBJREUgJHtpZGVQYXRofSwg6K+35YWI5omn6KGMIGluaXQg5Yid5aeL5YyW5Yi255uY546v5aKDYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOWItuebmOeOr+Wig+ajgOa1i+WujOaIkGApXHJcbiAgICAgICAgICAgICAgICBsZXQgeWRzSnNvblN0ciA9IGZzLnJlYWRGaWxlU3luYyh5ZHNKc29uKS50b1N0cmluZygndXRmLTgnKTtcclxuICAgICAgICAgICAgICAgIC8vIOabv+aNouaJgOaciSMg5byA5aS055qE5rOo6YeK6K+05piO6KGMXHJcbiAgICAgICAgICAgICAgICB5ZHNKc29uU3RyID0geWRzSnNvblN0ci5yZXBsYWNlKC9eIy4qL2dtLCAnJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8g5qOA5rWL6YWN572u5paH5Lu25piv5ZCm5a6M5pW0XHJcbiAgICAgICAgICAgICAgICBsZXQgY29uZmlnOiBZZHNDb25maWc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja0NvbmZpZ0Vycm9yID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihg6YWN572u5paH5Lu2ICR7eWRzSnNvbn0g5qC85byP6ZSZ6K+vIOWPguiAg+ekuuS+i++8miR7Y29uZkVnfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gSlNPTi5wYXJzZSh5ZHNKc29uU3RyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZy5jYXRhbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0NvbmZpZ0Vycm9yKClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tDb25maWdFcnJvcigpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBnaXQgPSBjb25maWcuZ2l0O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2F0YWxvZ0NvbmZpZyA9IGNvbmZpZy5jYXRhbG9nc1tjYXRhbG9nXTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2F0YWxvZ0NvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYOmFjee9ruaWh+S7tiAke3lkc0pzb259IOaJvuS4jeWIsCBjYXRhbG9ncy4ke2NhdGFsb2d9IOWFiOWFs+mFjee9rmApO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2F0YWxvZ0NvbmZpZy5ocmNwZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGNhdGFsb2dDb25maWcuZmVjb2RlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihg6YWN572u5paH5Lu2ICR7eWRzSnNvbn0gY2F0YWxvZ3MuJHtjYXRhbG9nfS5ocmNwZSDmiJYgY2F0YWxvZ3MuJHtjYXRhbG9nfS5mZWNvZGUg5a2X5q6157y65aSxYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVzcGFjZSA9IGAke2Rpcn0vJHtjYXRhbG9nfWA7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMobmFtZXNwYWNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDliJvlu7rnm67lvZUgJHtuYW1lc3BhY2V9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnMubWtkaXJTeW5jKG5hbWVzcGFjZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDnm67lvZUgJHtuYW1lc3BhY2V9IOW3suWtmOWcqGApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGhyY3BlVXJsID0gdHlwZW9mIGNhdGFsb2dDb25maWcuaHJjcGUgPT09ICdzdHJpbmcnID8gZ2l0Py5ocmNwZSA6IGNhdGFsb2dDb25maWcuaHJjcGUudXJsO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFocmNwZVVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihg6YWN572u5paH5Lu2ICR7eWRzSnNvbn0gY2F0YWxvZ3MuJHtjYXRhbG9nfSDlkI7nq6/mnI3liqEg5pyq5oyH5a6a5LuT5bqT5Zyw5Z2A77yM6K+36YCa6L+HIGdpdC5ocmNwZSDmiJbogIUgY2F0YWxvZ3MuJHtjYXRhbG9nfS5ocmNwZS51cmwg5oyH5a6a5LuT5bqT5Zyw5Z2AYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5byA5aeL5ouJ5Y+W5ZCO56uv5pyN5Yqh5LuT5bqTICR7aHJjcGVVcmx9YCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhgJHtuYW1lc3BhY2V9Ly5naXRgKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDnm67lvZUgJHtuYW1lc3BhY2V9IOW3suWtmOWcqO+8jOW8gOWni+abtOaWsOS7k+W6k2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV4ZWNDbWQoYFwiJHtnaXRDbWR9XCIgcHVsbGAsIG5hbWVzcGFjZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDnm67lvZUgJHtuYW1lc3BhY2V9IOS4jeWtmOWcqO+8jOW8gOWni+WIm+W7uuS7k+W6k2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBicmFuY2ggPSB0eXBlb2YgY2F0YWxvZ0NvbmZpZy5ocmNwZSA9PT0gJ3N0cmluZycgPyBjYXRhbG9nQ29uZmlnLmhyY3BlIDogY2F0YWxvZ0NvbmZpZy5ocmNwZS5icmFuY2g7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFicmFuY2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGDphY3nva7mlofku7YgJHt5ZHNKc29ufSBjYXRhbG9ncy4ke2NhdGFsb2d9IOWQjuerr+acjeWKoSDmnKrmjIflrprliIbmlK/vvIzor7fpgJrov4cgZ2l0LmhyY3BlIOaIluiAhSBjYXRhbG9ncy4ke2NhdGFsb2d9LmhyY3BlLmJyYW5jaCDphY3nva7liIbmlK9gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGBcIiR7Z2l0Q21kfVwiIGNsb25lIC1iICR7YnJhbmNofSAke2hyY3BlVXJsfSAke25hbWVzcGFjZX1gLCBuYW1lc3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOaLieWPluWQjuerr+acjeWKoeS7k+W6k+WujOaIkGApO1xyXG4gICAgICAgICAgICAgICAgbGV0IGJvb3N0cmFwUG9tWG1sID0gYCR7bmFtZXNwYWNlfS8ke2RvbWFpbktleX0tYmUvZGV2LSR7ZG9tYWluS2V5fS1ib290c3RyYXAvcG9tLnhtbGA7XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5pu/5o2i5paH5Lu2ICR7Ym9vc3RyYXBQb21YbWx9IOS4reeahFJPT1TkuLpkb21haW5LZXnvvIzlkKbliJnkvJrlr7zoh7TliLbnm5jlpLHotKXvvIzml6Dms5Xmib7liLDliLblk4FgKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvb3N0cmFwUG9tWG1sU3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGJvb3N0cmFwUG9tWG1sKS50b1N0cmluZygndXRmLTgnKTtcclxuICAgICAgICAgICAgICAgIGlmIChib29zdHJhcFBvbVhtbFN0cmluZy5pbmNsdWRlcygnUk9PVCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhib29zdHJhcFBvbVhtbCwgYm9vc3RyYXBQb21YbWxTdHJpbmcucmVwbGFjZSgvUk9PVC9nLCBkb21haW5LZXkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmhvc3RzICYmIGNvbmZpZy5ob3N0cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5a2Y5ZyoaG9zdHPphY3nva7vvIzmo4DmtYvns7vnu59ob3N0c+mFjee9ruaWh+S7tuaYr+WQpuW3sue7j+mFjee9rmApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBob3N0c0ZpbGUgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuV0lORElSLCAnU3lzdGVtMzInLCAnZHJpdmVycycsICdldGMnLCAnaG9zdHMnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBob3N0TGlzdCA9IGZzLnJlYWRGaWxlU3luYyhob3N0c0ZpbGUpLnRvU3RyaW5nKCd1dGYtOCcpLnNwbGl0KCdcXG4nKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXBwZW5kSG9zdHMgPSBbLi4uY29uZmlnLmhvc3RzXVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGhvc3RJdGVtIG9mIGhvc3RMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvIy8udGVzdChob3N0SXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGFwcGVuZEhvc3Qgb2YgY29uZmlnLmhvc3RzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbaXAsIGRvbWFpbl0gPSBhcHBlbmRIb3N0LnNwbGl0KCcgJykuZmlsdGVyKGl0ZW0gPT4gaXRlbSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChob3N0SXRlbS5pbmNsdWRlcyhpcCkgJiYgaG9zdEl0ZW0uaW5jbHVkZXMoZG9tYWluKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDns7vnu59ob3N0c+mFjee9ruaWh+S7tuW3suWtmOWcqCAke2FwcGVuZEhvc3R9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSG9zdHMucmVtb3ZlKGFwcGVuZEhvc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOivu+WPluezu+e7n2hvc3Rz6YWN572u5paH5Lu2XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFwcGVuZEhvc3RzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBZG1pbigpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcy5hcHBlbmRGaWxlU3luYyhob3N0c0ZpbGUsIGBcXG4ke2FwcGVuZEhvc3RzLmpvaW4oJ1xcbicpfVxcbmAsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogJ3V0Zi04J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihg5b2T5YmN6Z2e566h55CG5ZGY5ZCv5Yqo5peg5rOV5pu05pS5aG9zdHPmlofku7bvvIzor7fkvb/nlKjnrqHnkIblkZjlkK/liqjmiJbogIXmiYvliqjmt7vliqAgJHthcHBlbmRIb3N0cy5qb2luKCdcXG4nKX0g5Yiw5paH5Lu2ICR7aG9zdHNGaWxlfWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBob3N0cyDphY3nva7mo4DmtYvlrozmiJBgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygn5Yid5aeL5YyW6aG555uubWF2ZW7njq/looMnKTtcclxuICAgICAgICAgICAgICAgIGxldCBtdm5Db25maWdEaXIgPSBgJHtuYW1lc3BhY2V9Ly5tdm5gO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKG12bkNvbmZpZ0RpcikpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGAke212bkNtZH0gLU4gaW8udGFrYXJpOm1hdmVuOndyYXBwZXIgLURtYXZlbj0zLjguNmAsIG5hbWVzcGFjZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyDlhpnlhaVtYXZlbumFjee9ruWIsCAubXZuL21hdmVuLmNvbmZpZ1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbmZpZ0ZpbGUgPSBgJHttdm5Db25maWdEaXJ9L21hdmVuLmNvbmZpZ2A7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhjb25maWdGaWxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZzLnJtU3luYyhjb25maWdGaWxlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhgJHttdm5Db25maWdEaXJ9L21hdmVuLmNvbmZpZ2AsIGAtc1xcbiR7c2V0dGluZ1htbH1cXG4tRG1hdmVuLndhZ29uLmh0dHAuc3NsLmluc2VjdXJlPXRydWVcXG4tRG1hdmVuLndhZ29uLmh0dHAuc3NsLmFsbG93YWxsPXRydWVgKTtcclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKGDlvZPliY1tYXZlbuS/oeaBr2ApXHJcbiAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGAke212bkNtZH0gLS12ZXJzaW9uYCwgbmFtZXNwYWNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygn6aG555uubWF2ZW7muIXnkIYnKVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgJHttdm5DbWR9IGNsZWFuIC1Ec2tpcFRlc3RzYCwgYCR7bmFtZXNwYWNlfS8ke2RvbWFpbktleX0tYmVgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygn5aSE55CG5YmN56uv5p6E5bu677yM5aKe5Yqg5p6E5bu65paH5Lu2Jyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmVEaXIgPSBgJHtuYW1lc3BhY2V9LyR7ZG9tYWluS2V5fS1mZWA7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmVCdWlsZEpzID0gYCR7ZmVEaXJ9L2J1aWxkLmpzYDtcclxuICAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhmZUJ1aWxkSnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnMuY3BTeW5jKHBhdGguam9pbihfX2Rpcm5hbWUgLCcuLi9mZS1idWlsZC5qcycpLCBmZUJ1aWxkSnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGZlUGFja2FnZUpzb24gPSBgJHtmZURpcn0vcGFja2FnZS5qc29uYDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VTdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZmVQYWNrYWdlSnNvbikudG9TdHJpbmcoJ3V0Zi04Jyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXBhY2thZ2VTdHJpbmcuaW5jbHVkZXMoJ2J1aWxkLmpzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5L+u5pS5JHtmZVBhY2thZ2VKc29ufWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShwYWNrYWdlU3RyaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICBwYWNrYWdlSnNvbi5zY3JpcHRzWydidWlsZDpleHRlbmQnXSArPSAnICYmIG5vZGUgYnVpbGQuanMnO1xyXG4gICAgICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZmVQYWNrYWdlSnNvbiwgSlNPTi5zdHJpbmdpZnkocGFja2FnZUpzb24sIG51bGwsIDQpKTtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5L+u5pS5JHtmZVBhY2thZ2VKc29ufeWujOaIkGApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgZmVjb2RlVXJsID0gdHlwZW9mIGNhdGFsb2dDb25maWcuZmVjb2RlID09PSAnc3RyaW5nJyA/IGdpdD8uZmVjb2RlIDogY2F0YWxvZ0NvbmZpZy5mZWNvZGUudXJsO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmZWNvZGVVcmwpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYOmFjee9ruaWh+S7tiAke3lkc0pzb259IGNhdGFsb2dzLiR7Y2F0YWxvZ30g5ZCO56uv5pyN5YqhIOacquaMh+WumuS7k+W6k+WcsOWdgO+8jOivt+mAmui/hyBnaXQuZmVjb2RlIOaIluiAhSBjYXRhbG9ncy4ke2NhdGFsb2d9LmZlY29kZS51cmwg5oyH5a6a5LuT5bqT5Zyw5Z2AYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5byA5aeL5ouJ5Y+W5oql5ZGK5pyN5Yqh5LuT5bqTICR7ZmVjb2RlVXJsfWApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlcG9ydE5hbWVzcGFjZSA9IGAke25hbWVzcGFjZX0veW9uYmlwLXlpc3YtaXpwMS1kZXYtZmVjb2RlYDtcclxuICAgICAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGAke3JlcG9ydE5hbWVzcGFjZX0vLmdpdGApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOebruW9lSAke3JlcG9ydE5hbWVzcGFjZX0g5bey5a2Y5Zyo77yM5byA5aeL5pu05paw5LuT5bqTYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY0NtZChgXCIke2dpdENtZH1cIiBwdWxsYCwgcmVwb3J0TmFtZXNwYWNlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOebruW9lSAke3JlcG9ydE5hbWVzcGFjZX0g5LiN5a2Y5Zyo77yM5byA5aeL5Yib5bu65LuT5bqTYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJyYW5jaCA9IHR5cGVvZiBjYXRhbG9nQ29uZmlnLmZlY29kZSA9PT0gJ3N0cmluZycgPyBjYXRhbG9nQ29uZmlnLmZlY29kZSA6IGNhdGFsb2dDb25maWcuZmVjb2RlLmJyYW5jaDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWJyYW5jaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYOmFjee9ruaWh+S7tiAke3lkc0pzb259IGNhdGFsb2dzLiR7Y2F0YWxvZ30g5oql5ZGK5pyN5Yqh5pyq5oyH5a6a5YiG5pSv77yM6K+36YCa6L+HIGdpdC5mZWNvZGUg5oiW6ICFIGNhdGFsb2dzLiR7Y2F0YWxvZ30uZmVjb2RlLmJyYW5jaCDphY3nva7liIbmlK9gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGBcIiR7Z2l0Q21kfVwiIGNsb25lIC1iICR7YnJhbmNofSAke2ZlY29kZVVybH0gJHtyZXBvcnROYW1lc3BhY2V9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5ouJ5Y+W5oql5ZGK5pyN5Yqh5LuT5bqT5a6M5oiQYCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ+WkhOeQhuaKpeWRiuaehOW7uu+8jOWinuWKoOaehOW7uuaWh+S7ticpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZlY29kZUJ1aWxkSnMgPSBgJHtyZXBvcnROYW1lc3BhY2V9L2J1aWxkLmpzYDtcclxuICAgICAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhmZWNvZGVCdWlsZEpzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZzLmNwU3luYyhwYXRoLmpvaW4oX19kaXJuYW1lICwnLi4vZmVjb2RlLWJ1aWxkLmpzJyksIGZlY29kZUJ1aWxkSnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IGZlY29kZVBhY2thZ2VKc29uID0gYCR7cmVwb3J0TmFtZXNwYWNlfS9wYWNrYWdlLmpzb25gO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmVjb2RlUGFja2FnZVN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhmZWNvZGVQYWNrYWdlSnNvbikudG9TdHJpbmcoJ3V0Zi04Jyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZlY29kZVBhY2thZ2VTdHJpbmcuaW5jbHVkZXMoJ2J1aWxkLmpzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5L+u5pS5JHtmZWNvZGVQYWNrYWdlSnNvbn1gKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZmVjb2RlUGFja2FnZVN0cmluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFja2FnZUpzb24uc2NyaXB0c1snYnVpbGQnXSArPSAnICYmIG5vZGUgYnVpbGQuanMnO1xyXG4gICAgICAgICAgICAgICAgICAgIHBhY2thZ2VKc29uLmRvbWFpbktleSA9IGRvbWFpbktleTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDliKDpmaTmraTkvp3otZYg5Lya5a+86Ie0bnBtIGkg5aSx6LSlXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhY2thZ2VKc29uLmRlcGVuZGVuY2llcy56bGliXHJcbiAgICAgICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmZWNvZGVQYWNrYWdlSnNvbiwgSlNPTi5zdHJpbmdpZnkocGFja2FnZUpzb24sIG51bGwsIDQpKTtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5L+u5pS5JHtmZWNvZGVQYWNrYWdlSnNvbn3lrozmiJBgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5a6J6KOF5oql5ZGK5pyN5Yqh5L6d6LWWYCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKCducG0gaScsIHJlcG9ydE5hbWVzcGFjZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOeUn+aIkHZlcnNpb24uanNvbiDmlofku7ZgKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IHJhbmRvbVVVSUQoKS50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGAke3JlcG9ydE5hbWVzcGFjZX0vdmVyc2lvbi5qc29uYCwgYHtcInZlcnNpb25cIjogXCIke3V1aWR9XCJ9YCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ+WIneWni+WMlumhueebrueOr+Wig+i1hOa6kCcpO1xyXG4gICAgICAgICAgICAgICAgLy8g5aaC5p6cIG5hbWVzcGFjZS8oZGlza3xkaXNrcykg5aaC5p6c5a2Y5ZyoIOi3s+i/h1xyXG4gICAgICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoYCR7bmFtZXNwYWNlfS9kaXNrYCkgfHwgZnMuZXhpc3RzU3luYyhgJHtuYW1lc3BhY2V9L2Rpc2tzYCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhg5bey5a2Y5Zyo77yM6Lez6L+H546v5aKD6LWE5rqQ5paH5Lu25LiL6L29YCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZGZzLnpoaXBlci5jb20vdjNyNi9lbnYuemlwXHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOW8gOWni+S4i+i9vemhueebrueOr+Wig+i1hOa6kOaWh+S7tmApXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdpdFppcEZpbGUgPSBgJHtuYW1lc3BhY2V9L2Vudi56aXBgO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV4ZWNDbWQoYCR7d2dldH0gJHtSU19VUkx9L2Vudi56aXAgLU8gXCIke2dpdFppcEZpbGV9XCJgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYOino+WOi+i1hOa6kOaWh+S7tuWMhSAke2dpdFppcEZpbGV9YClcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBleGVjQ21kKGBcIiR7dW56aXB9XCIgXCIke2dpdFppcEZpbGV9XCJgLCBuYW1lc3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZzLnJtU3luYyhnaXRaaXBGaWxlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCflkK/liqhJREUnKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGV4ZWNDbWQoYFwiJHtpZGVQYXRofS9Db2RlL2Jpbi9jb2RlXCIgLS1uby1zYW5kYm94IC0tbG9nIGRlYnVnIC0tZ290byBcIiR7aWRlUGF0aH0vQ29kZS9kYXRhL3VzZXItZGF0YS9Vc2VyL3NldHRpbmdzLmpzb25cIiBcIiR7bmFtZXNwYWNlfVwiYCk7XHJcbiAgICAgICAgICAgICAgICAvLyDpnIDopoHnrYnlvoVJREXlkK/liqjlrozmiJDlkI7lhbPpl61cclxuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAzMDAwKSlcclxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCflt7LlkK/liqhJREXvvIzngrnlh7vlt6bkvqfoj5zljZXpgInmi6nigJxZRFPigJ3vvIzor7fmjInnhafmlofmoaPor7TmmI7ov5vooYzliLbnm5jmk43kvZwnKTtcclxuICAgICAgICAgICAgfSkuaG9vaygncG9zdEFjdGlvbicsICgpID0+IHByb2Nlc3MuZXhpdCgwKSk7XHJcblxyXG4gICAgICAgIHByb2dyYW0ucGFyc2UocHJvY2Vzcy5hcmd2KVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yds-tool",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "isv本地制盘工具",
5
5
  "main": "./bin/index.js",
6
6
  "bin": {
package/src/main.ts CHANGED
@@ -131,7 +131,8 @@ export default class Main {
131
131
 
132
132
  const gitExists = await util.cmd.exists('git');
133
133
  logger.info(`检查是否安装了git >> ${gitExists ? '已安装' : '未安装'}`);
134
- if (!gitExists && !fs.existsSync(`${dir}/git-for-windows`)) {
134
+ const gitHome = `${dir}/git-for-windows`
135
+ if (!gitExists && !fs.existsSync(gitHome)) {
135
136
  const gitZipName = 'git-for-windows.zip'
136
137
  logger.info(`下载git 安装包 ${gitZipName}`);
137
138
  const gitZipFile = `${dir}/${gitZipName}`;
@@ -144,6 +145,8 @@ export default class Main {
144
145
  await execCmd(`${wget} ${RS_URL}/${gitZipName} -O "${gitZipFile}"`);
145
146
  logger.info(`解压安装包 ${gitZipFile}`)
146
147
  await execCmd(`"${unzip}" "${gitZipFile}" -d "${dir}"`);
148
+ logger.info(`配置git环境变量`);
149
+ await execCmd( `setx PATH "%PATH%;${gitHome}\\bin;"` );
147
150
  fs.rmSync(gitZipFile)
148
151
  logger.info(`git 安装完成`);
149
152
  }
@@ -196,7 +199,7 @@ export default class Main {
196
199
  }
197
200
 
198
201
  const mavenHome = `${dir}/maven-3.8.6`;
199
- const mavenExists = util.cmd.exists('mvn');
202
+ const mavenExists = await util.cmd.exists('mvn');
200
203
  logger.info(`检查是否安装了maven >> ${mavenExists ? '已安装' : '未安装'}`);
201
204
  if (!mavenExists) {
202
205
  const mavenZipName = 'maven-3.8.6.zip'
@@ -227,7 +230,7 @@ export default class Main {
227
230
  }
228
231
 
229
232
  logger.info(`初始化node环境`);
230
- await execCmd('npm install -g pnpm typescript --registry=https://registry.npmmirror.com');
233
+ await execCmd('npm install -g typescript --registry=https://registry.npmmirror.com');
231
234
  logger.info(`初始化node环境完成`);
232
235
 
233
236
  logger.info(`检测code是否存在`)
@@ -283,7 +286,10 @@ export default class Main {
283
286
  logger.info(`配置文件yds.json已经生成,请使用编辑器对配置内容进行修改`)
284
287
  }
285
288
  logger.info(`初始化YDS制盘环境完成,如果是首次执行请关闭当前窗口,并重新打开`)
286
- }).hook('postAction', () => process.exit(0));
289
+ }).hook('postAction', () => {
290
+ logger.info(`如果执行过程中出现报错请关闭当前终端,重启终端后执行 yds init 直到无报错内容为止`)
291
+ process.exit(0)
292
+ });
287
293
 
288
294
  program
289
295
  .command('start <catalog> [workdir]')
@@ -329,14 +335,17 @@ export default class Main {
329
335
 
330
336
  let settingXml = path.resolve(`${dir}/settings.xml`);
331
337
  let mvnCmd = 'mvn';
332
- if (!fs.existsSync(settingXml)) {
333
- let mavenHome = `${dir}/maven-3.8.6`;
338
+ let mvnExists = await util.cmd.exists(mvnCmd);
339
+ let mavenHome = `${dir}/maven-3.8.6`;
340
+ if (!fs.existsSync(mavenHome)) { // 使用全局maven
341
+ // 没有settings 下载
342
+ if (!fs.existsSync(settingXml)) {
343
+ logger.warn(`未找到maven配置文件 ${settingXml}, 下载settings.xml文件`);
344
+ await execCmd(`${wget} ${RS_URL}/settings.xml`, dir);
345
+ }
346
+ } else {
334
347
  mvnCmd = `"${mavenHome}/bin/mvn.cmd"`;
335
348
  settingXml = `${mavenHome}/conf/settings.xml`;
336
- if (!fs.existsSync(mvnCmd)) {
337
- logger.error(`未找到mvn命令 ${mvnCmd}, 请先执行 init 初始化制盘环境`);
338
- process.exit(1)
339
- }
340
349
  }
341
350
 
342
351
  let idePath = `${dir}/yds-1.0.3`