@stemy/backend 2.9.7 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -46,9 +46,10 @@ export class Asset extends BaseEntity {
46
46
  params = params || {};
47
47
  // Get default crop info
48
48
  const crop = Asset.toCropRegion(meta.crop);
49
- // Return back the stream if there is no params and no default crop exists
50
- if (Object.keys(params).length == 0 && !crop)
49
+ // Return the stream if there is no params and no default crop exists
50
+ if ((meta === null || meta === void 0 ? void 0 : meta.extension) === "svg" || (Object.keys(params).length == 0 && !crop)) {
51
51
  return stream;
52
+ }
52
53
  // Parse params
53
54
  params.rotation = isNaN(params.rotation) ? 0 : Math.round(params.rotation / 90) * 90;
54
55
  params.canvasScaleX = isNaN(params.canvasScaleX) ? 1 : Number(params.canvasScaleX);
@@ -63,51 +64,43 @@ export class Asset extends BaseEntity {
63
64
  const cropBefore = Asset.toCropRegion(params.cropBefore || (params.crop ? meta.cropBefore : null));
64
65
  const cropAfter = Asset.toCropRegion(params.cropAfter || (params.crop ? meta.cropAfter : null));
65
66
  // Get metadata
66
- const imgMeta = yield sharp(buffer).metadata();
67
- let width = imgMeta.width;
68
- let height = imgMeta.height;
67
+ let img = sharp(buffer);
68
+ let { width, height } = yield img.metadata();
69
69
  // Crop before resize
70
70
  if (cropBefore) {
71
- buffer = yield sharp(buffer)
72
- .extract(cropBefore)
73
- .toBuffer();
74
71
  width = cropBefore.width;
75
72
  height = cropBefore.height;
73
+ img = img.extract(cropBefore);
76
74
  }
77
75
  else if (crop) {
78
- buffer = yield sharp(buffer)
79
- .extract(crop)
80
- .toBuffer();
81
76
  width = crop.width;
82
77
  height = crop.height;
78
+ img = img.extract(crop);
83
79
  }
84
80
  // Resize canvas
85
- if (params.canvasScaleX !== 1 || params.canvasScaleY !== 1) {
81
+ const canvasScaleX = (meta === null || meta === void 0 ? void 0 : meta.canvasScaleX) || 1;
82
+ const canvasScaleY = (meta === null || meta === void 0 ? void 0 : meta.canvasScaleY) || 1;
83
+ if (params.canvasScaleX !== canvasScaleX || params.canvasScaleY !== canvasScaleY) {
86
84
  width = Math.round(width * params.canvasScaleX);
87
85
  height = Math.round(height * params.canvasScaleY);
88
- buffer = yield sharp(buffer)
89
- .resize({ width, height, background: "#00000000", fit: "contain" })
90
- .toBuffer();
86
+ img = img.resize({ width, height, background: "#00000000", fit: "contain" });
91
87
  }
92
88
  // Resize image
93
89
  if (params.scaleX !== 1 || params.scaleY !== 1) {
94
90
  width = Math.round(width * params.scaleX);
95
91
  height = Math.round(height * params.scaleY);
96
- buffer = yield sharp(buffer)
97
- .resize({ width, height, background: "#00000000", fit: "fill" })
98
- .toBuffer();
92
+ img = img.resize({ width, height, background: "#00000000", fit: "fill" });
99
93
  }
100
94
  // Crop after resize
101
95
  if (cropAfter) {
102
- buffer = yield sharp(buffer)
103
- .extract(cropAfter)
104
- .toBuffer();
96
+ img = img.extract(cropAfter);
105
97
  }
106
98
  // Rotate
107
99
  if (params.rotation !== 0) {
108
- buffer = yield sharp(buffer).rotate(params.rotation).toBuffer();
100
+ buffer = yield img.toBuffer();
101
+ img = sharp(buffer).rotate(params.rotation);
109
102
  }
110
- return bufferToStream(buffer);
103
+ return bufferToStream(yield img.toBuffer());
111
104
  }
112
105
  catch (e) {
113
106
  console.log("Asset image conversion error", e);
@@ -158,4 +151,4 @@ export class Asset extends BaseEntity {
158
151
  });
159
152
  }
160
153
  }
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZW50aXRpZXMvYXNzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxNQUFnQixNQUFNLE9BQU8sQ0FBQztBQU1yQyxPQUFPLEVBQUMsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvRyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNyQixNQUFNLGFBQWEsR0FBRztJQUNsQixDQUFDLEVBQUUsUUFBUTtJQUNYLENBQUMsRUFBRSxRQUFRO0lBQ1gsQ0FBQyxFQUFFLFFBQVE7SUFDWCxDQUFDLEVBQUUsUUFBUTtDQUNkLENBQUM7QUFFRixNQUFNLE9BQU8sS0FBTSxTQUFRLFVBQWtCO0lBOEd6QyxZQUFZLEVBQVksRUFDWixJQUFxQixFQUNyQixVQUFzQixFQUNaLE1BQW9CO1FBQ3RDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRFYsV0FBTSxHQUFOLE1BQU0sQ0FBYztJQUUxQyxDQUFDO0lBakhTLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBaUM7UUFDM0QsSUFBSSxJQUFJLEdBQUcsUUFBMEIsQ0FBQztRQUN0QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNwQixJQUFJO2dCQUNBLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQWtCLENBQUMsQ0FBQzthQUN6QztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7U0FDSjtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FB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UUFBUSxDQUFDLFNBQTRCLElBQUk7O1lBQzNDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsQ0FBQztLQUFBO0lBRUssYUFBYSxDQUFDLE1BQTBCLEVBQUUsUUFBcUI7O1lBQ2pFLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRSxDQUFDO0tBQUE7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaGFycF8sIHtSZWdpb259IGZyb20gXCJzaGFycFwiO1xyXG5pbXBvcnQge1JlYWRhYmxlfSBmcm9tIFwic3RyZWFtXCI7XHJcbmltcG9ydCB7Q29sbGVjdGlvbiwgR3JpZEZTQnVja2V0fSBmcm9tIFwibW9uZ29kYlwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5cclxuaW1wb3J0IHtJQXNzZXQsIElBc3NldENyb3BJbmZvLCBJQXNzZXRJbWFnZVBhcmFtcywgSUFzc2V0TWV0YX0gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge2J1ZmZlclRvU3RyZWFtLCBkZWxldGVGcm9tQnVja2V0LCBpc0Jvb2xlYW4sIGlzSW50ZXJmYWNlLCBpc1N0cmluZywgc3RyZWFtVG9CdWZmZXJ9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQge0Jhc2VFbnRpdHl9IGZyb20gXCIuL2Jhc2UtZW50aXR5XCI7XHJcblxyXG5jb25zdCBzaGFycCA9IHNoYXJwXztcclxuY29uc3QgY3JvcEludGVyZmFjZSA9IHtcclxuICAgIHg6IFwibnVtYmVyXCIsXHJcbiAgICB5OiBcIm51bWJlclwiLFxyXG4gICAgdzogXCJudW1iZXJcIixcclxuICAgIGg6IFwibnVtYmVyXCJcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBBc3NldCBleHRlbmRzIEJhc2VFbnRpdHk8SUFzc2V0PiBpbXBsZW1lbnRzIElBc3NldCB7XHJcblxyXG4gICAgcHJvdGVjdGVkIHN0YXRpYyB0b0Nyb3BSZWdpb24oY3JvcEluZm86IHN0cmluZyB8IElBc3NldENyb3BJbmZvKTogUmVnaW9uIHtcclxuICAgICAgICBsZXQgY3JvcCA9IGNyb3BJbmZvIGFzIElBc3NldENyb3BJbmZvO1xyXG4gICAgICAgIGlmIChpc1N0cmluZyhjcm9wSW5mbykpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNyb3AgPSBKU09OLnBhcnNlKGNyb3BJbmZvIGFzIHN0cmluZyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXNJbnRlcmZhY2UoY3JvcCwgY3JvcEludGVyZmFjZSkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBNYXRoLnJvdW5kKGNyb3AudyksXHJcbiAgICAgICAgICAgIGhlaWdodDogTWF0aC5yb3VuZChjcm9wLmgpLFxyXG4gICAgICAgICAgICB0b3A6IE1hdGgucm91bmQoY3JvcC55KSxcclxuICAgICAgICAgICAgbGVmdDogTWF0aC5yb3VuZChjcm9wLngpXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc3RhdGljIGFzeW5jIHRvSW1hZ2Uoc3RyZWFtOiBSZWFkYWJsZSwgbWV0YT86IElBc3NldE1ldGEsIHBhcmFtcz86IElBc3NldEltYWdlUGFyYW1zKTogUHJvbWlzZTxSZWFkYWJsZT4ge1xyXG4gICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcclxuXHJcbiAgICAgICAgLy8gR2V0IGRlZmF1bHQgY3JvcCBpbmZvXHJcbiAgICAgICAgY29uc3QgY3JvcCA9IEFzc2V0LnRvQ3JvcFJlZ2lvbihtZXRhLmNyb3ApO1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gYmFjayB0aGUgc3RyZWFtIGlmIHRoZXJlIGlzIG5vIHBhcmFtcyBhbmQgbm8gZGVmYXVsdCBjcm9wIGV4aXN0c1xyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCA9PSAwICYmICFjcm9wKSByZXR1cm4gc3RyZWFtO1xyXG5cclxuICAgICAgICAvLyBQYXJzZSBwYXJhbXNcclxuICAgICAgICBwYXJhbXMucm90YXRpb24gPSBpc05hTihwYXJhbXMucm90YXRpb24pID8gMCA6IE1hdGgucm91bmQocGFyYW1zLnJvdGF0aW9uIC8gOTApICogOTA7XHJcbiAgICAgICAgcGFyYW1zLmNhbnZhc1NjYWxlWCA9IGlzTmFOKHBhcmFtcy5jYW52YXNTY2FsZVgpID8gMSA6IE51bWJlcihwYXJhbXMuY2FudmFzU2NhbGVYKTtcclxuICAgICAgICBwYXJhbXMuY2FudmFzU2NhbGVZID0gaXNOYU4ocGFyYW1zLmNhbnZhc1NjYWxlWSkgPyAxIDogTnVtYmVyKHBhcmFtcy5jYW52YXNTY2FsZVkpO1xyXG4gICAgICAgIHBhcmFtcy5zY2FsZVggPSBpc05hTihwYXJhbXMuc2NhbGVYKSA/IDEgOiBOdW1iZXIocGFyYW1zLnNjYWxlWCk7XHJcbiAgICAgICAgcGFyYW1zLnNjYWxlWSA9IGlzTmFOKHBhcmFtcy5zY2FsZVkpID8gMSA6IE51bWJlcihwYXJhbXMuc2NhbGVZKTtcclxuICAgICAgICBwYXJhbXMuY3JvcCA9IGlzQm9vbGVhbihwYXJhbXMuY3JvcCkgPyBwYXJhbXMuY3JvcCA6IHBhcmFtcy5jcm9wID09IFwidHJ1ZVwiO1xyXG5cclxuICAgICAgICAvLyBUcnkgdG8gbW9kaWZ5IGltYWdlXHJcbiAgICAgICAgbGV0IGJ1ZmZlciA9IGF3YWl0IHN0cmVhbVRvQnVmZmVyKHN0cmVhbSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gR2V0IGNyb3AgaW5mb1xyXG4gICAgICAgICAgICBjb25zdCBjcm9wQmVmb3JlID0gQXNzZXQudG9Dcm9wUmVnaW9uKHBhcmFtcy5jcm9wQmVmb3JlIHx8IChwYXJhbXMuY3JvcCA/IG1ldGEuY3JvcEJlZm9yZSA6IG51bGwpKTtcclxuICAgICAgICAgICAgY29uc3QgY3JvcEFmdGVyID0gQXNzZXQudG9Dcm9wUmVnaW9uKHBhcmFtcy5jcm9wQWZ0ZXIgfHwgKHBhcmFtcy5jcm9wID8gbWV0YS5jcm9wQWZ0ZXIgOiBudWxsKSk7XHJcbiAgICAgICAgICAgIC8vIEdldCBtZXRhZGF0YVxyXG4gICAgICAgICAgICBjb25zdCBpbWdNZXRhID0gYXdhaXQgc2hhcnAoYnVmZmVyKS5tZXRhZGF0YSgpO1xyXG4gICAgICAgICAgICBsZXQgd2lkdGggPSBpbWdNZXRhLndpZHRoO1xyXG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gaW1nTWV0YS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIC8vIENyb3AgYmVmb3JlIHJlc2l6ZVxyXG4gICAgICAgICAgICBpZiAoY3JvcEJlZm9yZSkge1xyXG4gICAgICAgICAgICAgICAgYnVmZmVyID0gYXdhaXQgc2hhcnAoYnVmZmVyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5leHRyYWN0KGNyb3BCZWZvcmUpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvQnVmZmVyKCk7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGNyb3BCZWZvcmUud2lkdGg7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBjcm9wQmVmb3JlLmhlaWdodDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjcm9wKSB7XHJcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBhd2FpdCBzaGFycChidWZmZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgLmV4dHJhY3QoY3JvcClcclxuICAgICAgICAgICAgICAgICAgICAudG9CdWZmZXIoKTtcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gY3JvcC53aWR0aDtcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IGNyb3AuaGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJlc2l6ZSBjYW52YXNcclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5jYW52YXNTY2FsZVggIT09IDEgfHwgcGFyYW1zLmNhbnZhc1NjYWxlWSAhPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLnJvdW5kKHdpZHRoICogcGFyYW1zLmNhbnZhc1NjYWxlWCk7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBNYXRoLnJvdW5kKGhlaWdodCAqIHBhcmFtcy5jYW52YXNTY2FsZVkpO1xyXG4gICAgICAgICAgICAgICAgYnVmZmVyID0gYXdhaXQgc2hhcnAoYnVmZmVyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXNpemUoe3dpZHRoLCBoZWlnaHQsIGJhY2tncm91bmQ6IFwiIzAwMDAwMDAwXCIsIGZpdDogXCJjb250YWluXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIC50b0J1ZmZlcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJlc2l6ZSBpbWFnZVxyXG4gICAgICAgICAgICBpZiAocGFyYW1zLnNjYWxlWCAhPT0gMSB8fCBwYXJhbXMuc2NhbGVZICE9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IE1hdGgucm91bmQod2lkdGggKiBwYXJhbXMuc2NhbGVYKTtcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IE1hdGgucm91bmQoaGVpZ2h0ICogcGFyYW1zLnNjYWxlWSk7XHJcbiAgICAgICAgICAgICAgICBidWZmZXIgPSBhd2FpdCBzaGFycChidWZmZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlc2l6ZSh7d2lkdGgsIGhlaWdodCwgYmFja2dyb3VuZDogXCIjMDAwMDAwMDBcIiwgZml0OiBcImZpbGxcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ3JvcCBhZnRlciByZXNpemVcclxuICAgICAgICAgICAgaWYgKGNyb3BBZnRlcikge1xyXG4gICAgICAgICAgICAgICAgYnVmZmVyID0gYXdhaXQgc2hhcnAoYnVmZmVyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5leHRyYWN0KGNyb3BBZnRlcilcclxuICAgICAgICAgICAgICAgICAgICAudG9CdWZmZXIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBSb3RhdGVcclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5yb3RhdGlvbiAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgYnVmZmVyID0gYXdhaXQgc2hhcnAoYnVmZmVyKS5yb3RhdGUocGFyYW1zLnJvdGF0aW9uKS50b0J1ZmZlcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBidWZmZXJUb1N0cmVhbShidWZmZXIpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJBc3NldCBpbWFnZSBjb252ZXJzaW9uIGVycm9yXCIsIGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gYnVmZmVyVG9TdHJlYW0oYnVmZmVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGZpbGVuYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5maWxlbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29udGVudFR5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmNvbnRlbnRUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtZXRhZGF0YSgpOiBJQXNzZXRNZXRhIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLm1ldGFkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzdHJlYW0oKTogUmVhZGFibGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJ1Y2tldC5vcGVuRG93bmxvYWRTdHJlYW0odGhpcy5tSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGlkOiBPYmplY3RJZCxcclxuICAgICAgICAgICAgICAgIGRhdGE6IFBhcnRpYWw8SUFzc2V0PixcclxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IENvbGxlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgYnVja2V0OiBHcmlkRlNCdWNrZXQpIHtcclxuICAgICAgICBzdXBlcihpZCwgZGF0YSwgY29sbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdW5saW5rKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIGRlbGV0ZUZyb21CdWNrZXQodGhpcy5idWNrZXQsIHRoaXMubUlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCdWZmZXIoKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgICAgICByZXR1cm4gc3RyZWFtVG9CdWZmZXIodGhpcy5zdHJlYW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRvd25sb2FkKG1ldGFkYXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICBtZXRhZGF0YSA9IE9iamVjdC5hc3NpZ24odGhpcy5tZXRhZGF0YSwgbWV0YWRhdGEgfHwge30pO1xyXG4gICAgICAgIG1ldGFkYXRhLmRvd25sb2FkQ291bnQgPSBpc05hTihtZXRhZGF0YS5kb3dubG9hZENvdW50KSB8fCAhbWV0YWRhdGEuZmlyc3REb3dubG9hZFxyXG4gICAgICAgICAgICA/IDFcclxuICAgICAgICAgICAgOiBtZXRhZGF0YS5kb3dubG9hZENvdW50ICsgMTtcclxuICAgICAgICBtZXRhZGF0YS5maXJzdERvd25sb2FkID0gbWV0YWRhdGEuZmlyc3REb3dubG9hZCB8fCBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIG1ldGFkYXRhLmxhc3REb3dubG9hZCA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLnVwZGF0ZU9uZSh7X2lkOiB0aGlzLm1JZH0sIHskc2V0OiB7bWV0YWRhdGF9fSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEltYWdlKHBhcmFtczogSUFzc2V0SW1hZ2VQYXJhbXMgPSBudWxsKTogUHJvbWlzZTxSZWFkYWJsZT4ge1xyXG4gICAgICAgIHJldHVybiBBc3NldC50b0ltYWdlKHRoaXMuc3RyZWFtLCB0aGlzLm1ldGFkYXRhLCBwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRvd25sb2FkSW1hZ2UocGFyYW1zPzogSUFzc2V0SW1hZ2VQYXJhbXMsIG1ldGFkYXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICByZXR1cm4gQXNzZXQudG9JbWFnZShhd2FpdCB0aGlzLmRvd25sb2FkKG1ldGFkYXRhKSwgdGhpcy5tZXRhZGF0YSwgcGFyYW1zKTtcclxuICAgIH1cclxufVxyXG4iXX0=
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZW50aXRpZXMvYXNzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxNQUFnQixNQUFNLE9BQU8sQ0FBQztBQU1yQyxPQUFPLEVBQUMsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMvRyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNyQixNQUFNLGFBQWEsR0FBRztJQUNsQixDQUFDLEVBQUUsUUFBUTtJQUNYLENBQUMsRUFBRSxRQUFRO0lBQ1gsQ0FBQyxFQUFFLFFBQVE7SUFDWCxDQUFDLEVBQUUsUUFBUTtDQUNkLENBQUM7QUFFRixNQUFNLE9BQU8sS0FBTSxTQUFRLFVBQWtCO0lBd0d6QyxZQUFZLEVBQVksRUFDWixJQUFxQixFQUNyQixVQUFzQixFQUNaLE1BQW9CO1FBQ3RDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRFYsV0FBTSxHQUFOLE1BQU0sQ0FBYztJQUUxQyxDQUFDO0lBM0dELE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBaUM7UUFDakQsSUFBSSxJQUFJLEdBQUcsUUFBMEIsQ0FBQztRQUN0QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNwQixJQUFJO2dCQUNBLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQWtCLENBQUMsQ0FBQzthQUN6QztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7U0FDSjtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FB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QztZQUNyRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkIsQ0FBQztLQUFBO0lBRUssUUFBUSxDQUFDLFNBQTRCLElBQUk7O1lBQzNDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsQ0FBQztLQUFBO0lBRUssYUFBYSxDQUFDLE1BQTBCLEVBQUUsUUFBcUI7O1lBQ2pFLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRSxDQUFDO0tBQUE7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaGFycF8sIHtSZWdpb259IGZyb20gXCJzaGFycFwiO1xyXG5pbXBvcnQge1JlYWRhYmxlfSBmcm9tIFwic3RyZWFtXCI7XHJcbmltcG9ydCB7Q29sbGVjdGlvbiwgR3JpZEZTQnVja2V0fSBmcm9tIFwibW9uZ29kYlwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5cclxuaW1wb3J0IHtJQXNzZXQsIElBc3NldENyb3BJbmZvLCBJQXNzZXRJbWFnZVBhcmFtcywgSUFzc2V0TWV0YX0gZnJvbSBcIi4uLy4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge2J1ZmZlclRvU3RyZWFtLCBkZWxldGVGcm9tQnVja2V0LCBpc0Jvb2xlYW4sIGlzSW50ZXJmYWNlLCBpc1N0cmluZywgc3RyZWFtVG9CdWZmZXJ9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQge0Jhc2VFbnRpdHl9IGZyb20gXCIuL2Jhc2UtZW50aXR5XCI7XHJcblxyXG5jb25zdCBzaGFycCA9IHNoYXJwXztcclxuY29uc3QgY3JvcEludGVyZmFjZSA9IHtcclxuICAgIHg6IFwibnVtYmVyXCIsXHJcbiAgICB5OiBcIm51bWJlclwiLFxyXG4gICAgdzogXCJudW1iZXJcIixcclxuICAgIGg6IFwibnVtYmVyXCJcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBBc3NldCBleHRlbmRzIEJhc2VFbnRpdHk8SUFzc2V0PiBpbXBsZW1lbnRzIElBc3NldCB7XHJcblxyXG4gICAgc3RhdGljIHRvQ3JvcFJlZ2lvbihjcm9wSW5mbzogc3RyaW5nIHwgSUFzc2V0Q3JvcEluZm8pOiBSZWdpb24ge1xyXG4gICAgICAgIGxldCBjcm9wID0gY3JvcEluZm8gYXMgSUFzc2V0Q3JvcEluZm87XHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKGNyb3BJbmZvKSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY3JvcCA9IEpTT04ucGFyc2UoY3JvcEluZm8gYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc0ludGVyZmFjZShjcm9wLCBjcm9wSW50ZXJmYWNlKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgd2lkdGg6IE1hdGgucm91bmQoY3JvcC53KSxcclxuICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLnJvdW5kKGNyb3AuaCksXHJcbiAgICAgICAgICAgIHRvcDogTWF0aC5yb3VuZChjcm9wLnkpLFxyXG4gICAgICAgICAgICBsZWZ0OiBNYXRoLnJvdW5kKGNyb3AueClcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBhc3luYyB0b0ltYWdlKHN0cmVhbTogUmVhZGFibGUsIG1ldGE/OiBJQXNzZXRNZXRhLCBwYXJhbXM/OiBJQXNzZXRJbWFnZVBhcmFtcyk6IFByb21pc2U8UmVhZGFibGU+IHtcclxuICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XHJcblxyXG4gICAgICAgIC8vIEdldCBkZWZhdWx0IGNyb3AgaW5mb1xyXG4gICAgICAgIGNvbnN0IGNyb3AgPSBBc3NldC50b0Nyb3BSZWdpb24obWV0YS5jcm9wKTtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBzdHJlYW0gaWYgdGhlcmUgaXMgbm8gcGFyYW1zIGFuZCBubyBkZWZhdWx0IGNyb3AgZXhpc3RzXHJcbiAgICAgICAgaWYgKG1ldGE/LmV4dGVuc2lvbiA9PT0gXCJzdmdcIiB8fCAoT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPT0gMCAmJiAhY3JvcCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0cmVhbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFBhcnNlIHBhcmFtc1xyXG4gICAgICAgIHBhcmFtcy5yb3RhdGlvbiA9IGlzTmFOKHBhcmFtcy5yb3RhdGlvbikgPyAwIDogTWF0aC5yb3VuZChwYXJhbXMucm90YXRpb24gLyA5MCkgKiA5MDtcclxuICAgICAgICBwYXJhbXMuY2FudmFzU2NhbGVYID0gaXNOYU4ocGFyYW1zLmNhbnZhc1NjYWxlWCkgPyAxIDogTnVtYmVyKHBhcmFtcy5jYW52YXNTY2FsZVgpO1xyXG4gICAgICAgIHBhcmFtcy5jYW52YXNTY2FsZVkgPSBpc05hTihwYXJhbXMuY2FudmFzU2NhbGVZKSA/IDEgOiBOdW1iZXIocGFyYW1zLmNhbnZhc1NjYWxlWSk7XHJcbiAgICAgICAgcGFyYW1zLnNjYWxlWCA9IGlzTmFOKHBhcmFtcy5zY2FsZVgpID8gMSA6IE51bWJlcihwYXJhbXMuc2NhbGVYKTtcclxuICAgICAgICBwYXJhbXMuc2NhbGVZID0gaXNOYU4ocGFyYW1zLnNjYWxlWSkgPyAxIDogTnVtYmVyKHBhcmFtcy5zY2FsZVkpO1xyXG4gICAgICAgIHBhcmFtcy5jcm9wID0gaXNCb29sZWFuKHBhcmFtcy5jcm9wKSA/IHBhcmFtcy5jcm9wIDogcGFyYW1zLmNyb3AgPT0gXCJ0cnVlXCI7XHJcblxyXG4gICAgICAgIC8vIFRyeSB0byBtb2RpZnkgaW1hZ2VcclxuICAgICAgICBsZXQgYnVmZmVyID0gYXdhaXQgc3RyZWFtVG9CdWZmZXIoc3RyZWFtKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBHZXQgY3JvcCBpbmZvXHJcbiAgICAgICAgICAgIGNvbnN0IGNyb3BCZWZvcmUgPSBBc3NldC50b0Nyb3BSZWdpb24ocGFyYW1zLmNyb3BCZWZvcmUgfHwgKHBhcmFtcy5jcm9wID8gbWV0YS5jcm9wQmVmb3JlIDogbnVsbCkpO1xyXG4gICAgICAgICAgICBjb25zdCBjcm9wQWZ0ZXIgPSBBc3NldC50b0Nyb3BSZWdpb24ocGFyYW1zLmNyb3BBZnRlciB8fCAocGFyYW1zLmNyb3AgPyBtZXRhLmNyb3BBZnRlciA6IG51bGwpKTtcclxuICAgICAgICAgICAgLy8gR2V0IG1ldGFkYXRhXHJcbiAgICAgICAgICAgIGxldCBpbWcgPSBzaGFycChidWZmZXIpO1xyXG4gICAgICAgICAgICBsZXQge3dpZHRoLCBoZWlnaHR9ID0gYXdhaXQgaW1nLm1ldGFkYXRhKCk7XHJcbiAgICAgICAgICAgIC8vIENyb3AgYmVmb3JlIHJlc2l6ZVxyXG4gICAgICAgICAgICBpZiAoY3JvcEJlZm9yZSkge1xyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBjcm9wQmVmb3JlLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gY3JvcEJlZm9yZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBpbWcgPSBpbWcuZXh0cmFjdChjcm9wQmVmb3JlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjcm9wKSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IGNyb3Aud2lkdGg7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBjcm9wLmhlaWdodDtcclxuICAgICAgICAgICAgICAgIGltZyA9IGltZy5leHRyYWN0KGNyb3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJlc2l6ZSBjYW52YXNcclxuICAgICAgICAgICAgY29uc3QgY2FudmFzU2NhbGVYID0gbWV0YT8uY2FudmFzU2NhbGVYIHx8IDE7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbnZhc1NjYWxlWSA9IG1ldGE/LmNhbnZhc1NjYWxlWSB8fCAxO1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmNhbnZhc1NjYWxlWCAhPT0gY2FudmFzU2NhbGVYIHx8IHBhcmFtcy5jYW52YXNTY2FsZVkgIT09IGNhbnZhc1NjYWxlWSkge1xyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLnJvdW5kKHdpZHRoICogcGFyYW1zLmNhbnZhc1NjYWxlWCk7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBNYXRoLnJvdW5kKGhlaWdodCAqIHBhcmFtcy5jYW52YXNTY2FsZVkpO1xyXG4gICAgICAgICAgICAgICAgaW1nID0gaW1nLnJlc2l6ZSh7d2lkdGgsIGhlaWdodCwgYmFja2dyb3VuZDogXCIjMDAwMDAwMDBcIiwgZml0OiBcImNvbnRhaW5cIn0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJlc2l6ZSBpbWFnZVxyXG4gICAgICAgICAgICBpZiAocGFyYW1zLnNjYWxlWCAhPT0gMSB8fCBwYXJhbXMuc2NhbGVZICE9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IE1hdGgucm91bmQod2lkdGggKiBwYXJhbXMuc2NhbGVYKTtcclxuICAgICAgICAgICAgICAgIGhlaWdodCA9IE1hdGgucm91bmQoaGVpZ2h0ICogcGFyYW1zLnNjYWxlWSk7XHJcbiAgICAgICAgICAgICAgICBpbWcgPSBpbWcucmVzaXplKHt3aWR0aCwgaGVpZ2h0LCBiYWNrZ3JvdW5kOiBcIiMwMDAwMDAwMFwiLCBmaXQ6IFwiZmlsbFwifSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ3JvcCBhZnRlciByZXNpemVcclxuICAgICAgICAgICAgaWYgKGNyb3BBZnRlcikge1xyXG4gICAgICAgICAgICAgICAgaW1nID0gaW1nLmV4dHJhY3QoY3JvcEFmdGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBSb3RhdGVcclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5yb3RhdGlvbiAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgYnVmZmVyID0gYXdhaXQgaW1nLnRvQnVmZmVyKCk7XHJcbiAgICAgICAgICAgICAgICBpbWcgPSBzaGFycChidWZmZXIpLnJvdGF0ZShwYXJhbXMucm90YXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBidWZmZXJUb1N0cmVhbShhd2FpdCBpbWcudG9CdWZmZXIoKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFzc2V0IGltYWdlIGNvbnZlcnNpb24gZXJyb3JcIiwgZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBidWZmZXJUb1N0cmVhbShidWZmZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZmlsZW5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmZpbGVuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb250ZW50VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuY29udGVudFR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1ldGFkYXRhKCk6IElBc3NldE1ldGEge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubWV0YWRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHN0cmVhbSgpOiBSZWFkYWJsZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVja2V0Lm9wZW5Eb3dubG9hZFN0cmVhbSh0aGlzLm1JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoaWQ6IE9iamVjdElkLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogUGFydGlhbDxJQXNzZXQ+LFxyXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbjogQ29sbGVjdGlvbixcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBidWNrZXQ6IEdyaWRGU0J1Y2tldCkge1xyXG4gICAgICAgIHN1cGVyKGlkLCBkYXRhLCBjb2xsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1bmxpbmsoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gZGVsZXRlRnJvbUJ1Y2tldCh0aGlzLmJ1Y2tldCwgdGhpcy5tSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJ1ZmZlcigpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gICAgICAgIHJldHVybiBzdHJlYW1Ub0J1ZmZlcih0aGlzLnN0cmVhbSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZG93bmxvYWQobWV0YWRhdGE/OiBJQXNzZXRNZXRhKTogUHJvbWlzZTxSZWFkYWJsZT4ge1xyXG4gICAgICAgIG1ldGFkYXRhID0gT2JqZWN0LmFzc2lnbih0aGlzLm1ldGFkYXRhLCBtZXRhZGF0YSB8fCB7fSk7XHJcbiAgICAgICAgbWV0YWRhdGEuZG93bmxvYWRDb3VudCA9IGlzTmFOKG1ldGFkYXRhLmRvd25sb2FkQ291bnQpIHx8ICFtZXRhZGF0YS5maXJzdERvd25sb2FkXHJcbiAgICAgICAgICAgID8gMVxyXG4gICAgICAgICAgICA6IG1ldGFkYXRhLmRvd25sb2FkQ291bnQgKyAxO1xyXG4gICAgICAgIG1ldGFkYXRhLmZpcnN0RG93bmxvYWQgPSBtZXRhZGF0YS5maXJzdERvd25sb2FkIHx8IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgbWV0YWRhdGEubGFzdERvd25sb2FkID0gbmV3IERhdGUoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24udXBkYXRlT25lKHtfaWQ6IHRoaXMubUlkfSwgeyRzZXQ6IHttZXRhZGF0YX19KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0SW1hZ2UocGFyYW1zOiBJQXNzZXRJbWFnZVBhcmFtcyA9IG51bGwpOiBQcm9taXNlPFJlYWRhYmxlPiB7XHJcbiAgICAgICAgcmV0dXJuIEFzc2V0LnRvSW1hZ2UodGhpcy5zdHJlYW0sIHRoaXMubWV0YWRhdGEsIHBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZG93bmxvYWRJbWFnZShwYXJhbXM/OiBJQXNzZXRJbWFnZVBhcmFtcywgbWV0YWRhdGE/OiBJQXNzZXRNZXRhKTogUHJvbWlzZTxSZWFkYWJsZT4ge1xyXG4gICAgICAgIHJldHVybiBBc3NldC50b0ltYWdlKGF3YWl0IHRoaXMuZG93bmxvYWQobWV0YWRhdGEpLCB0aGlzLm1ldGFkYXRhLCBwYXJhbXMpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -48,7 +48,7 @@ export class LazyAsset extends BaseEntity {
48
48
  this.progresses.get(this.progressId).then(p => {
49
49
  p === null || p === void 0 ? void 0 : p.cancel();
50
50
  });
51
- this.startWorkingOnAsset().then(() => {
51
+ this.startWorkingOnAsset(false).then(() => {
52
52
  console.log(`Started working on lazy asset: ${this.id}`);
53
53
  }).catch(reason => {
54
54
  console.log(`Can't start working on lazy asset: ${this.id}\nReason: ${reason}`);
@@ -67,7 +67,7 @@ export class LazyAsset extends BaseEntity {
67
67
  yield this.progresses.waitToFinish(this.progressId);
68
68
  return this.loadAsset();
69
69
  }
70
- yield this.startWorkingOnAsset();
70
+ yield this.startWorkingOnAsset(true);
71
71
  return this.loadAsset();
72
72
  });
73
73
  }
@@ -78,13 +78,13 @@ export class LazyAsset extends BaseEntity {
78
78
  return asset;
79
79
  });
80
80
  }
