@flogeez/angular-tiptap-editor 3.2.0 → 3.2.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.
@@ -297,6 +297,9 @@ export class AteImageService {
297
297
  this.forceEditorUpdate();
298
298
  // Final insertion
299
299
  insertionStrategy(editor, result);
300
+ if (this.onImageUploadedCallback) {
301
+ this.onImageUploadedCallback(result);
302
+ }
300
303
  this.resetUploadState();
301
304
  }
302
305
  catch (error) {
@@ -456,4 +459,4 @@ export class AteImageService {
456
459
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteImageService, decorators: [{
457
460
  type: Injectable
458
461
  }] });
459
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWltYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRpcHRhcC1lZGl0b3Ivc3JjL2xpYi9zZXJ2aWNlcy9hdGUtaW1hZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFVcEQsTUFBTSxPQUFPLGVBQWU7SUFENUI7UUFFRSw4QkFBOEI7UUFDOUIsa0JBQWEsR0FBRyxNQUFNLENBQXNCLElBQUksQ0FBQyxDQUFDO1FBQ2xELG9CQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUVoRSxxQkFBcUI7UUFDckIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuQixTQUFJLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JCLE1BQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUUzQywyQkFBMkI7UUFDM0IsZ0JBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0Isa0JBQWEsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFM0I7OztXQUdHO1FBQ0gsa0JBQWEsR0FBaUMsSUFBSSxDQUFDO1FBRTNDLGtCQUFhLEdBQWtCLElBQUksQ0FBQztLQXFoQjdDO0lBbmhCQyxnREFBZ0Q7SUFDaEQsV0FBVyxDQUFDLE1BQWM7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bmplY3RhYmxlLCBzaWduYWwsIGNvbXB1dGVkLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBBdGVJMThuU2VydmljZSB9IGZyb20gXCIuL2F0ZS1pMThuLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIEF0ZVJlc2l6ZU9wdGlvbnMsXG4gIEF0ZUltYWdlVXBsb2FkT3B0aW9ucyxcbiAgQXRlSW1hZ2VVcGxvYWRIYW5kbGVyLFxuICBBdGVJbWFnZVVwbG9hZFJlc3VsdCxcbiAgQXRlSW1hZ2VEYXRhLFxufSBmcm9tIFwiLi4vbW9kZWxzL2F0ZS1pbWFnZS5tb2RlbFwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXRlSW1hZ2VTZXJ2aWNlIHtcbiAgLyoqIFNpZ25hbHMgZm9yIGltYWdlIHN0YXRlICovXG4gIHNlbGVjdGVkSW1hZ2UgPSBzaWduYWw8QXRlSW1hZ2VEYXRhIHwgbnVsbD4obnVsbCk7XG4gIGlzSW1hZ2VTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRJbWFnZSgpICE9PSBudWxsKTtcblxuICAvKiogUmVzaXppbmcgc3RhdGUgKi9cbiAgaXNSZXNpemluZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEF0ZUkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0ID0gdGhpcy5pMThuLmltYWdlVXBsb2FkO1xuXG4gIC8qKiBVcGxvYWQgc3RhdGUgc2lnbmFscyAqL1xuICBpc1VwbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHVwbG9hZFByb2dyZXNzID0gc2lnbmFsKDApO1xuICB1cGxvYWRNZXNzYWdlID0gc2lnbmFsKFwiXCIpO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gdXBsb2FkIGhhbmRsZXIuXG4gICAqIElmIHNldCwgdGhpcyBoYW5kbGVyIHJlcGxhY2VzIHRoZSBkZWZhdWx0IGJhc2U2NCBjb252ZXJzaW9uLlxuICAgKi9cbiAgdXBsb2FkSGFuZGxlcjogQXRlSW1hZ2VVcGxvYWRIYW5kbGVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBjdXJyZW50RWRpdG9yOiBFZGl0b3IgfCBudWxsID0gbnVsbDtcblxuICAvKiogU2VsZWN0IGFuZCB0cmFjayBhbiBpbWFnZSBmcm9tIHRoZSBlZGl0b3IgKi9cbiAgc2VsZWN0SW1hZ2UoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIikpIHtcbiAgICAgIGNvbnN0IGF0dHJzID0gZWRpdG9yLmdldEF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5zZXQoe1xuICAgICAgICBzcmM6IGF0dHJzW1wic3JjXCJdLFxuICAgICAgICBhbHQ6IGF0dHJzW1wiYWx0XCJdLFxuICAgICAgICB0aXRsZTogYXR0cnNbXCJ0aXRsZVwiXSxcbiAgICAgICAgd2lkdGg6IGF0dHJzW1wid2lkdGhcIl0sXG4gICAgICAgIGhlaWdodDogYXR0cnNbXCJoZWlnaHRcIl0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLnNldChudWxsKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2Uuc2V0KG51bGwpO1xuICB9XG5cbiAgLyoqIEluc2VydCBhIG5ldyBpbWFnZSBhbmQgZW5zdXJlIGl0J3Mgc2VsZWN0ZWQgKi9cbiAgaW5zZXJ0SW1hZ2UoZWRpdG9yOiBFZGl0b3IsIGltYWdlRGF0YTogQXRlSW1hZ2VEYXRhKTogdm9pZCB7XG4gICAgZWRpdG9yXG4gICAgICAuY2hhaW4oKVxuICAgICAgLmZvY3VzKClcbiAgICAgIC5zZXRSZXNpemFibGVJbWFnZShpbWFnZURhdGEpXG4gICAgICAuY29tbWFuZCgoeyB0ciwgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAvLyBTZWxlY3Rpb24gaXMgdXN1YWxseSBhZnRlciB0aGUgbm9kZS4gTm9kZSBpcyBhdCB0ci5zZWxlY3Rpb24uZnJvbSAtIDEuXG4gICAgICAgIGNvbnN0IHsgZnJvbSB9ID0gdHIuc2VsZWN0aW9uO1xuICAgICAgICAvLyBUcnkgdG8gc2VsZWN0IG5vZGUgYXQgY3VycmVudCBwb3MgKGlmIGl0IHdhcyBhbHJlYWR5IHNlbGVjdGVkKSBvciBwcmV2aW91cyBwb3NcbiAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnNldE5vZGVTZWxlY3Rpb24oZnJvbSkgfHwgY29tbWFuZHMuc2V0Tm9kZVNlbGVjdGlvbihmcm9tIC0gMSkgfHwgdHJ1ZTtcbiAgICAgIH0pXG4gICAgICAucnVuKCk7XG4gIH1cblxuICAvKiogVXBkYXRlIGF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgaW1hZ2UgKi9cbiAgdXBkYXRlSW1hZ2VBdHRyaWJ1dGVzKGVkaXRvcjogRWRpdG9yLCBhdHRyaWJ1dGVzOiBQYXJ0aWFsPEF0ZUltYWdlRGF0YT4pOiB2b2lkIHtcbiAgICBpZiAoZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIikpIHtcbiAgICAgIGNvbnN0IHBvcyA9IGVkaXRvci5zdGF0ZS5zZWxlY3Rpb24uZnJvbTtcbiAgICAgIGVkaXRvclxuICAgICAgICAuY2hhaW4oKVxuICAgICAgICAuZm9jdXMoKVxuICAgICAgICAudXBkYXRlQXR0cmlidXRlcyhcInJlc2l6YWJsZUltYWdlXCIsIGF0dHJpYnV0ZXMpXG4gICAgICAgIC5zZXROb2RlU2VsZWN0aW9uKHBvcylcbiAgICAgICAgLnJ1bigpO1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEltYWdlKGF0dHJpYnV0ZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXNpemUgaW1hZ2Ugd2l0aCBvcHRpb25hbCBhc3BlY3QgcmF0aW8gbWFpbnRlbmFuY2UgKi9cbiAgcmVzaXplSW1hZ2UoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnM6IEF0ZVJlc2l6ZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudEF0dHJzID0gZWRpdG9yLmdldEF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiKTtcbiAgICBsZXQgbmV3V2lkdGggPSBvcHRpb25zLndpZHRoO1xuICAgIGxldCBuZXdIZWlnaHQgPSBvcHRpb25zLmhlaWdodDtcblxuICAgIC8vIE1haW50YWluIGFzcGVjdCByYXRpbyBpZiByZXF1ZXN0ZWRcbiAgICBpZiAob3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvICE9PSBmYWxzZSAmJiBjdXJyZW50QXR0cnNbXCJ3aWR0aFwiXSAmJiBjdXJyZW50QXR0cnNbXCJoZWlnaHRcIl0pIHtcbiAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gY3VycmVudEF0dHJzW1wid2lkdGhcIl0gLyBjdXJyZW50QXR0cnNbXCJoZWlnaHRcIl07XG5cbiAgICAgIGlmIChuZXdXaWR0aCAmJiAhbmV3SGVpZ2h0KSB7XG4gICAgICAgIG5ld0hlaWdodCA9IE1hdGgucm91bmQobmV3V2lkdGggLyBhc3BlY3RSYXRpbyk7XG4gICAgICB9IGVsc2UgaWYgKG5ld0hlaWdodCAmJiAhbmV3V2lkdGgpIHtcbiAgICAgICAgbmV3V2lkdGggPSBNYXRoLnJvdW5kKG5ld0hlaWdodCAqIGFzcGVjdFJhdGlvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBtaW5pbXVtIGxpbWl0c1xuICAgIGlmIChuZXdXaWR0aCkge1xuICAgICAgbmV3V2lkdGggPSBNYXRoLm1heCg1MCwgbmV3V2lkdGgpO1xuICAgIH1cbiAgICBpZiAobmV3SGVpZ2h0KSB7XG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1heCg1MCwgbmV3SGVpZ2h0KTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUltYWdlQXR0cmlidXRlcyhlZGl0b3IsIHtcbiAgICAgIHdpZHRoOiBuZXdXaWR0aCxcbiAgICAgIGhlaWdodDogbmV3SGVpZ2h0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFByZWRldGVybWluZWQgcmVzaXplIGhlbHBlcnMgdXNlZCBieSBVSSAqL1xuICByZXNpemVJbWFnZVRvU21hbGwoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZUltYWdlKGVkaXRvciwgeyB3aWR0aDogMzAwLCBoZWlnaHQ6IDIwMCwgbWFpbnRhaW5Bc3BlY3RSYXRpbzogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlc2l6ZUltYWdlVG9NZWRpdW0oZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZUltYWdlKGVkaXRvciwgeyB3aWR0aDogNTAwLCBoZWlnaHQ6IDM1MCwgbWFpbnRhaW5Bc3BlY3RSYXRpbzogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlc2l6ZUltYWdlVG9MYXJnZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIHRoaXMucmVzaXplSW1hZ2UoZWRpdG9yLCB7IHdpZHRoOiA4MDAsIGhlaWdodDogNjAwLCBtYWludGFpbkFzcGVjdFJhdGlvOiB0cnVlIH0pO1xuICB9XG5cbiAgcmVzaXplSW1hZ2VUb09yaWdpbmFsKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgdGhpcy5yZXNpemVJbWFnZShlZGl0b3IsIHsgd2lkdGg6IGltZy5uYXR1cmFsV2lkdGgsIGhlaWdodDogaW1nLm5hdHVyYWxIZWlnaHQgfSk7XG4gICAgfTtcbiAgICBpbWcuc3JjID0gZWRpdG9yLmdldEF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiKVtcInNyY1wiXTtcbiAgfVxuXG4gIC8qKiBHZXQgY3VycmVudCBpbWFnZSBkaW1lbnNpb25zICovXG4gIGdldEltYWdlRGltZW5zaW9ucyhlZGl0b3I6IEVkaXRvcik6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGwge1xuICAgIGlmICghZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBhdHRycyA9IGVkaXRvci5nZXRBdHRyaWJ1dGVzKFwicmVzaXphYmxlSW1hZ2VcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiBhdHRyc1tcIndpZHRoXCJdIHx8IDAsXG4gICAgICBoZWlnaHQ6IGF0dHJzW1wiaGVpZ2h0XCJdIHx8IDAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgdGhlIHNlbGVjdGVkIGltYWdlICovXG4gIGRlbGV0ZUltYWdlKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKGVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICBlZGl0b3IuY2hhaW4oKS5mb2N1cygpLmRlbGV0ZVNlbGVjdGlvbigpLnJ1bigpO1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEb3dubG9hZCB0aGUgY3VycmVudCBpbWFnZSAqL1xuICBkb3dubG9hZEltYWdlKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgY29uc3QgYXR0cnMgPSBlZGl0b3IuZ2V0QXR0cmlidXRlcyhcInJlc2l6YWJsZUltYWdlXCIpO1xuICAgIGlmICghYXR0cnMgfHwgIWF0dHJzW1wic3JjXCJdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3JjID0gYXR0cnNbXCJzcmNcIl07XG4gICAgY29uc3QgZmlsZU5hbWUgPSBhdHRyc1tcImFsdFwiXSB8fCBcImltYWdlXCI7XG5cbiAgICAvLyBEZXRlY3QgaWYgaXQncyBiYXNlNjQgb3IgcmVtb3RlIFVSTFxuICAgIGlmIChcbiAgICAgIHNyYy5zdGFydHNXaXRoKFwiZGF0YTpcIikgfHxcbiAgICAgIHNyYy5zdGFydHNXaXRoKFwiYmxvYjpcIikgfHxcbiAgICAgIHNyYy5zdGFydHNXaXRoKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pXG4gICAgKSB7XG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG4gICAgICBsaW5rLmhyZWYgPSBzcmM7XG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5jbGljaygpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIHJlbW90ZSBVUkxzLCB3ZSB0cnkgdG8gZmV0Y2ggaXQgdG8gYnlwYXNzIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnMgb24gJ2Rvd25sb2FkJyBhdHRyaWJ1dGVcbiAgICAgIGZldGNoKHNyYylcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuYmxvYigpKVxuICAgICAgICAudGhlbihibG9iID0+IHtcbiAgICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG4gICAgICAgICAgbGluay5ocmVmID0gdXJsO1xuICAgICAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZTtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuICAgICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBkb3dubG9hZGluZyBpbWFnZTpcIiwgZXJyKTtcbiAgICAgICAgICAvLyBGYWxsYmFjayB0byBvcGVuaW5nIGluIG5ldyB0YWJcbiAgICAgICAgICB3aW5kb3cub3BlbihzcmMsIFwiX2JsYW5rXCIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlbGVjdGVkSW1hZ2UoYXR0cmlidXRlczogUGFydGlhbDxBdGVJbWFnZURhdGE+KTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRJbWFnZSgpO1xuICAgIGlmIChjdXJyZW50KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSW1hZ2Uuc2V0KHsgLi4uY3VycmVudCwgLi4uYXR0cmlidXRlcyB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogVmFsaWRhdGUgZmlsZSB0eXBlIGFuZCBzaXplICovXG4gIHZhbGlkYXRlSW1hZ2UoXG4gICAgZmlsZTogRmlsZSxcbiAgICBvcHRpb25zPzogeyBtYXhTaXplPzogbnVtYmVyOyBhbGxvd2VkVHlwZXM/OiBzdHJpbmdbXSB9XG4gICk6IHsgdmFsaWQ6IGJvb2xlYW47IGVycm9yPzogc3RyaW5nIH0ge1xuICAgIGNvbnN0IG1heFNpemUgPSBvcHRpb25zPy5tYXhTaXplIHx8IDEwICogMTAyNCAqIDEwMjQ7XG4gICAgY29uc3QgYWxsb3dlZFR5cGVzID0gb3B0aW9ucz8uYWxsb3dlZFR5cGVzIHx8IFtdO1xuXG4gICAgaWYgKGFsbG93ZWRUeXBlcy5sZW5ndGggPiAwICYmICFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSkge1xuICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogdGhpcy50KCkuaW52YWxpZEZpbGVUeXBlIH07XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuc2l6ZSA+IG1heFNpemUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGAke3RoaXMudCgpLmltYWdlVG9vTGFyZ2V9IChtYXggJHtNYXRoLnJvdW5kKG1heFNpemUgLyAxMDI0IC8gMTAyNCl9TUIpYCxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gIH1cblxuICAvKiogQ29tcHJlc3MgYW5kIHByb2Nlc3MgaW1hZ2Ugb24gY2xpZW50IHNpZGUgKi9cbiAgYXN5bmMgY29tcHJlc3NJbWFnZShcbiAgICBmaWxlOiBGaWxlLFxuICAgIHF1YWxpdHkgPSAwLjgsXG4gICAgbWF4V2lkdGggPSAxOTIwLFxuICAgIG1heEhlaWdodCA9IDEyMDBcbiAgKTogUHJvbWlzZTxBdGVJbWFnZVVwbG9hZFJlc3VsdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuXG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc1VwbG9hZGluZygpKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoNDApO1xuICAgICAgICAgIHRoaXMudXBsb2FkTWVzc2FnZS5zZXQodGhpcy50KCkucmVzaXppbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHsgd2lkdGgsIGhlaWdodCB9ID0gaW1nO1xuICAgICAgICBpZiAod2lkdGggPiBtYXhXaWR0aCB8fCBoZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICBjb25zdCByYXRpbyA9IE1hdGgubWluKG1heFdpZHRoIC8gd2lkdGgsIG1heEhlaWdodCAvIGhlaWdodCk7XG4gICAgICAgICAgd2lkdGggKj0gcmF0aW87XG4gICAgICAgICAgaGVpZ2h0ICo9IHJhdGlvO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIGN0eD8uZHJhd0ltYWdlKGltZywgMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNVcGxvYWRpbmcoKSkge1xuICAgICAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KDYwKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZE1lc3NhZ2Uuc2V0KHRoaXMudCgpLmNvbXByZXNzaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbnZhcy50b0Jsb2IoXG4gICAgICAgICAgYmxvYiA9PiB7XG4gICAgICAgICAgICBpZiAoYmxvYikge1xuICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gZS50YXJnZXQ/LnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICBzcmM6IGJhc2U2NCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgIHNpemU6IGJsb2Iuc2l6ZSxcbiAgICAgICAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZSxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBNYXRoLnJvdW5kKHdpZHRoKSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogTWF0aC5yb3VuZChoZWlnaHQpLFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTaXplOiBmaWxlLnNpemUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcih0aGlzLnQoKS5jb21wcmVzc2lvbkVycm9yKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaWxlLnR5cGUsXG4gICAgICAgICAgcXVhbGl0eVxuICAgICAgICApO1xuICAgICAgfTtcblxuICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiByZWplY3QobmV3IEVycm9yKHRoaXMudCgpLmxvYWRFcnJvcikpO1xuICAgICAgaW1nLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogQ29yZSB1cGxvYWQgbG9naWMgd2l0aCBwcm9ncmVzcyB0cmFja2luZyAqL1xuICBwcml2YXRlIGFzeW5jIHVwbG9hZEltYWdlV2l0aFByb2dyZXNzKFxuICAgIGVkaXRvcjogRWRpdG9yLFxuICAgIGZpbGU6IEZpbGUsXG4gICAgaW5zZXJ0aW9uU3RyYXRlZ3k6IChlZGl0b3I6IEVkaXRvciwgcmVzdWx0OiBBdGVJbWFnZVVwbG9hZFJlc3VsdCkgPT4gdm9pZCxcbiAgICBhY3Rpb25NZXNzYWdlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9uc1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5jdXJyZW50RWRpdG9yID0gZWRpdG9yO1xuICAgICAgdGhpcy5pc1VwbG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldCgxMCk7XG4gICAgICB0aGlzLnVwbG9hZE1lc3NhZ2Uuc2V0KHRoaXMudCgpLnZhbGlkYXRpbmcpO1xuICAgICAgdGhpcy5mb3JjZUVkaXRvclVwZGF0ZSgpO1xuXG4gICAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy52YWxpZGF0ZUltYWdlKGZpbGUsIHtcbiAgICAgICAgbWF4U2l6ZTogb3B0aW9ucz8ubWF4U2l6ZSxcbiAgICAgICAgYWxsb3dlZFR5cGVzOiBvcHRpb25zPy5hbGxvd2VkVHlwZXMsXG4gICAgICB9KTtcbiAgICAgIGlmICghdmFsaWRhdGlvbi52YWxpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IodmFsaWRhdGlvbi5lcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KDMwKTtcbiAgICAgIHRoaXMudXBsb2FkTWVzc2FnZS5zZXQodGhpcy50KCkuY29tcHJlc3NpbmcpO1xuICAgICAgdGhpcy5mb3JjZUVkaXRvclVwZGF0ZSgpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbXByZXNzSW1hZ2UoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIG9wdGlvbnM/LnF1YWxpdHkgfHwgMC44LFxuICAgICAgICBvcHRpb25zPy5tYXhXaWR0aCB8fCAxOTIwLFxuICAgICAgICBvcHRpb25zPy5tYXhIZWlnaHQgfHwgMTIwMFxuICAgICAgKTtcblxuICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoNzApO1xuXG4gICAgICAvLyBIYW5kbGUgY3VzdG9tIHVwbG9hZCBpZiBoYW5kbGVyIGlzIHByb3ZpZGVkXG4gICAgICBpZiAodGhpcy51cGxvYWRIYW5kbGVyKSB7XG4gICAgICAgIHRoaXMudXBsb2FkTWVzc2FnZS5zZXQodGhpcy50KCkudXBsb2FkaW5nVG9TZXJ2ZXIpO1xuICAgICAgICB0aGlzLmZvcmNlRWRpdG9yVXBkYXRlKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyUmVzcG9uc2UgPSB0aGlzLnVwbG9hZEhhbmRsZXIoe1xuICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgIHdpZHRoOiByZXN1bHQud2lkdGggfHwgMCxcbiAgICAgICAgICAgIGhlaWdodDogcmVzdWx0LmhlaWdodCB8fCAwLFxuICAgICAgICAgICAgdHlwZTogcmVzdWx0LnR5cGUsXG4gICAgICAgICAgICBiYXNlNjQ6IHJlc3VsdC5zcmMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBoYW5kbGVyUmVzdWx0ID0gaXNPYnNlcnZhYmxlKGhhbmRsZXJSZXNwb25zZSlcbiAgICAgICAgICAgID8gYXdhaXQgZmlyc3RWYWx1ZUZyb20oaGFuZGxlclJlc3BvbnNlKVxuICAgICAgICAgICAgOiBhd2FpdCBoYW5kbGVyUmVzcG9uc2U7XG5cbiAgICAgICAgICByZXN1bHQuc3JjID0gaGFuZGxlclJlc3VsdC5zcmM7XG4gICAgICAgICAgaWYgKGhhbmRsZXJSZXN1bHQuYWx0KSB7XG4gICAgICAgICAgICByZXN1bHQubmFtZSA9IGhhbmRsZXJSZXN1bHQuYWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoaGFuZGxlckVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcih0aGlzLnQoKS51cGxvYWRFcnJvciwgaGFuZGxlckVycm9yKTtcbiAgICAgICAgICB0aHJvdyBoYW5kbGVyRXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoOTApO1xuICAgICAgdGhpcy51cGxvYWRNZXNzYWdlLnNldChhY3Rpb25NZXNzYWdlKTtcbiAgICAgIHRoaXMuZm9yY2VFZGl0b3JVcGRhdGUoKTtcblxuICAgICAgLy8gRmluYWwgaW5zZXJ0aW9uXG4gICAgICBpbnNlcnRpb25TdHJhdGVneShlZGl0b3IsIHJlc3VsdCk7XG5cbiAgICAgIHRoaXMucmVzZXRVcGxvYWRTdGF0ZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnJlc2V0VXBsb2FkU3RhdGUoKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IodGhpcy50KCkudXBsb2FkRXJyb3IsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRVcGxvYWRTdGF0ZSgpIHtcbiAgICB0aGlzLmlzVXBsb2FkaW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMCk7XG4gICAgdGhpcy51cGxvYWRNZXNzYWdlLnNldChcIlwiKTtcbiAgICB0aGlzLmZvcmNlRWRpdG9yVXBkYXRlKCk7XG4gICAgdGhpcy5jdXJyZW50RWRpdG9yID0gbnVsbDtcbiAgfVxuXG4gIC8qKiBNYWluIGVudHJ5IHBvaW50IGZvciBmaWxlIHVwbG9hZCBhbmQgaW5zZXJ0aW9uICovXG4gIGFzeW5jIHVwbG9hZEFuZEluc2VydEltYWdlKFxuICAgIGVkaXRvcjogRWRpdG9yLFxuICAgIGZpbGU6IEZpbGUsXG4gICAgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9uc1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy51cGxvYWRJbWFnZVdpdGhQcm9ncmVzcyhcbiAgICAgIGVkaXRvcixcbiAgICAgIGZpbGUsXG4gICAgICAoZWQsIHJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLmluc2VydEltYWdlKGVkLCB7XG4gICAgICAgICAgc3JjOiByZXN1bHQuc3JjLFxuICAgICAgICAgIGFsdDogcmVzdWx0Lm5hbWUsXG4gICAgICAgICAgdGl0bGU6IGAke3Jlc3VsdC5uYW1lfSAoJHtyZXN1bHQud2lkdGh9w5cke3Jlc3VsdC5oZWlnaHR9KWAsXG4gICAgICAgICAgd2lkdGg6IHJlc3VsdC53aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IHJlc3VsdC5oZWlnaHQsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHRoaXMudCgpLmluc2VydGluZ0ltYWdlLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH1cblxuICAvKiogVHJpZ2dlciBhbiBlZGl0b3IgdHJhbnNhY3Rpb24gdG8gZm9yY2UgZGVjb3JhdGlvbiB1cGRhdGUgKi9cbiAgcHJpdmF0ZSBmb3JjZUVkaXRvclVwZGF0ZSgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50RWRpdG9yKSB7XG4gICAgICBjb25zdCB7IHRyIH0gPSB0aGlzLmN1cnJlbnRFZGl0b3Iuc3RhdGU7XG4gICAgICB0aGlzLmN1cnJlbnRFZGl0b3Iudmlldy5kaXNwYXRjaCh0cik7XG4gICAgfVxuICB9XG5cbiAgLyoqIEdlbmVyaWMgaGVscGVyIHRvIG9wZW4gZmlsZSBwaWNrZXIgYW5kIHByb2Nlc3Mgc2VsZWN0aW9uICovXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0RmlsZUFuZFByb2Nlc3MoXG4gICAgZWRpdG9yOiBFZGl0b3IsXG4gICAgdXBsb2FkTWV0aG9kOiAoZWRpdG9yOiBFZGl0b3IsIGZpbGU6IEZpbGUsIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpID0+IFByb21pc2U8dm9pZD4sXG4gICAgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9uc1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XG5cbiAgICAgIC8vIFVzZSBhbGxvd2VkVHlwZXMgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBkZWZhdWx0IHRvIGltYWdlLypcbiAgICAgIGlmIChvcHRpb25zPy5hbGxvd2VkVHlwZXMgJiYgb3B0aW9ucy5hbGxvd2VkVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLmFsbG93ZWRUeXBlcy5qb2luKFwiLFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0LmFjY2VwdCA9IFwiaW1hZ2UvKlwiO1xuICAgICAgfVxuXG4gICAgICBpbnB1dC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgYXN5bmMgZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSAoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuZmlsZXM/LlswXTtcbiAgICAgICAgaWYgKGZpbGUgJiYgZmlsZS50eXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdXBsb2FkTWV0aG9kKGVkaXRvciwgZmlsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy50KCkubm9GaWxlU2VsZWN0ZWQpKTtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlucHV0KTtcbiAgICAgIH0pO1xuXG4gICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbnB1dCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy50KCkuc2VsZWN0aW9uQ2FuY2VsbGVkKSk7XG4gICAgICB9KTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbnB1dCk7XG4gICAgICBpbnB1dC5jbGljaygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFNlbGVjdCBmaWxlIGFuZCB1cGxvYWQgYXMgbmV3IGltYWdlICovXG4gIGFzeW5jIHNlbGVjdEFuZFVwbG9hZEltYWdlKGVkaXRvcjogRWRpdG9yLCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0RmlsZUFuZFByb2Nlc3MoZWRpdG9yLCB0aGlzLnVwbG9hZEFuZEluc2VydEltYWdlLmJpbmQodGhpcyksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIFNlbGVjdCBmaWxlIGFuZCByZXBsYWNlIGN1cnJlbnRseSBzZWxlY3RlZCBpbWFnZSAqL1xuICBhc3luYyBzZWxlY3RBbmRSZXBsYWNlSW1hZ2UoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBObyBuZWVkIGZvciBjb21wbGljYXRlZCBiYWNrdXAvcmVzdG9yZSBub3cgdGhhdCB3ZSBkb24ndCBkZWxldGUgcHJlbWF0dXJlbHkuXG4gICAgLy8gVGhlIHVwbG9hZEFuZFJlcGxhY2VJbWFnZSB3aWxsIGhhbmRsZSB0aGUgYXRvbWljIHJlcGxhY2VtZW50LlxuICAgIHJldHVybiB0aGlzLnNlbGVjdEZpbGVBbmRQcm9jZXNzKGVkaXRvciwgdGhpcy51cGxvYWRBbmRSZXBsYWNlSW1hZ2UuYmluZCh0aGlzKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogSW50ZXJuYWwgaGVscGVyIHVzZWQgYnkgcmVwbGFjZW1lbnQgbG9naWMgKi9cbiAgYXN5bmMgdXBsb2FkQW5kUmVwbGFjZUltYWdlKFxuICAgIGVkaXRvcjogRWRpdG9yLFxuICAgIGZpbGU6IEZpbGUsXG4gICAgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9uc1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBTdG9yZSBjdXJyZW50IHBvc2l0aW9uIHRvIGVuc3VyZSB3ZSBjYW4gcmUtc2VsZWN0IHRoZSBpbWFnZSBldmVuIGlmIHNlbGVjdGlvbiBibHVycyBkdXJpbmcgdXBsb2FkXG4gICAgY29uc3Qgd2FzQWN0aXZlID0gZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIik7XG5cbiAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlV2l0aFByb2dyZXNzKFxuICAgICAgZWRpdG9yLFxuICAgICAgZmlsZSxcbiAgICAgIChlZCwgcmVzdWx0KSA9PiB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IHtcbiAgICAgICAgICBzcmM6IHJlc3VsdC5zcmMsXG4gICAgICAgICAgYWx0OiByZXN1bHQubmFtZSxcbiAgICAgICAgICB0aXRsZTogYCR7cmVzdWx0Lm5hbWV9ICgke3Jlc3VsdC53aWR0aH3DlyR7cmVzdWx0LmhlaWdodH0pYCxcbiAgICAgICAgICB3aWR0aDogcmVzdWx0LndpZHRoLFxuICAgICAgICAgIGhlaWdodDogcmVzdWx0LmhlaWdodCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJZiB0aGUgaW1hZ2Ugd2FzIGFjdGl2ZSBvciBpcyBzdGlsbCBhY3RpdmUsIHVwZGF0ZSBpdCBhdG9taWNhbGx5XG4gICAgICAgIGlmICh3YXNBY3RpdmUgfHwgZWQuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKSkge1xuICAgICAgICAgIGVkLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAudXBkYXRlQXR0cmlidXRlcyhcInJlc2l6YWJsZUltYWdlXCIsIGltYWdlRGF0YSlcbiAgICAgICAgICAgIC5jb21tYW5kKCh7IHRyLCBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgZnJvbSB9ID0gdHIuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAvLyBSZS1zZWxlY3QgdGhlIG5vZGUgYXQgaXRzIG1hcHBlZCBwb3NpdGlvbiBvciBjdXJyZW50IHNlbGVjdGlvblxuICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0Tm9kZVNlbGVjdGlvbihmcm9tKSB8fCBjb21tYW5kcy5zZXROb2RlU2VsZWN0aW9uKGZyb20gLSAxKSB8fCB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5ydW4oKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkSW1hZ2UoaW1hZ2VEYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgcmVwbGFjZSB3aGF0ZXZlciBpcyBzZWxlY3RlZCAob3IgaW5zZXJ0IGF0IGN1cnNvcilcbiAgICAgICAgICB0aGlzLmluc2VydEltYWdlKGVkLCBpbWFnZURhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWZ0ZXIgcmVwbGFjZW1lbnQsIGVuc3VyZSB0aGUgaW1hZ2UgaXMgdHJhY2tlZCBpbiBvdXIgc2lnbmFsc1xuICAgICAgICB0aGlzLnNlbGVjdEltYWdlKGVkKTtcbiAgICAgIH0sXG4gICAgICB0aGlzLnQoKS5yZXBsYWNpbmdJbWFnZSxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBpbWFnZSBkcm9wIGV2ZW50LlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwb3NpdGlvbiBmcm9tIGNvb3JkaW5hdGVzIGFuZCBzZXRzIHRoZSBzZWxlY3Rpb24gYWNjb3JkaW5nbHkuXG4gICAqL1xuICBoYW5kbGVEcm9wKGVkaXRvcjogRWRpdG9yLCBldmVudDogRHJhZ0V2ZW50LCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xuICAgIGlmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IEFycmF5LmZyb20oZmlsZXMpLmZpbmQoZiA9PiBmLnR5cGUuc3RhcnRzV2l0aChcImltYWdlL1wiKSk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBkcm9wIHBvc2l0aW9uIGZyb20gY29vcmRpbmF0ZXNcbiAgICBjb25zdCBwb3MgPSBlZGl0b3Iudmlldy5wb3NBdENvb3Jkcyh7IGxlZnQ6IGV2ZW50LmNsaWVudFgsIHRvcDogZXZlbnQuY2xpZW50WSB9KTtcbiAgICBpZiAocG9zKSB7XG4gICAgICBlZGl0b3IuY29tbWFuZHMuc2V0VGV4dFNlbGVjdGlvbihwb3MucG9zKTtcbiAgICB9XG5cbiAgICB2b2lkIHRoaXMudXBsb2FkQW5kSW5zZXJ0SW1hZ2UoZWRpdG9yLCBmaWxlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgaW1hZ2UgcGFzdGUgZXZlbnQuXG4gICAqL1xuICBoYW5kbGVQYXN0ZShlZGl0b3I6IEVkaXRvciwgZXZlbnQ6IENsaXBib2FyZEV2ZW50LCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2xpcGJvYXJkRmlsZXMgPSBldmVudC5jbGlwYm9hcmREYXRhPy5maWxlcztcbiAgICBpZiAoIWNsaXBib2FyZEZpbGVzIHx8IGNsaXBib2FyZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGltYWdlRmlsZSA9IEFycmF5LmZyb20oY2xpcGJvYXJkRmlsZXMpLmZpbmQoZmlsZSA9PiBmaWxlLnR5cGUuc3RhcnRzV2l0aChcImltYWdlL1wiKSk7XG4gICAgaWYgKCFpbWFnZUZpbGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHZvaWQgdGhpcy51cGxvYWRBbmRJbnNlcnRJbWFnZShlZGl0b3IsIGltYWdlRmlsZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWltYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRpcHRhcC1lZGl0b3Ivc3JjL2xpYi9zZXJ2aWNlcy9hdGUtaW1hZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFVcEQsTUFBTSxPQUFPLGVBQWU7SUFENUI7UUFJRSw4QkFBOEI7UUFDOUIsa0JBQWEsR0FBRyxNQUFNLENBQXNCLElBQUksQ0FBQyxDQUFDO1FBQ2xELG9CQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUVoRSxxQkFBcUI7UUFDckIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuQixTQUFJLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JCLE1BQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUUzQywyQkFBMkI7UUFDM0IsZ0JBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0Isa0JBQWEsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFM0I7OztXQUdHO1FBQ0gsa0JBQWEsR0FBaUMsSUFBSSxDQUFDO1FBRTNDLGtCQUFhLEdBQWtCLElBQUksQ0FBQztLQXloQjdDO0lBdmhCQyxnREFBZ0Q7SUFDaEQsV0FBVyxDQUFDLE1BQWM7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QUFDO0lBQ2QsQ0FBQzsrR0FoakJVLGVBQWU7bUhBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBFZGl0b3IgfSBmcm9tIFwiQHRpcHRhcC9jb3JlXCI7XG5pbXBvcnQgeyBpc09ic2VydmFibGUsIGZpcnN0VmFsdWVGcm9tIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEF0ZUkxOG5TZXJ2aWNlIH0gZnJvbSBcIi4vYXRlLWkxOG4uc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgQXRlUmVzaXplT3B0aW9ucyxcbiAgQXRlSW1hZ2VVcGxvYWRPcHRpb25zLFxuICBBdGVJbWFnZVVwbG9hZEhhbmRsZXIsXG4gIEF0ZUltYWdlVXBsb2FkUmVzdWx0LFxuICBBdGVJbWFnZURhdGEsXG59IGZyb20gXCIuLi9tb2RlbHMvYXRlLWltYWdlLm1vZGVsXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBdGVJbWFnZVNlcnZpY2Uge1xuICBvbkltYWdlVXBsb2FkZWRDYWxsYmFjaz86IChyZXN1bHQ6IEF0ZUltYWdlVXBsb2FkUmVzdWx0KSA9PiB2b2lkO1xuXG4gIC8qKiBTaWduYWxzIGZvciBpbWFnZSBzdGF0ZSAqL1xuICBzZWxlY3RlZEltYWdlID0gc2lnbmFsPEF0ZUltYWdlRGF0YSB8IG51bGw+KG51bGwpO1xuICBpc0ltYWdlU2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkSW1hZ2UoKSAhPT0gbnVsbCk7XG5cbiAgLyoqIFJlc2l6aW5nIHN0YXRlICovXG4gIGlzUmVzaXppbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgaTE4biA9IGluamVjdChBdGVJMThuU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdCA9IHRoaXMuaTE4bi5pbWFnZVVwbG9hZDtcblxuICAvKiogVXBsb2FkIHN0YXRlIHNpZ25hbHMgKi9cbiAgaXNVcGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICB1cGxvYWRQcm9ncmVzcyA9IHNpZ25hbCgwKTtcbiAgdXBsb2FkTWVzc2FnZSA9IHNpZ25hbChcIlwiKTtcblxuICAvKipcbiAgICogQ3VzdG9tIHVwbG9hZCBoYW5kbGVyLlxuICAgKiBJZiBzZXQsIHRoaXMgaGFuZGxlciByZXBsYWNlcyB0aGUgZGVmYXVsdCBiYXNlNjQgY29udmVyc2lvbi5cbiAgICovXG4gIHVwbG9hZEhhbmRsZXI6IEF0ZUltYWdlVXBsb2FkSGFuZGxlciB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgY3VycmVudEVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFNlbGVjdCBhbmQgdHJhY2sgYW4gaW1hZ2UgZnJvbSB0aGUgZWRpdG9yICovXG4gIHNlbGVjdEltYWdlKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKGVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICBjb25zdCBhdHRycyA9IGVkaXRvci5nZXRBdHRyaWJ1dGVzKFwicmVzaXphYmxlSW1hZ2VcIik7XG4gICAgICB0aGlzLnNlbGVjdGVkSW1hZ2Uuc2V0KHtcbiAgICAgICAgc3JjOiBhdHRyc1tcInNyY1wiXSxcbiAgICAgICAgYWx0OiBhdHRyc1tcImFsdFwiXSxcbiAgICAgICAgdGl0bGU6IGF0dHJzW1widGl0bGVcIl0sXG4gICAgICAgIHdpZHRoOiBhdHRyc1tcIndpZHRoXCJdLFxuICAgICAgICBoZWlnaHQ6IGF0dHJzW1wiaGVpZ2h0XCJdLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5zZXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEltYWdlLnNldChudWxsKTtcbiAgfVxuXG4gIC8qKiBJbnNlcnQgYSBuZXcgaW1hZ2UgYW5kIGVuc3VyZSBpdCdzIHNlbGVjdGVkICovXG4gIGluc2VydEltYWdlKGVkaXRvcjogRWRpdG9yLCBpbWFnZURhdGE6IEF0ZUltYWdlRGF0YSk6IHZvaWQge1xuICAgIGVkaXRvclxuICAgICAgLmNoYWluKClcbiAgICAgIC5mb2N1cygpXG4gICAgICAuc2V0UmVzaXphYmxlSW1hZ2UoaW1hZ2VEYXRhKVxuICAgICAgLmNvbW1hbmQoKHsgdHIsIGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgLy8gU2VsZWN0aW9uIGlzIHVzdWFsbHkgYWZ0ZXIgdGhlIG5vZGUuIE5vZGUgaXMgYXQgdHIuc2VsZWN0aW9uLmZyb20gLSAxLlxuICAgICAgICBjb25zdCB7IGZyb20gfSA9IHRyLnNlbGVjdGlvbjtcbiAgICAgICAgLy8gVHJ5IHRvIHNlbGVjdCBub2RlIGF0IGN1cnJlbnQgcG9zIChpZiBpdCB3YXMgYWxyZWFkeSBzZWxlY3RlZCkgb3IgcHJldmlvdXMgcG9zXG4gICAgICAgIHJldHVybiBjb21tYW5kcy5zZXROb2RlU2VsZWN0aW9uKGZyb20pIHx8IGNvbW1hbmRzLnNldE5vZGVTZWxlY3Rpb24oZnJvbSAtIDEpIHx8IHRydWU7XG4gICAgICB9KVxuICAgICAgLnJ1bigpO1xuICB9XG5cbiAgLyoqIFVwZGF0ZSBhdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGltYWdlICovXG4gIHVwZGF0ZUltYWdlQXR0cmlidXRlcyhlZGl0b3I6IEVkaXRvciwgYXR0cmlidXRlczogUGFydGlhbDxBdGVJbWFnZURhdGE+KTogdm9pZCB7XG4gICAgaWYgKGVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICBjb25zdCBwb3MgPSBlZGl0b3Iuc3RhdGUuc2VsZWN0aW9uLmZyb207XG4gICAgICBlZGl0b3JcbiAgICAgICAgLmNoYWluKClcbiAgICAgICAgLmZvY3VzKClcbiAgICAgICAgLnVwZGF0ZUF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiLCBhdHRyaWJ1dGVzKVxuICAgICAgICAuc2V0Tm9kZVNlbGVjdGlvbihwb3MpXG4gICAgICAgIC5ydW4oKTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRJbWFnZShhdHRyaWJ1dGVzKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVzaXplIGltYWdlIHdpdGggb3B0aW9uYWwgYXNwZWN0IHJhdGlvIG1haW50ZW5hbmNlICovXG4gIHJlc2l6ZUltYWdlKGVkaXRvcjogRWRpdG9yLCBvcHRpb25zOiBBdGVSZXNpemVPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRBdHRycyA9IGVkaXRvci5nZXRBdHRyaWJ1dGVzKFwicmVzaXphYmxlSW1hZ2VcIik7XG4gICAgbGV0IG5ld1dpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICBsZXQgbmV3SGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQ7XG5cbiAgICAvLyBNYWludGFpbiBhc3BlY3QgcmF0aW8gaWYgcmVxdWVzdGVkXG4gICAgaWYgKG9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbyAhPT0gZmFsc2UgJiYgY3VycmVudEF0dHJzW1wid2lkdGhcIl0gJiYgY3VycmVudEF0dHJzW1wiaGVpZ2h0XCJdKSB7XG4gICAgICBjb25zdCBhc3BlY3RSYXRpbyA9IGN1cnJlbnRBdHRyc1tcIndpZHRoXCJdIC8gY3VycmVudEF0dHJzW1wiaGVpZ2h0XCJdO1xuXG4gICAgICBpZiAobmV3V2lkdGggJiYgIW5ld0hlaWdodCkge1xuICAgICAgICBuZXdIZWlnaHQgPSBNYXRoLnJvdW5kKG5ld1dpZHRoIC8gYXNwZWN0UmF0aW8pO1xuICAgICAgfSBlbHNlIGlmIChuZXdIZWlnaHQgJiYgIW5ld1dpZHRoKSB7XG4gICAgICAgIG5ld1dpZHRoID0gTWF0aC5yb3VuZChuZXdIZWlnaHQgKiBhc3BlY3RSYXRpbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgbWluaW11bSBsaW1pdHNcbiAgICBpZiAobmV3V2lkdGgpIHtcbiAgICAgIG5ld1dpZHRoID0gTWF0aC5tYXgoNTAsIG5ld1dpZHRoKTtcbiAgICB9XG4gICAgaWYgKG5ld0hlaWdodCkge1xuICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5tYXgoNTAsIG5ld0hlaWdodCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVJbWFnZUF0dHJpYnV0ZXMoZWRpdG9yLCB7XG4gICAgICB3aWR0aDogbmV3V2lkdGgsXG4gICAgICBoZWlnaHQ6IG5ld0hlaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBQcmVkZXRlcm1pbmVkIHJlc2l6ZSBoZWxwZXJzIHVzZWQgYnkgVUkgKi9cbiAgcmVzaXplSW1hZ2VUb1NtYWxsKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVJbWFnZShlZGl0b3IsIHsgd2lkdGg6IDMwMCwgaGVpZ2h0OiAyMDAsIG1haW50YWluQXNwZWN0UmF0aW86IHRydWUgfSk7XG4gIH1cblxuICByZXNpemVJbWFnZVRvTWVkaXVtKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVJbWFnZShlZGl0b3IsIHsgd2lkdGg6IDUwMCwgaGVpZ2h0OiAzNTAsIG1haW50YWluQXNwZWN0UmF0aW86IHRydWUgfSk7XG4gIH1cblxuICByZXNpemVJbWFnZVRvTGFyZ2UoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZUltYWdlKGVkaXRvciwgeyB3aWR0aDogODAwLCBoZWlnaHQ6IDYwMCwgbWFpbnRhaW5Bc3BlY3RSYXRpbzogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlc2l6ZUltYWdlVG9PcmlnaW5hbChlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVzaXplSW1hZ2UoZWRpdG9yLCB7IHdpZHRoOiBpbWcubmF0dXJhbFdpZHRoLCBoZWlnaHQ6IGltZy5uYXR1cmFsSGVpZ2h0IH0pO1xuICAgIH07XG4gICAgaW1nLnNyYyA9IGVkaXRvci5nZXRBdHRyaWJ1dGVzKFwicmVzaXphYmxlSW1hZ2VcIilbXCJzcmNcIl07XG4gIH1cblxuICAvKiogR2V0IGN1cnJlbnQgaW1hZ2UgZGltZW5zaW9ucyAqL1xuICBnZXRJbWFnZURpbWVuc2lvbnMoZWRpdG9yOiBFZGl0b3IpOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICBpZiAoIWVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgYXR0cnMgPSBlZGl0b3IuZ2V0QXR0cmlidXRlcyhcInJlc2l6YWJsZUltYWdlXCIpO1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogYXR0cnNbXCJ3aWR0aFwiXSB8fCAwLFxuICAgICAgaGVpZ2h0OiBhdHRyc1tcImhlaWdodFwiXSB8fCAwLFxuICAgIH07XG4gIH1cblxuICAvKiogUmVtb3ZlIHRoZSBzZWxlY3RlZCBpbWFnZSAqL1xuICBkZWxldGVJbWFnZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmIChlZGl0b3IuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKSkge1xuICAgICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5kZWxldGVTZWxlY3Rpb24oKS5ydW4oKTtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKiogRG93bmxvYWQgdGhlIGN1cnJlbnQgaW1hZ2UgKi9cbiAgZG93bmxvYWRJbWFnZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGNvbnN0IGF0dHJzID0gZWRpdG9yLmdldEF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiKTtcbiAgICBpZiAoIWF0dHJzIHx8ICFhdHRyc1tcInNyY1wiXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNyYyA9IGF0dHJzW1wic3JjXCJdO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gYXR0cnNbXCJhbHRcIl0gfHwgXCJpbWFnZVwiO1xuXG4gICAgLy8gRGV0ZWN0IGlmIGl0J3MgYmFzZTY0IG9yIHJlbW90ZSBVUkxcbiAgICBpZiAoXG4gICAgICBzcmMuc3RhcnRzV2l0aChcImRhdGE6XCIpIHx8XG4gICAgICBzcmMuc3RhcnRzV2l0aChcImJsb2I6XCIpIHx8XG4gICAgICBzcmMuc3RhcnRzV2l0aCh3aW5kb3cubG9jYXRpb24ub3JpZ2luKVxuICAgICkge1xuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgbGluay5ocmVmID0gc3JjO1xuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciByZW1vdGUgVVJMcywgd2UgdHJ5IHRvIGZldGNoIGl0IHRvIGJ5cGFzcyBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zIG9uICdkb3dubG9hZCcgYXR0cmlidXRlXG4gICAgICBmZXRjaChzcmMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmJsb2IoKSlcbiAgICAgICAgLnRoZW4oYmxvYiA9PiB7XG4gICAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAgICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZG93bmxvYWRpbmcgaW1hZ2U6XCIsIGVycik7XG4gICAgICAgICAgLy8gRmFsbGJhY2sgdG8gb3BlbmluZyBpbiBuZXcgdGFiXG4gICAgICAgICAgd2luZG93Lm9wZW4oc3JjLCBcIl9ibGFua1wiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZEltYWdlKGF0dHJpYnV0ZXM6IFBhcnRpYWw8QXRlSW1hZ2VEYXRhPik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnNlbGVjdGVkSW1hZ2UoKTtcbiAgICBpZiAoY3VycmVudCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLnNldCh7IC4uLmN1cnJlbnQsIC4uLmF0dHJpYnV0ZXMgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFZhbGlkYXRlIGZpbGUgdHlwZSBhbmQgc2l6ZSAqL1xuICB2YWxpZGF0ZUltYWdlKFxuICAgIGZpbGU6IEZpbGUsXG4gICAgb3B0aW9ucz86IHsgbWF4U2l6ZT86IG51bWJlcjsgYWxsb3dlZFR5cGVzPzogc3RyaW5nW10gfVxuICApOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZyB9IHtcbiAgICBjb25zdCBtYXhTaXplID0gb3B0aW9ucz8ubWF4U2l6ZSB8fCAxMCAqIDEwMjQgKiAxMDI0O1xuICAgIGNvbnN0IGFsbG93ZWRUeXBlcyA9IG9wdGlvbnM/LmFsbG93ZWRUeXBlcyB8fCBbXTtcblxuICAgIGlmIChhbGxvd2VkVHlwZXMubGVuZ3RoID4gMCAmJiAhYWxsb3dlZFR5cGVzLmluY2x1ZGVzKGZpbGUudHlwZSkpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IHRoaXMudCgpLmludmFsaWRGaWxlVHlwZSB9O1xuICAgIH1cblxuICAgIGlmIChmaWxlLnNpemUgPiBtYXhTaXplKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIGVycm9yOiBgJHt0aGlzLnQoKS5pbWFnZVRvb0xhcmdlfSAobWF4ICR7TWF0aC5yb3VuZChtYXhTaXplIC8gMTAyNCAvIDEwMjQpfU1CKWAsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xuICB9XG5cbiAgLyoqIENvbXByZXNzIGFuZCBwcm9jZXNzIGltYWdlIG9uIGNsaWVudCBzaWRlICovXG4gIGFzeW5jIGNvbXByZXNzSW1hZ2UoXG4gICAgZmlsZTogRmlsZSxcbiAgICBxdWFsaXR5ID0gMC44LFxuICAgIG1heFdpZHRoID0gMTkyMCxcbiAgICBtYXhIZWlnaHQgPSAxMjAwXG4gICk6IFByb21pc2U8QXRlSW1hZ2VVcGxvYWRSZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcblxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNVcGxvYWRpbmcoKSkge1xuICAgICAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KDQwKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZE1lc3NhZ2Uuc2V0KHRoaXMudCgpLnJlc2l6aW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB7IHdpZHRoLCBoZWlnaHQgfSA9IGltZztcbiAgICAgICAgaWYgKHdpZHRoID4gbWF4V2lkdGggfHwgaGVpZ2h0ID4gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgY29uc3QgcmF0aW8gPSBNYXRoLm1pbihtYXhXaWR0aCAvIHdpZHRoLCBtYXhIZWlnaHQgLyBoZWlnaHQpO1xuICAgICAgICAgIHdpZHRoICo9IHJhdGlvO1xuICAgICAgICAgIGhlaWdodCAqPSByYXRpbztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBjdHg/LmRyYXdJbWFnZShpbWcsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nKCkpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldCg2MCk7XG4gICAgICAgICAgdGhpcy51cGxvYWRNZXNzYWdlLnNldCh0aGlzLnQoKS5jb21wcmVzc2luZyk7XG4gICAgICAgIH1cblxuICAgICAgICBjYW52YXMudG9CbG9iKFxuICAgICAgICAgIGJsb2IgPT4ge1xuICAgICAgICAgICAgaWYgKGJsb2IpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IGUudGFyZ2V0Py5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgc3JjOiBiYXNlNjQsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICBzaXplOiBibG9iLnNpemUsXG4gICAgICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogTWF0aC5yb3VuZCh3aWR0aCksXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IE1hdGgucm91bmQoaGVpZ2h0KSxcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU2l6ZTogZmlsZS5zaXplLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy50KCkuY29tcHJlc3Npb25FcnJvcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmlsZS50eXBlLFxuICAgICAgICAgIHF1YWxpdHlcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIGltZy5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcih0aGlzLnQoKS5sb2FkRXJyb3IpKTtcbiAgICAgIGltZy5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIENvcmUgdXBsb2FkIGxvZ2ljIHdpdGggcHJvZ3Jlc3MgdHJhY2tpbmcgKi9cbiAgcHJpdmF0ZSBhc3luYyB1cGxvYWRJbWFnZVdpdGhQcm9ncmVzcyhcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICBmaWxlOiBGaWxlLFxuICAgIGluc2VydGlvblN0cmF0ZWd5OiAoZWRpdG9yOiBFZGl0b3IsIHJlc3VsdDogQXRlSW1hZ2VVcGxvYWRSZXN1bHQpID0+IHZvaWQsXG4gICAgYWN0aW9uTWVzc2FnZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY3VycmVudEVkaXRvciA9IGVkaXRvcjtcbiAgICAgIHRoaXMuaXNVcGxvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMTApO1xuICAgICAgdGhpcy51cGxvYWRNZXNzYWdlLnNldCh0aGlzLnQoKS52YWxpZGF0aW5nKTtcbiAgICAgIHRoaXMuZm9yY2VFZGl0b3JVcGRhdGUoKTtcblxuICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHRoaXMudmFsaWRhdGVJbWFnZShmaWxlLCB7XG4gICAgICAgIG1heFNpemU6IG9wdGlvbnM/Lm1heFNpemUsXG4gICAgICAgIGFsbG93ZWRUeXBlczogb3B0aW9ucz8uYWxsb3dlZFR5cGVzLFxuICAgICAgfSk7XG4gICAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHZhbGlkYXRpb24uZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldCgzMCk7XG4gICAgICB0aGlzLnVwbG9hZE1lc3NhZ2Uuc2V0KHRoaXMudCgpLmNvbXByZXNzaW5nKTtcbiAgICAgIHRoaXMuZm9yY2VFZGl0b3JVcGRhdGUoKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb21wcmVzc0ltYWdlKFxuICAgICAgICBmaWxlLFxuICAgICAgICBvcHRpb25zPy5xdWFsaXR5IHx8IDAuOCxcbiAgICAgICAgb3B0aW9ucz8ubWF4V2lkdGggfHwgMTkyMCxcbiAgICAgICAgb3B0aW9ucz8ubWF4SGVpZ2h0IHx8IDEyMDBcbiAgICAgICk7XG5cbiAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KDcwKTtcblxuICAgICAgLy8gSGFuZGxlIGN1c3RvbSB1cGxvYWQgaWYgaGFuZGxlciBpcyBwcm92aWRlZFxuICAgICAgaWYgKHRoaXMudXBsb2FkSGFuZGxlcikge1xuICAgICAgICB0aGlzLnVwbG9hZE1lc3NhZ2Uuc2V0KHRoaXMudCgpLnVwbG9hZGluZ1RvU2VydmVyKTtcbiAgICAgICAgdGhpcy5mb3JjZUVkaXRvclVwZGF0ZSgpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlclJlc3BvbnNlID0gdGhpcy51cGxvYWRIYW5kbGVyKHtcbiAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICB3aWR0aDogcmVzdWx0LndpZHRoIHx8IDAsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlc3VsdC5oZWlnaHQgfHwgMCxcbiAgICAgICAgICAgIHR5cGU6IHJlc3VsdC50eXBlLFxuICAgICAgICAgICAgYmFzZTY0OiByZXN1bHQuc3JjLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgaGFuZGxlclJlc3VsdCA9IGlzT2JzZXJ2YWJsZShoYW5kbGVyUmVzcG9uc2UpXG4gICAgICAgICAgICA/IGF3YWl0IGZpcnN0VmFsdWVGcm9tKGhhbmRsZXJSZXNwb25zZSlcbiAgICAgICAgICAgIDogYXdhaXQgaGFuZGxlclJlc3BvbnNlO1xuXG4gICAgICAgICAgcmVzdWx0LnNyYyA9IGhhbmRsZXJSZXN1bHQuc3JjO1xuICAgICAgICAgIGlmIChoYW5kbGVyUmVzdWx0LmFsdCkge1xuICAgICAgICAgICAgcmVzdWx0Lm5hbWUgPSBoYW5kbGVyUmVzdWx0LmFsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGhhbmRsZXJFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IodGhpcy50KCkudXBsb2FkRXJyb3IsIGhhbmRsZXJFcnJvcik7XG4gICAgICAgICAgdGhyb3cgaGFuZGxlckVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KDkwKTtcbiAgICAgIHRoaXMudXBsb2FkTWVzc2FnZS5zZXQoYWN0aW9uTWVzc2FnZSk7XG4gICAgICB0aGlzLmZvcmNlRWRpdG9yVXBkYXRlKCk7XG5cbiAgICAgIC8vIEZpbmFsIGluc2VydGlvblxuICAgICAgaW5zZXJ0aW9uU3RyYXRlZ3koZWRpdG9yLCByZXN1bHQpO1xuXG4gICAgICBpZiAodGhpcy5vbkltYWdlVXBsb2FkZWRDYWxsYmFjaykge1xuICAgICAgICB0aGlzLm9uSW1hZ2VVcGxvYWRlZENhbGxiYWNrKHJlc3VsdCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVzZXRVcGxvYWRTdGF0ZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnJlc2V0VXBsb2FkU3RhdGUoKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IodGhpcy50KCkudXBsb2FkRXJyb3IsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRVcGxvYWRTdGF0ZSgpIHtcbiAgICB0aGlzLmlzVXBsb2FkaW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMCk7XG4gICAgdGhpcy51cGxvYWRNZXNzYWdlLnNldChcIlwiKTtcbiAgICB0aGlzLmZvcmNlRWRpdG9yVXBkYXRlKCk7XG4gICAgdGhpcy5jdXJyZW50RWRpdG9yID0gbnVsbDtcbiAgfVxuXG4gIC8qKiBNYWluIGVudHJ5IHBvaW50IGZvciBmaWxlIHVwbG9hZCBhbmQgaW5zZXJ0aW9uICovXG4gIGFzeW5jIHVwbG9hZEFuZEluc2VydEltYWdlKFxuICAgIGVkaXRvcjogRWRpdG9yLFxuICAgIGZpbGU6IEZpbGUsXG4gICAgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9uc1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy51cGxvYWRJbWFnZVdpdGhQcm9ncmVzcyhcbiAgICAgIGVkaXRvcixcbiAgICAgIGZpbGUsXG4gICAgICAoZWQsIHJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLmluc2VydEltYWdlKGVkLCB7XG4gICAgICAgICAgc3JjOiByZXN1bHQuc3JjLFxuICAgICAgICAgIGFsdDogcmVzdWx0Lm5hbWUsXG4gICAgICAgICAgdGl0bGU6IGAke3Jlc3VsdC5uYW1lfSAoJHtyZXN1bHQud2lkdGh9w5cke3Jlc3VsdC5oZWlnaHR9KWAsXG4gICAgICAgICAgd2lkdGg6IHJlc3VsdC53aWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IHJlc3VsdC5oZWlnaHQsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHRoaXMudCgpLmluc2VydGluZ0ltYWdlLFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH1cblxuICAvKiogVHJpZ2dlciBhbiBlZGl0b3IgdHJhbnNhY3Rpb24gdG8gZm9yY2UgZGVjb3JhdGlvbiB1cGRhdGUgKi9cbiAgcHJpdmF0ZSBmb3JjZUVkaXRvclVwZGF0ZSgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50RWRpdG9yKSB7XG4gICAgICBjb25zdCB7IHRyIH0gPSB0aGlzLmN1cnJlbnRFZGl0b3Iuc3RhdGU7XG4gICAgICB0aGlzLmN1cnJlbnRFZGl0b3Iudmlldy5kaXNwYXRjaCh0cik7XG4gICAgfVxuICB9XG5cbiAgLyoqIEdlbmVyaWMgaGVscGVyIHRvIG9wZW4gZmlsZSBwaWNrZXIgYW5kIHByb2Nlc3Mgc2VsZWN0aW9uICovXG4gIHByaXZhdGUgYXN5bmMgc2VsZWN0RmlsZUFuZFByb2Nlc3MoXG4gICAgZWRpdG9yOiBFZGl0b3IsXG4gICAgdXBsb2FkTWV0aG9kOiAoZWRpdG9yOiBFZGl0b3IsIGZpbGU6IEZpbGUsIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpID0+IFByb21pc2U8dm9pZD4sXG4gICAgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9uc1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XG5cbiAgICAgIC8vIFVzZSBhbGxvd2VkVHlwZXMgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBkZWZhdWx0IHRvIGltYWdlLypcbiAgICAgIGlmIChvcHRpb25zPy5hbGxvd2VkVHlwZXMgJiYgb3B0aW9ucy5hbGxvd2VkVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLmFsbG93ZWRUeXBlcy5qb2luKFwiLFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0LmFjY2VwdCA9IFwiaW1hZ2UvKlwiO1xuICAgICAgfVxuXG4gICAgICBpbnB1dC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgYXN5bmMgZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSAoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuZmlsZXM/LlswXTtcbiAgICAgICAgaWYgKGZpbGUgJiYgZmlsZS50eXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdXBsb2FkTWV0aG9kKGVkaXRvciwgZmlsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy50KCkubm9GaWxlU2VsZWN0ZWQpKTtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlucHV0KTtcbiAgICAgIH0pO1xuXG4gICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbnB1dCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy50KCkuc2VsZWN0aW9uQ2FuY2VsbGVkKSk7XG4gICAgICB9KTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbnB1dCk7XG4gICAgICBpbnB1dC5jbGljaygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFNlbGVjdCBmaWxlIGFuZCB1cGxvYWQgYXMgbmV3IGltYWdlICovXG4gIGFzeW5jIHNlbGVjdEFuZFVwbG9hZEltYWdlKGVkaXRvcjogRWRpdG9yLCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0RmlsZUFuZFByb2Nlc3MoZWRpdG9yLCB0aGlzLnVwbG9hZEFuZEluc2VydEltYWdlLmJpbmQodGhpcyksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIFNlbGVjdCBmaWxlIGFuZCByZXBsYWNlIGN1cnJlbnRseSBzZWxlY3RlZCBpbWFnZSAqL1xuICBhc3luYyBzZWxlY3RBbmRSZXBsYWNlSW1hZ2UoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBObyBuZWVkIGZvciBjb21wbGljYXRlZCBiYWNrdXAvcmVzdG9yZSBub3cgdGhhdCB3ZSBkb24ndCBkZWxldGUgcHJlbWF0dXJlbHkuXG4gICAgLy8gVGhlIHVwbG9hZEFuZFJlcGxhY2VJbWFnZSB3aWxsIGhhbmRsZSB0aGUgYXRvbWljIHJlcGxhY2VtZW50LlxuICAgIHJldHVybiB0aGlzLnNlbGVjdEZpbGVBbmRQcm9jZXNzKGVkaXRvciwgdGhpcy51cGxvYWRBbmRSZXBsYWNlSW1hZ2UuYmluZCh0aGlzKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogSW50ZXJuYWwgaGVscGVyIHVzZWQgYnkgcmVwbGFjZW1lbnQgbG9naWMgKi9cbiAgYXN5bmMgdXBsb2FkQW5kUmVwbGFjZUltYWdlKFxuICAgIGVkaXRvcjogRWRpdG9yLFxuICAgIGZpbGU6IEZpbGUsXG4gICAgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9uc1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBTdG9yZSBjdXJyZW50IHBvc2l0aW9uIHRvIGVuc3VyZSB3ZSBjYW4gcmUtc2VsZWN0IHRoZSBpbWFnZSBldmVuIGlmIHNlbGVjdGlvbiBibHVycyBkdXJpbmcgdXBsb2FkXG4gICAgY29uc3Qgd2FzQWN0aXZlID0gZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIik7XG5cbiAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlV2l0aFByb2dyZXNzKFxuICAgICAgZWRpdG9yLFxuICAgICAgZmlsZSxcbiAgICAgIChlZCwgcmVzdWx0KSA9PiB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IHtcbiAgICAgICAgICBzcmM6IHJlc3VsdC5zcmMsXG4gICAgICAgICAgYWx0OiByZXN1bHQubmFtZSxcbiAgICAgICAgICB0aXRsZTogYCR7cmVzdWx0Lm5hbWV9ICgke3Jlc3VsdC53aWR0aH3DlyR7cmVzdWx0LmhlaWdodH0pYCxcbiAgICAgICAgICB3aWR0aDogcmVzdWx0LndpZHRoLFxuICAgICAgICAgIGhlaWdodDogcmVzdWx0LmhlaWdodCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJZiB0aGUgaW1hZ2Ugd2FzIGFjdGl2ZSBvciBpcyBzdGlsbCBhY3RpdmUsIHVwZGF0ZSBpdCBhdG9taWNhbGx5XG4gICAgICAgIGlmICh3YXNBY3RpdmUgfHwgZWQuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKSkge1xuICAgICAgICAgIGVkLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAudXBkYXRlQXR0cmlidXRlcyhcInJlc2l6YWJsZUltYWdlXCIsIGltYWdlRGF0YSlcbiAgICAgICAgICAgIC5jb21tYW5kKCh7IHRyLCBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgZnJvbSB9ID0gdHIuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAvLyBSZS1zZWxlY3QgdGhlIG5vZGUgYXQgaXRzIG1hcHBlZCBwb3NpdGlvbiBvciBjdXJyZW50IHNlbGVjdGlvblxuICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0Tm9kZVNlbGVjdGlvbihmcm9tKSB8fCBjb21tYW5kcy5zZXROb2RlU2VsZWN0aW9uKGZyb20gLSAxKSB8fCB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5ydW4oKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkSW1hZ2UoaW1hZ2VEYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgcmVwbGFjZSB3aGF0ZXZlciBpcyBzZWxlY3RlZCAob3IgaW5zZXJ0IGF0IGN1cnNvcilcbiAgICAgICAgICB0aGlzLmluc2VydEltYWdlKGVkLCBpbWFnZURhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWZ0ZXIgcmVwbGFjZW1lbnQsIGVuc3VyZSB0aGUgaW1hZ2UgaXMgdHJhY2tlZCBpbiBvdXIgc2lnbmFsc1xuICAgICAgICB0aGlzLnNlbGVjdEltYWdlKGVkKTtcbiAgICAgIH0sXG4gICAgICB0aGlzLnQoKS5yZXBsYWNpbmdJbWFnZSxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBpbWFnZSBkcm9wIGV2ZW50LlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwb3NpdGlvbiBmcm9tIGNvb3JkaW5hdGVzIGFuZCBzZXRzIHRoZSBzZWxlY3Rpb24gYWNjb3JkaW5nbHkuXG4gICAqL1xuICBoYW5kbGVEcm9wKGVkaXRvcjogRWRpdG9yLCBldmVudDogRHJhZ0V2ZW50LCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xuICAgIGlmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IEFycmF5LmZyb20oZmlsZXMpLmZpbmQoZiA9PiBmLnR5cGUuc3RhcnRzV2l0aChcImltYWdlL1wiKSk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBkcm9wIHBvc2l0aW9uIGZyb20gY29vcmRpbmF0ZXNcbiAgICBjb25zdCBwb3MgPSBlZGl0b3Iudmlldy5wb3NBdENvb3Jkcyh7IGxlZnQ6IGV2ZW50LmNsaWVudFgsIHRvcDogZXZlbnQuY2xpZW50WSB9KTtcbiAgICBpZiAocG9zKSB7XG4gICAgICBlZGl0b3IuY29tbWFuZHMuc2V0VGV4dFNlbGVjdGlvbihwb3MucG9zKTtcbiAgICB9XG5cbiAgICB2b2lkIHRoaXMudXBsb2FkQW5kSW5zZXJ0SW1hZ2UoZWRpdG9yLCBmaWxlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgaW1hZ2UgcGFzdGUgZXZlbnQuXG4gICAqL1xuICBoYW5kbGVQYXN0ZShlZGl0b3I6IEVkaXRvciwgZXZlbnQ6IENsaXBib2FyZEV2ZW50LCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2xpcGJvYXJkRmlsZXMgPSBldmVudC5jbGlwYm9hcmREYXRhPy5maWxlcztcbiAgICBpZiAoIWNsaXBib2FyZEZpbGVzIHx8IGNsaXBib2FyZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGltYWdlRmlsZSA9IEFycmF5LmZyb20oY2xpcGJvYXJkRmlsZXMpLmZpbmQoZmlsZSA9PiBmaWxlLnR5cGUuc3RhcnRzV2l0aChcImltYWdlL1wiKSk7XG4gICAgaWYgKCFpbWFnZUZpbGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHZvaWQgdGhpcy51cGxvYWRBbmRJbnNlcnRJbWFnZShlZGl0b3IsIGltYWdlRmlsZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
@@ -49,9 +49,7 @@ function convertNode(node, ctx) {
49
49
  if (tag === "pre") {
50
50
  // Extract language from code class e.g. "language-typescript"
51
51
  const codeEl = el.querySelector("code");
52
- const lang = codeEl
53
- ? (codeEl.className.match(/language-(\S+)/) || [])[1] || ""
54
- : "";
52
+ const lang = codeEl ? (codeEl.className.match(/language-(\S+)/) || [])[1] || "" : "";
55
53
  const code = codeEl ? codeEl.textContent || "" : el.textContent || "";
56
54
  return `\n\n\`\`\`${lang}\n${code}\n\`\`\`\n\n`;
57
55
  }
@@ -176,4 +174,4 @@ function convertTable(table) {
176
174
  });
