oxygen-cli 1.30.0 → 1.30.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v1.30.2 (2023-08-31)
4
+
5
+ #### :beetle: Bug Fix
6
+ * Fix parallel case execution inside suites.
7
+
8
+ ## v1.30.1 (2023-08-29)
9
+
10
+ #### :beetle: Bug Fix
11
+ * Fix step's Warning status not being properly processed.
12
+ * Improve the way test result status for suites with Skipped and Warning statuses is determined.
13
+
3
14
  ## v1.30.0 (2023-08-15)
4
15
 
5
16
  #### :tada: New Feature
@@ -38,11 +38,11 @@ class ParallelLauncher {
38
38
  }
39
39
 
40
40
  if (!this._config.parallel.mode) {
41
- this._config.parallel.mode = 'suite';
41
+ this._config.parallel.mode = 'case';
42
42
  }
43
43
 
44
44
  const workersCount = !isNaN(this._config.parallel.workers) ? this._config.parallel.workers : 1;
45
- const mode = this._config.parallel.mode === 'iteration' ? 'iteration' : this._config.parallel.mode === 'case' ? 'case' : 'suite';
45
+ const mode = this._config.parallel.mode === 'iteration' ? 'iteration' : this._config.parallel.mode === 'suite' ? 'suite' : 'case';
46
46
  const suites = this._config.suites;
47
47
  const resultName = this._config.name || '';
48
48
 
@@ -129,7 +129,6 @@ class ParallelLauncher {
129
129
 
130
130
  suiteIndex++;
131
131
  });
132
- console.log('Collections length', collection.length);
133
132
  const start = new Date();
134
133
  await (0, _parallelLimit.default)(collection, workersCount);
135
134
  let total = 0;
@@ -252,4 +251,4 @@ class ParamManagerMock {
252
251
  }
253
252
 
254
253
  }