81
- startWorkingOnAsset() {
81
+ startWorkingOnAsset(fromLoad) {
82
82
  return __awaiter(this, void 0, void 0, function* () {
83
83
  this.data.progressId = (yield this.progresses.create()).id;
84
84
  this.data.assetId = null;
85
85
  yield this.save();
86
- yield this.jobMan.enqueueWithName(this.data.jobName, Object.assign(Object.assign({}, this.data.jobParams), { lazyId: this.id }));
86
+ yield this.jobMan.enqueueWithName(this.data.jobName, Object.assign(Object.assign({}, this.data.jobParams), { lazyId: this.id, fromLoad }));
87
87
  });
88
88
  }
89
89
  }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1hc3NldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9lbnRpdGllcy9sYXp5LWFzc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHOUIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBSTdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsTUFBTSxPQUFPLFNBQVUsU0FBUSxVQUFzQjtJQXNCakQsWUFBWSxFQUFZLEVBQ1osSUFBeUIsRUFDekIsVUFBc0IsRUFDWixNQUFjLEVBQ2QsVUFBc0IsRUFDdEIsTUFBa0I7UUFDcEMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFIVixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFZO0lBRXhDLENBQUM7SUEzQkQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBV0ssTUFBTTs7WUFDUixNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDbEIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQzthQUNwRDtZQUNELE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDNUUsQ0FBQztLQUFBO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMxQyxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsTUFBTSxHQUFHO1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0QsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLElBQUksQ0FBQyxFQUFFLGFBQWEsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNwRixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVLLFNBQVM7O1lBQ1gsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUM5QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDekM7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNwRCxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzthQUMzQjtZQUNELE1BQU0sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDakMsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUIsQ0FBQztLQUFBO0lBRUssVUFBVSxDQUFDLEtBQWE7O1lBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztLQUFBO0lBRWUsbUJBQW1COztZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDekIsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sa0NBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUUsQ0FBQztRQUNwRyxDQUFDO0tBQUE7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29sbGVjdGlvbn0gZnJvbSBcIm1vbmdvZGJcIjtcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuXHJcbmltcG9ydCB7SUFzc2V0LCBJTGF6eUFzc2V0fSBmcm9tIFwiLi4vLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7ZGVsZXRlRnJvbUJ1Y2tldH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XHJcbmltcG9ydCB7QXNzZXRzfSBmcm9tIFwiLi4vYXNzZXRzXCI7XHJcbmltcG9ydCB7Sm9iTWFuYWdlcn0gZnJvbSBcIi4uL2pvYi1tYW5hZ2VyXCI7XHJcbmltcG9ydCB7UHJvZ3Jlc3Nlc30gZnJvbSBcIi4uL3Byb2dyZXNzZXNcIjtcclxuaW1wb3J0IHtCYXNlRW50aXR5fSBmcm9tIFwiLi9iYXNlLWVudGl0eVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIExhenlBc3NldCBleHRlbmRzIEJhc2VFbnRpdHk8SUxhenlBc3NldD4gaW1wbGVtZW50cyBJTGF6eUFzc2V0IHtcclxuXHJcbiAgICBnZXQgam9iTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuam9iTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgam9iUGFyYW1zKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5qb2JQYXJhbXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGpvYlF1ZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuam9iUXVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9ncmVzc0lkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5wcm9ncmVzc0lkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBhc3NldElkKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5hc3NldElkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGlkOiBPYmplY3RJZCxcclxuICAgICAgICAgICAgICAgIGRhdGE6IFBhcnRpYWw8SUxhenlBc3NldD4sXHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIGFzc2V0czogQXNzZXRzLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHByb2dyZXNzZXM6IFByb2dyZXNzZXMsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgam9iTWFuOiBKb2JNYW5hZ2VyKSB7XHJcbiAgICAgICAgc3VwZXIoaWQsIGRhdGEsIGNvbGxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVubGluaygpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZCgpO1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9ncmVzc0lkKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGVPbmUoe19pZDogdGhpcy5tSWR9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRlbGV0ZUZyb21CdWNrZXQodGhpcy5hc3NldHMuYnVja2V0LCBuZXcgT2JqZWN0SWQodGhpcy5hc3NldElkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRXb3JraW5nKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubG9hZCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kZWxldGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3Nlcy5nZXQodGhpcy5wcm9ncmVzc0lkKS50aGVuKHAgPT4ge1xyXG4gICAgICAgICAgICAgICAgcD8uY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2luZ09uQXNzZXQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdGFydGVkIHdvcmtpbmcgb24gbGF6eSBhc3NldDogJHt0aGlzLmlkfWApO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYENhbid0IHN0YXJ0IHdvcmtpbmcgb24gbGF6eSBhc3NldDogJHt0aGlzLmlkfVxcblJlYXNvbjogJHtyZWFzb259YCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRBc3NldCgpOiBQcm9taXNlPElBc3NldD4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZWQpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLmFzc2V0SWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNzZXRzLnJlYWQodGhpcy5hc3NldElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NJZCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2dyZXNzZXMud2FpdFRvRmluaXNoKHRoaXMucHJvZ3Jlc3NJZCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRBc3NldCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0V29ya2luZ09uQXNzZXQoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkQXNzZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3cml0ZUFzc2V0KGFzc2V0OiBJQXNzZXQpOiBQcm9taXNlPElBc3NldD4ge1xyXG4gICAgICAgIHRoaXMuZGF0YS5hc3NldElkID0gYXNzZXQuaWQ7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgICAgICAgcmV0dXJuIGFzc2V0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBzdGFydFdvcmtpbmdPbkFzc2V0KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhLnByb2dyZXNzSWQgPSAoYXdhaXQgdGhpcy5wcm9ncmVzc2VzLmNyZWF0ZSgpKS5pZDtcclxuICAgICAgICB0aGlzLmRhdGEuYXNzZXRJZCA9IG51bGw7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5qb2JNYW4uZW5xdWV1ZVdpdGhOYW1lKHRoaXMuZGF0YS5qb2JOYW1lLCB7Li4udGhpcy5kYXRhLmpvYlBhcmFtcywgbGF6eUlkOiB0aGlzLmlkfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1hc3NldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9lbnRpdGllcy9sYXp5LWFzc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHOUIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBSTdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsTUFBTSxPQUFPLFNBQVUsU0FBUSxVQUFzQjtJQXNCakQsWUFBWSxFQUFZLEVBQ1osSUFBeUIsRUFDekIsVUFBc0IsRUFDWixNQUFjLEVBQ2QsVUFBc0IsRUFDdEIsTUFBa0I7UUFDcEMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFIVixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFZO0lBRXhDLENBQUM7SUEzQkQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBV0ssTUFBTTs7WUFDUixNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixJQUFJ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cnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5cclxuaW1wb3J0IHtJQXNzZXQsIElMYXp5QXNzZXR9IGZyb20gXCIuLi8uLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtkZWxldGVGcm9tQnVja2V0fSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcclxuaW1wb3J0IHtBc3NldHN9IGZyb20gXCIuLi9hc3NldHNcIjtcclxuaW1wb3J0IHtKb2JNYW5hZ2VyfSBmcm9tIFwiLi4vam9iLW1hbmFnZXJcIjtcclxuaW1wb3J0IHtQcm9ncmVzc2VzfSBmcm9tIFwiLi4vcHJvZ3Jlc3Nlc1wiO1xyXG5pbXBvcnQge0Jhc2VFbnRpdHl9IGZyb20gXCIuL2Jhc2UtZW50aXR5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTGF6eUFzc2V0IGV4dGVuZHMgQmFzZUVudGl0eTxJTGF6eUFzc2V0PiBpbXBsZW1lbnRzIElMYXp5QXNzZXQge1xyXG5cclxuICAgIGdldCBqb2JOYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5qb2JOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBqb2JQYXJhbXMoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmpvYlBhcmFtcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgam9iUXVlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5qb2JRdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHByb2dyZXNzSWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnByb2dyZXNzSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGFzc2V0SWQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmFzc2V0SWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoaWQ6IE9iamVjdElkLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogUGFydGlhbDxJTGF6eUFzc2V0PixcclxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IENvbGxlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgYXNzZXRzOiBBc3NldHMsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgcHJvZ3Jlc3NlczogUHJvZ3Jlc3NlcyxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBqb2JNYW46IEpvYk1hbmFnZXIpIHtcclxuICAgICAgICBzdXBlcihpZCwgZGF0YSwgY29sbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdW5saW5rKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkKCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLnByb2dyZXNzSWQpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmRlbGV0ZU9uZSh7X2lkOiB0aGlzLm1JZH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGVsZXRlRnJvbUJ1Y2tldCh0aGlzLmFzc2V0cy5idWNrZXQsIG5ldyBPYmplY3RJZCh0aGlzLmFzc2V0SWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydFdvcmtpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sb2FkKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRlbGV0ZWQpIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc2VzLmdldCh0aGlzLnByb2dyZXNzSWQpLnRoZW4ocCA9PiB7XHJcbiAgICAgICAgICAgICAgICBwPy5jYW5jZWwoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRXb3JraW5nT25Bc3NldChmYWxzZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU3RhcnRlZCB3b3JraW5nIG9uIGxhenkgYXNzZXQ6ICR7dGhpcy5pZH1gKTtcclxuICAgICAgICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW4ndCBzdGFydCB3b3JraW5nIG9uIGxhenkgYXNzZXQ6ICR7dGhpcy5pZH1cXG5SZWFzb246ICR7cmVhc29ufWApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkQXNzZXQoKTogUHJvbWlzZTxJQXNzZXQ+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmxvYWQoKTtcclxuICAgICAgICBpZiAodGhpcy5kZWxldGVkKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5hc3NldElkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzc2V0cy5yZWFkKHRoaXMuYXNzZXRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnByb2dyZXNzSWQpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9ncmVzc2VzLndhaXRUb0ZpbmlzaCh0aGlzLnByb2dyZXNzSWQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkQXNzZXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zdGFydFdvcmtpbmdPbkFzc2V0KHRydWUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRBc3NldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdyaXRlQXNzZXQoYXNzZXQ6IElBc3NldCk6IFByb21pc2U8SUFzc2V0PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhLmFzc2V0SWQgPSBhc3NldC5pZDtcclxuICAgICAgICBhd2FpdCB0aGlzLnNhdmUoKTtcclxuICAgICAgICByZXR1cm4gYXNzZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIHN0YXJ0V29ya2luZ09uQXNzZXQoZnJvbUxvYWQ6IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YS5wcm9ncmVzc0lkID0gKGF3YWl0IHRoaXMucHJvZ3Jlc3Nlcy5jcmVhdGUoKSkuaWQ7XHJcbiAgICAgICAgdGhpcy5kYXRhLmFzc2V0SWQgPSBudWxsO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuam9iTWFuLmVucXVldWVXaXRoTmFtZSh0aGlzLmRhdGEuam9iTmFtZSwgey4uLnRoaXMuZGF0YS5qb2JQYXJhbXMsIGxhenlJZDogdGhpcy5pZCwgZnJvbUxvYWR9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,65 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { ObjectId } from "bson";
