badmfck-api-server 2.5.0 → 2.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -274,14 +274,17 @@ class APIService extends BaseService_1.BaseService {
274
274
  this.options.onError(e);
275
275
  if (this.monitor)
276
276
  this.monitor.registrateFatalError(ep);
277
- this.sendResponse(req.get("Referer") ?? "", res, {
278
- httpStatus: 500,
277
+ let data = {
279
278
  error: {
280
279
  code: 10002,
281
280
  message: "Internal server error",
281
+ httpStatus: 500,
282
282
  details: `${e}`
283
283
  }
284
- }, tme, ep, log, httpRequest);
284
+ };
285
+ if (DefaultErrors_1.ErrorUtils.isError(e))
286
+ data = { error: e };
287
+ this.sendResponse(req.get("Referer") ?? "", res, data, tme, ep, log, httpRequest);
285
288
  return;
286
289
  }
287
290
  this.sendResponse(req.get("Referer") ?? "", res, result, tme, ep, log, httpRequest);
@@ -451,4 +454,4 @@ class APIService extends BaseService_1.BaseService {
451
454
  }
452
455
  }
453
456
  exports.APIService = APIService;
454
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQWlDdkIsU0FBZ0IsaUJBQWlCO0lBQ2hDLE9BQU87UUFDTixJQUFJLEVBQUUsSUFBSTtRQUNWLFlBQVksRUFBRSxPQUFPO1FBQ3JCLGlCQUFpQixFQUFFO1lBQ2xCLHVCQUF1QjtTQUN2QjtRQUNELFNBQVMsRUFBRSxFQUFFO1FBQ2IsU0FBUyxFQUFDLE1BQU07UUFDaEIsWUFBWSxFQUFFLFVBQVUsR0FBNkI7WUFDcEQsSUFBQSxvQkFBTyxFQUFDLGtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7UUFDRCxPQUFPLEVBQUMsVUFBUyxHQUFPO1lBQ3ZCLElBQUEscUJBQVEsRUFBQyxrQkFBa0IsRUFBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsdUJBQXVCLEVBQUMsS0FBSztRQUM3QixTQUFTLEVBQUMsRUFBRSxHQUFDLElBQUksR0FBQyxJQUFJO1FBQ3RCLFdBQVcsRUFBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFlBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBQyxhQUFhLENBQUM7S0FDbkQsQ0FBQTtBQUNGLENBQUM7QUFuQkQsOENBbUJDO0FBRVksUUFBQSxrQkFBa0IsR0FBc0MsSUFBSSxvQkFBRyxDQUFDLFNBQVMsRUFBQyxvQkFB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QUFJLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDakIsS0FBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLEVBQUUsQ0FBQztnQkFDVCxJQUFHLE1BQU0sSUFBRSxDQUFDLEVBQUM7b0JBQ1osTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFDLGFBQWEsR0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUMsTUFBTSxDQUFBLENBQUMsQ0FBQSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDckYsTUFBTTtpQkFDTjthQUNEO1NBQ0Q7UUFDRCxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUM7SUFDdkIsQ0FBQzs7QUF2Y0YsZ0NBeWNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4cHJlc3MsIHsgQXBwbGljYXRpb24sIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcydcbmltcG9ydCB7IEJhc2VTZXJ2aWNlLCBJQmFzZVNlcnZpY2UgfSBmcm9tICcuL0Jhc2VTZXJ2aWNlJ1xuaW1wb3J0IGNvcnMgZnJvbSAnY29ycydcbmltcG9ydCB7IEluY29taW5nTWVzc2FnZSB9IGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBCYXNlRW5kcG9pbnQsIElCYXNlRW5kcG9pbnQgfSBmcm9tICcuL0Jhc2VFbmRwb2ludCdcbmltcG9ydCBEZWZhdWx0RXJyb3JzLCB7IEVycm9yVXRpbHMgfSBmcm9tICcuL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9ycydcbmltcG9ydCB7IEhUVFBSZXF1ZXN0Vk8sIElFcnJvciwgVHJhbnNmZXJQYWNrZXRWTyB9IGZyb20gJy4vc3RydWN0dXJlcy9JbnRlcmZhY2VzJ1xuaW1wb3J0IHtSZXF9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiXG5pbXBvcnQgeyBsb2dDcml0LCBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gJy4vTG9nU2VydmljZSdcbmltcG9ydCB7IE1vbml0b3IgfSBmcm9tICcuL21vbml0b3IvTW9uaXRvcidcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBjcnlwdG8gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgZmlsZVVwbG9hZCBmcm9tICdleHByZXNzLWZpbGV1cGxvYWQnXG5pbXBvcnQgb3MgZnJvbSBcIm9zXCJcbmltcG9ydCB7IExpdmVuZXNzIH0gZnJvbSAnLi9yb3V0ZXMvTGl2ZW5lc3MnXG5pbXBvcnQgeyBSZWFkaW5lc3MgfSBmcm9tICcuL3JvdXRlcy9SZWFkaW5lc3MnXG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXtcdFxuXHRpZDpudW1iZXIsXG5cdGNyZWF0ZWQ6bnVtYmVyLFxuXHR0aW1lOm51bWJlcixcblx0cmVmZXJlcj86c3RyaW5nLFxuXHRyZXF1ZXN0Ontba2V5OnN0cmluZ106YW55fSxcblx0cmVzcG9uc2U6e1trZXk6c3RyaW5nXTphbnl9XG5cdGVycm9yPzpzdHJpbmd8bnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VPcHRpb25ze1xuXHRwb3J0Om51bWJlcixcblx0YmFzZUVuZFBvaW50OnN0cmluZyAvLyBcIi9hcGkvXCJcblx0Y29yc0hvc3RXaGl0ZUxpc3Q6c3RyaW5nW10sXG5cdGVuZHBvaW50czpJQmFzZUVuZHBvaW50W10sXG5cdGpzb25MaW1pdDpzdHJpbmcgLy8gXCIxMG1iXCJcblx0b25OZXR3b3JrTG9nPzooKGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0pPT52b2lkKXxudWxsXG5cdG9uRXJyb3I/OigoLi4ucmVzdDphbnlbXSk9PnZvaWQpfG51bGxcblx0aXNQcm9kdWN0aW9uRW52aXJvbm1lbnQ6Ym9vbGVhbixcblx0aW50ZXJjZXB0b3I/OklCYXNlRW5kcG9pbnQsXG5cdHBvc3Rwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsKT0+UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPlxuXHRwcmVwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsKT0+YW55XG5cdFxuXHRtb25pdG9yPzp7bG9naW46c3RyaW5nLHBhc3N3b3JkOnN0cmluZ31bXVxuXHQvL2RlcGxveW1lbnQ/Ontsb2dpbjpzdHJpbmcscGFzc3dvcmQ6c3RyaW5nfVxuXHRhcHBWZXJzaW9uPzpzdHJpbmdcblxuXHRmaWxlVGVtcERpcjpzdHJpbmc7XG5cdGZpbGVMaW1pdDpudW1iZXIgLy8gYlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKTpBUElTZXJ2aWNlT3B0aW9uc3tcblx0cmV0dXJuIHtcblx0XHRwb3J0OiA4MDkxLFxuXHRcdGJhc2VFbmRQb2ludDogJy9hcGkvJyxcblx0XHRjb3JzSG9zdFdoaXRlTGlzdDogW1xuXHRcdFx0J2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG5cdFx0XSxcblx0XHRlbmRwb2ludHM6IFtdLFxuXHRcdGpzb25MaW1pdDpcIjEwbWJcIixcblx0XHRvbk5ldHdvcmtMb2c6IGZ1bmN0aW9uIChsb2c6IEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSk6IHZvaWQge1xuXHRcdFx0bG9nSW5mbyhcIiR7QVBJU2VydmljZS5qc31cIixsb2cpXG5cdFx0fSxcblx0XHRvbkVycm9yOmZ1bmN0aW9uKGVycjphbnkpe1xuXHRcdFx0bG9nRXJyb3IoXCIke0FQSVNlcnZpY2UuanN9XCIsZXJyKTtcblx0XHR9LFxuXHRcdGlzUHJvZHVjdGlvbkVudmlyb25tZW50OmZhbHNlLFxuXHRcdGZpbGVMaW1pdDo1MCoxMDI0KjEwMjQsXG5cdFx0ZmlsZVRlbXBEaXI6cGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLFwiZmlsZVRlbXBEaXJcIilcblx0fVxufVxuXG5leHBvcnQgY29uc3QgUkVRX0NSRUFURV9ORVRfTE9HOlJlcTx2b2lkLEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9DUkVBVEVfTkVUX0xPR1wiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9MT0c6UmVxPHZvaWQsQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW10+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9MT0dcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlQ6UmVxPHZvaWQsbnVtYmVyPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlRcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfU0VSVkVSOlJlcTx2b2lkLHtleHByZXNzOkFwcGxpY2F0aW9uLGh0dHA6aHR0cC5TZXJ2ZXJ9PiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfU0VSVkVSXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9JTlRFUk5BTF9DQUxMOlJlcTxIVFRQUmVxdWVzdFZPLElFcnJvcnxhbnk+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSU5URVJOQUxfQ0FMTFwiKTtcblxuXG5jb25zdCBhY3RpdmVTZXJ2aWNlczpTdHJpbmdbXT1bXVxuY29uc3QgZW50cnlQb2ludHM6U3RyaW5nW109W11cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEluaXRpYWxpemVyKHNlcnZpY2VzOklCYXNlU2VydmljZVtdKXtcbiAgICBmb3IgKGxldCBpIG9mIHNlcnZpY2VzKSB7IGF3YWl0IGkuaW5pdCgpO2FjdGl2ZVNlcnZpY2VzLnB1c2goaS5nZXROYW1lKCkpIH1cbiAgICBmb3IgKGxldCBpIG9mIHNlcnZpY2VzKSB7IGkuYXBwbGljYXRpb25SZWFkeSgpIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFQSVNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XG5cblx0Ly8gTkVUIExPR1xuXHRwcml2YXRlIHN0YXRpYyBuZXh0TG9nSUQ9MDtcblx0cHJpdmF0ZSB2ZXJzaW9uID0gXCIyLjUuMFwiXG5cdHByaXZhdGUgb3B0aW9uczpBUElTZXJ2aWNlT3B0aW9ucztcblx0cHJpdmF0ZSBtb25pdG9yPzpNb25pdG9yXG5cdHByaXZhdGUgbW9uaXRvckluZGV4RmlsZT86QnVmZmVyXG5cdHByaXZhdGUgc3RhcnRlZDpEYXRlID0gbmV3IERhdGUoKTtcblx0cHJpdmF0ZSByZXF1ZXN0c0NvdW50PTA7XG5cdHByaXZhdGUgc2VydmVyPWh0dHBcblxuXHRuZXRMb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW109W107XG5cblx0Y29uc3RydWN0b3Iob3B0aW9ucz86QVBJU2VydmljZU9wdGlvbnN8bnVsbCkge1xuXHRcdHN1cGVyKCdIVFRQIFNlcnZpY2UnKVxuXHRcdHRoaXMub3B0aW9ucz1vcHRpb25zID8/IGdldERlZmF1bHRPcHRpb25zKCk7XG5cdFx0aWYoIXRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdClcblx0XHRcdHRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdD1bXTtcblx0XHRjb25zdCBzZWxmID0gXCJodHRwOi8vbG9jYWxob3N0OlwiK3RoaXMub3B0aW9ucy5wb3J0O1xuXHRcdGlmKCF0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QuZmluZCh2YWw9PnZhbD09PXNlbGYpKVxuXHRcdFx0dGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LnB1c2goKVxuXG5cdFx0aWYodGhpcy5vcHRpb25zLm1vbml0b3IgJiYgdGhpcy5vcHRpb25zLm1vbml0b3IubGVuZ3RoPjApe1xuXHRcdFx0dGhpcy5tb25pdG9yPW5ldyBNb25pdG9yKCk7XG5cdFx0XHR0aGlzLm9wdGlvbnMuZW5kcG9pbnRzLnB1c2godGhpcy5tb25pdG9yKVxuXHRcdFx0Y29uc29sZS53YXJuKFwiU2VydmljZSBNb25pdG9yIGluaXRpYWxpemVkXCIpXG5cdFx0XHRjb25zb2xlLndhcm4oXCJtb25pdG9yIGxpbmtzOlwiKVxuXHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0Y29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpLmxvZ2luK2kucGFzc3dvcmQpLmRpZ2VzdCgpLnRvU3RyaW5nKFwiaGV4XCIpXG5cdFx0XHRcdGNvbnNvbGUud2FybihpLmxvZ2luK1wiIC0+IC9zbS1cIitoYXNoKVx0XHRcdFx0XHRcdFxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGNyZWF0ZSBsaXZlbmVzcywgcmVhZGluZXNzXG5cdFx0dGhpcy5vcHRpb25zLmVuZHBvaW50cy5wdXNoKG5ldyBMaXZlbmVzcyh0aGlzLnN0YXJ0ZWQpLG5ldyBSZWFkaW5lc3ModGhpcy5zdGFydGVkKSlcblx0XHRSRVFfSFRUUF9SRVFVRVNUU19DT1VOVC5saXN0ZW5lciA9IGFzeW5jICgpID0+IHRoaXMucmVxdWVzdHNDb3VudDtcblx0fVxuXG5cblx0b3ZlcnJpZGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcblxuXHRcdFJFUV9IVFRQX0xPRy5saXN0ZW5lcj1hc3luYyBpZ25vcmU9PnRoaXMubmV0TG9nO1xuXHRcdFJFUV9DUkVBVEVfTkVUX0xPRy5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e1xuXHRcdFx0Y29uc3QgbG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSA9IHtcblx0XHRcdFx0Y3JlYXRlZDogK25ldyBEYXRlKCksXG5cdFx0XHRcdHRpbWU6IDAsXG5cdFx0XHRcdHJlcXVlc3Q6IHt9LFxuXHRcdFx0XHRyZXNwb25zZToge30sXG5cdFx0XHRcdGVycm9yOm51bGwsXG5cdFx0XHRcdGlkOiBBUElTZXJ2aWNlLm5leHRMb2dJRCsrXG5cdFx0XHR9XG5cdFx0XHR0aGlzLm5ldExvZy5wdXNoKGxvZylcblx0XHRcdGlmKHRoaXMubmV0TG9nLmxlbmd0aD4xMDAwKVxuXHRcdFx0XHR0aGlzLm5ldExvZy5zaGlmdCgpXG5cdFx0XHRyZXR1cm4gbG9nO1xuXHRcdH1cblxuXHRcdC8vIGludGVybmFsIGNhbGxcblx0XHRSRVFfSU5URVJOQUxfQ0FMTC5saXN0ZW5lciA9IGFzeW5jIChyZXEpPT57XG5cdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLmVuZHBvaW50cyl7XG5cdFx0XHRcdGlmKCFpIHx8ICFpLmVuZHBvaW50cylcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0Zm9yKGxldCBqIG9mIGkuZW5kcG9pbnRzKXtcblx0XHRcdFx0XHRsZXQgZXAgPSBCYXNlRW5kcG9pbnQuZ2V0RW50cnlQb2ludCgpK2ouZW5kcG9pbnQ7XG5cdFx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XHRpZihlcD09PSByZXEuZW5kcG9pbnQpe1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpLmV4ZWN1dGUocmVxKVxuXHRcdFx0XHRcdFx0aWYocmVzcG9uc2UuZXJyb3IpXG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtlcnJvcjpEZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVCxkYXRhOm51bGwsaHR0cFN0YXR1czo0MDR9XG5cdFx0fVxuXG5cdFx0Ly8gaW5pdGlhbGl6ZSBleHByZXNzXG5cdFx0Y29uc3QgYXBwID0gZXhwcmVzcygpXG5cdFx0Y29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoYXBwKTtcblxuXHRcdFJFUV9IVFRQX1NFUlZFUi5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e3JldHVybiB7ZXhwcmVzczphcHAsaHR0cDpzZXJ2ZXJ9fTtcblxuXHRcdGlmKHRoaXMub3B0aW9ucy5pc1Byb2R1Y3Rpb25FbnZpcm9ubWVudClcblx0XHRcdGFwcC5zZXQoXCJlbnZcIiwncHJvZHVjdGlvbicpO1xuXG5cdFx0YXBwLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogJzEwbWInIH0pKSAvLyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi9qc29uXG5cdFx0YXBwLnVzZShleHByZXNzLnVybGVuY29kZWQoeyBsaW1pdDogJzEwbWInLCBleHRlbmRlZDogdHJ1ZSB9KSkgLy8gZm9yIHBhcnNpbmcgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG5cblx0XHRhcHAudXNlKGZpbGVVcGxvYWQoe1xuXHRcdFx0bGltaXRIYW5kbGVyOiAocmVxLCByZXMsIG5leHQpPT57XG5cdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5GSUxFX1RPT19MQVJHRSxcblx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0aHR0cFN0YXR1czo0MTMsXG5cdFx0XHRcdH0sK25ldyBEYXRlKCkscmVxLnBhdGgpO1xuXHRcdFx0fSxcblx0XHRcdGxpbWl0czogeyBmaWxlU2l6ZTogdGhpcy5vcHRpb25zLmZpbGVMaW1pdCB9LFxuXHRcdFx0dXNlVGVtcEZpbGVzOiB0cnVlLFxuXHRcdFx0dXJpRGVjb2RlRmlsZU5hbWVzOiB0cnVlLFxuXHRcdFx0dGVtcEZpbGVEaXI6IHRoaXMub3B0aW9ucy5maWxlVGVtcERpcixcblx0XHRcdC8vc2FmZUZpbGVOYW1lczogdHJ1ZSxcblx0XHRcdGFib3J0T25MaW1pdDp0cnVlXG5cdFx0fSkpXG5cblx0XHRhcHAudXNlKGFzeW5jIChlcnI6YW55LHJlcTphbnkscmVzcDphbnksbmV4dDphbnkpPT57XG5cdFx0XHRcblx0XHRcdGlmKCFlcnIpe1xuXHRcdFx0XHRuZXh0KCk7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0XHQvL3JlcXVlc3Qgc3RhcnQgdGltZVxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKCk7XG5cdFx0XHRjb25zdCBsb2cgPSBhd2FpdCBSRVFfQ1JFQVRFX05FVF9MT0cucmVxdWVzdCgpO1xuXHRcdFx0bG9nLnJlcXVlc3Q9e1xuXHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0ZGF0YTpcIlwiLFxuXHRcdFx0XHRwYXJhbXM6cmVxLnBhcmFtc1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgcmVzcG9uc2VFcnJvcj1EZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVDtcblx0XHRcdGlmICh0eXBlb2YgZXJyID09PSBcIm9iamVjdFwiICYmIGVyci5zdGF0dXMgPT09IDQwMCAmJiAnYm9keScgaW4gZXJyICYmIGVyci50eXBlID09PSAnZW50aXR5LnBhcnNlLmZhaWxlZCcpIHtcblx0XHRcdFx0cmVzcG9uc2VFcnJvciA9IERlZmF1bHRFcnJvcnMuSlNPTl9NQUxGT1JNRURcblx0XHRcdH1cbiAgICAgIFxuXG5cdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXNwLHtcblx0XHRcdFx0ZXJyb3I6cmVzcG9uc2VFcnJvcixcblx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRodHRwU3RhdHVzOjQwMFxuXHRcdFx0fSx0bWUsXCJcIixsb2cpXG5cblx0XHR9KVxuXG5cdFx0Y29uc3QgY29yc09wdGlvbnMgPSB7XG5cdFx0XHRvcmlnaW46IChvcmlnaW46IGFueSwgY2FsbGJhY2s6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvcmlnaW5Jc1doaXRlbGlzdGVkID0gdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LmluY2x1ZGVzKG9yaWdpbilcblx0XHRcdFx0Y2FsbGJhY2sobnVsbCwgb3JpZ2luSXNXaGl0ZWxpc3RlZClcblx0XHRcdH0sXG5cdFx0XHRjcmVkZW50aWFsczogdHJ1ZVxuXHRcdH1cblx0XHRhcHAudXNlKGNvcnMoY29yc09wdGlvbnMpKVxuXG5cdFx0Ly8gcmVnaXN0cmF0ZSBlbmRwb2ludHNcblx0XHRCYXNlRW5kcG9pbnQuc2V0RW50cnlQb2ludCh0aGlzLm9wdGlvbnMuYmFzZUVuZFBvaW50KVxuXHRcdFxuXHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMuZW5kcG9pbnRzKXtcblx0XHRcdGF3YWl0IGkuaW5pdCgpO1xuXHRcdFx0aWYoIWkuZW5kcG9pbnRzKVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdGZvcihsZXQgaiBvZiBpLmVuZHBvaW50cyl7XG5cdFx0XHRcdGxldCBlcCA9IEJhc2VFbmRwb2ludC5nZXRFbnRyeVBvaW50KCkrai5lbmRwb2ludDtcblx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XG5cblx0XHRcdFx0Ly8gaW5jb21pbmcgcmVxdWVzdFxuXHRcdFx0XHRhcHAuYWxsKGVwLGFzeW5jIChyZXEscmVzKT0+e1xuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHNDb3VudCsrO1xuXHRcdFx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdGxldCBsb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtfG51bGwgPSBudWxsO1xuXHRcdFx0XHRcdGlmKCFpLmlnbm9yZUh0dHBMb2dnaW5nKXtcblx0XHRcdFx0XHRcdGxvZyA9IGF3YWl0IFJFUV9DUkVBVEVfTkVUX0xPRy5yZXF1ZXN0KCk7XG5cdFx0XHRcdFx0XHRsb2cucmVxdWVzdD17XG5cdFx0XHRcdFx0XHRcdHVybDpyZXEudXJsLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEuYm9keSksXG5cdFx0XHRcdFx0XHRcdHBhcmFtczp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEucGFyYW1zKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGV4ZWN1dGUgPSBhc3luYyAoKT0+e1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib2R5ID0gcmVxLmJvZHk7XG5cdFx0XHRcdFx0XHRpZihyZXEucXVlcnkgJiYgdHlwZW9mIHJlcS5xdWVyeSA9PT0gXCJvYmplY3RcIil7XG5cdFx0XHRcdFx0XHRcdGZvcihsZXQgaSBpbiByZXEucXVlcnkpe1xuXHRcdFx0XHRcdFx0XHRcdGJvZHlbaV09cmVxLnF1ZXJ5W2ldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGh0dHBSZXF1ZXN0OkhUVFBSZXF1ZXN0Vk8gPSB7XG5cdFx0XHRcdFx0XHRcdHJhdzpyZXEgYXMgSW5jb21pbmdNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTpyZXEuYm9keSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOnJlcS5wYXJhbXMsXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnM6cmVxLmhlYWRlcnMgYXMgYW55LFxuXHRcdFx0XHRcdFx0XHRlbmRwb2ludDplcCxcblx0XHRcdFx0XHRcdFx0ZmlsZXM6cmVxLmZpbGVzID8/IG51bGwsXG5cdFx0XHRcdFx0XHRcdHJlZmVyZXI6cmVxLmdldChcIlJlZmVyZXJcIiksXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5wcmVwcm9kdWNlcil7XG5cdFx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJlcHJvZHVjZXJSZXN1bHQgPSBhd2FpdCB0aGlzLm9wdGlvbnMucHJlcHJvZHVjZXIoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRpZihwcmVwcm9kdWNlclJlc3VsdClcblx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5wcmVwcm9kdWNlclJlc3VsdCA9IHByZXByb2R1Y2VyUmVzdWx0O1xuXHRcdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtlcnJvcjp7Y29kZToxMDAwMixtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsZGV0YWlsczpgJHtlfWB9LGRhdGE6bnVsbCxodHRwU3RhdHVzOjUwMH0sdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGxldCByZXN1bHRcblx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSBpbnRlcmNlcHRvciBpZiBleGlzdHNcblx0XHRcdFx0XHRcdFx0aWYoIWouaWdub3JlSW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdGxldCBpbnRlcmNlcHRvclJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMuaW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW50ZXJjZXB0b3JSZXN1bHQ9YXdhaXQgdGhpcy5vcHRpb25zLmludGVyY2VwdG9yLmV4ZWN1dGUoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaW50ZXJjZXB0b3JSZXN1bHQuZXJyb3IgJiYgIWouYWxsb3dJbnRlcmNlcHRvckVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLGludGVyY2VwdG9yUmVzdWx0LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5pbnRlcmNlcHRvclJlc3VsdCA9IGludGVyY2VwdG9yUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJlY2hlY2tcblx0XHRcdFx0XHRcdFx0aWYoaSA9PT0gdGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZWNoZWNrPXtkYXRhOnRoaXMub3B0aW9ucy5tb25pdG9yfVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZWNoZWNrPWF3YWl0IGkucHJlY2hlY2soaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdGlmKHByZWNoZWNrICYmIHByZWNoZWNrLmVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMscHJlY2hlY2ssdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlY2hlY2s9cHJlY2hlY2s7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBJZiBpbnRlcmNlcHRvciBoYXMgbm8gZXJyb3JzLCBleGVjdXRlIG1haW4gaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBpLmV4ZWN1dGUoaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdCBcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoZSlcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRmF0YWxFcnJvcihlcCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDAsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29kZToxMDAwMixcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6XCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM6YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMscmVzdWx0LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGV4ZWN1dGUoKVxuXHRcdFx0XHR9KTsvLyBoYW5kbGUgaW5jb21pbmcgcmVxdWVzdFxuXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFxuXG5cdFx0Ly8gZmluYWwgaGFuZGxlclxuXHRcdGFwcC51c2UoKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG5cdFx0XHRcblx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpXG5cblx0XHRcdGlmKHRoaXMubW9uaXRvciAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLm1vbml0b3Ipe1xuXHRcdFx0XHQvL2NoZWNrIGlmIHJlcXVlc3RpbmcgbW9uaXRvclxuXHRcdFx0XHRpZihyZXEubWV0aG9kPT09XCJHRVRcIil7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0bGV0IG1vbml0b3JSZXF1ZXN0PWZhbHNlO1xuXHRcdFx0XHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdFx0XHRjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGkubG9naW4raS5wYXNzd29yZCkuZGlnZXN0KCkudG9TdHJpbmcoXCJoZXhcIilcblx0XHRcdFx0XHRcdGlmKHJlcS5vcmlnaW5hbFVybC5lbmRzV2l0aChcIi9zbS1cIitoYXNoKSl7XG5cdFx0XHRcdFx0XHRcdG1vbml0b3JSZXF1ZXN0PXRydWU7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKG1vbml0b3JSZXF1ZXN0KXtcblx0XHRcdFx0XHRcdC8vIHNlbmQgaW5kZXggVGh1LCAxNiBOb3YgMjAyMyAyMzozMzozNSBHTVRcblx0XHRcdFx0XHRcdGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdFx0dHJ5e1xuXHRcdFx0XHRcdFx0XHRpZighdGhpcy5tb25pdG9ySW5kZXhGaWxlKVxuXHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3JJbmRleEZpbGUgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKF9fZGlybmFtZSxcIm1vbml0b3JcIixcImluZGV4Lmh0bWxcIikpO1xuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsXCJ0ZXh0L2h0bWxcIilcblx0XHRcdFx0XHRcdFx0cmVzLnNldEhlYWRlcihcIkNvbnRlbnQtTGVuZ3RoXCIsdGhpcy5tb25pdG9ySW5kZXhGaWxlLmJ5dGVMZW5ndGgpXG5cdFx0XHRcdFx0XHRcdHJlcy5zdGF0dXMoMjAwKS5zZW5kKHRoaXMubW9uaXRvckluZGV4RmlsZSk7XG5cdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6e1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29kZToxMDAwMixcblx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2U6XCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRcdGRldGFpbHM6YCR7ZX1gXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDBcblx0XHRcdFx0XHRcdFx0fSx0bWUscmVxLnBhdGgpO1x0XHRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0XG5cdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMse1xuXHRcdFx0XHRlcnJvcjpEZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVCxcblx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRodHRwU3RhdHVzOjQwNFxuXHRcdFx0fSx0bWUscmVxLnBhdGgpO1xuXHRcdH0pXG5cblx0XHRzZXJ2ZXIubGlzdGVuKHRoaXMub3B0aW9ucy5wb3J0LCAoKSA9PiB7XG5cdFx0XHRsb2dDcml0KCcke0FQSVNlcnZpY2UuanN9JywnQVBJIFNlcnZpY2Ugc3RhcnRlZCBhdDogJyt0aGlzLm9wdGlvbnMucG9ydCtcIiwgd2l0aCBiYXNlIGVuZHBvaW50OlwiK3RoaXMub3B0aW9ucy5iYXNlRW5kUG9pbnQrXCIsIHZlci46IFwiK3RoaXMudmVyc2lvbilcblx0XHR9KVxuXG5cdFx0LyphcHAubGlzdGVuKHRoaXMub3B0aW9ucy5wb3J0LCAoKSA9PiB7XG5cdFx0XHRsb2dDcml0KCcke0FQSVNlcnZpY2UuanN9JywnQVBJIFNlcnZpY2Ugc3RhcnRlZCBhdDogJyt0aGlzLm9wdGlvbnMucG9ydCtcIiwgd2l0aCBiYXNlIGVuZHBvaW50OlwiK3RoaXMub3B0aW9ucy5iYXNlRW5kUG9pbnQrXCIsIHZlci46IFwiK3RoaXMudmVyc2lvbilcblx0XHR9KSovXG5cdH1cblxuXHRhc3luYyBzZW5kUmVzcG9uc2UocmVmOnN0cmluZyxyZXM6UmVzcG9uc2UsZGF0YTpUcmFuc2ZlclBhY2tldFZPPGFueT4scmVxdWVzdFRpbWU6bnVtYmVyLGVuZHBvaW50PzpzdHJpbmcsbG9nPzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW18bnVsbCxyZXE/OkhUVFBSZXF1ZXN0Vk8pe1xuXG5cdFx0aWYodGhpcy5vcHRpb25zLnBvc3Rwcm9kdWNlcil7XG5cdFx0XHR0cnl7XG5cdFx0XHRcdGRhdGEgPSBhd2FpdCB0aGlzLm9wdGlvbnMucG9zdHByb2R1Y2VyKHJlcSxyZXMsZGF0YSxyZXF1ZXN0VGltZSxlbmRwb2ludCxsb2cpO1xuXHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRsb2dFcnJvcihcIlBvc3Rwcm9kdWNlciBlcnJvclwiLGUpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGRhdGEpKVxuXHRcdFx0ZGF0YSA9IHtlcnJvcjpkYXRhIGFzIElFcnJvcixkYXRhOm51bGx9XG5cdFx0XG4gICAgICAgIGRhdGEucmVzcG9uc2VUaW1lID0gKCtuZXcgRGF0ZSgpKSAtIHJlcXVlc3RUaW1lO1xuICAgICAgICBkYXRhLmNvcmUgPSB0aGlzLnZlcnNpb25cbiAgICAgICAgZGF0YS5lbmRwb2ludCA9IGVuZHBvaW50ID8/IFwibm9fZW5kcG9pbnRcIlxuXHRcdFxuXHRcdGlmKHRoaXMub3B0aW9ucy5hcHBWZXJzaW9uKVxuXHRcdFx0ZGF0YS52ZXJzaW9uPXRoaXMub3B0aW9ucy5hcHBWZXJzaW9uXG5cblx0XHRcblx0XHRpZihsb2cpe1xuXHRcdFx0bG9nLnRpbWUgPSBkYXRhLnJlc3BvbnNlVGltZVxuXHRcdFx0bG9nLnJlZmVyZXI9cmVmO1xuXHRcdH1cblxuXHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlUmVzcG9uc2UoZGF0YS5lbmRwb2ludCxkYXRhLnJlc3BvbnNlVGltZSlcblxuICAgICAgICBpZihyZXMuZGVzdHJveWVkIHx8IHJlcy5jbG9zZWQpe1xuXG5cdFx0XHRpZihsb2cpXG5cdFx0XHRcdGxvZy5lcnJvciA9IFwiQ29ubmVjdGlvbiBhbHJlYWR5IGNsb3NlZCwgY2FuJ3Qgc2VuZCByZXNwb25zZSBmb3I6IFwiK2RhdGEuZW5kcG9pbnRcblx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuICAgICAgICAgICAgXHR0aGlzLm9wdGlvbnMub25FcnJvcihcIkNvbm5lY3Rpb24gYWxyZWFkeSBjbG9zZWQsIGNhbid0IHNlbmQgcmVzcG9uc2U6IFwiK2RhdGEuZW5kcG9pbnQsZGF0YSlcbiAgICAgICAgICAgIFxuXHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXG4gICAgICAgIH1lbHNle1xuXHRcdFx0dHJ5e1xuXG5cdFx0XHRcdGlmKGRhdGEuZmlsZSl7XG5cblx0XHRcdFx0XHRyZXMuc2VuZEZpbGUoZGF0YS5maWxlLGVycj0+e1xuXHRcdFx0XHRcdFx0aWYoZXJyKXtcblx0XHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRcdGxvZy5lcnJvciA9IFwiQ2FuJ3Qgc2VuZCBmaWxlOiBcIitkYXRhLmZpbGVcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoXCJDYW4ndCBzZW5kIGZpbGU6IFwiK2RhdGEuZmlsZSxlcnIpXG5cdFx0XHRcdFx0XHRcdGlmKHRoaXMubW9uaXRvciAmJiBkYXRhLmVuZHBvaW50KVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlQVBJRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVmLHJlcyx7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5DQU5UX1NFTkRfRklMRSxcblx0XHRcdFx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDBcblx0XHRcdFx0XHRcdFx0fSxyZXF1ZXN0VGltZSxkYXRhLmVuZHBvaW50KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH0pXG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdGlmKGRhdGEucmVkaXJlY3Qpe1xuXHRcdFx0XHRcdHJlcy5yZWRpcmVjdChkYXRhLnJlZGlyZWN0KTtcblx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB7cmVkaXJlY3Q6ZGF0YS5yZWRpcmVjdH1cblx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0Ly8gc2V0dXAgaGVhZGVyc1xuXHRcdFx0XHRcdGlmKGRhdGEuaGVhZGVycyl7XG5cdFx0XHRcdFx0XHRmb3IobGV0IGkgaW4gZGF0YS5oZWFkZXJzKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKGksZGF0YS5oZWFkZXJzW2ldKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihkYXRhLmVycm9yICYmIGRhdGEuZXJyb3IuaHR0cFN0YXR1cyAmJiBkYXRhLmVycm9yLmh0dHBTdGF0dXM+OTkpXG5cdFx0XHRcdFx0XHRyZXMuc3RhdHVzQ29kZSA9IGRhdGEuZXJyb3IuaHR0cFN0YXR1c1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHJlcy5zdGF0dXNDb2RlPWRhdGEuaHR0cFN0YXR1cyA/PyAyMDBcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZihkYXRhLnJhd1Jlc3BvbnNlKXtcblx0XHRcdFx0XHRcdHJlcy5zZW5kKGRhdGEuZGF0YSlcblx0XHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdFx0bG9nLnJlc3BvbnNlID0gdGhpcy5jaGVja0RhdGFMZW5ndGgoZGF0YSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdHJlcy5zZW5kKGRhdGEpO1xuXHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB0aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhKVxuXG5cdFx0XHRcdFx0XHRpZihkYXRhLmVycm9yICYmIHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVBUElFcnJvcihkYXRhLmVuZHBvaW50KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcblx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihcIkNhbid0IHNlbmQgcmVzcG9uc2VcIixlKTtcblx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdGxvZy5lcnJvcj1cIkNhbid0IHNlbmQgcmVzcG9uc2VcIlxuXHRcdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVFcnJvcihkYXRhLmVuZHBvaW50KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBzaG93IGxvZ1xuXHRcdGlmKHRoaXMub3B0aW9ucy5vbk5ldHdvcmtMb2cgJiYgbG9nKVxuXHRcdFx0dGhpcy5vcHRpb25zLm9uTmV0d29ya0xvZyhsb2cpXG4gICAgfVxuXG5cblx0Y2hlY2tEYXRhTGVuZ3RoKGRhdGE6YW55LHJlc3VsdD86YW55LGx2bD86bnVtYmVyKTphbnl7XG5cdFx0XG5cdFx0aWYoIWx2bClcblx0XHRcdGx2bD0wO1xuXG5cdFx0aWYodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIpe1xuXHRcdFx0aWYodHlwZW9mIGRhdGE9PT1cInN0cmluZ1wiICYmIGRhdGEubGVuZ3RoPjEwMjQpXG5cdFx0XHRcdHJldHVybiBkYXRhLnN1YnN0cmluZygwLDEwMDApK1wiLi4uICh0b3RhbDpcIiArIGRhdGEubGVuZ3RoICsgXCIpXCJcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdGlmKHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKXtcblx0XHRcdGlmKCFyZXN1bHQpXG5cdFx0XHRcdHJlc3VsdD17fTtcblx0XHRcdGxldCBhcnJjbnQgPSAxMDA7XG5cdFx0XHRmb3IobGV0IGkgaW4gZGF0YSl7XG5cdFx0XHRcdHJlc3VsdFtpXT10aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhW2ldLHJlc3VsdFtpXSxsdmwrMSk7XG5cdFx0XHRcdGFycmNudC0tO1xuXHRcdFx0XHRpZihhcnJjbnQ8PTApe1xuXHRcdFx0XHRcdHJlc3VsdFtcIi4uLlwiXT1cIi4uLiB0b3RhbDogXCIrQXJyYXkuaXNBcnJheShkYXRhKT9kYXRhLmxlbmd0aDpPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdCA/PyBudWxsO1xuXHR9XG5cbn1cbiJdfQ==
457
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQVBJU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGlTZXJ2ZXIvQVBJU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUF3RDtBQUN4RCwrQ0FBeUQ7QUFDekQsZ0RBQXVCO0FBRXZCLGlEQUE0RDtBQUM1RCw0RUFBc0U7QUFFdEUsbURBQWtDO0FBQ2xDLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsZ0RBQXVCO0FBQ3ZCLG9EQUE0QjtBQUM1Qiw0Q0FBbUI7QUFDbkIsNEVBQTJDO0FBQzNDLDRDQUFtQjtBQUNuQixnREFBNEM7QUFDNUMsa0RBQThDO0FBQzlDLGdEQUF1QjtBQWtDdkIsU0FBZ0IsaUJBQWlCO0lBQ2hDLE9BQU87UUFDTixJQUFJLEVBQUUsSUFBSTtRQUNWLFlBQVksRUFBRSxPQUFPO1FBQ3JCLGlCQUFpQixFQUFFO1lBQ2xCLHVCQUF1QjtTQUN2QjtRQUNELFNBQVMsRUFBRSxFQUFFO1FBQ2IsU0FBUyxFQUFDLE1BQU07UUFDaEIsWUFBWSxFQUFFLFVBQVUsR0FBNkI7WUFDcEQsSUFBQSxvQkFBTyxFQUFDLGtCQUFrQixFQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7UUFDRCxPQUFPLEVBQUMsVUFBUyxHQUFPO1lBQ3ZCLElBQUEscUJBQVEsRUFBQyxrQkFBa0IsRUFBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsdUJBQXVCLEVBQUMsS0FBSztRQUM3QixTQUFTLEVBQUMsRUFBRSxHQUFDLElBQUksR0FBQyxJQUFJO1FBQ3RCLFdBQVcsRUFBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFlBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBQyxhQUFhLENBQUM7S0FDbkQsQ0FBQTtBQUNGLENBQUM7QUFuQkQsOENBbUJDO0FBRVksUUFBQSxrQkFBa0IsR0FBc0MsSUFBSSxvQkFBRyxDQUFDLFNBQVMsRUFBQyxvQkFB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QUcsQ0FBQTtZQUNoRSxPQUFPLElBQUksQ0FBQztTQUNaO1FBRUQsSUFBRyxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUM7WUFDM0IsSUFBRyxDQUFDLE1BQU07Z0JBQ1QsTUFBTSxHQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNqQixLQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBQztnQkFDakIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sRUFBRSxDQUFDO2dCQUNULElBQUcsTUFBTSxJQUFFLENBQUMsRUFBQztvQkFDWixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUMsYUFBYSxHQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUNyRixNQUFNO2lCQUNOO2FBQ0Q7U0FDRDtRQUNELE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQztJQUN2QixDQUFDOztBQTljRixnQ0FnZEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwcmVzcywgeyBBcHBsaWNhdGlvbiwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJ1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UsIElCYXNlU2VydmljZSB9IGZyb20gJy4vQmFzZVNlcnZpY2UnXG5pbXBvcnQgY29ycyBmcm9tICdjb3JzJ1xuaW1wb3J0IHsgSW5jb21pbmdNZXNzYWdlIH0gZnJvbSAnaHR0cCdcbmltcG9ydCB7IEJhc2VFbmRwb2ludCwgSUJhc2VFbmRwb2ludCB9IGZyb20gJy4vQmFzZUVuZHBvaW50J1xuaW1wb3J0IERlZmF1bHRFcnJvcnMsIHsgRXJyb3JVdGlscyB9IGZyb20gJy4vc3RydWN0dXJlcy9EZWZhdWx0RXJyb3JzJ1xuaW1wb3J0IHsgSFRUUFJlcXVlc3RWTywgSUVycm9yLCBUcmFuc2ZlclBhY2tldFZPIH0gZnJvbSAnLi9zdHJ1Y3R1cmVzL0ludGVyZmFjZXMnXG5pbXBvcnQge1JlcX0gZnJvbSBcImJhZG1mY2stc2lnbmFsXCJcbmltcG9ydCB7IGxvZ0NyaXQsIGxvZ0Vycm9yLCBsb2dJbmZvIH0gZnJvbSAnLi9Mb2dTZXJ2aWNlJ1xuaW1wb3J0IHsgTW9uaXRvciB9IGZyb20gJy4vbW9uaXRvci9Nb25pdG9yJ1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuaW1wb3J0IGNyeXB0byBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCJcbmltcG9ydCBmaWxlVXBsb2FkIGZyb20gJ2V4cHJlc3MtZmlsZXVwbG9hZCdcbmltcG9ydCBvcyBmcm9tIFwib3NcIlxuaW1wb3J0IHsgTGl2ZW5lc3MgfSBmcm9tICcuL3JvdXRlcy9MaXZlbmVzcydcbmltcG9ydCB7IFJlYWRpbmVzcyB9IGZyb20gJy4vcm91dGVzL1JlYWRpbmVzcydcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBIdHRwU3RhdHVzQ29kZSB9IGZyb20gJ2F4aW9zJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXtcdFxuXHRpZDpudW1iZXIsXG5cdGNyZWF0ZWQ6bnVtYmVyLFxuXHR0aW1lOm51bWJlcixcblx0cmVmZXJlcj86c3RyaW5nLFxuXHRyZXF1ZXN0Ontba2V5OnN0cmluZ106YW55fSxcblx0cmVzcG9uc2U6e1trZXk6c3RyaW5nXTphbnl9XG5cdGVycm9yPzpzdHJpbmd8bnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSVNlcnZpY2VPcHRpb25ze1xuXHRwb3J0Om51bWJlcixcblx0YmFzZUVuZFBvaW50OnN0cmluZyAvLyBcIi9hcGkvXCJcblx0Y29yc0hvc3RXaGl0ZUxpc3Q6c3RyaW5nW10sXG5cdGVuZHBvaW50czpJQmFzZUVuZHBvaW50W10sXG5cdGpzb25MaW1pdDpzdHJpbmcgLy8gXCIxMG1iXCJcblx0b25OZXR3b3JrTG9nPzooKGxvZzpBUElTZXJ2aWNlTmV0d29ya0xvZ0l0ZW0pPT52b2lkKXxudWxsXG5cdG9uRXJyb3I/OigoLi4ucmVzdDphbnlbXSk9PnZvaWQpfG51bGxcblx0aXNQcm9kdWN0aW9uRW52aXJvbm1lbnQ6Ym9vbGVhbixcblx0aW50ZXJjZXB0b3I/OklCYXNlRW5kcG9pbnQsXG5cdHBvc3Rwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsKT0+UHJvbWlzZTxUcmFuc2ZlclBhY2tldFZPPlxuXHRwcmVwcm9kdWNlcj86KHJlcTpIVFRQUmVxdWVzdFZPfHVuZGVmaW5lZHxudWxsKT0+YW55XG5cdFxuXHRtb25pdG9yPzp7bG9naW46c3RyaW5nLHBhc3N3b3JkOnN0cmluZ31bXVxuXHQvL2RlcGxveW1lbnQ/Ontsb2dpbjpzdHJpbmcscGFzc3dvcmQ6c3RyaW5nfVxuXHRhcHBWZXJzaW9uPzpzdHJpbmdcblxuXHRmaWxlVGVtcERpcjpzdHJpbmc7XG5cdGZpbGVMaW1pdDpudW1iZXIgLy8gYlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMoKTpBUElTZXJ2aWNlT3B0aW9uc3tcblx0cmV0dXJuIHtcblx0XHRwb3J0OiA4MDkxLFxuXHRcdGJhc2VFbmRQb2ludDogJy9hcGkvJyxcblx0XHRjb3JzSG9zdFdoaXRlTGlzdDogW1xuXHRcdFx0J2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG5cdFx0XSxcblx0XHRlbmRwb2ludHM6IFtdLFxuXHRcdGpzb25MaW1pdDpcIjEwbWJcIixcblx0XHRvbk5ldHdvcmtMb2c6IGZ1bmN0aW9uIChsb2c6IEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSk6IHZvaWQge1xuXHRcdFx0bG9nSW5mbyhcIiR7QVBJU2VydmljZS5qc31cIixsb2cpXG5cdFx0fSxcblx0XHRvbkVycm9yOmZ1bmN0aW9uKGVycjphbnkpe1xuXHRcdFx0bG9nRXJyb3IoXCIke0FQSVNlcnZpY2UuanN9XCIsZXJyKTtcblx0XHR9LFxuXHRcdGlzUHJvZHVjdGlvbkVudmlyb25tZW50OmZhbHNlLFxuXHRcdGZpbGVMaW1pdDo1MCoxMDI0KjEwMjQsXG5cdFx0ZmlsZVRlbXBEaXI6cGF0aC5yZXNvbHZlKG9zLnRtcGRpcigpLFwiZmlsZVRlbXBEaXJcIilcblx0fVxufVxuXG5leHBvcnQgY29uc3QgUkVRX0NSRUFURV9ORVRfTE9HOlJlcTx2b2lkLEFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbT4gPSBuZXcgUmVxKHVuZGVmaW5lZCxcIlJFUV9DUkVBVEVfTkVUX0xPR1wiKTtcbmV4cG9ydCBjb25zdCBSRVFfSFRUUF9MT0c6UmVxPHZvaWQsQVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW10+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSFRUUF9MT0dcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlQ6UmVxPHZvaWQsbnVtYmVyPiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfUkVRVUVTVFNfQ09VTlRcIik7XG5leHBvcnQgY29uc3QgUkVRX0hUVFBfU0VSVkVSOlJlcTx2b2lkLHtleHByZXNzOkFwcGxpY2F0aW9uLGh0dHA6aHR0cC5TZXJ2ZXJ9PiA9IG5ldyBSZXEodW5kZWZpbmVkLFwiUkVRX0hUVFBfU0VSVkVSXCIpO1xuZXhwb3J0IGNvbnN0IFJFUV9JTlRFUk5BTF9DQUxMOlJlcTxIVFRQUmVxdWVzdFZPLElFcnJvcnxhbnk+ID0gbmV3IFJlcSh1bmRlZmluZWQsXCJSRVFfSU5URVJOQUxfQ0FMTFwiKTtcblxuXG5jb25zdCBhY3RpdmVTZXJ2aWNlczpTdHJpbmdbXT1bXVxuY29uc3QgZW50cnlQb2ludHM6U3RyaW5nW109W11cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIEluaXRpYWxpemVyKHNlcnZpY2VzOklCYXNlU2VydmljZVtdKXtcbiAgICBmb3IgKGxldCBpIG9mIHNlcnZpY2VzKSB7IGF3YWl0IGkuaW5pdCgpO2FjdGl2ZVNlcnZpY2VzLnB1c2goaS5nZXROYW1lKCkpIH1cbiAgICBmb3IgKGxldCBpIG9mIHNlcnZpY2VzKSB7IGkuYXBwbGljYXRpb25SZWFkeSgpIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFQSVNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XG5cblx0Ly8gTkVUIExPR1xuXHRwcml2YXRlIHN0YXRpYyBuZXh0TG9nSUQ9MDtcblx0cHJpdmF0ZSB2ZXJzaW9uID0gXCIyLjUuMFwiXG5cdHByaXZhdGUgb3B0aW9uczpBUElTZXJ2aWNlT3B0aW9ucztcblx0cHJpdmF0ZSBtb25pdG9yPzpNb25pdG9yXG5cdHByaXZhdGUgbW9uaXRvckluZGV4RmlsZT86QnVmZmVyXG5cdHByaXZhdGUgc3RhcnRlZDpEYXRlID0gbmV3IERhdGUoKTtcblx0cHJpdmF0ZSByZXF1ZXN0c0NvdW50PTA7XG5cdHByaXZhdGUgc2VydmVyPWh0dHBcblxuXHRuZXRMb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtW109W107XG5cblx0Y29uc3RydWN0b3Iob3B0aW9ucz86QVBJU2VydmljZU9wdGlvbnN8bnVsbCkge1xuXHRcdHN1cGVyKCdIVFRQIFNlcnZpY2UnKVxuXHRcdHRoaXMub3B0aW9ucz1vcHRpb25zID8/IGdldERlZmF1bHRPcHRpb25zKCk7XG5cdFx0aWYoIXRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdClcblx0XHRcdHRoaXMub3B0aW9ucy5jb3JzSG9zdFdoaXRlTGlzdD1bXTtcblx0XHRjb25zdCBzZWxmID0gXCJodHRwOi8vbG9jYWxob3N0OlwiK3RoaXMub3B0aW9ucy5wb3J0O1xuXHRcdGlmKCF0aGlzLm9wdGlvbnMuY29yc0hvc3RXaGl0ZUxpc3QuZmluZCh2YWw9PnZhbD09PXNlbGYpKVxuXHRcdFx0dGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LnB1c2goKVxuXG5cdFx0aWYodGhpcy5vcHRpb25zLm1vbml0b3IgJiYgdGhpcy5vcHRpb25zLm1vbml0b3IubGVuZ3RoPjApe1xuXHRcdFx0dGhpcy5tb25pdG9yPW5ldyBNb25pdG9yKCk7XG5cdFx0XHR0aGlzLm9wdGlvbnMuZW5kcG9pbnRzLnB1c2godGhpcy5tb25pdG9yKVxuXHRcdFx0Y29uc29sZS53YXJuKFwiU2VydmljZSBNb25pdG9yIGluaXRpYWxpemVkXCIpXG5cdFx0XHRjb25zb2xlLndhcm4oXCJtb25pdG9yIGxpbmtzOlwiKVxuXHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0Y29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpLmxvZ2luK2kucGFzc3dvcmQpLmRpZ2VzdCgpLnRvU3RyaW5nKFwiaGV4XCIpXG5cdFx0XHRcdGNvbnNvbGUud2FybihpLmxvZ2luK1wiIC0+IC9zbS1cIitoYXNoKVx0XHRcdFx0XHRcdFxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGNyZWF0ZSBsaXZlbmVzcywgcmVhZGluZXNzXG5cdFx0dGhpcy5vcHRpb25zLmVuZHBvaW50cy5wdXNoKG5ldyBMaXZlbmVzcyh0aGlzLnN0YXJ0ZWQpLG5ldyBSZWFkaW5lc3ModGhpcy5zdGFydGVkKSlcblx0XHRSRVFfSFRUUF9SRVFVRVNUU19DT1VOVC5saXN0ZW5lciA9IGFzeW5jICgpID0+IHRoaXMucmVxdWVzdHNDb3VudDtcblx0fVxuXG5cblx0b3ZlcnJpZGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcblxuXHRcdFJFUV9IVFRQX0xPRy5saXN0ZW5lcj1hc3luYyBpZ25vcmU9PnRoaXMubmV0TG9nO1xuXHRcdFJFUV9DUkVBVEVfTkVUX0xPRy5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e1xuXHRcdFx0Y29uc3QgbG9nOkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbSA9IHtcblx0XHRcdFx0Y3JlYXRlZDogK25ldyBEYXRlKCksXG5cdFx0XHRcdHRpbWU6IDAsXG5cdFx0XHRcdHJlcXVlc3Q6IHt9LFxuXHRcdFx0XHRyZXNwb25zZToge30sXG5cdFx0XHRcdGVycm9yOm51bGwsXG5cdFx0XHRcdGlkOiBBUElTZXJ2aWNlLm5leHRMb2dJRCsrXG5cdFx0XHR9XG5cdFx0XHR0aGlzLm5ldExvZy5wdXNoKGxvZylcblx0XHRcdGlmKHRoaXMubmV0TG9nLmxlbmd0aD4xMDAwKVxuXHRcdFx0XHR0aGlzLm5ldExvZy5zaGlmdCgpXG5cdFx0XHRyZXR1cm4gbG9nO1xuXHRcdH1cblxuXHRcdC8vIGludGVybmFsIGNhbGxcblx0XHRSRVFfSU5URVJOQUxfQ0FMTC5saXN0ZW5lciA9IGFzeW5jIChyZXEpPT57XG5cdFx0XHRmb3IobGV0IGkgb2YgdGhpcy5vcHRpb25zLmVuZHBvaW50cyl7XG5cdFx0XHRcdGlmKCFpIHx8ICFpLmVuZHBvaW50cylcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0Zm9yKGxldCBqIG9mIGkuZW5kcG9pbnRzKXtcblx0XHRcdFx0XHRsZXQgZXAgPSBCYXNlRW5kcG9pbnQuZ2V0RW50cnlQb2ludCgpK2ouZW5kcG9pbnQ7XG5cdFx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XHRpZihlcD09PSByZXEuZW5kcG9pbnQpe1xuXHRcdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpLmV4ZWN1dGUocmVxKVxuXHRcdFx0XHRcdFx0aWYocmVzcG9uc2UuZXJyb3IpXG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHtlcnJvcjpEZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVCxkYXRhOm51bGwsaHR0cFN0YXR1czo0MDR9XG5cdFx0fVxuXG5cdFx0Ly8gaW5pdGlhbGl6ZSBleHByZXNzXG5cdFx0Y29uc3QgYXBwID0gZXhwcmVzcygpXG5cdFx0Y29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoYXBwKTtcblxuXHRcdFJFUV9IVFRQX1NFUlZFUi5saXN0ZW5lciA9IGFzeW5jIGlnbm9yZT0+e3JldHVybiB7ZXhwcmVzczphcHAsaHR0cDpzZXJ2ZXJ9fTtcblxuXHRcdGlmKHRoaXMub3B0aW9ucy5pc1Byb2R1Y3Rpb25FbnZpcm9ubWVudClcblx0XHRcdGFwcC5zZXQoXCJlbnZcIiwncHJvZHVjdGlvbicpO1xuXG5cdFx0YXBwLnVzZShleHByZXNzLmpzb24oeyBsaW1pdDogJzEwbWInIH0pKSAvLyBmb3IgcGFyc2luZyBhcHBsaWNhdGlvbi9qc29uXG5cdFx0YXBwLnVzZShleHByZXNzLnVybGVuY29kZWQoeyBsaW1pdDogJzEwbWInLCBleHRlbmRlZDogdHJ1ZSB9KSkgLy8gZm9yIHBhcnNpbmcgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG5cblx0XHRhcHAudXNlKGZpbGVVcGxvYWQoe1xuXHRcdFx0bGltaXRIYW5kbGVyOiAocmVxLCByZXMsIG5leHQpPT57XG5cdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdFx0ZXJyb3I6RGVmYXVsdEVycm9ycy5GSUxFX1RPT19MQVJHRSxcblx0XHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdFx0aHR0cFN0YXR1czo0MTMsXG5cdFx0XHRcdH0sK25ldyBEYXRlKCkscmVxLnBhdGgpO1xuXHRcdFx0fSxcblx0XHRcdGxpbWl0czogeyBmaWxlU2l6ZTogdGhpcy5vcHRpb25zLmZpbGVMaW1pdCB9LFxuXHRcdFx0dXNlVGVtcEZpbGVzOiB0cnVlLFxuXHRcdFx0dXJpRGVjb2RlRmlsZU5hbWVzOiB0cnVlLFxuXHRcdFx0dGVtcEZpbGVEaXI6IHRoaXMub3B0aW9ucy5maWxlVGVtcERpcixcblx0XHRcdC8vc2FmZUZpbGVOYW1lczogdHJ1ZSxcblx0XHRcdGFib3J0T25MaW1pdDp0cnVlXG5cdFx0fSkpXG5cblx0XHRhcHAudXNlKGFzeW5jIChlcnI6YW55LHJlcTphbnkscmVzcDphbnksbmV4dDphbnkpPT57XG5cdFx0XHRcblx0XHRcdGlmKCFlcnIpe1xuXHRcdFx0XHRuZXh0KCk7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0XHQvL3JlcXVlc3Qgc3RhcnQgdGltZVxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKCk7XG5cdFx0XHRjb25zdCBsb2cgPSBhd2FpdCBSRVFfQ1JFQVRFX05FVF9MT0cucmVxdWVzdCgpO1xuXHRcdFx0bG9nLnJlcXVlc3Q9e1xuXHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0ZGF0YTpcIlwiLFxuXHRcdFx0XHRwYXJhbXM6cmVxLnBhcmFtc1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgcmVzcG9uc2VFcnJvcj1EZWZhdWx0RXJyb3JzLlVOS05PV05fUkVRVUVTVDtcblx0XHRcdGlmICh0eXBlb2YgZXJyID09PSBcIm9iamVjdFwiICYmIGVyci5zdGF0dXMgPT09IDQwMCAmJiAnYm9keScgaW4gZXJyICYmIGVyci50eXBlID09PSAnZW50aXR5LnBhcnNlLmZhaWxlZCcpIHtcblx0XHRcdFx0cmVzcG9uc2VFcnJvciA9IERlZmF1bHRFcnJvcnMuSlNPTl9NQUxGT1JNRURcblx0XHRcdH1cbiAgICAgIFxuXG5cdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXNwLHtcblx0XHRcdFx0ZXJyb3I6cmVzcG9uc2VFcnJvcixcblx0XHRcdFx0ZGF0YTpudWxsLFxuXHRcdFx0XHRodHRwU3RhdHVzOjQwMFxuXHRcdFx0fSx0bWUsXCJcIixsb2cpXG5cblx0XHR9KVxuXG5cdFx0Y29uc3QgY29yc09wdGlvbnMgPSB7XG5cdFx0XHRvcmlnaW46IChvcmlnaW46IGFueSwgY2FsbGJhY2s6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvcmlnaW5Jc1doaXRlbGlzdGVkID0gdGhpcy5vcHRpb25zLmNvcnNIb3N0V2hpdGVMaXN0LmluY2x1ZGVzKG9yaWdpbilcblx0XHRcdFx0Y2FsbGJhY2sobnVsbCwgb3JpZ2luSXNXaGl0ZWxpc3RlZClcblx0XHRcdH0sXG5cdFx0XHRjcmVkZW50aWFsczogdHJ1ZVxuXHRcdH1cblx0XHRhcHAudXNlKGNvcnMoY29yc09wdGlvbnMpKVxuXG5cdFx0Ly8gcmVnaXN0cmF0ZSBlbmRwb2ludHNcblx0XHRCYXNlRW5kcG9pbnQuc2V0RW50cnlQb2ludCh0aGlzLm9wdGlvbnMuYmFzZUVuZFBvaW50KVxuXHRcdFxuXHRcdGZvcihsZXQgaSBvZiB0aGlzLm9wdGlvbnMuZW5kcG9pbnRzKXtcblx0XHRcdGF3YWl0IGkuaW5pdCgpO1xuXHRcdFx0aWYoIWkuZW5kcG9pbnRzKVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdGZvcihsZXQgaiBvZiBpLmVuZHBvaW50cyl7XG5cdFx0XHRcdGxldCBlcCA9IEJhc2VFbmRwb2ludC5nZXRFbnRyeVBvaW50KCkrai5lbmRwb2ludDtcblx0XHRcdFx0ZXAgPSBlcC5yZXBsYWNlQWxsKFwiLy9cIixcIi9cIilcblx0XHRcdFx0XG5cblx0XHRcdFx0Ly8gaW5jb21pbmcgcmVxdWVzdFxuXHRcdFx0XHRhcHAuYWxsKGVwLGFzeW5jIChyZXEscmVzKT0+e1xuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHNDb3VudCsrO1xuXHRcdFx0XHRcdGNvbnN0IHRtZSA9ICtuZXcgRGF0ZSgpO1xuXHRcdFx0XHRcdGxldCBsb2c6QVBJU2VydmljZU5ldHdvcmtMb2dJdGVtfG51bGwgPSBudWxsO1xuXHRcdFx0XHRcdGlmKCFpLmlnbm9yZUh0dHBMb2dnaW5nKXtcblx0XHRcdFx0XHRcdGxvZyA9IGF3YWl0IFJFUV9DUkVBVEVfTkVUX0xPRy5yZXF1ZXN0KCk7XG5cdFx0XHRcdFx0XHRsb2cucmVxdWVzdD17XG5cdFx0XHRcdFx0XHRcdHVybDpyZXEudXJsLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEuYm9keSksXG5cdFx0XHRcdFx0XHRcdHBhcmFtczp0aGlzLmNoZWNrRGF0YUxlbmd0aChyZXEucGFyYW1zKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGV4ZWN1dGUgPSBhc3luYyAoKT0+e1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib2R5ID0gcmVxLmJvZHk7XG5cdFx0XHRcdFx0XHRpZihyZXEucXVlcnkgJiYgdHlwZW9mIHJlcS5xdWVyeSA9PT0gXCJvYmplY3RcIil7XG5cdFx0XHRcdFx0XHRcdGZvcihsZXQgaSBpbiByZXEucXVlcnkpe1xuXHRcdFx0XHRcdFx0XHRcdGJvZHlbaV09cmVxLnF1ZXJ5W2ldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGh0dHBSZXF1ZXN0OkhUVFBSZXF1ZXN0Vk8gPSB7XG5cdFx0XHRcdFx0XHRcdHJhdzpyZXEgYXMgSW5jb21pbmdNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRtZXRob2Q6cmVxLm1ldGhvZCxcblx0XHRcdFx0XHRcdFx0ZGF0YTpyZXEuYm9keSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOnJlcS5wYXJhbXMsXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnM6cmVxLmhlYWRlcnMgYXMgYW55LFxuXHRcdFx0XHRcdFx0XHRlbmRwb2ludDplcCxcblx0XHRcdFx0XHRcdFx0ZmlsZXM6cmVxLmZpbGVzID8/IG51bGwsXG5cdFx0XHRcdFx0XHRcdHJlZmVyZXI6cmVxLmdldChcIlJlZmVyZXJcIiksXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5wcmVwcm9kdWNlcil7XG5cdFx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJlcHJvZHVjZXJSZXN1bHQgPSBhd2FpdCB0aGlzLm9wdGlvbnMucHJlcHJvZHVjZXIoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRpZihwcmVwcm9kdWNlclJlc3VsdClcblx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5wcmVwcm9kdWNlclJlc3VsdCA9IHByZXByb2R1Y2VyUmVzdWx0O1xuXHRcdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtlcnJvcjp7Y29kZToxMDAwMixtZXNzYWdlOlwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsZGV0YWlsczpgJHtlfWB9LGRhdGE6bnVsbCxodHRwU3RhdHVzOjUwMH0sdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGxldCByZXN1bHRcblx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSBpbnRlcmNlcHRvciBpZiBleGlzdHNcblx0XHRcdFx0XHRcdFx0aWYoIWouaWdub3JlSW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdGxldCBpbnRlcmNlcHRvclJlc3VsdDtcblx0XHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMuaW50ZXJjZXB0b3Ipe1xuXHRcdFx0XHRcdFx0XHRcdFx0aW50ZXJjZXB0b3JSZXN1bHQ9YXdhaXQgdGhpcy5vcHRpb25zLmludGVyY2VwdG9yLmV4ZWN1dGUoaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaW50ZXJjZXB0b3JSZXN1bHQuZXJyb3IgJiYgIWouYWxsb3dJbnRlcmNlcHRvckVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLGludGVyY2VwdG9yUmVzdWx0LHRtZSxlcCxsb2csaHR0cFJlcXVlc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRodHRwUmVxdWVzdC5pbnRlcmNlcHRvclJlc3VsdCA9IGludGVyY2VwdG9yUmVzdWx0XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJlY2hlY2tcblx0XHRcdFx0XHRcdFx0aWYoaSA9PT0gdGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdGh0dHBSZXF1ZXN0LnByZWNoZWNrPXtkYXRhOnRoaXMub3B0aW9ucy5tb25pdG9yfVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByZWNoZWNrPWF3YWl0IGkucHJlY2hlY2soaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdGlmKHByZWNoZWNrICYmIHByZWNoZWNrLmVycm9yKXtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZXEuZ2V0KFwiUmVmZXJlclwiKT8/XCJcIixyZXMscHJlY2hlY2ssdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aHR0cFJlcXVlc3QucHJlY2hlY2s9cHJlY2hlY2s7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBJZiBpbnRlcmNlcHRvciBoYXMgbm8gZXJyb3JzLCBleGVjdXRlIG1haW4gaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBpLmV4ZWN1dGUoaHR0cFJlcXVlc3QpXG5cdFx0XHRcdFx0XHRcdCBcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vcHRpb25zLm9uRXJyb3IoZSlcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRmF0YWxFcnJvcihlcCk7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjaGVjayBpZiBlcnJvciBpcyBJRXJyb3Jcblx0XHRcdFx0XHRcdFx0bGV0IGRhdGE6VHJhbnNmZXJQYWNrZXRWTyA9IHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjp7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2RlOjEwMDAyLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTpcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0aHR0cFN0YXR1czo1MDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXRhaWxzOmAke2V9YFxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0aWYoRXJyb3JVdGlscy5pc0Vycm9yKGUpKVxuXHRcdFx0XHRcdFx0XHRcdGRhdGEgPSB7ZXJyb3I6ZSBhcyBJRXJyb3J9XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLGRhdGEsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyxyZXN1bHQsdG1lLGVwLGxvZyxodHRwUmVxdWVzdCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZXhlY3V0ZSgpXG5cdFx0XHRcdH0pOy8vIGhhbmRsZSBpbmNvbWluZyByZXF1ZXN0XG5cblx0XHRcdH1cblx0XHR9XG5cblx0XG5cblx0XHQvLyBmaW5hbCBoYW5kbGVyXG5cdFx0YXBwLnVzZSgocmVxLCByZXMsIG5leHQpID0+IHtcblx0XHRcdFxuXHRcdFx0Y29uc3QgdG1lID0gK25ldyBEYXRlKClcblxuXHRcdFx0aWYodGhpcy5tb25pdG9yICYmIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubW9uaXRvcil7XG5cdFx0XHRcdC8vY2hlY2sgaWYgcmVxdWVzdGluZyBtb25pdG9yXG5cdFx0XHRcdGlmKHJlcS5tZXRob2Q9PT1cIkdFVFwiKXtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHRsZXQgbW9uaXRvclJlcXVlc3Q9ZmFsc2U7XG5cdFx0XHRcdFx0Zm9yKGxldCBpIG9mIHRoaXMub3B0aW9ucy5tb25pdG9yKXtcblx0XHRcdFx0XHRcdGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaS5sb2dpbitpLnBhc3N3b3JkKS5kaWdlc3QoKS50b1N0cmluZyhcImhleFwiKVxuXHRcdFx0XHRcdFx0aWYocmVxLm9yaWdpbmFsVXJsLmVuZHNXaXRoKFwiL3NtLVwiK2hhc2gpKXtcblx0XHRcdFx0XHRcdFx0bW9uaXRvclJlcXVlc3Q9dHJ1ZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYobW9uaXRvclJlcXVlc3Qpe1xuXHRcdFx0XHRcdFx0Ly8gc2VuZCBpbmRleCBUaHUsIDE2IE5vdiAyMDIzIDIzOjMzOjM1IEdNVFxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdFx0XHR0cnl7XG5cdFx0XHRcdFx0XHRcdGlmKCF0aGlzLm1vbml0b3JJbmRleEZpbGUpXG5cdFx0XHRcdFx0XHRcdHRoaXMubW9uaXRvckluZGV4RmlsZSA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUoX19kaXJuYW1lLFwibW9uaXRvclwiLFwiaW5kZXguaHRtbFwiKSk7XG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIixcInRleHQvaHRtbFwiKVxuXHRcdFx0XHRcdFx0XHRyZXMuc2V0SGVhZGVyKFwiQ29udGVudC1MZW5ndGhcIix0aGlzLm1vbml0b3JJbmRleEZpbGUuYnl0ZUxlbmd0aClcblx0XHRcdFx0XHRcdFx0cmVzLnN0YXR1cygyMDApLnNlbmQodGhpcy5tb25pdG9ySW5kZXhGaWxlKTtcblx0XHRcdFx0XHRcdH1jYXRjaChlKXtcblx0XHRcdFx0XHRcdFx0dGhpcy5zZW5kUmVzcG9uc2UocmVxLmdldChcIlJlZmVyZXJcIik/P1wiXCIscmVzLHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjp7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb2RlOjEwMDAyLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZTpcIkludGVybmFsIHNlcnZlciBlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGV0YWlsczpgJHtlfWBcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMFxuXHRcdFx0XHRcdFx0XHR9LHRtZSxyZXEucGF0aCk7XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRcblx0XHRcdHRoaXMuc2VuZFJlc3BvbnNlKHJlcS5nZXQoXCJSZWZlcmVyXCIpPz9cIlwiLHJlcyx7XG5cdFx0XHRcdGVycm9yOkRlZmF1bHRFcnJvcnMuVU5LTk9XTl9SRVFVRVNULFxuXHRcdFx0XHRkYXRhOm51bGwsXG5cdFx0XHRcdGh0dHBTdGF0dXM6NDA0XG5cdFx0XHR9LHRtZSxyZXEucGF0aCk7XG5cdFx0fSlcblxuXHRcdHNlcnZlci5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pXG5cblx0XHQvKmFwcC5saXN0ZW4odGhpcy5vcHRpb25zLnBvcnQsICgpID0+IHtcblx0XHRcdGxvZ0NyaXQoJyR7QVBJU2VydmljZS5qc30nLCdBUEkgU2VydmljZSBzdGFydGVkIGF0OiAnK3RoaXMub3B0aW9ucy5wb3J0K1wiLCB3aXRoIGJhc2UgZW5kcG9pbnQ6XCIrdGhpcy5vcHRpb25zLmJhc2VFbmRQb2ludCtcIiwgdmVyLjogXCIrdGhpcy52ZXJzaW9uKVxuXHRcdH0pKi9cblx0fVxuXG5cdGFzeW5jIHNlbmRSZXNwb25zZShyZWY6c3RyaW5nLHJlczpSZXNwb25zZSxkYXRhOlRyYW5zZmVyUGFja2V0Vk88YW55PixyZXF1ZXN0VGltZTpudW1iZXIsZW5kcG9pbnQ/OnN0cmluZyxsb2c/OkFQSVNlcnZpY2VOZXR3b3JrTG9nSXRlbXxudWxsLHJlcT86SFRUUFJlcXVlc3RWTyl7XG5cblx0XHRpZih0aGlzLm9wdGlvbnMucG9zdHByb2R1Y2VyKXtcblx0XHRcdHRyeXtcblx0XHRcdFx0ZGF0YSA9IGF3YWl0IHRoaXMub3B0aW9ucy5wb3N0cHJvZHVjZXIocmVxLHJlcyxkYXRhLHJlcXVlc3RUaW1lLGVuZHBvaW50LGxvZyk7XG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGxvZ0Vycm9yKFwiUG9zdHByb2R1Y2VyIGVycm9yXCIsZSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihFcnJvclV0aWxzLmlzRXJyb3IoZGF0YSkpXG5cdFx0XHRkYXRhID0ge2Vycm9yOmRhdGEgYXMgSUVycm9yLGRhdGE6bnVsbH1cblx0XHRcbiAgICAgICAgZGF0YS5yZXNwb25zZVRpbWUgPSAoK25ldyBEYXRlKCkpIC0gcmVxdWVzdFRpbWU7XG4gICAgICAgIGRhdGEuY29yZSA9IHRoaXMudmVyc2lvblxuICAgICAgICBkYXRhLmVuZHBvaW50ID0gZW5kcG9pbnQgPz8gXCJub19lbmRwb2ludFwiXG5cdFx0XG5cdFx0aWYodGhpcy5vcHRpb25zLmFwcFZlcnNpb24pXG5cdFx0XHRkYXRhLnZlcnNpb249dGhpcy5vcHRpb25zLmFwcFZlcnNpb25cblxuXHRcdFxuXHRcdGlmKGxvZyl7XG5cdFx0XHRsb2cudGltZSA9IGRhdGEucmVzcG9uc2VUaW1lXG5cdFx0XHRsb2cucmVmZXJlcj1yZWY7XG5cdFx0fVxuXG5cdFx0aWYodGhpcy5tb25pdG9yKVxuXHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVSZXNwb25zZShkYXRhLmVuZHBvaW50LGRhdGEucmVzcG9uc2VUaW1lKVxuXG4gICAgICAgIGlmKHJlcy5kZXN0cm95ZWQgfHwgcmVzLmNsb3NlZCl7XG5cblx0XHRcdGlmKGxvZylcblx0XHRcdFx0bG9nLmVycm9yID0gXCJDb25uZWN0aW9uIGFscmVhZHkgY2xvc2VkLCBjYW4ndCBzZW5kIHJlc3BvbnNlIGZvcjogXCIrZGF0YS5lbmRwb2ludFxuXHRcdFx0aWYodGhpcy5vcHRpb25zLm9uRXJyb3IpXG4gICAgICAgICAgICBcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ29ubmVjdGlvbiBhbHJlYWR5IGNsb3NlZCwgY2FuJ3Qgc2VuZCByZXNwb25zZTogXCIrZGF0YS5lbmRwb2ludCxkYXRhKVxuICAgICAgICAgICAgXG5cdFx0XHRpZih0aGlzLm1vbml0b3IpXG5cdFx0XHRcdHRoaXMubW9uaXRvci5yZWdpc3RyYXRlRXJyb3IoZGF0YS5lbmRwb2ludCk7XG5cbiAgICAgICAgfWVsc2V7XG5cdFx0XHR0cnl7XG5cblx0XHRcdFx0aWYoZGF0YS5maWxlKXtcblxuXHRcdFx0XHRcdHJlcy5zZW5kRmlsZShkYXRhLmZpbGUsZXJyPT57XG5cdFx0XHRcdFx0XHRpZihlcnIpe1xuXHRcdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdFx0bG9nLmVycm9yID0gXCJDYW4ndCBzZW5kIGZpbGU6IFwiK2RhdGEuZmlsZVxuXHRcdFx0XHRcdFx0XHRpZih0aGlzLm9wdGlvbnMub25FcnJvcilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMub25FcnJvcihcIkNhbid0IHNlbmQgZmlsZTogXCIrZGF0YS5maWxlLGVycilcblx0XHRcdFx0XHRcdFx0aWYodGhpcy5tb25pdG9yICYmIGRhdGEuZW5kcG9pbnQpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5tb25pdG9yLnJlZ2lzdHJhdGVBUElFcnJvcihkYXRhLmVuZHBvaW50KTtcblxuXHRcdFx0XHRcdFx0XHR0aGlzLnNlbmRSZXNwb25zZShyZWYscmVzLHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjpEZWZhdWx0RXJyb3JzLkNBTlRfU0VORF9GSUxFLFxuXHRcdFx0XHRcdFx0XHRcdGRhdGE6bnVsbCxcblx0XHRcdFx0XHRcdFx0XHRodHRwU3RhdHVzOjUwMFxuXHRcdFx0XHRcdFx0XHR9LHJlcXVlc3RUaW1lLGRhdGEuZW5kcG9pbnQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fSlcblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0aWYoZGF0YS5yZWRpcmVjdCl7XG5cdFx0XHRcdFx0cmVzLnJlZGlyZWN0KGRhdGEucmVkaXJlY3QpO1xuXHRcdFx0XHRcdGlmKGxvZylcblx0XHRcdFx0XHRcdGxvZy5yZXNwb25zZSA9IHtyZWRpcmVjdDpkYXRhLnJlZGlyZWN0fVxuXHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHQvLyBzZXR1cCBoZWFkZXJzXG5cdFx0XHRcdFx0aWYoZGF0YS5oZWFkZXJzKXtcblx0XHRcdFx0XHRcdGZvcihsZXQgaSBpbiBkYXRhLmhlYWRlcnMpXG5cdFx0XHRcdFx0XHRcdHJlcy5zZXRIZWFkZXIoaSxkYXRhLmhlYWRlcnNbaV0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGRhdGEuZXJyb3IgJiYgZGF0YS5lcnJvci5odHRwU3RhdHVzICYmIGRhdGEuZXJyb3IuaHR0cFN0YXR1cz45OSlcblx0XHRcdFx0XHRcdHJlcy5zdGF0dXNDb2RlID0gZGF0YS5lcnJvci5odHRwU3RhdHVzXG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0cmVzLnN0YXR1c0NvZGU9ZGF0YS5odHRwU3RhdHVzID8/IDIwMFxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKGRhdGEucmF3UmVzcG9uc2Upe1xuXHRcdFx0XHRcdFx0cmVzLnNlbmQoZGF0YS5kYXRhKVxuXHRcdFx0XHRcdFx0aWYobG9nKVxuXHRcdFx0XHRcdFx0XHRsb2cucmVzcG9uc2UgPSB0aGlzLmNoZWNrRGF0YUxlbmd0aChkYXRhKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0cmVzLnNlbmQoZGF0YSk7XG5cdFx0XHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0XHRcdGxvZy5yZXNwb25zZSA9IHRoaXMuY2hlY2tEYXRhTGVuZ3RoKGRhdGEpXG5cblx0XHRcdFx0XHRcdGlmKGRhdGEuZXJyb3IgJiYgdGhpcy5tb25pdG9yKVxuXHRcdFx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUFQSUVycm9yKGRhdGEuZW5kcG9pbnQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGlmKHRoaXMub3B0aW9ucy5vbkVycm9yKVxuXHRcdFx0XHRcdHRoaXMub3B0aW9ucy5vbkVycm9yKFwiQ2FuJ3Qgc2VuZCByZXNwb25zZVwiLGUpO1xuXHRcdFx0XHRpZihsb2cpXG5cdFx0XHRcdFx0bG9nLmVycm9yPVwiQ2FuJ3Qgc2VuZCByZXNwb25zZVwiXG5cdFx0XHRcdGlmKHRoaXMubW9uaXRvcilcblx0XHRcdFx0XHR0aGlzLm1vbml0b3IucmVnaXN0cmF0ZUVycm9yKGRhdGEuZW5kcG9pbnQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHNob3cgbG9nXG5cdFx0aWYodGhpcy5vcHRpb25zLm9uTmV0d29ya0xvZyAmJiBsb2cpXG5cdFx0XHR0aGlzLm9wdGlvbnMub25OZXR3b3JrTG9nKGxvZylcbiAgICB9XG5cblxuXHRjaGVja0RhdGFMZW5ndGgoZGF0YTphbnkscmVzdWx0PzphbnksbHZsPzpudW1iZXIpOmFueXtcblx0XHRcblx0XHRpZighbHZsKVxuXHRcdFx0bHZsPTA7XG5cblx0XHRpZih0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIil7XG5cdFx0XHRpZih0eXBlb2YgZGF0YT09PVwic3RyaW5nXCIgJiYgZGF0YS5sZW5ndGg+MTAyNClcblx0XHRcdFx0cmV0dXJuIGRhdGEuc3Vic3RyaW5nKDAsMTAwMCkrXCIuLi4gKHRvdGFsOlwiICsgZGF0YS5sZW5ndGggKyBcIilcIlxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0aWYodHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpe1xuXHRcdFx0aWYoIXJlc3VsdClcblx0XHRcdFx0cmVzdWx0PXt9O1xuXHRcdFx0bGV0IGFycmNudCA9IDEwMDtcblx0XHRcdGZvcihsZXQgaSBpbiBkYXRhKXtcblx0XHRcdFx0cmVzdWx0W2ldPXRoaXMuY2hlY2tEYXRhTGVuZ3RoKGRhdGFbaV0scmVzdWx0W2ldLGx2bCsxKTtcblx0XHRcdFx0YXJyY250LS07XG5cdFx0XHRcdGlmKGFycmNudDw9MCl7XG5cdFx0XHRcdFx0cmVzdWx0W1wiLi4uXCJdPVwiLi4uIHRvdGFsOiBcIitBcnJheS5pc0FycmF5KGRhdGEpP2RhdGEubGVuZ3RoOk9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0ID8/IG51bGw7XG5cdH1cblxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "badmfck-api-server",
3
- "version": "2.5.0",
3
+ "version": "2.5.1",
4
4
  "description": "Simple API http server based on express",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",