177
175
  return `\n\n${lines.join("\n")}\n\n`;
178
176
  }
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLW1hcmtkb3duLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10aXB0YXAtZWRpdG9yL3NyYy9saWIvdXRpbHMvYXRlLW1hcmtkb3duLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFZO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7SUFDL0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLDRDQUE0QztJQUM1QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2xELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FDbEIsSUFBVSxFQUNWLEdBQStFO0lBRS9FLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFtQixDQUFDO0lBQy9CLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFB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QUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN6RCxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVoRSxhQUFhO0lBQ2IsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDakMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUM7UUFDMUIsNkNBQTZDO1FBQzdDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSFRNTCB0byBNYXJrZG93biBjb252ZXJ0ZXIgdXRpbGl0eSAobm8gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzKS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaHRtbFRvTWFya2Rvd24oaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICBjb25zdCBkb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGh0bWwsIFwidGV4dC9odG1sXCIpO1xuICBjb25zdCByZXN1bHQgPSBjb252ZXJ0Tm9kZShkb2MuYm9keSwgeyBsaXN0RGVwdGg6IDAsIGxpc3RUeXBlOiBudWxsIH0pO1xuICAvLyBOb3JtYWxpemUgbXVsdGlwbGUgYmxhbmsgbGluZXMgdG8gbWF4IHR3b1xuICByZXR1cm4gcmVzdWx0LnJlcGxhY2UoL1xcbnszLH0vZywgXCJcXG5cXG5cIikudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0Tm9kZShcbiAgbm9kZTogTm9kZSxcbiAgY3R4OiB7IGxpc3REZXB0aDogbnVtYmVyOyBsaXN0VHlwZTogXCJ1bFwiIHwgXCJvbFwiIHwgbnVsbDsgb3JkZXJlZEluZGV4PzogbnVtYmVyIH1cbik6IHN0cmluZyB7XG4gIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgIHJldHVybiBub2RlLnRleHRDb250ZW50IHx8IFwiXCI7XG4gIH1cblxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IGVsID0gbm9kZSBhcyBIVE1MRWxlbWVudDtcbiAgY29uc3QgdGFnID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBjaGlsZHJlbiA9IEFycmF5LmZyb20oZWwuY2hpbGROb2Rlcyk7XG5cbiAgY29uc3QgaW5uZXIgPSAob3ZlcnJpZGVDdHg/OiBQYXJ0aWFsPHR5cGVvZiBjdHg+KSA9PlxuICAgIGNoaWxkcmVuLm1hcChjID0+IGNvbnZlcnROb2RlKGMsIHsgLi4uY3R4LCAuLi5vdmVycmlkZUN0eCB9KSkuam9pbihcIlwiKTtcblxuICAvLyDilIDilIAgQmxvY2stbGV2ZWwgZWxlbWVudHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgaWYgKHRhZyA9PT0gXCJiclwiKSB7XG4gICAgcmV0dXJuIFwiXFxuXCI7XG4gIH1cblxuICBpZiAodGFnID09PSBcImhyXCIpIHtcbiAgICByZXR1cm4gXCJcXG5cXG4tLS1cXG5cXG5cIjtcbiAgfVxuXG4gIGlmICgvXmhbMS02XSQvLnRlc3QodGFnKSkge1xuICAgIGNvbnN0IGxldmVsID0gcGFyc2VJbnQodGFnWzFdLCAxMCk7XG4gICAgY29uc3QgcHJlZml4ID0gXCIjXCIucmVwZWF0KGxldmVsKTtcbiAgICByZXR1cm4gYFxcblxcbiR7cHJlZml4fSAke2lubmVyKCkudHJpbSgpfVxcblxcbmA7XG4gIH1cblxuICBpZiAodGFnID09PSBcInBcIikge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBpbm5lcigpLnRyaW0oKTtcbiAgICBpZiAoIWNvbnRlbnQpIHtyZXR1cm4gXCJcIjt9XG4gICAgcmV0dXJuIGBcXG5cXG4ke2NvbnRlbnR9XFxuXFxuYDtcbiAgfVxuXG4gIGlmICh0YWcgPT09IFwiYmxvY2txdW90ZVwiKSB7XG4gICAgY29uc3QgY29udGVudCA9IGlubmVyKClcbiAgICAgIC50cmltKClcbiAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgLm1hcChsaW5lID0+IGA+ICR7bGluZX1gKVxuICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgcmV0dXJuIGBcXG5cXG4ke2NvbnRlbnR9XFxuXFxuYDtcbiAgfVxuXG4gIGlmICh0YWcgPT09IFwicHJlXCIpIHtcbiAgICAvLyBFeHRyYWN0IGxhbmd1YWdlIGZyb20gY29kZSBjbGFzcyBlLmcuIFwibGFuZ3VhZ2UtdHlwZXNjcmlwdFwiXG4gICAgY29uc3QgY29kZUVsID0gZWwucXVlcnlTZWxlY3RvcihcImNvZGVcIik7XG4gICAgY29uc3QgbGFuZyA9IGNvZGVFbFxuICAgICAgPyAoY29kZUVsLmNsYXNzTmFtZS5tYXRjaCgvbGFuZ3VhZ2UtKFxcUyspLykgfHwgW10pWzFdIHx8IFwiXCJcbiAgICAgIDogXCJcIjtcbiAgICBjb25zdCBjb2RlID0gY29kZUVsID8gY29kZUVsLnRleHRDb250ZW50IHx8IFwiXCIgOiBlbC50ZXh0Q29udGVudCB8fCBcIlwiO1xuICAgIHJldHVybiBgXFxuXFxuXFxgXFxgXFxgJHtsYW5nfVxcbiR7Y29kZX1cXG5cXGBcXGBcXGBcXG5cXG5gO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gXCJ1bFwiIHx8IHRhZyA9PT0gXCJvbFwiKSB7XG4gICAgY29uc3QgaXNUYXNrTGlzdCA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtdHlwZVwiKSA9PT0gXCJ0YXNrTGlzdFwiO1xuICAgIGNvbnN0IGl0ZW1zID0gY2hpbGRyZW5cbiAgICAgIC5maWx0ZXIoYyA9PiAoYyBhcyBIVE1MRWxlbWVudCkudGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJsaVwiKVxuICAgICAgLm1hcCgobGksIGlkeCkgPT5cbiAgICAgICAgY29udmVydExpc3RJdGVtKGxpIGFzIEhUTUxFbGVtZW50LCB7XG4gICAgICAgICAgbGlzdERlcHRoOiBjdHgubGlzdERlcHRoICsgMSxcbiAgICAgICAgICBsaXN0VHlwZTogdGFnID09PSBcInVsXCIgPyBcInVsXCIgOiBcIm9sXCIsXG4gICAgICAgICAgb3JkZXJlZEluZGV4OiBpZHggKyAxLFxuICAgICAgICAgIGlzVGFza0xpc3QsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBibG9jayA9IGBcXG5cXG4ke2l0ZW1zfVxcblxcbmA7XG4gICAgLy8gT25seSBhZGQgc3Vycm91bmRpbmcgbmV3bGluZXMgZm9yIHJvb3QtbGV2ZWwgbGlzdHNcbiAgICByZXR1cm4gY3R4Lmxpc3REZXB0aCA9PT0gMCA/IGJsb2NrIDogYFxcbiR7aXRlbXN9YDtcbiAgfVxuXG4gIGlmICh0YWcgPT09IFwidGFibGVcIikge1xuICAgIHJldHVybiBjb252ZXJ0VGFibGUoZWwpO1xuICB9XG5cbiAgLy8g4pSA4pSAIElubGluZSBlbGVtZW50cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBpZiAodGFnID09PSBcInN0cm9uZ1wiIHx8IHRhZyA9PT0gXCJiXCIpIHtcbiAgICBjb25zdCBjb250ZW50ID0gaW5uZXIoKTtcbiAgICByZXR1cm4gY29udGVudCA/IGAqKiR7Y29udGVudH0qKmAgOiBcIlwiO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gXCJlbVwiIHx8IHRhZyA9PT0gXCJpXCIpIHtcbiAgICBjb25zdCBjb250ZW50ID0gaW5uZXIoKTtcbiAgICByZXR1cm4gY29udGVudCA/IGAqJHtjb250ZW50fSpgIDogXCJcIjtcbiAgfVxuXG4gIGlmICh0YWcgPT09IFwic1wiIHx8IHRhZyA9PT0gXCJkZWxcIiB8fCB0YWcgPT09IFwic3RyaWtlXCIpIHtcbiAgICBjb25zdCBjb250ZW50ID0gaW5uZXIoKTtcbiAgICByZXR1cm4gY29udGVudCA/IGB+fiR7Y29udGVudH1+fmAgOiBcIlwiO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gXCJ1XCIpIHtcbiAgICAvLyBObyBzdGFuZGFyZCBNYXJrZG93biBmb3IgdW5kZXJsaW5lIOKAlCB1c2UgSFRNTCBwYXNzdGhyb3VnaFxuICAgIGNvbnN0IGNvbnRlbnQgPSBpbm5lcigpO1xuICAgIHJldHVybiBjb250ZW50ID8gYDx1PiR7Y29udGVudH08L3U+YCA6IFwiXCI7XG4gIH1cblxuICBpZiAodGFnID09PSBcImNvZGVcIikge1xuICAgIC8vIElubGluZSBjb2RlIChub3QgaW5zaWRlIHByZSlcbiAgICBjb25zdCBjb250ZW50ID0gZWwudGV4dENvbnRlbnQgfHwgXCJcIjtcbiAgICByZXR1cm4gY29udGVudCA/IGBcXGAke2NvbnRlbnR9XFxgYCA6IFwiXCI7XG4gIH1cblxuICBpZiAodGFnID09PSBcImFcIikge1xuICAgIGNvbnN0IGhyZWYgPSBlbC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpIHx8IFwiXCI7XG4gICAgY29uc3QgY29udGVudCA9IGlubmVyKCkudHJpbSgpO1xuICAgIGlmICghY29udGVudCAmJiAhaHJlZikge3JldHVybiBcIlwiO31cbiAgICBpZiAoIWNvbnRlbnQpIHtyZXR1cm4gaHJlZjt9XG4gICAgcmV0dXJuIGBbJHtjb250ZW50fV0oJHtocmVmfSlgO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gXCJpbWdcIikge1xuICAgIGNvbnN0IHNyYyA9IGVsLmdldEF0dHJpYnV0ZShcInNyY1wiKSB8fCBcIlwiO1xuICAgIGNvbnN0IGFsdCA9IGVsLmdldEF0dHJpYnV0ZShcImFsdFwiKSB8fCBcIlwiO1xuICAgIHJldHVybiBgIVske2FsdH1dKCR7c3JjfSlgO1xuICB9XG5cbiAgLy8g4pSA4pSAIFdyYXBwZXIgLyBVbmtub3duIGVsZW1lbnRzIOKGkiByZWN1cnNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICByZXR1cm4gaW5uZXIoKTtcbn1cblxuZnVuY3Rpb24gY29udmVydExpc3RJdGVtKFxuICBsaTogSFRNTEVsZW1lbnQsXG4gIGN0eDoge1xuICAgIGxpc3REZXB0aDogbnVtYmVyO1xuICAgIGxpc3RUeXBlOiBcInVsXCIgfCBcIm9sXCI7XG4gICAgb3JkZXJlZEluZGV4OiBudW1iZXI7XG4gICAgaXNUYXNrTGlzdDogYm9vbGVhbjtcbiAgfVxuKTogc3RyaW5nIHtcbiAgY29uc3QgaW5kZW50ID0gXCIgIFwiLnJlcGVhdChjdHgubGlzdERlcHRoIC0gMSk7XG5cbiAgLy8gVGFzayBsaXN0IGl0ZW1cbiAgaWYgKGN0eC5pc1Rhc2tMaXN0KSB7XG4gICAgY29uc3QgY2hlY2tlZCA9IGxpLmdldEF0dHJpYnV0ZShcImRhdGEtY2hlY2tlZFwiKSA9PT0gXCJ0cnVlXCI7XG4gICAgY29uc3QgY2hlY2tNYXJrID0gY2hlY2tlZCA/IFwiW3hdXCIgOiBcIlsgXVwiO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBBcnJheS5mcm9tKGxpLmNoaWxkTm9kZXMpXG4gICAgICAubWFwKGMgPT4gY29udmVydE5vZGUoYywgeyBsaXN0RGVwdGg6IGN0eC5saXN0RGVwdGgsIGxpc3RUeXBlOiBjdHgubGlzdFR5cGUgfSkpXG4gICAgICAuam9pbihcIlwiKVxuICAgICAgLnRyaW0oKTtcbiAgICByZXR1cm4gYCR7aW5kZW50fS0gJHtjaGVja01hcmt9ICR7Y29udGVudH1gO1xuICB9XG5cbiAgLy8gTm9ybWFsIGxpc3QgaXRlbVxuICBjb25zdCBidWxsZXQgPSBjdHgubGlzdFR5cGUgPT09IFwib2xcIiA/IGAke2N0eC5vcmRlcmVkSW5kZXh9LmAgOiBcIi1cIjtcblxuICAvLyBDaGVjayBpZiBsaSBjb250YWlucyBuZXN0ZWQgbGlzdHNcbiAgY29uc3QgbmVzdGVkTGlzdE5vZGVzID0gQXJyYXkuZnJvbShsaS5jaGlsZE5vZGVzKS5maWx0ZXIoXG4gICAgYyA9PiAoYyBhcyBIVE1MRWxlbWVudCkudGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJ1bFwiIHx8XG4gICAgICAgICAgKGMgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09IFwib2xcIlxuICApO1xuICBjb25zdCB0ZXh0Tm9kZXMgPSBBcnJheS5mcm9tKGxpLmNoaWxkTm9kZXMpLmZpbHRlcihcbiAgICBjID0+ICFbXCJ1bFwiLCBcIm9sXCJdLmluY2x1ZGVzKChjIGFzIEhUTUxFbGVtZW50KS50YWdOYW1lPy50b0xvd2VyQ2FzZSgpKVxuICApO1xuXG4gIGNvbnN0IHRleHRDb250ZW50ID0gdGV4dE5vZGVzXG4gICAgLm1hcChjID0+IGNvbnZlcnROb2RlKGMsIHsgbGlzdERlcHRoOiBjdHgubGlzdERlcHRoLCBsaXN0VHlwZTogY3R4Lmxpc3RUeXBlIH0pKVxuICAgIC5qb2luKFwiXCIpXG4gICAgLnRyaW0oKTtcblxuICBjb25zdCBuZXN0ZWRDb250ZW50ID0gbmVzdGVkTGlzdE5vZGVzXG4gICAgLm1hcChjID0+IGNvbnZlcnROb2RlKGMsIHsgbGlzdERlcHRoOiBjdHgubGlzdERlcHRoLCBsaXN0VHlwZTogY3R4Lmxpc3RUeXBlIH0pKVxuICAgIC5qb2luKFwiXCIpXG4gICAgLnRyaW1FbmQoKTtcblxuICByZXR1cm4gYCR7aW5kZW50fSR7YnVsbGV0fSAke3RleHRDb250ZW50fSR7bmVzdGVkQ29udGVudH1gO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VGFibGUodGFibGU6IEhUTUxFbGVtZW50KTogc3RyaW5nIHtcbiAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20odGFibGUucXVlcnlTZWxlY3RvckFsbChcInRyXCIpKTtcbiAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSB7cmV0dXJuIFwiXCI7fVxuXG4gIGNvbnN0IHRhYmxlRGF0YTogc3RyaW5nW11bXSA9IHJvd3MubWFwKHJvdyA9PlxuICAgIEFycmF5LmZyb20ocm93LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ0aCwgdGRcIikpLm1hcChcbiAgICAgIGNlbGwgPT4gY2VsbC50ZXh0Q29udGVudD8ucmVwbGFjZSgvXFxuL2csIFwiIFwiKS50cmltKCkgfHwgXCJcIlxuICAgIClcbiAgKTtcblxuICBpZiAodGFibGVEYXRhLmxlbmd0aCA9PT0gMCkge3JldHVybiBcIlwiO31cblxuICBjb25zdCBjb2xDb3VudCA9IE1hdGgubWF4KC4uLnRhYmxlRGF0YS5tYXAociA9PiByLmxlbmd0aCkpO1xuXG4gIC8vIFBhZCByb3dzIHRvIHNhbWUgd2lkdGhcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHRhYmxlRGF0YS5tYXAocm93ID0+IHtcbiAgICB3aGlsZSAocm93Lmxlbmd0aCA8IGNvbENvdW50KSB7cm93LnB1c2goXCJcIik7fVxuICAgIHJldHVybiByb3c7XG4gIH0pO1xuXG4gIC8vIENhbGN1bGF0ZSBjb2x1bW4gd2lkdGhzXG4gIGNvbnN0IGNvbFdpZHRocyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGNvbENvdW50IH0sIChfLCBpKSA9PlxuICAgIE1hdGgubWF4KC4uLm5vcm1hbGl6ZWQubWFwKHIgPT4gKHJbaV0gfHwgXCJcIikubGVuZ3RoKSwgMylcbiAgKTtcblxuICBjb25zdCBwYWQgPSAoc3RyOiBzdHJpbmcsIGxlbjogbnVtYmVyKSA9PiBzdHIucGFkRW5kKGxlbiwgXCIgXCIpO1xuICBjb25zdCBzZXBhcmF0b3IgPSBjb2xXaWR0aHMubWFwKHcgPT4gXCItXCIucmVwZWF0KHcpKS5qb2luKFwiIHwgXCIpO1xuXG4gIC8vIEJ1aWxkIHJvd3NcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIG5vcm1hbGl6ZWQuZm9yRWFjaCgocm93LCByb3dJZHgpID0+IHtcbiAgICBjb25zdCBsaW5lID0gcm93Lm1hcCgoY2VsbCwgaSkgPT4gcGFkKGNlbGwsIGNvbFdpZHRoc1tpXSkpLmpvaW4oXCIgfCBcIik7XG4gICAgbGluZXMucHVzaChgfCAke2xpbmV9IHxgKTtcbiAgICAvLyBBZGQgc2VwYXJhdG9yIGFmdGVyIGhlYWRlciByb3cgKGZpcnN0IHJvdylcbiAgICBpZiAocm93SWR4ID09PSAwKSB7XG4gICAgICBsaW5lcy5wdXNoKGB8ICR7c2VwYXJhdG9yfSB8YCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYFxcblxcbiR7bGluZXMuam9pbihcIlxcblwiKX1cXG5cXG5gO1xufVxuIl19
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLW1hcmtkb3duLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10aXB0YXAtZWRpdG9yL3NyYy9saWIvdXRpbHMvYXRlLW1hcmtkb3duLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFZO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7SUFDL0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLDRDQUE0QztJQUM1QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2xELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FDbEIsSUFBVSxFQUNWLEdBQStFO0lBRS9FLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFtQixDQUFDO0lBQy9CLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFB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Q0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN6RCxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVoRSxhQUFhO0lBQ2IsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDakMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUM7UUFDMUIsNkNBQTZDO1FBQzdDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSFRNTCB0byBNYXJrZG93biBjb252ZXJ0ZXIgdXRpbGl0eSAobm8gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzKS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaHRtbFRvTWFya2Rvd24oaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICBjb25zdCBkb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGh0bWwsIFwidGV4dC9odG1sXCIpO1xuICBjb25zdCByZXN1bHQgPSBjb252ZXJ0Tm9kZShkb2MuYm9keSwgeyBsaXN0RGVwdGg6IDAsIGxpc3RUeXBlOiBudWxsIH0pO1xuICAvLyBOb3JtYWxpemUgbXVsdGlwbGUgYmxhbmsgbGluZXMgdG8gbWF4IHR3b1xuICByZXR1cm4gcmVzdWx0LnJlcGxhY2UoL1xcbnszLH0vZywgXCJcXG5cXG5cIikudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0Tm9kZShcbiAgbm9kZTogTm9kZSxcbiAgY3R4OiB7IGxpc3REZXB0aDogbnVtYmVyOyBsaXN0VHlwZTogXCJ1bFwiIHwgXCJvbFwiIHwgbnVsbDsgb3JkZXJlZEluZGV4PzogbnVtYmVyIH1cbik6IHN0cmluZyB7XG4gIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgIHJldHVybiBub2RlLnRleHRDb250ZW50IHx8IFwiXCI7XG4gIH1cblxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IGVsID0gbm9kZSBhcyBIVE1MRWxlbWVudDtcbiAgY29uc3QgdGFnID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBjaGlsZHJlbiA9IEFycmF5LmZyb20oZWwuY2hpbGROb2Rlcyk7XG5cbiAgY29uc3QgaW5uZXIgPSAob3ZlcnJpZGVDdHg/OiBQYXJ0aWFsPHR5cGVvZiBjdHg+KSA9PlxuICAgIGNoaWxkcmVuLm1hcChjID0+IGNvbnZlcnROb2RlKGMsIHsgLi4uY3R4LCAuLi5vdmVycmlkZUN0eCB9KSkuam9pbihcIlwiKTtcblxuICAvLyDilIDilIAgQmxvY2stbGV2ZWwgZWxlbWVudHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgaWYgKHRhZyA9PT0gXCJiclwiKSB7XG4gICAgcmV0dXJuIFwiXFxuXCI7XG4gIH1cblxuICBpZiAodGFnID09PSBcImhyXCIpIHtcbiAgICByZXR1cm4gXCJcXG5cXG4tLS1cXG5cXG5cIjtcbiAgfVxuXG4gIGlmICgvXmhbMS02XSQvLnRlc3QodGFnKSkge1xuICAgIGNvbnN0IGxldmVsID0gcGFyc2VJbnQodGFnWzFdLCAxMCk7XG4gICAgY29uc3QgcHJlZml4ID0gXCIjXCIucmVwZWF0KGxldmVsKTtcbiAgICByZXR1cm4gYFxcblxcbiR7cHJlZml4fSAke2lubmVyKCkudHJpbSgpfVxcblxcbmA7XG4gIH1cblxuICBpZiAodGFnID09PSBcInBcIikge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBpbm5lcigpLnRyaW0oKTtcbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gYFxcblxcbiR7Y29udGVudH1cXG5cXG5gO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gXCJibG9ja3F1b3RlXCIpIHtcbiAgICBjb25zdCBjb250ZW50ID0gaW5uZXIoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAubWFwKGxpbmUgPT4gYD4gJHtsaW5lfWApXG4gICAgICAuam9pbihcIlxcblwiKTtcbiAgICByZXR1cm4gYFxcblxcbiR7Y29udGVudH1cXG5cXG5gO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gXCJwcmVcIikge1xuICAgIC8vIEV4dHJhY3QgbGFuZ3VhZ2UgZnJvbSBjb2RlIGNsYXNzIGUuZy4gXCJsYW5ndWFnZS10eXBlc2NyaXB0XCJcbiAgICBjb25zdCBjb2RlRWwgPSBlbC5xdWVyeVNlbGVjdG9yKFwiY29kZVwiKTtcbiAgICBjb25zdCBsYW5nID0gY29kZUVsID8gKGNvZGVFbC5jbGFzc05hbWUubWF0Y2goL2xhbmd1YWdlLShcXFMrKS8pIHx8IFtdKVsxXSB8fCBcIlwiIDogXCJcIjtcbiAgICBjb25zdCBjb2RlID0gY29kZUVsID8gY29kZUVsLnRleHRDb250ZW50IHx8IFwiXCIgOiBlbC50ZXh0Q29udGVudCB8fCBcIlwiO1xuICAgIHJldHVybiBgXFxuXFxuXFxgXFxgXFxgJHtsYW5nfVxcbiR7Y29kZX1cXG5cXGBcXGBcXGBcXG5cXG5gO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gXCJ1bFwiIHx8IHRhZyA9PT0gXCJvbFwiKSB7XG4gICAgY29uc3QgaXNUYXNrTGlzdCA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtdHlwZVwiKSA9PT0gXCJ0YXNrTGlzdFwiO1xuICAgIGNvbnN0IGl0ZW1zID0gY2hpbGRyZW5cbiAgICAgIC5maWx0ZXIoYyA9PiAoYyBhcyBIVE1MRWxlbWVudCkudGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJsaVwiKVxuICAgICAgLm1hcCgobGksIGlkeCkgPT5cbiAgICAgICAgY29udmVydExpc3RJdGVtKGxpIGFzIEhUTUxFbGVtZW50LCB7XG4gICAgICAgICAgbGlzdERlcHRoOiBjdHgubGlzdERlcHRoICsgMSxcbiAgICAgICAgICBsaXN0VHlwZTogdGFnID09PSBcInVsXCIgPyBcInVsXCIgOiBcIm9sXCIsXG4gICAgICAgICAgb3JkZXJlZEluZGV4OiBpZHggKyAxLFxuICAgICAgICAgIGlzVGFza0xpc3QsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBibG9jayA9IGBcXG5cXG4ke2l0ZW1zfVxcblxcbmA7XG4gICAgLy8gT25seSBhZGQgc3Vycm91bmRpbmcgbmV3bGluZXMgZm9yIHJvb3QtbGV2ZWwgbGlzdHNcbiAgICByZXR1cm4gY3R4Lmxpc3REZXB0aCA9PT0gMCA/IGJsb2NrIDogYFxcbiR7aXRlbXN9YDtcbiAgfVxuXG4gIGlmICh0YWcgPT09IFwidGFibGVcIikge1xuICAgIHJldHVybiBjb252ZXJ0VGFibGUoZWwpO1xuICB9XG5cbiAgLy8g4pSA4pSAIElubGluZSBlbGVtZW50cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBpZiAodGFnID09PSBcInN0cm9uZ1wiIHx8IHRhZyA9PT0gXCJiXCIpIHtcbiAgICBjb25zdCBjb250ZW50ID0gaW5uZXIoKTtcbiAgICByZXR1cm4gY29udGVudCA/IGAqKiR7Y29udGVudH0qKmAgOiBcIlwiO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gXCJlbVwiIHx8IHRhZyA9PT0gXCJpXCIpIHtcbiAgICBjb25zdCBjb250ZW50ID0gaW5uZXIoKTtcbiAgICByZXR1cm4gY29udGVudCA/IGAqJHtjb250ZW50fSpgIDogXCJcIjtcbiAgfVxuXG4gIGlmICh0YWcgPT09IFwic1wiIHx8IHRhZyA9PT0gXCJkZWxcIiB8fCB0YWcgPT09IFwic3RyaWtlXCIpIHtcbiAgICBjb25zdCBjb250ZW50ID0gaW5uZXIoKTtcbiAgICByZXR1cm4gY29udGVudCA/IGB+fiR7Y29udGVudH1+fmAgOiBcIlwiO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gXCJ1XCIpIHtcbiAgICAvLyBObyBzdGFuZGFyZCBNYXJrZG93biBmb3IgdW5kZXJsaW5lIOKAlCB1c2UgSFRNTCBwYXNzdGhyb3VnaFxuICAgIGNvbnN0IGNvbnRlbnQgPSBpbm5lcigpO1xuICAgIHJldHVybiBjb250ZW50ID8gYDx1PiR7Y29udGVudH08L3U+YCA6IFwiXCI7XG4gIH1cblxuICBpZiAodGFnID09PSBcImNvZGVcIikge1xuICAgIC8vIElubGluZSBjb2RlIChub3QgaW5zaWRlIHByZSlcbiAgICBjb25zdCBjb250ZW50ID0gZWwudGV4dENvbnRlbnQgfHwgXCJcIjtcbiAgICByZXR1cm4gY29udGVudCA/IGBcXGAke2NvbnRlbnR9XFxgYCA6IFwiXCI7XG4gIH1cblxuICBpZiAodGFnID09PSBcImFcIikge1xuICAgIGNvbnN0IGhyZWYgPSBlbC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpIHx8IFwiXCI7XG4gICAgY29uc3QgY29udGVudCA9IGlubmVyKCkudHJpbSgpO1xuICAgIGlmICghY29udGVudCAmJiAhaHJlZikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmICghY29udGVudCkge1xuICAgICAgcmV0dXJuIGhyZWY7XG4gICAgfVxuICAgIHJldHVybiBgWyR7Y29udGVudH1dKCR7aHJlZn0pYDtcbiAgfVxuXG4gIGlmICh0YWcgPT09IFwiaW1nXCIpIHtcbiAgICBjb25zdCBzcmMgPSBlbC5nZXRBdHRyaWJ1dGUoXCJzcmNcIikgfHwgXCJcIjtcbiAgICBjb25zdCBhbHQgPSBlbC5nZXRBdHRyaWJ1dGUoXCJhbHRcIikgfHwgXCJcIjtcbiAgICByZXR1cm4gYCFbJHthbHR9XSgke3NyY30pYDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBXcmFwcGVyIC8gVW5rbm93biBlbGVtZW50cyDihpIgcmVjdXJzZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgcmV0dXJuIGlubmVyKCk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRMaXN0SXRlbShcbiAgbGk6IEhUTUxFbGVtZW50LFxuICBjdHg6IHtcbiAgICBsaXN0RGVwdGg6IG51bWJlcjtcbiAgICBsaXN0VHlwZTogXCJ1bFwiIHwgXCJvbFwiO1xuICAgIG9yZGVyZWRJbmRleDogbnVtYmVyO1xuICAgIGlzVGFza0xpc3Q6IGJvb2xlYW47XG4gIH1cbik6IHN0cmluZyB7XG4gIGNvbnN0IGluZGVudCA9IFwiICBcIi5yZXBlYXQoY3R4Lmxpc3REZXB0aCAtIDEpO1xuXG4gIC8vIFRhc2sgbGlzdCBpdGVtXG4gIGlmIChjdHguaXNUYXNrTGlzdCkge1xuICAgIGNvbnN0IGNoZWNrZWQgPSBsaS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWNoZWNrZWRcIikgPT09IFwidHJ1ZVwiO1xuICAgIGNvbnN0IGNoZWNrTWFyayA9IGNoZWNrZWQgPyBcIlt4XVwiIDogXCJbIF1cIjtcbiAgICBjb25zdCBjb250ZW50ID0gQXJyYXkuZnJvbShsaS5jaGlsZE5vZGVzKVxuICAgICAgLm1hcChjID0+IGNvbnZlcnROb2RlKGMsIHsgbGlzdERlcHRoOiBjdHgubGlzdERlcHRoLCBsaXN0VHlwZTogY3R4Lmxpc3RUeXBlIH0pKVxuICAgICAgLmpvaW4oXCJcIilcbiAgICAgIC50cmltKCk7XG4gICAgcmV0dXJuIGAke2luZGVudH0tICR7Y2hlY2tNYXJrfSAke2NvbnRlbnR9YDtcbiAgfVxuXG4gIC8vIE5vcm1hbCBsaXN0IGl0ZW1cbiAgY29uc3QgYnVsbGV0ID0gY3R4Lmxpc3RUeXBlID09PSBcIm9sXCIgPyBgJHtjdHgub3JkZXJlZEluZGV4fS5gIDogXCItXCI7XG5cbiAgLy8gQ2hlY2sgaWYgbGkgY29udGFpbnMgbmVzdGVkIGxpc3RzXG4gIGNvbnN0IG5lc3RlZExpc3ROb2RlcyA9IEFycmF5LmZyb20obGkuY2hpbGROb2RlcykuZmlsdGVyKFxuICAgIGMgPT5cbiAgICAgIChjIGFzIEhUTUxFbGVtZW50KS50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSBcInVsXCIgfHxcbiAgICAgIChjIGFzIEhUTUxFbGVtZW50KS50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSBcIm9sXCJcbiAgKTtcbiAgY29uc3QgdGV4dE5vZGVzID0gQXJyYXkuZnJvbShsaS5jaGlsZE5vZGVzKS5maWx0ZXIoXG4gICAgYyA9PiAhW1widWxcIiwgXCJvbFwiXS5pbmNsdWRlcygoYyBhcyBIVE1MRWxlbWVudCkudGFnTmFtZT8udG9Mb3dlckNhc2UoKSlcbiAgKTtcblxuICBjb25zdCB0ZXh0Q29udGVudCA9IHRleHROb2Rlc1xuICAgIC5tYXAoYyA9PiBjb252ZXJ0Tm9kZShjLCB7IGxpc3REZXB0aDogY3R4Lmxpc3REZXB0aCwgbGlzdFR5cGU6IGN0eC5saXN0VHlwZSB9KSlcbiAgICAuam9pbihcIlwiKVxuICAgIC50cmltKCk7XG5cbiAgY29uc3QgbmVzdGVkQ29udGVudCA9IG5lc3RlZExpc3ROb2Rlc1xuICAgIC5tYXAoYyA9PiBjb252ZXJ0Tm9kZShjLCB7IGxpc3REZXB0aDogY3R4Lmxpc3REZXB0aCwgbGlzdFR5cGU6IGN0eC5saXN0VHlwZSB9KSlcbiAgICAuam9pbihcIlwiKVxuICAgIC50cmltRW5kKCk7XG5cbiAgcmV0dXJuIGAke2luZGVudH0ke2J1bGxldH0gJHt0ZXh0Q29udGVudH0ke25lc3RlZENvbnRlbnR9YDtcbn1cblxuZnVuY3Rpb24gY29udmVydFRhYmxlKHRhYmxlOiBIVE1MRWxlbWVudCk6IHN0cmluZyB7XG4gIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ0clwiKSk7XG4gIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgY29uc3QgdGFibGVEYXRhOiBzdHJpbmdbXVtdID0gcm93cy5tYXAocm93ID0+XG4gICAgQXJyYXkuZnJvbShyb3cucXVlcnlTZWxlY3RvckFsbChcInRoLCB0ZFwiKSkubWFwKFxuICAgICAgY2VsbCA9PiBjZWxsLnRleHRDb250ZW50Py5yZXBsYWNlKC9cXG4vZywgXCIgXCIpLnRyaW0oKSB8fCBcIlwiXG4gICAgKVxuICApO1xuXG4gIGlmICh0YWJsZURhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBjb25zdCBjb2xDb3VudCA9IE1hdGgubWF4KC4uLnRhYmxlRGF0YS5tYXAociA9PiByLmxlbmd0aCkpO1xuXG4gIC8vIFBhZCByb3dzIHRvIHNhbWUgd2lkdGhcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHRhYmxlRGF0YS5tYXAocm93ID0+IHtcbiAgICB3aGlsZSAocm93Lmxlbmd0aCA8IGNvbENvdW50KSB7XG4gICAgICByb3cucHVzaChcIlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfSk7XG5cbiAgLy8gQ2FsY3VsYXRlIGNvbHVtbiB3aWR0aHNcbiAgY29uc3QgY29sV2lkdGhzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogY29sQ291bnQgfSwgKF8sIGkpID0+XG4gICAgTWF0aC5tYXgoLi4ubm9ybWFsaXplZC5tYXAociA9PiAocltpXSB8fCBcIlwiKS5sZW5ndGgpLCAzKVxuICApO1xuXG4gIGNvbnN0IHBhZCA9IChzdHI6IHN0cmluZywgbGVuOiBudW1iZXIpID0+IHN0ci5wYWRFbmQobGVuLCBcIiBcIik7XG4gIGNvbnN0IHNlcGFyYXRvciA9IGNvbFdpZHRocy5tYXAodyA9PiBcIi1cIi5yZXBlYXQodykpLmpvaW4oXCIgfCBcIik7XG5cbiAgLy8gQnVpbGQgcm93c1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgbm9ybWFsaXplZC5mb3JFYWNoKChyb3csIHJvd0lkeCkgPT4ge1xuICAgIGNvbnN0IGxpbmUgPSByb3cubWFwKChjZWxsLCBpKSA9PiBwYWQoY2VsbCwgY29sV2lkdGhzW2ldKSkuam9pbihcIiB8IFwiKTtcbiAgICBsaW5lcy5wdXNoKGB8ICR7bGluZX0gfGApO1xuICAgIC8vIEFkZCBzZXBhcmF0b3IgYWZ0ZXIgaGVhZGVyIHJvdyAoZmlyc3Qgcm93KVxuICAgIGlmIChyb3dJZHggPT09IDApIHtcbiAgICAgIGxpbmVzLnB1c2goYHwgJHtzZXBhcmF0b3J9IHxgKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBgXFxuXFxuJHtsaW5lcy5qb2luKFwiXFxuXCIpfVxcblxcbmA7XG59XG4iXX0=
@@ -1660,6 +1660,9 @@ class AteImageService {
1660
1660
  this.forceEditorUpdate();
1661
1661
  // Final insertion
1662
1662
  insertionStrategy(editor, result);
1663
+ if (this.onImageUploadedCallback) {
1664
+ this.onImageUploadedCallback(result);
1665
+ }
1663
1666
  this.resetUploadState();
1664
1667
  }
