oxygen-cli 1.29.1 → 1.30.1

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.1 (2023-08-29)
4
+
5
+ #### :beetle: Bug Fix
6
+ * Fix step's Warning status not being properly processed.
7
+ * Improve the way test result status for suites with Skipped and Warning statuses is determined.
8
+
9
+ ## v1.30.0 (2023-08-15)
10
+
11
+ #### :tada: New Feature
12
+ * Add `utils.transaction` command.
13
+
3
14
  ## v1.29.1 (2023-07-26)
4
15
 
5
16
  #### :beetle: Bug Fix
@@ -247,8 +247,25 @@ class UtilsModule extends _OxygenModule.default {
247
247
  throw new _OxygenError.default(_helper.default.errorCode.XML_ERROR, e.message);
248
248
  }
249
249
  }
250
+ /**
251
+ * @summary Opens new transaction.
252
+ * @description The transaction will persist untill a new one is opened. Transaction names must be unique.
253
+ * @function transaction
254
+ * @param {String} name - The transaction name.
255
+ */
256
+
257
+
258
+ async transaction(name) {
259
+ if (!name) {
260
+ return;
261
+ } // just in case user passed a complex object by mistake
262
+
263
+
264
+ name = name.toString();
265
+ global._lastTransactionName = name;
266
+ }
250
267
 
251
268
  }
252
269
 
253
270
  exports.default = UtilsModule;