11
+ import { bufferToStream } from "../../utils";
12
+ import { Asset } from "./asset";
13
+ export class TempAsset {
14
+ constructor(buffer, filename, contentType, metadata) {
15
+ this.buffer = buffer;
16
+ this.filename = filename;
17
+ this.contentType = contentType;
18
+ this.metadata = metadata;
19
+ this.id = new ObjectId().toHexString();
20
+ }
21
+ get stream() {
22
+ return bufferToStream(this.buffer);
23
+ }
24
+ unlink() {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ throw new Error(`Temp asset '${this.id}' can not be removed!`);
27
+ });
28
+ }
29
+ getBuffer() {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ return this.buffer;
32
+ });
33
+ }
34
+ download(metadata) {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ return this.stream;
37
+ });
38
+ }
39
+ downloadImage(params, metadata) {
40
+ Object.assign(this.metadata, metadata || {});
41
+ return Asset.toImage(this.stream, this.metadata, params);
42
+ }
43
+ getImage(params) {
44
+ return this.downloadImage(params);
45
+ }
46
+ save() {
47
+ return __awaiter(this, void 0, void 0, function* () {
48
+ return this;
49
+ });
50
+ }
51
+ load() {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ return this;
54
+ });
55
+ }
56
+ toJSON() {
57
+ return {
58
+ id: this.id,
59
+ filename: this.filename,
60
+ contentType: this.contentType,
61
+ metadata: this.metadata
62
+ };
63
+ }
64
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcC1hc3NldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9lbnRpdGllcy90ZW1wLWFzc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHOUIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRTlCLE1BQU0sT0FBTyxTQUFTO0lBUWxCLFlBQXNCLE1BQWMsRUFBVyxRQUFnQixFQUFXLFdBQW1CLEVBQVcsUUFBb0I7UUFBdEcsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFXLGFBQVEsR0FBUixRQUFRLENBQVE7UUFBVyxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUFXLGFBQVEsR0FBUixRQUFRLENBQVk7UUFDeEgsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFORCxJQUFJLE1BQU07UUFDTixPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQU1LLE1BQU07O1lBQ1IsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLElBQUksQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDbkUsQ0FBQztLQUFBO0lBRUssU0FBUzs7WUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkIsQ0FBQztLQUFBO0lBRUssUUFBUSxDQUFDLFFBQXFCOztZQUNoQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkIsQ0FBQztLQUFBO0lBRUQsYUFBYSxDQUFDLE1BQTBCLEVBQUUsUUFBcUI7UUFDM0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3QyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxRQUFRLENBQUMsTUFBMEI7UUFDL0IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFSyxJQUFJOztZQUNOLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQUVLLElBQUk7O1lBQ04sT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztLQUFBO0lBRUQsTUFBTTtRQUNGLE9BQU87WUFDSCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUMxQixDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFkYWJsZX0gZnJvbSBcInN0cmVhbVwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5pbXBvcnQgQnVmZmVyIGZyb20gXCJidWZmZXJcIjtcclxuaW1wb3J0IHtJQXNzZXQsIElBc3NldEltYWdlUGFyYW1zLCBJQXNzZXRNZXRhfSBmcm9tIFwiLi4vLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7YnVmZmVyVG9TdHJlYW19IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQge0Fzc2V0fSBmcm9tIFwiLi9hc3NldFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRlbXBBc3NldCBpbXBsZW1lbnRzIElBc3NldCB7XHJcblxyXG4gICAgcmVhZG9ubHkgaWQ6IHN0cmluZztcclxuXHJcbiAgICBnZXQgc3RyZWFtKCk6IFJlYWRhYmxlIHtcclxuICAgICAgICByZXR1cm4gYnVmZmVyVG9TdHJlYW0odGhpcy5idWZmZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBidWZmZXI6IEJ1ZmZlciwgcmVhZG9ubHkgZmlsZW5hbWU6IHN0cmluZywgcmVhZG9ubHkgY29udGVudFR5cGU6IHN0cmluZywgcmVhZG9ubHkgbWV0YWRhdGE6IElBc3NldE1ldGEpIHtcclxuICAgICAgICB0aGlzLmlkID0gbmV3IE9iamVjdElkKCkudG9IZXhTdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1bmxpbmsoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbXAgYXNzZXQgJyR7dGhpcy5pZH0nIGNhbiBub3QgYmUgcmVtb3ZlZCFgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRCdWZmZXIoKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5idWZmZXI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZG93bmxvYWQobWV0YWRhdGE/OiBJQXNzZXRNZXRhKTogUHJvbWlzZTxSZWFkYWJsZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbTtcclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZEltYWdlKHBhcmFtcz86IElBc3NldEltYWdlUGFyYW1zLCBtZXRhZGF0YT86IElBc3NldE1ldGEpOiBQcm9taXNlPFJlYWRhYmxlPiB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLm1ldGFkYXRhLCBtZXRhZGF0YSB8fCB7fSk7XHJcbiAgICAgICAgcmV0dXJuIEFzc2V0LnRvSW1hZ2UodGhpcy5zdHJlYW0sIHRoaXMubWV0YWRhdGEsIHBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW1hZ2UocGFyYW1zPzogSUFzc2V0SW1hZ2VQYXJhbXMpOiBQcm9taXNlPFJlYWRhYmxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZG93bmxvYWRJbWFnZShwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNhdmUoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkKCk6IFByb21pc2U8dGhpcz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHRvSlNPTigpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBmaWxlbmFtZTogdGhpcy5maWxlbmFtZSxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6IHRoaXMuY29udGVudFR5cGUsXHJcbiAgICAgICAgICAgIG1ldGFkYXRhOiB0aGlzLm1ldGFkYXRhXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -20,21 +20,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
20
20
  });