1665
1668
  catch (error) {
@@ -2219,9 +2222,7 @@ function convertNode(node, ctx) {
2219
2222
  if (tag === "pre") {
2220
2223
  // Extract language from code class e.g. "language-typescript"
2221
2224
  const codeEl = el.querySelector("code");
2222
- const lang = codeEl
2223
- ? (codeEl.className.match(/language-(\S+)/) || [])[1] || ""
2224
- : "";
2225
+ const lang = codeEl ? (codeEl.className.match(/language-(\S+)/) || [])[1] || "" : "";
2225
2226
  const code = codeEl ? codeEl.textContent || "" : el.textContent || "";
2226
2227
  return `\n\n\`\`\`${lang}\n${code}\n\`\`\`\n\n`;
2227
2228
  }
@@ -2492,6 +2493,9 @@ class AteEditorCommandsService {
2492
2493
  setToolbarInteracting(value) {
2493
2494
  this._isToolbarInteracting.set(value);
2494
2495
  }
2496
+ set onImageUploaded(callback) {
2497
+ this.imageService.onImageUploadedCallback = callback || undefined;
2498
+ }
2495
2499
  set uploadHandler(handler) {
2496
2500
  this.imageService.uploadHandler = handler;
2497
2501
  }
@@ -7773,6 +7777,7 @@ class AngularTiptapEditorComponent {
7773
7777
  this.editorFocus = output();
7774
7778
  this.editorBlur = output();
7775
7779
  this.editableChange = output();
7780
+ this.imageUploaded = output();
7776
7781
  // ViewChild with signal
7777
7782
  this.editorElement = viewChild.required("editorElement");
7778
7783
  // Private signals for internal state
@@ -8057,6 +8062,9 @@ class AngularTiptapEditorComponent {
8057
8062
  }
8058
8063
  });
8059
8064
  }, { allowSignalWrites: true });