254
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS11dGlscy5qcyJdLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsIlV0aWxzTW9kdWxlIiwiT3h5Z2VuTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwiX2Fsd2F5c0luaXRpYWxpemVkIiwiX2lzSW5pdGlhbGl6ZWQiLCJuYW1lIiwicGF1c2UiLCJtcyIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImxpYlV0aWxzIiwic2xlZXAiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHQiLCJyZWFkQ3N2IiwiZmlsZVBhdGgiLCJwYXJzZSIsInJlcXVpcmUiLCJmcyIsInBhdGgiLCJleHQiLCJleHRuYW1lIiwiT3hFcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1NWX0VSUk9SIiwiZGF0YSIsInJlYWRGaWxlU3luYyIsImUiLCJyZXBsYWNlIiwiYm9tIiwiY2hhckNvZGVBdCIsInRhYmxlIiwiY29sdW1ucyIsInRyaW0iLCJtZXNzYWdlIiwid3JpdGVDc3YiLCJPYmplY3RzVG9Dc3YiLCJjc3YiLCJ0b0Rpc2siLCJhbGxDb2x1bW5zIiwicmVhZFhsc3giLCJyZWFkZXIiLCJFeGNlbFJlYWRlciIsInJlYWQiLCJkbnNSZXNvbHZlIiwiaG9zdG5hbWUiLCJyclR5cGUiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwicnJUeXBlcyIsImluY2x1ZGVzIiwiU0NSSVBUX0VSUk9SIiwiam9pbiIsImRuc1Byb21pc2VzIiwicHJvbWlzZXMiLCJyZXNvbHZlIiwiRE5TX0VSUk9SIiwieG1sVG9Kc29uIiwieG1sRGF0YVN0ciIsInBhcnNlciIsImZhc3RYbWxQYXJzZXIiLCJYTUxQYXJzZXIiLCJvdXRwdXQiLCJYTUxfRVJST1IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWVBOztBQUNB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LE1BQU0sR0FBRyxJQUFJQyx1QkFBY0MsU0FBbEIsQ0FBNEJqRSxPQUE1QixDQUFmO0FBQ0EsWUFBTWtFLE1BQU0sR0FBR0gsTUFBTSxDQUFDM0MsS0FBUCxDQUFhMEMsVUFBYixDQUFmO0FBQ0EsYUFBT0ksTUFBUDtBQUNILEtBSkQsQ0FJRSxPQUFPbEMsQ0FBUCxFQUFVO0FBQ1IsWUFBTSxJQUFJTixvQkFBSixDQUFZQyxnQkFBWUMsU0FBWixDQUFzQnVDLFNBQWxDLEVBQTZDbkMsQ0FBQyxDQUFDTyxPQUEvQyxDQUFOO0FBQ0g7QUFDSjs7QUF2TGlEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgdXRpbHNcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1pc2NlbGxhbmVvdXMgdXRpbGl0eSBtZXRob2RzLlxyXG4gKi9cclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ3V0aWxzJztcclxuaW1wb3J0IGZhc3RYbWxQYXJzZXIgZnJvbSAnZmFzdC14bWwtcGFyc2VyJztcclxuaW1wb3J0IE94eWdlbk1vZHVsZSBmcm9tICcuLi9jb3JlL094eWdlbk1vZHVsZSc7XHJcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IGxpYlV0aWxzIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgRXhjZWxSZWFkZXIgZnJvbSAnLi4vbGliL3BhcmFtLXJlYWRlci1leGNlbCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlsc01vZHVsZSBleHRlbmRzIE94eWdlbk1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLl9hbHdheXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIEBzdW1tYXJ5IEdldHMgbW9kdWxlIG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IENvbnN0YW50IHZhbHVlIFwidXRpbHNcIi5cclxuICAgICAqL1xyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUGF1c2UgdGVzdCBleGVjdXRpb24gZm9yIHRoZSBnaXZlbiBhbW91bnQgb2YgbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQGZ1bmN0aW9uIHBhdXNlXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gbXMgLSBNaWxsaXNlY29uZHMgdG8gcGF1c2UgdGhlIGV4ZWN1dGlvbiBmb3IuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHBhdXNlKG1zKSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZShtcywgJ21zJyk7XHJcbiAgICAgICAgYXdhaXQgbGliVXRpbHMuc2xlZXAobXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRGVjcnlwdCB0ZXh0XHJcbiAgICAgKiBAZnVuY3Rpb24gZGVjcnlwdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgLSBUZXh0XHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IERlY3J5cHRSZXN1bHQgT2JqZWN0IHdpdGggZ2V0RGVjcnlwdFJlc3VsdCBtZXRob2RcclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogLy8gdG8gZW5jcnlwdCBwbGFpbnRleHQgaW50byBjaXBoZXJ0ZXh0IFxyXG4gICAgICogY29uc3QgZW5jcnlwdCA9IHV0aWxzLmVuY3J5cHQoJ2h0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcnKTtcclxuICAgICAqIGxvZy5pbmZvKGVuY3J5cHQpOyAvLyB3aWxsIHByaW50IGI3NTdiYTJjMmZjNTBmYmI1MTFkNTk2ODE2Y2EwNmM0ZmE1NmY0ZTk4Y2UyMjJmMzBiYzU4ZDUyNTFlZDYzNWVcclxuICAgICAqIFxyXG4gICAgICogLy8gdG8gZGVjcnlwdCBjaXBoZXJ0ZXh0IGFuZCB1c2UgaXQgaW4gc2NyaXB0ICBcclxuICAgICAqIGNvbnN0IGRlY3J5cHQgPSB1dGlscy5kZWNyeXB0KGVuY3J5cHQpO1xyXG4gICAgICogbG9nLmluZm8oZGVjcnlwdCk7IC8vIHdpbGwgcHJpbnQgRU5DUllQVEVEXHJcbiAgICAgKiBcclxuICAgICAqIHdlYi5pbml0KCk7XHJcbiAgICAgKiB3ZWIub3BlbihkZWNyeXB0KTsgLy8gd2lsbCBvcGVuIGh0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmdcclxuICAgICAqIFxyXG4gICAgICogLy8gdG8gZ2V0IG9yaWdpbmFsIHBsYWludGV4dCB1c2UgZ2V0RGVjcnlwdFJlc3VsdFxyXG4gICAgICogY29uc3QgdmFsdWUgPSBkZWNyeXB0LmdldERlY3J5cHRSZXN1bHQoKTtcclxuICAgICAqIGxvZy5pbmZvKHZhbHVlKTsgLy93aWxsIHByaW50IGh0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmdcclxuICAgICAqL1xyXG4gICAgZGVjcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGxpYlV0aWxzLmRlY3J5cHQodGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBFbmNyeXB0IHRleHRcclxuICAgICAqIEBmdW5jdGlvbiBlbmNyeXB0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCAtIFRleHRcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gRW5jcnlwdGVkIHRleHRcclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogLy8gdG8gZW5jcnlwdCBwbGFpbnRleHQgaW50byBjaXBoZXJ0ZXh0IFxyXG4gICAgICogY29uc3QgZW5jcnlwdCA9IHV0aWxzLmVuY3J5cHQoJ2h0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcnKTtcclxuICAgICAqIGxvZy5pbmZvKGVuY3J5cHQpOyAvLyB3aWxsIHByaW50IGI3NTdiYTJjMmZjNTBmYmI1MTFkNTk2ODE2Y2EwNmM0ZmE1NmY0ZTk4Y2UyMjJmMzBiYzU4ZDUyNTFlZDYzNWVcclxuICAgICAqIFxyXG4gICAgICogLy8gdG8gZGVjcnlwdCBjaXBoZXJ0ZXh0IGFuZCB1c2UgaXQgaW4gc2NyaXB0ICBcclxuICAgICAqIGNvbnN0IGRlY3J5cHQgPSB1dGlscy5kZWNyeXB0KGVuY3J5cHQpO1xyXG4gICAgICogbG9nLmluZm8oZGVjcnlwdCk7IC8vIHdpbGwgcHJpbnQgRU5DUllQVEVEXHJcbiAgICAgKiBcclxuICAgICAqIHdlYi5pbml0KCk7XHJcbiAgICAgKiB3ZWIub3BlbihkZWNyeXB0KTsgLy8gd2lsbCBvcGVuIGh0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmdcclxuICAgICAqIFxyXG4gICAgICogLy8gdG8gZ2V0IG9yaWdpbmFsIHBsYWludGV4dCB1c2UgZ2V0RGVjcnlwdFJlc3VsdFxyXG4gICAgICogY29uc3QgdmFsdWUgPSBkZWNyeXB0LmdldERlY3J5cHRSZXN1bHQoKTtcclxuICAgICAqIGxvZy5pbmZvKHZhbHVlKTsgLy93aWxsIHByaW50IGh0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmdcclxuICAgICAqL1xyXG4gICAgZW5jcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGxpYlV0aWxzLmVuY3J5cHQodGV4dCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJlYWRzIGRhdGEgZnJvbSBjc3YgZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIHJlYWRDc3ZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gZmlsZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gW09wdGlvbnNdKGh0dHBzOi8vY3N2LmpzLm9yZy9wYXJzZS9vcHRpb25zLylcclxuICAgICAqL1xyXG4gICAgcmVhZENzdihmaWxlUGF0aCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2UgPSByZXF1aXJlKCdjc3YtcGFyc2UvbGliL3N5bmMnKTtcclxuICAgICAgICB2YXIgZnMgPSByZXF1aXJlKCdmcycpO1xyXG4gICAgICAgIHZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5cclxuICAgICAgICB2YXIgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICBpZiAoZXh0ICE9PSAnLmNzdicgJiYgZXh0ICE9PSAnLnR4dCcpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNTVl9FUlJPUiwgJ1Vuc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9uOiAnICsgZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkYXRhO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCAnVW5hYmxlIHRvIHJlYWQgcGFyYW1ldGVycyBmaWxlOiAnICsgZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDU1ZzIHByb2R1Y2VkIGJ5IE9TIFggRXhjZWwgaGF2ZSBoZWFkZXIgdGVybWluYXRlZCB3aXRoIDBkMGQwYVxyXG4gICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1xcclxcci9nLCAnXFxyJyk7XHJcblxyXG4gICAgICAgIC8vIHN0cmlwIEJPTSBmb3IgVVRGLThcclxuICAgICAgICB2YXIgYm9tID0gZmFsc2U7XHJcbiAgICAgICAgLy8gY2F0Y2hlcyAweEVGQkJCRiAoVVRGLTggQk9NKSBiZWNhdXNlIHRoZSBidWZmZXItdG8tc3RyaW5nXHJcbiAgICAgICAgLy8gY29udmVyc2lvbiB0cmFuc2xhdGVzIGl0IHRvIDB4RkVGRiAoVVRGLTE2IEJPTSlcclxuICAgICAgICBpZiAoZGF0YS5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcclxuICAgICAgICAgICAgYm9tID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciB0YWJsZSA9IHBhcnNlKGRhdGEsIHsgYm9tOiBib20sIGNvbHVtbnM6IHRydWUsIHRyaW06IHRydWUsIC4uLm9wdGlvbnMgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgV3JpdGVzIGRhdGEgaW50byBjc3YgZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIHdyaXRlQ3N2XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIGZpbGVcclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgLSBDU1YgZGF0YSBpbiBmb3JtYXQgW3tjb2x1bW5fbmFtZV8xOiAnZm9vJywgY29sdW1uX25hbWVfMjogJ2Jhcid9XVxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gW09wdGlvbnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9hbnRvbi1ib3Qvb2JqZWN0cy10by1jc3YjYXN5bmMtdG9kaXNrZmlsZW5hbWUtb3B0aW9ucylcclxuICAgICAqL1xyXG4gICAgYXN5bmMgd3JpdGVDc3YoZmlsZVBhdGgsIGRhdGEsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IE9iamVjdHNUb0NzdiA9IHJlcXVpcmUoJ29iamVjdHMtdG8tY3N2Jyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNzdiA9IG5ldyBPYmplY3RzVG9Dc3YoZGF0YSk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNzdi50b0Rpc2soZmlsZVBhdGgsIHsgYWxsQ29sdW1uczogdHJ1ZSwgLi4ub3B0aW9ucyB9KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DU1ZfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUmVhZHMgZGF0YSBmcm9tIFhsc3ggZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIHJlYWRYbHN4XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIGZpbGVcclxuICAgICAqIEByZXR1cm4ge0FycmF5fSAtIEFycmF5IG9mIHhsc3ggZGF0YVxyXG4gICAgICovXHJcbiAgICBhc3luYyByZWFkWGxzeChmaWxlUGF0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBFeGNlbFJlYWRlcigpO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCByZWFkZXIucmVhZChmaWxlUGF0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBVc2VzIHRoZSBETlMgcHJvdG9jb2wgdG8gcmVzb2x2ZSBhIGhvc3QgbmFtZVxyXG4gICAgICogQGZ1bmN0aW9uIGRuc1Jlc29sdmVcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBob3N0bmFtZSAtIEhvc3QgbmFtZSB0byByZXNvbHZlLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSByclR5cGUgLSBSZXNvdXJjZSByZWNvcmQgdHlwZS4gRGVmYXVsdDogJ0EnLlxyXG4gICAgICogQHJldHVybiB7U3RyaW5nW10gfCBPYmplY3R9IC0gQXJyYXkgb3IgT2JqZWN0IG9mIHJlc291cmNlIHJlY29yZHMuIFRoZSB0eXBlIGFuZCBzdHJ1Y3R1cmUgb2YgaW5kaXZpZHVhbCByZXN1bHRzIHZhcnkgYmFzZWQgb24gcnJ0eXBlXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRuc1Jlc29sdmUoaG9zdG5hbWUsIHJyVHlwZSA9ICdBJykge1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcoaG9zdG5hbWUsICdob3N0bmFtZScpO1xyXG4gICAgICAgIGNvbnN0IHJyVHlwZXMgPSBbJ0EnLCAnQUFBQScsICdBTlknLCAnQ05BTUUnLCAnTVgnLCAnTkFQVFInLCAnTlMnLCAnUFRSJywgJ1NPQScsICdTUlYnLCAnVFhUJ107XHJcblxyXG4gICAgICAgIGlmICghcnJUeXBlcy5pbmNsdWRlcyhyclR5cGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsIGBJbnZhbGlkIGFyZ3VtZW50IC0gJ3JyVHlwZScuIEF2YWlsYWJsZSByclR5cGUgdmFsdWVzOiAke3JyVHlwZXMuam9pbignLCAnKX1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRuc1Byb21pc2VzID0gcmVxdWlyZSgnZG5zJykucHJvbWlzZXM7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGRuc1Byb21pc2VzLnJlc29sdmUoaG9zdG5hbWUsIHJyVHlwZSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuRE5TX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFBhcnNlIFhNTCBkYXRhIHRvIEpTIG9iamVjdCBcclxuICAgICAqIEBmdW5jdGlvbiB4bWxUb0pzb25cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfEJ1ZmZlcn0geG1sRGF0YVN0ciAtIExpa2UgPHJvb3QgYT1cIm5pY2VcIiBiPVwidmVyeSBuaWNlXCIgPjxhPndvdzwvYT48L3Jvb3Q+XHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSBvcHRpb25zIC0gW09wdGlvbnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9OYXR1cmFsSW50ZWxsaWdlbmNlL2Zhc3QteG1sLXBhcnNlci9ibG9iL21hc3Rlci9kb2NzL3Y0LzIuWE1McGFyc2VPcHRpb25zLm1kKSBcclxuICAgICAqL1xyXG4gICAgeG1sVG9Kc29uKHhtbERhdGFTdHIsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBmYXN0WG1sUGFyc2VyLlhNTFBhcnNlcihvcHRpb25zKTtcclxuICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gcGFyc2VyLnBhcnNlKHhtbERhdGFTdHIpO1xyXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlhNTF9FUlJPUiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
271
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS11dGlscy5qcyJdLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsIlV0aWxzTW9kdWxlIiwiT3h5Z2VuTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwiX2Fsd2F5c0luaXRpYWxpemVkIiwiX2lzSW5pdGlhbGl6ZWQiLCJuYW1lIiwicGF1c2UiLCJtcyIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImxpYlV0aWxzIiwic2xlZXAiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHQiLCJyZWFkQ3N2IiwiZmlsZVBhdGgiLCJwYXJzZSIsInJlcXVpcmUiLCJmcyIsInBhdGgiLCJleHQiLCJleHRuYW1lIiwiT3hFcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1NWX0VSUk9SIiwiZGF0YSIsInJlYWRGaWxlU3luYyIsImUiLCJyZXBsYWNlIiwiYm9tIiwiY2hhckNvZGVBdCIsInRhYmxlIiwiY29sdW1ucyIsInRyaW0iLCJtZXNzYWdlIiwid3JpdGVDc3YiLCJPYmplY3RzVG9Dc3YiLCJjc3YiLCJ0b0Rpc2siLCJhbGxDb2x1bW5zIiwicmVhZFhsc3giLCJyZWFkZXIiLCJFeGNlbFJlYWRlciIsInJlYWQiLCJkbnNSZXNvbHZlIiwiaG9zdG5hbWUiLCJyclR5cGUiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwicnJUeXBlcyIsImluY2x1ZGVzIiwiU0NSSVBUX0VSUk9SIiwiam9pbiIsImRuc1Byb21pc2VzIiwicHJvbWlzZXMiLCJyZXNvbHZlIiwiRE5TX0VSUk9SIiwieG1sVG9Kc29uIiwieG1sRGF0YVN0ciIsInBhcnNlciIsImZhc3RYbWxQYXJzZXIiLCJYTUxQYXJzZXIiLCJvdXRwdXQiLCJYTUxfRVJST1IiLCJ0cmFuc2FjdGlvbiIsInRvU3RyaW5nIiwiZ2xvYmFs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LFVBQUQsRUFBYTlELE9BQU8sR0FBRyxFQUF2QixFQUEyQjtBQUNoQyxRQUFJO0FBQ0EsWUFBTStELE1BQU0sR0FBRyxJQUFJQyx1QkFBY0MsU0FBbEIsQ0FBNEJqRSxPQUE1QixDQUFmO0FBQ0EsWUFBTWtFLE1BQU0sR0FBR0gsTUFBTSxDQUFDM0MsS0FBUCxDQUFhMEMsVUFBYixDQUFmO0FBQ0EsYUFBT0ksTUFBUDtBQUNILEtBSkQsQ0FJRSxPQUFPbEMsQ0FBUCxFQUFVO0FBQ1IsWUFBTSxJQUFJTixvQkFBSixDQUFZQyxnQkFBWUMsU0FBWixDQUFzQnVDLFNBQWxDLEVBQTZDbkMsQ0FBQyxDQUFDTyxPQUEvQyxDQUFOO0FBQ0g7QUFDSjtBQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ3FCLFFBQVg2QixXQUFXLENBQUM1RCxJQUFELEVBQU87QUFDcEIsUUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFDUDtBQUNILEtBSG1CLENBSXBCOzs7QUFDQUEsSUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUM2RCxRQUFMLEVBQVA7QUFDQUMsSUFBQUEsTUFBTSxDQUFDQyxvQkFBUCxHQUE4Qi9ELElBQTlCO0FBQ0g7O0FBdE1pRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIHV0aWxzXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtaXNjZWxsYW5lb3VzIHV0aWxpdHkgbWV0aG9kcy5cclxuICovXHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd1dGlscyc7XHJcbmltcG9ydCBmYXN0WG1sUGFyc2VyIGZyb20gJ2Zhc3QteG1sLXBhcnNlcic7XHJcbmltcG9ydCBPeHlnZW5Nb2R1bGUgZnJvbSAnLi4vY29yZS9PeHlnZW5Nb2R1bGUnO1xyXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBsaWJVdGlscyBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IEV4Y2VsUmVhZGVyIGZyb20gJy4uL2xpYi9wYXJhbS1yZWFkZXItZXhjZWwnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXRpbHNNb2R1bGUgZXh0ZW5kcyBPeHlnZW5Nb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy5fYWx3YXlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBAc3VtbWFyeSBHZXRzIG1vZHVsZSBuYW1lXHJcbiAgICAgKiBAZnVuY3Rpb24gbmFtZVxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBDb25zdGFudCB2YWx1ZSBcInV0aWxzXCIuXHJcbiAgICAgKi9cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFBhdXNlIHRlc3QgZXhlY3V0aW9uIGZvciB0aGUgZ2l2ZW4gYW1vdW50IG9mIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBmdW5jdGlvbiBwYXVzZVxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG1zIC0gTWlsbGlzZWNvbmRzIHRvIHBhdXNlIHRoZSBleGVjdXRpb24gZm9yLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBwYXVzZShtcykge1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUobXMsICdtcycpO1xyXG4gICAgICAgIGF3YWl0IGxpYlV0aWxzLnNsZWVwKG1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IERlY3J5cHQgdGV4dFxyXG4gICAgICogQGZ1bmN0aW9uIGRlY3J5cHRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IC0gVGV4dFxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBEZWNyeXB0UmVzdWx0IE9iamVjdCB3aXRoIGdldERlY3J5cHRSZXN1bHQgbWV0aG9kXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIHRvIGVuY3J5cHQgcGxhaW50ZXh0IGludG8gY2lwaGVydGV4dCBcclxuICAgICAqIGNvbnN0IGVuY3J5cHQgPSB1dGlscy5lbmNyeXB0KCdodHRwczovL3d3dy53aWtpcGVkaWEub3JnJyk7XHJcbiAgICAgKiBsb2cuaW5mbyhlbmNyeXB0KTsgLy8gd2lsbCBwcmludCBiNzU3YmEyYzJmYzUwZmJiNTExZDU5NjgxNmNhMDZjNGZhNTZmNGU5OGNlMjIyZjMwYmM1OGQ1MjUxZWQ2MzVlXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGRlY3J5cHQgY2lwaGVydGV4dCBhbmQgdXNlIGl0IGluIHNjcmlwdCAgXHJcbiAgICAgKiBjb25zdCBkZWNyeXB0ID0gdXRpbHMuZGVjcnlwdChlbmNyeXB0KTtcclxuICAgICAqIGxvZy5pbmZvKGRlY3J5cHQpOyAvLyB3aWxsIHByaW50IEVOQ1JZUFRFRFxyXG4gICAgICogXHJcbiAgICAgKiB3ZWIuaW5pdCgpO1xyXG4gICAgICogd2ViLm9wZW4oZGVjcnlwdCk7IC8vIHdpbGwgb3BlbiBodHRwczovL3d3dy53aWtpcGVkaWEub3JnXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGdldCBvcmlnaW5hbCBwbGFpbnRleHQgdXNlIGdldERlY3J5cHRSZXN1bHRcclxuICAgICAqIGNvbnN0IHZhbHVlID0gZGVjcnlwdC5nZXREZWNyeXB0UmVzdWx0KCk7XHJcbiAgICAgKiBsb2cuaW5mbyh2YWx1ZSk7IC8vd2lsbCBwcmludCBodHRwczovL3d3dy53aWtpcGVkaWEub3JnXHJcbiAgICAgKi9cclxuICAgIGRlY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHJldHVybiBsaWJVdGlscy5kZWNyeXB0KHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRW5jcnlwdCB0ZXh0XHJcbiAgICAgKiBAZnVuY3Rpb24gZW5jcnlwdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgLSBUZXh0XHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IEVuY3J5cHRlZCB0ZXh0XHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIHRvIGVuY3J5cHQgcGxhaW50ZXh0IGludG8gY2lwaGVydGV4dCBcclxuICAgICAqIGNvbnN0IGVuY3J5cHQgPSB1dGlscy5lbmNyeXB0KCdodHRwczovL3d3dy53aWtpcGVkaWEub3JnJyk7XHJcbiAgICAgKiBsb2cuaW5mbyhlbmNyeXB0KTsgLy8gd2lsbCBwcmludCBiNzU3YmEyYzJmYzUwZmJiNTExZDU5NjgxNmNhMDZjNGZhNTZmNGU5OGNlMjIyZjMwYmM1OGQ1MjUxZWQ2MzVlXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGRlY3J5cHQgY2lwaGVydGV4dCBhbmQgdXNlIGl0IGluIHNjcmlwdCAgXHJcbiAgICAgKiBjb25zdCBkZWNyeXB0ID0gdXRpbHMuZGVjcnlwdChlbmNyeXB0KTtcclxuICAgICAqIGxvZy5pbmZvKGRlY3J5cHQpOyAvLyB3aWxsIHByaW50IEVOQ1JZUFRFRFxyXG4gICAgICogXHJcbiAgICAgKiB3ZWIuaW5pdCgpO1xyXG4gICAgICogd2ViLm9wZW4oZGVjcnlwdCk7IC8vIHdpbGwgb3BlbiBodHRwczovL3d3dy53aWtpcGVkaWEub3JnXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGdldCBvcmlnaW5hbCBwbGFpbnRleHQgdXNlIGdldERlY3J5cHRSZXN1bHRcclxuICAgICAqIGNvbnN0IHZhbHVlID0gZGVjcnlwdC5nZXREZWNyeXB0UmVzdWx0KCk7XHJcbiAgICAgKiBsb2cuaW5mbyh2YWx1ZSk7IC8vd2lsbCBwcmludCBodHRwczovL3d3dy53aWtpcGVkaWEub3JnXHJcbiAgICAgKi9cclxuICAgIGVuY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHJldHVybiBsaWJVdGlscy5lbmNyeXB0KHRleHQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZWFkcyBkYXRhIGZyb20gY3N2IGZpbGVcclxuICAgICAqIEBmdW5jdGlvbiByZWFkQ3N2XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIGZpbGVcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIFtPcHRpb25zXShodHRwczovL2Nzdi5qcy5vcmcvcGFyc2Uvb3B0aW9ucy8pXHJcbiAgICAgKi9cclxuICAgIHJlYWRDc3YoZmlsZVBhdGgsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IHBhcnNlID0gcmVxdWlyZSgnY3N2LXBhcnNlL2xpYi9zeW5jJyk7XHJcbiAgICAgICAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcclxuICAgICAgICB2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxuXHJcbiAgICAgICAgdmFyIGV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgaWYgKGV4dCAhPT0gJy5jc3YnICYmIGV4dCAhPT0gJy50eHQnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DU1ZfRVJST1IsICdVbnN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbjogJyArIGV4dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGF0YTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkYXRhID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmOCcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNTVl9FUlJPUiwgJ1VuYWJsZSB0byByZWFkIHBhcmFtZXRlcnMgZmlsZTogJyArIGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ1NWcyBwcm9kdWNlZCBieSBPUyBYIEV4Y2VsIGhhdmUgaGVhZGVyIHRlcm1pbmF0ZWQgd2l0aCAwZDBkMGFcclxuICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC9cXHJcXHIvZywgJ1xccicpO1xyXG5cclxuICAgICAgICAvLyBzdHJpcCBCT00gZm9yIFVURi04XHJcbiAgICAgICAgdmFyIGJvbSA9IGZhbHNlO1xyXG4gICAgICAgIC8vIGNhdGNoZXMgMHhFRkJCQkYgKFVURi04IEJPTSkgYmVjYXVzZSB0aGUgYnVmZmVyLXRvLXN0cmluZ1xyXG4gICAgICAgIC8vIGNvbnZlcnNpb24gdHJhbnNsYXRlcyBpdCB0byAweEZFRkYgKFVURi0xNiBCT00pXHJcbiAgICAgICAgaWYgKGRhdGEuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XHJcbiAgICAgICAgICAgIGJvbSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgdGFibGUgPSBwYXJzZShkYXRhLCB7IGJvbTogYm9tLCBjb2x1bW5zOiB0cnVlLCB0cmltOiB0cnVlLCAuLi5vcHRpb25zIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNTVl9FUlJPUiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0YWJsZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFdyaXRlcyBkYXRhIGludG8gY3N2IGZpbGVcclxuICAgICAqIEBmdW5jdGlvbiB3cml0ZUNzdlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byBmaWxlXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhIC0gQ1NWIGRhdGEgaW4gZm9ybWF0IFt7Y29sdW1uX25hbWVfMTogJ2ZvbycsIGNvbHVtbl9uYW1lXzI6ICdiYXInfV1cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIFtPcHRpb25zXShodHRwczovL2dpdGh1Yi5jb20vYW50b24tYm90L29iamVjdHMtdG8tY3N2I2FzeW5jLXRvZGlza2ZpbGVuYW1lLW9wdGlvbnMpXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHdyaXRlQ3N2KGZpbGVQYXRoLCBkYXRhLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBPYmplY3RzVG9Dc3YgPSByZXF1aXJlKCdvYmplY3RzLXRvLWNzdicpO1xyXG4gICAgICAgICAgICBjb25zdCBjc3YgPSBuZXcgT2JqZWN0c1RvQ3N2KGRhdGEpO1xyXG4gICAgICAgICAgICBhd2FpdCBjc3YudG9EaXNrKGZpbGVQYXRoLCB7IGFsbENvbHVtbnM6IHRydWUsIC4uLm9wdGlvbnMgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJlYWRzIGRhdGEgZnJvbSBYbHN4IGZpbGVcclxuICAgICAqIEBmdW5jdGlvbiByZWFkWGxzeFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byBmaWxlXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheX0gLSBBcnJheSBvZiB4bHN4IGRhdGFcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVhZFhsc3goZmlsZVBhdGgpIHtcclxuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRXhjZWxSZWFkZXIoKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgcmVhZGVyLnJlYWQoZmlsZVBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgVXNlcyB0aGUgRE5TIHByb3RvY29sIHRvIHJlc29sdmUgYSBob3N0IG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBkbnNSZXNvbHZlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaG9zdG5hbWUgLSBIb3N0IG5hbWUgdG8gcmVzb2x2ZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gcnJUeXBlIC0gUmVzb3VyY2UgcmVjb3JkIHR5cGUuIERlZmF1bHQ6ICdBJy5cclxuICAgICAqIEByZXR1cm4ge1N0cmluZ1tdIHwgT2JqZWN0fSAtIEFycmF5IG9yIE9iamVjdCBvZiByZXNvdXJjZSByZWNvcmRzLiBUaGUgdHlwZSBhbmQgc3RydWN0dXJlIG9mIGluZGl2aWR1YWwgcmVzdWx0cyB2YXJ5IGJhc2VkIG9uIHJydHlwZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBkbnNSZXNvbHZlKGhvc3RuYW1lLCByclR5cGUgPSAnQScpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKGhvc3RuYW1lLCAnaG9zdG5hbWUnKTtcclxuICAgICAgICBjb25zdCByclR5cGVzID0gWydBJywgJ0FBQUEnLCAnQU5ZJywgJ0NOQU1FJywgJ01YJywgJ05BUFRSJywgJ05TJywgJ1BUUicsICdTT0EnLCAnU1JWJywgJ1RYVCddO1xyXG5cclxuICAgICAgICBpZiAoIXJyVHlwZXMuaW5jbHVkZXMocnJUeXBlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBgSW52YWxpZCBhcmd1bWVudCAtICdyclR5cGUnLiBBdmFpbGFibGUgcnJUeXBlIHZhbHVlczogJHtyclR5cGVzLmpvaW4oJywgJyl9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkbnNQcm9taXNlcyA9IHJlcXVpcmUoJ2RucycpLnByb21pc2VzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBkbnNQcm9taXNlcy5yZXNvbHZlKGhvc3RuYW1lLCByclR5cGUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkROU19FUlJPUiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQYXJzZSBYTUwgZGF0YSB0byBKUyBvYmplY3QgXHJcbiAgICAgKiBAZnVuY3Rpb24geG1sVG9Kc29uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IHhtbERhdGFTdHIgLSBMaWtlIDxyb290IGE9XCJuaWNlXCIgYj1cInZlcnkgbmljZVwiID48YT53b3c8L2E+PC9yb290PlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gb3B0aW9ucyAtIFtPcHRpb25zXShodHRwczovL2dpdGh1Yi5jb20vTmF0dXJhbEludGVsbGlnZW5jZS9mYXN0LXhtbC1wYXJzZXIvYmxvYi9tYXN0ZXIvZG9jcy92NC8yLlhNTHBhcnNlT3B0aW9ucy5tZCkgXHJcbiAgICAgKi9cclxuICAgIHhtbFRvSnNvbih4bWxEYXRhU3RyLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgZmFzdFhtbFBhcnNlci5YTUxQYXJzZXIob3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHBhcnNlci5wYXJzZSh4bWxEYXRhU3RyKTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5YTUxfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgT3BlbnMgbmV3IHRyYW5zYWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHBlcnNpc3QgdW50aWxsIGEgbmV3IG9uZSBpcyBvcGVuZWQuIFRyYW5zYWN0aW9uIG5hbWVzIG11c3QgYmUgdW5pcXVlLlxyXG4gICAgICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSB0cmFuc2FjdGlvbiBuYW1lLlxyXG4gICAgICovXHJcbiAgICBhc3luYyB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8ganVzdCBpbiBjYXNlIHVzZXIgcGFzc2VkIGEgY29tcGxleCBvYmplY3QgYnkgbWlzdGFrZVxyXG4gICAgICAgIG5hbWUgPSBuYW1lLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgIH1cclxufSJdfQ==
@@ -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.29.1",
3
+ "version": "1.30.1",
4
4
  "description": "Automation framework for testing modern applications",
5
5
  "main": "./build/index.js",
6
6
  "bin": {