21
21
  };
22
22
  import { inject, injectable, injectAll, Lifecycle, scoped } from "tsyringe";
23
- import { Queue, Scheduler, Worker } from "node-resque";
24
23
  import { schedule, validate } from "node-cron";
25
- import ioredis from "ioredis";
24
+ import { socket } from "zeromq";
25
+ import { ObjectId } from "bson";
26
26
  import { DI_CONTAINER, JOB } from "../common-types";
27
- import { getConstructorName, isArray, isObject } from "../utils";
27
+ import { getConstructorName, isArray, isObject, jsonHighlight, promiseTimeout } from "../utils";
28
28
  import { Configuration } from "./configuration";
29
- const IORedis = ioredis;
30
29
  let JobManager = class JobManager {
31
30
  constructor(config, container, jobTypes) {
32
31
  this.config = config;
33
32
  this.container = container;
34
33
  this.jobTypes = jobTypes || [];
35
34
  this.jobs = this.jobTypes.reduce((res, jobType) => {
36
- res[getConstructorName(jobType)] = {
37
- perform: this.toPerformFunction(jobType)
35
+ res[getConstructorName(jobType)] = (jobParams) => {
36
+ const job = this.resolveJobInstance(jobType, jobParams);
37
+ return job.process();
38
38
  };
39
39
  return res;
40
40
  }, {});
@@ -52,31 +52,25 @@ let JobManager = class JobManager {
52
52
  return instance.process();
53
53
  });
54
54
  }
55
- enqueueWithName(name, params = {}, que = "main") {
55
+ enqueueWithName(name, params = {}) {
56
56
  return __awaiter(this, void 0, void 0, function* () {
57
57
  const jobName = yield this.tryResolveFromName(name, params);
58
- yield this.queue.enqueue(que, jobName, [params]);
58
+ return this.sendToWorkers(jobName, params);
59
59
  });
60
60
  }
61
- enqueue(jobType, params = {}, que = "main") {
61
+ enqueue(jobType, params = {}) {
62
62
  return __awaiter(this, void 0, void 0, function* () {
63
63
  const jobName = yield this.tryResolveAndConnect(jobType, params);
64
- yield this.queue.enqueue(que, jobName, [params]);
64
+ return this.sendToWorkers(jobName, params);
65
65
  });
66
66
  }
67
- enqueueAt(timestamp, jobType, params = {}, que = "main") {
67
+ sendToWorkers(jobName, params) {
68
68
  return __awaiter(this, void 0, void 0, function* () {
69
- const jobName = yield this.tryResolveAndConnect(jobType, params);
70
- yield this.queue.enqueueAt(timestamp, que, jobName, [params]);
71
- });
72
- }
73
- enqueueIn(time, jobType, params = {}, que = "main") {
74
- return __awaiter(this, void 0, void 0, function* () {
75
- const jobName = yield this.tryResolveAndConnect(jobType, params);
76
- yield this.queue.enqueueIn(time, que, jobName, [params]);
69
+ const publisher = yield this.scheduler;
70
+ yield publisher.send([jobName, JSON.stringify(params), new ObjectId().toHexString()]);
77
71
  });
78
72
  }
79
- schedule(minute, hour, dayOfMonth, month, dayOfWeek, jobType, params = {}, que = "main") {
73
+ schedule(minute, hour, dayOfMonth, month, dayOfWeek, jobType, params = {}) {
80
74
  const expression = [minute, hour, dayOfMonth, month, dayOfWeek].map(t => {
81
75
  if (isObject(t)) {
82
76
  const range = t;
@@ -93,19 +87,38 @@ let JobManager = class JobManager {
93
87
  return null;
94
88
  }
95
89
  return schedule(expression, () => {
96
- this.enqueue(jobType, params, que).catch(e => {
90
+ this.enqueue(jobType, params).catch(e => {
97
91
  console.log(`Can't enqueue job: '${jobName}' because: ${e}`);
98
92
  });
99
93
  });
100
94
  }
101
95
  startProcessing() {
102
- return __awaiter(this, void 0, void 0, function* () {
103
- this.initialize();
104
- yield this.worker.connect();
105
- yield this.worker.start();
106
- yield this.scheduler.connect();
107
- yield this.scheduler.start();
108
- });
96
+ const host = this.config.resolve("zmqRemoteHost");
97
+ this.worker = socket("pull");
98
+ this.worker.connect(host);
99
+ this.worker.on("message", (name, args, uniqueId) => __awaiter(this, void 0, void 0, function* () {
100
+ try {
101
+ const jobName = name.toString("utf8");
102
+ const jobParams = JSON.parse(args.toString("utf8"));
103
+ const timerId = uniqueId === null || uniqueId === void 0 ? void 0 : uniqueId.toString("utf8");
104
+ const jobNameLog = `\x1b[36m"${jobName}"\x1b[0m`;
105
+ const jobArgsLog = `\n${jsonHighlight(jobParams)}`;
106
+ console.time(timerId);
107
+ console.timeLog(timerId, `Started working on background job: ${jobNameLog} with args: ${jobArgsLog}\n\n`);
108
+ try {
109
+ yield Promise.race([this.jobs[jobName](jobParams), promiseTimeout(15000, true)]);
110
+ console.timeLog(timerId, `Finished working on background job: ${jobNameLog}\n\n`);
111
+ }
112
+ catch (e) {
113
+ console.timeLog(timerId, `Background job failed: ${jobNameLog}\n${e.message}\n\n`);
114
+ }
115
+ console.timeEnd(timerId);
116
+ }
117
+ catch (e) {
118
+ console.log(`Failed to start job: ${e.message}`);
119
+ }
120
+ }));
121
+ console.log(`Waiting for jobs at: ${host}`);
109
122
  }
110
123
  tryResolve(jobType, params) {
111
124
  const jobName = getConstructorName(jobType);
@@ -120,47 +133,6 @@ let JobManager = class JobManager {
120
133
  }
121
134
  return jobName;
122
135
  }
123
- initialize() {
124
- if (this.queue)
125
- return;
126
- const config = this.config;
127
- const options = { password: config.resolve("redisPassword") };
128
- const sentinels = config.resolve("redisSentinels");
129
- const redis = !sentinels
130
- ? null
131
- : new IORedis({
132
- sentinels,
133
- name: config.resolve("redisCluster"),
134
- });
135
- const connection = {
136
- pkg: "ioredis",
137
- host: config.resolve("redisHost"),
138
- password: options.password,
139
- port: config.resolve("redisPort"),
140
- namespace: config.resolve("redisNamespace"),
141
- redis,
142
- options
143
- };
144
- const queues = config.resolve("workQueues");
145
- this.queue = new Queue({ connection }, this.jobs);
146
- this.worker = new Worker({ connection, queues }, this.jobs);
147
- this.worker.on("job", (queue, job) => {
148
- console.log(`working job ${queue} ${JSON.stringify(job)}`);
149
- });
150
- this.worker.on("reEnqueue", (queue, job, plugin) => {
151
- console.log(`reEnqueue job (${plugin}) ${queue} ${JSON.stringify(job)}`);
152
- });
153
- this.worker.on("success", (queue, job, result, duration) => {
154
- console.log(`job success ${queue} ${JSON.stringify(job)} >> ${result} (${duration}ms)`);
155
- });
156
- this.worker.on("failure", (queue, job, failure, duration) => {
157
- console.log(`job failure ${queue} ${JSON.stringify(job)} >> ${failure} (${duration}ms)`);
158
- });
159
- this.worker.on("error", (error, queue, job) => {
160
- console.log(`error ${queue} ${JSON.stringify(job)} >> ${error}`);
161
- });
162
- this.scheduler = new Scheduler({ connection }, this.jobs);
163
- }
164
136
  tryResolveFromName(jobName, params) {
165
137
  const jobType = this.jobTypes.find(type => {
166
138
  return getConstructorName(type) == jobName;
@@ -172,10 +144,14 @@ let JobManager = class JobManager {
172
144
  }
173
145
  tryResolveAndConnect(jobType, params) {
174
146
  return __awaiter(this, void 0, void 0, function* () {
175
- this.initialize();
176
- const jobName = this.tryResolve(jobType, params);
177
- yield this.queue.connect();
178
- return jobName;
147
+ this.scheduler = this.scheduler || new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
148
+ const port = this.config.resolve("zmqPort");
149
+ const publisher = socket("push");
150
+ yield publisher.bind(`tcp://0.0.0.0:${port}`);
151
+ console.log(`Publisher bound to port: ${port}`);
152
+ resolve(publisher);
153
+ }));
154
+ return this.tryResolve(jobType, params);
179
155
  });
180
156
  }
181
157
  resolveJobInstance(jobType, params) {
@@ -186,12 +162,6 @@ let JobManager = class JobManager {
186
162
  container.register(jobType, jobType);
187
163
  return container.resolve(jobType);
188
164
  }
189
- toPerformFunction(jobType) {
190
- return (jobParams) => {
191
- const job = this.resolveJobInstance(jobType, jobParams);
192
- return job.process();
193
- };
194
- }
195
165
  };
196
166
  JobManager = __decorate([
197
167
  injectable(),
@@ -200,4 +170,4 @@ JobManager = __decorate([
200
170
  __metadata("design:paramtypes", [Configuration, Object, Array])
201
171
  ], JobManager);
202
172
  export { JobManager };
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvam9iLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFzQixNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9GLE9BQU8sRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUM3QyxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLFlBQVksRUFBa0IsR0FBRyxFQUFxRCxNQUFNLGlCQUFpQixDQUFDO0FBQ3RILE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU5QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFJWCxVQUFVLFNBQVYsVUFBVTtJQVFuQixZQUFxQixNQUFxQixFQUFpQyxTQUE4QixFQUFrQixRQUFzQjtRQUE1SCxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQWlDLGNBQVMsR0FBVCxTQUFTLENBQXFCO1FBQ3JHLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzlDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHO2dCQUMvQixPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQzthQUMzQyxDQUFDO1lBQ0YsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUssT0FBTyxDQUFDLE9BQW1CLEVBQUUsU0FBb0IsRUFBRTs7WUFDckQsSUFBSSxRQUFRLEdBQVMsSUFBSSxDQUFDO1lBQzFCLElBQUk7Z0JBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDdkQ7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxpQ0FBaUMsT0FBTyxrQkFBa0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQzthQUMxRztZQUNELE9BQU8sUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlCLENBQUM7S0FBQTtJQUVLLGVBQWUsQ0FBQyxJQUFZLEVBQUUsU0FBb0IsRUFBRSxFQUFFLE1BQWMsTUFBTTs7WUFDNUUsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVELE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQztLQUFBO0lBRUssT0FBTyxDQUFDLE9BQW1CLEVBQUUsU0FBb0IsRUFBRSxFQUFFLE1BQWMsTUFBTTs7WUFDM0UsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQztLQUFBO0lBRUssU0FBUyxDQUFDLFNBQWlCLEVBQUUsT0FBbUIsRUFBRSxTQUFvQixFQUFFLEVBQUUsTUFBYyxNQUFNOztZQUNoRyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakUsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQztLQUFBO0lBRUssU0FBUyxDQUFDLElBQVksRUFBRSxPQUFtQixFQUFFLFNBQW9CLEVBQUUsRUFBRSxNQUFjLE1BQU07O1lBQzNGLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNqRSxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO0tBQUE7SUFFRCxRQUFRLENBQUMsTUFBdUIsRUFBRSxJQUFxQixFQUFFLFVBQTJCLEVBQUUsS0FBc0IsRUFBRSxTQUEwQixFQUFFLE9BQW1CLEVBQUUsU0FBb0IsRUFBRSxFQUFFLE1BQWMsTUFBTTtRQUN2TSxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEUsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2IsTUFBTSxLQUFLLEdBQUcsQ0FBcUIsQ0FBQztnQkFDcEMsT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDaEQ7WUFDRCxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDWixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdEI7WUFDRCxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixPQUFPLHVDQUF1QyxDQUFDLENBQUM7WUFDekYsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsT0FBTyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakUsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFSyxlQUFlOztZQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0IsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pDLENBQUM7S0FBQTtJQUVELFVBQVUsQ0FBQyxPQUFtQixFQUFFLE1BQWlCO1FBQzdDLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JCLE1BQU0sNkJBQTZCLE9BQU8sMkJBQTJCLENBQUM7U0FDekU7UUFDRCxJQUFJO1lBQ0EsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM1QztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsTUFBTSxpQ0FBaUMsT0FBTyxrQkFBa0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztTQUMxRztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFUyxVQUFVO1FBQ2hCLElBQUksSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQUcsRUFBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBQyxDQUFDO1FBQzVELE1BQU0sU0FBUyxHQUF3QyxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDeEYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxTQUFTO1lBQ3BCLENBQUMsQ0FBQyxJQUFJO1lBQ04sQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDO2dCQUNWLFNBQVM7Z0JBQ1QsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO2FBQ3ZDLENBQUMsQ0FBQztRQUNQLE1BQU0sVUFBVSxHQUFHO1lBQ2YsR0FBRyxFQUFFLFNBQVM7WUFDZCxJQUFJLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDakMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUNqQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztZQUMzQyxLQUFLO1lBQ0wsT0FBTztTQUNWLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBQyxVQUFVLEVBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQy9DLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLE1BQU0sS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUN2RCxPQUFPLENBQUMsR0FBRyxDQUNQLGVBQWUsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sTUFBTSxLQUFLLFFBQVEsS0FBSyxDQUM3RSxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUN4RCxPQUFPLENBQUMsR0FBRyxDQUNQLGVBQWUsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQ2xDLEdBQUcsQ0FDTixPQUFPLE9BQU8sS0FBSyxRQUFRLEtBQUssQ0FDcEMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBQyxVQUFVLEVBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVTLGtCQUFrQixDQUFDLE9BQWUsRUFBRSxNQUFpQjtRQUMzRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QyxPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixNQUFNLGtDQUFrQyxPQUFPLDJCQUEyQixDQUFDO1NBQzlFO1FBQ0QsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFZSxvQkFBb0IsQ0FBQyxPQUFtQixFQUFFLE1BQWlCOztZQUN2RSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDakQsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzNCLE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUM7S0FBQTtJQUVTLGtCQUFrQixDQUFDLE9BQW1CLEVBQUUsTUFBaUI7UUFDL0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0IsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXJDLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQVMsQ0FBQztJQUM5QyxDQUFDO0lBRVMsaUJBQWlCLENBQUMsT0FBbUI7UUFDM0MsT0FBTyxDQUFDLFNBQW9CLEVBQUUsRUFBRTtZQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQTtJQUNMLENBQUM7Q0FDSixDQUFBO0FBN0tZLFVBQVU7SUFGdEIsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7SUFTZSxXQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQSxFQUEyQyxXQUFBLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtxQ0FBN0YsYUFBYTtHQVJqQyxVQUFVLENBNkt0QjtTQTdLWSxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEZXBlbmRlbmN5Q29udGFpbmVyLCBpbmplY3QsIGluamVjdGFibGUsIGluamVjdEFsbCwgTGlmZWN5Y2xlLCBzY29wZWR9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge1F1ZXVlLCBTY2hlZHVsZXIsIFdvcmtlcn0gZnJvbSBcIm5vZGUtcmVzcXVlXCI7XHJcbmltcG9ydCB7c2NoZWR1bGUsIHZhbGlkYXRlfSBmcm9tIFwibm9kZS1jcm9uXCI7XHJcbmltcG9ydCBpb3JlZGlzIGZyb20gXCJpb3JlZGlzXCI7XHJcbmltcG9ydCB7RElfQ09OVEFJTkVSLCBJSm9iLCBJSm9iVGFzaywgSk9CLCBKb2JQYXJhbXMsIEpvYlNjaGVkdWxlUmFuZ2UsIEpvYlNjaGVkdWxlVGltZSwgVHlwZX0gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge2dldENvbnN0cnVjdG9yTmFtZSwgaXNBcnJheSwgaXNPYmplY3R9IGZyb20gXCIuLi91dGlsc1wiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcclxuXHJcbmNvbnN0IElPUmVkaXMgPSBpb3JlZGlzO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5Ac2NvcGVkKExpZmVjeWNsZS5Db250YWluZXJTY29wZWQpXHJcbmV4cG9ydCBjbGFzcyBKb2JNYW5hZ2VyIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgam9iczogYW55O1xyXG4gICAgcHJvdGVjdGVkIHF1ZXVlOiBRdWV1ZTtcclxuICAgIHByb3RlY3RlZCB3b3JrZXI6IFdvcmtlcjtcclxuICAgIHByb3RlY3RlZCBzY2hlZHVsZXI6IFNjaGVkdWxlcjtcclxuICAgIHByb3RlY3RlZCBqb2JUeXBlczogVHlwZTxJSm9iPltdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbiwgQGluamVjdChESV9DT05UQUlORVIpIHJlYWRvbmx5IGNvbnRhaW5lcjogRGVwZW5kZW5jeUNvbnRhaW5lciwgQGluamVjdEFsbChKT0IpIGpvYlR5cGVzOiBUeXBlPElKb2I+W10pIHtcclxuICAgICAgICB0aGlzLmpvYlR5cGVzID0gam9iVHlwZXMgfHwgW107XHJcbiAgICAgICAgdGhpcy5qb2JzID0gdGhpcy5qb2JUeXBlcy5yZWR1Y2UoKHJlcywgam9iVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICByZXNbZ2V0Q29uc3RydWN0b3JOYW1lKGpvYlR5cGUpXSA9IHtcclxuICAgICAgICAgICAgICAgIHBlcmZvcm06IHRoaXMudG9QZXJmb3JtRnVuY3Rpb24oam9iVHlwZSlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICB9LCB7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJvY2Vzcyhqb2JUeXBlOiBUeXBlPElKb2I+LCBwYXJhbXM6IEpvYlBhcmFtcyA9IHt9KTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBsZXQgaW5zdGFuY2U6IElKb2IgPSBudWxsO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy5yZXNvbHZlSm9iSW5zdGFuY2Uoam9iVHlwZSwgcGFyYW1zKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGpvYk5hbWUgPSBnZXRDb25zdHJ1Y3Rvck5hbWUoam9iVHlwZSk7XHJcbiAgICAgICAgICAgIHRocm93IGBDYW4ndCByZXNvbHZlIHBhcmFtcyBmb3Igam9iOiAke2pvYk5hbWV9LCB3aXRoIHBhcmFtczogJHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfS4gUmVhc29uOiAke2V9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnByb2Nlc3MoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlbnF1ZXVlV2l0aE5hbWUobmFtZTogc3RyaW5nLCBwYXJhbXM6IEpvYlBhcmFtcyA9IHt9LCBxdWU6IHN0cmluZyA9IFwibWFpblwiKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBqb2JOYW1lID0gYXdhaXQgdGhpcy50cnlSZXNvbHZlRnJvbU5hbWUobmFtZSwgcGFyYW1zKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnF1ZXVlLmVucXVldWUocXVlLCBqb2JOYW1lLCBbcGFyYW1zXSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5xdWV1ZShqb2JUeXBlOiBUeXBlPElKb2I+LCBwYXJhbXM6IEpvYlBhcmFtcyA9IHt9LCBxdWU6IHN0cmluZyA9IFwibWFpblwiKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBqb2JOYW1lID0gYXdhaXQgdGhpcy50cnlSZXNvbHZlQW5kQ29ubmVjdChqb2JUeXBlLCBwYXJhbXMpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucXVldWUuZW5xdWV1ZShxdWUsIGpvYk5hbWUsIFtwYXJhbXNdKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlbnF1ZXVlQXQodGltZXN0YW1wOiBudW1iZXIsIGpvYlR5cGU6IFR5cGU8SUpvYj4sIHBhcmFtczogSm9iUGFyYW1zID0ge30sIHF1ZTogc3RyaW5nID0gXCJtYWluXCIpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IGpvYk5hbWUgPSBhd2FpdCB0aGlzLnRyeVJlc29sdmVBbmRDb25uZWN0KGpvYlR5cGUsIHBhcmFtcyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5xdWV1ZS5lbnF1ZXVlQXQodGltZXN0YW1wLCBxdWUsIGpvYk5hbWUsIFtwYXJhbXNdKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlbnF1ZXVlSW4odGltZTogbnVtYmVyLCBqb2JUeXBlOiBUeXBlPElKb2I+LCBwYXJhbXM6IEpvYlBhcmFtcyA9IHt9LCBxdWU6IHN0cmluZyA9IFwibWFpblwiKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBqb2JOYW1lID0gYXdhaXQgdGhpcy50cnlSZXNvbHZlQW5kQ29ubmVjdChqb2JUeXBlLCBwYXJhbXMpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucXVldWUuZW5xdWV1ZUluKHRpbWUsIHF1ZSwgam9iTmFtZSwgW3BhcmFtc10pO1xyXG4gICAgfVxyXG5cclxuICAgIHNjaGVkdWxlKG1pbnV0ZTogSm9iU2NoZWR1bGVUaW1lLCBob3VyOiBKb2JTY2hlZHVsZVRpbWUsIGRheU9mTW9udGg6IEpvYlNjaGVkdWxlVGltZSwgbW9udGg6IEpvYlNjaGVkdWxlVGltZSwgZGF5T2ZXZWVrOiBKb2JTY2hlZHVsZVRpbWUsIGpvYlR5cGU6IFR5cGU8SUpvYj4sIHBhcmFtczogSm9iUGFyYW1zID0ge30sIHF1ZTogc3RyaW5nID0gXCJtYWluXCIpOiBJSm9iVGFzayB7XHJcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IFttaW51dGUsIGhvdXIsIGRheU9mTW9udGgsIG1vbnRoLCBkYXlPZldlZWtdLm1hcCh0ID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHQpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHQgYXMgSm9iU2NoZWR1bGVSYW5nZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtyYW5nZS5taW4gfHwgMH0tJHtyYW5nZS5tYXggfHwgMH1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdC5qb2luKFwiLFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYCR7dH1gO1xyXG4gICAgICAgIH0pLmpvaW4oXCIgXCIpO1xyXG4gICAgICAgIGNvbnN0IGpvYk5hbWUgPSBnZXRDb25zdHJ1Y3Rvck5hbWUoam9iVHlwZSk7XHJcbiAgICAgICAgaWYgKCF2YWxpZGF0ZShleHByZXNzaW9uKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQ2FuJ3Qgc2NoZWR1bGUgdGhlIHRhc2s6ICcke2pvYk5hbWV9JyBiZWNhdXNlIHRpbWUgZXhwcmVzc2lvbiBpcyBpbnZhbGlkLmApO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlKGV4cHJlc3Npb24sICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbnF1ZXVlKGpvYlR5cGUsIHBhcmFtcywgcXVlKS5jYXRjaChlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW4ndCBlbnF1ZXVlIGpvYjogJyR7am9iTmFtZX0nIGJlY2F1c2U6ICR7ZX1gKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc3RhcnRQcm9jZXNzaW5nKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy53b3JrZXIuY29ubmVjdCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMud29ya2VyLnN0YXJ0KCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zY2hlZHVsZXIuY29ubmVjdCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2NoZWR1bGVyLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5UmVzb2x2ZShqb2JUeXBlOiBUeXBlPElKb2I+LCBwYXJhbXM6IEpvYlBhcmFtcyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3Qgam9iTmFtZSA9IGdldENvbnN0cnVjdG9yTmFtZShqb2JUeXBlKTtcclxuICAgICAgICBpZiAoIXRoaXMuam9ic1tqb2JOYW1lXSkge1xyXG4gICAgICAgICAgICB0aHJvdyBgQ2FuJ3QgZmluZCBqb2Igd2l0aCBuYW1lOiAke2pvYk5hbWV9IHNvIGl0IGNhbid0IGJlIGVucXVldWVkIWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZUpvYkluc3RhbmNlKGpvYlR5cGUsIHBhcmFtcyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBgQ2FuJ3QgcmVzb2x2ZSBwYXJhbXMgZm9yIGpvYjogJHtqb2JOYW1lfSwgd2l0aCBwYXJhbXM6ICR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX0uIFJlYXNvbjogJHtlfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBqb2JOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBpbml0aWFsaXplKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXVlKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtwYXNzd29yZDogY29uZmlnLnJlc29sdmUoXCJyZWRpc1Bhc3N3b3JkXCIpfTtcclxuICAgICAgICBjb25zdCBzZW50aW5lbHM6IEFycmF5PHtob3N0OiBzdHJpbmcsIHBvcnQ6IG51bWJlcn0+ID0gY29uZmlnLnJlc29sdmUoXCJyZWRpc1NlbnRpbmVsc1wiKTtcclxuICAgICAgICBjb25zdCByZWRpcyA9ICFzZW50aW5lbHNcclxuICAgICAgICAgICAgPyBudWxsXHJcbiAgICAgICAgICAgIDogbmV3IElPUmVkaXMoe1xyXG4gICAgICAgICAgICAgICAgc2VudGluZWxzLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogY29uZmlnLnJlc29sdmUoXCJyZWRpc0NsdXN0ZXJcIiksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB7XHJcbiAgICAgICAgICAgIHBrZzogXCJpb3JlZGlzXCIsXHJcbiAgICAgICAgICAgIGhvc3Q6IGNvbmZpZy5yZXNvbHZlKFwicmVkaXNIb3N0XCIpLFxyXG4gICAgICAgICAgICBwYXNzd29yZDogb3B0aW9ucy5wYXNzd29yZCxcclxuICAgICAgICAgICAgcG9ydDogY29uZmlnLnJlc29sdmUoXCJyZWRpc1BvcnRcIiksXHJcbiAgICAgICAgICAgIG5hbWVzcGFjZTogY29uZmlnLnJlc29sdmUoXCJyZWRpc05hbWVzcGFjZVwiKSxcclxuICAgICAgICAgICAgcmVkaXMsXHJcbiAgICAgICAgICAgIG9wdGlvbnNcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHF1ZXVlcyA9IGNvbmZpZy5yZXNvbHZlKFwid29ya1F1ZXVlc1wiKTtcclxuICAgICAgICB0aGlzLnF1ZXVlID0gbmV3IFF1ZXVlKHtjb25uZWN0aW9ufSwgdGhpcy5qb2JzKTtcclxuICAgICAgICB0aGlzLndvcmtlciA9IG5ldyBXb3JrZXIoe2Nvbm5lY3Rpb24sIHF1ZXVlc30sIHRoaXMuam9icyk7XHJcbiAgICAgICAgdGhpcy53b3JrZXIub24oXCJqb2JcIiwgKHF1ZXVlLCBqb2IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYHdvcmtpbmcgam9iICR7cXVldWV9ICR7SlNPTi5zdHJpbmdpZnkoam9iKX1gKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLndvcmtlci5vbihcInJlRW5xdWV1ZVwiLCAocXVldWUsIGpvYiwgcGx1Z2luKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGByZUVucXVldWUgam9iICgke3BsdWdpbn0pICR7cXVldWV9ICR7SlNPTi5zdHJpbmdpZnkoam9iKX1gKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLndvcmtlci5vbihcInN1Y2Nlc3NcIiwgKHF1ZXVlLCBqb2IsIHJlc3VsdCwgZHVyYXRpb24pID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICBgam9iIHN1Y2Nlc3MgJHtxdWV1ZX0gJHtKU09OLnN0cmluZ2lmeShqb2IpfSA+PiAke3Jlc3VsdH0gKCR7ZHVyYXRpb259bXMpYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMud29ya2VyLm9uKFwiZmFpbHVyZVwiLCAocXVldWUsIGpvYiwgZmFpbHVyZSwgZHVyYXRpb24pID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICBgam9iIGZhaWx1cmUgJHtxdWV1ZX0gJHtKU09OLnN0cmluZ2lmeShcclxuICAgICAgICAgICAgICAgICAgICBqb2JcclxuICAgICAgICAgICAgICAgICl9ID4+ICR7ZmFpbHVyZX0gKCR7ZHVyYXRpb259bXMpYFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMud29ya2VyLm9uKFwiZXJyb3JcIiwgKGVycm9yLCBxdWV1ZSwgam9iKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBlcnJvciAke3F1ZXVlfSAke0pTT04uc3RyaW5naWZ5KGpvYil9ICA+PiAke2Vycm9yfWApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gbmV3IFNjaGVkdWxlcih7Y29ubmVjdGlvbn0sIHRoaXMuam9icyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHRyeVJlc29sdmVGcm9tTmFtZShqb2JOYW1lOiBzdHJpbmcsIHBhcmFtczogSm9iUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCBqb2JUeXBlID0gdGhpcy5qb2JUeXBlcy5maW5kKHR5cGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RydWN0b3JOYW1lKHR5cGUpID09IGpvYk5hbWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFqb2JUeXBlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGBDYW4ndCBmaW5kIGpvYiB0eXBlIHdpdGggbmFtZTogJHtqb2JOYW1lfSBzbyBpdCBjYW4ndCBiZSBlbnF1ZXVlZCFgO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50cnlSZXNvbHZlQW5kQ29ubmVjdChqb2JUeXBlLCBwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyB0cnlSZXNvbHZlQW5kQ29ubmVjdChqb2JUeXBlOiBUeXBlPElKb2I+LCBwYXJhbXM6IEpvYlBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgICAgICAgY29uc3Qgam9iTmFtZSA9IHRoaXMudHJ5UmVzb2x2ZShqb2JUeXBlLCBwYXJhbXMpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMucXVldWUuY29ubmVjdCgpO1xyXG4gICAgICAgIHJldHVybiBqb2JOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCByZXNvbHZlSm9iSW5zdGFuY2Uoam9iVHlwZTogVHlwZTxJSm9iPiwgcGFyYW1zOiBKb2JQYXJhbXMpOiBJSm9iIHtcclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lci5jcmVhdGVDaGlsZENvbnRhaW5lcigpO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHBhcmFtcykubWFwKChuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3RlcihuYW1lLCB7dXNlVmFsdWU6IHBhcmFtc1tuYW1lXX0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnRhaW5lci5yZWdpc3Rlcihqb2JUeXBlLCBqb2JUeXBlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5yZXNvbHZlKGpvYlR5cGUpIGFzIElKb2I7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHRvUGVyZm9ybUZ1bmN0aW9uKGpvYlR5cGU6IFR5cGU8SUpvYj4pOiBGdW5jdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIChqb2JQYXJhbXM6IEpvYlBhcmFtcykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBqb2IgPSB0aGlzLnJlc29sdmVKb2JJbnN0YW5jZShqb2JUeXBlLCBqb2JQYXJhbXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gam9iLnByb2Nlc3MoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvam9iLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFzQixNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9GLE9BQU8sRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBQyxNQUFNLEVBQVMsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLEVBQUMsWUFBWSxFQUFrQixHQUFHLEVBQXFELE1BQU0saUJBQWlCLENBQUM7QUFDdEgsT0FBTyxFQUFDLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM5RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7SUFJakMsVUFBVSxTQUFWLFVBQVU7SUFPbkIsWUFBcUIsTUFBcUIsRUFBaUMsU0FBOEIsRUFBa0IsUUFBc0I7UUFBNUgsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUFpQyxjQUFTLEdBQVQsU0FBUyxDQUFxQjtRQUNyRyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUM5QyxHQUFHLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQW9CLEVBQUUsRUFBRTtnQkFDeEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixD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LE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0IsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQVMsQ0FBQztJQUM5QyxDQUFDO0NBQ0osQ0FBQTtBQXpJWSxVQUFVO0lBRnRCLFVBQVUsRUFBRTtJQUNaLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO0lBUWUsV0FBQSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUEsRUFBMkMsV0FBQSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUE7cUNBQTdGLGFBQWE7R0FQakMsVUFBVSxDQXlJdEI7U0F6SVksVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGVwZW5kZW5jeUNvbnRhaW5lciwgaW5qZWN0LCBpbmplY3RhYmxlLCBpbmplY3RBbGwsIExpZmVjeWNsZSwgc2NvcGVkfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtzY2hlZHVsZSwgdmFsaWRhdGV9IGZyb20gXCJub2RlLWNyb25cIjtcclxuaW1wb3J0IHtzb2NrZXQsIFNvY2tldH0gZnJvbSBcInplcm9tcVwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5pbXBvcnQge0RJX0NPTlRBSU5FUiwgSUpvYiwgSUpvYlRhc2ssIEpPQiwgSm9iUGFyYW1zLCBKb2JTY2hlZHVsZVJhbmdlLCBKb2JTY2hlZHVsZVRpbWUsIFR5cGV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtnZXRDb25zdHJ1Y3Rvck5hbWUsIGlzQXJyYXksIGlzT2JqZWN0LCBqc29uSGlnaGxpZ2h0LCBwcm9taXNlVGltZW91dH0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4vY29uZmlndXJhdGlvblwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5Ac2NvcGVkKExpZmVjeWNsZS5Db250YWluZXJTY29wZWQpXHJcbmV4cG9ydCBjbGFzcyBKb2JNYW5hZ2VyIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgam9iczoge1tuYW1lOiBzdHJpbmddOiAoam9iUGFyYW1zOiBKb2JQYXJhbXMpID0+IFByb21pc2U8YW55Pn07XHJcbiAgICBwcm90ZWN0ZWQgc2NoZWR1bGVyOiBQcm9taXNlPFNvY2tldD47XHJcbiAgICBwcm90ZWN0ZWQgd29ya2VyOiBTb2NrZXQ7XHJcbiAgICBwcm90ZWN0ZWQgam9iVHlwZXM6IFR5cGU8SUpvYj5bXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25maWc6IENvbmZpZ3VyYXRpb24sIEBpbmplY3QoRElfQ09OVEFJTkVSKSByZWFkb25seSBjb250YWluZXI6IERlcGVuZGVuY3lDb250YWluZXIsIEBpbmplY3RBbGwoSk9CKSBqb2JUeXBlczogVHlwZTxJSm9iPltdKSB7XHJcbiAgICAgICAgdGhpcy5qb2JUeXBlcyA9IGpvYlR5cGVzIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuam9icyA9IHRoaXMuam9iVHlwZXMucmVkdWNlKChyZXMsIGpvYlR5cGUpID0+IHtcclxuICAgICAgICAgICAgcmVzW2dldENvbnN0cnVjdG9yTmFtZShqb2JUeXBlKV0gPSAoam9iUGFyYW1zOiBKb2JQYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYiA9IHRoaXMucmVzb2x2ZUpvYkluc3RhbmNlKGpvYlR5cGUsIGpvYlBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gam9iLnByb2Nlc3MoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0sIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwcm9jZXNzKGpvYlR5cGU6IFR5cGU8SUpvYj4sIHBhcmFtczogSm9iUGFyYW1zID0ge30pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGxldCBpbnN0YW5jZTogSUpvYiA9IG51bGw7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaW5zdGFuY2UgPSB0aGlzLnJlc29sdmVKb2JJbnN0YW5jZShqb2JUeXBlLCBwYXJhbXMpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3Qgam9iTmFtZSA9IGdldENvbnN0cnVjdG9yTmFtZShqb2JUeXBlKTtcclxuICAgICAgICAgICAgdGhyb3cgYENhbid0IHJlc29sdmUgcGFyYW1zIGZvciBqb2I6ICR7am9iTmFtZX0sIHdpdGggcGFyYW1zOiAke0pTT04uc3RyaW5naWZ5KHBhcmFtcyl9LiBSZWFzb246ICR7ZX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5zdGFuY2UucHJvY2VzcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVucXVldWVXaXRoTmFtZShuYW1lOiBzdHJpbmcsIHBhcmFtczogSm9iUGFyYW1zID0ge30pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IGpvYk5hbWUgPSBhd2FpdCB0aGlzLnRyeVJlc29sdmVGcm9tTmFtZShuYW1lLCBwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlbmRUb1dvcmtlcnMoam9iTmFtZSwgcGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlbnF1ZXVlKGpvYlR5cGU6IFR5cGU8SUpvYj4sIHBhcmFtczogSm9iUGFyYW1zID0ge30pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IGpvYk5hbWUgPSBhd2FpdCB0aGlzLnRyeVJlc29sdmVBbmRDb25uZWN0KGpvYlR5cGUsIHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZFRvV29ya2Vycyhqb2JOYW1lLCBwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBzZW5kVG9Xb3JrZXJzKGpvYk5hbWU6IHN0cmluZywgcGFyYW1zOiBKb2JQYXJhbXMpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHB1Ymxpc2hlciA9IGF3YWl0IHRoaXMuc2NoZWR1bGVyO1xyXG4gICAgICAgIGF3YWl0IHB1Ymxpc2hlci5zZW5kKFtqb2JOYW1lLCBKU09OLnN0cmluZ2lmeShwYXJhbXMpLCBuZXcgT2JqZWN0SWQoKS50b0hleFN0cmluZygpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2NoZWR1bGUobWludXRlOiBKb2JTY2hlZHVsZVRpbWUsIGhvdXI6IEpvYlNjaGVkdWxlVGltZSwgZGF5T2ZNb250aDogSm9iU2NoZWR1bGVUaW1lLCBtb250aDogSm9iU2NoZWR1bGVUaW1lLCBkYXlPZldlZWs6IEpvYlNjaGVkdWxlVGltZSwgam9iVHlwZTogVHlwZTxJSm9iPiwgcGFyYW1zOiBKb2JQYXJhbXMgPSB7fSk6IElKb2JUYXNrIHtcclxuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gW21pbnV0ZSwgaG91ciwgZGF5T2ZNb250aCwgbW9udGgsIGRheU9mV2Vla10ubWFwKHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNPYmplY3QodCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdCBhcyBKb2JTY2hlZHVsZVJhbmdlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3JhbmdlLm1pbiB8fCAwfS0ke3JhbmdlLm1heCB8fCAwfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0LmpvaW4oXCIsXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0fWA7XHJcbiAgICAgICAgfSkuam9pbihcIiBcIik7XHJcbiAgICAgICAgY29uc3Qgam9iTmFtZSA9IGdldENvbnN0cnVjdG9yTmFtZShqb2JUeXBlKTtcclxuICAgICAgICBpZiAoIXZhbGlkYXRlKGV4cHJlc3Npb24pKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW4ndCBzY2hlZHVsZSB0aGUgdGFzazogJyR7am9iTmFtZX0nIGJlY2F1c2UgdGltZSBleHByZXNzaW9uIGlzIGludmFsaWQuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2NoZWR1bGUoZXhwcmVzc2lvbiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVucXVldWUoam9iVHlwZSwgcGFyYW1zKS5jYXRjaChlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW4ndCBlbnF1ZXVlIGpvYjogJyR7am9iTmFtZX0nIGJlY2F1c2U6ICR7ZX1gKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRQcm9jZXNzaW5nKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB0aGlzLmNvbmZpZy5yZXNvbHZlKFwiem1xUmVtb3RlSG9zdFwiKTtcclxuICAgICAgICB0aGlzLndvcmtlciA9IHNvY2tldChcInB1bGxcIik7XHJcbiAgICAgICAgdGhpcy53b3JrZXIuY29ubmVjdChob3N0KTtcclxuICAgICAgICB0aGlzLndvcmtlci5vbihcIm1lc3NhZ2VcIiwgYXN5bmMgKG5hbWU6IEJ1ZmZlciwgYXJnczogQnVmZmVyLCB1bmlxdWVJZDogQnVmZmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqb2JOYW1lID0gbmFtZS50b1N0cmluZyhcInV0ZjhcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqb2JQYXJhbXMgPSBKU09OLnBhcnNlKGFyZ3MudG9TdHJpbmcoXCJ1dGY4XCIpKSBhcyBKb2JQYXJhbXM7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lcklkID0gdW5pcXVlSWQ/LnRvU3RyaW5nKFwidXRmOFwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYk5hbWVMb2cgPSBgXFx4MWJbMzZtXCIke2pvYk5hbWV9XCJcXHgxYlswbWA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqb2JBcmdzTG9nID0gYFxcbiR7anNvbkhpZ2hsaWdodChqb2JQYXJhbXMpfWA7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc29sZS50aW1lKHRpbWVySWQpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS50aW1lTG9nKHRpbWVySWQsIGBTdGFydGVkIHdvcmtpbmcgb24gYmFja2dyb3VuZCBqb2I6ICR7am9iTmFtZUxvZ30gd2l0aCBhcmdzOiAke2pvYkFyZ3NMb2d9XFxuXFxuYCk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UucmFjZShbdGhpcy5qb2JzW2pvYk5hbWVdKGpvYlBhcmFtcyksIHByb21pc2VUaW1lb3V0KDE1MDAwLCB0cnVlKV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUudGltZUxvZyh0aW1lcklkLCBgRmluaXNoZWQgd29ya2luZyBvbiBiYWNrZ3JvdW5kIGpvYjogJHtqb2JOYW1lTG9nfVxcblxcbmApO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUudGltZUxvZyh0aW1lcklkLCBgQmFja2dyb3VuZCBqb2IgZmFpbGVkOiAke2pvYk5hbWVMb2d9XFxuJHtlLm1lc3NhZ2V9XFxuXFxuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLnRpbWVFbmQodGltZXJJZCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGYWlsZWQgdG8gc3RhcnQgam9iOiAke2UubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBXYWl0aW5nIGZvciBqb2JzIGF0OiAke2hvc3R9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5UmVzb2x2ZShqb2JUeXBlOiBUeXBlPElKb2I+LCBwYXJhbXM6IEpvYlBhcmFtcyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3Qgam9iTmFtZSA9IGdldENvbnN0cnVjdG9yTmFtZShqb2JUeXBlKTtcclxuICAgICAgICBpZiAoIXRoaXMuam9ic1tqb2JOYW1lXSkge1xyXG4gICAgICAgICAgICB0aHJvdyBgQ2FuJ3QgZmluZCBqb2Igd2l0aCBuYW1lOiAke2pvYk5hbWV9IHNvIGl0IGNhbid0IGJlIGVucXVldWVkIWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZUpvYkluc3RhbmNlKGpvYlR5cGUsIHBhcmFtcyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBgQ2FuJ3QgcmVzb2x2ZSBwYXJhbXMgZm9yIGpvYjogJHtqb2JOYW1lfSwgd2l0aCBwYXJhbXM6ICR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX0uIFJlYXNvbjogJHtlfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBqb2JOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB0cnlSZXNvbHZlRnJvbU5hbWUoam9iTmFtZTogc3RyaW5nLCBwYXJhbXM6IEpvYlBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgY29uc3Qgam9iVHlwZSA9IHRoaXMuam9iVHlwZXMuZmluZCh0eXBlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0cnVjdG9yTmFtZSh0eXBlKSA9PSBqb2JOYW1lO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICgham9iVHlwZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBgQ2FuJ3QgZmluZCBqb2IgdHlwZSB3aXRoIG5hbWU6ICR7am9iTmFtZX0gc28gaXQgY2FuJ3QgYmUgZW5xdWV1ZWQhYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJ5UmVzb2x2ZUFuZENvbm5lY3Qoam9iVHlwZSwgcGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgdHJ5UmVzb2x2ZUFuZENvbm5lY3Qoam9iVHlwZTogVHlwZTxJSm9iPiwgcGFyYW1zOiBKb2JQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXIgfHwgbmV3IFByb21pc2U8YW55Pihhc3luYyByZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcG9ydCA9IHRoaXMuY29uZmlnLnJlc29sdmUoXCJ6bXFQb3J0XCIpO1xyXG4gICAgICAgICAgICBjb25zdCBwdWJsaXNoZXIgPSBzb2NrZXQoXCJwdXNoXCIpO1xyXG4gICAgICAgICAgICBhd2FpdCBwdWJsaXNoZXIuYmluZChgdGNwOi8vMC4wLjAuMDoke3BvcnR9YClcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFB1Ymxpc2hlciBib3VuZCB0byBwb3J0OiAke3BvcnR9YCk7XHJcbiAgICAgICAgICAgIHJlc29sdmUocHVibGlzaGVyKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy50cnlSZXNvbHZlKGpvYlR5cGUsIHBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHJlc29sdmVKb2JJbnN0YW5jZShqb2JUeXBlOiBUeXBlPElKb2I+LCBwYXJhbXM6IEpvYlBhcmFtcyk6IElKb2Ige1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyLmNyZWF0ZUNoaWxkQ29udGFpbmVyKCk7XHJcbiAgICAgICAgT2JqZWN0LmtleXMocGFyYW1zKS5tYXAoKG5hbWUpID0+IHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKG5hbWUsIHt1c2VWYWx1ZTogcGFyYW1zW25hbWVdfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKGpvYlR5cGUsIGpvYlR5cGUpO1xyXG4gICAgICAgIHJldHVybiBjb250YWluZXIucmVzb2x2ZShqb2JUeXBlKSBhcyBJSm9iO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==