8065
+ this.editorCommandsService.onImageUploaded = result => {
8066
+ this.imageUploaded.emit(result);
8067
+ };
8060
8068
  }
8061
8069
  ngAfterViewInit() {
8062
8070
  // La vue est déjà complètement initialisée dans ngAfterViewInit
@@ -8393,7 +8401,13 @@ class AngularTiptapEditorComponent {
8393
8401
  }
8394
8402
  }
8395
8403
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularTiptapEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8396
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AngularTiptapEditorComponent, isStandalone: true, selector: "angular-tiptap-editor", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, fillContainer: { classPropertyName: "fillContainer", publicName: "fillContainer", isSignal: true, isRequired: false, transformFunction: null }, showToolbar: { classPropertyName: "showToolbar", publicName: "showToolbar", isSignal: true, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: true, isRequired: false, transformFunction: null }, showCharacterCount: { classPropertyName: "showCharacterCount", publicName: "showCharacterCount", isSignal: true, isRequired: false, transformFunction: null }, showWordCount: { classPropertyName: "showWordCount", publicName: "showWordCount", isSignal: true, isRequired: false, transformFunction: null }, maxCharacters: { classPropertyName: "maxCharacters", publicName: "maxCharacters", isSignal: true, isRequired: false, transformFunction: null }, enableOfficePaste: { classPropertyName: "enableOfficePaste", publicName: "enableOfficePaste", isSignal: true, isRequired: false, transformFunction: null }, enableSlashCommands: { classPropertyName: "enableSlashCommands", publicName: "enableSlashCommands", isSignal: true, isRequired: false, transformFunction: null }, slashCommands: { classPropertyName: "slashCommands", publicName: "slashCommands", isSignal: true, isRequired: false, transformFunction: null }, customSlashCommands: { classPropertyName: "customSlashCommands", publicName: "customSlashCommands", isSignal: true, isRequired: false, transformFunction: null }, blockControls: { classPropertyName: "blockControls", publicName: "blockControls", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, autofocus: { classPropertyName: "autofocus", publicName: "autofocus", isSignal: true, isRequired: false, transformFunction: null }, seamless: { classPropertyName: "seamless", publicName: "seamless", isSignal: true, isRequired: false, transformFunction: null }, floatingToolbar: { classPropertyName: "floatingToolbar", publicName: "floatingToolbar", isSignal: true, isRequired: false, transformFunction: null }, showEditToggle: { classPropertyName: "showEditToggle", publicName: "showEditToggle", isSignal: true, isRequired: false, transformFunction: null }, spellcheck: { classPropertyName: "spellcheck", publicName: "spellcheck", isSignal: true, isRequired: false, transformFunction: null }, tiptapExtensions: { classPropertyName: "tiptapExtensions", publicName: "tiptapExtensions", isSignal: true, isRequired: false, transformFunction: null }, tiptapOptions: { classPropertyName: "tiptapOptions", publicName: "tiptapOptions", isSignal: true, isRequired: false, transformFunction: null }, showBubbleMenu: { classPropertyName: "showBubbleMenu", publicName: "showBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, bubbleMenu: { classPropertyName: "bubbleMenu", publicName: "bubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, showImageBubbleMenu: { classPropertyName: "showImageBubbleMenu", publicName: "showImageBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, imageBubbleMenu: { classPropertyName: "imageBubbleMenu", publicName: "imageBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, toolbar: { classPropertyName: "toolbar", publicName: "toolbar", isSignal: true, isRequired: false, transformFunction: null }, showTableBubbleMenu: { classPropertyName: "showTableBubbleMenu", publicName: "showTableBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, tableBubbleMenu: { classPropertyName: "tableBubbleMenu", publicName: "tableBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, showCellBubbleMenu: { classPropertyName: "showCellBubbleMenu", publicName: "showCellBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, cellBubbleMenu: { classPropertyName: "cellBubbleMenu", publicName: "cellBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, stateCalculators: { classPropertyName: "stateCalculators", publicName: "stateCalculators", isSignal: true, isRequired: false, transformFunction: null }, imageUpload: { classPropertyName: "imageUpload", publicName: "imageUpload", isSignal: true, isRequired: false, transformFunction: null }, imageUploadHandler: { classPropertyName: "imageUploadHandler", publicName: "imageUploadHandler", isSignal: true, isRequired: false, transformFunction: null }, editorId: { classPropertyName: "editorId", publicName: "editorId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { contentChange: "contentChange", editorCreated: "editorCreated", editorUpdate: "editorUpdate", editorFocus: "editorFocus", editorBlur: "editorBlur", editableChange: "editableChange" }, host: { properties: { "class.fill-container": "finalFillContainer()", "class.floating-toolbar": "finalFloatingToolbar()", "class.is-readonly": "!finalEditable() && !mergedDisabled()", "class.is-disabled": "mergedDisabled()", "style.--ate-border-width": "finalSeamless() || mergedDisabled() ? '0' : null", "style.--ate-background": "finalSeamless() ? 'transparent' : (mergedDisabled() ? 'var(--ate-surface-tertiary)' : null)", "style.--ate-toolbar-border-color": "finalSeamless() ? 'transparent' : null", "style.--ate-counter-background": "finalSeamless() ? 'transparent' : null", "style.--ate-counter-border-color": "finalSeamless() ? 'transparent' : null", "class.dark": "config().theme === 'dark'", "class.ate-blocks-inside": "finalBlockControls() === 'inside'", "class.ate-blocks-outside": "finalBlockControls() === 'outside'", "attr.data-theme": "config().theme" } }, providers: [AteEditorCommandsService, AteImageService, AteColorPickerService, AteLinkService, AteExportService], viewQueries: [{ propertyName: "editorElement", first: true, predicate: ["editorElement"], descendants: true, isSignal: true }], hostDirectives: [{ directive: AteNoopValueAccessorDirective }], ngImport: i0, template: `
8404
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AngularTiptapEditorComponent, isStandalone: true, selector: "angular-tiptap-editor", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, minHeight: { classPropertyName: "minHeight", publicName: "minHeight", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, fillContainer: { classPropertyName: "fillContainer", publicName: "fillContainer", isSignal: true, isRequired: false, transformFunction: null }, showToolbar: { classPropertyName: "showToolbar", publicName: "showToolbar", isSignal: true, isRequired: false, transformFunction: null }, showFooter: { classPropertyName: "showFooter", publicName: "showFooter", isSignal: true, isRequired: false, transformFunction: null }, showCharacterCount: { classPropertyName: "showCharacterCount", publicName: "showCharacterCount", isSignal: true, isRequired: false, transformFunction: null }, showWordCount: { classPropertyName: "showWordCount", publicName: "showWordCount", isSignal: true, isRequired: false, transformFunction: null }, maxCharacters: { classPropertyName: "maxCharacters", publicName: "maxCharacters", isSignal: true, isRequired: false, transformFunction: null }, enableOfficePaste: { classPropertyName: "enableOfficePaste", publicName: "enableOfficePaste", isSignal: true, isRequired: false, transformFunction: null }, enableSlashCommands: { classPropertyName: "enableSlashCommands", publicName: "enableSlashCommands", isSignal: true, isRequired: false, transformFunction: null }, slashCommands: { classPropertyName: "slashCommands", publicName: "slashCommands", isSignal: true, isRequired: false, transformFunction: null }, customSlashCommands: { classPropertyName: "customSlashCommands", publicName: "customSlashCommands", isSignal: true, isRequired: false, transformFunction: null }, blockControls: { classPropertyName: "blockControls", publicName: "blockControls", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, autofocus: { classPropertyName: "autofocus", publicName: "autofocus", isSignal: true, isRequired: false, transformFunction: null }, seamless: { classPropertyName: "seamless", publicName: "seamless", isSignal: true, isRequired: false, transformFunction: null }, floatingToolbar: { classPropertyName: "floatingToolbar", publicName: "floatingToolbar", isSignal: true, isRequired: false, transformFunction: null }, showEditToggle: { classPropertyName: "showEditToggle", publicName: "showEditToggle", isSignal: true, isRequired: false, transformFunction: null }, spellcheck: { classPropertyName: "spellcheck", publicName: "spellcheck", isSignal: true, isRequired: false, transformFunction: null }, tiptapExtensions: { classPropertyName: "tiptapExtensions", publicName: "tiptapExtensions", isSignal: true, isRequired: false, transformFunction: null }, tiptapOptions: { classPropertyName: "tiptapOptions", publicName: "tiptapOptions", isSignal: true, isRequired: false, transformFunction: null }, showBubbleMenu: { classPropertyName: "showBubbleMenu", publicName: "showBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, bubbleMenu: { classPropertyName: "bubbleMenu", publicName: "bubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, showImageBubbleMenu: { classPropertyName: "showImageBubbleMenu", publicName: "showImageBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, imageBubbleMenu: { classPropertyName: "imageBubbleMenu", publicName: "imageBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, toolbar: { classPropertyName: "toolbar", publicName: "toolbar", isSignal: true, isRequired: false, transformFunction: null }, showTableBubbleMenu: { classPropertyName: "showTableBubbleMenu", publicName: "showTableBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, tableBubbleMenu: { classPropertyName: "tableBubbleMenu", publicName: "tableBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, showCellBubbleMenu: { classPropertyName: "showCellBubbleMenu", publicName: "showCellBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, cellBubbleMenu: { classPropertyName: "cellBubbleMenu", publicName: "cellBubbleMenu", isSignal: true, isRequired: false, transformFunction: null }, stateCalculators: { classPropertyName: "stateCalculators", publicName: "stateCalculators", isSignal: true, isRequired: false, transformFunction: null }, imageUpload: { classPropertyName: "imageUpload", publicName: "imageUpload", isSignal: true, isRequired: false, transformFunction: null }, imageUploadHandler: { classPropertyName: "imageUploadHandler", publicName: "imageUploadHandler", isSignal: true, isRequired: false, transformFunction: null }, editorId: { classPropertyName: "editorId", publicName: "editorId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { contentChange: "contentChange", editorCreated: "editorCreated", editorUpdate: "editorUpdate", editorFocus: "editorFocus", editorBlur: "editorBlur", editableChange: "editableChange", imageUploaded: "imageUploaded" }, host: { properties: { "class.fill-container": "finalFillContainer()", "class.floating-toolbar": "finalFloatingToolbar()", "class.is-readonly": "!finalEditable() && !mergedDisabled()", "class.is-disabled": "mergedDisabled()", "style.--ate-border-width": "finalSeamless() || mergedDisabled() ? '0' : null", "style.--ate-background": "finalSeamless() ? 'transparent' : (mergedDisabled() ? 'var(--ate-surface-tertiary)' : null)", "style.--ate-toolbar-border-color": "finalSeamless() ? 'transparent' : null", "style.--ate-counter-background": "finalSeamless() ? 'transparent' : null", "style.--ate-counter-border-color": "finalSeamless() ? 'transparent' : null", "class.dark": "config().theme === 'dark'", "class.ate-blocks-inside": "finalBlockControls() === 'inside'", "class.ate-blocks-outside": "finalBlockControls() === 'outside'", "attr.data-theme": "config().theme" } }, providers: [
8405
+ AteEditorCommandsService,
8406
+ AteImageService,
8407
+ AteColorPickerService,
8408
+ AteLinkService,
8409
+ AteExportService,
8410
+ ], viewQueries: [{ propertyName: "editorElement", first: true, predicate: ["editorElement"], descendants: true, isSignal: true }], hostDirectives: [{ directive: AteNoopValueAccessorDirective }], ngImport: i0, template: `
8397
8411
  <div class="ate-editor">
8398
8412
  <!-- Toolbar -->
8399
8413
  @if (finalEditable() && !mergedDisabled() && finalShowToolbar() && editor()) {
@@ -8548,7 +8562,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
8548
8562
  AteColorBubbleMenuComponent,
8549
8563
  AteEditToggleComponent,
8550
8564
  AteBlockControlsComponent,
8551
- ], providers: [AteEditorCommandsService, AteImageService, AteColorPickerService, AteLinkService, AteExportService], template: `
8565
+ ], providers: [
8566
+ AteEditorCommandsService,
8567
+ AteImageService,
8568
+ AteColorPickerService,
8569
+ AteLinkService,
8570
+ AteExportService,
8571
+ ], template: `
8552
8572
  <div class="ate-editor">
8553
8573
  <!-- Toolbar -->
8554
8574
  @if (finalEditable() && !mergedDisabled() && finalShowToolbar() && editor()) {