velocious 1.0.240 → 1.0.242

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/README.md CHANGED
@@ -71,10 +71,12 @@ Retry flaky tests by setting a retry count on the test args.
71
71
 
72
72
  ```js
73
73
  describe("Tasks", () => {
74
- it("retries a flaky check", {retry: 2}, async () => {})
74
+ it("retries a flaky check", {retry: 2}, async () => {})
75
75
  })
76
76
  ```
77
77
 
78
+ During a failing run, Velocious captures all console output emitted while each test executes. At the end of a failed run, those logs are saved under `tmp/screenshots` next to failure screenshots/browser logs/HTML, and each failed test summary prints the saved console log path.
79
+
78
80
  Listen for retry events if you need to restart services between attempts.
79
81
 
80
82
  ```js
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/controller.js"],"names":[],"mappings":"AAYA;IACE;;;OAGG;IACH,gCAHW,MAAM,GACJ,IAAI,CAShB;IAED;;;;;;;;;OASG;IACH,wFARG;QAAqB,MAAM,EAAnB,MAAM;QACqC,aAAa,EAAxD,OAAO,oBAAoB,EAAE,OAAO;QACvB,UAAU,EAAvB,MAAM;QACO,MAAM,EAAnB,MAAM;QACkD,OAAO,EAA/D,OAAO,iCAAiC,EAAE,OAAO;QACQ,QAAQ,EAAjE,OAAO,kCAAkC,EAAE,OAAO;QACrC,QAAQ,EAArB,MAAM;KAChB,EAmBA;IATC,gBAAqB;IACrB,oBAA6B;IAC7B,qDAAmC;IACnC,eAA8B;IAC9B,aAAqB;IACrB,4DAAuB;IACvB,8DAAyB;IACzB,eAAoB;IACpB,kBAAyB;IAG3B,uCAAuC;IACvC,aADc,MAAM,CACe;IAEnC,4EAA4E;IAC5E,oBADc,OAAO,oBAAoB,EAAE,OAAO,CACD;IAEjD,oDAAoD;IACpD,aADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACE;IAEnC,mFAAmF;IACnF,cADc,OAAO,iCAAiC,EAAE,OAAO,CAC1B;IAErC;;;;;;;;;;;;;OAaG;IACH,gBAbW,MAAM,SACN,OAAO,SAEf;QAAsB,MAAM,GAApB,MAAM;QACM,OAAO,GAAnB,IAAI;QACW,QAAQ,GAAvB,OAAO;QACO,MAAM,GAApB,MAAM;QACQ,IAAI,GAAlB,MAAM;QACS,MAAM,GAArB,OAAO;QAC0B,QAAQ,GAAzC,KAAK,GAAG,QAAQ,GAAG,MAAM;QACV,SAAS,GAAxB,OAAO;KACf,GAAU,MAAM,CAWlB;IAED,sDAAsD;IACtD,cADc,MAAM,EAAE,CAUrB;IAJG,mBAAuD;IAM3D;;;OAGG;IACH,4BAIC;IAED,qCA4BC;IAED,oDAAoD;IACpD,UADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAQhC;IAED,8DAA8D;IAC9D,mBADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAWhC;IAED;;;;;OAKG;IACH,uCAJG;QAAsB,IAAI,GAAlB,MAAM;QACiB,MAAM,GAA7B,MAAM,GAAG,MAAM;KACvB,GAAU,OAAO,CAAC,IAAI,CAAC,CAczB;IAED,2CAA2C;IAC3C,oBADY,MAAM,QAMjB;IAED,0DAA0D;IAC1D,cADc,OAAO,CAAC,IAAI,CAAC,CA8B1B;IAED,0CAA0C;IAC1C,cADc,IAAI,CAGjB;IAED;;;;;;;OAOG;IACH,mBANW,MAAM,SAEd;QAAsB,WAAW,GAAzB,MAAM;QACiB,MAAM,GAA7B,MAAM,GAAG,MAAM;KACvB,GAAU,IAAI,CAsBhB;IAED;;;OAGG;IACH,8BAHW,MAAM,GACJ,MAAM,CAiBlB;IAED,+GAA+G;IAC/G,kBADc,OAAO,4BAA4B,EAAE,OAAO,GAAG,SAAS,CAGrE;IAED,mFAAmF;IACnF,WADc,OAAO,iCAAiC,EAAE,OAAO,CAC7B;IAElC,qFAAqF;IACrF,YADc,OAAO,kCAAkC,EAAE,OAAO,CAC5B;CACrC;mBAjSkB,aAAa;mBACb,yBAAyB"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/controller.js"],"names":[],"mappings":"AAYA;IACE;;;OAGG;IACH,gCAHW,MAAM,GACJ,IAAI,CAShB;IAED;;;;;;;;;OASG;IACH,wFARG;QAAqB,MAAM,EAAnB,MAAM;QACqC,aAAa,EAAxD,OAAO,oBAAoB,EAAE,OAAO;QACvB,UAAU,EAAvB,MAAM;QACO,MAAM,EAAnB,MAAM;QACkD,OAAO,EAA/D,OAAO,iCAAiC,EAAE,OAAO;QACQ,QAAQ,EAAjE,OAAO,kCAAkC,EAAE,OAAO;QACrC,QAAQ,EAArB,MAAM;KAChB,EAmBA;IATC,gBAAqB;IACrB,oBAA6B;IAC7B,qDAAmC;IACnC,eAA8B;IAC9B,aAAqB;IACrB,4DAAuB;IACvB,8DAAyB;IACzB,eAAoB;IACpB,kBAAyB;IAG3B,uCAAuC;IACvC,aADc,MAAM,CACe;IAEnC,4EAA4E;IAC5E,oBADc,OAAO,oBAAoB,EAAE,OAAO,CACD;IAEjD,oDAAoD;IACpD,aADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACE;IAEnC,mFAAmF;IACnF,cADc,OAAO,iCAAiC,EAAE,OAAO,CAC1B;IAErC;;;;;;;;;;;;;OAaG;IACH,gBAbW,MAAM,SACN,OAAO,SAEf;QAAsB,MAAM,GAApB,MAAM;QACM,OAAO,GAAnB,IAAI;QACW,QAAQ,GAAvB,OAAO;QACO,MAAM,GAApB,MAAM;QACQ,IAAI,GAAlB,MAAM;QACS,MAAM,GAArB,OAAO;QAC0B,QAAQ,GAAzC,KAAK,GAAG,QAAQ,GAAG,MAAM;QACV,SAAS,GAAxB,OAAO;KACf,GAAU,MAAM,CAWlB;IAED,sDAAsD;IACtD,cADc,MAAM,EAAE,CAUrB;IAJG,mBAAuD;IAM3D;;;OAGG;IACH,4BAIC;IAED,qCA4BC;IAED,oDAAoD;IACpD,UADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAQhC;IAED,8DAA8D;IAC9D,mBADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CA4BhC;IAED;;;;;OAKG;IACH,uCAJG;QAAsB,IAAI,GAAlB,MAAM;QACiB,MAAM,GAA7B,MAAM,GAAG,MAAM;KACvB,GAAU,OAAO,CAAC,IAAI,CAAC,CAczB;IAED,2CAA2C;IAC3C,oBADY,MAAM,QAMjB;IAED,0DAA0D;IAC1D,cADc,OAAO,CAAC,IAAI,CAAC,CA8B1B;IAED,0CAA0C;IAC1C,cADc,IAAI,CAGjB;IAED;;;;;;;OAOG;IACH,mBANW,MAAM,SAEd;QAAsB,WAAW,GAAzB,MAAM;QACiB,MAAM,GAA7B,MAAM,GAAG,MAAM;KACvB,GAAU,IAAI,CAsBhB;IAED;;;OAGG;IACH,8BAHW,MAAM,GACJ,MAAM,CAiBlB;IAED,+GAA+G;IAC/G,kBADc,OAAO,4BAA4B,EAAE,OAAO,GAAG,SAAS,CAGrE;IAED,mFAAmF;IACnF,WADc,OAAO,iCAAiC,EAAE,OAAO,CAC7B;IAElC,qFAAqF;IACrF,YADc,OAAO,kCAAkC,EAAE,OAAO,CAC5B;CACrC;mBAlTkB,aAAa;mBACb,yBAAyB"}
@@ -136,10 +136,26 @@ export default class VelociousController {
136
136
  const query = this._request.path().split("?")[1];
137
137
  if (!query)
138
138
  return {};
139
- /** @type {Record<string, any>} */
140
- const unparsedParams = querystring.parse(query);
141
- const paramsToObject = new ParamsToObject(unparsedParams);
142
- return paramsToObject.toObject();
139
+ try {
140
+ /** @type {Record<string, any>} */
141
+ const unparsedParams = querystring.parse(query);
142
+ const paramsToObject = new ParamsToObject(unparsedParams);
143
+ return paramsToObject.toObject();
144
+ }
145
+ catch (error) {
146
+ const ensuredError = /** @type {Error & {velociousContext?: Record<string, unknown>}} */ (error);
147
+ ensuredError.velociousContext = {
148
+ ...(ensuredError.velociousContext || {}),
149
+ requestParsing: {
150
+ httpMethod: this._request.httpMethod(),
151
+ parameterKeys: Object.keys(querystring.parse(query)),
152
+ path: this._request.path(),
153
+ queryPreview: query.length > 300 ? `${query.slice(0, 300)}...` : query,
154
+ stage: "query-parameters"
155
+ }
156
+ };
157
+ throw ensuredError;
158
+ }
143
159
  }
144
160
  /**
145
161
  * @param {object} [args] - Options object.
@@ -255,4 +271,4 @@ export default class VelociousController {
255
271
  /** @returns {import("./http-server/client/response.js").default} - The response. */
256
272
  response() { return this._response; }
257
273
  }
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUE7QUFDckIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN4QyxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxNQUFNLE1BQU0seUJBQXlCLENBQUE7QUFDNUMsT0FBTyxjQUFjLE1BQU0sMENBQTBDLENBQUE7QUFDckUsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQzVCLE9BQU8sYUFBYSxNQUFNLDRCQUE0QixDQUFBO0FBQ3RELE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQTtBQUVyQyxNQUFNLENBQUMsT0FBTyxPQUFPLG1CQUFtQjtJQUN0Qzs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVU7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6Qiw2QkFBNkI7WUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUE7UUFDMUIsQ0FBQztRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFZLEVBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDO1FBQ2xGLElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQy9DLElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBQzdELElBQUks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QUFDLGdCQUFnQixFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtJQUNwRCxDQUFDO0lBRUQsbUZBQW1GO0lBQ25GLE9BQU8sS0FBSyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUEsQ0FBQyxDQUFDO0lBRWxDLHFGQUFxRjtJQUNyRixRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFBLENBQUMsQ0FBQztDQUNyQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgZWpzIGZyb20gXCJlanNcIlxuaW1wb3J0IHtpbmNvcnBvcmF0ZX0gZnJvbSBcImluY29ycG9yYXRvclwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4vbG9nZ2VyLmpzXCJcbmltcG9ydCBDb29raWUgZnJvbSBcIi4vaHR0cC1zZXJ2ZXIvY29va2llLmpzXCJcbmltcG9ydCBQYXJhbXNUb09iamVjdCBmcm9tIFwiLi9odHRwLXNlcnZlci9jbGllbnQvcGFyYW1zLXRvLW9iamVjdC5qc1wiXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5pbXBvcnQgcXVlcnlzdHJpbmcgZnJvbSBcInF1ZXJ5c3RyaW5nXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzQ29udHJvbGxlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSAtIE1ldGhvZCBuYW1lLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzdGF0aWMgYmVmb3JlQWN0aW9uKG1ldGhvZE5hbWUpIHtcbiAgICBpZiAoIXRoaXMuX2JlZm9yZUFjdGlvbnMpIHtcbiAgICAgIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gICovXG4gICAgICB0aGlzLl9iZWZvcmVBY3Rpb25zID0gW11cbiAgICB9XG5cbiAgICB0aGlzLl9iZWZvcmVBY3Rpb25zLnB1c2gobWV0aG9kTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5hY3Rpb24gLSBBY3Rpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNvbnRyb2xsZXIgLSBDb250cm9sbGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncy5wYXJhbXMgLSBQYXJhbWV0ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2h0dHAtc2VydmVyL2NsaWVudC9yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVxdWVzdCAtIFJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVzcG9uc2UgLSBSZXNwb25zZSBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnZpZXdQYXRoIC0gVmlldyBwYXRoLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2FjdGlvbiwgY29uZmlndXJhdGlvbiwgY29udHJvbGxlciwgcGFyYW1zLCByZXF1ZXN0LCByZXNwb25zZSwgdmlld1BhdGh9KSB7XG4gICAgaWYgKCFhY3Rpb24pIHRocm93IG5ldyBFcnJvcihcIk5vIGFjdGlvbiBnaXZlblwiKVxuICAgIGlmICghY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uZmlndXJhdGlvbiBnaXZlblwiKVxuICAgIGlmICghY29udHJvbGxlcikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29udHJvbGxlciBnaXZlblwiKVxuICAgIGlmICghcGFyYW1zKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXJhbXMgZ2l2ZW5cIilcbiAgICBpZiAoIXJlcXVlc3QpIHRocm93IG5ldyBFcnJvcihcIk5vIHJlcXVlc3QgZ2l2ZW5cIilcbiAgICBpZiAoIXJlc3BvbnNlKSB0aHJvdyBuZXcgRXJyb3IoXCJObyByZXNwb25zZSBnaXZlblwiKVxuICAgIGlmICghdmlld1BhdGgpIHRocm93IG5ldyBFcnJvcihcIk5vIHZpZXdQYXRoIGdpdmVuXCIpXG5cbiAgICB0aGlzLl9hY3Rpb24gPSBhY3Rpb25cbiAgICB0aGlzLl9jb250cm9sbGVyID0gY29udHJvbGxlclxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gICAgdGhpcy5fcGFyYW1zID0gcGFyYW1zXG4gICAgdGhpcy5fcmVxdWVzdCA9IHJlcXVlc3RcbiAgICB0aGlzLl9yZXNwb25zZSA9IHJlc3BvbnNlXG4gICAgdGhpcy52aWV3UGFyYW1zID0ge31cbiAgICB0aGlzLl92aWV3UGF0aCA9IHZpZXdQYXRoXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ30gLSBUaGUgYWN0aW9uLiAgKi9cbiAgZ2V0QWN0aW9uKCkgeyByZXR1cm4gdGhpcy5fYWN0aW9uIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSAtIFRoZSBjb25maWd1cmF0aW9uLiAgKi9cbiAgZ2V0Q29uZmlndXJhdGlvbigpIHsgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRpb24gfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgYW55Pn0gLSBUaGUgcGFyYW1zLiAgKi9cbiAgZ2V0UGFyYW1zKCkgeyByZXR1cm4gdGhpcy5fcGFyYW1zIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdH0gLSBUaGUgcmVxdWVzdC4gICovXG4gIGdldFJlcXVlc3QoKSB7IHJldHVybiB0aGlzLl9yZXF1ZXN0IH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBDb29raWUgbmFtZS5cbiAgICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENvb2tpZSB2YWx1ZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZG9tYWluXSAtIERvbWFpbi5cbiAgICogQHBhcmFtIHtEYXRlfSBbYXJncy5leHBpcmVzXSAtIEV4cGlyZXMgZGF0ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5odHRwT25seV0gLSBIdHRwT25seSBmbGFnLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4QWdlXSAtIE1heC1BZ2UgaW4gc2Vjb25kcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnBhdGhdIC0gUGF0aC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5zZWN1cmVdIC0gU2VjdXJlIGZsYWcuXG4gICAqIEBwYXJhbSB7XCJMYXhcIiB8IFwiU3RyaWN0XCIgfCBcIk5vbmVcIn0gW2FyZ3Muc2FtZVNpdGVdIC0gU2FtZVNpdGUgdmFsdWUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuZW5jcnlwdGVkXSAtIFdoZXRoZXIgdG8gZW5jcnlwdCB0aGUgY29va2llIHZhbHVlLlxuICAgKiBAcmV0dXJucyB7Q29va2llfSAtIENvb2tpZSBpbnN0YW5jZS5cbiAgICovXG4gIHNldENvb2tpZShuYW1lLCB2YWx1ZSwgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge2VuY3J5cHRlZCA9IGZhbHNlLCAuLi5vcHRpb25zfSA9IGFyZ3NcbiAgICBjb25zdCBzZWNyZXQgPSBlbmNyeXB0ZWQgPyB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRDb29raWVTZWNyZXQoKSA6IHVuZGVmaW5lZFxuICAgIGNvbnN0IGNvb2tpZVZhbHVlID0gZW5jcnlwdGVkID8gQ29va2llLmVuY3J5cHRWYWx1ZSh2YWx1ZSwgc2VjcmV0KSA6IFN0cmluZyh2YWx1ZSA/PyBcIlwiKVxuICAgIGNvbnN0IGNvb2tpZSA9IG5ldyBDb29raWUoe25hbWUsIHZhbHVlOiBjb29raWVWYWx1ZSwgb3B0aW9ucywgZW5jcnlwdGVkfSlcblxuICAgIHRoaXMuX3Jlc3BvbnNlLmFkZEhlYWRlcihcIlNldC1Db29raWVcIiwgY29va2llLnRvSGVhZGVyKCkpXG5cbiAgICByZXR1cm4gY29va2llXG4gIH1cblxuICAvKiogQHJldHVybnMge0Nvb2tpZVtdfSAtIENvb2tpZXMgZnJvbSB0aGUgcmVxdWVzdC4gKi9cbiAgZ2V0Q29va2llcygpIHtcbiAgICBpZiAoIXRoaXMuX2Nvb2tpZXMpIHtcbiAgICAgIGNvbnN0IHNlY3JldCA9IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldENvb2tpZVNlY3JldCgpXG4gICAgICBjb25zdCBoZWFkZXJWYWx1ZSA9IHRoaXMuX3JlcXVlc3QuaGVhZGVyKFwiY29va2llXCIpXG5cbiAgICAgIHRoaXMuX2Nvb2tpZXMgPSBDb29raWUucGFyc2VIZWFkZXIoaGVhZGVyVmFsdWUsIHNlY3JldClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY29va2llc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHt0eXBlb2YgVmVsb2Npb3VzQ29udHJvbGxlcn0gLSBUaGUgY29udHJvbGxlciBjbGFzcy5cbiAgICovXG4gIF9nZXRDb250cm9sbGVyQ2xhc3MoKSB7XG4gICAgY29uc3QgY29udHJvbGxlckNsYXNzID0gLyoqIEB0eXBlIHt0eXBlb2YgVmVsb2Npb3VzQ29udHJvbGxlcn0gKi8gKHRoaXMuY29uc3RydWN0b3IpXG5cbiAgICByZXR1cm4gY29udHJvbGxlckNsYXNzXG4gIH1cblxuICBhc3luYyBfcnVuQmVmb3JlQ2FsbGJhY2tzKCkge1xuICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKFwiX3J1bkJlZm9yZUNhbGxiYWNrc1wiKVxuXG4gICAgbGV0IGN1cnJlbnRDb250cm9sbGVyQ2xhc3MgPSB0aGlzLl9nZXRDb250cm9sbGVyQ2xhc3MoKVxuXG4gICAgd2hpbGUgKGN1cnJlbnRDb250cm9sbGVyQ2xhc3MpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKGBSdW5uaW5nIGNhbGxiYWNrcyBmb3IgJHtjdXJyZW50Q29udHJvbGxlckNsYXNzLm5hbWV9YClcblxuICAgICAgY29uc3QgYmVmb3JlQWN0aW9ucyA9IGN1cnJlbnRDb250cm9sbGVyQ2xhc3MuX2JlZm9yZUFjdGlvbnNcblxuICAgICAgaWYgKGJlZm9yZUFjdGlvbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBiZWZvcmVBY3Rpb25OYW1lIG9mIGJlZm9yZUFjdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBiZWZvcmVBY3Rpb24gPSBjdXJyZW50Q29udHJvbGxlckNsYXNzLnByb3RvdHlwZVtiZWZvcmVBY3Rpb25OYW1lXVxuXG4gICAgICAgICAgaWYgKCFiZWZvcmVBY3Rpb24pIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBiZWZvcmUgYWN0aW9uOiAke2JlZm9yZUFjdGlvbk5hbWV9YClcblxuICAgICAgICAgIGNvbnN0IGJvdW5kQmVmb3JlQWN0aW9uID0gYmVmb3JlQWN0aW9uLmJpbmQodGhpcylcblxuICAgICAgICAgIGF3YWl0IGJvdW5kQmVmb3JlQWN0aW9uKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjdXJyZW50Q29udHJvbGxlckNsYXNzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGN1cnJlbnRDb250cm9sbGVyQ2xhc3MpXG5cbiAgICAgIGlmICghY3VycmVudENvbnRyb2xsZXJDbGFzcz8ubmFtZT8uZW5kc1dpdGgoXCJDb250cm9sbGVyXCIpKSBicmVha1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMubG9nZ2VyLmRlYnVnKFwiQWZ0ZXIgcnVuQmVmb3JlQ2FsbGJhY2tzXCIpXG4gIH1cblxuICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGFueT59IC0gVGhlIHBhcmFtcy4gICovXG4gIHBhcmFtcygpIHtcbiAgICAvLyBNZXJnZSBxdWVyeSBwYXJhbWV0ZXJzIHNvIGNvbnRyb2xsZXJzIGNhbiByZWFkIHRoZW0gdmlhIHBhcmFtcygpXG4gICAgY29uc3QgbWVyZ2VkUGFyYW1zID0gey4uLnRoaXMucXVlcnlQYXJhbWV0ZXJzKCksIC4uLnRoaXMuX3BhcmFtc31cblxuICAgIGlmICghbWVyZ2VkUGFyYW1zLmNvbnRyb2xsZXIpIG1lcmdlZFBhcmFtcy5jb250cm9sbGVyID0gdGhpcy5fY29udHJvbGxlclxuXG4gICAgcmV0dXJuIG1lcmdlZFBhcmFtc1xuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzLiAgKi9cbiAgcXVlcnlQYXJhbWV0ZXJzKCkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fcmVxdWVzdC5wYXRoKCkuc3BsaXQoXCI/XCIpWzFdXG5cbiAgICBpZiAoIXF1ZXJ5KSByZXR1cm4ge31cblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi9cbiAgICBjb25zdCB1bnBhcnNlZFBhcmFtcyA9IHF1ZXJ5c3RyaW5nLnBhcnNlKHF1ZXJ5KVxuICAgIGNvbnN0IHBhcmFtc1RvT2JqZWN0ID0gbmV3IFBhcmFtc1RvT2JqZWN0KHVucGFyc2VkUGFyYW1zKVxuXG4gICAgcmV0dXJuIHBhcmFtc1RvT2JqZWN0LnRvT2JqZWN0KClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJncy5qc29uXSAtIEpzb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSBbYXJncy5zdGF0dXNdIC0gU3RhdHVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcmVuZGVyKHtqc29uLCBzdGF0dXMsIC4uLnJlc3RBcmdzfSA9IHt9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGlmIChqc29uKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJKc29uQXJnKGpzb24pXG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgdGhpcy5fcmVzcG9uc2Uuc2V0U3RhdHVzKHN0YXR1cylcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5yZW5kZXJWaWV3KClcbiAgfVxuXG4gIC8qKiBAcGFyYW0ge29iamVjdH0ganNvbiAtIEpTT04gcGF5bG9hZC4gKi9cbiAgcmVuZGVySnNvbkFyZyhqc29uKSB7XG4gICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KGpzb24pXG5cbiAgICB0aGlzLl9yZXNwb25zZS5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04XCIpXG4gICAgdGhpcy5fcmVzcG9uc2Uuc2V0Qm9keShib2R5KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuICAqL1xuICByZW5kZXJWaWV3KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB2aWV3UGF0aCA9IGAke3RoaXMuX3ZpZXdQYXRofS8ke2luZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZSh0aGlzLl9hY3Rpb24pKX0uZWpzYFxuICAgICAgY29uc3QgYWN0dWFsVmlld1BhcmFtcyA9IGluY29ycG9yYXRlKHtjb250cm9sbGVyOiB0aGlzfSwgdGhpcy52aWV3UGFyYW1zKVxuXG4gICAgICBlanMucmVuZGVyRmlsZSh2aWV3UGF0aCwgYWN0dWFsVmlld1BhcmFtcywge30sIChlcnIsIHN0cikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVyci5jb2RlID09PSBcIkVOT0VOVFwiKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBNaXNzaW5nIHZpZXcgZmlsZTogJHt2aWV3UGF0aH1gKVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpID09PSAyMDApIHtcbiAgICAgICAgICAgICAgdGhpcy5fcmVzcG9uc2Uuc2V0U3RhdHVzKFwiaW50ZXJuYWwtc2VydmVyLWVycm9yXCIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcIilcbiAgICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldEJvZHkoYE1pc3NpbmcgdmlldyBmaWxlOiAke3ZpZXdQYXRofWApXG5cbiAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fcmVzcG9uc2Uuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9odG1sOyBjaGFyc2V0PVVURi04XCIpXG4gICAgICAgICAgdGhpcy5fcmVzcG9uc2Uuc2V0Qm9keShzdHIpXG5cbiAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuICAqL1xuICByZW5kZXJUZXh0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInJlbmRlclRleHQgc3R1YlwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFN0cmVhbXMgYSBmaWxlIHJlc3BvbnNlIGZyb20gZGlzayB3aXRob3V0IGxvYWRpbmcgdGhlIGZ1bGwgZmlsZSBpbnRvIGNvbnRyb2xsZXIgbWVtb3J5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGggLSBGaWxlIHBhdGguXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnc10gLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmNvbnRlbnRUeXBlXSAtIENvbnRlbnQgdHlwZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFthcmdzLnN0YXR1c10gLSBTdGF0dXMuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNlbmRGaWxlKGZpbGVQYXRoLCBhcmdzID0ge30pIHtcbiAgICBjb25zdCB7Y29udGVudFR5cGUsIHN0YXR1cywgLi4ucmVzdEFyZ3N9ID0gYXJnc1xuXG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGlmICh0eXBlb2YgZmlsZVBhdGggIT09IFwic3RyaW5nXCIgfHwgZmlsZVBhdGgubGVuZ3RoIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBmaWxlIHBhdGggdG8gYmUgYSBub24tZW1wdHkgc3RyaW5nLCBnb3Q6ICR7U3RyaW5nKGZpbGVQYXRoKX1gKVxuICAgIH1cblxuICAgIGNvbnN0IGRldGVjdGVkQ29udGVudFR5cGUgPSBjb250ZW50VHlwZSB8fCB0aGlzLnNlbmRGaWxlQ29udGVudFR5cGUoZmlsZVBhdGgpXG5cbiAgICBpZiAoZGV0ZWN0ZWRDb250ZW50VHlwZSkge1xuICAgICAgdGhpcy5fcmVzcG9uc2Uuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIGRldGVjdGVkQ29udGVudFR5cGUpXG4gICAgfVxuXG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgdGhpcy5fcmVzcG9uc2Uuc2V0U3RhdHVzKHN0YXR1cylcbiAgICB9XG5cbiAgICB0aGlzLl9yZXNwb25zZS5zZXRGaWxlUGF0aChmaWxlUGF0aClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGggLSBGaWxlIHBhdGguXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gQ29udGVudCB0eXBlIHZhbHVlLlxuICAgKi9cbiAgc2VuZEZpbGVDb250ZW50VHlwZShmaWxlUGF0aCkge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCkudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIud2FzbVwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi93YXNtXCJcbiAgICBpZiAoZXh0ZW5zaW9uID09PSBcIi5qc1wiKSByZXR1cm4gXCJ0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9VVRGLThcIlxuICAgIGlmIChleHRlbnNpb24gPT09IFwiLmpzb25cIikgcmV0dXJuIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOFwiXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIuY3NzXCIpIHJldHVybiBcInRleHQvY3NzOyBjaGFyc2V0PVVURi04XCJcbiAgICBpZiAoZXh0ZW5zaW9uID09PSBcIi5odG1sXCIpIHJldHVybiBcInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFwiXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIudHh0XCIpIHJldHVybiBcInRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcIlxuICAgIGlmIChleHRlbnNpb24gPT09IFwiLnN2Z1wiKSByZXR1cm4gXCJpbWFnZS9zdmcreG1sXCJcbiAgICBpZiAoZXh0ZW5zaW9uID09PSBcIi5wbmdcIikgcmV0dXJuIFwiaW1hZ2UvcG5nXCJcbiAgICBpZiAoZXh0ZW5zaW9uID09PSBcIi5qcGdcIiB8fCBleHRlbnNpb24gPT09IFwiLmpwZWdcIikgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIuZ2lmXCIpIHJldHVybiBcImltYWdlL2dpZlwiXG5cbiAgICByZXR1cm4gXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIlxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2F1dGhvcml6YXRpb24vYWJpbGl0eS5qc1wiKS5kZWZhdWx0IHwgdW5kZWZpbmVkfSAtIEN1cnJlbnQgYWJpbGl0eSBmb3IgcmVxdWVzdCBzY29wZS4gKi9cbiAgY3VycmVudEFiaWxpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldEN1cnJlbnRBYmlsaXR5KClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSAtIFRoZSByZXF1ZXN0LiAgKi9cbiAgcmVxdWVzdCgpIHsgcmV0dXJuIHRoaXMuX3JlcXVlc3QgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVzcG9uc2UuanNcIikuZGVmYXVsdH0gLSBUaGUgcmVzcG9uc2UuICAqL1xuICByZXNwb25zZSgpIHsgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlIH1cbn1cbiJdfQ==
274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUE7QUFDckIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN4QyxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxNQUFNLE1BQU0seUJBQXlCLENBQUE7QUFDNUMsT0FBTyxjQUFjLE1BQU0sMENBQTBDLENBQUE7QUFDckUsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQzVCLE9BQU8sYUFBYSxNQUFNLDRCQUE0QixDQUFBO0FBQ3RELE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQTtBQUVyQyxNQUFNLENBQUMsT0FBTyxPQUFPLG1CQUFtQjtJQUN0Qzs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVU7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6Qiw2QkFBNkI7WUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUE7UUFDMUIsQ0FBQztRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFZLEVBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDO1FBQ2xGLElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQy9DLElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBQzdELElBQUks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LElBQUksU0FBUyxLQUFLLE9BQU87WUFBRSxPQUFPLGtCQUFrQixDQUFBO1FBQ3BELElBQUksU0FBUyxLQUFLLEtBQUs7WUFBRSxPQUFPLGdDQUFnQyxDQUFBO1FBQ2hFLElBQUksU0FBUyxLQUFLLE9BQU87WUFBRSxPQUFPLGlDQUFpQyxDQUFBO1FBQ25FLElBQUksU0FBUyxLQUFLLE1BQU07WUFBRSxPQUFPLHlCQUF5QixDQUFBO1FBQzFELElBQUksU0FBUyxLQUFLLE9BQU87WUFBRSxPQUFPLDBCQUEwQixDQUFBO1FBQzVELElBQUksU0FBUyxLQUFLLE1BQU07WUFBRSxPQUFPLDJCQUEyQixDQUFBO1FBQzVELElBQUksU0FBUyxLQUFLLE1BQU07WUFBRSxPQUFPLGVBQWUsQ0FBQTtRQUNoRCxJQUFJLFNBQVMsS0FBSyxNQUFNO1lBQUUsT0FBTyxXQUFXLENBQUE7UUFDNUMsSUFBSSxTQUFTLEtBQUssTUFBTSxJQUFJLFNBQVMsS0FBSyxPQUFPO1lBQUUsT0FBTyxZQUFZLENBQUE7UUFDdEUsSUFBSSxTQUFTLEtBQUssTUFBTTtZQUFFLE9BQU8sV0FBVyxDQUFBO1FBRTVDLE9BQU8sMEJBQTBCLENBQUE7SUFDbkMsQ0FBQztJQUVELCtHQUErRztJQUMvRyxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO0lBQ3BELENBQUM7SUFFRCxtRkFBbUY7SUFDbkYsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQSxDQUFDLENBQUM7SUFFbEMscUZBQXFGO0lBQ3JGLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUEsQ0FBQyxDQUFDO0NBQ3JDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBlanMgZnJvbSBcImVqc1wiXG5pbXBvcnQge2luY29ycG9yYXRlfSBmcm9tIFwiaW5jb3Jwb3JhdG9yXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXIuanNcIlxuaW1wb3J0IENvb2tpZSBmcm9tIFwiLi9odHRwLXNlcnZlci9jb29raWUuanNcIlxuaW1wb3J0IFBhcmFtc1RvT2JqZWN0IGZyb20gXCIuL2h0dHAtc2VydmVyL2NsaWVudC9wYXJhbXMtdG8tb2JqZWN0LmpzXCJcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCBxdWVyeXN0cmluZyBmcm9tIFwicXVlcnlzdHJpbmdcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNDb250cm9sbGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2ROYW1lIC0gTWV0aG9kIG5hbWUuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHN0YXRpYyBiZWZvcmVBY3Rpb24obWV0aG9kTmFtZSkge1xuICAgIGlmICghdGhpcy5fYmVmb3JlQWN0aW9ucykge1xuICAgICAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAgKi9cbiAgICAgIHRoaXMuX2JlZm9yZUFjdGlvbnMgPSBbXVxuICAgIH1cblxuICAgIHRoaXMuX2JlZm9yZUFjdGlvbnMucHVzaChtZXRob2ROYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmFjdGlvbiAtIEFjdGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY29udHJvbGxlciAtIENvbnRyb2xsZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzLnBhcmFtcyAtIFBhcmFtZXRlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdH0gYXJncy5yZXF1ZXN0IC0gUmVxdWVzdCBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVzcG9uc2UuanNcIikuZGVmYXVsdH0gYXJncy5yZXNwb25zZSAtIFJlc3BvbnNlIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3Mudmlld1BhdGggLSBWaWV3IHBhdGguXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7YWN0aW9uLCBjb25maWd1cmF0aW9uLCBjb250cm9sbGVyLCBwYXJhbXMsIHJlcXVlc3QsIHJlc3BvbnNlLCB2aWV3UGF0aH0pIHtcbiAgICBpZiAoIWFjdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gYWN0aW9uIGdpdmVuXCIpXG4gICAgaWYgKCFjb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25maWd1cmF0aW9uIGdpdmVuXCIpXG4gICAgaWYgKCFjb250cm9sbGVyKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb250cm9sbGVyIGdpdmVuXCIpXG4gICAgaWYgKCFwYXJhbXMpIHRocm93IG5ldyBFcnJvcihcIk5vIHBhcmFtcyBnaXZlblwiKVxuICAgIGlmICghcmVxdWVzdCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVxdWVzdCBnaXZlblwiKVxuICAgIGlmICghcmVzcG9uc2UpIHRocm93IG5ldyBFcnJvcihcIk5vIHJlc3BvbnNlIGdpdmVuXCIpXG4gICAgaWYgKCF2aWV3UGF0aCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmlld1BhdGggZ2l2ZW5cIilcblxuICAgIHRoaXMuX2FjdGlvbiA9IGFjdGlvblxuICAgIHRoaXMuX2NvbnRyb2xsZXIgPSBjb250cm9sbGVyXG4gICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXNcbiAgICB0aGlzLl9yZXF1ZXN0ID0gcmVxdWVzdFxuICAgIHRoaXMuX3Jlc3BvbnNlID0gcmVzcG9uc2VcbiAgICB0aGlzLnZpZXdQYXJhbXMgPSB7fVxuICAgIHRoaXMuX3ZpZXdQYXRoID0gdmlld1BhdGhcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBhY3Rpb24uICAqL1xuICBnZXRBY3Rpb24oKSB7IHJldHVybiB0aGlzLl9hY3Rpb24gfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IC0gVGhlIGNvbmZpZ3VyYXRpb24uICAqL1xuICBnZXRDb25maWd1cmF0aW9uKCkgeyByZXR1cm4gdGhpcy5fY29uZmlndXJhdGlvbiB9XG5cbiAgLyoqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAtIFRoZSBwYXJhbXMuICAqL1xuICBnZXRQYXJhbXMoKSB7IHJldHVybiB0aGlzLl9wYXJhbXMgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSAtIFRoZSByZXF1ZXN0LiAgKi9cbiAgZ2V0UmVxdWVzdCgpIHsgcmV0dXJuIHRoaXMuX3JlcXVlc3QgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENvb2tpZSBuYW1lLlxuICAgKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ29va2llIHZhbHVlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5kb21haW5dIC0gRG9tYWluLlxuICAgKiBAcGFyYW0ge0RhdGV9IFthcmdzLmV4cGlyZXNdIC0gRXhwaXJlcyBkYXRlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmh0dHBPbmx5XSAtIEh0dHBPbmx5IGZsYWcuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhBZ2VdIC0gTWF4LUFnZSBpbiBzZWNvbmRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MucGF0aF0gLSBQYXRoLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLnNlY3VyZV0gLSBTZWN1cmUgZmxhZy5cbiAgICogQHBhcmFtIHtcIkxheFwiIHwgXCJTdHJpY3RcIiB8IFwiTm9uZVwifSBbYXJncy5zYW1lU2l0ZV0gLSBTYW1lU2l0ZSB2YWx1ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXJncy5lbmNyeXB0ZWRdIC0gV2hldGhlciB0byBlbmNyeXB0IHRoZSBjb29raWUgdmFsdWUuXG4gICAqIEByZXR1cm5zIHtDb29raWV9IC0gQ29va2llIGluc3RhbmNlLlxuICAgKi9cbiAgc2V0Q29va2llKG5hbWUsIHZhbHVlLCBhcmdzID0ge30pIHtcbiAgICBjb25zdCB7ZW5jcnlwdGVkID0gZmFsc2UsIC4uLm9wdGlvbnN9ID0gYXJnc1xuICAgIGNvbnN0IHNlY3JldCA9IGVuY3J5cHRlZCA/IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldENvb2tpZVNlY3JldCgpIDogdW5kZWZpbmVkXG4gICAgY29uc3QgY29va2llVmFsdWUgPSBlbmNyeXB0ZWQgPyBDb29raWUuZW5jcnlwdFZhbHVlKHZhbHVlLCBzZWNyZXQpIDogU3RyaW5nKHZhbHVlID8/IFwiXCIpXG4gICAgY29uc3QgY29va2llID0gbmV3IENvb2tpZSh7bmFtZSwgdmFsdWU6IGNvb2tpZVZhbHVlLCBvcHRpb25zLCBlbmNyeXB0ZWR9KVxuXG4gICAgdGhpcy5fcmVzcG9uc2UuYWRkSGVhZGVyKFwiU2V0LUNvb2tpZVwiLCBjb29raWUudG9IZWFkZXIoKSlcblxuICAgIHJldHVybiBjb29raWVcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7Q29va2llW119IC0gQ29va2llcyBmcm9tIHRoZSByZXF1ZXN0LiAqL1xuICBnZXRDb29raWVzKCkge1xuICAgIGlmICghdGhpcy5fY29va2llcykge1xuICAgICAgY29uc3Qgc2VjcmV0ID0gdGhpcy5nZXRDb25maWd1cmF0aW9uKCkuZ2V0Q29va2llU2VjcmV0KClcbiAgICAgIGNvbnN0IGhlYWRlclZhbHVlID0gdGhpcy5fcmVxdWVzdC5oZWFkZXIoXCJjb29raWVcIilcblxuICAgICAgdGhpcy5fY29va2llcyA9IENvb2tpZS5wYXJzZUhlYWRlcihoZWFkZXJWYWx1ZSwgc2VjcmV0KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jb29raWVzXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge3R5cGVvZiBWZWxvY2lvdXNDb250cm9sbGVyfSAtIFRoZSBjb250cm9sbGVyIGNsYXNzLlxuICAgKi9cbiAgX2dldENvbnRyb2xsZXJDbGFzcygpIHtcbiAgICBjb25zdCBjb250cm9sbGVyQ2xhc3MgPSAvKiogQHR5cGUge3R5cGVvZiBWZWxvY2lvdXNDb250cm9sbGVyfSAqLyAodGhpcy5jb25zdHJ1Y3RvcilcblxuICAgIHJldHVybiBjb250cm9sbGVyQ2xhc3NcbiAgfVxuXG4gIGFzeW5jIF9ydW5CZWZvcmVDYWxsYmFja3MoKSB7XG4gICAgYXdhaXQgdGhpcy5sb2dnZXIuZGVidWcoXCJfcnVuQmVmb3JlQ2FsbGJhY2tzXCIpXG5cbiAgICBsZXQgY3VycmVudENvbnRyb2xsZXJDbGFzcyA9IHRoaXMuX2dldENvbnRyb2xsZXJDbGFzcygpXG5cbiAgICB3aGlsZSAoY3VycmVudENvbnRyb2xsZXJDbGFzcykge1xuICAgICAgYXdhaXQgdGhpcy5sb2dnZXIuZGVidWcoYFJ1bm5pbmcgY2FsbGJhY2tzIGZvciAke2N1cnJlbnRDb250cm9sbGVyQ2xhc3MubmFtZX1gKVxuXG4gICAgICBjb25zdCBiZWZvcmVBY3Rpb25zID0gY3VycmVudENvbnRyb2xsZXJDbGFzcy5fYmVmb3JlQWN0aW9uc1xuXG4gICAgICBpZiAoYmVmb3JlQWN0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGJlZm9yZUFjdGlvbk5hbWUgb2YgYmVmb3JlQWN0aW9ucykge1xuICAgICAgICAgIGNvbnN0IGJlZm9yZUFjdGlvbiA9IGN1cnJlbnRDb250cm9sbGVyQ2xhc3MucHJvdG90eXBlW2JlZm9yZUFjdGlvbk5hbWVdXG5cbiAgICAgICAgICBpZiAoIWJlZm9yZUFjdGlvbikgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIGJlZm9yZSBhY3Rpb246ICR7YmVmb3JlQWN0aW9uTmFtZX1gKVxuXG4gICAgICAgICAgY29uc3QgYm91bmRCZWZvcmVBY3Rpb24gPSBiZWZvcmVBY3Rpb24uYmluZCh0aGlzKVxuXG4gICAgICAgICAgYXdhaXQgYm91bmRCZWZvcmVBY3Rpb24oKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRDb250cm9sbGVyQ2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3VycmVudENvbnRyb2xsZXJDbGFzcylcblxuICAgICAgaWYgKCFjdXJyZW50Q29udHJvbGxlckNsYXNzPy5uYW1lPy5lbmRzV2l0aChcIkNvbnRyb2xsZXJcIikpIGJyZWFrXG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5sb2dnZXIuZGVidWcoXCJBZnRlciBydW5CZWZvcmVDYWxsYmFja3NcIilcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgYW55Pn0gLSBUaGUgcGFyYW1zLiAgKi9cbiAgcGFyYW1zKCkge1xuICAgIC8vIE1lcmdlIHF1ZXJ5IHBhcmFtZXRlcnMgc28gY29udHJvbGxlcnMgY2FuIHJlYWQgdGhlbSB2aWEgcGFyYW1zKClcbiAgICBjb25zdCBtZXJnZWRQYXJhbXMgPSB7Li4udGhpcy5xdWVyeVBhcmFtZXRlcnMoKSwgLi4udGhpcy5fcGFyYW1zfVxuXG4gICAgaWYgKCFtZXJnZWRQYXJhbXMuY29udHJvbGxlcikgbWVyZ2VkUGFyYW1zLmNvbnRyb2xsZXIgPSB0aGlzLl9jb250cm9sbGVyXG5cbiAgICByZXR1cm4gbWVyZ2VkUGFyYW1zXG4gIH1cblxuICAvKiogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIGFueT59IC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMuICAqL1xuICBxdWVyeVBhcmFtZXRlcnMoKSB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLl9yZXF1ZXN0LnBhdGgoKS5zcGxpdChcIj9cIilbMV1cblxuICAgIGlmICghcXVlcnkpIHJldHVybiB7fVxuXG4gICAgdHJ5IHtcbiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi9cbiAgICAgIGNvbnN0IHVucGFyc2VkUGFyYW1zID0gcXVlcnlzdHJpbmcucGFyc2UocXVlcnkpXG4gICAgICBjb25zdCBwYXJhbXNUb09iamVjdCA9IG5ldyBQYXJhbXNUb09iamVjdCh1bnBhcnNlZFBhcmFtcylcblxuICAgICAgcmV0dXJuIHBhcmFtc1RvT2JqZWN0LnRvT2JqZWN0KClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZW5zdXJlZEVycm9yID0gLyoqIEB0eXBlIHtFcnJvciAmIHt2ZWxvY2lvdXNDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj59fSAqLyAoZXJyb3IpXG5cbiAgICAgIGVuc3VyZWRFcnJvci52ZWxvY2lvdXNDb250ZXh0ID0ge1xuICAgICAgICAuLi4oZW5zdXJlZEVycm9yLnZlbG9jaW91c0NvbnRleHQgfHwge30pLFxuICAgICAgICByZXF1ZXN0UGFyc2luZzoge1xuICAgICAgICAgIGh0dHBNZXRob2Q6IHRoaXMuX3JlcXVlc3QuaHR0cE1ldGhvZCgpLFxuICAgICAgICAgIHBhcmFtZXRlcktleXM6IE9iamVjdC5rZXlzKHF1ZXJ5c3RyaW5nLnBhcnNlKHF1ZXJ5KSksXG4gICAgICAgICAgcGF0aDogdGhpcy5fcmVxdWVzdC5wYXRoKCksXG4gICAgICAgICAgcXVlcnlQcmV2aWV3OiBxdWVyeS5sZW5ndGggPiAzMDAgPyBgJHtxdWVyeS5zbGljZSgwLCAzMDApfS4uLmAgOiBxdWVyeSxcbiAgICAgICAgICBzdGFnZTogXCJxdWVyeS1wYXJhbWV0ZXJzXCJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlbnN1cmVkRXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3MuanNvbl0gLSBKc29uLlxuICAgKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gW2FyZ3Muc3RhdHVzXSAtIFN0YXR1cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHJlbmRlcih7anNvbiwgc3RhdHVzLCAuLi5yZXN0QXJnc30gPSB7fSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBpZiAoanNvbikge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVySnNvbkFyZyhqc29uKVxuICAgIH1cblxuICAgIGlmIChzdGF0dXMpIHtcbiAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldFN0YXR1cyhzdGF0dXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucmVuZGVyVmlldygpXG4gIH1cblxuICAvKiogQHBhcmFtIHtvYmplY3R9IGpzb24gLSBKU09OIHBheWxvYWQuICovXG4gIHJlbmRlckpzb25BcmcoanNvbikge1xuICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShqc29uKVxuXG4gICAgdGhpcy5fcmVzcG9uc2Uuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOFwiKVxuICAgIHRoaXMuX3Jlc3BvbnNlLnNldEJvZHkoYm9keSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLiAgKi9cbiAgcmVuZGVyVmlldygpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgdmlld1BhdGggPSBgJHt0aGlzLl92aWV3UGF0aH0vJHtpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUodGhpcy5fYWN0aW9uKSl9LmVqc2BcbiAgICAgIGNvbnN0IGFjdHVhbFZpZXdQYXJhbXMgPSBpbmNvcnBvcmF0ZSh7Y29udHJvbGxlcjogdGhpc30sIHRoaXMudmlld1BhcmFtcylcblxuICAgICAgZWpzLnJlbmRlckZpbGUodmlld1BhdGgsIGFjdHVhbFZpZXdQYXJhbXMsIHt9LCAoZXJyLCBzdHIpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gXCJFTk9FTlRcIikge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihgTWlzc2luZyB2aWV3IGZpbGU6ICR7dmlld1BhdGh9YClcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3Jlc3BvbnNlLmdldFN0YXR1c0NvZGUoKSA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldFN0YXR1cyhcImludGVybmFsLXNlcnZlci1lcnJvclwiKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9yZXNwb25zZS5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XCIpXG4gICAgICAgICAgICB0aGlzLl9yZXNwb25zZS5zZXRCb2R5KGBNaXNzaW5nIHZpZXcgZmlsZTogJHt2aWV3UGF0aH1gKVxuXG4gICAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvaHRtbDsgY2hhcnNldD1VVEYtOFwiKVxuICAgICAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldEJvZHkoc3RyKVxuXG4gICAgICAgICAgcmVzb2x2ZShudWxsKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLiAgKi9cbiAgcmVuZGVyVGV4dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZW5kZXJUZXh0IHN0dWJcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJlYW1zIGEgZmlsZSByZXNwb25zZSBmcm9tIGRpc2sgd2l0aG91dCBsb2FkaW5nIHRoZSBmdWxsIGZpbGUgaW50byBjb250cm9sbGVyIG1lbW9yeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoIC0gRmlsZSBwYXRoLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5jb250ZW50VHlwZV0gLSBDb250ZW50IHR5cGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSBbYXJncy5zdGF0dXNdIC0gU3RhdHVzLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZW5kRmlsZShmaWxlUGF0aCwgYXJncyA9IHt9KSB7XG4gICAgY29uc3Qge2NvbnRlbnRUeXBlLCBzdGF0dXMsIC4uLnJlc3RBcmdzfSA9IGFyZ3NcblxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBpZiAodHlwZW9mIGZpbGVQYXRoICE9PSBcInN0cmluZ1wiIHx8IGZpbGVQYXRoLmxlbmd0aCA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZmlsZSBwYXRoIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZywgZ290OiAke1N0cmluZyhmaWxlUGF0aCl9YClcbiAgICB9XG5cbiAgICBjb25zdCBkZXRlY3RlZENvbnRlbnRUeXBlID0gY29udGVudFR5cGUgfHwgdGhpcy5zZW5kRmlsZUNvbnRlbnRUeXBlKGZpbGVQYXRoKVxuXG4gICAgaWYgKGRldGVjdGVkQ29udGVudFR5cGUpIHtcbiAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBkZXRlY3RlZENvbnRlbnRUeXBlKVxuICAgIH1cblxuICAgIGlmIChzdGF0dXMpIHtcbiAgICAgIHRoaXMuX3Jlc3BvbnNlLnNldFN0YXR1cyhzdGF0dXMpXG4gICAgfVxuXG4gICAgdGhpcy5fcmVzcG9uc2Uuc2V0RmlsZVBhdGgoZmlsZVBhdGgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoIC0gRmlsZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIENvbnRlbnQgdHlwZSB2YWx1ZS5cbiAgICovXG4gIHNlbmRGaWxlQ29udGVudFR5cGUoZmlsZVBhdGgpIHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChleHRlbnNpb24gPT09IFwiLndhc21cIikgcmV0dXJuIFwiYXBwbGljYXRpb24vd2FzbVwiXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIuanNcIikgcmV0dXJuIFwidGV4dC9qYXZhc2NyaXB0OyBjaGFyc2V0PVVURi04XCJcbiAgICBpZiAoZXh0ZW5zaW9uID09PSBcIi5qc29uXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLThcIlxuICAgIGlmIChleHRlbnNpb24gPT09IFwiLmNzc1wiKSByZXR1cm4gXCJ0ZXh0L2NzczsgY2hhcnNldD1VVEYtOFwiXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIuaHRtbFwiKSByZXR1cm4gXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcIlxuICAgIGlmIChleHRlbnNpb24gPT09IFwiLnR4dFwiKSByZXR1cm4gXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XCJcbiAgICBpZiAoZXh0ZW5zaW9uID09PSBcIi5zdmdcIikgcmV0dXJuIFwiaW1hZ2Uvc3ZnK3htbFwiXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIucG5nXCIpIHJldHVybiBcImltYWdlL3BuZ1wiXG4gICAgaWYgKGV4dGVuc2lvbiA9PT0gXCIuanBnXCIgfHwgZXh0ZW5zaW9uID09PSBcIi5qcGVnXCIpIHJldHVybiBcImltYWdlL2pwZWdcIlxuICAgIGlmIChleHRlbnNpb24gPT09IFwiLmdpZlwiKSByZXR1cm4gXCJpbWFnZS9naWZcIlxuXG4gICAgcmV0dXJuIFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCJcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9hdXRob3JpemF0aW9uL2FiaWxpdHkuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gLSBDdXJyZW50IGFiaWxpdHkgZm9yIHJlcXVlc3Qgc2NvcGUuICovXG4gIGN1cnJlbnRBYmlsaXR5KCkge1xuICAgIHJldHVybiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRDdXJyZW50QWJpbGl0eSgpXG4gIH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdH0gLSBUaGUgcmVxdWVzdC4gICovXG4gIHJlcXVlc3QoKSB7IHJldHVybiB0aGlzLl9yZXF1ZXN0IH1cblxuICAvKiogQHJldHVybnMge2ltcG9ydChcIi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3Jlc3BvbnNlLmpzXCIpLmRlZmF1bHR9IC0gVGhlIHJlc3BvbnNlLiAgKi9cbiAgcmVzcG9uc2UoKSB7IHJldHVybiB0aGlzLl9yZXNwb25zZSB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../../../../src/environment-handlers/node/cli/commands/test.js"],"names":[],"mappings":"AAQA;IACE,yBAyFC;CACF;wBAjGuB,iCAAiC"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../../../../src/environment-handlers/node/cli/commands/test.js"],"names":[],"mappings":"AAQA;IACE,yBA8FC;CACF;wBAtGuB,iCAAiC"}
@@ -63,6 +63,7 @@ export default class VelociousCliCommandsTest extends BaseCommand {
63
63
  process.exit(1);
64
64
  }
65
65
  if (testRunner.isFailed()) {
66
+ await testRunner.persistFailedTestConsoleOutputsToAssets();
66
67
  const failedTests = testRunner.getFailedTestDetails();
67
68
  if (failedTests.length > 0) {
68
69
  console.error(picocolors.red("\nFailed tests:"));
@@ -71,6 +72,9 @@ export default class VelociousCliCommandsTest extends BaseCommand {
71
72
  ? ` (${failed.filePath}:${failed.line})`
72
73
  : "";
73
74
  console.error(picocolors.red(`- ${failed.fullDescription}${location}`));
75
+ if (failed.consoleLogPath) {
76
+ console.error(picocolors.red(` Console log: ${failed.consoleLogPath}`));
77
+ }
74
78
  }
75
79
  }
76
80
  console.error(picocolors.red(`\nTest run failed with ${testRunner.getFailedTests()} failed tests and ${testRunner.getSuccessfulTests()} successfull`));
@@ -86,4 +90,4 @@ export default class VelociousCliCommandsTest extends BaseCommand {
86
90
  }
87
91
  }
88
92
  }
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9lbnZpcm9ubWVudC1oYW5kbGVycy9ub2RlL2NsaS9jb21tYW5kcy90ZXN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFdBQVcsTUFBTSxpQ0FBaUMsQ0FBQTtBQUN6RCxPQUFPLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDbkMsT0FBTyxlQUFlLE1BQU0sMENBQTBDLENBQUE7QUFDdEUsT0FBTyxVQUFVLE1BQU0sb0NBQW9DLENBQUE7QUFDM0QsT0FBTyxFQUFDLHdCQUF3QixFQUFFLFlBQVksRUFBQyxNQUFNLDJDQUEyQyxDQUFBO0FBRWhHLE1BQU0sQ0FBQyxPQUFPLE9BQU8sd0JBQXlCLFNBQVEsV0FBVztJQUMvRCxLQUFLLENBQUMsT0FBTztRQUNYLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUU5QyxJQUFJLFNBQVMsQ0FBQTtRQUNiLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQTtRQUV0QixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNuQyxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQTtZQUMxQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUNsRCxDQUFDO2FBQU0sQ0FBQztZQUNOLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7WUFDNUIsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUE7WUFDakQsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDN0MsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDOUMsQ0FBQztRQUVELE1BQU0sRUFBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzdHLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxDQUFDLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUMsQ0FBQyxDQUFBO1FBQ3ZHLE1BQU0sU0FBUyxHQUFHLE1BQU0sZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3ZELE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDO1lBQ2hDLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdEMsV0FBVztZQUNYLFdBQVc7WUFDWCxTQUFTO1lBQ1QsV0FBVyxFQUFFLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRTtZQUNuRCxlQUFlLEVBQUUsd0JBQXdCLENBQUMsZUFBZSxDQUFDO1NBQzNELENBQUMsQ0FBQTtRQUNGLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQTtRQUV6QixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDcEMsSUFBSSxhQUFhO2dCQUFFLE9BQU07WUFDekIsYUFBYSxHQUFHLElBQUksQ0FBQTtZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsTUFBTSx5Q0FBeUMsQ0FBQyxDQUFBO1lBRTVFLElBQUksQ0FBQztnQkFDSCxNQUFNLFVBQVUsQ0FBQywyQkFBMkIsRUFBRSxDQUFBO1lBQ2hELENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDOUQsQ0FBQztvQkFBUyxDQUFDO2dCQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDbkIsQ0FBQztRQUNILENBQUMsQ0FBQTtRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDN0QsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUUvRCxNQUFNLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUUxQixJQUFJLFVBQVUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLGFBQWEsRUFBRSx1QkFBdUIsU0FBUyxDQUFDLE1BQU0sVUFBVSxDQUFDLENBQUE7UUFDakcsQ0FBQztRQUVELE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBRXRCLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO1FBRXhELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUMvQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7UUFDMUQsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtRQUNwRCxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtRQUV0RSxJQUFJLENBQUMsYUFBYSxJQUFJLGNBQWMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsRixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMseUNBQXlDLENBQUMsQ0FBQyxDQUFBO1lBQ3hFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakIsQ0FBQztRQUVELElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDMUIsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLG9CQUFvQixFQUFFLENBQUE7WUFFckQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFBO2dCQUU5QyxLQUFLLE1BQU0sTUFBTSxJQUFJLFdBQVcsRUFBRSxDQUFDO29CQUNqQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJO3dCQUM3QyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEdBQUc7d0JBQ3hDLENBQUMsQ0FBQyxFQUFFLENBQUE7b0JBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLGVBQWUsR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUE7Z0JBQ3pFLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLDBCQUEwQixVQUFVLENBQUMsY0FBYyxFQUFFLHFCQUFxQixVQUFVLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQTtZQUN0SixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pCLENBQUM7YUFBTSxJQUFJLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7WUFDNUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLHVCQUF1QixVQUFVLENBQUMsY0FBYyxFQUFFLHFCQUFxQixVQUFVLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQTtZQUNuSixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLDZCQUE2QixVQUFVLENBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFBO1lBQzlHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakIsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgQmFzZUNvbW1hbmQgZnJvbSBcIi4uLy4uLy4uLy4uL2NsaS9iYXNlLWNvbW1hbmQuanNcIlxuaW1wb3J0IHBpY29jb2xvcnMgZnJvbSBcInBpY29jb2xvcnNcIlxuaW1wb3J0IFRlc3RGaWxlc0ZpbmRlciBmcm9tIFwiLi4vLi4vLi4vLi4vdGVzdGluZy90ZXN0LWZpbGVzLWZpbmRlci5qc1wiXG5pbXBvcnQgVGVzdFJ1bm5lciBmcm9tIFwiLi4vLi4vLi4vLi4vdGVzdGluZy90ZXN0LXJ1bm5lci5qc1wiXG5pbXBvcnQge25vcm1hbGl6ZUV4YW1wbGVQYXR0ZXJucywgcGFyc2VGaWx0ZXJzfSBmcm9tIFwiLi4vLi4vLi4vLi4vdGVzdGluZy90ZXN0LWZpbHRlci1wYXJzZXIuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNDbGlDb21tYW5kc1Rlc3QgZXh0ZW5kcyBCYXNlQ29tbWFuZCB7XG4gIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgdGhpcy5nZXRDb25maWd1cmF0aW9uKCkuc2V0RW52aXJvbm1lbnQoXCJ0ZXN0XCIpXG5cbiAgICBsZXQgZGlyZWN0b3J5XG4gICAgY29uc3QgZGlyZWN0b3JpZXMgPSBbXVxuXG4gICAgaWYgKHByb2Nlc3MuZW52LlZFTE9DSU9VU19URVNUX0RJUikge1xuICAgICAgZGlyZWN0b3J5ID0gcHJvY2Vzcy5lbnYuVkVMT0NJT1VTX1RFU1RfRElSXG4gICAgICBkaXJlY3Rvcmllcy5wdXNoKHByb2Nlc3MuZW52LlZFTE9DSU9VU19URVNUX0RJUilcbiAgICB9IGVsc2Uge1xuICAgICAgZGlyZWN0b3J5ID0gdGhpcy5kaXJlY3RvcnkoKVxuICAgICAgZGlyZWN0b3JpZXMucHVzaChgJHt0aGlzLmRpcmVjdG9yeSgpfS9fX3Rlc3RzX19gKVxuICAgICAgZGlyZWN0b3JpZXMucHVzaChgJHt0aGlzLmRpcmVjdG9yeSgpfS90ZXN0c2ApXG4gICAgICBkaXJlY3Rvcmllcy5wdXNoKGAke3RoaXMuZGlyZWN0b3J5KCl9L3NwZWNgKVxuICAgIH1cblxuICAgIGNvbnN0IHtpbmNsdWRlVGFncywgZXhjbHVkZVRhZ3MsIGV4YW1wbGVQYXR0ZXJucywgZmlsdGVyZWRQcm9jZXNzQXJnc30gPSBwYXJzZUZpbHRlcnModGhpcy5wcm9jZXNzQXJncyB8fCBbXSlcbiAgICBjb25zdCB0ZXN0RmlsZXNGaW5kZXIgPSBuZXcgVGVzdEZpbGVzRmluZGVyKHtkaXJlY3RvcnksIGRpcmVjdG9yaWVzLCBwcm9jZXNzQXJnczogZmlsdGVyZWRQcm9jZXNzQXJnc30pXG4gICAgY29uc3QgdGVzdEZpbGVzID0gYXdhaXQgdGVzdEZpbGVzRmluZGVyLmZpbmRUZXN0RmlsZXMoKVxuICAgIGNvbnN0IHRlc3RSdW5uZXIgPSBuZXcgVGVzdFJ1bm5lcih7XG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgIGV4Y2x1ZGVUYWdzLFxuICAgICAgaW5jbHVkZVRhZ3MsXG4gICAgICB0ZXN0RmlsZXMsXG4gICAgICBsaW5lRmlsdGVyczogdGVzdEZpbGVzRmluZGVyLmdldExpbmVGaWx0ZXJzQnlGaWxlKCksXG4gICAgICBleGFtcGxlUGF0dGVybnM6IG5vcm1hbGl6ZUV4YW1wbGVQYXR0ZXJucyhleGFtcGxlUGF0dGVybnMpXG4gICAgfSlcbiAgICBsZXQgc2lnbmFsSGFuZGxlZCA9IGZhbHNlXG5cbiAgICBjb25zdCBoYW5kbGVTaWduYWwgPSBhc3luYyAoc2lnbmFsKSA9PiB7XG4gICAgICBpZiAoc2lnbmFsSGFuZGxlZCkgcmV0dXJuXG4gICAgICBzaWduYWxIYW5kbGVkID0gdHJ1ZVxuICAgICAgY29uc29sZS5lcnJvcihgXFxuUmVjZWl2ZWQgJHtzaWduYWx9LCBydW5uaW5nIGFmdGVyQWxsIGhvb2tzIGJlZm9yZSBleGl0Li4uYClcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGVzdFJ1bm5lci5ydW5BZnRlckFsbHNGb3JBY3RpdmVTY29wZXMoKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB3aGlsZSBydW5uaW5nIGFmdGVyQWxsIGhvb2tzOlwiLCBlcnJvcilcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxMzApXG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5vbmNlKFwiU0lHSU5UXCIsICgpID0+IHsgdm9pZCBoYW5kbGVTaWduYWwoXCJTSUdJTlRcIikgfSlcbiAgICBwcm9jZXNzLm9uY2UoXCJTSUdURVJNXCIsICgpID0+IHsgdm9pZCBoYW5kbGVTaWduYWwoXCJTSUdURVJNXCIpIH0pXG5cbiAgICBhd2FpdCB0ZXN0UnVubmVyLnByZXBhcmUoKVxuXG4gICAgaWYgKHRlc3RSdW5uZXIuZ2V0VGVzdHNDb3VudCgpID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGVzdFJ1bm5lci5nZXRUZXN0c0NvdW50KCl9IHRlc3RzIHdhcyBmb3VuZCBpbiAke3Rlc3RGaWxlcy5sZW5ndGh9IGZpbGUocylgKVxuICAgIH1cblxuICAgIGF3YWl0IHRlc3RSdW5uZXIucnVuKClcblxuICAgIGNvbnN0IGV4ZWN1dGVkVGVzdHMgPSB0ZXN0UnVubmVyLmdldEV4ZWN1dGVkVGVzdHNDb3VudCgpXG5cbiAgICBjb25zdCBsaW5lRmlsdGVycyA9IHRlc3RSdW5uZXIuZ2V0TGluZUZpbHRlcnMoKVxuICAgIGNvbnN0IGhhc0xpbmVGaWx0ZXJzID0gT2JqZWN0LmtleXMobGluZUZpbHRlcnMpLmxlbmd0aCA+IDBcbiAgICBjb25zdCBoYXNFeGFtcGxlRmlsdGVycyA9IGV4YW1wbGVQYXR0ZXJucy5sZW5ndGggPiAwXG4gICAgY29uc3QgaGFzVGFnRmlsdGVycyA9IGluY2x1ZGVUYWdzLmxlbmd0aCA+IDAgfHwgZXhjbHVkZVRhZ3MubGVuZ3RoID4gMFxuXG4gICAgaWYgKChoYXNUYWdGaWx0ZXJzIHx8IGhhc0xpbmVGaWx0ZXJzIHx8IGhhc0V4YW1wbGVGaWx0ZXJzKSAmJiBleGVjdXRlZFRlc3RzID09PSAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHBpY29jb2xvcnMucmVkKFwiXFxuTm8gdGVzdHMgbWF0Y2hlZCB0aGUgcHJvdmlkZWQgZmlsdGVyc1wiKSlcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH1cblxuICAgIGlmICh0ZXN0UnVubmVyLmlzRmFpbGVkKCkpIHtcbiAgICAgIGNvbnN0IGZhaWxlZFRlc3RzID0gdGVzdFJ1bm5lci5nZXRGYWlsZWRUZXN0RGV0YWlscygpXG5cbiAgICAgIGlmIChmYWlsZWRUZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHBpY29jb2xvcnMucmVkKFwiXFxuRmFpbGVkIHRlc3RzOlwiKSlcblxuICAgICAgICBmb3IgKGNvbnN0IGZhaWxlZCBvZiBmYWlsZWRUZXN0cykge1xuICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gZmFpbGVkLmZpbGVQYXRoICYmIGZhaWxlZC5saW5lXG4gICAgICAgICAgICA/IGAgKCR7ZmFpbGVkLmZpbGVQYXRofToke2ZhaWxlZC5saW5lfSlgXG4gICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHBpY29jb2xvcnMucmVkKGAtICR7ZmFpbGVkLmZ1bGxEZXNjcmlwdGlvbn0ke2xvY2F0aW9ufWApKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IocGljb2NvbG9ycy5yZWQoYFxcblRlc3QgcnVuIGZhaWxlZCB3aXRoICR7dGVzdFJ1bm5lci5nZXRGYWlsZWRUZXN0cygpfSBmYWlsZWQgdGVzdHMgYW5kICR7dGVzdFJ1bm5lci5nZXRTdWNjZXNzZnVsVGVzdHMoKX0gc3VjY2Vzc2Z1bGxgKSlcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH0gZWxzZSBpZiAodGVzdFJ1bm5lci5hcmVBbnlUZXN0c0ZvY3Vzc2VkKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IocGljb2NvbG9ycy5yZWQoYFxcbkZvY3Vzc2VkIHJ1biB3aXRoICR7dGVzdFJ1bm5lci5nZXRGYWlsZWRUZXN0cygpfSBmYWlsZWQgdGVzdHMgYW5kICR7dGVzdFJ1bm5lci5nZXRTdWNjZXNzZnVsVGVzdHMoKX0gc3VjY2Vzc2Z1bGxgKSlcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhwaWNvY29sb3JzLmdyZWVuKGBcXG5UZXN0IHJ1biBzdWNjZWVkZWQgd2l0aCAke3Rlc3RSdW5uZXIuZ2V0U3VjY2Vzc2Z1bFRlc3RzKCl9IHN1Y2Nlc3NmdWwgdGVzdHNgKSlcbiAgICAgIHByb2Nlc3MuZXhpdCgwKVxuICAgIH1cbiAgfVxufVxuIl19
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9lbnZpcm9ubWVudC1oYW5kbGVycy9ub2RlL2NsaS9jb21tYW5kcy90ZXN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFdBQVcsTUFBTSxpQ0FBaUMsQ0FBQTtBQUN6RCxPQUFPLFVBQVUsTUFBTSxZQUFZLENBQUE7QUFDbkMsT0FBTyxlQUFlLE1BQU0sMENBQTBDLENBQUE7QUFDdEUsT0FBTyxVQUFVLE1BQU0sb0NBQW9DLENBQUE7QUFDM0QsT0FBTyxFQUFDLHdCQUF3QixFQUFFLFlBQVksRUFBQyxNQUFNLDJDQUEyQyxDQUFBO0FBRWhHLE1BQU0sQ0FBQyxPQUFPLE9BQU8sd0JBQXlCLFNBQVEsV0FBVztJQUMvRCxLQUFLLENBQUMsT0FBTztRQUNYLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUU5QyxJQUFJLFNBQVMsQ0FBQTtRQUNiLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQTtRQUV0QixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNuQyxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQTtZQUMxQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUNsRCxDQUFDO2FBQU0sQ0FBQztZQUNOLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7WUFDNUIsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUE7WUFDakQsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDN0MsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFH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QUFVLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDO1lBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsVUFBVSxDQUFDLGNBQWMsRUFBRSxxQkFBcUIsVUFBVSxDQUFDLGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUE7WUFDbkosT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsVUFBVSxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQTtZQUM5RyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEJhc2VDb21tYW5kIGZyb20gXCIuLi8uLi8uLi8uLi9jbGkvYmFzZS1jb21tYW5kLmpzXCJcbmltcG9ydCBwaWNvY29sb3JzIGZyb20gXCJwaWNvY29sb3JzXCJcbmltcG9ydCBUZXN0RmlsZXNGaW5kZXIgZnJvbSBcIi4uLy4uLy4uLy4uL3Rlc3RpbmcvdGVzdC1maWxlcy1maW5kZXIuanNcIlxuaW1wb3J0IFRlc3RSdW5uZXIgZnJvbSBcIi4uLy4uLy4uLy4uL3Rlc3RpbmcvdGVzdC1ydW5uZXIuanNcIlxuaW1wb3J0IHtub3JtYWxpemVFeGFtcGxlUGF0dGVybnMsIHBhcnNlRmlsdGVyc30gZnJvbSBcIi4uLy4uLy4uLy4uL3Rlc3RpbmcvdGVzdC1maWx0ZXItcGFyc2VyLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVsb2Npb3VzQ2xpQ29tbWFuZHNUZXN0IGV4dGVuZHMgQmFzZUNvbW1hbmQge1xuICBhc3luYyBleGVjdXRlKCkge1xuICAgIHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLnNldEVudmlyb25tZW50KFwidGVzdFwiKVxuXG4gICAgbGV0IGRpcmVjdG9yeVxuICAgIGNvbnN0IGRpcmVjdG9yaWVzID0gW11cblxuICAgIGlmIChwcm9jZXNzLmVudi5WRUxPQ0lPVVNfVEVTVF9ESVIpIHtcbiAgICAgIGRpcmVjdG9yeSA9IHByb2Nlc3MuZW52LlZFTE9DSU9VU19URVNUX0RJUlxuICAgICAgZGlyZWN0b3JpZXMucHVzaChwcm9jZXNzLmVudi5WRUxPQ0lPVVNfVEVTVF9ESVIpXG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeSA9IHRoaXMuZGlyZWN0b3J5KClcbiAgICAgIGRpcmVjdG9yaWVzLnB1c2goYCR7dGhpcy5kaXJlY3RvcnkoKX0vX190ZXN0c19fYClcbiAgICAgIGRpcmVjdG9yaWVzLnB1c2goYCR7dGhpcy5kaXJlY3RvcnkoKX0vdGVzdHNgKVxuICAgICAgZGlyZWN0b3JpZXMucHVzaChgJHt0aGlzLmRpcmVjdG9yeSgpfS9zcGVjYClcbiAgICB9XG5cbiAgICBjb25zdCB7aW5jbHVkZVRhZ3MsIGV4Y2x1ZGVUYWdzLCBleGFtcGxlUGF0dGVybnMsIGZpbHRlcmVkUHJvY2Vzc0FyZ3N9ID0gcGFyc2VGaWx0ZXJzKHRoaXMucHJvY2Vzc0FyZ3MgfHwgW10pXG4gICAgY29uc3QgdGVzdEZpbGVzRmluZGVyID0gbmV3IFRlc3RGaWxlc0ZpbmRlcih7ZGlyZWN0b3J5LCBkaXJlY3RvcmllcywgcHJvY2Vzc0FyZ3M6IGZpbHRlcmVkUHJvY2Vzc0FyZ3N9KVxuICAgIGNvbnN0IHRlc3RGaWxlcyA9IGF3YWl0IHRlc3RGaWxlc0ZpbmRlci5maW5kVGVzdEZpbGVzKClcbiAgICBjb25zdCB0ZXN0UnVubmVyID0gbmV3IFRlc3RSdW5uZXIoe1xuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5nZXRDb25maWd1cmF0aW9uKCksXG4gICAgICBleGNsdWRlVGFncyxcbiAgICAgIGluY2x1ZGVUYWdzLFxuICAgICAgdGVzdEZpbGVzLFxuICAgICAgbGluZUZpbHRlcnM6IHRlc3RGaWxlc0ZpbmRlci5nZXRMaW5lRmlsdGVyc0J5RmlsZSgpLFxuICAgICAgZXhhbXBsZVBhdHRlcm5zOiBub3JtYWxpemVFeGFtcGxlUGF0dGVybnMoZXhhbXBsZVBhdHRlcm5zKVxuICAgIH0pXG4gICAgbGV0IHNpZ25hbEhhbmRsZWQgPSBmYWxzZVxuXG4gICAgY29uc3QgaGFuZGxlU2lnbmFsID0gYXN5bmMgKHNpZ25hbCkgPT4ge1xuICAgICAgaWYgKHNpZ25hbEhhbmRsZWQpIHJldHVyblxuICAgICAgc2lnbmFsSGFuZGxlZCA9IHRydWVcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFxcblJlY2VpdmVkICR7c2lnbmFsfSwgcnVubmluZyBhZnRlckFsbCBob29rcyBiZWZvcmUgZXhpdC4uLmApXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRlc3RSdW5uZXIucnVuQWZ0ZXJBbGxzRm9yQWN0aXZlU2NvcGVzKClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgd2hpbGUgcnVubmluZyBhZnRlckFsbCBob29rczpcIiwgZXJyb3IpXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMTMwKVxuICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3Mub25jZShcIlNJR0lOVFwiLCAoKSA9PiB7IHZvaWQgaGFuZGxlU2lnbmFsKFwiU0lHSU5UXCIpIH0pXG4gICAgcHJvY2Vzcy5vbmNlKFwiU0lHVEVSTVwiLCAoKSA9PiB7IHZvaWQgaGFuZGxlU2lnbmFsKFwiU0lHVEVSTVwiKSB9KVxuXG4gICAgYXdhaXQgdGVzdFJ1bm5lci5wcmVwYXJlKClcblxuICAgIGlmICh0ZXN0UnVubmVyLmdldFRlc3RzQ291bnQoKSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Rlc3RSdW5uZXIuZ2V0VGVzdHNDb3VudCgpfSB0ZXN0cyB3YXMgZm91bmQgaW4gJHt0ZXN0RmlsZXMubGVuZ3RofSBmaWxlKHMpYClcbiAgICB9XG5cbiAgICBhd2FpdCB0ZXN0UnVubmVyLnJ1bigpXG5cbiAgICBjb25zdCBleGVjdXRlZFRlc3RzID0gdGVzdFJ1bm5lci5nZXRFeGVjdXRlZFRlc3RzQ291bnQoKVxuXG4gICAgY29uc3QgbGluZUZpbHRlcnMgPSB0ZXN0UnVubmVyLmdldExpbmVGaWx0ZXJzKClcbiAgICBjb25zdCBoYXNMaW5lRmlsdGVycyA9IE9iamVjdC5rZXlzKGxpbmVGaWx0ZXJzKS5sZW5ndGggPiAwXG4gICAgY29uc3QgaGFzRXhhbXBsZUZpbHRlcnMgPSBleGFtcGxlUGF0dGVybnMubGVuZ3RoID4gMFxuICAgIGNvbnN0IGhhc1RhZ0ZpbHRlcnMgPSBpbmNsdWRlVGFncy5sZW5ndGggPiAwIHx8IGV4Y2x1ZGVUYWdzLmxlbmd0aCA+IDBcblxuICAgIGlmICgoaGFzVGFnRmlsdGVycyB8fCBoYXNMaW5lRmlsdGVycyB8fCBoYXNFeGFtcGxlRmlsdGVycykgJiYgZXhlY3V0ZWRUZXN0cyA9PT0gMCkge1xuICAgICAgY29uc29sZS5lcnJvcihwaWNvY29sb3JzLnJlZChcIlxcbk5vIHRlc3RzIG1hdGNoZWQgdGhlIHByb3ZpZGVkIGZpbHRlcnNcIikpXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICB9XG5cbiAgICBpZiAodGVzdFJ1bm5lci5pc0ZhaWxlZCgpKSB7XG4gICAgICBhd2FpdCB0ZXN0UnVubmVyLnBlcnNpc3RGYWlsZWRUZXN0Q29uc29sZU91dHB1dHNUb0Fzc2V0cygpXG4gICAgICBjb25zdCBmYWlsZWRUZXN0cyA9IHRlc3RSdW5uZXIuZ2V0RmFpbGVkVGVzdERldGFpbHMoKVxuXG4gICAgICBpZiAoZmFpbGVkVGVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5lcnJvcihwaWNvY29sb3JzLnJlZChcIlxcbkZhaWxlZCB0ZXN0czpcIikpXG5cbiAgICAgICAgZm9yIChjb25zdCBmYWlsZWQgb2YgZmFpbGVkVGVzdHMpIHtcbiAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGZhaWxlZC5maWxlUGF0aCAmJiBmYWlsZWQubGluZVxuICAgICAgICAgICAgPyBgICgke2ZhaWxlZC5maWxlUGF0aH06JHtmYWlsZWQubGluZX0pYFxuICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgY29uc29sZS5lcnJvcihwaWNvY29sb3JzLnJlZChgLSAke2ZhaWxlZC5mdWxsRGVzY3JpcHRpb259JHtsb2NhdGlvbn1gKSlcblxuICAgICAgICAgIGlmIChmYWlsZWQuY29uc29sZUxvZ1BhdGgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocGljb2NvbG9ycy5yZWQoYCAgQ29uc29sZSBsb2c6ICR7ZmFpbGVkLmNvbnNvbGVMb2dQYXRofWApKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmVycm9yKHBpY29jb2xvcnMucmVkKGBcXG5UZXN0IHJ1biBmYWlsZWQgd2l0aCAke3Rlc3RSdW5uZXIuZ2V0RmFpbGVkVGVzdHMoKX0gZmFpbGVkIHRlc3RzIGFuZCAke3Rlc3RSdW5uZXIuZ2V0U3VjY2Vzc2Z1bFRlc3RzKCl9IHN1Y2Nlc3NmdWxsYCkpXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICB9IGVsc2UgaWYgKHRlc3RSdW5uZXIuYXJlQW55VGVzdHNGb2N1c3NlZCgpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHBpY29jb2xvcnMucmVkKGBcXG5Gb2N1c3NlZCBydW4gd2l0aCAke3Rlc3RSdW5uZXIuZ2V0RmFpbGVkVGVzdHMoKX0gZmFpbGVkIHRlc3RzIGFuZCAke3Rlc3RSdW5uZXIuZ2V0U3VjY2Vzc2Z1bFRlc3RzKCl9IHN1Y2Nlc3NmdWxsYCkpXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2cocGljb2NvbG9ycy5ncmVlbihgXFxuVGVzdCBydW4gc3VjY2VlZGVkIHdpdGggJHt0ZXN0UnVubmVyLmdldFN1Y2Nlc3NmdWxUZXN0cygpfSBzdWNjZXNzZnVsIHRlc3RzYCkpXG4gICAgICBwcm9jZXNzLmV4aXQoMClcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/index.js"],"names":[],"mappings":"AAuBA;IAIE;;;;;OAKG;IACH,2DAJG;QAAqB,WAAW,EAAxB,MAAM;QACyC,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;QAC1B,aAAa,GAA3B,MAAM;KAChB,EAWA;IAnBD,mEAA2B;IAC3B,cAAiB;IAWf,eAA8B;IAC9B,oBAA8B;IAC9B,wDAAkC;IAClC,sBAAkC;IAElC,8BAA8B;IAC9B,gBADW,aAAa,EAAE,CACF;IAG1B;;;OAGG;IACH,iCAHW,MAAM,GACJ,IAAI,CAgBhB;IAED;;;OAGG;IACH,iCAHW,MAAM,GACJ,IAAI,CAgBhB;IAED;;;OAGG;IACH,wBAHW,KAAK,GACH,IAAI,CAehB;IAJC,wBAA+B;IAMjC,kCA6BC;IAED;;;OAGG;IACH,cAHW,MAAM,GACJ,IAAI,CAsDhB;IAED;;;OAGG;IACH,6BAHW,OAAO,cAAc,EAAE,OAAO,GAC5B,OAAO,CAOnB;IAED,0CAA0C;IAC1C,uBADc,IAAI,CA4DjB;IAfC,mCAME;IAWJ,wBAMC;IAED,kCA6BC;IAED;;;OAGG;IACH,4BAHW,aAAa,GACX,OAAO,CAAC,IAAI,CAAC,CAyEzB;IAED;;;OAGG;IACH,yBAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAmBzB;IAED;;;OAGG;IACH,+BAHW,OAAO,cAAc,EAAE,OAAO,GAAG,OAAO,wBAAwB,EAAE,OAAO,GACvE,OAAO,CAenB;CACF;mBA/ZkB,iBAAiB;0BAEV,qBAAqB;oBAD3B,cAAc;6BAEL,wBAAwB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/index.js"],"names":[],"mappings":"AAmCA;IAIE;;;;;OAKG;IACH,2DAJG;QAAqB,WAAW,EAAxB,MAAM;QACyC,aAAa,EAA5D,OAAO,wBAAwB,EAAE,OAAO;QAC1B,aAAa,GAA3B,MAAM;KAChB,EAWA;IAnBD,mEAA2B;IAC3B,cAAiB;IAWf,eAA8B;IAC9B,oBAA8B;IAC9B,wDAAkC;IAClC,sBAAkC;IAElC,8BAA8B;IAC9B,gBADW,aAAa,EAAE,CACF;IAG1B;;;OAGG;IACH,iCAHW,MAAM,GACJ,IAAI,CAgBhB;IAED;;;OAGG;IACH,iCAHW,MAAM,GACJ,IAAI,CAgBhB;IAED;;;OAGG;IACH,wBAHW,KAAK,GACH,IAAI,CAehB;IAJC,wBAA+B;IAMjC,kCA6BC;IAED;;;OAGG;IACH,cAHW,MAAM,GACJ,IAAI,CAsDhB;IAED;;;OAGG;IACH,6BAHW,OAAO,cAAc,EAAE,OAAO,GAC5B,OAAO,CAOnB;IAED,0CAA0C;IAC1C,uBADc,IAAI,CA4DjB;IAfC,mCAME;IAWJ,wBAMC;IAED,kCA6BC;IAED;;;OAGG;IACH,4BAHW,aAAa,GACX,OAAO,CAAC,IAAI,CAAC,CAyEzB;IAED;;;OAGG;IACH,yBAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAmBzB;IAED;;;OAGG;IACH,+BAHW,OAAO,cAAc,EAAE,OAAO,GAAG,OAAO,wBAAwB,EAAE,OAAO,GACvE,OAAO,CAenB;CACF;mBA3akB,iBAAiB;0BAEV,qBAAqB;oBAD3B,cAAc;6BAEL,wBAAwB"}
@@ -17,6 +17,17 @@ function summarizeRequestData(data) {
17
17
  const preview = data.toString("latin1", 0, Math.min(data.length, 160)).replaceAll("\r", "\\r").replaceAll("\n", "\\n");
18
18
  return { length: data.length, preview };
19
19
  }
20
+ /**
21
+ * @param {Error & {velociousContext?: Record<string, unknown>}} error - Error instance.
22
+ * @returns {Record<string, unknown>} - Safe bad-request details for logs.
23
+ */
24
+ function badRequestDetails(error) {
25
+ return {
26
+ errorClass: error.name,
27
+ message: error.message,
28
+ velociousContext: error.velociousContext
29
+ };
30
+ }
20
31
  export default class VeoliciousHttpServerClient {
21
32
  events = new EventEmitter();
22
33
  state = "initial";
@@ -77,7 +88,7 @@ export default class VeoliciousHttpServerClient {
77
88
  * @returns {void} - No return value.
78
89
  */
79
90
  handleBadRequest(error) {
80
- this.logger.warn(() => ["Failed to parse HTTP request", error]);
91
+ this.logger.warn(() => ["Failed to parse HTTP request", badRequestDetails(/** @type {Error & {velociousContext?: Record<string, unknown>}} */ (error))]);
81
92
  if (this.currentRequest && "getRequestParser" in this.currentRequest) {
82
93
  const httpRequest = /** @type {import("./request.js").default} */ (this.currentRequest);
83
94
  httpRequest.getRequestParser().destroy();
@@ -371,4 +382,4 @@ export default class VeoliciousHttpServerClient {
371
382
  return false;
372
383
  }
373
384
  }
374
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUE7QUFDM0IsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDakMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sU0FBUyxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxZQUFZLE1BQU0sOEJBQThCLENBQUE7QUFDdkQsT0FBTyxXQUFXLE1BQU0sNkJBQTZCLENBQUE7QUFDckQsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUE7QUFDcEMsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFBO0FBQ2xDLE9BQU8sYUFBYSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sZ0JBQWdCLE1BQU0sd0JBQXdCLENBQUE7QUFFckQ7OztHQUdHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxJQUFJO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFFdEgsT0FBTyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFBO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLDBCQUEwQjtJQUM3QyxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtJQUMzQixLQUFLLEdBQUcsU0FBUyxDQUFBO0lBRWpCOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFDO1FBQ3JELElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBRTdELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFFbEMsOEJBQThCO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSCx1QkFBdUIsQ0FBQyxPQUFPO1FBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFBO1FBQy9ELE1BQU0sSUFBSSxHQUFHLEdBQUcsT0FBTyxJQUFJLENBQUE7UUFDM0IsTUFBTSxPQUFPLEdBQUc7WUFDZCxRQUFRLFdBQVcsa0JBQWtCO1lBQ3JDLG1CQUFtQjtZQUNuQix5Q0FBeUM7WUFDekMsbUJBQW1CLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ3BELEVBQUU7WUFDRixJQUFJO1NBQ0wsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFZCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILHVCQUF1QixDQUFDLE9BQU87UUFDN0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsSUFBSSxLQUFLLENBQUE7UUFDL0QsTUFBTSxJQUFJLEdBQUcsR0FBRyxPQUFPLElBQUksQ0FBQTtRQUMzQixNQUFNLE9BQU8sR0FBRztZQUNkLFFBQVEsV0FBVyxrQkFBa0I7WUFDckMsbUJBQW1CO1lBQ25CLHlDQUF5QztZQUN6QyxtQkFBbUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDcEQsRUFBRTtZQUNGLElBQUk7U0FDTCxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUVkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsS0FBSztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLDhCQUE4QixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFFL0QsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLGtCQUFrQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNyRSxNQUFNLFdBQVcsR0FBRyw2Q0FBNkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUV2RixXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUMxQyxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUE7UUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUE7UUFFdEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFFRCxxQkFBcUIsR0FBRyxHQUFHLEVBQUU7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUUxQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQywrQkFBK0IsRUFBRTtnQkFDeEQsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7Z0JBQzVDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRTtnQkFDOUMsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO2dCQUNoQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNO2FBQ3hDLENBQUMsQ0FBQyxDQUFBO1FBRUgsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7WUFDMUIsT0FBTTtRQUNSLENBQUM7UUFFRCxnSkFBZ0o7UUFDaEosSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUE7UUFFdEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUM7WUFDdEMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYztTQUM3QixDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUV2QyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2pELGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUNyQixDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxPQUFPLENBQUMsSUFBSTtRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFO2dCQUN4QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7YUFDOUIsQ0FBQyxDQUFDLENBQUE7UUFFSCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbEMsT0FBTTtRQUNSLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxpQ0FBaUM7WUFDakMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFBO1lBRXBCLE9BQU8sU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxpQ0FBaUMsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFBO29CQUNoSSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksT0FBTyxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBQyxDQUFDLENBQUE7b0JBQ3BGLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO29CQUMvRSxJQUFJLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFBO2dCQUMvQixDQUFDO3FCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO29CQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtnQkFDNUQsQ0FBQztnQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO2dCQUUvRCxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsb0JBQW9CLEVBQUU7d0JBQzdDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVzt3QkFDN0IsWUFBWSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDO3dCQUN4QyxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sSUFBSSxDQUFDO3dCQUN2QyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLFlBQVk7cUJBQ3RFLENBQUMsQ0FBQyxDQUFBO2dCQUVILElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtvQkFFNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQywrQkFBK0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFBO3dCQUM5SCxNQUFLO29CQUNQLENBQUM7b0JBRUQsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUE7b0JBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsK0NBQStDLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQTtnQkFDaEosQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQTtRQUN2SSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILG1CQUFtQixDQUFDLE9BQU87UUFDekIsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQTtRQUM5RCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUE7UUFFcEUsT0FBTyxPQUFPLENBQUMsYUFBYSxJQUFJLFdBQVcsSUFBSSxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtJQUN2RixDQUFDO0lBRUQsMENBQTBDO0lBQzFDLG1CQUFtQjtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFFL0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUV2RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGtDQUFrQyxDQUFDLENBQUE7WUFDaEUsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ2pELE1BQU0sQ0FBQyxHQUFHLGVBQWUsc0NBQXNDLEVBQUUsUUFBUSxDQUFDO2FBQzFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNuQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQTtRQUM5RCxNQUFNLGFBQWEsR0FBRztZQUNwQixRQUFRLFdBQVcsMEJBQTBCO1lBQzdDLG9CQUFvQjtZQUNwQixxQkFBcUI7WUFDckIseUJBQXlCLGtCQUFrQixFQUFFO1lBQzdDLEVBQUU7WUFDRixFQUFFO1NBQ0gsQ0FBQTtRQUNELE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFM0MsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtDQUFrQyxFQUFFLEVBQUUsQ0FBQTtRQUN4RixJQUFJLGNBQWMsQ0FBQTtRQUNsQixJQUFJLHFCQUFxQixDQUFBO1FBRXpCLElBQUksc0JBQXNCLEVBQUUsQ0FBQztZQUMzQixNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQztnQkFDN0MsTUFBTSxFQUFFLElBQUk7Z0JBQ1osYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2dCQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWM7YUFDN0IsQ0FBQyxDQUFBO1lBRUYsTUFBTSxnQkFBZ0IsR0FBRyx1REFBdUQsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBRWxHLElBQUksZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQzNCLHFCQUFxQixHQUFHLDZGQUE2RixDQUFDLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDekksQ0FBQztpQkFBTSxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUMzQixjQUFjLEdBQUcsNkVBQTZFLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUNsSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixDQUFDO1lBQzNDLE1BQU0sRUFBRSxJQUFJO1lBQ1osYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxjQUFjLEVBQUUsY0FBYztZQUM5QixxQkFBcUIsRUFBRSxxQkFBcUI7U0FDN0MsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUM1QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLENBQUE7WUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQTtZQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzQixDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNwQyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO0lBQ2hELENBQUM7SUFFRCxXQUFXLEdBQUcsR0FBRyxFQUFFO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2xILEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0NBQW9DLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDM0IsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUE7SUFFRCxLQUFLLENBQUMsZ0JBQWdCO1FBQ3BCLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDWixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzVDLE1BQU0sT0FBTyxHQUFHLGFBQWEsRUFBRSxVQUFVLEVBQUUsQ0FBQTtZQUUzQyxJQUFJLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFBO2dCQUN6QyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUE7Z0JBQzVFLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUVqRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFBO2dCQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGdDQUFnQyxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNySSxJQUFJLENBQUM7b0JBQ0gsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFBO2dCQUN4QyxDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLFdBQVcsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtvQkFDdEcsTUFBTSxLQUFLLENBQUE7Z0JBQ2IsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUztvQkFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQTtnQkFDaEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUMsQ0FBQTtnQkFFN0csSUFBSSxxQkFBcUIsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGtDQUFrQyxXQUFXLDBCQUEwQixnQkFBZ0IsRUFBRSxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDLENBQUE7b0JBQ3JKLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQUs7WUFDUCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWE7UUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUNoRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDMUMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFDdkIsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFBO1FBQzVFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUN6QyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNqRSxNQUFNLFdBQVcsR0FBRyxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7UUFDdkUsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUNwRCxNQUFNLFlBQVksR0FBRyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUE7UUFDN0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLFVBQVUsQ0FBQTtRQUUvQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyw0REFBNEQsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzVGLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFBO1FBQ2pHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsc0JBQXNCLEVBQUU7Z0JBQy9DLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsV0FBVztnQkFDWCxRQUFRO2dCQUNSLFlBQVk7Z0JBQ1osWUFBWTthQUNiLENBQUMsQ0FBQyxDQUFBO1FBRUgsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzNDLENBQUM7YUFBTSxJQUFJLFdBQVcsSUFBSSxLQUFLLElBQUksZ0JBQWdCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDcEUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDaEQsQ0FBQztRQUVELElBQUksYUFBYSxDQUFBO1FBRWpCLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3JDLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFBO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ04sYUFBYSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFBO1FBQ3hGLENBQUM7UUFFRCxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ25ELFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO1FBQzlDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRXpDLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUVoQixPQUFPLElBQUksUUFBUSxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUE7UUFFekcsS0FBSyxNQUFNLFNBQVMsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekMsS0FBSyxNQUFNLFdBQVcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELE9BQU8sSUFBSSxHQUFHLFNBQVMsS0FBSyxXQUFXLE1BQU0sQ0FBQTtZQUMvQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxNQUFNLENBQUE7UUFFakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsOEJBQThCLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsQ0FBQTtRQUV6SCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLDJCQUEyQixFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBQyxDQUFDLENBQUMsQ0FBQTtRQUNuSixDQUFDO1FBRUQsSUFBSSxrQkFBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFdBQVcsR0FBRyw2Q0FBNkMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQzNFLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsc0JBQXNCLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDLENBQUE7UUFDNUYsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQTtRQUVsQixJQUFJLENBQUM7WUFDSCxJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxVQUFVLElBQUksQ0FBQyxDQUFBO2dCQUNmLFVBQVUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFBO2dCQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUMsQ0FBQTtnQkFDckksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ25DLENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUMsQ0FBQTtRQUMzRyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsb0JBQW9CLElBQUksQ0FBQyxXQUFXLHdDQUF3QyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQ3hILE1BQU0sS0FBSyxDQUFBO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUIsQ0FBQyxPQUFPO1FBQzNCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUN6QyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUE7UUFDNUUsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0I7WUFDdkMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDMUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUVOLElBQUksV0FBVyxJQUFJLFdBQVc7WUFBRSxPQUFPLEtBQUssQ0FBQTtRQUM1QyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQTtRQUVuRCxJQUFJLFdBQVcsSUFBSSxLQUFLLElBQUksZ0JBQWdCLElBQUksWUFBWTtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRXpFLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiXG5pbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHtjcmVhdGVSZWFkU3RyZWFtfSBmcm9tIFwibm9kZTpmc1wiXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiLi4vLi4vdXRpbHMvZXZlbnQtZW1pdHRlci5qc1wiXG5pbXBvcnQgZW5zdXJlRXJyb3IgZnJvbSBcIi4uLy4uL3V0aWxzL2Vuc3VyZS1lcnJvci5qc1wiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi8uLi9sb2dnZXIuanNcIlxuaW1wb3J0IFJlcXVlc3QgZnJvbSBcIi4vcmVxdWVzdC5qc1wiXG5pbXBvcnQgUmVxdWVzdFJ1bm5lciBmcm9tIFwiLi9yZXF1ZXN0LXJ1bm5lci5qc1wiXG5pbXBvcnQgV2Vic29ja2V0U2Vzc2lvbiBmcm9tIFwiLi93ZWJzb2NrZXQtc2Vzc2lvbi5qc1wiXG5cbi8qKlxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgLSBJbmNvbWluZyByZXF1ZXN0IGRhdGEuXG4gKiBAcmV0dXJucyB7e2xlbmd0aDogbnVtYmVyLCBwcmV2aWV3OiBzdHJpbmd9fSAtIFJlcXVlc3QgZGF0YSBzdW1tYXJ5LlxuICovXG5mdW5jdGlvbiBzdW1tYXJpemVSZXF1ZXN0RGF0YShkYXRhKSB7XG4gIGNvbnN0IHByZXZpZXcgPSBkYXRhLnRvU3RyaW5nKFwibGF0aW4xXCIsIDAsIE1hdGgubWluKGRhdGEubGVuZ3RoLCAxNjApKS5yZXBsYWNlQWxsKFwiXFxyXCIsIFwiXFxcXHJcIikucmVwbGFjZUFsbChcIlxcblwiLCBcIlxcXFxuXCIpXG5cbiAgcmV0dXJuIHtsZW5ndGg6IGRhdGEubGVuZ3RoLCBwcmV2aWV3fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZW9saWNpb3VzSHR0cFNlcnZlckNsaWVudCB7XG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBzdGF0ZSA9IFwiaW5pdGlhbFwiXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLmNsaWVudENvdW50IC0gQ2xpZW50IGNvdW50LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnJlbW90ZUFkZHJlc3NdIC0gUmVtb3RlIGFkZHJlc3MuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y2xpZW50Q291bnQsIGNvbmZpZ3VyYXRpb24sIHJlbW90ZUFkZHJlc3N9KSB7XG4gICAgaWYgKCFjb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25maWd1cmF0aW9uIGdpdmVuXCIpXG5cbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcbiAgICB0aGlzLmNsaWVudENvdW50ID0gY2xpZW50Q291bnRcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5yZW1vdGVBZGRyZXNzID0gcmVtb3RlQWRkcmVzc1xuXG4gICAgLyoqIEB0eXBlIHtSZXF1ZXN0UnVubmVyW119ICovXG4gICAgdGhpcy5yZXF1ZXN0UnVubmVycyA9IFtdXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBNZXNzYWdlIHRleHQuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIF9zZW5kQmFkVXBncmFkZVJlc3BvbnNlKG1lc3NhZ2UpIHtcbiAgICBjb25zdCBodHRwVmVyc2lvbiA9IHRoaXMuY3VycmVudFJlcXVlc3Q/Lmh0dHBWZXJzaW9uKCkgfHwgXCIxLjFcIlxuICAgIGNvbnN0IGJvZHkgPSBgJHttZXNzYWdlfVxcbmBcbiAgICBjb25zdCBoZWFkZXJzID0gW1xuICAgICAgYEhUVFAvJHtodHRwVmVyc2lvbn0gNDAwIEJhZCBSZXF1ZXN0YCxcbiAgICAgIFwiQ29ubmVjdGlvbjogQ2xvc2VcIixcbiAgICAgIFwiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XCIsXG4gICAgICBgQ29udGVudC1MZW5ndGg6ICR7QnVmZmVyLmJ5dGVMZW5ndGgoYm9keSwgXCJ1dGY4XCIpfWAsXG4gICAgICBcIlwiLFxuICAgICAgYm9keVxuICAgIF0uam9pbihcIlxcclxcblwiKVxuXG4gICAgdGhpcy5ldmVudHMuZW1pdChcIm91dHB1dFwiLCBoZWFkZXJzKVxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJjbG9zZVwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gUmVzcG9uc2UgbWVzc2FnZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgX3NlbmRCYWRSZXF1ZXN0UmVzcG9uc2UobWVzc2FnZSkge1xuICAgIGNvbnN0IGh0dHBWZXJzaW9uID0gdGhpcy5jdXJyZW50UmVxdWVzdD8uaHR0cFZlcnNpb24oKSB8fCBcIjEuMVwiXG4gICAgY29uc3QgYm9keSA9IGAke21lc3NhZ2V9XFxuYFxuICAgIGNvbnN0IGhlYWRlcnMgPSBbXG4gICAgICBgSFRUUC8ke2h0dHBWZXJzaW9ufSA0MDAgQmFkIFJlcXVlc3RgLFxuICAgICAgXCJDb25uZWN0aW9uOiBDbG9zZVwiLFxuICAgICAgXCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcIixcbiAgICAgIGBDb250ZW50LUxlbmd0aDogJHtCdWZmZXIuYnl0ZUxlbmd0aChib2R5LCBcInV0ZjhcIil9YCxcbiAgICAgIFwiXCIsXG4gICAgICBib2R5XG4gICAgXS5qb2luKFwiXFxyXFxuXCIpXG5cbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwib3V0cHV0XCIsIGhlYWRlcnMpXG4gICAgdGhpcy5ldmVudHMuZW1pdChcImNsb3NlXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSBFcnJvciBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgaGFuZGxlQmFkUmVxdWVzdChlcnJvcikge1xuICAgIHRoaXMubG9nZ2VyLndhcm4oKCkgPT4gW1wiRmFpbGVkIHRvIHBhcnNlIEhUVFAgcmVxdWVzdFwiLCBlcnJvcl0pXG5cbiAgICBpZiAodGhpcy5jdXJyZW50UmVxdWVzdCAmJiBcImdldFJlcXVlc3RQYXJzZXJcIiBpbiB0aGlzLmN1cnJlbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCBodHRwUmVxdWVzdCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9ICovICh0aGlzLmN1cnJlbnRSZXF1ZXN0KVxuXG4gICAgICBodHRwUmVxdWVzdC5nZXRSZXF1ZXN0UGFyc2VyKCkuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UmVxdWVzdCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuc3RhdGUgPSBcImluaXRpYWxcIlxuXG4gICAgdGhpcy5fc2VuZEJhZFJlcXVlc3RSZXNwb25zZShcIkJhZCBSZXF1ZXN0XCIpXG4gIH1cblxuICBleGVjdXRlQ3VycmVudFJlcXVlc3QgPSAoKSA9PiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXCJleGVjdXRlQ3VycmVudFJlcXVlc3RcIilcblxuICAgIGlmICghdGhpcy5jdXJyZW50UmVxdWVzdCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gY3VycmVudCByZXF1ZXN0XCIpXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wiZXhlY3V0ZUN1cnJlbnRSZXF1ZXN0IHJlcXVlc3RcIiwge1xuICAgICAgY2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsXG4gICAgICBodHRwTWV0aG9kOiB0aGlzLmN1cnJlbnRSZXF1ZXN0Lmh0dHBNZXRob2QoKSxcbiAgICAgIGh0dHBWZXJzaW9uOiB0aGlzLmN1cnJlbnRSZXF1ZXN0Lmh0dHBWZXJzaW9uKCksXG4gICAgICBwYXRoOiB0aGlzLmN1cnJlbnRSZXF1ZXN0LnBhdGgoKSxcbiAgICAgIHF1ZXVlTGVuZ3RoOiB0aGlzLnJlcXVlc3RSdW5uZXJzLmxlbmd0aFxuICAgIH1dKVxuXG4gICAgaWYgKHRoaXMuX2lzV2Vic29ja2V0VXBncmFkZSh0aGlzLmN1cnJlbnRSZXF1ZXN0KSkge1xuICAgICAgdGhpcy5fdXBncmFkZVRvV2Vic29ja2V0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFdlIGFyZSBkb25lIHBhcnNpbmcgdGhlIGdpdmVuIHJlcXVlc3QgYW5kIGNhbiB0aGVvcmV0aWNhbGx5IHN0YXJ0IHBhcnNpbmcgYSBuZXcgb25lLCBiZWZvcmUgdGhlIGN1cnJlbnQgcmVxdWVzdCBpcyBkb25lIC0gc28gcmVzZXQgdGhlIHN0YXRlLlxuICAgIHRoaXMuc3RhdGUgPSBcImluaXRpYWxcIlxuXG4gICAgY29uc3QgcmVxdWVzdFJ1bm5lciA9IG5ldyBSZXF1ZXN0UnVubmVyKHtcbiAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuY29uZmlndXJhdGlvbixcbiAgICAgIHJlcXVlc3Q6IHRoaXMuY3VycmVudFJlcXVlc3RcbiAgICB9KVxuXG4gICAgdGhpcy5yZXF1ZXN0UnVubmVycy5wdXNoKHJlcXVlc3RSdW5uZXIpXG5cbiAgICByZXF1ZXN0UnVubmVyLmV2ZW50cy5vbihcImRvbmVcIiwgdGhpcy5yZXF1ZXN0RG9uZSlcbiAgICByZXF1ZXN0UnVubmVyLnJ1bigpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgLSBEYXRhIHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIG9uV3JpdGUoZGF0YSkge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIm9uV3JpdGUgc3RhcnRcIiwge1xuICAgICAgY2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsXG4gICAgICBzdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgIC4uLnN1bW1hcml6ZVJlcXVlc3REYXRhKGRhdGEpXG4gICAgfV0pXG5cbiAgICBpZiAodGhpcy53ZWJzb2NrZXRTZXNzaW9uKSB7XG4gICAgICB0aGlzLndlYnNvY2tldFNlc3Npb24ub25EYXRhKGRhdGEpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLyoqIEB0eXBlIHtCdWZmZXIgfCB1bmRlZmluZWR9ICovXG4gICAgICBsZXQgcmVtYWluaW5nID0gZGF0YVxuXG4gICAgICB3aGlsZSAocmVtYWluaW5nICYmIHJlbWFpbmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09IFwiaW5pdGlhbFwiKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wib25Xcml0ZSBjcmVhdGluZyByZXF1ZXN0IHBhcnNlclwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIHJlbWFpbmluZ0xlbmd0aDogcmVtYWluaW5nLmxlbmd0aH1dKVxuICAgICAgICAgIHRoaXMuY3VycmVudFJlcXVlc3QgPSBuZXcgUmVxdWVzdCh7Y2xpZW50OiB0aGlzLCBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb259KVxuICAgICAgICAgIHRoaXMuY3VycmVudFJlcXVlc3QucmVxdWVzdFBhcnNlci5ldmVudHMub24oXCJkb25lXCIsIHRoaXMuZXhlY3V0ZUN1cnJlbnRSZXF1ZXN0KVxuICAgICAgICAgIHRoaXMuc3RhdGUgPSBcInJlcXVlc3RTdGFydGVkXCJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlICE9IFwicmVxdWVzdFN0YXJ0ZWRcIikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzdGF0ZSBmb3IgY2xpZW50OiAke3RoaXMuc3RhdGV9YClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50UmVxdWVzdCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gY3VycmVudCByZXF1ZXN0XCIpXG5cbiAgICAgICAgcmVtYWluaW5nID0gdGhpcy5jdXJyZW50UmVxdWVzdC5mZWVkKHJlbWFpbmluZylcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wib25Xcml0ZSBmZWQgcGFyc2VyXCIsIHtcbiAgICAgICAgICBjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCxcbiAgICAgICAgICBoYXNSZW1haW5pbmc6IEJvb2xlYW4ocmVtYWluaW5nPy5sZW5ndGgpLFxuICAgICAgICAgIHJlbWFpbmluZ0xlbmd0aDogcmVtYWluaW5nPy5sZW5ndGggfHwgMCxcbiAgICAgICAgICBwYXJzZXJDb21wbGV0ZWQ6IHRoaXMuY3VycmVudFJlcXVlc3Q/LmdldFJlcXVlc3RQYXJzZXIoKS5oYXNDb21wbGV0ZWRcbiAgICAgICAgfV0pXG5cbiAgICAgICAgaWYgKHJlbWFpbmluZyAmJiByZW1haW5pbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3RQYXJzZXIgPSB0aGlzLmN1cnJlbnRSZXF1ZXN0LmdldFJlcXVlc3RQYXJzZXIoKVxuXG4gICAgICAgICAgaWYgKCFyZXF1ZXN0UGFyc2VyLmhhc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wib25Xcml0ZSB3YWl0aW5nIGZvciBtb3JlIGRhdGFcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCByZW1haW5pbmdMZW5ndGg6IHJlbWFpbmluZy5sZW5ndGh9XSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IFwiaW5pdGlhbFwiXG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wib25Xcml0ZSBwYXJzZXIgY29tcGxldGVkIHdpdGggcmVtYWluaW5nIGJ5dGVzXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgcmVtYWluaW5nTGVuZ3RoOiByZW1haW5pbmcubGVuZ3RofV0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIm9uV3JpdGUgZW5kXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgc3RhdGU6IHRoaXMuc3RhdGUsIHF1ZXVlTGVuZ3RoOiB0aGlzLnJlcXVlc3RSdW5uZXJzLmxlbmd0aH1dKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmhhbmRsZUJhZFJlcXVlc3QoZW5zdXJlRXJyb3IoZXJyb3IpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSByZXF1ZXN0IC0gUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgd2Vic29ja2V0IHVwZ3JhZGUuXG4gICAqL1xuICBfaXNXZWJzb2NrZXRVcGdyYWRlKHJlcXVlc3QpIHtcbiAgICBjb25zdCB1cGdyYWRlSGVhZGVyID0gcmVxdWVzdC5oZWFkZXIoXCJ1cGdyYWRlXCIpPy50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3QgY29ubmVjdGlvbkhlYWRlciA9IHJlcXVlc3QuaGVhZGVyKFwiY29ubmVjdGlvblwiKT8udG9Mb3dlckNhc2UoKVxuXG4gICAgcmV0dXJuIEJvb2xlYW4odXBncmFkZUhlYWRlciA9PSBcIndlYnNvY2tldFwiICYmIGNvbm5lY3Rpb25IZWFkZXI/LmluY2x1ZGVzKFwidXBncmFkZVwiKSlcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuICAqL1xuICBfdXBncmFkZVRvV2Vic29ja2V0KCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50UmVxdWVzdCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gY3VycmVudCByZXF1ZXN0XCIpXG5cbiAgICBjb25zdCBzZWNXZWJzb2NrZXRLZXkgPSB0aGlzLmN1cnJlbnRSZXF1ZXN0LmhlYWRlcihcInNlYy13ZWJzb2NrZXQta2V5XCIpXG5cbiAgICBpZiAoIXNlY1dlYnNvY2tldEtleSkge1xuICAgICAgdGhpcy5fc2VuZEJhZFVwZ3JhZGVSZXNwb25zZShcIk1pc3NpbmcgU2VjLVdlYlNvY2tldC1LZXkgaGVhZGVyXCIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB3ZWJzb2NrZXRBY2NlcHRLZXkgPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTFcIilcbiAgICAgIC51cGRhdGUoYCR7c2VjV2Vic29ja2V0S2V5fTI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMWAsIFwiYmluYXJ5XCIpXG4gICAgICAuZGlnZXN0KFwiYmFzZTY0XCIpXG4gICAgY29uc3QgaHR0cFZlcnNpb24gPSB0aGlzLmN1cnJlbnRSZXF1ZXN0Lmh0dHBWZXJzaW9uKCkgfHwgXCIxLjFcIlxuICAgIGNvbnN0IHJlc3BvbnNlTGluZXMgPSBbXG4gICAgICBgSFRUUC8ke2h0dHBWZXJzaW9ufSAxMDEgU3dpdGNoaW5nIFByb3RvY29sc2AsXG4gICAgICBcIlVwZ3JhZGU6IHdlYnNvY2tldFwiLFxuICAgICAgXCJDb25uZWN0aW9uOiBVcGdyYWRlXCIsXG4gICAgICBgU2VjLVdlYlNvY2tldC1BY2NlcHQ6ICR7d2Vic29ja2V0QWNjZXB0S2V5fWAsXG4gICAgICBcIlwiLFxuICAgICAgXCJcIlxuICAgIF1cbiAgICBjb25zdCByZXNwb25zZSA9IHJlc3BvbnNlTGluZXMuam9pbihcIlxcclxcblwiKVxuXG4gICAgY29uc3QgbWVzc2FnZUhhbmRsZXJSZXNvbHZlciA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRXZWJzb2NrZXRNZXNzYWdlSGFuZGxlclJlc29sdmVyPy4oKVxuICAgIGxldCBtZXNzYWdlSGFuZGxlclxuICAgIGxldCBtZXNzYWdlSGFuZGxlclByb21pc2VcblxuICAgIGlmIChtZXNzYWdlSGFuZGxlclJlc29sdmVyKSB7XG4gICAgICBjb25zdCByZXNvbHZlZEhhbmRsZXIgPSBtZXNzYWdlSGFuZGxlclJlc29sdmVyKHtcbiAgICAgICAgY2xpZW50OiB0aGlzLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHJlcXVlc3Q6IHRoaXMuY3VycmVudFJlcXVlc3RcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJlc29sdmVkVGhlbmFibGUgPSAvKiogQHR5cGUge3t0aGVuPzogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bn19ICovIChyZXNvbHZlZEhhbmRsZXIpXG5cbiAgICAgIGlmIChyZXNvbHZlZFRoZW5hYmxlPy50aGVuKSB7XG4gICAgICAgIG1lc3NhZ2VIYW5kbGVyUHJvbWlzZSA9IC8qKiBAdHlwZSB7UHJvbWlzZTxpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLldlYnNvY2tldE1lc3NhZ2VIYW5kbGVyIHwgdm9pZD59ICovIChyZXNvbHZlZEhhbmRsZXIpXG4gICAgICB9IGVsc2UgaWYgKHJlc29sdmVkSGFuZGxlcikge1xuICAgICAgICBtZXNzYWdlSGFuZGxlciA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5XZWJzb2NrZXRNZXNzYWdlSGFuZGxlcn0gKi8gKHJlc29sdmVkSGFuZGxlcilcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLndlYnNvY2tldFNlc3Npb24gPSBuZXcgV2Vic29ja2V0U2Vzc2lvbih7XG4gICAgICBjbGllbnQ6IHRoaXMsXG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICB1cGdyYWRlUmVxdWVzdDogdGhpcy5jdXJyZW50UmVxdWVzdCxcbiAgICAgIG1lc3NhZ2VIYW5kbGVyOiBtZXNzYWdlSGFuZGxlcixcbiAgICAgIG1lc3NhZ2VIYW5kbGVyUHJvbWlzZTogbWVzc2FnZUhhbmRsZXJQcm9taXNlXG4gICAgfSlcbiAgICB0aGlzLndlYnNvY2tldFNlc3Npb24uZXZlbnRzLm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgdGhpcy53ZWJzb2NrZXRTZXNzaW9uPy5kZXN0cm95KClcbiAgICAgIHRoaXMud2Vic29ja2V0U2Vzc2lvbiA9IHVuZGVmaW5lZFxuICAgICAgdGhpcy5ldmVudHMuZW1pdChcImNsb3NlXCIpXG4gICAgfSlcbiAgICB0aGlzLnN0YXRlID0gXCJ3ZWJzb2NrZXRcIlxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvdXRwdXRcIiwgcmVzcG9uc2UpXG4gICAgdm9pZCB0aGlzLndlYnNvY2tldFNlc3Npb24uaW5pdGlhbGl6ZUNoYW5uZWwoKVxuICB9XG5cbiAgcmVxdWVzdERvbmUgPSAoKSA9PiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wicmVxdWVzdERvbmVcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCBxdWV1ZUxlbmd0aDogdGhpcy5yZXF1ZXN0UnVubmVycy5sZW5ndGh9XSlcbiAgICB2b2lkIHRoaXMuc2VuZERvbmVSZXF1ZXN0cygpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIud2FybihcIkZhaWxlZCB3aGlsZSBzZW5kaW5nIGRvbmUgcmVxdWVzdHNcIiwgZXJyb3IpXG4gICAgICB0aGlzLmV2ZW50cy5lbWl0KFwiY2xvc2VcIilcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgc2VuZERvbmVSZXF1ZXN0cygpIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgcmVxdWVzdFJ1bm5lciA9IHRoaXMucmVxdWVzdFJ1bm5lcnNbMF1cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0UnVubmVyPy5nZXRSZXF1ZXN0KClcblxuICAgICAgaWYgKHJlcXVlc3RSdW5uZXI/LmdldFN0YXRlKCkgPT0gXCJkb25lXCIpIHtcbiAgICAgICAgY29uc3QgaHR0cFZlcnNpb24gPSByZXF1ZXN0Lmh0dHBWZXJzaW9uKClcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbkhlYWRlciA9IHJlcXVlc3QuaGVhZGVyKFwiY29ubmVjdGlvblwiKT8udG9Mb3dlckNhc2UoKT8udHJpbSgpXG4gICAgICAgIGNvbnN0IHNob3VsZENsb3NlQ29ubmVjdGlvbiA9IHRoaXMuc2hvdWxkQ2xvc2VDb25uZWN0aW9uKHJlcXVlc3QpXG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0UnVubmVycy5zaGlmdCgpXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcInNlbmREb25lUmVxdWVzdHMgc2hpZnRlZCBxdWV1ZVwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIHF1ZXVlTGVuZ3RoOiB0aGlzLnJlcXVlc3RSdW5uZXJzLmxlbmd0aH1dKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc2VuZFJlc3BvbnNlKHJlcXVlc3RSdW5uZXIpXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoKCkgPT4gW2BWZWxvY2lvdXMgY2xpZW50ICR7dGhpcy5jbGllbnRDb3VudH0gZmFpbGVkIHdoaWxlIHNlbmRpbmcgcmVzcG9uc2VgLCBlcnJvcl0pXG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50UmVxdWVzdCA9PT0gcmVxdWVzdCAmJiB0aGlzLnN0YXRlID09PSBcImluaXRpYWxcIikgdGhpcy5jdXJyZW50UmVxdWVzdCA9IHVuZGVmaW5lZFxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJzZW5kRG9uZVJlcXVlc3RzXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgY29ubmVjdGlvbkhlYWRlciwgaHR0cFZlcnNpb259XSlcblxuICAgICAgICBpZiAoc2hvdWxkQ2xvc2VDb25uZWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW2BDbG9zaW5nIHRoZSBjb25uZWN0aW9uIGJlY2F1c2UgJHtodHRwVmVyc2lvbn0gYW5kIGNvbm5lY3Rpb24gaGVhZGVyICR7Y29ubmVjdGlvbkhlYWRlcn1gLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnR9XSlcbiAgICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KFwiY2xvc2VcIilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZXF1ZXN0UnVubmVyfSByZXF1ZXN0UnVubmVyIC0gUmVxdWVzdCBydW5uZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBzZW5kUmVzcG9uc2UocmVxdWVzdFJ1bm5lcikge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gZGlnZyhyZXF1ZXN0UnVubmVyLCBcInJlc3BvbnNlXCIpXG4gICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RSdW5uZXIuZ2V0UmVxdWVzdCgpXG4gICAgY29uc3QgZmlsZVBhdGggPSByZXNwb25zZS5nZXRGaWxlUGF0aCgpXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKClcbiAgICBjb25zdCBjb25uZWN0aW9uSGVhZGVyID0gcmVxdWVzdC5oZWFkZXIoXCJjb25uZWN0aW9uXCIpPy50b0xvd2VyQ2FzZSgpPy50cmltKClcbiAgICBjb25zdCBodHRwVmVyc2lvbiA9IHJlcXVlc3QuaHR0cFZlcnNpb24oKVxuICAgIGNvbnN0IHNob3VsZENsb3NlQ29ubmVjdGlvbiA9IHRoaXMuc2hvdWxkQ2xvc2VDb25uZWN0aW9uKHJlcXVlc3QpXG4gICAgY29uc3QgaGFzRmlsZVBhdGggPSB0eXBlb2YgZmlsZVBhdGggPT09IFwic3RyaW5nXCIgJiYgZmlsZVBhdGgubGVuZ3RoID4gMFxuICAgIGNvbnN0IGJvZHkgPSBoYXNGaWxlUGF0aCA/IG51bGwgOiByZXNwb25zZS5nZXRCb2R5KClcbiAgICBjb25zdCBib2R5SXNTdHJpbmcgPSB0eXBlb2YgYm9keSA9PT0gXCJzdHJpbmdcIlxuICAgIGNvbnN0IGJvZHlJc0JpbmFyeSA9IGJvZHkgaW5zdGFuY2VvZiBVaW50OEFycmF5XG5cbiAgICBpZiAoIWhhc0ZpbGVQYXRoICYmICFib2R5SXNTdHJpbmcgJiYgIWJvZHlJc0JpbmFyeSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCByZXNwb25zZSBib2R5IHRvIGJlIGEgc3RyaW5nIG9yIFVpbnQ4QXJyYXksIGdvdCAke3R5cGVvZiBib2R5fWApXG4gICAgfVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXCJzZW5kUmVzcG9uc2VcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCBjb25uZWN0aW9uSGVhZGVyLCBodHRwVmVyc2lvbn0pXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wic2VuZFJlc3BvbnNlIHBheWxvYWRcIiwge1xuICAgICAgY2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsXG4gICAgICBoYXNGaWxlUGF0aCxcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgYm9keUlzQmluYXJ5LFxuICAgICAgYm9keUlzU3RyaW5nXG4gICAgfV0pXG5cbiAgICBpZiAoc2hvdWxkQ2xvc2VDb25uZWN0aW9uKSB7XG4gICAgICByZXNwb25zZS5zZXRIZWFkZXIoXCJDb25uZWN0aW9uXCIsIFwiQ2xvc2VcIilcbiAgICB9IGVsc2UgaWYgKGh0dHBWZXJzaW9uID09IFwiMS4wXCIgJiYgY29ubmVjdGlvbkhlYWRlciA9PSBcImtlZXAtYWxpdmVcIikge1xuICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKFwiQ29ubmVjdGlvblwiLCBcIktlZXAtQWxpdmVcIilcbiAgICB9XG5cbiAgICBsZXQgY29udGVudExlbmd0aFxuXG4gICAgaWYgKGhhc0ZpbGVQYXRoKSB7XG4gICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpXG4gICAgICBjb250ZW50TGVuZ3RoID0gc3RhdHMuc2l6ZVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50TGVuZ3RoID0gYm9keUlzU3RyaW5nID8gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGJvZHkpLmxlbmd0aCA6IGJvZHkuYnl0ZUxlbmd0aFxuICAgIH1cblxuICAgIHJlc3BvbnNlLnNldEhlYWRlcihcIkNvbnRlbnQtTGVuZ3RoXCIsIGNvbnRlbnRMZW5ndGgpXG4gICAgcmVzcG9uc2Uuc2V0SGVhZGVyKFwiRGF0ZVwiLCBkYXRlLnRvVVRDU3RyaW5nKCkpXG4gICAgcmVzcG9uc2Uuc2V0SGVhZGVyKFwiU2VydmVyXCIsIFwiVmVsb2Npb3VzXCIpXG5cbiAgICBsZXQgaGVhZGVycyA9IFwiXCJcblxuICAgIGhlYWRlcnMgKz0gYEhUVFAvJHtyZXF1ZXN0Lmh0dHBWZXJzaW9uKCl9ICR7cmVzcG9uc2UuZ2V0U3RhdHVzQ29kZSgpfSAke3Jlc3BvbnNlLmdldFN0YXR1c01lc3NhZ2UoKX1cXHJcXG5gXG5cbiAgICBmb3IgKGNvbnN0IGhlYWRlcktleSBpbiByZXNwb25zZS5oZWFkZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IGhlYWRlclZhbHVlIG9mIHJlc3BvbnNlLmhlYWRlcnNbaGVhZGVyS2V5XSkge1xuICAgICAgICBoZWFkZXJzICs9IGAke2hlYWRlcktleX06ICR7aGVhZGVyVmFsdWV9XFxyXFxuYFxuICAgICAgfVxuICAgIH1cblxuICAgIGhlYWRlcnMgKz0gXCJcXHJcXG5cIlxuXG4gICAgdGhpcy5ldmVudHMuZW1pdChcIm91dHB1dFwiLCBoZWFkZXJzKVxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcInNlbmRSZXNwb25zZSBoZWFkZXJzIGVtaXR0ZWRcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCBoZWFkZXJzTGVuZ3RoOiBoZWFkZXJzLmxlbmd0aH1dKVxuXG4gICAgaWYgKGhhc0ZpbGVQYXRoKSB7XG4gICAgICBhd2FpdCB0aGlzLnNlbmRGaWxlT3V0cHV0KGZpbGVQYXRoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV2ZW50cy5lbWl0KFwib3V0cHV0XCIsIGJvZHkpXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJzZW5kUmVzcG9uc2UgYm9keSBlbWl0dGVkXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgYm9keUxlbmd0aDogYm9keUlzU3RyaW5nID8gYm9keS5sZW5ndGggOiBib2R5LmJ5dGVMZW5ndGh9XSlcbiAgICB9XG5cbiAgICBpZiAoXCJnZXRSZXF1ZXN0UGFyc2VyXCIgaW4gcmVxdWVzdCkge1xuICAgICAgY29uc3QgaHR0cFJlcXVlc3QgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSAqLyAocmVxdWVzdClcbiAgICAgIGh0dHBSZXF1ZXN0LmdldFJlcXVlc3RQYXJzZXIoKS5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoIC0gRmlsZSBwYXRoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgc2VuZEZpbGVPdXRwdXQoZmlsZVBhdGgpIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJzZW5kRmlsZU91dHB1dCBzdGFydFwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIGZpbGVQYXRofV0pXG4gICAgbGV0IHRvdGFsQnl0ZXMgPSAwXG4gICAgbGV0IGNodW5rQ291bnQgPSAwXG5cbiAgICB0cnkge1xuICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBjcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKSkge1xuICAgICAgICBjaHVua0NvdW50ICs9IDFcbiAgICAgICAgdG90YWxCeXRlcyArPSBjaHVuay5sZW5ndGhcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wic2VuZEZpbGVPdXRwdXQgY2h1bmtcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCBjaHVua0NvdW50LCBjaHVua0xlbmd0aDogY2h1bmsubGVuZ3RoLCB0b3RhbEJ5dGVzfV0pXG4gICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvdXRwdXRcIiwgY2h1bmspXG4gICAgICB9XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJzZW5kRmlsZU91dHB1dCBkb25lXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgY2h1bmtDb3VudCwgdG90YWxCeXRlc31dKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcigoKSA9PiBbYFZlbG9jaW91cyBjbGllbnQgJHt0aGlzLmNsaWVudENvdW50fSBmYWlsZWQgd2hpbGUgc3RyZWFtaW5nIGZpbGUgb3V0cHV0OiAke2ZpbGVQYXRofWAsIGVycm9yXSlcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9yZXF1ZXN0LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuL3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IHJlcXVlc3QgLSBSZXF1ZXN0IG9iamVjdC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0aGUgY29ubmVjdGlvbiBzaG91bGQgYmUgY2xvc2VkLlxuICAgKi9cbiAgc2hvdWxkQ2xvc2VDb25uZWN0aW9uKHJlcXVlc3QpIHtcbiAgICBjb25zdCBodHRwVmVyc2lvbiA9IHJlcXVlc3QuaHR0cFZlcnNpb24oKVxuICAgIGNvbnN0IGNvbm5lY3Rpb25IZWFkZXIgPSByZXF1ZXN0LmhlYWRlcihcImNvbm5lY3Rpb25cIik/LnRvTG93ZXJDYXNlKCk/LnRyaW0oKVxuICAgIGNvbnN0IGNvbm5lY3Rpb25Ub2tlbnMgPSBjb25uZWN0aW9uSGVhZGVyXG4gICAgICA/IGNvbm5lY3Rpb25IZWFkZXIuc3BsaXQoXCIsXCIpLm1hcCgodG9rZW4pID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pXG4gICAgICA6IFtdXG5cbiAgICBpZiAoaHR0cFZlcnNpb24gPT0gXCJ3ZWJzb2NrZXRcIikgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGNvbm5lY3Rpb25Ub2tlbnMuaW5jbHVkZXMoXCJjbG9zZVwiKSkgcmV0dXJuIHRydWVcblxuICAgIGlmIChodHRwVmVyc2lvbiA9PSBcIjEuMFwiICYmIGNvbm5lY3Rpb25IZWFkZXIgIT0gXCJrZWVwLWFsaXZlXCIpIHJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIl19
385
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaHR0cC1zZXJ2ZXIvY2xpZW50L2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUE7QUFDM0IsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDakMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sU0FBUyxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxZQUFZLE1BQU0sOEJBQThCLENBQUE7QUFDdkQsT0FBTyxXQUFXLE1BQU0sNkJBQTZCLENBQUE7QUFDckQsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUE7QUFDcEMsT0FBTyxPQUFPLE1BQU0sY0FBYyxDQUFBO0FBQ2xDLE9BQU8sYUFBYSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sZ0JBQWdCLE1BQU0sd0JBQXdCLENBQUE7QUFFckQ7OztHQUdHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxJQUFJO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFFdEgsT0FBTyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFBO0FBQ3ZDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLEtBQUs7SUFDOUIsT0FBTztRQUNMLFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSTtRQUN0QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFD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QUFxQixDQUFDLE9BQU87UUFDM0IsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUM1RSxNQUFNLGdCQUFnQixHQUFHLGdCQUFnQjtZQUN2QyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUMxRSxDQUFDLENBQUMsRUFBRSxDQUFBO1FBRU4sSUFBSSxXQUFXLElBQUksV0FBVztZQUFFLE9BQU8sS0FBSyxDQUFBO1FBQzVDLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRW5ELElBQUksV0FBVyxJQUFJLEtBQUssSUFBSSxnQkFBZ0IsSUFBSSxZQUFZO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFekUsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiXG5pbXBvcnQge2NyZWF0ZVJlYWRTdHJlYW19IGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7ZGlnZ30gZnJvbSBcImRpZ2dlcml6ZVwiXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCIuLi8uLi91dGlscy9ldmVudC1lbWl0dGVyLmpzXCJcbmltcG9ydCBlbnN1cmVFcnJvciBmcm9tIFwiLi4vLi4vdXRpbHMvZW5zdXJlLWVycm9yLmpzXCJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uL2xvZ2dlci5qc1wiXG5pbXBvcnQgUmVxdWVzdCBmcm9tIFwiLi9yZXF1ZXN0LmpzXCJcbmltcG9ydCBSZXF1ZXN0UnVubmVyIGZyb20gXCIuL3JlcXVlc3QtcnVubmVyLmpzXCJcbmltcG9ydCBXZWJzb2NrZXRTZXNzaW9uIGZyb20gXCIuL3dlYnNvY2tldC1zZXNzaW9uLmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gZGF0YSAtIEluY29taW5nIHJlcXVlc3QgZGF0YS5cbiAqIEByZXR1cm5zIHt7bGVuZ3RoOiBudW1iZXIsIHByZXZpZXc6IHN0cmluZ319IC0gUmVxdWVzdCBkYXRhIHN1bW1hcnkuXG4gKi9cbmZ1bmN0aW9uIHN1bW1hcml6ZVJlcXVlc3REYXRhKGRhdGEpIHtcbiAgY29uc3QgcHJldmlldyA9IGRhdGEudG9TdHJpbmcoXCJsYXRpbjFcIiwgMCwgTWF0aC5taW4oZGF0YS5sZW5ndGgsIDE2MCkpLnJlcGxhY2VBbGwoXCJcXHJcIiwgXCJcXFxcclwiKS5yZXBsYWNlQWxsKFwiXFxuXCIsIFwiXFxcXG5cIilcblxuICByZXR1cm4ge2xlbmd0aDogZGF0YS5sZW5ndGgsIHByZXZpZXd9XG59XG5cbi8qKlxuICogQHBhcmFtIHtFcnJvciAmIHt2ZWxvY2lvdXNDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj59fSBlcnJvciAtIEVycm9yIGluc3RhbmNlLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAtIFNhZmUgYmFkLXJlcXVlc3QgZGV0YWlscyBmb3IgbG9ncy5cbiAqL1xuZnVuY3Rpb24gYmFkUmVxdWVzdERldGFpbHMoZXJyb3IpIHtcbiAgcmV0dXJuIHtcbiAgICBlcnJvckNsYXNzOiBlcnJvci5uYW1lLFxuICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgdmVsb2Npb3VzQ29udGV4dDogZXJyb3IudmVsb2Npb3VzQ29udGV4dFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlb2xpY2lvdXNIdHRwU2VydmVyQ2xpZW50IHtcbiAgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIHN0YXRlID0gXCJpbml0aWFsXCJcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuY2xpZW50Q291bnQgLSBDbGllbnQgY291bnQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MucmVtb3RlQWRkcmVzc10gLSBSZW1vdGUgYWRkcmVzcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjbGllbnRDb3VudCwgY29uZmlndXJhdGlvbiwgcmVtb3RlQWRkcmVzc30pIHtcbiAgICBpZiAoIWNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbmZpZ3VyYXRpb24gZ2l2ZW5cIilcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMuY2xpZW50Q291bnQgPSBjbGllbnRDb3VudFxuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLnJlbW90ZUFkZHJlc3MgPSByZW1vdGVBZGRyZXNzXG5cbiAgICAvKiogQHR5cGUge1JlcXVlc3RSdW5uZXJbXX0gKi9cbiAgICB0aGlzLnJlcXVlc3RSdW5uZXJzID0gW11cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIE1lc3NhZ2UgdGV4dC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgX3NlbmRCYWRVcGdyYWRlUmVzcG9uc2UobWVzc2FnZSkge1xuICAgIGNvbnN0IGh0dHBWZXJzaW9uID0gdGhpcy5jdXJyZW50UmVxdWVzdD8uaHR0cFZlcnNpb24oKSB8fCBcIjEuMVwiXG4gICAgY29uc3QgYm9keSA9IGAke21lc3NhZ2V9XFxuYFxuICAgIGNvbnN0IGhlYWRlcnMgPSBbXG4gICAgICBgSFRUUC8ke2h0dHBWZXJzaW9ufSA0MDAgQmFkIFJlcXVlc3RgLFxuICAgICAgXCJDb25uZWN0aW9uOiBDbG9zZVwiLFxuICAgICAgXCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcIixcbiAgICAgIGBDb250ZW50LUxlbmd0aDogJHtCdWZmZXIuYnl0ZUxlbmd0aChib2R5LCBcInV0ZjhcIil9YCxcbiAgICAgIFwiXCIsXG4gICAgICBib2R5XG4gICAgXS5qb2luKFwiXFxyXFxuXCIpXG5cbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwib3V0cHV0XCIsIGhlYWRlcnMpXG4gICAgdGhpcy5ldmVudHMuZW1pdChcImNsb3NlXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBSZXNwb25zZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBfc2VuZEJhZFJlcXVlc3RSZXNwb25zZShtZXNzYWdlKSB7XG4gICAgY29uc3QgaHR0cFZlcnNpb24gPSB0aGlzLmN1cnJlbnRSZXF1ZXN0Py5odHRwVmVyc2lvbigpIHx8IFwiMS4xXCJcbiAgICBjb25zdCBib2R5ID0gYCR7bWVzc2FnZX1cXG5gXG4gICAgY29uc3QgaGVhZGVycyA9IFtcbiAgICAgIGBIVFRQLyR7aHR0cFZlcnNpb259IDQwMCBCYWQgUmVxdWVzdGAsXG4gICAgICBcIkNvbm5lY3Rpb246IENsb3NlXCIsXG4gICAgICBcIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFwiLFxuICAgICAgYENvbnRlbnQtTGVuZ3RoOiAke0J1ZmZlci5ieXRlTGVuZ3RoKGJvZHksIFwidXRmOFwiKX1gLFxuICAgICAgXCJcIixcbiAgICAgIGJvZHlcbiAgICBdLmpvaW4oXCJcXHJcXG5cIilcblxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvdXRwdXRcIiwgaGVhZGVycylcbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwiY2xvc2VcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciAtIEVycm9yIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBoYW5kbGVCYWRSZXF1ZXN0KGVycm9yKSB7XG4gICAgdGhpcy5sb2dnZXIud2FybigoKSA9PiBbXCJGYWlsZWQgdG8gcGFyc2UgSFRUUCByZXF1ZXN0XCIsIGJhZFJlcXVlc3REZXRhaWxzKC8qKiBAdHlwZSB7RXJyb3IgJiB7dmVsb2Npb3VzQ29udGV4dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+fX0gKi8gKGVycm9yKSldKVxuXG4gICAgaWYgKHRoaXMuY3VycmVudFJlcXVlc3QgJiYgXCJnZXRSZXF1ZXN0UGFyc2VyXCIgaW4gdGhpcy5jdXJyZW50UmVxdWVzdCkge1xuICAgICAgY29uc3QgaHR0cFJlcXVlc3QgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSAqLyAodGhpcy5jdXJyZW50UmVxdWVzdClcblxuICAgICAgaHR0cFJlcXVlc3QuZ2V0UmVxdWVzdFBhcnNlcigpLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFJlcXVlc3QgPSB1bmRlZmluZWRcbiAgICB0aGlzLnN0YXRlID0gXCJpbml0aWFsXCJcblxuICAgIHRoaXMuX3NlbmRCYWRSZXF1ZXN0UmVzcG9uc2UoXCJCYWQgUmVxdWVzdFwiKVxuICB9XG5cbiAgZXhlY3V0ZUN1cnJlbnRSZXF1ZXN0ID0gKCkgPT4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiZXhlY3V0ZUN1cnJlbnRSZXF1ZXN0XCIpXG5cbiAgICBpZiAoIXRoaXMuY3VycmVudFJlcXVlc3QpIHRocm93IG5ldyBFcnJvcihcIk5vIGN1cnJlbnQgcmVxdWVzdFwiKVxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcImV4ZWN1dGVDdXJyZW50UmVxdWVzdCByZXF1ZXN0XCIsIHtcbiAgICAgIGNsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LFxuICAgICAgaHR0cE1ldGhvZDogdGhpcy5jdXJyZW50UmVxdWVzdC5odHRwTWV0aG9kKCksXG4gICAgICBodHRwVmVyc2lvbjogdGhpcy5jdXJyZW50UmVxdWVzdC5odHRwVmVyc2lvbigpLFxuICAgICAgcGF0aDogdGhpcy5jdXJyZW50UmVxdWVzdC5wYXRoKCksXG4gICAgICBxdWV1ZUxlbmd0aDogdGhpcy5yZXF1ZXN0UnVubmVycy5sZW5ndGhcbiAgICB9XSlcblxuICAgIGlmICh0aGlzLl9pc1dlYnNvY2tldFVwZ3JhZGUodGhpcy5jdXJyZW50UmVxdWVzdCkpIHtcbiAgICAgIHRoaXMuX3VwZ3JhZGVUb1dlYnNvY2tldCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBXZSBhcmUgZG9uZSBwYXJzaW5nIHRoZSBnaXZlbiByZXF1ZXN0IGFuZCBjYW4gdGhlb3JldGljYWxseSBzdGFydCBwYXJzaW5nIGEgbmV3IG9uZSwgYmVmb3JlIHRoZSBjdXJyZW50IHJlcXVlc3QgaXMgZG9uZSAtIHNvIHJlc2V0IHRoZSBzdGF0ZS5cbiAgICB0aGlzLnN0YXRlID0gXCJpbml0aWFsXCJcblxuICAgIGNvbnN0IHJlcXVlc3RSdW5uZXIgPSBuZXcgUmVxdWVzdFJ1bm5lcih7XG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICByZXF1ZXN0OiB0aGlzLmN1cnJlbnRSZXF1ZXN0XG4gICAgfSlcblxuICAgIHRoaXMucmVxdWVzdFJ1bm5lcnMucHVzaChyZXF1ZXN0UnVubmVyKVxuXG4gICAgcmVxdWVzdFJ1bm5lci5ldmVudHMub24oXCJkb25lXCIsIHRoaXMucmVxdWVzdERvbmUpXG4gICAgcmVxdWVzdFJ1bm5lci5ydW4oKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhIC0gRGF0YSBwYXlsb2FkLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBvbldyaXRlKGRhdGEpIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJvbldyaXRlIHN0YXJ0XCIsIHtcbiAgICAgIGNsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LFxuICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICAuLi5zdW1tYXJpemVSZXF1ZXN0RGF0YShkYXRhKVxuICAgIH1dKVxuXG4gICAgaWYgKHRoaXMud2Vic29ja2V0U2Vzc2lvbikge1xuICAgICAgdGhpcy53ZWJzb2NrZXRTZXNzaW9uLm9uRGF0YShkYXRhKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8qKiBAdHlwZSB7QnVmZmVyIHwgdW5kZWZpbmVkfSAqL1xuICAgICAgbGV0IHJlbWFpbmluZyA9IGRhdGFcblxuICAgICAgd2hpbGUgKHJlbWFpbmluZyAmJiByZW1haW5pbmcubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PSBcImluaXRpYWxcIikge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIm9uV3JpdGUgY3JlYXRpbmcgcmVxdWVzdCBwYXJzZXJcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCByZW1haW5pbmdMZW5ndGg6IHJlbWFpbmluZy5sZW5ndGh9XSlcbiAgICAgICAgICB0aGlzLmN1cnJlbnRSZXF1ZXN0ID0gbmV3IFJlcXVlc3Qoe2NsaWVudDogdGhpcywgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9ufSlcbiAgICAgICAgICB0aGlzLmN1cnJlbnRSZXF1ZXN0LnJlcXVlc3RQYXJzZXIuZXZlbnRzLm9uKFwiZG9uZVwiLCB0aGlzLmV4ZWN1dGVDdXJyZW50UmVxdWVzdClcbiAgICAgICAgICB0aGlzLnN0YXRlID0gXCJyZXF1ZXN0U3RhcnRlZFwiXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZSAhPSBcInJlcXVlc3RTdGFydGVkXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc3RhdGUgZm9yIGNsaWVudDogJHt0aGlzLnN0YXRlfWApXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudFJlcXVlc3QpIHRocm93IG5ldyBFcnJvcihcIk5vIGN1cnJlbnQgcmVxdWVzdFwiKVxuXG4gICAgICAgIHJlbWFpbmluZyA9IHRoaXMuY3VycmVudFJlcXVlc3QuZmVlZChyZW1haW5pbmcpXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIm9uV3JpdGUgZmVkIHBhcnNlclwiLCB7XG4gICAgICAgICAgY2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsXG4gICAgICAgICAgaGFzUmVtYWluaW5nOiBCb29sZWFuKHJlbWFpbmluZz8ubGVuZ3RoKSxcbiAgICAgICAgICByZW1haW5pbmdMZW5ndGg6IHJlbWFpbmluZz8ubGVuZ3RoIHx8IDAsXG4gICAgICAgICAgcGFyc2VyQ29tcGxldGVkOiB0aGlzLmN1cnJlbnRSZXF1ZXN0Py5nZXRSZXF1ZXN0UGFyc2VyKCkuaGFzQ29tcGxldGVkXG4gICAgICAgIH1dKVxuXG4gICAgICAgIGlmIChyZW1haW5pbmcgJiYgcmVtYWluaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0UGFyc2VyID0gdGhpcy5jdXJyZW50UmVxdWVzdC5nZXRSZXF1ZXN0UGFyc2VyKClcblxuICAgICAgICAgIGlmICghcmVxdWVzdFBhcnNlci5oYXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIm9uV3JpdGUgd2FpdGluZyBmb3IgbW9yZSBkYXRhXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgcmVtYWluaW5nTGVuZ3RoOiByZW1haW5pbmcubGVuZ3RofV0pXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc3RhdGUgPSBcImluaXRpYWxcIlxuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIm9uV3JpdGUgcGFyc2VyIGNvbXBsZXRlZCB3aXRoIHJlbWFpbmluZyBieXRlc1wiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIHJlbWFpbmluZ0xlbmd0aDogcmVtYWluaW5nLmxlbmd0aH1dKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJvbldyaXRlIGVuZFwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIHN0YXRlOiB0aGlzLnN0YXRlLCBxdWV1ZUxlbmd0aDogdGhpcy5yZXF1ZXN0UnVubmVycy5sZW5ndGh9XSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYW5kbGVCYWRSZXF1ZXN0KGVuc3VyZUVycm9yKGVycm9yKSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3JlcXVlc3QuanNcIikuZGVmYXVsdH0gcmVxdWVzdCAtIFJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHdlYnNvY2tldCB1cGdyYWRlLlxuICAgKi9cbiAgX2lzV2Vic29ja2V0VXBncmFkZShyZXF1ZXN0KSB7XG4gICAgY29uc3QgdXBncmFkZUhlYWRlciA9IHJlcXVlc3QuaGVhZGVyKFwidXBncmFkZVwiKT8udG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IGNvbm5lY3Rpb25IZWFkZXIgPSByZXF1ZXN0LmhlYWRlcihcImNvbm5lY3Rpb25cIik/LnRvTG93ZXJDYXNlKClcblxuICAgIHJldHVybiBCb29sZWFuKHVwZ3JhZGVIZWFkZXIgPT0gXCJ3ZWJzb2NrZXRcIiAmJiBjb25uZWN0aW9uSGVhZGVyPy5pbmNsdWRlcyhcInVwZ3JhZGVcIikpXG4gIH1cblxuICAvKiogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLiAgKi9cbiAgX3VwZ3JhZGVUb1dlYnNvY2tldCgpIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFJlcXVlc3QpIHRocm93IG5ldyBFcnJvcihcIk5vIGN1cnJlbnQgcmVxdWVzdFwiKVxuXG4gICAgY29uc3Qgc2VjV2Vic29ja2V0S2V5ID0gdGhpcy5jdXJyZW50UmVxdWVzdC5oZWFkZXIoXCJzZWMtd2Vic29ja2V0LWtleVwiKVxuXG4gICAgaWYgKCFzZWNXZWJzb2NrZXRLZXkpIHtcbiAgICAgIHRoaXMuX3NlbmRCYWRVcGdyYWRlUmVzcG9uc2UoXCJNaXNzaW5nIFNlYy1XZWJTb2NrZXQtS2V5IGhlYWRlclwiKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgd2Vic29ja2V0QWNjZXB0S2V5ID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGExXCIpXG4gICAgICAudXBkYXRlKGAke3NlY1dlYnNvY2tldEtleX0yNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFgLCBcImJpbmFyeVwiKVxuICAgICAgLmRpZ2VzdChcImJhc2U2NFwiKVxuICAgIGNvbnN0IGh0dHBWZXJzaW9uID0gdGhpcy5jdXJyZW50UmVxdWVzdC5odHRwVmVyc2lvbigpIHx8IFwiMS4xXCJcbiAgICBjb25zdCByZXNwb25zZUxpbmVzID0gW1xuICAgICAgYEhUVFAvJHtodHRwVmVyc2lvbn0gMTAxIFN3aXRjaGluZyBQcm90b2NvbHNgLFxuICAgICAgXCJVcGdyYWRlOiB3ZWJzb2NrZXRcIixcbiAgICAgIFwiQ29ubmVjdGlvbjogVXBncmFkZVwiLFxuICAgICAgYFNlYy1XZWJTb2NrZXQtQWNjZXB0OiAke3dlYnNvY2tldEFjY2VwdEtleX1gLFxuICAgICAgXCJcIixcbiAgICAgIFwiXCJcbiAgICBdXG4gICAgY29uc3QgcmVzcG9uc2UgPSByZXNwb25zZUxpbmVzLmpvaW4oXCJcXHJcXG5cIilcblxuICAgIGNvbnN0IG1lc3NhZ2VIYW5kbGVyUmVzb2x2ZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0V2Vic29ja2V0TWVzc2FnZUhhbmRsZXJSZXNvbHZlcj8uKClcbiAgICBsZXQgbWVzc2FnZUhhbmRsZXJcbiAgICBsZXQgbWVzc2FnZUhhbmRsZXJQcm9taXNlXG5cbiAgICBpZiAobWVzc2FnZUhhbmRsZXJSZXNvbHZlcikge1xuICAgICAgY29uc3QgcmVzb2x2ZWRIYW5kbGVyID0gbWVzc2FnZUhhbmRsZXJSZXNvbHZlcih7XG4gICAgICAgIGNsaWVudDogdGhpcyxcbiAgICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgICByZXF1ZXN0OiB0aGlzLmN1cnJlbnRSZXF1ZXN0XG4gICAgICB9KVxuXG4gICAgICBjb25zdCByZXNvbHZlZFRoZW5hYmxlID0gLyoqIEB0eXBlIHt7dGhlbj86ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd259fSAqLyAocmVzb2x2ZWRIYW5kbGVyKVxuXG4gICAgICBpZiAocmVzb2x2ZWRUaGVuYWJsZT8udGhlbikge1xuICAgICAgICBtZXNzYWdlSGFuZGxlclByb21pc2UgPSAvKiogQHR5cGUge1Byb21pc2U8aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5XZWJzb2NrZXRNZXNzYWdlSGFuZGxlciB8IHZvaWQ+fSAqLyAocmVzb2x2ZWRIYW5kbGVyKVxuICAgICAgfSBlbHNlIGlmIChyZXNvbHZlZEhhbmRsZXIpIHtcbiAgICAgICAgbWVzc2FnZUhhbmRsZXIgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuV2Vic29ja2V0TWVzc2FnZUhhbmRsZXJ9ICovIChyZXNvbHZlZEhhbmRsZXIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy53ZWJzb2NrZXRTZXNzaW9uID0gbmV3IFdlYnNvY2tldFNlc3Npb24oe1xuICAgICAgY2xpZW50OiB0aGlzLFxuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgdXBncmFkZVJlcXVlc3Q6IHRoaXMuY3VycmVudFJlcXVlc3QsXG4gICAgICBtZXNzYWdlSGFuZGxlcjogbWVzc2FnZUhhbmRsZXIsXG4gICAgICBtZXNzYWdlSGFuZGxlclByb21pc2U6IG1lc3NhZ2VIYW5kbGVyUHJvbWlzZVxuICAgIH0pXG4gICAgdGhpcy53ZWJzb2NrZXRTZXNzaW9uLmV2ZW50cy5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgIHRoaXMud2Vic29ja2V0U2Vzc2lvbj8uZGVzdHJveSgpXG4gICAgICB0aGlzLndlYnNvY2tldFNlc3Npb24gPSB1bmRlZmluZWRcbiAgICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJjbG9zZVwiKVxuICAgIH0pXG4gICAgdGhpcy5zdGF0ZSA9IFwid2Vic29ja2V0XCJcbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwib3V0cHV0XCIsIHJlc3BvbnNlKVxuICAgIHZvaWQgdGhpcy53ZWJzb2NrZXRTZXNzaW9uLmluaXRpYWxpemVDaGFubmVsKClcbiAgfVxuXG4gIHJlcXVlc3REb25lID0gKCkgPT4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcInJlcXVlc3REb25lXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgcXVldWVMZW5ndGg6IHRoaXMucmVxdWVzdFJ1bm5lcnMubGVuZ3RofV0pXG4gICAgdm9pZCB0aGlzLnNlbmREb25lUmVxdWVzdHMoKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJGYWlsZWQgd2hpbGUgc2VuZGluZyBkb25lIHJlcXVlc3RzXCIsIGVycm9yKVxuICAgICAgdGhpcy5ldmVudHMuZW1pdChcImNsb3NlXCIpXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIHNlbmREb25lUmVxdWVzdHMoKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RSdW5uZXIgPSB0aGlzLnJlcXVlc3RSdW5uZXJzWzBdXG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdFJ1bm5lcj8uZ2V0UmVxdWVzdCgpXG5cbiAgICAgIGlmIChyZXF1ZXN0UnVubmVyPy5nZXRTdGF0ZSgpID09IFwiZG9uZVwiKSB7XG4gICAgICAgIGNvbnN0IGh0dHBWZXJzaW9uID0gcmVxdWVzdC5odHRwVmVyc2lvbigpXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25IZWFkZXIgPSByZXF1ZXN0LmhlYWRlcihcImNvbm5lY3Rpb25cIik/LnRvTG93ZXJDYXNlKCk/LnRyaW0oKVxuICAgICAgICBjb25zdCBzaG91bGRDbG9zZUNvbm5lY3Rpb24gPSB0aGlzLnNob3VsZENsb3NlQ29ubmVjdGlvbihyZXF1ZXN0KVxuXG4gICAgICAgIHRoaXMucmVxdWVzdFJ1bm5lcnMuc2hpZnQoKVxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJzZW5kRG9uZVJlcXVlc3RzIHNoaWZ0ZWQgcXVldWVcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCBxdWV1ZUxlbmd0aDogdGhpcy5yZXF1ZXN0UnVubmVycy5sZW5ndGh9XSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNlbmRSZXNwb25zZShyZXF1ZXN0UnVubmVyKVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCgpID0+IFtgVmVsb2Npb3VzIGNsaWVudCAke3RoaXMuY2xpZW50Q291bnR9IGZhaWxlZCB3aGlsZSBzZW5kaW5nIHJlc3BvbnNlYCwgZXJyb3JdKVxuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFJlcXVlc3QgPT09IHJlcXVlc3QgJiYgdGhpcy5zdGF0ZSA9PT0gXCJpbml0aWFsXCIpIHRoaXMuY3VycmVudFJlcXVlc3QgPSB1bmRlZmluZWRcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wic2VuZERvbmVSZXF1ZXN0c1wiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIGNvbm5lY3Rpb25IZWFkZXIsIGh0dHBWZXJzaW9ufV0pXG5cbiAgICAgICAgaWYgKHNob3VsZENsb3NlQ29ubmVjdGlvbikge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtgQ2xvc2luZyB0aGUgY29ubmVjdGlvbiBiZWNhdXNlICR7aHR0cFZlcnNpb259IGFuZCBjb25uZWN0aW9uIGhlYWRlciAke2Nvbm5lY3Rpb25IZWFkZXJ9YCwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50fV0pXG4gICAgICAgICAgdGhpcy5ldmVudHMuZW1pdChcImNsb3NlXCIpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVxdWVzdFJ1bm5lcn0gcmVxdWVzdFJ1bm5lciAtIFJlcXVlc3QgcnVubmVyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgc2VuZFJlc3BvbnNlKHJlcXVlc3RSdW5uZXIpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGRpZ2cocmVxdWVzdFJ1bm5lciwgXCJyZXNwb25zZVwiKVxuICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0UnVubmVyLmdldFJlcXVlc3QoKVxuICAgIGNvbnN0IGZpbGVQYXRoID0gcmVzcG9uc2UuZ2V0RmlsZVBhdGgoKVxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpXG4gICAgY29uc3QgY29ubmVjdGlvbkhlYWRlciA9IHJlcXVlc3QuaGVhZGVyKFwiY29ubmVjdGlvblwiKT8udG9Mb3dlckNhc2UoKT8udHJpbSgpXG4gICAgY29uc3QgaHR0cFZlcnNpb24gPSByZXF1ZXN0Lmh0dHBWZXJzaW9uKClcbiAgICBjb25zdCBzaG91bGRDbG9zZUNvbm5lY3Rpb24gPSB0aGlzLnNob3VsZENsb3NlQ29ubmVjdGlvbihyZXF1ZXN0KVxuICAgIGNvbnN0IGhhc0ZpbGVQYXRoID0gdHlwZW9mIGZpbGVQYXRoID09PSBcInN0cmluZ1wiICYmIGZpbGVQYXRoLmxlbmd0aCA+IDBcbiAgICBjb25zdCBib2R5ID0gaGFzRmlsZVBhdGggPyBudWxsIDogcmVzcG9uc2UuZ2V0Qm9keSgpXG4gICAgY29uc3QgYm9keUlzU3RyaW5nID0gdHlwZW9mIGJvZHkgPT09IFwic3RyaW5nXCJcbiAgICBjb25zdCBib2R5SXNCaW5hcnkgPSBib2R5IGluc3RhbmNlb2YgVWludDhBcnJheVxuXG4gICAgaWYgKCFoYXNGaWxlUGF0aCAmJiAhYm9keUlzU3RyaW5nICYmICFib2R5SXNCaW5hcnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgcmVzcG9uc2UgYm9keSB0byBiZSBhIHN0cmluZyBvciBVaW50OEFycmF5LCBnb3QgJHt0eXBlb2YgYm9keX1gKVxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwic2VuZFJlc3BvbnNlXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgY29ubmVjdGlvbkhlYWRlciwgaHR0cFZlcnNpb259KVxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcInNlbmRSZXNwb25zZSBwYXlsb2FkXCIsIHtcbiAgICAgIGNsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LFxuICAgICAgaGFzRmlsZVBhdGgsXG4gICAgICBmaWxlUGF0aCxcbiAgICAgIGJvZHlJc0JpbmFyeSxcbiAgICAgIGJvZHlJc1N0cmluZ1xuICAgIH1dKVxuXG4gICAgaWYgKHNob3VsZENsb3NlQ29ubmVjdGlvbikge1xuICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKFwiQ29ubmVjdGlvblwiLCBcIkNsb3NlXCIpXG4gICAgfSBlbHNlIGlmIChodHRwVmVyc2lvbiA9PSBcIjEuMFwiICYmIGNvbm5lY3Rpb25IZWFkZXIgPT0gXCJrZWVwLWFsaXZlXCIpIHtcbiAgICAgIHJlc3BvbnNlLnNldEhlYWRlcihcIkNvbm5lY3Rpb25cIiwgXCJLZWVwLUFsaXZlXCIpXG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnRMZW5ndGhcblxuICAgIGlmIChoYXNGaWxlUGF0aCkge1xuICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKVxuICAgICAgY29udGVudExlbmd0aCA9IHN0YXRzLnNpemVcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudExlbmd0aCA9IGJvZHlJc1N0cmluZyA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShib2R5KS5sZW5ndGggOiBib2R5LmJ5dGVMZW5ndGhcbiAgICB9XG5cbiAgICByZXNwb25zZS5zZXRIZWFkZXIoXCJDb250ZW50LUxlbmd0aFwiLCBjb250ZW50TGVuZ3RoKVxuICAgIHJlc3BvbnNlLnNldEhlYWRlcihcIkRhdGVcIiwgZGF0ZS50b1VUQ1N0cmluZygpKVxuICAgIHJlc3BvbnNlLnNldEhlYWRlcihcIlNlcnZlclwiLCBcIlZlbG9jaW91c1wiKVxuXG4gICAgbGV0IGhlYWRlcnMgPSBcIlwiXG5cbiAgICBoZWFkZXJzICs9IGBIVFRQLyR7cmVxdWVzdC5odHRwVmVyc2lvbigpfSAke3Jlc3BvbnNlLmdldFN0YXR1c0NvZGUoKX0gJHtyZXNwb25zZS5nZXRTdGF0dXNNZXNzYWdlKCl9XFxyXFxuYFxuXG4gICAgZm9yIChjb25zdCBoZWFkZXJLZXkgaW4gcmVzcG9uc2UuaGVhZGVycykge1xuICAgICAgZm9yIChjb25zdCBoZWFkZXJWYWx1ZSBvZiByZXNwb25zZS5oZWFkZXJzW2hlYWRlcktleV0pIHtcbiAgICAgICAgaGVhZGVycyArPSBgJHtoZWFkZXJLZXl9OiAke2hlYWRlclZhbHVlfVxcclxcbmBcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoZWFkZXJzICs9IFwiXFxyXFxuXCJcblxuICAgIHRoaXMuZXZlbnRzLmVtaXQoXCJvdXRwdXRcIiwgaGVhZGVycylcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJzZW5kUmVzcG9uc2UgaGVhZGVycyBlbWl0dGVkXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgaGVhZGVyc0xlbmd0aDogaGVhZGVycy5sZW5ndGh9XSlcblxuICAgIGlmIChoYXNGaWxlUGF0aCkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kRmlsZU91dHB1dChmaWxlUGF0aClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ldmVudHMuZW1pdChcIm91dHB1dFwiLCBib2R5KVxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wic2VuZFJlc3BvbnNlIGJvZHkgZW1pdHRlZFwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIGJvZHlMZW5ndGg6IGJvZHlJc1N0cmluZyA/IGJvZHkubGVuZ3RoIDogYm9keS5ieXRlTGVuZ3RofV0pXG4gICAgfVxuXG4gICAgaWYgKFwiZ2V0UmVxdWVzdFBhcnNlclwiIGluIHJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3JlcXVlc3QuanNcIikuZGVmYXVsdH0gKi8gKHJlcXVlc3QpXG4gICAgICBodHRwUmVxdWVzdC5nZXRSZXF1ZXN0UGFyc2VyKCkuZGVzdHJveSgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCAtIEZpbGUgcGF0aC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHNlbmRGaWxlT3V0cHV0KGZpbGVQYXRoKSB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wic2VuZEZpbGVPdXRwdXQgc3RhcnRcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LCBmaWxlUGF0aH1dKVxuICAgIGxldCB0b3RhbEJ5dGVzID0gMFxuICAgIGxldCBjaHVua0NvdW50ID0gMFxuXG4gICAgdHJ5IHtcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCkpIHtcbiAgICAgICAgY2h1bmtDb3VudCArPSAxXG4gICAgICAgIHRvdGFsQnl0ZXMgKz0gY2h1bmsubGVuZ3RoXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcInNlbmRGaWxlT3V0cHV0IGNodW5rXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgY2h1bmtDb3VudCwgY2h1bmtMZW5ndGg6IGNodW5rLmxlbmd0aCwgdG90YWxCeXRlc31dKVxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KFwib3V0cHV0XCIsIGNodW5rKVxuICAgICAgfVxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wic2VuZEZpbGVPdXRwdXQgZG9uZVwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIGNodW5rQ291bnQsIHRvdGFsQnl0ZXN9XSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoKCkgPT4gW2BWZWxvY2lvdXMgY2xpZW50ICR7dGhpcy5jbGllbnRDb3VudH0gZmFpbGVkIHdoaWxlIHN0cmVhbWluZyBmaWxlIG91dHB1dDogJHtmaWxlUGF0aH1gLCBlcnJvcl0pXG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSByZXF1ZXN0IC0gUmVxdWVzdCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIGNvbm5lY3Rpb24gc2hvdWxkIGJlIGNsb3NlZC5cbiAgICovXG4gIHNob3VsZENsb3NlQ29ubmVjdGlvbihyZXF1ZXN0KSB7XG4gICAgY29uc3QgaHR0cFZlcnNpb24gPSByZXF1ZXN0Lmh0dHBWZXJzaW9uKClcbiAgICBjb25zdCBjb25uZWN0aW9uSGVhZGVyID0gcmVxdWVzdC5oZWFkZXIoXCJjb25uZWN0aW9uXCIpPy50b0xvd2VyQ2FzZSgpPy50cmltKClcbiAgICBjb25zdCBjb25uZWN0aW9uVG9rZW5zID0gY29ubmVjdGlvbkhlYWRlclxuICAgICAgPyBjb25uZWN0aW9uSGVhZGVyLnNwbGl0KFwiLFwiKS5tYXAoKHRva2VuKSA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKVxuICAgICAgOiBbXVxuXG4gICAgaWYgKGh0dHBWZXJzaW9uID09IFwid2Vic29ja2V0XCIpIHJldHVybiBmYWxzZVxuICAgIGlmIChjb25uZWN0aW9uVG9rZW5zLmluY2x1ZGVzKFwiY2xvc2VcIikpIHJldHVybiB0cnVlXG5cbiAgICBpZiAoaHR0cFZlcnNpb24gPT0gXCIxLjBcIiAmJiBjb25uZWN0aW9uSGVhZGVyICE9IFwia2VlcC1hbGl2ZVwiKSByZXR1cm4gdHJ1ZVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiJdfQ==
@@ -17,8 +17,9 @@ export default class ParamsToObject {
17
17
  * @param {any} value - Value to use.
18
18
  * @param {string} rest - Rest.
19
19
  * @param {Record<string, any> | any[]} result - Result.
20
+ * @param {string} [fullKey] - Original full key.
20
21
  * @returns {void} - No return value.
21
22
  */
22
- treatSecond(value: any, rest: string, result: Record<string, any> | any[]): void;
23
+ treatSecond(value: any, rest: string, result: Record<string, any> | any[], fullKey?: string): void;
23
24
  }
24
25
  //# sourceMappingURL=params-to-object.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"params-to-object.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/params-to-object.js"],"names":[],"mappings":"AAEA;IACE;;OAEG;IACH,oBAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAI7B;IADC,4BAAoB;IAGtB,oDAAoD;IACpD,YADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAYhC;IAED;;;;;OAKG;IACH,kBALW,MAAM,SACN,GAAG,UACH,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,GACzB,IAAI,CA0BhB;IAED;;;;;OAKG;IACH,mBALW,GAAG,QACH,MAAM,UACN,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,GACzB,IAAI,CAkChB;CACF"}
1
+ {"version":3,"file":"params-to-object.d.ts","sourceRoot":"","sources":["../../../../src/http-server/client/params-to-object.js"],"names":[],"mappings":"AAyBA;IACE;;OAEG;IACH,oBAFW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAI7B;IADC,4BAAoB;IAGtB,oDAAoD;IACpD,YADc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAYhC;IAED;;;;;OAKG;IACH,kBALW,MAAM,SACN,GAAG,UACH,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,GACzB,IAAI,CA0BhB;IAED;;;;;;OAMG;IACH,mBANW,GAAG,QACH,MAAM,UACN,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,YAC3B,MAAM,GACJ,IAAI,CAkChB;CACF"}
@@ -1,4 +1,24 @@
1
1
  // @ts-check
2
+ /**
3
+ * @param {object} args - Args.
4
+ * @param {string} args.key - Parameter key.
5
+ * @param {string} args.rest - Remaining unmatched segment.
6
+ * @returns {Error} - Error with parser context attached.
7
+ */
8
+ function malformedNestedParamsKeyError(args) {
9
+ const { key, rest } = args;
10
+ const error = new Error(`Could not parse nested params key "${key}" at rest "${rest}"`);
11
+ /** @type {Error & {velociousContext?: Record<string, unknown>}} */
12
+ const typedError = error;
13
+ typedError.velociousContext = {
14
+ nestedParamsKey: {
15
+ key,
16
+ rest,
17
+ stage: "params-to-object"
18
+ }
19
+ };
20
+ return error;
21
+ }
2
22
  export default class ParamsToObject {
3
23
  /**
4
24
  * @param {Record<string, any>} object - Object.
@@ -40,7 +60,7 @@ export default class ParamsToObject {
40
60
  newResult = {};
41
61
  result[inputName] = newResult;
42
62
  }
43
- this.treatSecond(value, rest, newResult);
63
+ this.treatSecond(value, rest, newResult, key);
44
64
  }
45
65
  else {
46
66
  result[key] = value;
@@ -50,12 +70,13 @@ export default class ParamsToObject {
50
70
  * @param {any} value - Value to use.
51
71
  * @param {string} rest - Rest.
52
72
  * @param {Record<string, any> | any[]} result - Result.
73
+ * @param {string} [fullKey] - Original full key.
53
74
  * @returns {void} - No return value.
54
75
  */
55
- treatSecond(value, rest, result) {
76
+ treatSecond(value, rest, result, fullKey = rest) {
56
77
  const secondMatch = rest.match(/^\[(.*?)\]([\s\S]*)$/);
57
78
  if (!secondMatch)
58
- throw new Error(`Could not parse rest part: ${rest}`);
79
+ throw malformedNestedParamsKeyError({ key: fullKey, rest });
59
80
  const key = secondMatch[1];
60
81
  const newRest = secondMatch[2];
61
82
  /** @type {Array<any> | Record<string, any>} */
@@ -81,8 +102,8 @@ export default class ParamsToObject {
81
102
  newResult = {};
82
103
  result[key] = newResult;
83
104
  }
84
- this.treatSecond(value, newRest, newResult);
105
+ this.treatSecond(value, newRest, newResult, fullKey);
85
106
  }
86
107
  }
87
108
  }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLXRvLW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci9jbGllbnQvcGFyYW1zLXRvLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosTUFBTSxDQUFDLE9BQU8sT0FBTyxjQUFjO0lBQ2pDOztPQUVHO0lBQ0gsWUFBWSxNQUFNO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0lBQ3RCLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsUUFBUTtRQUNOLHNDQUFzQztRQUN0QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUE7UUFFakIsS0FBSSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUU5QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDdkMsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTTtRQUM3QixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUE7UUFFcEQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUMvQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFFMUIsK0NBQStDO1lBQy9DLElBQUksU0FBUyxDQUFBO1lBRWIsSUFBSSxTQUFTLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3hCLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDL0IsQ0FBQztpQkFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDeEIsU0FBUyxHQUFHLEVBQUUsQ0FBQTtnQkFDZCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFBO1lBQy9CLENBQUM7aUJBQU0sQ0FBQztnQkFDTixTQUFTLEdBQUcsRUFBRSxDQUFBO2dCQUNkLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLENBQUE7WUFDL0IsQ0FBQztZQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUMxQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU07UUFDN0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBRXRELElBQUksQ0FBQyxXQUFXO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUV2RSxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDMUIsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTlCLCtDQUErQztRQUMvQyxJQUFJLFNBQVMsQ0FBQTtRQUViLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLElBQUksRUFBRSxDQUFDLENBQUE7WUFDM0QsQ0FBQztZQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEIsQ0FBQzthQUFNLElBQUksT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDckIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLE9BQU8sTUFBTSxJQUFJLFFBQVEsSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQy9DLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDekIsQ0FBQztpQkFBTSxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDM0IsU0FBUyxHQUFHLEVBQUUsQ0FBQTtnQkFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFBO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixTQUFTLEdBQUcsRUFBRSxDQUFBO2dCQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUE7WUFDekIsQ0FBQztZQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUM3QyxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcmFtc1RvT2JqZWN0IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqZWN0IC0gT2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Iob2JqZWN0KSB7XG4gICAgdGhpcy5vYmplY3QgPSBvYmplY3RcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgYW55Pn0gLSBUaGUgb2JqZWN0LiAgKi9cbiAgdG9PYmplY3QoKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi9cbiAgICBjb25zdCByZXN1bHQgPSB7fVxuXG4gICAgZm9yKGNvbnN0IGtleSBpbiB0aGlzLm9iamVjdCkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLm9iamVjdFtrZXldXG5cbiAgICAgIHRoaXMudHJlYXRJbml0aWFsKGtleSwgdmFsdWUsIHJlc3VsdClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEtleS5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVmFsdWUgdG8gdXNlLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT4gfCBhbnlbXX0gcmVzdWx0IC0gUmVzdWx0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0cmVhdEluaXRpYWwoa2V5LCB2YWx1ZSwgcmVzdWx0KSB7XG4gICAgY29uc3QgZmlyc3RNYXRjaCA9IGtleS5tYXRjaCgvXiguKz8pKFxcWyhbXFxzXFxTXSskKSkvKVxuXG4gICAgaWYgKGZpcnN0TWF0Y2gpIHtcbiAgICAgIGNvbnN0IGlucHV0TmFtZSA9IGZpcnN0TWF0Y2hbMV1cbiAgICAgIGNvbnN0IHJlc3QgPSBmaXJzdE1hdGNoWzJdXG5cbiAgICAgIC8qKiBAdHlwZSB7QXJyYXk8YW55PiB8IFJlY29yZDxzdHJpbmcsIGFueT59ICovXG4gICAgICBsZXQgbmV3UmVzdWx0XG5cbiAgICAgIGlmIChpbnB1dE5hbWUgaW4gcmVzdWx0KSB7XG4gICAgICAgIG5ld1Jlc3VsdCA9IHJlc3VsdFtpbnB1dE5hbWVdXG4gICAgICB9IGVsc2UgaWYgKHJlc3QgPT0gXCJbXVwiKSB7XG4gICAgICAgIG5ld1Jlc3VsdCA9IFtdXG4gICAgICAgIHJlc3VsdFtpbnB1dE5hbWVdID0gbmV3UmVzdWx0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdSZXN1bHQgPSB7fVxuICAgICAgICByZXN1bHRbaW5wdXROYW1lXSA9IG5ld1Jlc3VsdFxuICAgICAgfVxuXG4gICAgICB0aGlzLnRyZWF0U2Vjb25kKHZhbHVlLCByZXN0LCBuZXdSZXN1bHQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVmFsdWUgdG8gdXNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVzdCAtIFJlc3QuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55PiB8IGFueVtdfSByZXN1bHQgLSBSZXN1bHQuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRyZWF0U2Vjb25kKHZhbHVlLCByZXN0LCByZXN1bHQpIHtcbiAgICBjb25zdCBzZWNvbmRNYXRjaCA9IHJlc3QubWF0Y2goL15cXFsoLio/KVxcXShbXFxzXFxTXSopJC8pXG5cbiAgICBpZiAoIXNlY29uZE1hdGNoKSB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSByZXN0IHBhcnQ6ICR7cmVzdH1gKVxuXG4gICAgY29uc3Qga2V5ID0gc2Vjb25kTWF0Y2hbMV1cbiAgICBjb25zdCBuZXdSZXN0ID0gc2Vjb25kTWF0Y2hbMl1cblxuICAgIC8qKiBAdHlwZSB7QXJyYXk8YW55PiB8IFJlY29yZDxzdHJpbmcsIGFueT59ICovXG4gICAgbGV0IG5ld1Jlc3VsdFxuXG4gICAgaWYgKHJlc3QgPT0gXCJbXVwiKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFycmF5IHJlc3VsdCBmb3IgcmVzdCAke3Jlc3R9YClcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpXG4gICAgfSBlbHNlIGlmIChuZXdSZXN0ID09IFwiXCIpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gXCJvYmplY3RcIiAmJiBrZXkgaW4gcmVzdWx0KSB7XG4gICAgICAgIG5ld1Jlc3VsdCA9IHJlc3VsdFtrZXldXG4gICAgICB9IGVsc2UgaWYgKG5ld1Jlc3QgPT0gXCJbXVwiKSB7XG4gICAgICAgIG5ld1Jlc3VsdCA9IFtdXG4gICAgICAgIHJlc3VsdFtrZXldID0gbmV3UmVzdWx0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdSZXN1bHQgPSB7fVxuICAgICAgICByZXN1bHRba2V5XSA9IG5ld1Jlc3VsdFxuICAgICAgfVxuXG4gICAgICB0aGlzLnRyZWF0U2Vjb25kKHZhbHVlLCBuZXdSZXN0LCBuZXdSZXN1bHQpXG4gICAgfVxuICB9XG59XG5cbiJdfQ==
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLXRvLW9iamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci9jbGllbnQvcGFyYW1zLXRvLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVo7Ozs7O0dBS0c7QUFDSCxTQUFTLDZCQUE2QixDQUFDLElBQUk7SUFDekMsTUFBTSxFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUMsR0FBRyxJQUFJLENBQUE7SUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsc0NBQXNDLEdBQUcsY0FBYyxJQUFJLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZGLG1FQUFtRTtJQUNuRSxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUE7SUFFeEIsVUFBVSxDQUFDLGdCQUFnQixHQUFHO1FBQzVCLGVBQWUsRUFBRTtZQUNmLEdBQUc7WUFDSCxJQUFJO1lBQ0osS0FBSyxFQUFFLGtCQUFrQjtTQUMxQjtLQUNGLENBQUE7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxNQUFNLENBQUMsT0FBTyxPQUFPLGNBQWM7SUFDakM7O09BRUc7SUFDSCxZQUFZLE1BQU07UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7SUFDdEIsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxRQUFRO1FBQ04sc0NBQXNDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUVqQixLQUFJLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBRTlCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN2QyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZ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bSB7b2JqZWN0fSBhcmdzIC0gQXJncy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmtleSAtIFBhcmFtZXRlciBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5yZXN0IC0gUmVtYWluaW5nIHVubWF0Y2hlZCBzZWdtZW50LlxuICogQHJldHVybnMge0Vycm9yfSAtIEVycm9yIHdpdGggcGFyc2VyIGNvbnRleHQgYXR0YWNoZWQuXG4gKi9cbmZ1bmN0aW9uIG1hbGZvcm1lZE5lc3RlZFBhcmFtc0tleUVycm9yKGFyZ3MpIHtcbiAgY29uc3Qge2tleSwgcmVzdH0gPSBhcmdzXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgbmVzdGVkIHBhcmFtcyBrZXkgXCIke2tleX1cIiBhdCByZXN0IFwiJHtyZXN0fVwiYClcbiAgLyoqIEB0eXBlIHtFcnJvciAmIHt2ZWxvY2lvdXNDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj59fSAqL1xuICBjb25zdCB0eXBlZEVycm9yID0gZXJyb3JcblxuICB0eXBlZEVycm9yLnZlbG9jaW91c0NvbnRleHQgPSB7XG4gICAgbmVzdGVkUGFyYW1zS2V5OiB7XG4gICAgICBrZXksXG4gICAgICByZXN0LFxuICAgICAgc3RhZ2U6IFwicGFyYW1zLXRvLW9iamVjdFwiXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVycm9yXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcmFtc1RvT2JqZWN0IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqZWN0IC0gT2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Iob2JqZWN0KSB7XG4gICAgdGhpcy5vYmplY3QgPSBvYmplY3RcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgYW55Pn0gLSBUaGUgb2JqZWN0LiAgKi9cbiAgdG9PYmplY3QoKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi9cbiAgICBjb25zdCByZXN1bHQgPSB7fVxuXG4gICAgZm9yKGNvbnN0IGtleSBpbiB0aGlzLm9iamVjdCkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLm9iamVjdFtrZXldXG5cbiAgICAgIHRoaXMudHJlYXRJbml0aWFsKGtleSwgdmFsdWUsIHJlc3VsdClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEtleS5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVmFsdWUgdG8gdXNlLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT4gfCBhbnlbXX0gcmVzdWx0IC0gUmVzdWx0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0cmVhdEluaXRpYWwoa2V5LCB2YWx1ZSwgcmVzdWx0KSB7XG4gICAgY29uc3QgZmlyc3RNYXRjaCA9IGtleS5tYXRjaCgvXiguKz8pKFxcWyhbXFxzXFxTXSskKSkvKVxuXG4gICAgaWYgKGZpcnN0TWF0Y2gpIHtcbiAgICAgIGNvbnN0IGlucHV0TmFtZSA9IGZpcnN0TWF0Y2hbMV1cbiAgICAgIGNvbnN0IHJlc3QgPSBmaXJzdE1hdGNoWzJdXG5cbiAgICAgIC8qKiBAdHlwZSB7QXJyYXk8YW55PiB8IFJlY29yZDxzdHJpbmcsIGFueT59ICovXG4gICAgICBsZXQgbmV3UmVzdWx0XG5cbiAgICAgIGlmIChpbnB1dE5hbWUgaW4gcmVzdWx0KSB7XG4gICAgICAgIG5ld1Jlc3VsdCA9IHJlc3VsdFtpbnB1dE5hbWVdXG4gICAgICB9IGVsc2UgaWYgKHJlc3QgPT0gXCJbXVwiKSB7XG4gICAgICAgIG5ld1Jlc3VsdCA9IFtdXG4gICAgICAgIHJlc3VsdFtpbnB1dE5hbWVdID0gbmV3UmVzdWx0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdSZXN1bHQgPSB7fVxuICAgICAgICByZXN1bHRbaW5wdXROYW1lXSA9IG5ld1Jlc3VsdFxuICAgICAgfVxuXG4gICAgICB0aGlzLnRyZWF0U2Vjb25kKHZhbHVlLCByZXN0LCBuZXdSZXN1bHQsIGtleSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBWYWx1ZSB0byB1c2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZXN0IC0gUmVzdC5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgYW55W119IHJlc3VsdCAtIFJlc3VsdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmdWxsS2V5XSAtIE9yaWdpbmFsIGZ1bGwga2V5LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0cmVhdFNlY29uZCh2YWx1ZSwgcmVzdCwgcmVzdWx0LCBmdWxsS2V5ID0gcmVzdCkge1xuICAgIGNvbnN0IHNlY29uZE1hdGNoID0gcmVzdC5tYXRjaCgvXlxcWyguKj8pXFxdKFtcXHNcXFNdKikkLylcblxuICAgIGlmICghc2Vjb25kTWF0Y2gpIHRocm93IG1hbGZvcm1lZE5lc3RlZFBhcmFtc0tleUVycm9yKHtrZXk6IGZ1bGxLZXksIHJlc3R9KVxuXG4gICAgY29uc3Qga2V5ID0gc2Vjb25kTWF0Y2hbMV1cbiAgICBjb25zdCBuZXdSZXN0ID0gc2Vjb25kTWF0Y2hbMl1cblxuICAgIC8qKiBAdHlwZSB7QXJyYXk8YW55PiB8IFJlY29yZDxzdHJpbmcsIGFueT59ICovXG4gICAgbGV0IG5ld1Jlc3VsdFxuXG4gICAgaWYgKHJlc3QgPT0gXCJbXVwiKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFycmF5IHJlc3VsdCBmb3IgcmVzdCAke3Jlc3R9YClcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpXG4gICAgfSBlbHNlIGlmIChuZXdSZXN0ID09IFwiXCIpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gXCJvYmplY3RcIiAmJiBrZXkgaW4gcmVzdWx0KSB7XG4gICAgICAgIG5ld1Jlc3VsdCA9IHJlc3VsdFtrZXldXG4gICAgICB9IGVsc2UgaWYgKG5ld1Jlc3QgPT0gXCJbXVwiKSB7XG4gICAgICAgIG5ld1Jlc3VsdCA9IFtdXG4gICAgICAgIHJlc3VsdFtrZXldID0gbmV3UmVzdWx0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdSZXN1bHQgPSB7fVxuICAgICAgICByZXN1bHRba2V5XSA9IG5ld1Jlc3VsdFxuICAgICAgfVxuXG4gICAgICB0aGlzLnRyZWF0U2Vjb25kKHZhbHVlLCBuZXdSZXN0LCBuZXdSZXN1bHQsIGZ1bGxLZXkpXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/http-server/client/request-buffer/index.js"],"names":[],"mappings":"AAUA;IAkBE;;;OAGG;IACH,+BAFG;QAA0D,aAAa,EAA/D,OAAO,2BAA2B,EAAE,OAAO;KACrD,EAIA;IAxBD,mBAAc;IAEd,uBAAuB;IACvB,MADW,MAAM,EAAE,CACV;IAET,mEAA2B;IAE3B,qCAAqC;IACrC,eADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACf;IAElB,4BAA0B;IAE1B,mBAAiB;IACjB,WAAW;IACX,qBAAmB;IACnB,cAAgB;IAOd,2DAAkC;IAClC,eAA8C;IAGhD,gBAEC;IAED;;;OAGG;IACH,WAHW,MAAM,GACJ,MAAM,GAAG,SAAS,CAsG9B;IArES,0BAA6B;IAS7B,8BAA8B;IA8DxC;;;OAGG;IACH,gBAHW,MAAM,GACJ,MAAM,CAQlB;IAED;;OAEG;IACH,kBAFa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAalC;IAED;;OAEG;IACH,oBAFa,IAAI,CAWhB;IAJC,2BAA6B;IAM/B,gCAEC;IAED;;OAEG;IACH,mBAFa,IAAI,CAKhB;IAED;;;OAGG;IACH,YAHW,MAAM,GACJ,IAAI,CAoChB;IAED;;;OAGG;IACH,yBAHW,MAAM,GACJ,MAAM,GAAG,SAAS,CAU9B;IAED;;OAEG;IACH,kBAFW,MAAM,QAQhB;IADwC,sBAAgD;IAGzF;;;OAGG;IACH,kBAHW,MAAM,GACJ,IAAI,CAgDhB;IArBO,iBAAwB;IACxB,qBAA4C;IAC5C,yBAAoD;IACpD,wBAAiD;IAQjD,uBAAuB;IACvB,eADW,MAAM,EAAE,CACI;IAW/B;;;OAGG;IACH,sBAHW,MAAM,GACJ,IAAI,CAchB;IALC,mBAA0B;IAC1B,oBAA2B;IAC3B,aAAoB;IAKtB,wBASC;IAPG,cAAmE;IASvE;;;OAGG;IACH,+BAHW,MAAM,GACJ,OAAO,CAInB;IAED;;OAEG;IACH,qBAFa,OAAO,CAMnB;IAED;;OAEG;IACH,yBAFa,IAAI,CAOhB;IAJC,wBAA0B;IAC1B,yBAAiC;IAKnC;;;OAGG;IACH,yBAHW,MAAM,GACJ,IAAI,CAuBhB;IAED;;OAEG;IACH,qBAFa,IAAI,CAQhB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,IAAI,CAKhB;IAED,4BAaC;IAED,mCAMC;IAED,mCASC;CACF;mBAlckB,aAAa;mBAEb,oBAAoB;yBAHd,qBAAqB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/http-server/client/request-buffer/index.js"],"names":[],"mappings":"AAsBA;IAkBE;;;OAGG;IACH,+BAFG;QAA0D,aAAa,EAA/D,OAAO,2BAA2B,EAAE,OAAO;KACrD,EAIA;IAxBD,mBAAc;IAEd,uBAAuB;IACvB,MADW,MAAM,EAAE,CACV;IAET,mEAA2B;IAE3B,qCAAqC;IACrC,eADW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACf;IAElB,4BAA0B;IAE1B,mBAAiB;IACjB,WAAW;IACX,qBAAmB;IACnB,cAAgB;IAOd,2DAAkC;IAClC,eAA8C;IAGhD,gBAEC;IAED;;;OAGG;IACH,WAHW,MAAM,GACJ,MAAM,GAAG,SAAS,CAsG9B;IArES,0BAA6B;IAS7B,8BAA8B;IA8DxC;;;OAGG;IACH,gBAHW,MAAM,GACJ,MAAM,CAQlB;IAED;;OAEG;IACH,kBAFa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAalC;IAED;;OAEG;IACH,oBAFa,IAAI,CAWhB;IAJC,2BAA6B;IAM/B,gCAEC;IAED;;OAEG;IACH,mBAFa,IAAI,CAKhB;IAED;;;OAGG;IACH,YAHW,MAAM,GACJ,IAAI,CAoChB;IAED;;;OAGG;IACH,yBAHW,MAAM,GACJ,MAAM,GAAG,SAAS,CAU9B;IAED;;OAEG;IACH,kBAFW,MAAM,QAQhB;IADwC,sBAAgD;IAGzF;;;OAGG;IACH,kBAHW,MAAM,GACJ,IAAI,CAgDhB;IArBO,iBAAwB;IACxB,qBAA4C;IAC5C,yBAAoD;IACpD,wBAAiD;IAQjD,uBAAuB;IACvB,eADW,MAAM,EAAE,CACI;IAW/B;;;OAGG;IACH,sBAHW,MAAM,GACJ,IAAI,CAchB;IALC,mBAA0B;IAC1B,oBAA2B;IAC3B,aAAoB;IAKtB,wBASC;IAPG,cAAmE;IASvE;;;OAGG;IACH,+BAHW,MAAM,GACJ,OAAO,CAInB;IAED;;OAEG;IACH,qBAFa,OAAO,CAMnB;IAED;;OAEG;IACH,yBAFa,IAAI,CAOhB;IAJC,wBAA0B;IAC1B,yBAAiC;IAKnC;;;OAGG;IACH,yBAHW,MAAM,GACJ,IAAI,CAuBhB;IAED;;OAEG;IACH,qBAFa,IAAI,CAQhB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,IAAI,CAKhB;IAED,4BAaC;IAED,mCAMC;IAED,mCA2BC;CACF;mBAhekB,aAAa;mBAEb,oBAAoB;yBAHd,qBAAqB"}