255
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGFyYWxsZWwtbGF1bmNoZXIuanMiXSwibmFtZXMiOlsiRHVyYXRpb24iLCJyZXF1aXJlIiwiaGFzaCIsIlBhcmFsbGVsTGF1bmNoZXIiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsInJlcG9ydGVyIiwiX2NvbmZpZyIsIl9xdWV1ZSIsInJ1bm5lcnMiLCJjcmVhdGVkUnVubmVyc1N0YXQiLCJydW4iLCJjYXBzU2V0IiwiY29sbGVjdGlvbiIsInBhcmFsbGVsIiwiRXJyb3IiLCJtb2RlIiwid29ya2Vyc0NvdW50IiwiaXNOYU4iLCJ3b3JrZXJzIiwic3VpdGVzIiwicmVzdWx0TmFtZSIsIm5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJ0ZXN0Q2FwcyIsInJlc3VsdEhhc2giLCJyZXN1bHRLZXkiLCJzdWl0ZUluZGV4IiwiZm9yRWFjaCIsInN1aXRlRGVmIiwic3VpdGVLZXkiLCJrZXkiLCJpZCIsImkiLCJpdGVyYXRpb25Db3VudCIsIm1vY2tlZFBhcmFtTWFuYWdlciIsInVuZGVmaW5lZCIsInBhcmFtTWFuYWdlciIsIlBhcmFtTWFuYWdlck1vY2siLCJnZXRWYWx1ZXMiLCJyZWFkTmV4dCIsIndvcmtlcklkIiwic3VpdGVDb3B5IiwidGVzdENvbmZpZyIsIl9ncm91cFJlc3VsdCIsIndvcmtlckNvbmZpZyIsInN0YXJ0dXBEZWxheSIsInB1c2giLCJjYWxsYmFjayIsIl9sYXVuY2hXb3JrZXJGdW5jIiwiY2FzZXMiLCJjYXNlSW5kZXgiLCJjYXNlRGVmIiwiY2FzZUtleSIsImNvbnNvbGUiLCJsb2ciLCJsZW5ndGgiLCJzdGFydCIsIkRhdGUiLCJ0b3RhbCIsInJ1bm5lcnNJZHMiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwiaXRlbSIsImNhemVzIiwiZW5kIiwiZHVyYXRpb24iLCJ0b1N0cmluZyIsImNiIiwiZXJyb3IiLCJfbGF1bmNoVGVzdCIsInRoZW4iLCJyZXN1bHQiLCJjYXRjaCIsIl9pbnN0YW50aWF0ZVJ1bm5lciIsImZyYW1ld29yayIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIlJ1bm5lcnMiLCJveHlnZW4iLCJfc2xlZXAiLCJydW5uZXIiLCJfaWQiLCJpbml0IiwiZGlzcG9zZSIsInN0YXR1cyIsImUiLCJraWxsIiwiZXJyTXNnIiwiZXJyIiwidHlwZSIsIm1lc3NhZ2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJ2YWx1ZXMiLCJnZXRNb2RlIiwicmVhZFByZXYiLCJyb3dzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFVQTs7QUFDQTs7Ozs7Ozs7QUFDQSxNQUFNQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXhCOztBQUNBLE1BQU1DLElBQUksR0FBR0QsT0FBTyxDQUFDLGFBQUQsQ0FBcEI7O0FBRWUsTUFBTUUsZ0JBQU4sQ0FBdUI7QUFDbENDLEVBQUFBLFdBQVcsQ0FBQ0MsTUFBRCxFQUFTQyxRQUFULEVBQW1CO0FBQzFCLFNBQUtDLE9BQUwsR0FBZUYsTUFBZjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0JBLFFBQWhCO0FBQ0EsU0FBS0UsTUFBTCxHQUFjLElBQWQ7QUFDQSxTQUFLQyxPQUFMLEdBQWUsRUFBZjtBQUNBLFNBQUtDLGtCQUFMLEdBQTBCLEVBQTFCO0FBQ0g7O0FBRVEsUUFBSEMsR0FBRyxDQUFDQyxPQUFELEVBQVU7QUFDZixVQUFNQyxVQUFVLEdBQUcsRUFBbkI7O0FBRUEsUUFBSSxDQUFDLEtBQUtOLE9BQUwsQ0FBYU8sUUFBbEIsRUFBNEI7QUFDeEIsWUFBTSxJQUFJQyxLQUFKLENBQVUsc0VBQVYsQ0FBTjtBQUNIOztBQUVELFFBQUksQ0FBQyxLQUFLUixPQUFMLENBQWFPLFFBQWIsQ0FBc0JFLElBQTNCLEVBQWlDO0FBQzdCLFdBQUtULE9BQUwsQ0FBYU8sUUFBYixDQUFzQkUsSUFBdEIsR0FBNkIsT0FBN0I7QUFDSDs7QUFFRCxVQUFNQyxZQUFZLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLEtBQUtYLE9BQUwsQ0FBYU8sUUFBYixDQUFzQkssT0FB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UDtBQUNIOztBQTNCa0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8vIGltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCAqIGFzIFJ1bm5lcnMgZnJvbSAnLi4vcnVubmVycyc7XHJcbmltcG9ydCBwYXJhbGxlbExpbWl0IGZyb20gJ2FzeW5jL3BhcmFsbGVsTGltaXQnO1xyXG5jb25zdCBEdXJhdGlvbiA9IHJlcXVpcmUoJ2R1cmF0aW9uJyk7XHJcbmNvbnN0IGhhc2ggPSByZXF1aXJlKCdvYmplY3QtaGFzaCcpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyYWxsZWxMYXVuY2hlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcsIHJlcG9ydGVyKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZXIgPSByZXBvcnRlcjtcclxuICAgICAgICB0aGlzLl9xdWV1ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5ydW5uZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5jcmVhdGVkUnVubmVyc1N0YXQgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBydW4oY2Fwc1NldCkge1xyXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb25maWcucGFyYWxsZWwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3RhcnQgdGhlIHBhcmFsbGVsIHRlc3RpbmcgLSBcInBhcmFsbGVsXCIgc2V0dGluZ3MgYXJlIG1pc3NpbmcuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJhbGxlbC5tb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZy5wYXJhbGxlbC5tb2RlID0gJ3N1aXRlJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHdvcmtlcnNDb3VudCA9ICFpc05hTih0aGlzLl9jb25maWcucGFyYWxsZWwud29ya2VycykgPyB0aGlzLl9jb25maWcucGFyYWxsZWwud29ya2VycyA6IDE7XHJcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMuX2NvbmZpZy5wYXJhbGxlbC5tb2RlID09PSAnaXRlcmF0aW9uJ1xyXG4gICAgICAgICAgICA/ICdpdGVyYXRpb24nIDogdGhpcy5fY29uZmlnLnBhcmFsbGVsLm1vZGUgPT09ICdjYXNlJ1xyXG4gICAgICAgICAgICAgICAgPyAnY2FzZScgOiAnc3VpdGUnO1xyXG4gICAgICAgIC8vIGZsYXR0ZW4gYWxsIHN1aXRlcyBhbmQgY3JlYXRlIG9uZSB1bmlmaWVkIGFycmF5IG9mIGFsbCB0aGUgdGVzdCBjYXNlc1xyXG4gICAgICAgIGNvbnN0IHN1aXRlcyA9IHRoaXMuX2NvbmZpZy5zdWl0ZXM7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0TmFtZSA9IHRoaXMuX2NvbmZpZy5uYW1lIHx8ICcnO1xyXG4gICAgICAgIGlmICghc3VpdGVzIHx8ICFBcnJheS5pc0FycmF5KHN1aXRlcykpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3RhcnQgdGhlIHBhcmFsbGVsIHRlc3RpbmcgLSBubyBzdWl0ZXMgYXJlIGRlZmluZWQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmIG5vIGNhcGFiaWxpdGllcyBhcmUgc3BlY2lmaWVkLCBydW4gc2luZ2xlIGluc3RhbmNlIHdpdGggZGVmYXVsdCBhcmd1bWVudHNcclxuICAgICAgICAvLyBhbHRlcm5hdGl2ZWx5LCBwaWNrIHRoZSBmaXJzdCBjYXBhYmlsaXRpZXMgc2V0IChsb2FkIHRlc3QgaXMgbGltaXRlZCB0byBhIHNpbmdsZSBicm93c2VyIHR5cGUpXHJcbiAgICAgICAgY29uc3QgdGVzdENhcHMgPSBjYXBzU2V0ID8gKEFycmF5LmlzQXJyYXkoY2Fwc1NldCkgPyBjYXBzU2V0WzBdIDogY2Fwc1NldCkgOiBudWxsO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdEhhc2ggPSB0ZXN0Q2FwcyA/IGhhc2godGVzdENhcHMpIDogJyc7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0S2V5ID0gYCR7cmVzdWx0TmFtZX0tJHtyZXN1bHRIYXNofWA7XHJcbiAgICAgICAgLy8gaWYgJ3dvcmtlcnMnIHNldCB0byBtYXggYW5kIHBhcmFtZXRlciBmaWxlIGlzIGRlZmluZWQsIFxyXG4gICAgICAgIC8vIHRoZW4gcnVuIGFzIG1hbnkgcGFyYWxsZWwgdGVzdHMgYXMgcm93cyBpbiB0aGUgZmlsZVxyXG4gICAgICAgIGxldCBzdWl0ZUluZGV4ID0gMDtcclxuICAgICAgICBzdWl0ZXMuZm9yRWFjaChzdWl0ZURlZiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1aXRlS2V5ID0gc3VpdGVEZWYua2V5IHx8IHN1aXRlRGVmLmlkIHx8IHN1aXRlRGVmLm5hbWU7XHJcbiAgICAgICAgICAgIGlmIChtb2RlID09PSAnaXRlcmF0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGk8PSBzdWl0ZURlZi5pdGVyYXRpb25Db3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1vY2tlZFBhcmFtTWFuYWdlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3VpdGVEZWYucGFyYW1NYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vY2tlZFBhcmFtTWFuYWdlciA9IG5ldyBQYXJhbU1hbmFnZXJNb2NrKHN1aXRlRGVmLnBhcmFtTWFuYWdlci5nZXRWYWx1ZXMoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlRGVmLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3JrZXJJZCA9IGAke3N1aXRlS2V5fS0ke3N1aXRlSW5kZXh9LyR7aX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1aXRlQ29weSA9IHsgLi4uc3VpdGVEZWYsIGl0ZXJhdGlvbkNvdW50OiAxLCBwYXJhbU1hbmFnZXI6IG1vY2tlZFBhcmFtTWFuYWdlciB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NvbmZpZywgc3VpdGVzOiBbIHN1aXRlQ29weSBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ3JvdXBSZXN1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29ya2VyQ29uZmlnID0geyB3b3JrZXJJZCwgdGVzdENvbmZpZywgdGVzdENhcHMsIHN0YXJ0dXBEZWxheTogMjAwIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKChjYWxsYmFjaykgPT4gdGhpcy5fbGF1bmNoV29ya2VyRnVuYyh3b3JrZXJDb25maWcsIGNhbGxiYWNrKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgYW55IG9mIGNhc2VzIGhhdmUgcGFyYW0gZmlsZSBhdHRhY2hlZFxyXG4gICAgICAgICAgICBlbHNlIGlmIChtb2RlID09PSAnY2FzZScgJiYgQXJyYXkuaXNBcnJheShzdWl0ZURlZi5jYXNlcykpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjYXNlSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgc3VpdGVEZWYuY2FzZXMuZm9yRWFjaChjYXNlRGVmID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXNlS2V5ID0gY2FzZURlZi5rZXkgfHwgY2FzZURlZi5pZCB8fCBjYXNlRGVmLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29ya2VySWQgPSBgJHtjYXNlS2V5fS0ke3N1aXRlSW5kZXh9LyR7Y2FzZUluZGV4fWA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VpdGVDb3B5ID0geyAuLi5zdWl0ZURlZiwgY2FzZXM6IFsgY2FzZURlZiBdfTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXN0Q29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jb25maWcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlczogWyBzdWl0ZUNvcHkgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2dyb3VwUmVzdWx0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZUtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29ya2VyQ29uZmlnID0geyB3b3JrZXJJZCwgdGVzdENvbmZpZywgdGVzdENhcHMsIHN0YXJ0dXBEZWxheTogMCB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaCgoY2FsbGJhY2spID0+IHRoaXMuX2xhdW5jaFdvcmtlckZ1bmMod29ya2VyQ29uZmlnLCBjYWxsYmFjaykpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2VJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWl0ZUtleSA9IHN1aXRlRGVmLmtleSB8fCBzdWl0ZURlZi5pZCB8fCBzdWl0ZURlZi5uYW1lO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgd29ya2VySWQgPSBgJHtzdWl0ZUtleX0tJHtzdWl0ZUluZGV4fWA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXN0Q29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NvbmZpZyxcclxuICAgICAgICAgICAgICAgICAgICBzdWl0ZXM6IFsgc3VpdGVEZWYgXSxcclxuICAgICAgICAgICAgICAgICAgICBfZ3JvdXBSZXN1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0S2V5LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3b3JrZXJDb25maWcgPSB7IHdvcmtlcklkLCB0ZXN0Q29uZmlnLCB0ZXN0Q2Fwcywgc3RhcnR1cERlbGF5OiAwIH07XHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnB1c2goKGNhbGxiYWNrKSA9PiB0aGlzLl9sYXVuY2hXb3JrZXJGdW5jKHdvcmtlckNvbmZpZywgY2FsbGJhY2spKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdWl0ZUluZGV4Kys7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy90aGlzLnJlcG9ydGVyLm9uQmVmb3JlU3RhcnQoY29sbGVjdGlvbi5sZW5ndGgpO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnQ29sbGVjdGlvbnMgbGVuZ3RoJywgY29sbGVjdGlvbi5sZW5ndGgpO1xyXG5cclxuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgYXdhaXQgcGFyYWxsZWxMaW1pdChjb2xsZWN0aW9uLCB3b3JrZXJzQ291bnQpO1xyXG5cclxuICAgICAgICBsZXQgdG90YWwgPSAwO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDcmVhdGVkIFJ1bm5lcnMgU3RhdCcsIHRoaXMuY3JlYXRlZFJ1bm5lcnNTdGF0KTtcclxuICAgICAgICBjb25zdCBydW5uZXJzSWRzID0gT2JqZWN0LmtleXModGhpcy5jcmVhdGVkUnVubmVyc1N0YXQpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDcmVhdGVkIFJ1bm5lcnMgY291bnQnLCBydW5uZXJzSWRzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIHJ1bm5lcnNJZHMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhemVzID0gdGhpcy5jcmVhdGVkUnVubmVyc1N0YXRbaXRlbV0ubGVuZ3RoO1xyXG4gICAgICAgICAgICB0b3RhbCArPSBjYXplcztcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1J1bm5lcicsIGl0ZW0sICcgcnVuICcsIGNhemVzLCAnIGNhc2VzJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdQYXJhbGxlbCBjb3VudCcsIHdvcmtlcnNDb3VudCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1RvdGFsOiAnLCB0b3RhbCk7XHJcbiAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG5ldyBEdXJhdGlvbihzdGFydCwgZW5kKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnRHVyYXRpb246ICcsIGR1cmF0aW9uLnRvU3RyaW5nKDEpKTtcclxuICAgICAgICAvL3RoaXMucmVwb3J0ZXIub25BZnRlckVuZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAqIFByaXZhdGUgbWV0aG9kc1xyXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcbiAgICBfbGF1bmNoV29ya2VyRnVuYyh3b3JrZXJDb25maWcsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgY2IgPSAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvciwgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX2xhdW5jaFRlc3Qod29ya2VyQ29uZmlnLCBjYikudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XHJcbiAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvciwgbnVsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2luc3RhbnRpYXRlUnVubmVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuZnJhbWV3b3JrICYmIHR5cGVvZiB0aGlzLl9jb25maWcuZnJhbWV3b3JrID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFJ1bm5lcnMsIHRoaXMuX2NvbmZpZy5mcmFtZXdvcmspKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bm5lcnNbdGhpcy5fY29uZmlnLmZyYW1ld29ya10oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSdW5uZXJzLm94eWdlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9sYXVuY2hUZXN0KHsgd29ya2VySWQsIHRlc3RDb25maWcsIHRlc3RDYXBzLCBzdGFydHVwRGVsYXkgfSwgY2FsbGJhY2spIHtcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fc2xlZXAoc3RhcnR1cERlbGF5KTtcclxuXHJcbiAgICAgICAgbGV0IHJ1bm5lciA9IHRoaXMuX2luc3RhbnRpYXRlUnVubmVyKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVkUnVubmVyc1N0YXRbcnVubmVyLl9pZF0gPSBbd29ya2VySWRdO1xyXG5cclxuICAgICAgICBpZiAoIXJ1bm5lcikge1xyXG4gICAgICAgICAgICBjb25zdCBmcmFtZXdvcmsgPSB0aGlzLl9jb25maWcuZnJhbWV3b3JrO1xyXG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHJ1bm5lciBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZXdvcms6ICR7ZnJhbWV3b3JrfS5gKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gZ2VuZXJhdGUgZmlyZWZveCBcInByb2ZpbGVcIiB2YWx1ZSBpZiBwcm9maWxlIG9wdGlvbnMgYXJlIHNwZWNpZmllZFxyXG4gICAgICAgICAgICAvLyBhd2FpdCBveHV0aWwuZ2VuZXJhdGVGaXJlZm94T3B0aW9uc1Byb2ZpbGUodGVzdENhcHMpO1xyXG5cclxuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBveHlnZW5cclxuICAgICAgICAgICAgYXdhaXQgcnVubmVyLmluaXQodGVzdENvbmZpZywgdGVzdENhcHMsIHRoaXMucmVwb3J0ZXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gcnVuIE94eWdlbiB0ZXN0IFxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5uZXIucnVuKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHJ1bm5lci5kaXNwb3NlKHJlc3VsdC5zdGF0dXMgfHwgbnVsbCk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsYXVuY2ggdGhlIHRlc3Q6JywgZSk7XHJcbiAgICAgICAgICAgIC8vIHN0b3AgcHJvY2Vzc2luZyB0aGUgcXVldWVcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3F1ZXVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBjdXN0b20gZXJyb3IgbWVzc2FnZVxyXG4gICAgICAgICAgICBpZiAoZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVyck1zZyA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVyciA9IGUuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLnR5cGUpXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyTXNnICs9IGVyci50eXBlICsgJyAtICc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyTXNnICs9IGVyci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGVyck1zZyA9IGVyci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGVyck1zZykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZSk7ICAgIC8vIGNhbGwgYmFjayB3aXRoIHRoZSBvcmlnaW5hbCBleGNlcHRpb25cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ydW5uZXJzLnB1c2gocnVubmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBfc2xlZXAoZHVyYXRpb24pIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZHVyYXRpb24pKTtcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgUGFyYW1NYW5hZ2VyTW9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXRNb2RlKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZWFkTmV4dCgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVhZFByZXYoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldFZhbHVlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvd3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbn1cclxuIl19
254
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGFyYWxsZWwtbGF1bmNoZXIuanMiXSwibmFtZXMiOlsiRHVyYXRpb24iLCJyZXF1aXJlIiwiaGFzaCIsIlBhcmFsbGVsTGF1bmNoZXIiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsInJlcG9ydGVyIiwiX2NvbmZpZyIsIl9xdWV1ZSIsInJ1bm5lcnMiLCJjcmVhdGVkUnVubmVyc1N0YXQiLCJydW4iLCJjYXBzU2V0IiwiY29sbGVjdGlvbiIsInBhcmFsbGVsIiwiRXJyb3IiLCJtb2RlIiwid29ya2Vyc0NvdW50IiwiaXNOYU4iLCJ3b3JrZXJzIiwic3VpdGVzIiwicmVzdWx0TmFtZSIsIm5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJ0ZXN0Q2FwcyIsInJlc3VsdEhhc2giLCJyZXN1bHRLZXkiLCJzdWl0ZUluZGV4IiwiZm9yRWFjaCIsInN1aXRlRGVmIiwic3VpdGVLZXkiLCJrZXkiLCJpZCIsImkiLCJpdGVyYXRpb25Db3VudCIsIm1vY2tlZFBhcmFtTWFuYWdlciIsInVuZGVmaW5lZCIsInBhcmFtTWFuYWdlciIsIlBhcmFtTWFuYWdlck1vY2siLCJnZXRWYWx1ZXMiLCJyZWFkTmV4dCIsIndvcmtlcklkIiwic3VpdGVDb3B5IiwidGVzdENvbmZpZyIsIl9ncm91cFJlc3VsdCIsIndvcmtlckNvbmZpZyIsInN0YXJ0dXBEZWxheSIsInB1c2giLCJjYWxsYmFjayIsIl9sYXVuY2hXb3JrZXJGdW5jIiwiY2FzZXMiLCJjYXNlSW5kZXgiLCJjYXNlRGVmIiwiY2FzZUtleSIsInN0YXJ0IiwiRGF0ZSIsInRvdGFsIiwiY29uc29sZSIsImxvZyIsInJ1bm5lcnNJZHMiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwibWFwIiwiaXRlbSIsImNhemVzIiwiZW5kIiwiZHVyYXRpb24iLCJ0b1N0cmluZyIsImNiIiwiZXJyb3IiLCJfbGF1bmNoVGVzdCIsInRoZW4iLCJyZXN1bHQiLCJjYXRjaCIsIl9pbnN0YW50aWF0ZVJ1bm5lciIsImZyYW1ld29yayIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIlJ1bm5lcnMiLCJveHlnZW4iLCJfc2xlZXAiLCJydW5uZXIiLCJfaWQiLCJpbml0IiwiZGlzcG9zZSIsInN0YXR1cyIsImUiLCJraWxsIiwiZXJyTXNnIiwiZXJyIiwidHlwZSIsIm1lc3NhZ2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJ2YWx1ZXMiLCJnZXRNb2RlIiwicmVhZFByZXYiLCJyb3dzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFVQTs7QUFDQTs7Ozs7Ozs7QUFDQSxNQUFNQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXhCOztBQUNBLE1BQU1DLElBQUksR0FBR0QsT0FBTyxDQUFDLGFBQUQsQ0FBcEI7O0FBRWUsTUFBTUUsZ0JBQU4sQ0FBdUI7QUFDbENDLEVBQUFBLFdBQVcsQ0FBQ0MsTUFBRCxFQUFTQyxRQUFULEVBQW1CO0FBQzFCLFNBQUtDLE9BQUwsR0FBZUYsTUFBZjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0JBLFFBQWhCO0FBQ0EsU0FBS0UsTUFBTCxHQUFjLElBQWQ7QUFDQSxTQUFLQyxPQUFMLEdBQWUsRUFBZjtBQUNBLFNBQUtDLGtCQUFMLEdBQTBCLEVBQTFCO0FBQ0g7O0FBRVEsUUFBSEMsR0FBRyxDQUFDQyxPQUFELEVBQVU7QUFDZixVQUFNQyxVQUFVLEdBQUcsRUFBbkI7O0FBRUEsUUFBSSxDQUFDLEtBQUtOLE9BQUwsQ0FBYU8sUUFBbEIsRUFBNEI7QUFDeEIsWUFBTSxJQUFJQyxLQUFKLENBQVUsc0VBQVYsQ0FBTjtBQUNIOztBQUVELFFBQUksQ0FBQyxLQUFLUixPQUFMLENBQWFPLFFBQWIsQ0FBc0JFLElBQTNCLEVBQWlDO0FBQzdCLFdBQUtULE9BQUwsQ0FBYU8sUUFBYixDQUFzQkUsSUFBdEIsR0FBNkIsTUFBN0I7QUFDSDs7QUFFRCxVQUFNQyxZQUFZLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLEtBQUtYLE9BQUwsQ0FBYU8sUUFBYixDQUFzQkssT0FB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ZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vLyBpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgKiBhcyBSdW5uZXJzIGZyb20gJy4uL3J1bm5lcnMnO1xyXG5pbXBvcnQgcGFyYWxsZWxMaW1pdCBmcm9tICdhc3luYy9wYXJhbGxlbExpbWl0JztcclxuY29uc3QgRHVyYXRpb24gPSByZXF1aXJlKCdkdXJhdGlvbicpO1xyXG5jb25zdCBoYXNoID0gcmVxdWlyZSgnb2JqZWN0LWhhc2gnKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcmFsbGVsTGF1bmNoZXIge1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlnLCByZXBvcnRlcikge1xyXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcclxuICAgICAgICB0aGlzLnJlcG9ydGVyID0gcmVwb3J0ZXI7XHJcbiAgICAgICAgdGhpcy5fcXVldWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucnVubmVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlZFJ1bm5lcnNTdGF0ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcnVuKGNhcHNTZXQpIHtcclxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gW107XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29uZmlnLnBhcmFsbGVsKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHN0YXJ0IHRoZSBwYXJhbGxlbCB0ZXN0aW5nIC0gXCJwYXJhbGxlbFwiIHNldHRpbmdzIGFyZSBtaXNzaW5nLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb25maWcucGFyYWxsZWwubW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jb25maWcucGFyYWxsZWwubW9kZSA9ICdjYXNlJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHdvcmtlcnNDb3VudCA9ICFpc05hTih0aGlzLl9jb25maWcucGFyYWxsZWwud29ya2VycykgPyB0aGlzLl9jb25maWcucGFyYWxsZWwud29ya2VycyA6IDE7XHJcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMuX2NvbmZpZy5wYXJhbGxlbC5tb2RlID09PSAnaXRlcmF0aW9uJ1xyXG4gICAgICAgICAgICA/ICdpdGVyYXRpb24nIDogdGhpcy5fY29uZmlnLnBhcmFsbGVsLm1vZGUgPT09ICdzdWl0ZSdcclxuICAgICAgICAgICAgICAgID8gJ3N1aXRlJyA6ICdjYXNlJztcclxuICAgICAgICAvLyBmbGF0dGVuIGFsbCBzdWl0ZXMgYW5kIGNyZWF0ZSBvbmUgdW5pZmllZCBhcnJheSBvZiBhbGwgdGhlIHRlc3QgY2FzZXNcclxuICAgICAgICBjb25zdCBzdWl0ZXMgPSB0aGlzLl9jb25maWcuc3VpdGVzO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE5hbWUgPSB0aGlzLl9jb25maWcubmFtZSB8fCAnJztcclxuICAgICAgICBpZiAoIXN1aXRlcyB8fCAhQXJyYXkuaXNBcnJheShzdWl0ZXMpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHN0YXJ0IHRoZSBwYXJhbGxlbCB0ZXN0aW5nIC0gbm8gc3VpdGVzIGFyZSBkZWZpbmVkLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBubyBjYXBhYmlsaXRpZXMgYXJlIHNwZWNpZmllZCwgcnVuIHNpbmdsZSBpbnN0YW5jZSB3aXRoIGRlZmF1bHQgYXJndW1lbnRzXHJcbiAgICAgICAgLy8gYWx0ZXJuYXRpdmVseSwgcGljayB0aGUgZmlyc3QgY2FwYWJpbGl0aWVzIHNldCAobG9hZCB0ZXN0IGlzIGxpbWl0ZWQgdG8gYSBzaW5nbGUgYnJvd3NlciB0eXBlKVxyXG4gICAgICAgIGNvbnN0IHRlc3RDYXBzID0gY2Fwc1NldCA/IChBcnJheS5pc0FycmF5KGNhcHNTZXQpID8gY2Fwc1NldFswXSA6IGNhcHNTZXQpIDogbnVsbDtcclxuICAgICAgICBjb25zdCByZXN1bHRIYXNoID0gdGVzdENhcHMgPyBoYXNoKHRlc3RDYXBzKSA6ICcnO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdEtleSA9IGAke3Jlc3VsdE5hbWV9LSR7cmVzdWx0SGFzaH1gO1xyXG4gICAgICAgIC8vIGlmICd3b3JrZXJzJyBzZXQgdG8gbWF4IGFuZCBwYXJhbWV0ZXIgZmlsZSBpcyBkZWZpbmVkLCBcclxuICAgICAgICAvLyB0aGVuIHJ1biBhcyBtYW55IHBhcmFsbGVsIHRlc3RzIGFzIHJvd3MgaW4gdGhlIGZpbGVcclxuICAgICAgICBsZXQgc3VpdGVJbmRleCA9IDA7XHJcblxyXG4gICAgICAgIHN1aXRlcy5mb3JFYWNoKHN1aXRlRGVmID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3VpdGVLZXkgPSBzdWl0ZURlZi5rZXkgfHwgc3VpdGVEZWYuaWQgfHwgc3VpdGVEZWYubmFtZTtcclxuICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdpdGVyYXRpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaTw9IHN1aXRlRGVmLml0ZXJhdGlvbkNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbW9ja2VkUGFyYW1NYW5hZ2VyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWl0ZURlZi5wYXJhbU1hbmFnZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9ja2VkUGFyYW1NYW5hZ2VyID0gbmV3IFBhcmFtTWFuYWdlck1vY2soc3VpdGVEZWYucGFyYW1NYW5hZ2VyLmdldFZhbHVlcygpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVEZWYucGFyYW1NYW5hZ2VyLnJlYWROZXh0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmtlcklkID0gYCR7c3VpdGVLZXl9LSR7c3VpdGVJbmRleH0vJHtpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VpdGVDb3B5ID0geyAuLi5zdWl0ZURlZiwgaXRlcmF0aW9uQ291bnQ6IDEsIHBhcmFtTWFuYWdlcjogbW9ja2VkUGFyYW1NYW5hZ2VyIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVzdENvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fY29uZmlnLCBzdWl0ZXM6IFsgc3VpdGVDb3B5IF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9ncm91cFJlc3VsdDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0S2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3JrZXJDb25maWcgPSB7IHdvcmtlcklkLCB0ZXN0Q29uZmlnLCB0ZXN0Q2Fwcywgc3RhcnR1cERlbGF5OiAyMDAgfTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnB1c2goKGNhbGxiYWNrKSA9PiB0aGlzLl9sYXVuY2hXb3JrZXJGdW5jKHdvcmtlckNvbmZpZywgY2FsbGJhY2spKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjaGVjayBpZiBhbnkgb2YgY2FzZXMgaGF2ZSBwYXJhbSBmaWxlIGF0dGFjaGVkXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPT09ICdjYXNlJyAmJiBBcnJheS5pc0FycmF5KHN1aXRlRGVmLmNhc2VzKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNhc2VJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBzdWl0ZURlZi5jYXNlcy5mb3JFYWNoKGNhc2VEZWYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhc2VLZXkgPSBjYXNlRGVmLmtleSB8fCBjYXNlRGVmLmlkIHx8IGNhc2VEZWYubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3JrZXJJZCA9IGAke2Nhc2VLZXl9LSR7c3VpdGVJbmRleH0vJHtjYXNlSW5kZXh9YDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWl0ZUNvcHkgPSB7IC4uLnN1aXRlRGVmLCBjYXNlczogWyBjYXNlRGVmIF19O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NvbmZpZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVzOiBbIHN1aXRlQ29weSBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ3JvdXBSZXN1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlS2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3JrZXJDb25maWcgPSB7IHdvcmtlcklkLCB0ZXN0Q29uZmlnLCB0ZXN0Q2Fwcywgc3RhcnR1cERlbGF5OiAwIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKChjYWxsYmFjaykgPT4gdGhpcy5fbGF1bmNoV29ya2VyRnVuYyh3b3JrZXJDb25maWcsIGNhbGxiYWNrKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZUluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN1aXRlS2V5ID0gc3VpdGVEZWYua2V5IHx8IHN1aXRlRGVmLmlkIHx8IHN1aXRlRGVmLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3b3JrZXJJZCA9IGAke3N1aXRlS2V5fS0ke3N1aXRlSW5kZXh9YDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlczogWyBzdWl0ZURlZiBdLFxyXG4gICAgICAgICAgICAgICAgICAgIF9ncm91cFJlc3VsdDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHdvcmtlckNvbmZpZyA9IHsgd29ya2VySWQsIHRlc3RDb25maWcsIHRlc3RDYXBzLCBzdGFydHVwRGVsYXk6IDAgfTtcclxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaCgoY2FsbGJhY2spID0+IHRoaXMuX2xhdW5jaFdvcmtlckZ1bmMod29ya2VyQ29uZmlnLCBjYWxsYmFjaykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN1aXRlSW5kZXgrKztcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgYXdhaXQgcGFyYWxsZWxMaW1pdChjb2xsZWN0aW9uLCB3b3JrZXJzQ291bnQpO1xyXG5cclxuICAgICAgICBsZXQgdG90YWwgPSAwO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDcmVhdGVkIFJ1bm5lcnMgU3RhdCcsIHRoaXMuY3JlYXRlZFJ1bm5lcnNTdGF0KTtcclxuICAgICAgICBjb25zdCBydW5uZXJzSWRzID0gT2JqZWN0LmtleXModGhpcy5jcmVhdGVkUnVubmVyc1N0YXQpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDcmVhdGVkIFJ1bm5lcnMgY291bnQnLCBydW5uZXJzSWRzLmxlbmd0aCk7XHJcblxyXG4gICAgICAgIHJ1bm5lcnNJZHMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhemVzID0gdGhpcy5jcmVhdGVkUnVubmVyc1N0YXRbaXRlbV0ubGVuZ3RoO1xyXG4gICAgICAgICAgICB0b3RhbCArPSBjYXplcztcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1J1bm5lcicsIGl0ZW0sICcgcnVuICcsIGNhemVzLCAnIGNhc2VzJyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdQYXJhbGxlbCBjb3VudCcsIHdvcmtlcnNDb3VudCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1RvdGFsOiAnLCB0b3RhbCk7XHJcbiAgICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG5ldyBEdXJhdGlvbihzdGFydCwgZW5kKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnRHVyYXRpb246ICcsIGR1cmF0aW9uLnRvU3RyaW5nKDEpKTtcclxuICAgICAgICAvL3RoaXMucmVwb3J0ZXIub25BZnRlckVuZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAqIFByaXZhdGUgbWV0aG9kc1xyXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcbiAgICBfbGF1bmNoV29ya2VyRnVuYyh3b3JrZXJDb25maWcsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgY2IgPSAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvciwgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX2xhdW5jaFRlc3Qod29ya2VyQ29uZmlnLCBjYikudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XHJcbiAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvciwgbnVsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2luc3RhbnRpYXRlUnVubmVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuZnJhbWV3b3JrICYmIHR5cGVvZiB0aGlzLl9jb25maWcuZnJhbWV3b3JrID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFJ1bm5lcnMsIHRoaXMuX2NvbmZpZy5mcmFtZXdvcmspKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bm5lcnNbdGhpcy5fY29uZmlnLmZyYW1ld29ya10oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSdW5uZXJzLm94eWdlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9sYXVuY2hUZXN0KHsgd29ya2VySWQsIHRlc3RDb25maWcsIHRlc3RDYXBzLCBzdGFydHVwRGVsYXkgfSwgY2FsbGJhY2spIHtcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fc2xlZXAoc3RhcnR1cERlbGF5KTtcclxuXHJcbiAgICAgICAgbGV0IHJ1bm5lciA9IHRoaXMuX2luc3RhbnRpYXRlUnVubmVyKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVkUnVubmVyc1N0YXRbcnVubmVyLl9pZF0gPSBbd29ya2VySWRdO1xyXG5cclxuICAgICAgICBpZiAoIXJ1bm5lcikge1xyXG4gICAgICAgICAgICBjb25zdCBmcmFtZXdvcmsgPSB0aGlzLl9jb25maWcuZnJhbWV3b3JrO1xyXG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHJ1bm5lciBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZXdvcms6ICR7ZnJhbWV3b3JrfS5gKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gZ2VuZXJhdGUgZmlyZWZveCBcInByb2ZpbGVcIiB2YWx1ZSBpZiBwcm9maWxlIG9wdGlvbnMgYXJlIHNwZWNpZmllZFxyXG4gICAgICAgICAgICAvLyBhd2FpdCBveHV0aWwuZ2VuZXJhdGVGaXJlZm94T3B0aW9uc1Byb2ZpbGUodGVzdENhcHMpO1xyXG5cclxuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBveHlnZW5cclxuICAgICAgICAgICAgYXdhaXQgcnVubmVyLmluaXQodGVzdENvbmZpZywgdGVzdENhcHMsIHRoaXMucmVwb3J0ZXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gcnVuIE94eWdlbiB0ZXN0IFxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5uZXIucnVuKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHJ1bm5lci5kaXNwb3NlKHJlc3VsdC5zdGF0dXMgfHwgbnVsbCk7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsYXVuY2ggdGhlIHRlc3Q6JywgZSk7XHJcbiAgICAgICAgICAgIC8vIHN0b3AgcHJvY2Vzc2luZyB0aGUgcXVldWVcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3F1ZXVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZS5raWxsKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBjdXN0b20gZXJyb3IgbWVzc2FnZVxyXG4gICAgICAgICAgICBpZiAoZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVyck1zZyA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdmFyIGVyciA9IGUuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLnR5cGUpXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyTXNnICs9IGVyci50eXBlICsgJyAtICc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyTXNnICs9IGVyci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGVyck1zZyA9IGVyci50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGVyck1zZykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZSk7ICAgIC8vIGNhbGwgYmFjayB3aXRoIHRoZSBvcmlnaW5hbCBleGNlcHRpb25cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ydW5uZXJzLnB1c2gocnVubmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBfc2xlZXAoZHVyYXRpb24pIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZHVyYXRpb24pKTtcclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgUGFyYW1NYW5hZ2VyTW9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZXMpIHtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXRNb2RlKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZWFkTmV4dCgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVhZFByZXYoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldFZhbHVlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvd3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -150,7 +150,7 @@ class ReportAggregator extends _events.EventEmitter {
150
150
  if (testResult) {
151
151
  testResult.endTime = _util.default.getTimeStamp();
152
152
  testResult.duration = testResult.endTime - testResult.startTime;
153
- testResult.status = fatalError ? _status.default.FAILED : testResult.suites.some(x => x.status === _status.default.FAILED) ? _status.default.FAILED : _status.default.PASSED;
153
+ testResult.status = this._determineTestStatusBySuites(testResult, fatalError);
154
154
 
155
155
  if (testResult.status === _status.default.FAILED) {
156
156
  if (fatalError) {
@@ -189,6 +189,32 @@ class ReportAggregator extends _events.EventEmitter {
189
189
  }
190
190
  }
191
191
 
192
+ _determineTestStatusBySuites(testResult, fatalError) {
193
+ if (fatalError) {
194
+ return _status.default.FAILED;
195
+ }
196
+
197
+ const hasFailedSuites = testResult.suites.some(x => x.status === _status.default.FAILED);
198
+
199
+ if (hasFailedSuites) {
200
+ return _status.default.FAILED;
201
+ }
202
+
203
+ const hasWarningSuites = testResult.suites.some(x => x.status === _status.default.WARNING);
204
+
205
+ if (hasWarningSuites) {
206
+ return _status.default.WARNING;
207
+ }
208
+
209
+ const allSuitesSkipped = testResult.suites.every(x => x.status === _status.default.SKIPPED);
210
+
211
+ if (allSuitesSkipped) {
212
+ return _status.default.SKIPPED;
213
+ }
214
+
215
+ return _status.default.PASSED;
216
+ }
217
+
192
218
  onIterationStart(rid, iteration, start) {
193
219
  if (iteration) {
194
220
  const msg = `${start} Iteration #${iteration} started...`;
@@ -338,10 +364,6 @@ class ReportAggregator extends _events.EventEmitter {
338
364
 
339
365
  const resultKey = result.options._groupResult.resultKey;
340
366
  const suiteKey = result.options._groupResult.suiteKey;
341
- console.log('resultKey', resultKey);
342
- console.log('suiteKey', suiteKey);
343
- console.log('startTime', result.startTime);
344
- console.log('endTime', result.endTime);
345
367
  let groupedResult = groupedResults[resultKey];
346
368
 
347
369
  if (!groupedResult) {
@@ -363,7 +385,6 @@ class ReportAggregator extends _events.EventEmitter {
363
385
  } else {
364
386
  for (const currentSuiteResult of result.suites) {
365
387
  const groupKey = `${suiteKey}-${currentSuiteResult.iterationNum}`;
366
- console.log('groupKey', groupKey);
367
388
  const groupedSuiteResult = groupedResult._suitesHash[groupKey];
368
389
 
369
390
  if (!groupedSuiteResult) {
@@ -375,8 +396,10 @@ class ReportAggregator extends _events.EventEmitter {
375
396
  groupedSuiteResult.duration = groupedSuiteResult.endTime - groupedSuiteResult.startTime;
376
397
  groupedSuiteResult.cases = [...groupedSuiteResult.cases, ...currentSuiteResult.cases];
377
398
 
378
- if (currentSuiteResult.cases.some(c => c.status === 'failed')) {
379
- groupedSuiteResult.status = 'failed';
399
+ if (currentSuiteResult.cases.some(c => c.status === _status.default.FAILED)) {
400
+ groupedSuiteResult.status = _status.default.FAILED;
401
+ } else if (currentSuiteResult.cases.some(c => c.status === _status.default.WARNING)) {
402
+ groupedSuiteResult.status = _status.default.WARNING;
380
403
  }
381
404
  }
382
405
  }
@@ -391,11 +414,18 @@ class ReportAggregator extends _events.EventEmitter {
391
414
  }
392
415
 
393
416
  groupedResult.suites = [...groupedResult.suites, ...Object.keys(groupedResult._suitesHash).map(suiteGroupKey => groupedResult._suitesHash[suiteGroupKey])];
394
- const firstFailedSuite = groupedResult.suites.find(s => s.status === 'failed');
417
+ const firstFailedSuite = groupedResult.suites.find(s => s.status === _status.default.FAILED);
395
418
 
396
419
  if (firstFailedSuite) {
397
- groupedResult.status = 'failed';
420
+ groupedResult.status = _status.default.FAILED;
398
421
  groupedResult.failure = firstFailedSuite.failure || groupedResult.failure;
422
+ } else {
423
+ const firstSuiteWithWarning = groupedResult.suites.find(s => s.status === _status.default.WARNING);
424
+
425
+ if (firstSuiteWithWarning) {
426
+ groupedResult.status = _status.default.WARNING;
427
+ groupedResult.failure = firstSuiteWithWarning.failure || groupedResult.failure;
428
+ }
399
429
  }
400
430
 
401
431
  delete groupedResult['_suitesHash'];
@@ -410,10 +440,12 @@ class ReportAggregator extends _events.EventEmitter {
410
440
  recalculateResultForStatus(results) {
411
441
  return results.map(result => {
412
442
  if (result && result.suites && Array.isArray(result.suites) && result.suites.length > 0) {
413
- const failed = result.suites.find(suite => suite.status === 'failed');
443
+ const failed = result.suites.find(suite => suite.status === _status.default.FAILED);
414
444
 
415
445
  if (failed) {
416
- result.status = 'failed';
446
+ result.status = _status.default.FAILED;
447
+ } else if (result.suites.find(suite => suite.status === _status.default.WARNING)) {
448
+ result.status = _status.default.WARNING;
417
449
  }
418
450
  }
419
451
 
@@ -437,4 +469,4 @@ class ReportAggregator extends _events.EventEmitter {
437
469
  }
438
470
 
439
471
  exports.default = ReportAggregator;
440
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yLmpzIl0sIm5hbWVzIjpbIlJlcG9ydGVycyIsImpzb24iLCJKc29uUmVwb3J0ZXIiLCJqdW5pdCIsIkpVbml0UmVwb3J0ZXIiLCJodG1sIiwiSHRtbFJlcG9ydGVyIiwiZXhjZWwiLCJFeGNlbFJlcG9ydGVyIiwicGRmIiwiUGRmUmVwb3J0ZXIiLCJ4bWwiLCJYbWxSZXBvcnRlciIsIkRFRkFVTFRfVEVTVF9OQU1FIiwiREVGQVVMVF9SRVBPUlRFUlMiLCJSZXBvcnRBZ2dyZWdhdG9yIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicmVzdWx0cyIsInJ1bm5lckVuZFByb21pc2VzIiwiaW5zdGFudGlhdGVSZXBvcnRlcnMiLCJnZXRFeGl0Q29kZSIsImV4aXRDb2RlIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidGVzdEZhaWxkZWQiLCJmaW5kIiwiaXRlbSIsInN0YXR1cyIsInJlcG9ydGVycyIsImdlbmVyYWxSZXBvcnRpbmdPcHRzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBvcnRlck5hbWUiLCJuYW1lIiwicmVwb3J0ZXJPcHRzIiwicHVzaCIsImdldFJlc3VsdHMiLCJnZW5lcmF0ZVJlcG9ydHMiLCJncm91cGVkUmVzdWx0cyIsImdyb3VwUmVzdWx0cyIsInJlcG9ydFBhdGgiLCJnZW5lcmF0ZSIsImNvbnNvbGUiLCJsb2ciLCJ3YWl0Rm9yUmVzdWx0IiwicmlkIiwid2FpdEZvclJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwib25SdW5uZXJTdGFydCIsIm9wdHMiLCJjYXBzIiwiRXJyb3IiLCJ0ZXN0UmVzdWx0IiwiVGVzdFJlc3VsdCIsInN0YXJ0VGltZSIsIm94dXRpbCIsImdldFRpbWVTdGFtcCIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwiZW52VmFycyIsImVtaXQiLCJvblJ1bm5lckVuZCIsImZpbmFsUmVzdWx0IiwiZmF0YWxFcnJvciIsIngiLCJlbmRUaW1lIiwiZHVyYXRpb24iLCJTdGF0dXMiLCJGQUlMRUQiLCJzdWl0ZXMiLCJzb21lIiwiUEFTU0VEIiwiZmFpbHVyZSIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl9nZXRGaXJzdEZhaWx1cmUiLCJ0eXBlIiwibG9jYXRpb24iLCJ0b1VwcGVyQ2FzZSIsInJlc3VsdCIsInByb2Nlc3MiLCJuZXh0VGljayIsInJlc29sdmUiLCJvbkl0ZXJhdGlvblN0YXJ0IiwiaXRlcmF0aW9uIiwic3RhcnQiLCJtc2ciLCJvbkxvZ0VudHJ5Iiwib25JdGVyYXRpb25FbmQiLCJpdGVyYXRpb25OdW0iLCJvblN1aXRlU3RhcnQiLCJzdWl0ZUlkIiwic3VpdGUiLCJvblN1aXRlRW5kIiwic3VpdGVSZXN1bHQiLCJvbkNhc2VTdGFydCIsImNhc2VJZCIsImNhc2VEZWYiLCJjYXNlIiwib25DYXNlRW5kIiwiY2FzZVJlc3VsdCIsIm9uU3RlcFN0YXJ0Iiwic3RlcCIsInJvb3RQYXRoIiwiZnJhbWV3b3JrIiwiZnVsbFBhdGgiLCJwYXRoIiwib25TdGVwRW5kIiwic3RlcFJlc3VsdCIsInRvRml4ZWQiLCJ0aW1lIiwibGV2ZWwiLCJzcmMiLCJjYXNlcyIsInN0ZXBzIiwidW5ncm91cGVkUmVzdWx0cyIsIl9ncm91cFJlc3VsdCIsInJlc3VsdEtleSIsInN1aXRlS2V5IiwiZ3JvdXBlZFJlc3VsdCIsIk1hdGgiLCJtaW4iLCJtYXgiLCJjdXJyZW50U3VpdGVSZXN1bHQiLCJncm91cEtleSIsImdyb3VwZWRTdWl0ZVJlc3VsdCIsIl9zdWl0ZXNIYXNoIiwiYyIsImdyb3VwZWRSZXN1bHRzTGlzdCIsImtleXMiLCJtYXAiLCJzdWl0ZUdyb3VwS2V5IiwiZmlyc3RGYWlsZWRTdWl0ZSIsInMiLCJyZWNhbGN1bGF0ZVJlc3VsdEZvclN0YXR1cyIsInZhbGlkYXRlUmVzdWx0IiwiZmFpbGVkIiwidW5p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Q3BCQSxNQUFBQSxNQUFNLENBQUNWLE1BQVAsQ0FBYzZELEdBQWQsQ0FBbUJ0QyxLQUFELElBQVc7QUFDekIsWUFBSTZDLHdCQUF3QixDQUFDQyxRQUF6QixDQUFrQzlDLEtBQUssQ0FBQ0gsWUFBeEMsQ0FBSixFQUEyRDtBQUN2RGhELFVBQUFBLE9BQU8sQ0FBQ2tHLElBQVIsQ0FBYSxvQkFBYixFQUFtQy9DLEtBQUssQ0FBQ0gsWUFBekMsRUFBdUQsYUFBdkQ7QUFDSCxTQUZELE1BRU87QUFDSGdELFVBQUFBLHdCQUF3QixDQUFDdkcsSUFBekIsQ0FBOEIwRCxLQUFLLENBQUNILFlBQXBDO0FBQ0g7QUFDSixPQU5EO0FBT0gsS0FSRDtBQVNIOztBQWxZc0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFJlcG9ydCBhZ2dyZWdhdG9yXHJcbiAqL1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IFRlc3RSZXN1bHQgZnJvbSAnLi4vbW9kZWwvdGVzdC1yZXN1bHQnO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuXHJcbi8vIGltcG9ydCBhbGwgYnVpbHQtaW4gcmVwb3J0ZXJzXHJcbmltcG9ydCBKc29uUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWpzb24nO1xyXG5pbXBvcnQgSlVuaXRSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItanVuaXQnO1xyXG5pbXBvcnQgSHRtbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1odG1sJztcclxuaW1wb3J0IEV4Y2VsUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWV4Y2VsJztcclxuaW1wb3J0IFBkZlJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1wZGYnO1xyXG5pbXBvcnQgWG1sUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLXhtbCc7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi9tb2RlbC9zdGF0dXMnO1xyXG5cclxuY29uc3QgUmVwb3J0ZXJzID0ge1xyXG4gICAganNvbjogSnNvblJlcG9ydGVyLFxyXG4gICAganVuaXQ6IEpVbml0UmVwb3J0ZXIsXHJcbiAgICBodG1sOiBIdG1sUmVwb3J0ZXIsXHJcbiAgICBleGNlbDogRXhjZWxSZXBvcnRlcixcclxuICAgIHBkZjogUGRmUmVwb3J0ZXIsXHJcbiAgICB4bWw6IFhtbFJlcG9ydGVyXHJcbn07XHJcblxyXG5jb25zdCBERUZBVUxUX1RFU1RfTkFNRSA9ICdPeHlnZW4gVGVzdCc7XHJcbmNvbnN0IERFRkFVTFRfUkVQT1JURVJTID0gW107XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXBvcnRBZ2dyZWdhdG9yIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIC8vIHJlc3VsdHMgaGFzaCB0YWJsZSBiYXNlZCBvbiBydW5uZXIgaWQga2V5XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgLy8gYSBoYXNoIGxpc3Qgb2YgcnVubmVyRW5kIGV2ZW50IHByb21pc2VzLCBrZXllZCBieSBydW5uZXIgaWRcclxuICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzID0ge307XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICB0aGlzLmluc3RhbnRpYXRlUmVwb3J0ZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RXhpdENvZGUoKSB7XHJcbiAgICAgICAgbGV0IGV4aXRDb2RlID0gMDtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgJiZcclxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLnJlc3VsdHMpICYmXHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cy5sZW5ndGggPiAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlc3RGYWlsZGVkID0gdGhpcy5yZXN1bHRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGVzdEZhaWxkZWQpIHtcclxuICAgICAgICAgICAgICAgIGV4aXRDb2RlID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgYnJva2VuID9cclxuICAgICAgICAgICAgZXhpdENvZGUgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBleGl0Q29kZTtcclxuICAgIH1cclxuXHJcbiAgICBpbnN0YW50aWF0ZVJlcG9ydGVycygpIHtcclxuICAgICAgICB0aGlzLnJlcG9ydGVycyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGdlbmVyYWxSZXBvcnRpbmdPcHRzID0gdGhpcy5vcHRpb25zLnJlcG9ydGluZyB8fCB7fTtcclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiBnZW5lcmFsUmVwb3J0aW5nT3B0cy5yZXBvcnRlcnMgfHwgREVGQVVMVF9SRVBPUlRFUlMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBvcnRlciAhPT0gJ3N0cmluZycgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXBvcnRlciwgJ25hbWUnKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIHJlcG9ydGVycyB0aGF0IGRvIG5vdCBoYXZlICduYW1lJyBwcm9wZXJ0eSBhcyBpdCdzIGVzc2VudGlhbCB0byBsb2FkIHRoZSBjb3JyZXNwb25kaW5nIFJlcG9ydGVyIGNsYXNzXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJOYW1lID0gdHlwZW9mIHJlcG9ydGVyID09PSAnc3RyaW5nJyA/IHJlcG9ydGVyIDogcmVwb3J0ZXIubmFtZTtcclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJPcHRzID0gdHlwZW9mIHJlcG9ydGVyID09PSAnb2JqZWN0JyA/IHJlcG9ydGVyIDogZ2VuZXJhbFJlcG9ydGluZ09wdHM7XHJcblxyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFJlcG9ydGVycywgcmVwb3J0ZXJOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRlcnMucHVzaChuZXcgUmVwb3J0ZXJzW3JlcG9ydGVyTmFtZV0odGhpcy5vcHRpb25zLCByZXBvcnRlck9wdHMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXN1bHRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVSZXBvcnRzKCkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHRoaXMuZ3JvdXBSZXN1bHRzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgcmVwb3J0ZXIgb2YgdGhpcy5yZXBvcnRlcnMpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0UGF0aCA9IHJlcG9ydGVyLmdlbmVyYXRlKGdyb3VwZWRSZXN1bHRzKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFlvdXIgcmVwb3J0IGlzIHJlYWR5OiAke3JlcG9ydFBhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHQocmlkKSB7XHJcbiAgICAgICAgaWYgKCFyaWQgfHwgIXRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3YWl0Rm9yUmVzdWx0cygpIHtcclxuICAgICAgICBpZiAodGhpcy5ydW5uZXJFbmRQcm9taXNlcyAmJiB0aGlzLnJ1bm5lckVuZFByb21pc2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5ydW5uZXJFbmRQcm9taXNlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUnVubmVyU3RhcnQocmlkLCBvcHRzLCBjYXBzKSB7XHJcbiAgICAgICAgaWYgKCFyaWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJpZFwiIGNhbm5vdCBiZSBlbXB0eS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IG5ldyBUZXN0UmVzdWx0KCk7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5yaWQgPSByaWQ7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5uYW1lID0gb3B0cy5uYW1lIHx8IERFRkFVTFRfVEVTVF9OQU1FO1xyXG4gICAgICAgIHRlc3RSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHRlc3RSZXN1bHQuY2FwYWJpbGl0aWVzID0gY2FwcztcclxuICAgICAgICB0ZXN0UmVzdWx0LmVudmlyb25tZW50ID0gb3B0cy5lbnZWYXJzIHx8IHt9O1xyXG4gICAgICAgIHRlc3RSZXN1bHQub3B0aW9ucyA9IG9wdHM7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzLnB1c2godGVzdFJlc3VsdCk7XHJcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHByb21pc2UgZm9yIGxhdGVyIHRvIGJlIHJlc29sdmVkIG9uIHJ1bm5lcjplbmQgZXZlbnRcclxuICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0gPSBkZWZlcigpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBUZXN0ICR7cmlkfSBoYXMgc3RhcnRlZC4uLmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgncnVubmVyOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIG9wdHMsXHJcbiAgICAgICAgICAgIGNhcHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblJ1bm5lckVuZChyaWQsIGZpbmFsUmVzdWx0LCBmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IHRoaXMucmVzdWx0cy5maW5kKHggPT4geC5yaWQgPT09IHJpZCk7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LmR1cmF0aW9uID0gdGVzdFJlc3VsdC5lbmRUaW1lIC0gdGVzdFJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIHRlc3RSZXN1bHQuc3RhdHVzID0gZmF0YWxFcnJvciA/IFN0YXR1cy5GQUlMRUQgOiAodGVzdFJlc3VsdC5zdWl0ZXMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSkgPyBTdGF0dXMuRkFJTEVEIDogU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmF0YWxFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGlmIGZhdGFsRXJyb3IgaXMgbm90IGluaGVyaXRlZCBmcm9tIEVycm9yIGNsYXNzIHRoZW4gd2UgYWxyZWFkeSBnb3QgT3h5Z2VuIEZhaWx1cmUgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5mYWlsdXJlID0gZmF0YWxFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihmYXRhbEVycm9yKSA6IGZhdGFsRXJyb3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0LmZhaWx1cmUgPSB0aGlzLl9nZXRGaXJzdEZhaWx1cmUodGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGZpbmFsUmVzdWx0ICYmIGZpbmFsUmVzdWx0LmNhcGFiaWxpdGllcykge1xyXG4gICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5jYXBhYmlsaXRpZXMgPSBmaW5hbFJlc3VsdC5jYXBhYmlsaXRpZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZS50eXBlICYmIHRlc3RSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX0gYXQgJHt0ZXN0UmVzdWx0LmZhaWx1cmUubG9jYXRpb259LmApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX1gKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRlc3RSZXN1bHQuZmFpbHVyZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUZXN0ICR7cmlkfSBoYXMgZmluaXNoZWQgd2l0aCBzdGF0dXM6ICR7dGVzdFJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdCgncnVubmVyOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHRlc3RSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICAvLyBjYWxsaW5nIG5leHRUaWNrKCkgd2lsbCBoZWxwIHVzIHRvIGluc3VyZSB0aGF0IHdlIHJlc29sdmUgdGhlIHByb21pc2UgYWZ0ZXIgZW1pdCgncnVubmVyOmVuZCcpIGhhcyBjb21wbGV0ZWRcclxuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0ucmVzb2x2ZSh0ZXN0UmVzdWx0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uSXRlcmF0aW9uU3RhcnQocmlkLCBpdGVyYXRpb24sIHN0YXJ0KSB7XHJcbiAgICAgICAgaWYgKGl0ZXJhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgJHtzdGFydH0gSXRlcmF0aW9uICMke2l0ZXJhdGlvbn0gc3RhcnRlZC4uLmA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Mb2dFbnRyeShudWxsLCAnSU5GTycsIG1zZywgJ3VzZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25JdGVyYXRpb25FbmQocmlkLCByZXN1bHQsIHN0YXJ0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuaXRlcmF0aW9uTnVtICYmIHJlc3VsdC5zdGF0dXMgJiYgcmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSkge1xyXG4gICAgICAgICAgICBjb25zdCBtc2cgPSBgJHtzdGFydH0gSXRlcmF0aW9uICMke3Jlc3VsdC5pdGVyYXRpb25OdW19IGVuZGVkIHdpdGggc3RhdHVzOiAke3Jlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYDtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cobXNnKTtcclxuICAgICAgICAgICAgdGhpcy5vbkxvZ0VudHJ5KG51bGwsICdJTkZPJywgbXNnLCAndXNlcicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblN1aXRlU3RhcnQocmlkLCBzdWl0ZUlkLCBzdWl0ZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBTdWl0ZSBcIiR7c3VpdGUubmFtZX1cIiBoYXMgc3RhcnRlZC4uLmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnc3VpdGU6c3RhcnQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZDogc3VpdGVJZCxcclxuICAgICAgICAgICAgc3VpdGU6IHN1aXRlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU3VpdGVFbmQocmlkLCBzdWl0ZUlkLCBzdWl0ZVJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSB0aGlzLnJlc3VsdHMuZmluZCh4ID0+IHgucmlkID09PSByaWQpO1xyXG4gICAgICAgIGlmICghdGVzdFJlc3VsdCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRlc3RSZXN1bHQuc3VpdGVzLnB1c2goc3VpdGVSZXN1bHQpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBTdWl0ZSBcIiR7c3VpdGVSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgd2l0aCBzdGF0dXM6ICR7c3VpdGVSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnc3VpdGU6ZW5kJywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHJlc3VsdDogc3VpdGVSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DYXNlU3RhcnQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIGNhc2VEZWYpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgLSBDYXNlIFwiJHtjYXNlRGVmLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2Nhc2U6c3RhcnQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICBjYXNlOiBjYXNlRGVmLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FzZUVuZChyaWQsIHN1aXRlSWQsIGNhc2VJZCwgY2FzZVJlc3VsdCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAtIENhc2UgXCIke2Nhc2VSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgd2l0aCBzdGF0dXM6ICR7Y2FzZVJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjYXNlOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICBjYXNlSWQsXHJcbiAgICAgICAgICAgIHJlc3VsdDogY2FzZVJlc3VsdCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN0ZXBTdGFydChyaWQsIHN0ZXApIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICAtIFN0ZXAgXCIke3N0ZXAubmFtZX1cIiBoYXMgc3RhcnRlZC4uLmApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5yb290UGF0aCAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrICYmIHRoaXMub3B0aW9ucy5mcmFtZXdvcmsgPT09ICdjdWN1bWJlcicpIHtcclxuICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLnJvb3RQYXRoLCBzdGVwLmxvY2F0aW9uKTtcclxuICAgICAgICAgICAgc3RlcC5sb2NhdGlvbiA9IGZ1bGxQYXRoKyc6MSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmVtaXQoJ3N0ZXA6c3RhcnQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3RlcDogc3RlcCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN0ZXBFbmQocmlkLCBzdGVwUmVzdWx0KSB7XHJcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gc3RlcFJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHN0ZXBSZXN1bHQuZHVyYXRpb24gPyAoc3RlcFJlc3VsdC5kdXJhdGlvbiAvIDEwMDApLnRvRml4ZWQoMikgOiAwO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGAgIC0gU3RlcCBcIiR7c3RlcFJlc3VsdC5uYW1lfVwiIGhhcyBlbmRlZCBpbiAke2R1cmF0aW9ufXMgd2l0aCBzdGF0dXM6ICR7c3RhdHVzfS5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N0ZXA6ZW5kJywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXBSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Mb2dFbnRyeSh0aW1lLCBsZXZlbCwgbXNnLCBzcmMgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdsb2cnLCB7XHJcbiAgICAgICAgICAgIGxldmVsLCBtc2csIHRpbWUsIHNyY1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgZmlyc3QgZmFpbHVyZSBvYmplY3QgaW4gb25lIG9mIHRlc3QgcmVzdWx0J3MgZW50aXRpZXMuIFxyXG4gICAgICogQHBhcmFtIHtUZXN0UmVzdWx0fSB0ZXN0UmVzdWx0IFxyXG4gICAgICovXHJcbiAgICBfZ2V0Rmlyc3RGYWlsdXJlKHRlc3RSZXN1bHQpIHtcclxuICAgICAgICBpZiAodGVzdFJlc3VsdC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RSZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBzdWl0ZVJlc3VsdCBvZiB0ZXN0UmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VpdGVSZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGNhc2VSZXN1bHQgb2Ygc3VpdGVSZXN1bHQuY2FzZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3VpdGVSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FzZVJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXNlUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN0ZXBSZXN1bHQgb2YgY2FzZVJlc3VsdC5zdGVwcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RlcFJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGVwUmVzdWx0LmZhaWx1cmUgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXBSZXN1bHRzKCkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwZWRSZXN1bHRzID0ge307XHJcbiAgICAgICAgY29uc3QgdW5ncm91cGVkUmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlc3VsdHMpIHx8IHRoaXMucmVzdWx0cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IHJlc3VsdCBvZiB0aGlzLnJlc3VsdHMpIHtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQgfHwgIXJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5yZXN1bHRLZXkpIHtcclxuICAgICAgICAgICAgICAgIHVuZ3JvdXBlZFJlc3VsdHMucHVzaChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0S2V5ID0gcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0LnJlc3VsdEtleTtcclxuICAgICAgICAgICAgY29uc3Qgc3VpdGVLZXkgPSByZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQuc3VpdGVLZXk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZXN1bHRLZXknLCByZXN1bHRLZXkpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc3VpdGVLZXknLCBzdWl0ZUtleSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzdGFydFRpbWUnLCByZXN1bHQuc3RhcnRUaW1lKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2VuZFRpbWUnLCByZXN1bHQuZW5kVGltZSk7XHJcbiAgICAgICAgICAgIGxldCBncm91cGVkUmVzdWx0ID0gZ3JvdXBlZFJlc3VsdHNbcmVzdWx0S2V5XTtcclxuICAgICAgICAgICAgaWYgKCFncm91cGVkUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0ID0gZ3JvdXBlZFJlc3VsdHNbcmVzdWx0S2V5XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3VpdGVzOiBbXSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpZiAoc3VpdGVLZXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0Wydfc3VpdGVzSGFzaCddID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LnN0YXJ0VGltZSA9IE1hdGgubWluKGdyb3VwZWRSZXN1bHQuc3RhcnRUaW1lLCByZXN1bHQuc3RhcnRUaW1lKTtcclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZW5kVGltZSA9IE1hdGgubWF4KGdyb3VwZWRSZXN1bHQuZW5kVGltZSwgcmVzdWx0LmVuZFRpbWUpO1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5kdXJhdGlvbiA9IGdyb3VwZWRSZXN1bHQuZW5kVGltZSAtIGdyb3VwZWRSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGlmIGdyb3VwaW5nIGlzIGJ5IHJlc3VsdCBvbmx5LCB0aGVuIGp1c3QgYXBwZW5kIGN1cnJlbnQgcmVzdWx0J3Mgc3VpdGVzIHRvIHRoZSBncm91cCdzIHN1aXRlc1xyXG4gICAgICAgICAgICBpZiAoIXN1aXRlS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LnN1aXRlcyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAuLi5ncm91cGVkUmVzdWx0LnN1aXRlcyxcclxuICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHQuc3VpdGVzXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjdXJyZW50U3VpdGVSZXN1bHQgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwS2V5ID0gYCR7c3VpdGVLZXl9LSR7Y3VycmVudFN1aXRlUmVzdWx0Lml0ZXJhdGlvbk51bX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdncm91cEtleScsIGdyb3VwS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkU3VpdGVSZXN1bHQgPSBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWdyb3VwZWRTdWl0ZVJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XSA9IHsgLi4uY3VycmVudFN1aXRlUmVzdWx0IH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lID0gTWF0aC5taW4oZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXJ0VGltZSwgY3VycmVudFN1aXRlUmVzdWx0LnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5lbmRUaW1lID0gTWF0aC5tYXgoZ3JvdXBlZFN1aXRlUmVzdWx0LmVuZFRpbWUsIGN1cnJlbnRTdWl0ZVJlc3VsdC5lbmRUaW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LmR1cmF0aW9uID0gZ3JvdXBlZFN1aXRlUmVzdWx0LmVuZFRpbWUgLSBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50U3VpdGVSZXN1bHQuY2FzZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTdWl0ZVJlc3VsdC5jYXNlcy5zb21lKGMgPT4gYy5zdGF0dXMgPT09ICdmYWlsZWQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXR1cyA9ICdmYWlsZWQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnZlcnQgZ3JvdXBlZCByZXN1bHRzIGhhc2ggdG8gYW4gYXJyYXlcclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0c0xpc3QgPSBPYmplY3Qua2V5cyhncm91cGVkUmVzdWx0cykubWFwKFxyXG4gICAgICAgICAgICBncm91cEtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0ID0gZ3JvdXBlZFJlc3VsdHNbZ3JvdXBLZXldO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwZWRSZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LnN1aXRlcyA9IFtcclxuICAgICAgICAgICAgICAgICAgICAuLi5ncm91cGVkUmVzdWx0LnN1aXRlcyxcclxuICAgICAgICAgICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoKS5tYXAoc3VpdGVHcm91cEtleSA9PiBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW3N1aXRlR3JvdXBLZXldKVxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0RmFpbGVkU3VpdGUgPSBncm91cGVkUmVzdWx0LnN1aXRlcy5maW5kKHMgPT4gcy5zdGF0dXMgPT09ICdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdEZhaWxlZFN1aXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmZhaWx1cmUgPSBmaXJzdEZhaWxlZFN1aXRlLmZhaWx1cmUgfHwgZ3JvdXBlZFJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGdyb3VwZWRSZXN1bHRbJ19zdWl0ZXNIYXNoJ107XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBlZFJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBbLi4uZ3JvdXBlZFJlc3VsdHNMaXN0LCAuLi51bmdyb3VwZWRSZXN1bHRzXTtcclxuICAgICAgICAvLyBjaGFuZ2UgcmVzdWx0cyBzdGF0dXMgdG8gZmFpZGVkIGlmIGZhaWxlZCBzdWl0ZXMgYXJlIGZpbmRlZFxyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzKHJlc3VsdHMpO1xyXG5cclxuICAgICAgICB0aGlzLnZhbGlkYXRlUmVzdWx0KHJlc3VsdHMpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHJlY2FsY3VsYXRlUmVzdWx0Rm9yU3RhdHVzKHJlc3VsdHMpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgJiZcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMgJiZcclxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocmVzdWx0LnN1aXRlcykgJiZcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdWl0ZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZCA9IHJlc3VsdC5zdWl0ZXMuZmluZCgoc3VpdGUpID0+IHN1aXRlLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhaWxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZVJlc3VsdChyZXN1bHRzKSB7XHJcbiAgICAgICAgY29uc3QgdW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzID0gW107XHJcblxyXG4gICAgICAgIHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgcmVzdWx0LnN1aXRlcy5tYXAoKHN1aXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzLmluY2x1ZGVzKHN1aXRlLml0ZXJhdGlvbk51bSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ3N1aXRlLml0ZXJhdGlvbk51bScsIHN1aXRlLml0ZXJhdGlvbk51bSwgJyBub3QgdW5pcXVlJyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHVuaXF1ZVN1aXRlc0l0ZXJhdGlvbklkcy5wdXNoKHN1aXRlLml0ZXJhdGlvbk51bSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59Il19
472
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yLmpzIl0sIm5hbWVzIjpbIlJlcG9ydGVycyIsImpzb24iLCJKc29uUmVwb3J0ZXIiLCJqdW5pdCIsIkpVbml0UmVwb3J0ZXIiLCJodG1sIiwiSHRtbFJlcG9ydGVyIiwiZXhjZWwiLCJFeGNlbFJlcG9ydGVyIiwicGRmIiwiUGRmUmVwb3J0ZXIiLCJ4bWwiLCJYbWxSZXBvcnRlciIsIkRFRkFVTFRfVEVTVF9OQU1FIiwiREVGQVVMVF9SRVBPUlRFUlMiLCJSZXBvcnRBZ2dyZWdhdG9yIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicmVzdWx0cyIsInJ1bm5lckVuZFByb21pc2VzIiwiaW5zdGFudGlhdGVSZXBvcnRlcnMiLCJnZXRFeGl0Q29kZSIsImV4aXRDb2RlIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidGVzdEZhaWxkZWQiLCJmaW5kIiwiaXRlbSIsInN0YXR1cyIsInJlcG9ydGVycyIsImdlbmVyYWxSZXBvcnRpbmdPcHRzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBvcnRlck5hbWUiLCJuYW1lIiwicmVwb3J0ZXJPcHRzIiwicHVzaCIsImdldFJlc3VsdHMiLCJnZW5lcmF0ZVJlcG9ydHMiLCJncm91cGVkUmVzdWx0cyIsImdyb3VwUmVzdWx0cyIsInJlcG9ydFBhdGgiLCJnZW5lcmF0ZSIsImNvbnNvbGUiLCJsb2ciLCJ3YWl0Rm9yUmVzdWx0IiwicmlkIiwid2FpdEZvclJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwib25SdW5uZXJTdGFydCIsIm9wdHMiLCJjYXBzIiwiRXJyb3IiLCJ0ZXN0UmVzdWx0IiwiVGVzdFJlc3VsdCIsInN0YXJ0VGltZSIsIm94dXRpbCIsImdldFRpbWVTdGFtcCIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwiZW52VmFycyIsImVtaXQiLCJvblJ1bm5lckVuZCIsImZpbmFsUmVzdWx0IiwiZmF0YWxFcnJvciIsIngiLCJlbmRUaW1lIiwiZHVyYXRpb24iLCJfZGV0ZXJtaW5lVGVzdFN0YXR1c0J5U3VpdGVzIiwiU3RhdHVzIiwiRkFJTEVEIiwiZmFpbHVyZSIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl9nZXRGaXJzdEZhaWx1cmUiLCJ0eXBlIiwibG9jYXRpb24iLCJ0b1VwcGVyQ2FzZSIsInJlc3VsdCIsInByb2Nlc3MiLCJuZXh0VGljayIsInJlc29sdmUiLCJoYXNGYWlsZWRTdWl0ZXMiLCJzdWl0ZXMiLCJzb21lIiwiaGFzV2FybmluZ1N1aXRlcyIsIldBUk5JTkciLCJhbGxTdWl0ZXNTa2lwcGVkIiwiZXZlcnkiLCJTS0lQUEVEIiwiUEFTU0VEIiwib25JdGVyYXRpb25TdGFydCIsIml0ZXJhdGlvbiIsInN0YXJ0IiwibXNnIiwib25Mb2dFbnRyeSIsIm9uSXRlcmF0aW9uRW5kIiwiaXRlcmF0aW9uTnVtIiwib25TdWl0ZVN0YXJ0Iiwic3VpdGVJZCIsInN1aXRlIiwib25TdWl0ZUVuZCIsInN1aXRlUmVzdWx0Iiwib25DYXNlU3RhcnQiLCJjYXNlSWQiLCJjYXNlRGVmIiwiY2FzZSIsIm9uQ2FzZUVuZCIsImNhc2VSZXN1bHQiLCJvblN0ZXBTdGFydCIsInN0ZXAiLCJyb290UGF0aCIsImZyYW1ld29yayIsImZ1bGxQYXRoIiwicGF0aCIsIm9uU3RlcEVuZCIsInN0ZXBSZXN1bHQiLCJ0b0ZpeGVkIiwidGltZSIsImxldmVsIiwic3JjIiwiY2FzZXMiLCJzdGVwcyIsInVuZ3JvdXBlZFJlc3VsdHMiLCJfZ3JvdXBSZXN1bHQiLCJyZXN1bHRLZXkiLCJzdWl0ZUtleSIsImdyb3VwZWRSZXN1bHQiLCJNYXRoIiwibWluIiwibWF4IiwiY3VycmVudFN1aXRlUmVzdWx0IiwiZ3JvdXBLZXkiLCJncm91cGVkU3VpdGVSZXN1bHQiLCJfc3VpdGVzSGFzaCIsImMiLCJncm91cGVkUmVzdWx0c0xpc3QiLCJrZXlzIiwibWFwIiwic3VpdGVHcm91cEtleSIsImZpcnN0RmFpbGVkU3VpdGUiLCJzIiwiZmlyc3RTdWl0ZVdpdGhXYXJuaW5nIiwicmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMiLCJ2YWxpZGF0ZVJlc3VsdCIsImZhaWxlZCIsInVuaXF1ZVN1aXRlc0l0ZXJhdGlvbklkcyIsImluY2x1ZGVzIiwid2FybiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBWUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUc7QUFDZEMsRUFBQUEsSUFBSSxFQUFFQyxxQkFEUTtBQUVkQyxFQUFBQSxLQUFLLEVBQUVDLHNCQUZPO0FBR2RDLEVBQUFBLElBQUksRUFBRUMscUJBSFE7QUFJZEMsRUFBQUEsS0FBSyxFQUFFQyxzQkFKTztBQUtkQyxFQUFBQSxHQUFHLEVBQUVDLG9CQUxTO0FBTWRDLEVBQUFBLEdBQUcsRUFBRUM7QUFOUyxDQUFsQjtBQVNBLE1BQU1DLGlCQUFpQixHQUFHLGFBQTFCO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsRUFBMUI7O0FBRWUsTUFBTUMsZ0JBQU4sU0FBK0JDLG9CQUEvQixDQUE0QztBQUN2REMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVU7QUFDakI7QUFFQSxTQUFLQyxPQUFMLEdBQWUsRUFBZjtBQUVBLFNBQUtDLGlCQUFMLEdBQXlCLEVBQXpCO0FBQ0EsU0FBS0YsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0csb0JBQUw7QUFDSDs7QUFFREMsRUFBQUEsV0FBVyxHQUFHO0FBQ1YsUUFBSUMsUUFBUSxHQUFHLENBQWY7O0FBRUEsUUFDSSxLQUFLSixPQUFMLElBQ0FLLEtBQUssQ0FBQ0MsT0FBTixDQUFjLEtBQUtOLE9BQW5CLENBREEsSUFFQSxLQUFLQSxPQUFMLENBQWFPLE1BQWIsR0FBc0IsQ0FIMUIsRUFJRTtBQUNFLFlBQU1DLFdBQVcsR0FB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UCxHQUFnQjhDLGdCQUFPaUIsT0FBdkI7QUFDSDtBQUNKOztBQUVELGFBQU9SLE1BQVA7QUFDSCxLQWpCTSxDQUFQO0FBa0JIOztBQUVEa0UsRUFBQUEsY0FBYyxDQUFDcEksT0FBRCxFQUFVO0FBQ3BCLFVBQU1zSSx3QkFBd0IsR0FBRyxFQUFqQztBQUVBdEksSUFBQUEsT0FBTyxDQUFDOEgsR0FBUixDQUFhNUQsTUFBRCxJQUFZO0FBQ3BCQSxNQUFBQSxNQUFNLENBQUNLLE1BQVAsQ0FBY3VELEdBQWQsQ0FBbUJ0QyxLQUFELElBQVc7QUFDekIsWUFBSThDLHdCQUF3QixDQUFDQyxRQUF6QixDQUFrQy9DLEtBQUssQ0FBQ0gsWUFBeEMsQ0FBSixFQUEyRDtBQUN2RHZELFVBQUFBLE9BQU8sQ0FBQzBHLElBQVIsQ0FBYSxvQkFBYixFQUFtQ2hELEtBQUssQ0FBQ0gsWUFBekMsRUFBdUQsYUFBdkQ7QUFDSCxTQUZELE1BRU87QUFDSGlELFVBQUFBLHdCQUF3QixDQUFDL0csSUFBekIsQ0FBOEJpRSxLQUFLLENBQUNILFlBQXBDO0FBQ0g7QUFDSixPQU5EO0FBT0gsS0FSRDtBQVNIOztBQS9ac0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFJlcG9ydCBhZ2dyZWdhdG9yXHJcbiAqL1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcclxuaW1wb3J0IFRlc3RSZXN1bHQgZnJvbSAnLi4vbW9kZWwvdGVzdC1yZXN1bHQnO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuXHJcbi8vIGltcG9ydCBhbGwgYnVpbHQtaW4gcmVwb3J0ZXJzXHJcbmltcG9ydCBKc29uUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWpzb24nO1xyXG5pbXBvcnQgSlVuaXRSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItanVuaXQnO1xyXG5pbXBvcnQgSHRtbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1odG1sJztcclxuaW1wb3J0IEV4Y2VsUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWV4Y2VsJztcclxuaW1wb3J0IFBkZlJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1wZGYnO1xyXG5pbXBvcnQgWG1sUmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLXhtbCc7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IFN0YXR1cyBmcm9tICcuLi9tb2RlbC9zdGF0dXMnO1xyXG5cclxuY29uc3QgUmVwb3J0ZXJzID0ge1xyXG4gICAganNvbjogSnNvblJlcG9ydGVyLFxyXG4gICAganVuaXQ6IEpVbml0UmVwb3J0ZXIsXHJcbiAgICBodG1sOiBIdG1sUmVwb3J0ZXIsXHJcbiAgICBleGNlbDogRXhjZWxSZXBvcnRlcixcclxuICAgIHBkZjogUGRmUmVwb3J0ZXIsXHJcbiAgICB4bWw6IFhtbFJlcG9ydGVyXHJcbn07XHJcblxyXG5jb25zdCBERUZBVUxUX1RFU1RfTkFNRSA9ICdPeHlnZW4gVGVzdCc7XHJcbmNvbnN0IERFRkFVTFRfUkVQT1JURVJTID0gW107XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXBvcnRBZ2dyZWdhdG9yIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIC8vIHJlc3VsdHMgaGFzaCB0YWJsZSBiYXNlZCBvbiBydW5uZXIgaWQga2V5XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgLy8gYSBoYXNoIGxpc3Qgb2YgcnVubmVyRW5kIGV2ZW50IHByb21pc2VzLCBrZXllZCBieSBydW5uZXIgaWRcclxuICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzID0ge307XHJcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICB0aGlzLmluc3RhbnRpYXRlUmVwb3J0ZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RXhpdENvZGUoKSB7XHJcbiAgICAgICAgbGV0IGV4aXRDb2RlID0gMDtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgJiZcclxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLnJlc3VsdHMpICYmXHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cy5sZW5ndGggPiAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlc3RGYWlsZGVkID0gdGhpcy5yZXN1bHRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGVzdEZhaWxkZWQpIHtcclxuICAgICAgICAgICAgICAgIGV4aXRDb2RlID0gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgYnJva2VuID9cclxuICAgICAgICAgICAgZXhpdENvZGUgPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBleGl0Q29kZTtcclxuICAgIH1cclxuXHJcbiAgICBpbnN0YW50aWF0ZVJlcG9ydGVycygpIHtcclxuICAgICAgICB0aGlzLnJlcG9ydGVycyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGdlbmVyYWxSZXBvcnRpbmdPcHRzID0gdGhpcy5vcHRpb25zLnJlcG9ydGluZyB8fCB7fTtcclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiBnZW5lcmFsUmVwb3J0aW5nT3B0cy5yZXBvcnRlcnMgfHwgREVGQVVMVF9SRVBPUlRFUlMpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXBvcnRlciAhPT0gJ3N0cmluZycgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXBvcnRlciwgJ25hbWUnKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIHJlcG9ydGVycyB0aGF0IGRvIG5vdCBoYXZlICduYW1lJyBwcm9wZXJ0eSBhcyBpdCdzIGVzc2VudGlhbCB0byBsb2FkIHRoZSBjb3JyZXNwb25kaW5nIFJlcG9ydGVyIGNsYXNzXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJOYW1lID0gdHlwZW9mIHJlcG9ydGVyID09PSAnc3RyaW5nJyA/IHJlcG9ydGVyIDogcmVwb3J0ZXIubmFtZTtcclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0ZXJPcHRzID0gdHlwZW9mIHJlcG9ydGVyID09PSAnb2JqZWN0JyA/IHJlcG9ydGVyIDogZ2VuZXJhbFJlcG9ydGluZ09wdHM7XHJcblxyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFJlcG9ydGVycywgcmVwb3J0ZXJOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRlcnMucHVzaChuZXcgUmVwb3J0ZXJzW3JlcG9ydGVyTmFtZV0odGhpcy5vcHRpb25zLCByZXBvcnRlck9wdHMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXN1bHRzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVSZXBvcnRzKCkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHRoaXMuZ3JvdXBSZXN1bHRzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgcmVwb3J0ZXIgb2YgdGhpcy5yZXBvcnRlcnMpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVwb3J0UGF0aCA9IHJlcG9ydGVyLmdlbmVyYXRlKGdyb3VwZWRSZXN1bHRzKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFlvdXIgcmVwb3J0IGlzIHJlYWR5OiAke3JlcG9ydFBhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHQocmlkKSB7XHJcbiAgICAgICAgaWYgKCFyaWQgfHwgIXRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3YWl0Rm9yUmVzdWx0cygpIHtcclxuICAgICAgICBpZiAodGhpcy5ydW5uZXJFbmRQcm9taXNlcyAmJiB0aGlzLnJ1bm5lckVuZFByb21pc2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5ydW5uZXJFbmRQcm9taXNlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUnVubmVyU3RhcnQocmlkLCBvcHRzLCBjYXBzKSB7XHJcbiAgICAgICAgaWYgKCFyaWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJpZFwiIGNhbm5vdCBiZSBlbXB0eS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IG5ldyBUZXN0UmVzdWx0KCk7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5yaWQgPSByaWQ7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5uYW1lID0gb3B0cy5uYW1lIHx8IERFRkFVTFRfVEVTVF9OQU1FO1xyXG4gICAgICAgIHRlc3RSZXN1bHQuc3RhcnRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgIHRlc3RSZXN1bHQuY2FwYWJpbGl0aWVzID0gY2FwcztcclxuICAgICAgICB0ZXN0UmVzdWx0LmVudmlyb25tZW50ID0gb3B0cy5lbnZWYXJzIHx8IHt9O1xyXG4gICAgICAgIHRlc3RSZXN1bHQub3B0aW9ucyA9IG9wdHM7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzLnB1c2godGVzdFJlc3VsdCk7XHJcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHByb21pc2UgZm9yIGxhdGVyIHRvIGJlIHJlc29sdmVkIG9uIHJ1bm5lcjplbmQgZXZlbnRcclxuICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0gPSBkZWZlcigpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBUZXN0ICR7cmlkfSBoYXMgc3RhcnRlZC4uLmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgncnVubmVyOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIG9wdHMsXHJcbiAgICAgICAgICAgIGNhcHNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblJ1bm5lckVuZChyaWQsIGZpbmFsUmVzdWx0LCBmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IHRoaXMucmVzdWx0cy5maW5kKHggPT4geC5yaWQgPT09IHJpZCk7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5lbmRUaW1lID0gb3h1dGlsLmdldFRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LmR1cmF0aW9uID0gdGVzdFJlc3VsdC5lbmRUaW1lIC0gdGVzdFJlc3VsdC5zdGFydFRpbWU7XHJcbiAgICAgICAgICAgIC8vIGRldGVybWluZSB0ZXN0IHN0YXR1cyBiYXNlZCBvbiBzdWl0ZXMgc3RhdHVzZXNcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5zdGF0dXMgPSB0aGlzLl9kZXRlcm1pbmVUZXN0U3RhdHVzQnlTdWl0ZXModGVzdFJlc3VsdCwgZmF0YWxFcnJvcik7XHJcbiAgICAgICAgICAgIC8vIHRlc3RSZXN1bHQuc3RhdHVzID0gZmF0YWxFcnJvciA/IFN0YXR1cy5GQUlMRUQgOiAodGVzdFJlc3VsdC5zdWl0ZXMuc29tZSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSkgPyBTdGF0dXMuRkFJTEVEIDogU3RhdHVzLlBBU1NFRDtcclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmF0YWxFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzc3VtZSB0aGF0IGlmIGZhdGFsRXJyb3IgaXMgbm90IGluaGVyaXRlZCBmcm9tIEVycm9yIGNsYXNzIHRoZW4gd2UgYWxyZWFkeSBnb3QgT3h5Z2VuIEZhaWx1cmUgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5mYWlsdXJlID0gZmF0YWxFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3JIZWxwZXIuZ2V0RmFpbHVyZUZyb21FcnJvcihmYXRhbEVycm9yKSA6IGZhdGFsRXJyb3I7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXN0UmVzdWx0LmZhaWx1cmUgPSB0aGlzLl9nZXRGaXJzdEZhaWx1cmUodGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGZpbmFsUmVzdWx0ICYmIGZpbmFsUmVzdWx0LmNhcGFiaWxpdGllcykge1xyXG4gICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5jYXBhYmlsaXRpZXMgPSBmaW5hbFJlc3VsdC5jYXBhYmlsaXRpZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlc3RSZXN1bHQuZmFpbHVyZS50eXBlICYmIHRlc3RSZXN1bHQuZmFpbHVyZS5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX0gYXQgJHt0ZXN0UmVzdWx0LmZhaWx1cmUubG9jYXRpb259LmApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvcjogJHt0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZX1gKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRlc3RSZXN1bHQuZmFpbHVyZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUZXN0ICR7cmlkfSBoYXMgZmluaXNoZWQgd2l0aCBzdGF0dXM6ICR7dGVzdFJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UoKX0uYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdCgncnVubmVyOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHRlc3RSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICAvLyBjYWxsaW5nIG5leHRUaWNrKCkgd2lsbCBoZWxwIHVzIHRvIGluc3VyZSB0aGF0IHdlIHJlc29sdmUgdGhlIHByb21pc2UgYWZ0ZXIgZW1pdCgncnVubmVyOmVuZCcpIGhhcyBjb21wbGV0ZWRcclxuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0ucmVzb2x2ZSh0ZXN0UmVzdWx0KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9kZXRlcm1pbmVUZXN0U3RhdHVzQnlTdWl0ZXModGVzdFJlc3VsdCwgZmF0YWxFcnJvcikge1xyXG4gICAgICAgIGlmIChmYXRhbEVycm9yKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBoYXNGYWlsZWRTdWl0ZXMgPSB0ZXN0UmVzdWx0LnN1aXRlcy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpO1xyXG4gICAgICAgIGlmIChoYXNGYWlsZWRTdWl0ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5GQUlMRUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGhhc1dhcm5pbmdTdWl0ZXMgPSB0ZXN0UmVzdWx0LnN1aXRlcy5zb21lKHggPT4geC5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKTtcclxuICAgICAgICBpZiAoaGFzV2FybmluZ1N1aXRlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFsbFN1aXRlc1NraXBwZWQgPSB0ZXN0UmVzdWx0LnN1aXRlcy5ldmVyeSh4ID0+IHguc3RhdHVzID09PSBTdGF0dXMuU0tJUFBFRCk7XHJcbiAgICAgICAgaWYgKGFsbFN1aXRlc1NraXBwZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFN0YXR1cy5TS0lQUEVEO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gU3RhdHVzLlBBU1NFRDtcclxuICAgIH1cclxuXHJcbiAgICBvbkl0ZXJhdGlvblN0YXJ0KHJpZCwgaXRlcmF0aW9uLCBzdGFydCkge1xyXG4gICAgICAgIGlmIChpdGVyYXRpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtpdGVyYXRpb259IHN0YXJ0ZWQuLi5gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAgICAgICB0aGlzLm9uTG9nRW50cnkobnVsbCwgJ0lORk8nLCBtc2csICd1c2VyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uSXRlcmF0aW9uRW5kKHJpZCwgcmVzdWx0LCBzdGFydCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lml0ZXJhdGlvbk51bSAmJiByZXN1bHQuc3RhdHVzICYmIHJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtyZXN1bHQuaXRlcmF0aW9uTnVtfSBlbmRlZCB3aXRoIHN0YXR1czogJHtyZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Mb2dFbnRyeShudWxsLCAnSU5GTycsIG1zZywgJ3VzZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TdWl0ZVN0YXJ0KHJpZCwgc3VpdGVJZCwgc3VpdGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQ6IHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHN1aXRlOiBzdWl0ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN1aXRlRW5kKHJpZCwgc3VpdGVJZCwgc3VpdGVSZXN1bHQpIHtcclxuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gdGhpcy5yZXN1bHRzLmZpbmQoeCA9PiB4LnJpZCA9PT0gcmlkKTtcclxuICAgICAgICBpZiAoIXRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXN0UmVzdWx0LnN1aXRlcy5wdXNoKHN1aXRlUmVzdWx0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke3N1aXRlUmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHN1aXRlUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FzZVN0YXJ0KHJpZCwgc3VpdGVJZCwgY2FzZUlkLCBjYXNlRGVmKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYC0gQ2FzZSBcIiR7Y2FzZURlZi5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjYXNlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIGNhc2VJZCxcclxuICAgICAgICAgICAgY2FzZTogY2FzZURlZixcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhc2VFbmQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIGNhc2VSZXN1bHQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgLSBDYXNlIFwiJHtjYXNlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke2Nhc2VSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2FzZTplbmQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGNhc2VSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwU3RhcnQocmlkLCBzdGVwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgLSBTdGVwIFwiJHtzdGVwLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucm9vdFBhdGggJiYgdGhpcy5vcHRpb25zLmZyYW1ld29yayAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrID09PSAnY3VjdW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3B0aW9ucy5yb290UGF0aCwgc3RlcC5sb2NhdGlvbik7XHJcbiAgICAgICAgICAgIHN0ZXAubG9jYXRpb24gPSBmdWxsUGF0aCsnOjEnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXAsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwRW5kKHJpZCwgc3RlcFJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHN0ZXBSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBzdGVwUmVzdWx0LmR1cmF0aW9uID8gKHN0ZXBSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDIpIDogMDtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICAtIFN0ZXAgXCIke3N0ZXBSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgaW4gJHtkdXJhdGlvbn1zIHdpdGggc3RhdHVzOiAke3N0YXR1c30uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdGVwOiBzdGVwUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTG9nRW50cnkodGltZSwgbGV2ZWwsIG1zZywgc3JjID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnbG9nJywge1xyXG4gICAgICAgICAgICBsZXZlbCwgbXNnLCB0aW1lLCBzcmNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGZhaWx1cmUgb2JqZWN0IGluIG9uZSBvZiB0ZXN0IHJlc3VsdCdzIGVudGl0aWVzLiBcclxuICAgICAqIEBwYXJhbSB7VGVzdFJlc3VsdH0gdGVzdFJlc3VsdCBcclxuICAgICAqL1xyXG4gICAgX2dldEZpcnN0RmFpbHVyZSh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0UmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGVSZXN1bHQgb2YgdGVzdFJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYXNlUmVzdWx0IG9mIHN1aXRlUmVzdWx0LmNhc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdGVwUmVzdWx0IG9mIGNhc2VSZXN1bHQuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXBSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RlcFJlc3VsdC5mYWlsdXJlIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdyb3VwUmVzdWx0cygpIHtcclxuICAgICAgICBjb25zdCBncm91cGVkUmVzdWx0cyA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHVuZ3JvdXBlZFJlc3VsdHMgPSBbXTtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHRzKSB8fCB0aGlzLnJlc3VsdHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCByZXN1bHQgb2YgdGhpcy5yZXN1bHRzKSB7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0IHx8ICFyZXN1bHQub3B0aW9ucy5fZ3JvdXBSZXN1bHQucmVzdWx0S2V5KSB7XHJcbiAgICAgICAgICAgICAgICB1bmdyb3VwZWRSZXN1bHRzLnB1c2gocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdEtleSA9IHJlc3VsdC5vcHRpb25zLl9ncm91cFJlc3VsdC5yZXN1bHRLZXk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1aXRlS2V5ID0gcmVzdWx0Lm9wdGlvbnMuX2dyb3VwUmVzdWx0LnN1aXRlS2V5O1xyXG4gICAgICAgICAgICBsZXQgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW3Jlc3VsdEtleV07XHJcbiAgICAgICAgICAgIGlmICghZ3JvdXBlZFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW3Jlc3VsdEtleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlczogW10sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1aXRlS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdFsnX3N1aXRlc0hhc2gnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdGFydFRpbWUgPSBNYXRoLm1pbihncm91cGVkUmVzdWx0LnN0YXJ0VGltZSwgcmVzdWx0LnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0LmVuZFRpbWUgPSBNYXRoLm1heChncm91cGVkUmVzdWx0LmVuZFRpbWUsIHJlc3VsdC5lbmRUaW1lKTtcclxuICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZHVyYXRpb24gPSBncm91cGVkUmVzdWx0LmVuZFRpbWUgLSBncm91cGVkUmVzdWx0LnN0YXJ0VGltZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiBncm91cGluZyBpcyBieSByZXN1bHQgb25seSwgdGhlbiBqdXN0IGFwcGVuZCBjdXJyZW50IHJlc3VsdCdzIHN1aXRlcyB0byB0aGUgZ3JvdXAncyBzdWl0ZXNcclxuICAgICAgICAgICAgaWYgKCFzdWl0ZUtleSkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdWl0ZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBlZFJlc3VsdC5zdWl0ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0LnN1aXRlc1xyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3VycmVudFN1aXRlUmVzdWx0IG9mIHJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cEtleSA9IGAke3N1aXRlS2V5fS0ke2N1cnJlbnRTdWl0ZVJlc3VsdC5pdGVyYXRpb25OdW19YDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkU3VpdGVSZXN1bHQgPSBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWdyb3VwZWRTdWl0ZVJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkUmVzdWx0Ll9zdWl0ZXNIYXNoW2dyb3VwS2V5XSA9IHsgLi4uY3VycmVudFN1aXRlUmVzdWx0IH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lID0gTWF0aC5taW4oZ3JvdXBlZFN1aXRlUmVzdWx0LnN0YXJ0VGltZSwgY3VycmVudFN1aXRlUmVzdWx0LnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5lbmRUaW1lID0gTWF0aC5tYXgoZ3JvdXBlZFN1aXRlUmVzdWx0LmVuZFRpbWUsIGN1cnJlbnRTdWl0ZVJlc3VsdC5lbmRUaW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFN1aXRlUmVzdWx0LmR1cmF0aW9uID0gZ3JvdXBlZFN1aXRlUmVzdWx0LmVuZFRpbWUgLSBncm91cGVkU3VpdGVSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ncm91cGVkU3VpdGVSZXN1bHQuY2FzZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50U3VpdGVSZXN1bHQuY2FzZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTdWl0ZVJlc3VsdC5jYXNlcy5zb21lKGMgPT4gYy5zdGF0dXMgPT09IFN0YXR1cy5GQUlMRUQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3VpdGVSZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50U3VpdGVSZXN1bHQuY2FzZXMuc29tZShjID0+IGMuc3RhdHVzID09PSBTdGF0dXMuV0FSTklORykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdWl0ZVJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuV0FSTklORztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb252ZXJ0IGdyb3VwZWQgcmVzdWx0cyBoYXNoIHRvIGFuIGFycmF5XHJcbiAgICAgICAgY29uc3QgZ3JvdXBlZFJlc3VsdHNMaXN0ID0gT2JqZWN0LmtleXMoZ3JvdXBlZFJlc3VsdHMpLm1hcChcclxuICAgICAgICAgICAgZ3JvdXBLZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZFJlc3VsdCA9IGdyb3VwZWRSZXN1bHRzW2dyb3VwS2V5XTtcclxuICAgICAgICAgICAgICAgIGlmICghZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBncm91cGVkUmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdWl0ZXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXBlZFJlc3VsdC5zdWl0ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaCkubWFwKHN1aXRlR3JvdXBLZXkgPT4gZ3JvdXBlZFJlc3VsdC5fc3VpdGVzSGFzaFtzdWl0ZUdyb3VwS2V5XSlcclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdEZhaWxlZFN1aXRlID0gZ3JvdXBlZFJlc3VsdC5zdWl0ZXMuZmluZChzID0+IHMuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdEZhaWxlZFN1aXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZFJlc3VsdC5zdGF0dXMgPSBTdGF0dXMuRkFJTEVEO1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZmFpbHVyZSA9IGZpcnN0RmFpbGVkU3VpdGUuZmFpbHVyZSB8fCBncm91cGVkUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFN1aXRlV2l0aFdhcm5pbmcgPSBncm91cGVkUmVzdWx0LnN1aXRlcy5maW5kKHMgPT4gcy5zdGF0dXMgPT09IFN0YXR1cy5XQVJOSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RTdWl0ZVdpdGhXYXJuaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuc3RhdHVzID0gU3RhdHVzLldBUk5JTkc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRSZXN1bHQuZmFpbHVyZSA9IGZpcnN0U3VpdGVXaXRoV2FybmluZy5mYWlsdXJlIHx8IGdyb3VwZWRSZXN1bHQuZmFpbHVyZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgZ3JvdXBlZFJlc3VsdFsnX3N1aXRlc0hhc2gnXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBncm91cGVkUmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgcmVzdWx0cyA9IFsuLi5ncm91cGVkUmVzdWx0c0xpc3QsIC4uLnVuZ3JvdXBlZFJlc3VsdHNdO1xyXG4gICAgICAgIC8vIGNoYW5nZSByZXN1bHRzIHN0YXR1cyB0byBmYWlkZWQgaWYgZmFpbGVkIHN1aXRlcyBhcmUgZmluZGVkXHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMucmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMocmVzdWx0cyk7XHJcblxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXN1bHQocmVzdWx0cyk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcblxyXG4gICAgcmVjYWxjdWxhdGVSZXN1bHRGb3JTdGF0dXMocmVzdWx0cykge1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHJlc3VsdCAmJlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN1aXRlcyAmJlxyXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShyZXN1bHQuc3VpdGVzKSAmJlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnN1aXRlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0LnN1aXRlcy5maW5kKChzdWl0ZSkgPT4gc3VpdGUuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhdHVzID0gU3RhdHVzLkZBSUxFRDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5zdWl0ZXMuZmluZCgoc3VpdGUpID0+IHN1aXRlLnN0YXR1cyA9PT0gU3RhdHVzLldBUk5JTkcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IFN0YXR1cy5XQVJOSU5HO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlUmVzdWx0KHJlc3VsdHMpIHtcclxuICAgICAgICBjb25zdCB1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMgPSBbXTtcclxuXHJcbiAgICAgICAgcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICByZXN1bHQuc3VpdGVzLm1hcCgoc3VpdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlxdWVTdWl0ZXNJdGVyYXRpb25JZHMuaW5jbHVkZXMoc3VpdGUuaXRlcmF0aW9uTnVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignc3VpdGUuaXRlcmF0aW9uTnVtJywgc3VpdGUuaXRlcmF0aW9uTnVtLCAnIG5vdCB1bmlxdWUnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pcXVlU3VpdGVzSXRlcmF0aW9uSWRzLnB1c2goc3VpdGUuaXRlcmF0aW9uTnVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oxygen-cli",
3
- "version": "1.30.0",
3
+ "version": "1.30.2",
4
4
  "description": "Automation framework for testing modern applications",
5
5
  "main": "./build/index.js",
6
6
  "bin": {