@ng-matero/extensions 18.0.2 → 18.0.3
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.
|
@@ -48,6 +48,7 @@ export class MtxSplitPane {
|
|
|
48
48
|
return this._lockSize;
|
|
49
49
|
}
|
|
50
50
|
set lockSize(v) {
|
|
51
|
+
this._lockSize = v;
|
|
51
52
|
this.split.updateArea(this, false, true);
|
|
52
53
|
}
|
|
53
54
|
/** Hide area visually but still present in the DOM, use `ngIf` to completely remove it. */
|
|
@@ -55,6 +56,7 @@ export class MtxSplitPane {
|
|
|
55
56
|
return this._visible;
|
|
56
57
|
}
|
|
57
58
|
set visible(v) {
|
|
59
|
+
this._visible = v;
|
|
58
60
|
if (this._visible) {
|
|
59
61
|
this.split.showArea(this);
|
|
60
62
|
this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');
|
|
@@ -156,4 +158,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImpor
|
|
|
156
158
|
type: Input,
|
|
157
159
|
args: [{ transform: booleanAttribute }]
|
|
158
160
|
}] } });
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtcGFuZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvc3BsaXQvc3BsaXQtcGFuZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFLTCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFPakQsTUFBTSxPQUFPLFlBQVk7SUFDdkI7OztPQUdHO0lBQ0gsSUFDSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFnQjtRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLHNCQUFzQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU5QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFHRDs7Ozs7T0FLRztJQUNILElBQ0ksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsQ0FBZ0I7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBR0QseUZBQXlGO0lBQ3pGLElBQ0ksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsQ0FBZ0I7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxD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USxFQUFFLGtDQUFrQztvQkFDNUMsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjttSkFPSyxLQUFLO3NCQURSLEtBQUs7Z0JBa0JGLElBQUk7c0JBRFAsS0FBSztnQkFhRixPQUFPO3NCQURWLEtBQUs7Z0JBYUYsT0FBTztzQkFEVixLQUFLO2dCQWFGLFFBQVE7c0JBRFgsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFXbEMsT0FBTztzQkFEVixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyLFxuICBib29sZWFuQXR0cmlidXRlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTXR4U3BsaXQgfSBmcm9tICcuL3NwbGl0JztcbmltcG9ydCB7IGdldElucHV0UG9zaXRpdmVOdW1iZXIgfSBmcm9tICcuL3V0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnbXR4LXNwbGl0LXBhbmUsIFttdHgtc3BsaXQtcGFuZV0nLFxuICBleHBvcnRBczogJ210eFNwbGl0UGFuZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE10eFNwbGl0UGFuZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIE9yZGVyIG9mIHRoZSBhcmVhLiBVc2VkIHRvIG1haW50YWluIHRoZSBvcmRlciBvZiBhcmVhcyB3aGVuIHRvZ2dsaW5nIHRoZWlyIHZpc2liaWxpdHkuXG4gICAqIFRvZ2dsaW5nIGFyZWEgdmlzaWJpbGl0eSB3aXRob3V0IHNwZWNpZnlpbmcgYW4gYG9yZGVyYCBsZWFkcyB0byB3ZWlyZCBiZWhhdmlvci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBvcmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fb3JkZXI7XG4gIH1cbiAgc2V0IG9yZGVyKHY6IG51bWJlciB8IG51bGwpIHtcbiAgICB0aGlzLl9vcmRlciA9IGdldElucHV0UG9zaXRpdmVOdW1iZXIodiwgbnVsbCk7XG5cbiAgICB0aGlzLnNwbGl0LnVwZGF0ZUFyZWEodGhpcywgdHJ1ZSwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgX29yZGVyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogU2l6ZSBvZiB0aGUgYXJlYSBpbiBzZWxlY3RlZCB1bml0IChwZXJjZW50L3BpeGVsKS5cbiAgICogLSBQZXJjZW50OiBBbGwgYXJlYXMgc2l6ZXMgc2hvdWxkIGVxdWFsIHRvIGAxMDBgLCBJZiBub3QsIGFsbCBhcmVhcyB3aWxsIGhhdmUgdGhlIHNhbWUgc2l6ZS5cbiAgICogLSBQaXhlbDogQW4gYXJlYSB3aXRoIHdpbGRjYXJkIHNpemUgKGBzaXplPVwiKlwiYCkgaXMgbWFuZGF0b3J5IChvbmx5IG9uZSkgYW5kXG4gICAqICAgY2FuJ3QgaGF2ZSBgdmlzaWJsZT1cImZhbHNlXCJgIG9yIGBtaW5TaXplYC9gbWF4U2l6ZWAvYGxvY2tTaXplYCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH1cbiAgc2V0IHNpemUodjogbnVtYmVyIHwgbnVsbCkge1xuICAgIHRoaXMuX3NpemUgPSBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyKHYsIG51bGwpO1xuXG4gICAgdGhpcy5zcGxpdC51cGRhdGVBcmVhKHRoaXMsIGZhbHNlLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIF9zaXplOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvKiogTWluaW11bSBwaXhlbCBvciBwZXJjZW50IHNpemUsIHNob3VsZCBiZSBlcXVhbCB0byBvciBzbWFsbGVyIHRoYW4gcHJvdmlkZWQgYHNpemVgLiAqL1xuICBASW5wdXQoKVxuICBnZXQgbWluU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWluU2l6ZTtcbiAgfVxuICBzZXQgbWluU2l6ZSh2OiBudW1iZXIgfCBudWxsKSB7XG4gICAgdGhpcy5fbWluU2l6ZSA9IGdldElucHV0UG9zaXRpdmVOdW1iZXIodiwgbnVsbCk7XG5cbiAgICB0aGlzLnNwbGl0LnVwZGF0ZUFyZWEodGhpcywgZmFsc2UsIHRydWUpO1xuICB9XG4gIHByaXZhdGUgX21pblNpemU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBNYXhpbXVtIHBpeGVsIG9yIHBlcmNlbnQgc2l6ZSwgc2hvdWxkIGJlIGVxdWFsIHRvIG9yIGxhcmdlciB0aGFuIHByb3ZpZGVkIGBzaXplYC4gKi9cbiAgQElucHV0KClcbiAgZ2V0IG1heFNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21heFNpemU7XG4gIH1cbiAgc2V0IG1heFNpemUodjogbnVtYmVyIHwgbnVsbCkge1xuICAgIHRoaXMuX21heFNpemUgPSBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyKHYsIG51bGwpO1xuXG4gICAgdGhpcy5zcGxpdC51cGRhdGVBcmVhKHRoaXMsIGZhbHNlLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIF9tYXhTaXplOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvKiogTG9jayBhcmVhIHNpemUsIHNhbWUgYXMgYG1pblNpemVgPWBtYXhTaXplYD1gc2l6ZWAuICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBnZXQgbG9ja1NpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2tTaXplO1xuICB9XG4gIHNldCBsb2NrU2l6ZSh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5zcGxpdC51cGRhdGVBcmVhKHRoaXMsIGZhbHNlLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIF9sb2NrU2l6ZSA9IGZhbHNlO1xuXG4gIC8qKiBIaWRlIGFyZWEgdmlzdWFsbHkgYnV0IHN0aWxsIHByZXNlbnQgaW4gdGhlIERPTSwgdXNlIGBuZ0lmYCB0byBjb21wbGV0ZWx5IHJlbW92ZSBpdC4gKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIGdldCB2aXNpYmxlKCkge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICB9XG4gIHNldCB2aXNpYmxlKHY6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5fdmlzaWJsZSkge1xuICAgICAgdGhpcy5zcGxpdC5zaG93QXJlYSh0aGlzKTtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnbXR4LXNwbGl0LXBhbmUtaGlkZGVuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3BsaXQuaGlkZUFyZWEodGhpcyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ210eC1zcGxpdC1wYW5lLWhpZGRlbicpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF92aXNpYmxlID0gdHJ1ZTtcblxuICBwcml2YXRlIHRyYW5zaXRpb25MaXN0ZW5lciE6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9ja0xpc3RlbmVyczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHB1YmxpYyBlbFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBzcGxpdDogTXR4U3BsaXRcbiAgKSB7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdtdHgtc3BsaXQtcGFuZScpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zcGxpdC5hZGRBcmVhKHRoaXMpO1xuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy50cmFuc2l0aW9uTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAndHJhbnNpdGlvbmVuZCcsXG4gICAgICAgIChldmVudDogVHJhbnNpdGlvbkV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gTGltaXQgb25seSBmbGV4LWJhc2lzIHRyYW5zaXRpb24gdG8gdHJpZ2dlciB0aGUgZXZlbnRcbiAgICAgICAgICBpZiAoZXZlbnQucHJvcGVydHlOYW1lID09PSAnZmxleC1iYXNpcycpIHtcbiAgICAgICAgICAgIHRoaXMuc3BsaXQubm90aWZ5KCd0cmFuc2l0aW9uRW5kJywgLTEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFN0eWxlT3JkZXIodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnb3JkZXInLCB2YWx1ZSk7XG4gIH1cblxuICBzZXRTdHlsZUZsZXgoZ3JvdzogbnVtYmVyLCBzaHJpbms6IG51bWJlciwgYmFzaXM6IHN0cmluZywgaXNNaW46IGJvb2xlYW4sIGlzTWF4OiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8gTmVlZCAzIHNlcGFyYXRlZCBwcm9wZXJ0aWVzIHRvIHdvcmsgb24gSUUxMSAoaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvZmxleC1sYXlvdXQvaXNzdWVzLzMyMylcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ2ZsZXgtZ3JvdycsIGdyb3cpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnZmxleC1zaHJpbmsnLCBzaHJpbmspO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnZmxleC1iYXNpcycsIGJhc2lzKTtcblxuICAgIGlmIChpc01pbiA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdtdHgtbWluJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnbXR4LW1pbicpO1xuICAgIH1cblxuICAgIGlmIChpc01heCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdtdHgtbWF4Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnbXR4LW1heCcpO1xuICAgIH1cbiAgfVxuXG4gIGxvY2tFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5sb2NrTGlzdGVuZXJzLnB1c2goXG4gICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ3NlbGVjdHN0YXJ0JywgKGU6IEV2ZW50KSA9PiBmYWxzZSlcbiAgICAgICk7XG4gICAgICB0aGlzLmxvY2tMaXN0ZW5lcnMucHVzaChcbiAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnZHJhZ3N0YXJ0JywgKGU6IEV2ZW50KSA9PiBmYWxzZSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICB1bmxvY2tFdmVudHMoKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMubG9ja0xpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmY3QgPSB0aGlzLmxvY2tMaXN0ZW5lcnMucG9wKCk7XG4gICAgICBpZiAoZmN0KSB7XG4gICAgICAgIGZjdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5sb2NrRXZlbnRzKCk7XG5cbiAgICBpZiAodGhpcy50cmFuc2l0aW9uTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMudHJhbnNpdGlvbkxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zcGxpdC5yZW1vdmVBcmVhKHRoaXMpO1xuICB9XG59XG4iXX0=
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtcGFuZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvc3BsaXQvc3BsaXQtcGFuZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFLTCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFPakQsTUFBTSxPQUFPLFlBQVk7SUFDdkI7OztPQUdHO0lBQ0gsSUFDSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFnQjtRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLHNCQUFzQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU5QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFHRDs7Ozs7T0FLRztJQUNILElBQ0ksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsQ0FBZ0I7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBR0QseUZBQXlGO0lBQ3pGLElBQ0ksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsQ0FBZ0I7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxD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QVksdUxBMERILGdCQUFnQixtQ0FZaEIsZ0JBQWdCOzsyRkF0RXpCLFlBQVk7a0JBTHhCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtDQUFrQztvQkFDNUMsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjttSkFPSyxLQUFLO3NCQURSLEtBQUs7Z0JBa0JGLElBQUk7c0JBRFAsS0FBSztnQkFhRixPQUFPO3NCQURWLEtBQUs7Z0JBYUYsT0FBTztzQkFEVixLQUFLO2dCQWFGLFFBQVE7c0JBRFgsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFhbEMsT0FBTztzQkFEVixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUmVuZGVyZXIyLFxuICBib29sZWFuQXR0cmlidXRlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTXR4U3BsaXQgfSBmcm9tICcuL3NwbGl0JztcbmltcG9ydCB7IGdldElucHV0UG9zaXRpdmVOdW1iZXIgfSBmcm9tICcuL3V0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnbXR4LXNwbGl0LXBhbmUsIFttdHgtc3BsaXQtcGFuZV0nLFxuICBleHBvcnRBczogJ210eFNwbGl0UGFuZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE10eFNwbGl0UGFuZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIE9yZGVyIG9mIHRoZSBhcmVhLiBVc2VkIHRvIG1haW50YWluIHRoZSBvcmRlciBvZiBhcmVhcyB3aGVuIHRvZ2dsaW5nIHRoZWlyIHZpc2liaWxpdHkuXG4gICAqIFRvZ2dsaW5nIGFyZWEgdmlzaWJpbGl0eSB3aXRob3V0IHNwZWNpZnlpbmcgYW4gYG9yZGVyYCBsZWFkcyB0byB3ZWlyZCBiZWhhdmlvci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBvcmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fb3JkZXI7XG4gIH1cbiAgc2V0IG9yZGVyKHY6IG51bWJlciB8IG51bGwpIHtcbiAgICB0aGlzLl9vcmRlciA9IGdldElucHV0UG9zaXRpdmVOdW1iZXIodiwgbnVsbCk7XG5cbiAgICB0aGlzLnNwbGl0LnVwZGF0ZUFyZWEodGhpcywgdHJ1ZSwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgX29yZGVyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogU2l6ZSBvZiB0aGUgYXJlYSBpbiBzZWxlY3RlZCB1bml0IChwZXJjZW50L3BpeGVsKS5cbiAgICogLSBQZXJjZW50OiBBbGwgYXJlYXMgc2l6ZXMgc2hvdWxkIGVxdWFsIHRvIGAxMDBgLCBJZiBub3QsIGFsbCBhcmVhcyB3aWxsIGhhdmUgdGhlIHNhbWUgc2l6ZS5cbiAgICogLSBQaXhlbDogQW4gYXJlYSB3aXRoIHdpbGRjYXJkIHNpemUgKGBzaXplPVwiKlwiYCkgaXMgbWFuZGF0b3J5IChvbmx5IG9uZSkgYW5kXG4gICAqICAgY2FuJ3QgaGF2ZSBgdmlzaWJsZT1cImZhbHNlXCJgIG9yIGBtaW5TaXplYC9gbWF4U2l6ZWAvYGxvY2tTaXplYCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH1cbiAgc2V0IHNpemUodjogbnVtYmVyIHwgbnVsbCkge1xuICAgIHRoaXMuX3NpemUgPSBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyKHYsIG51bGwpO1xuXG4gICAgdGhpcy5zcGxpdC51cGRhdGVBcmVhKHRoaXMsIGZhbHNlLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIF9zaXplOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvKiogTWluaW11bSBwaXhlbCBvciBwZXJjZW50IHNpemUsIHNob3VsZCBiZSBlcXVhbCB0byBvciBzbWFsbGVyIHRoYW4gcHJvdmlkZWQgYHNpemVgLiAqL1xuICBASW5wdXQoKVxuICBnZXQgbWluU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWluU2l6ZTtcbiAgfVxuICBzZXQgbWluU2l6ZSh2OiBudW1iZXIgfCBudWxsKSB7XG4gICAgdGhpcy5fbWluU2l6ZSA9IGdldElucHV0UG9zaXRpdmVOdW1iZXIodiwgbnVsbCk7XG5cbiAgICB0aGlzLnNwbGl0LnVwZGF0ZUFyZWEodGhpcywgZmFsc2UsIHRydWUpO1xuICB9XG4gIHByaXZhdGUgX21pblNpemU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBNYXhpbXVtIHBpeGVsIG9yIHBlcmNlbnQgc2l6ZSwgc2hvdWxkIGJlIGVxdWFsIHRvIG9yIGxhcmdlciB0aGFuIHByb3ZpZGVkIGBzaXplYC4gKi9cbiAgQElucHV0KClcbiAgZ2V0IG1heFNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21heFNpemU7XG4gIH1cbiAgc2V0IG1heFNpemUodjogbnVtYmVyIHwgbnVsbCkge1xuICAgIHRoaXMuX21heFNpemUgPSBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyKHYsIG51bGwpO1xuXG4gICAgdGhpcy5zcGxpdC51cGRhdGVBcmVhKHRoaXMsIGZhbHNlLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIF9tYXhTaXplOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvKiogTG9jayBhcmVhIHNpemUsIHNhbWUgYXMgYG1pblNpemVgPWBtYXhTaXplYD1gc2l6ZWAuICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBnZXQgbG9ja1NpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2tTaXplO1xuICB9XG4gIHNldCBsb2NrU2l6ZSh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fbG9ja1NpemUgPSB2O1xuXG4gICAgdGhpcy5zcGxpdC51cGRhdGVBcmVhKHRoaXMsIGZhbHNlLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIF9sb2NrU2l6ZSA9IGZhbHNlO1xuXG4gIC8qKiBIaWRlIGFyZWEgdmlzdWFsbHkgYnV0IHN0aWxsIHByZXNlbnQgaW4gdGhlIERPTSwgdXNlIGBuZ0lmYCB0byBjb21wbGV0ZWx5IHJlbW92ZSBpdC4gKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIGdldCB2aXNpYmxlKCkge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICB9XG4gIHNldCB2aXNpYmxlKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl92aXNpYmxlID0gdjtcblxuICAgIGlmICh0aGlzLl92aXNpYmxlKSB7XG4gICAgICB0aGlzLnNwbGl0LnNob3dBcmVhKHRoaXMpO1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdtdHgtc3BsaXQtcGFuZS1oaWRkZW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zcGxpdC5oaWRlQXJlYSh0aGlzKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnbXR4LXNwbGl0LXBhbmUtaGlkZGVuJyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3Zpc2libGUgPSB0cnVlO1xuXG4gIHByaXZhdGUgdHJhbnNpdGlvbkxpc3RlbmVyITogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NrTGlzdGVuZXJzOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHVibGljIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHNwbGl0OiBNdHhTcGxpdFxuICApIHtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ210eC1zcGxpdC1wYW5lJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNwbGl0LmFkZEFyZWEodGhpcyk7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zaXRpb25MaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICd0cmFuc2l0aW9uZW5kJyxcbiAgICAgICAgKGV2ZW50OiBUcmFuc2l0aW9uRXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBMaW1pdCBvbmx5IGZsZXgtYmFzaXMgdHJhbnNpdGlvbiB0byB0cmlnZ2VyIHRoZSBldmVudFxuICAgICAgICAgIGlmIChldmVudC5wcm9wZXJ0eU5hbWUgPT09ICdmbGV4LWJhc2lzJykge1xuICAgICAgICAgICAgdGhpcy5zcGxpdC5ub3RpZnkoJ3RyYW5zaXRpb25FbmQnLCAtMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0U3R5bGVPcmRlcih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdvcmRlcicsIHZhbHVlKTtcbiAgfVxuXG4gIHNldFN0eWxlRmxleChncm93OiBudW1iZXIsIHNocmluazogbnVtYmVyLCBiYXNpczogc3RyaW5nLCBpc01pbjogYm9vbGVhbiwgaXNNYXg6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBOZWVkIDMgc2VwYXJhdGVkIHByb3BlcnRpZXMgdG8gd29yayBvbiBJRTExIChodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9mbGV4LWxheW91dC9pc3N1ZXMvMzIzKVxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnZmxleC1ncm93JywgZ3Jvdyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdmbGV4LXNocmluaycsIHNocmluayk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdmbGV4LWJhc2lzJywgYmFzaXMpO1xuXG4gICAgaWYgKGlzTWluID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ210eC1taW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdtdHgtbWluJyk7XG4gICAgfVxuXG4gICAgaWYgKGlzTWF4ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ210eC1tYXgnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdtdHgtbWF4Jyk7XG4gICAgfVxuICB9XG5cbiAgbG9ja0V2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLmxvY2tMaXN0ZW5lcnMucHVzaChcbiAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnc2VsZWN0c3RhcnQnLCAoZTogRXZlbnQpID0+IGZhbHNlKVxuICAgICAgKTtcbiAgICAgIHRoaXMubG9ja0xpc3RlbmVycy5wdXNoKFxuICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdkcmFnc3RhcnQnLCAoZTogRXZlbnQpID0+IGZhbHNlKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVubG9ja0V2ZW50cygpOiB2b2lkIHtcbiAgICB3aGlsZSAodGhpcy5sb2NrTGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZjdCA9IHRoaXMubG9ja0xpc3RlbmVycy5wb3AoKTtcbiAgICAgIGlmIChmY3QpIHtcbiAgICAgICAgZmN0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bmxvY2tFdmVudHMoKTtcblxuICAgIGlmICh0aGlzLnRyYW5zaXRpb25MaXN0ZW5lcikge1xuICAgICAgdGhpcy50cmFuc2l0aW9uTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNwbGl0LnJlbW92ZUFyZWEodGhpcyk7XG4gIH1cbn1cbiJdfQ==
|
package/esm2022/split/split.mjs
CHANGED
|
@@ -75,6 +75,7 @@ export class MtxSplit {
|
|
|
75
75
|
return this._useTransition;
|
|
76
76
|
}
|
|
77
77
|
set useTransition(v) {
|
|
78
|
+
this._useTransition = v;
|
|
78
79
|
if (this._useTransition) {
|
|
79
80
|
this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-transition');
|
|
80
81
|
}
|
|
@@ -90,6 +91,7 @@ export class MtxSplit {
|
|
|
90
91
|
return this._disabled;
|
|
91
92
|
}
|
|
92
93
|
set disabled(v) {
|
|
94
|
+
this._disabled = v;
|
|
93
95
|
if (this._disabled) {
|
|
94
96
|
this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-disabled');
|
|
95
97
|
}
|
|
@@ -629,4 +631,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImpor
|
|
|
629
631
|
type: ViewChildren,
|
|
630
632
|
args: ['gutterEls']
|
|
631
633
|
}] } });
|
|
632
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL3NwbGl0L3NwbGl0LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvZXh0ZW5zaW9ucy9zcGxpdC9zcGxpdC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUdOLFlBQVksRUFDWixpQkFBaUIsRUFDakIsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVk5QyxPQUFPLEVBQ0wsY0FBYyxFQUNkLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsK0JBQStCLEVBQy9CLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGNBQWMsR0FDZixNQUFNLFNBQVMsQ0FBQzs7QUFFakIseUVBQXlFO0FBQ3pFLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLElBQUksY0FBYyxDQUN6RCwyQkFBMkIsQ0FDNUIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBY0gsTUFBTSxPQUFPLFFBQVE7SUFHbkIsMkJBQTJCO0lBQzNCLElBQ0ksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsQ0FBNEI7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUUvRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxhQUFhLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFDeEIsYUFBYSxJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDMUUsQ0FBQztRQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFHRCwrQ0FBK0M7SUFDL0MsSUFDSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxDQUFzQjtRQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWpELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLGFBQWEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUN4QixhQUFhLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUM1RCxDQUFDO1FBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUdELG9EQUFvRDtJQUNwRCxJQUNJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLENBQVM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUdELDBDQUEwQztJQUMxQyxJQUNJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLENBQVM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQU1ELGlGQUFpRjtJQUNqRixJQUNJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksYUFBYSxDQUFDLENBQVU7UUFDMUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUMzRSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDOUUsQ0FBQztJQUNILENBQUM7SUFHRDs7O09BR0c7SUFDSCxJQUNJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLENBQVU7UUFDckIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUN6RSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNILENBQUM7SUFHRCxpREFBaUQ7SUFDakQsSUFDSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLEdBQUcsQ0FBQyxDQUFnQjtRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRXhDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUdEOzs7T0FHRztJQUNILElBQ0ksc0JBQXNCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3RDLENBQUM7SUFDRCxJQUFJLHNCQUFzQixDQUFDLENBQVM7UUFDbEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLHNCQUFzQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBV0Q7OztPQUdHO0lBQ0gsSUFDSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNuRixZQUFZLENBQU0sRUFBRSxDQUFDLENBQ3RCLENBQUM7SUFDSixDQUFDO0lBaUJELFlBQ1UsTUFBYyxFQUNkLEtBQWlCLEVBQ2pCLEtBQXdCLEVBQ3hCLFFBQW1CLEVBR2pCLGVBQXdDO1FBTjFDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFHakIsb0JBQWUsR0FBZixlQUFlLENBQXlCO1FBOUk1QyxlQUFVLEdBQThCLFlBQVksQ0FBQztRQWtCckQsVUFBSyxHQUF3QixTQUFTLENBQUM7UUFZdkMsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFVaEIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFFeEIsMkVBQTJFO1FBQ25DLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBY3JELG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBaUJ2QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBWWxCLFNBQUksR0FBa0IsS0FBSyxDQUFDO1FBYTVCLDRCQUF1QixHQUFHLENBQUMsQ0FBQztRQUVwQyxzQ0FBc0M7UUFDNUIsY0FBUyxHQUFHLElBQUksWUFBWSxDQUFxQixLQUFLLENBQUMsQ0FBQztRQUNsRSxvQ0FBb0M7UUFDMUIsWUFBTyxHQUFHLElBQUksWUFBWSxDQUFxQixLQUFLLENBQUMsQ0FBQztRQUNoRSxrREFBa0Q7UUFDeEMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksQ0FBcUIsS0FBSyxDQUFDLENBQUM7UUFDcEUseURBQXlEO1FBQy9DLG1CQUFjLEdBQUcsSUFBSSxZQUFZLENBQXFCLEtBQUssQ0FBQyxDQUFDO1FBYS9ELHdCQUFtQixHQUFnQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3pFLGtCQUFhLEdBQW1DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVoRixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGtCQUFhLEdBQXNCLEVBQUUsQ0FBQztRQUN0QyxhQUFRLEdBQTRCLElBQUksQ0FBQztRQUN6QyxlQUFVLEdBQXlCLElBQUksQ0FBQztRQUN4QyxhQUFRLEdBQXlCLElBQUksQ0FBQztRQUU5QixtQkFBYyxHQUF3QixFQUFFLENBQUM7UUFDeEMsZUFBVSxHQUF3QixFQUFFLENBQUM7UUEwUXRELGtCQUFhLEdBQWtCLElBQUksQ0FBQztRQTdQbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFlLEVBQUUsS0FBSyxJQUFJLFNBQVMsQ0FBQztRQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLGVBQWUsRUFBRSxTQUFTLElBQUksWUFBWSxDQUFDO1FBQzVELElBQUksQ0FBQyxHQUFHLEdBQUcsZUFBZSxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQUM7UUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLEVBQUUsSUFBSSxJQUFJLFNBQVMsQ0FBQztRQUMvQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsZUFBZSxFQUFFLHNCQUFzQixJQUFJLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsVUFBVSxHQUFHLGVBQWUsRUFBRSxVQUFVLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxFQUFFLFVBQVUsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxlQUFlLEVBQUUsWUFBWSxJQUFJLEtBQUssQ0FBQztRQUMzRCxJQUFJLENBQUMsYUFBYSxHQUFHLGVBQWUsRUFBRSxhQUFhLElBQUksS0FBSyxDQUFDO0lBQy9ELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDakMseUNBQXlDO1lBQ3pDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDdkYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWTtRQUNsQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELE9BQU8sQ0FBQyxTQUF1QjtRQUM3QixNQUFNLE9BQU8sR0FBaUI7WUFDNUIsU0FBUztZQUNULEtBQUssRUFBRSxDQUFDO1lBQ1IsSUFBSSxFQUFFLENBQUM7WUFDUCxPQUFPLEVBQUUsSUFBSTtZQUNiLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztRQUVGLElBQUksU0FBUyxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVsQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQXVCO1FBQ2hDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBaUIsQ0FBQztZQUN0RixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVqRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFpQixDQUFDO1lBQ2xGLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQXVCLEVBQUUsV0FBb0IsRUFBRSxVQUFtQjtRQUMzRSxJQUFJLFNBQVMsQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsU0FBdUI7UUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUVuQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUSxDQUFDLElBQWtCO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNqRSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9FLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEIsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDaEIsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQThCO1FBQ2hELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQWEsQ0FBQztRQUNsRixNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTNELElBQUksT0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3RCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5GLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFvQixFQUFFLFVBQW1CO1FBQ3JELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQixnQkFBZ0I7UUFFaEIsSUFBSSxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDekIsK0RBQStEO1lBQy9ELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMvRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDdEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQWdCLEdBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFnQixDQUN4RSxDQUFDO1lBQ0osQ0FBQztZQUVELG9GQUFvRjtZQUNwRixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsZUFBZTtRQUVmLElBQUksVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hCLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUNuQyxJQUFJLENBQUMsSUFBSSxFQUNULElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQWEsQ0FDM0QsQ0FBQztZQUVGLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNsQixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ2YsTUFBTSxXQUFXLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO29CQUVyRCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDakMsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBZSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7d0JBQ3pFLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdEMsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsTUFBTTtnQkFDUixDQUFDO2dCQUNELEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDYixJQUFJLFlBQVksRUFBRSxDQUFDO3dCQUNqQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDakMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQzs0QkFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN0QyxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO3dCQUVyRiw0REFBNEQ7d0JBQzVELElBQUksaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzs0QkFDckUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0NBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztnQ0FDakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FDckQsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDdkQsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQzt3QkFDRCx5RUFBeUU7NkJBQ3BFLElBQUksaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDOzRCQUN0QyxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7NEJBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dDQUNqQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO29DQUNqQyxJQUFJLGFBQWEsS0FBSyxLQUFLLEVBQUUsQ0FBQzt3Q0FDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7d0NBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dDQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt3Q0FDcEIsYUFBYSxHQUFHLElBQUksQ0FBQztvQ0FDdkIsQ0FBQzt5Q0FBTSxDQUFDO3dDQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO3dDQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt3Q0FDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0NBQ3RCLENBQUM7Z0NBQ0gsQ0FBQztxQ0FBTSxDQUFDO29DQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7b0NBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO29DQUNwQyxJQUFJLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FDdEMsQ0FBQzs0QkFDSCxDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDO29CQUNILENBQUM7b0JBQ0QsTUFBTTtnQkFDUixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsMkNBQTJDO1FBQzNDLGVBQWU7UUFDZixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUIsa0NBQWtDO1lBQ2xDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUUsQ0FBQztZQUNELDBDQUEwQztpQkFDckMsQ0FBQztnQkFDSixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFFNUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUN6QixDQUFDLEVBQ0QsQ0FBQyxFQUNELFNBQVMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFFLElBQUksQ0FBQyxJQUFlLEdBQUcsR0FBRyxDQUFDLEdBQUcsYUFBYSxNQUFNLEVBQzVFLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQ2xFLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQ25FLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUNELDJDQUEyQztRQUMzQyxhQUFhO2FBQ1IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNqQywwQkFBMEI7Z0JBQzFCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUMxRCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUMxRCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsdUJBQXVCO3FCQUNsQixDQUFDO29CQUNKLGtDQUFrQztvQkFDbEMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUMxRCxDQUFDO29CQUNELHdDQUF3Qzt5QkFDbkMsQ0FBQzt3QkFDSixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FDekIsQ0FBQyxFQUNELENBQUMsRUFDRCxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFDaEIsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFDbEUsSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FDbkUsQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBSUQsV0FBVyxDQUFDLEtBQThCLEVBQUUsU0FBaUI7UUFDM0QsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFrQixDQUFDO1FBRTVELG9HQUFvRztRQUNwRyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDOUYsc0VBQXNFO1lBQ3RFLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLENBQUM7WUFDRCwrQ0FBK0M7aUJBQzFDLENBQUM7Z0JBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7b0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RCLENBQUMsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBOEIsRUFBRSxXQUFtQixFQUFFLFNBQWlCO1FBQ2xGLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdkQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2QsU0FBUztZQUNULGlCQUFpQixFQUFFLENBQUM7WUFDcEIsaUJBQWlCLEVBQ2YsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVO1lBQ3pGLDJCQUEyQixFQUFFLEdBQUc7WUFDaEMsaUJBQWlCLEVBQUUsRUFBRTtZQUNyQixnQkFBZ0IsRUFBRSxFQUFFO1NBQ3JCLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQyxNQUFNLFlBQVksR0FBeUI7Z0JBQ3pDLElBQUk7Z0JBQ0osZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDM0Usa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVcsRUFBRSwyQ0FBMkM7YUFDdEgsQ0FBQztZQUVGLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsUUFBNkIsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN6RSxDQUFDO3FCQUFNLENBQUM7b0JBQ0wsSUFBSSxDQUFDLFFBQTZCLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUM5RSxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDL0IsSUFBSyxJQUFJLENBQUMsUUFBNkIsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ3JFLElBQUksQ0FBQyxRQUE2QixDQUFDLGdCQUFnQixHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ3hFLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNMLElBQUksQ0FBQyxRQUE2QixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDMUUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsMkJBQTJCLEdBQUc7WUFDMUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQjtZQUNsQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO1NBQ2xDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVoRCxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUMzQyxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUMxRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDM0UsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzlFLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUN6RSxDQUFDO1lBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDekUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUNuRSxhQUFhLENBQ2QsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUE4QjtRQUM5QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNoQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDM0IsT0FBTztRQUNULENBQUM7UUFFRCwwQkFBMEI7UUFFMUIsSUFBSSxNQUFNLEdBQ1IsSUFBSSxDQUFDLFNBQVMsS0FBSyxZQUFZO1lBQzdCLENBQUMsQ0FBRSxJQUFJLENBQUMsVUFBNEIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBRSxJQUFJLENBQUMsVUFBNEIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQzFELE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFN0UsSUFBSSxhQUFhLEtBQU0sSUFBSSxDQUFDLFFBQTZCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM1RSxPQUFPO1FBQ1QsQ0FBQztRQUVBLElBQUksQ0FBQyxRQUE2QixDQUFDLGlCQUFpQixHQUFHLGFBQWEsQ0FBQztRQUV0RSx1RUFBdUU7UUFFdkUsSUFBSSxXQUFXLEdBQUcsK0JBQStCLENBQy9DLElBQUksQ0FBQyxJQUFJLEVBQ1IsSUFBSSxDQUFDLFFBQTZCLENBQUMsaUJBQWlCLEVBQ3JELENBQUMsYUFBYSxFQUNiLElBQUksQ0FBQyxRQUE2QixDQUFDLGlCQUFpQixDQUN0RCxDQUFDO1FBQ0YsSUFBSSxVQUFVLEdBQUcsK0JBQStCLENBQzlDLElBQUksQ0FBQyxJQUFJLEVBQ1IsSUFBSSxDQUFDLFFBQTZCLENBQUMsZ0JBQWdCLEVBQ3BELGFBQWEsRUFDWixJQUFJLENBQUMsUUFBNkIsQ0FBQyxpQkFBaUIsQ0FDdEQsQ0FBQztRQUVGLGlEQUFpRDtRQUNqRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNqRSxNQUFNO1lBQ1IsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLFVBQVUsR0FBRywrQkFBK0IsQ0FDMUMsSUFBSSxDQUFDLElBQUksRUFDUixJQUFJLENBQUMsUUFBNkIsQ0FBQyxnQkFBZ0IsRUFDcEQsYUFBYSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQ2pDLElBQUksQ0FBQyxRQUE2QixDQUFDLGlCQUFpQixDQUN0RCxDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFdBQVcsR0FBRywrQkFBK0IsQ0FDM0MsSUFBSSxDQUFDLElBQUksRUFDUixJQUFJLENBQUMsUUFBNkIsQ0FBQyxpQkFBaUIsRUFDckQsQ0FBQyxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQ25DLElBQUksQ0FBQyxRQUE2QixDQUFDLGlCQUFpQixDQUN0RCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFDRCxtR0FBbUc7YUFDOUYsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xDLFVBQVUsR0FBRywrQkFBK0IsQ0FDMUMsSUFBSSxDQUFDLElBQUksRUFDUixJQUFJLENBQUMsUUFBNkIsQ0FBQyxnQkFBZ0IsRUFDcEQsYUFBYSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQ2pDLElBQUksQ0FBQyxRQUE2QixDQUFDLGlCQUFpQixDQUN0RCxDQUFDO1FBQ0osQ0FBQztRQUNELG1HQUFtRzthQUM5RixJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsV0FBVyxHQUFHLCtCQUErQixDQUMzQyxJQUFJLENBQUMsSUFBSSxFQUNSLElBQUksQ0FBQyxRQUE2QixDQUFDLGlCQUFpQixFQUNyRCxDQUFDLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFDbkMsSUFBSSxDQUFDLFFBQTZCLENBQUMsaUJBQWlCLENBQ3RELENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVCLG1HQUFtRztZQUNuRyxzR0FBc0c7WUFDdEcsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEQsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FDMUIsQ0FBQyxDQUFDLEVBQUUsQ0FDRixDQUFDLENBQUMsc0JBQXNCLEtBQUssQ0FBQztnQkFDOUIsQ0FBQyxDQUFDLHNCQUFzQixLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQ3hELENBQUMsQ0FBQyxzQkFBc0IsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQzNELENBQUM7WUFFRixJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixXQUFXLENBQUMsc0JBQXNCO29CQUMvQixJQUFJLENBQUMsUUFBNkIsQ0FBQywyQkFBMkI7d0JBQy9ELEdBQUc7NkJBQ0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBQzs2QkFDOUIsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqRSxDQUFDO1FBQ0gsQ0FBQztRQUVELDRFQUE0RTtRQUU1RSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEUsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFHLElBQUksQ0FBQyxRQUE2QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUNoQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFbkUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsR0FBRyxFQUFFLENBQUM7WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUVELDZDQUE2QztRQUM3Qyx3RkFBd0Y7UUFDeEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFeEIsMkNBQTJDO1FBQzNDLElBQ0UsSUFBSSxDQUFDLFFBQVE7WUFDYixDQUFFLElBQUksQ0FBQyxVQUE0QixDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxVQUE0QixDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUMzRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUcsSUFBSSxDQUFDLFFBQTZCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFFLElBQUksQ0FBQyxRQUE2QixDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQ3pGLGFBQWEsQ0FDZCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFckIsc0ZBQXNGO1FBQ3RGLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ2pDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUNKLElBQTJFLEVBQzNFLFNBQWlCO1FBRWpCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRXpDLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUMsQ0FBQzthQUFNLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDOUMsQ0FBQzthQUFNLElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDakQsQ0FBQzthQUFNLElBQUksSUFBSSxLQUFLLGVBQWUsRUFBRSxDQUFDO1lBQ3BDLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNsRSxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQy9CLHVGQUF1RjtZQUN2RixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7aUlBL3NCVSxRQUFRLDRIQWdLVCx5QkFBeUI7cUhBaEt4QixRQUFRLGdOQThEQyxnQkFBZ0IscURBR2hCLGdCQUFnQixzQ0FpQmhCLGdCQUFnQiw0WUM5S3RDLDBvQkFjQTs7MkZEOEVhLFFBQVE7a0JBWnBCLFNBQVM7K0JBQ0UsV0FBVyxZQUNYLFVBQVUsUUFDZDt3QkFDSixLQUFLLEVBQUUsV0FBVztxQkFDbkIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxjQUduQyxJQUFJOzswQkFpS2IsUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyx5QkFBeUI7eUNBL0oxQixLQUFLO3NCQUFiLEtBQUs7Z0JBSUYsU0FBUztzQkFEWixLQUFLO2dCQW1CRixJQUFJO3NCQURQLEtBQUs7Z0JBbUJGLFVBQVU7c0JBRGIsS0FBSztnQkFhRixVQUFVO3NCQURiLEtBQUs7Z0JBVWtDLFlBQVk7c0JBQW5ELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSWxDLGFBQWE7c0JBRGhCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBa0JsQyxRQUFRO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBZWxDLEdBQUc7c0JBRE4sS0FBSztnQkFnQkYsc0JBQXNCO3NCQUR6QixLQUFLO2dCQVVJLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUcsT0FBTztzQkFBaEIsTUFBTTtnQkFFRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBTUgsYUFBYTtzQkFEaEIsTUFBTTtnQkFvQjRCLFNBQVM7c0JBQTNDLFlBQVk7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpYmVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIE10eFNwbGl0QXJlYSxcbiAgTXR4U3BsaXRBcmVhU25hcHNob3QsXG4gIE10eFNwbGl0RGVmYXVsdE9wdGlvbnMsXG4gIE10eFNwbGl0T3V0cHV0QXJlYVNpemVzLFxuICBNdHhTcGxpdE91dHB1dERhdGEsXG4gIE10eFNwbGl0UG9pbnQsXG4gIE10eFNwbGl0U25hcHNob3QsXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNdHhTcGxpdFBhbmUgfSBmcm9tICcuL3NwbGl0LXBhbmUnO1xuaW1wb3J0IHtcbiAgZ2V0QXJlYU1heFNpemUsXG4gIGdldEFyZWFNaW5TaXplLFxuICBnZXRFbGVtZW50UGl4ZWxTaXplLFxuICBnZXRHdXR0ZXJTaWRlQWJzb3JwdGlvbkNhcGFjaXR5LFxuICBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyLFxuICBnZXRQb2ludEZyb21FdmVudCxcbiAgaXNVc2VyU2l6ZXNWYWxpZCxcbiAgdXBkYXRlQXJlYVNpemUsXG59IGZyb20gJy4vdXRpbHMnO1xuXG4vKiogSW5qZWN0aW9uIHRva2VuIHRoYXQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBkZWZhdWx0IHNwbGl0IG9wdGlvbnMuICovXG5leHBvcnQgY29uc3QgTVRYX1NQTElUX0RFRkFVTFRfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxNdHhTcGxpdERlZmF1bHRPcHRpb25zPihcbiAgJ210eC1zcGxpdC1kZWZhdWx0LW9wdGlvbnMnXG4pO1xuXG4vKipcbiAqIG10eC1zcGxpdFxuICpcbiAqXG4gKiAgUEVSQ0VOVCBNT0RFIChbdW5pdF09XCIncGVyY2VudCdcIilcbiAqICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXG4gKiB8ICAgICAgIEEgICAgICAgW2cxXSAgICAgICBCICAgICAgIFtnMl0gICAgICAgQyAgICAgICBbZzNdICAgICAgIEQgICAgICAgW2c0XSAgICAgICBFICAgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCAgICAgICAyMCAgICAgICAgICAgICAgICAgMzAgICAgICAgICAgICAgICAgIDIwICAgICAgICAgICAgICAgICAxNSAgICAgICAgICAgICAgICAgMTUgICAgICB8IDwtLSBbc2l6ZV09XCJ4XCJcbiAqIHwgICAgICAgICAgICAgICAxMHB4ICAgICAgICAgICAgICAgMTBweCAgICAgICAgICAgICAgIDEwcHggICAgICAgICAgICAgICAxMHB4ICAgICAgICAgICAgICAgfCA8LS0gW2d1dHRlclNpemVdPVwiMTBcIlxuICogfGNhbGMoMjAlIC0gOHB4KSAgICBjYWxjKDMwJSAtIDEycHgpICAgY2FsYygyMCUgLSA4cHgpICAgIGNhbGMoMTUlIC0gNnB4KSAgICBjYWxjKDE1JSAtIDZweCl8IDwtLSBDU1MgZmxleC1iYXNpcyBwcm9wZXJ0eSAod2l0aCBmbGV4LWdyb3cmc2hyaW5rIGF0IDApXG4gKiB8ICAgICAxNTJweCAgICAgICAgICAgICAgMjI4cHggICAgICAgICAgICAgIDE1MnB4ICAgICAgICAgICAgICAxMTRweCAgICAgICAgICAgICAgMTE0cHggICAgIHwgPC0tIGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoXG4gKiB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3xcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODAwcHggICAgICAgICA8LS0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGhcbiAqICBmbGV4LWJhc2lzID0gY2FsYyggeyBhcmVhLnNpemUgfSUgLSB7IGFyZWEuc2l6ZS8xMDAgKiBuYkd1dHRlcipndXR0ZXJTaXplIH1weCApO1xuICpcbiAqXG4gKiAgUElYRUwgTU9ERSAoW3VuaXRdPVwiJ3BpeGVsJ1wiKVxuICogIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19cbiAqIHwgICAgICAgQSAgICAgICBbZzFdICAgICAgIEIgICAgICAgW2cyXSAgICAgICBDICAgICAgIFtnM10gICAgICAgRCAgICAgICBbZzRdICAgICAgIEUgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICAgICAgMTAwICAgICAgICAgICAgICAgIDI1MCAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgMTUwICAgICAgICAgICAgICAgIDEwMCAgICAgIHwgPC0tIFtzaXplXT1cInlcIlxuICogfCAgICAgICAgICAgICAgIDEwcHggICAgICAgICAgICAgICAxMHB4ICAgICAgICAgICAgICAgMTBweCAgICAgICAgICAgICAgIDEwcHggICAgICAgICAgICAgICB8IDwtLSBbZ3V0dGVyU2l6ZV09XCIxMFwiXG4gKiB8ICAgMCAwIDEwMHB4ICAgICAgICAgIDAgMCAyNTBweCAgICAgICAgICAgMSAxIGF1dG8gICAgICAgICAgMCAwIDE1MHB4ICAgICAgICAgIDAgMCAxMDBweCAgIHwgPC0tIENTUyBmbGV4IHByb3BlcnR5IChmbGV4LWdyb3cvZmxleC1zaHJpbmsvZmxleC1iYXNpcylcbiAqIHwgICAgIDEwMHB4ICAgICAgICAgICAgICAyNTBweCAgICAgICAgICAgICAgMjAwcHggICAgICAgICAgICAgIDE1MHB4ICAgICAgICAgICAgICAxMDBweCAgICAgfCA8LS0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGhcbiAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MDBweCAgICAgICAgIDwtLSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aFxuICpcbiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdHgtc3BsaXQnLFxuICBleHBvcnRBczogJ210eFNwbGl0JyxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnbXR4LXNwbGl0JyxcbiAgfSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0eWxlVXJsOiAnLi9zcGxpdC5zY3NzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NwbGl0Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBNdHhTcGxpdCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGNvbG9yOiBUaGVtZVBhbGV0dGU7XG5cbiAgLyoqIFRoZSBzcGxpdCBkaXJlY3Rpb24uICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXJlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RpcmVjdGlvbjtcbiAgfVxuICBzZXQgZGlyZWN0aW9uKHY6ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcpIHtcbiAgICB0aGlzLl9kaXJlY3Rpb24gPSB2ID09PSAndmVydGljYWwnID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcblxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBgbXR4LXNwbGl0LSR7dGhpcy5fZGlyZWN0aW9ufWApO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoXG4gICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBgbXR4LXNwbGl0LSR7dGhpcy5fZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gJ2hvcml6b250YWwnIDogJ3ZlcnRpY2FsJ31gXG4gICAgKTtcblxuICAgIHRoaXMuYnVpbGQoZmFsc2UsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIF9kaXJlY3Rpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAnaG9yaXpvbnRhbCc7XG5cbiAgLyoqIFRoZSB1bml0IHlvdSB3YW50IHRvIHNwZWNpZnkgYXJlYSBzaXplcy4gKi9cbiAgQElucHV0KClcbiAgZ2V0IHVuaXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VuaXQ7XG4gIH1cbiAgc2V0IHVuaXQodjogJ3BlcmNlbnQnIHwgJ3BpeGVsJykge1xuICAgIHRoaXMuX3VuaXQgPSB2ID09PSAncGl4ZWwnID8gJ3BpeGVsJyA6ICdwZXJjZW50JztcblxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBgbXR4LXNwbGl0LSR7dGhpcy5fdW5pdH1gKTtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxuICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgYG10eC1zcGxpdC0ke3RoaXMuX3VuaXQgPT09ICdwaXhlbCcgPyAncGVyY2VudCcgOiAncGl4ZWwnfWBcbiAgICApO1xuXG4gICAgdGhpcy5idWlsZChmYWxzZSwgdHJ1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfdW5pdDogJ3BlcmNlbnQnIHwgJ3BpeGVsJyA9ICdwZXJjZW50JztcblxuICAvKiogR3V0dGVycydzIHNpemUgKGRyYWdnaW5nIGVsZW1lbnRzKSBpbiBwaXhlbHMuICovXG4gIEBJbnB1dCgpXG4gIGdldCBndXR0ZXJTaXplKCkge1xuICAgIHJldHVybiB0aGlzLl9ndXR0ZXJTaXplO1xuICB9XG4gIHNldCBndXR0ZXJTaXplKHY6IG51bWJlcikge1xuICAgIHRoaXMuX2d1dHRlclNpemUgPSBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyKHYsIDQpO1xuXG4gICAgdGhpcy5idWlsZChmYWxzZSwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgX2d1dHRlclNpemUgPSA0O1xuXG4gIC8qKiBHdXR0ZXIgc3RlcCB3aGlsZSBtb3ZpbmcgaW4gcGl4ZWxzLiAqL1xuICBASW5wdXQoKVxuICBnZXQgZ3V0dGVyU3RlcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ3V0dGVyU3RlcDtcbiAgfVxuICBzZXQgZ3V0dGVyU3RlcCh2OiBudW1iZXIpIHtcbiAgICB0aGlzLl9ndXR0ZXJTdGVwID0gZ2V0SW5wdXRQb3NpdGl2ZU51bWJlcih2LCAxKTtcbiAgfVxuICBwcml2YXRlIF9ndXR0ZXJTdGVwID0gMTtcblxuICAvKiogU2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gbGltaXQgZ3V0dGVyIG1vdmUgdG8gYWRqYWNlbnQgYXJlYXMgb25seS4gKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJlc3RyaWN0TW92ZSA9IGZhbHNlO1xuXG4gIC8qKiBBZGQgdHJhbnNpdGlvbiB3aGVuIHRvZ2dsaW5nIHZpc2liaWxpdHkgdXNpbmcgYHZpc2libGVgIG9yIGBzaXplYCBjaGFuZ2VzLiAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgZ2V0IHVzZVRyYW5zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZVRyYW5zaXRpb247XG4gIH1cbiAgc2V0IHVzZVRyYW5zaXRpb24odjogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl91c2VUcmFuc2l0aW9uKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ210eC1zcGxpdC10cmFuc2l0aW9uJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnbXR4LXNwbGl0LXRyYW5zaXRpb24nKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfdXNlVHJhbnNpdGlvbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlIHRoZSBkcmFnZ2luZyBmZWF0dXJlIChyZW1vdmUgY3Vyc29yL2ltYWdlIG9uIGd1dHRlcnMpLlxuICAgKiBgZ3V0dGVyQ2xpY2tgL2BndXR0ZXJEYmxDbGlja2Agc3RpbGwgZW1pdHMuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodjogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdtdHgtc3BsaXQtZGlzYWJsZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdtdHgtc3BsaXQtZGlzYWJsZWQnKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKiogSW5kaWNhdGVzIHRoZSBkaXJlY3Rpb25hbGl0eSBvZiB0aGUgYXJlYXMuICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RpcjtcbiAgfVxuICBzZXQgZGlyKHY6ICdsdHInIHwgJ3J0bCcpIHtcbiAgICB0aGlzLl9kaXIgPSB2ID09PSAncnRsJyA/ICdydGwnIDogJ2x0cic7XG5cbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdkaXInLCB0aGlzLl9kaXIpO1xuICB9XG4gIHByaXZhdGUgX2RpcjogJ2x0cicgfCAncnRsJyA9ICdsdHInO1xuXG4gIC8qKlxuICAgKiBNaWxsaXNlY29uZHMgdG8gZGV0ZWN0IGEgZG91YmxlIGNsaWNrIG9uIGEgZ3V0dGVyLiBTZXQgaXQgYXJvdW5kIDMwMC01MDBtcyBpZlxuICAgKiB5b3Ugd2FudCB0byB1c2UgYGd1dHRlckRibENsaWNrYCBldmVudC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBndXR0ZXJEYmxDbGlja0R1cmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9ndXR0ZXJEYmxDbGlja0R1cmF0aW9uO1xuICB9XG4gIHNldCBndXR0ZXJEYmxDbGlja0R1cmF0aW9uKHY6IG51bWJlcikge1xuICAgIHRoaXMuX2d1dHRlckRibENsaWNrRHVyYXRpb24gPSBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyKHYsIDApO1xuICB9XG4gIHByaXZhdGUgX2d1dHRlckRibENsaWNrRHVyYXRpb24gPSAwO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZHJhZyBzdGFydHMuICovXG4gIEBPdXRwdXQoKSBkcmFnU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPE10eFNwbGl0T3V0cHV0RGF0YT4oZmFsc2UpO1xuICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWcgZW5kcy4gKi9cbiAgQE91dHB1dCgpIGRyYWdFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPE10eFNwbGl0T3V0cHV0RGF0YT4oZmFsc2UpO1xuICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHVzZXIgY2xpY2tzIG9uIGEgZ3V0dGVyLiAqL1xuICBAT3V0cHV0KCkgZ3V0dGVyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE10eFNwbGl0T3V0cHV0RGF0YT4oZmFsc2UpO1xuICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHVzZXIgZG91YmxlIGNsaWNrcyBvbiBhIGd1dHRlci4gKi9cbiAgQE91dHB1dCgpIGd1dHRlckRibENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNdHhTcGxpdE91dHB1dERhdGE+KGZhbHNlKTtcbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0cmFuc2l0aW9uIGVuZHMgKGNvdWxkIGJlIHRyaWdnZXJlZCBmcm9tIGB2aXNpYmxlYCBvciBgc2l6ZWAgY2hhbmdlcykuXG4gICAqIE9ubHkgaWYgYHVzZVRyYW5zaXRpb25gIGVxdWFscyB0cnVlLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGdldCB0cmFuc2l0aW9uRW5kKCk6IE9ic2VydmFibGU8TXR4U3BsaXRPdXRwdXRBcmVhU2l6ZXM+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlciA9PiAodGhpcy50cmFuc2l0aW9uRW5kU3Vic2NyaWJlciA9IHN1YnNjcmliZXIpKS5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lPGFueT4oMjApXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHRyYW5zaXRpb25FbmRTdWJzY3JpYmVyITogU3Vic2NyaWJlcjxNdHhTcGxpdE91dHB1dEFyZWFTaXplcz47XG5cbiAgcHJpdmF0ZSBkcmFnUHJvZ3Jlc3NTdWJqZWN0OiBTdWJqZWN0PE10eFNwbGl0T3V0cHV0RGF0YT4gPSBuZXcgU3ViamVjdCgpO1xuICBkcmFnUHJvZ3Jlc3MkOiBPYnNlcnZhYmxlPE10eFNwbGl0T3V0cHV0RGF0YT4gPSB0aGlzLmRyYWdQcm9ncmVzc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBpc0RyYWdnaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgZHJhZ0xpc3RlbmVyczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcbiAgcHJpdmF0ZSBzbmFwc2hvdDogTXR4U3BsaXRTbmFwc2hvdCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN0YXJ0UG9pbnQ6IE10eFNwbGl0UG9pbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBlbmRQb2ludDogTXR4U3BsaXRQb2ludCB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyByZWFkb25seSBkaXNwbGF5ZWRBcmVhczogQXJyYXk8TXR4U3BsaXRBcmVhPiA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGhpZGVkQXJlYXM6IEFycmF5PE10eFNwbGl0QXJlYT4gPSBbXTtcblxuICBAVmlld0NoaWxkcmVuKCdndXR0ZXJFbHMnKSBwcml2YXRlIGd1dHRlckVscyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChNVFhfU1BMSVRfREVGQVVMVF9PUFRJT05TKVxuICAgIHByb3RlY3RlZCBfZGVmYXVsdE9wdGlvbnM/OiBNdHhTcGxpdERlZmF1bHRPcHRpb25zXG4gICkge1xuICAgIHRoaXMuY29sb3IgPSBfZGVmYXVsdE9wdGlvbnM/LmNvbG9yID8/ICdwcmltYXJ5JztcbiAgICB0aGlzLmRpcmVjdGlvbiA9IF9kZWZhdWx0T3B0aW9ucz8uZGlyZWN0aW9uID8/ICdob3Jpem9udGFsJztcbiAgICB0aGlzLmRpciA9IF9kZWZhdWx0T3B0aW9ucz8uZGlyID8/ICdsdHInO1xuICAgIHRoaXMudW5pdCA9IF9kZWZhdWx0T3B0aW9ucz8udW5pdCA/PyAncGVyY2VudCc7XG4gICAgdGhpcy5ndXR0ZXJEYmxDbGlja0R1cmF0aW9uID0gX2RlZmF1bHRPcHRpb25zPy5ndXR0ZXJEYmxDbGlja0R1cmF0aW9uID8/IDA7XG4gICAgdGhpcy5ndXR0ZXJTaXplID0gX2RlZmF1bHRPcHRpb25zPy5ndXR0ZXJTaXplID8/IDQ7XG4gICAgdGhpcy5ndXR0ZXJTdGVwID0gX2RlZmF1bHRPcHRpb25zPy5ndXR0ZXJTdGVwID8/IDE7XG4gICAgdGhpcy5yZXN0cmljdE1vdmUgPSBfZGVmYXVsdE9wdGlvbnM/LnJlc3RyaWN0TW92ZSA/PyBmYWxzZTtcbiAgICB0aGlzLnVzZVRyYW5zaXRpb24gPSBfZGVmYXVsdE9wdGlvbnM/LnVzZVRyYW5zaXRpb24gPz8gZmFsc2U7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgLy8gVG8gYXZvaWQgdHJhbnNpdGlvbiBhdCBmaXJzdCByZW5kZXJpbmdcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdtdHgtc3BsaXQtaW5pdCcpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmJHdXR0ZXJzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQXJlYXMubGVuZ3RoID09PSAwID8gMCA6IHRoaXMuZGlzcGxheWVkQXJlYXMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIGFkZEFyZWEoY29tcG9uZW50OiBNdHhTcGxpdFBhbmUpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdBcmVhOiBNdHhTcGxpdEFyZWEgPSB7XG4gICAgICBjb21wb25lbnQsXG4gICAgICBvcmRlcjogMCxcbiAgICAgIHNpemU6IDAsXG4gICAgICBtaW5TaXplOiBudWxsLFxuICAgICAgbWF4U2l6ZTogbnVsbCxcbiAgICB9O1xuXG4gICAgaWYgKGNvbXBvbmVudC52aXNpYmxlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmRpc3BsYXllZEFyZWFzLnB1c2gobmV3QXJlYSk7XG5cbiAgICAgIHRoaXMuYnVpbGQodHJ1ZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGlkZWRBcmVhcy5wdXNoKG5ld0FyZWEpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUFyZWEoY29tcG9uZW50OiBNdHhTcGxpdFBhbmUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNwbGF5ZWRBcmVhcy5zb21lKGEgPT4gYS5jb21wb25lbnQgPT09IGNvbXBvbmVudCkpIHtcbiAgICAgIGNvbnN0IGFyZWEgPSB0aGlzLmRpc3BsYXllZEFyZWFzLmZpbmQoYSA9PiBhLmNvbXBvbmVudCA9PT0gY29tcG9uZW50KSBhcyBNdHhTcGxpdEFyZWE7XG4gICAgICB0aGlzLmRpc3BsYXllZEFyZWFzLnNwbGljZSh0aGlzLmRpc3BsYXllZEFyZWFzLmluZGV4T2YoYXJlYSksIDEpO1xuXG4gICAgICB0aGlzLmJ1aWxkKHRydWUsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5oaWRlZEFyZWFzLnNvbWUoYSA9PiBhLmNvbXBvbmVudCA9PT0gY29tcG9uZW50KSkge1xuICAgICAgY29uc3QgYXJlYSA9IHRoaXMuaGlkZWRBcmVhcy5maW5kKGEgPT4gYS5jb21wb25lbnQgPT09IGNvbXBvbmVudCkgYXMgTXR4U3BsaXRBcmVhO1xuICAgICAgdGhpcy5oaWRlZEFyZWFzLnNwbGljZSh0aGlzLmhpZGVkQXJlYXMuaW5kZXhPZihhcmVhKSwgMSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQXJlYShjb21wb25lbnQ6IE10eFNwbGl0UGFuZSwgcmVzZXRPcmRlcnM6IGJvb2xlYW4sIHJlc2V0U2l6ZXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoY29tcG9uZW50LnZpc2libGUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYnVpbGQocmVzZXRPcmRlcnMsIHJlc2V0U2l6ZXMpO1xuICAgIH1cbiAgfVxuXG4gIHNob3dBcmVhKGNvbXBvbmVudDogTXR4U3BsaXRQYW5lKTogdm9pZCB7XG4gICAgY29uc3QgYXJlYSA9IHRoaXMuaGlkZWRBcmVhcy5maW5kKGEgPT4gYS5jb21wb25lbnQgPT09IGNvbXBvbmVudCk7XG4gICAgaWYgKGFyZWEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFyZWFzID0gdGhpcy5oaWRlZEFyZWFzLnNwbGljZSh0aGlzLmhpZGVkQXJlYXMuaW5kZXhPZihhcmVhKSwgMSk7XG4gICAgdGhpcy5kaXNwbGF5ZWRBcmVhcy5wdXNoKC4uLmFyZWFzKTtcblxuICAgIHRoaXMuYnVpbGQodHJ1ZSwgdHJ1ZSk7XG4gIH1cblxuICBoaWRlQXJlYShjb21wOiBNdHhTcGxpdFBhbmUpOiB2b2lkIHtcbiAgICBjb25zdCBhcmVhID0gdGhpcy5kaXNwbGF5ZWRBcmVhcy5maW5kKGEgPT4gYS5jb21wb25lbnQgPT09IGNvbXApO1xuICAgIGlmIChhcmVhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcmVhcyA9IHRoaXMuZGlzcGxheWVkQXJlYXMuc3BsaWNlKHRoaXMuZGlzcGxheWVkQXJlYXMuaW5kZXhPZihhcmVhKSwgMSk7XG4gICAgYXJlYXMuZm9yRWFjaChfYXJlYSA9PiB7XG4gICAgICBfYXJlYS5vcmRlciA9IDA7XG4gICAgICBfYXJlYS5zaXplID0gMDtcbiAgICB9KTtcbiAgICB0aGlzLmhpZGVkQXJlYXMucHVzaCguLi5hcmVhcyk7XG5cbiAgICB0aGlzLmJ1aWxkKHRydWUsIHRydWUpO1xuICB9XG5cbiAgZ2V0VmlzaWJsZUFyZWFTaXplcygpOiBNdHhTcGxpdE91dHB1dEFyZWFTaXplcyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkQXJlYXMubWFwKGEgPT4gKGEuc2l6ZSA9PT0gbnVsbCA/ICcqJyA6IGEuc2l6ZSkpO1xuICB9XG5cbiAgc2V0VmlzaWJsZUFyZWFTaXplcyhzaXplczogTXR4U3BsaXRPdXRwdXRBcmVhU2l6ZXMpOiBib29sZWFuIHtcbiAgICBpZiAoc2l6ZXMubGVuZ3RoICE9PSB0aGlzLmRpc3BsYXllZEFyZWFzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdGVkU2l6ZXMgPSBzaXplcy5tYXAocyA9PiBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyKHMsIG51bGwpKSBhcyBudW1iZXJbXTtcbiAgICBjb25zdCBpc1ZhbGlkID0gaXNVc2VyU2l6ZXNWYWxpZCh0aGlzLnVuaXQsIGZvcm1hdGVkU2l6ZXMpO1xuXG4gICAgaWYgKGlzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5kaXNwbGF5ZWRBcmVhcy5mb3JFYWNoKChhcmVhLCBpKSA9PiAoYXJlYS5jb21wb25lbnQuc2l6ZSA9IGZvcm1hdGVkU2l6ZXNbaV0pKTtcblxuICAgIHRoaXMuYnVpbGQoZmFsc2UsIHRydWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZChyZXNldE9yZGVyczogYm9vbGVhbiwgcmVzZXRTaXplczogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc3RvcERyYWdnaW5nKCk7XG5cbiAgICAvLyDCpCBBUkVBUyBPUkRFUlxuXG4gICAgaWYgKHJlc2V0T3JkZXJzID09PSB0cnVlKSB7XG4gICAgICAvLyBJZiB1c2VyIHByb3ZpZGVkICdvcmRlcicgZm9yIGVhY2ggYXJlYSwgdXNlIGl0IHRvIHNvcnQgdGhlbS5cbiAgICAgIGlmICh0aGlzLmRpc3BsYXllZEFyZWFzLmV2ZXJ5KGEgPT4gYS5jb21wb25lbnQub3JkZXIgIT09IG51bGwpKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkQXJlYXMuc29ydChcbiAgICAgICAgICAoYSwgYikgPT4gKGEuY29tcG9uZW50Lm9yZGVyIGFzIG51bWJlcikgLSAoYi5jb21wb25lbnQub3JkZXIgYXMgbnVtYmVyKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGVuIHNldCByZWFsIG9yZGVyIHdpdGggbXVsdGlwbGVzIG9mIDIsIG51bWJlcnMgYmV0d2VlbiB3aWxsIGJlIHVzZWQgYnkgZ3V0dGVycy5cbiAgICAgIHRoaXMuZGlzcGxheWVkQXJlYXMuZm9yRWFjaCgoYXJlYSwgaSkgPT4ge1xuICAgICAgICBhcmVhLm9yZGVyID0gaSAqIDI7XG4gICAgICAgIGFyZWEuY29tcG9uZW50LnNldFN0eWxlT3JkZXIoYXJlYS5vcmRlcik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyDCpCBBUkVBUyBTSVpFXG5cbiAgICBpZiAocmVzZXRTaXplcyA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgdXNlVXNlclNpemVzID0gaXNVc2VyU2l6ZXNWYWxpZChcbiAgICAgICAgdGhpcy51bml0LFxuICAgICAgICB0aGlzLmRpc3BsYXllZEFyZWFzLm1hcChhID0+IGEuY29tcG9uZW50LnNpemUpIGFzIG51bWJlcltdXG4gICAgICApO1xuXG4gICAgICBzd2l0Y2ggKHRoaXMudW5pdCkge1xuICAgICAgICBjYXNlICdwZXJjZW50Jzoge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRTaXplID0gMTAwIC8gdGhpcy5kaXNwbGF5ZWRBcmVhcy5sZW5ndGg7XG5cbiAgICAgICAgICB0aGlzLmRpc3BsYXllZEFyZWFzLmZvckVhY2goYXJlYSA9PiB7XG4gICAgICAgICAgICBhcmVhLnNpemUgPSB1c2VVc2VyU2l6ZXMgPyAoYXJlYS5jb21wb25lbnQuc2l6ZSBhcyBudW1iZXIpIDogZGVmYXVsdFNpemU7XG4gICAgICAgICAgICBhcmVhLm1pblNpemUgPSBnZXRBcmVhTWluU2l6ZShhcmVhKTtcbiAgICAgICAgICAgIGFyZWEubWF4U2l6ZSA9IGdldEFyZWFNYXhTaXplKGFyZWEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ3BpeGVsJzoge1xuICAgICAgICAgIGlmICh1c2VVc2VyU2l6ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkQXJlYXMuZm9yRWFjaChhcmVhID0+IHtcbiAgICAgICAgICAgICAgYXJlYS5zaXplID0gYXJlYS5jb21wb25lbnQuc2l6ZTtcbiAgICAgICAgICAgICAgYXJlYS5taW5TaXplID0gZ2V0QXJlYU1pblNpemUoYXJlYSk7XG4gICAgICAgICAgICAgIGFyZWEubWF4U2l6ZSA9IGdldEFyZWFNYXhTaXplKGFyZWEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdpbGRjYXJkU2l6ZUFyZWFzID0gdGhpcy5kaXNwbGF5ZWRBcmVhcy5maWx0ZXIoYSA9PiBhLmNvbXBvbmVudC5zaXplID09PSBudWxsKTtcblxuICAgICAgICAgICAgLy8gTm8gd2lsZGNhcmQgYXJlYSA+IE5lZWQgdG8gc2VsZWN0IG9uZSBhcmJpdHJhcmlseSA+IGZpcnN0XG4gICAgICAgICAgICBpZiAod2lsZGNhcmRTaXplQXJlYXMubGVuZ3RoID09PSAwICYmIHRoaXMuZGlzcGxheWVkQXJlYXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLmRpc3BsYXllZEFyZWFzLmZvckVhY2goKGFyZWEsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBhcmVhLnNpemUgPSBpID09PSAwID8gbnVsbCA6IGFyZWEuY29tcG9uZW50LnNpemU7XG4gICAgICAgICAgICAgICAgYXJlYS5taW5TaXplID0gaSA9PT0gMCA/IG51bGwgOiBnZXRBcmVhTWluU2l6ZShhcmVhKTtcbiAgICAgICAgICAgICAgICBhcmVhLm1heFNpemUgPSBpID09PSAwID8gbnVsbCA6IGdldEFyZWFNYXhTaXplKGFyZWEpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE1vcmUgdGhhbiBvbmUgd2lsZGNhcmQgYXJlYSA+IE5lZWQgdG8ga2VlcCBvbmx5IG9uZSBhcmJpdHJhcmx5ID4gZmlyc3RcbiAgICAgICAgICAgIGVsc2UgaWYgKHdpbGRjYXJkU2l6ZUFyZWFzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgbGV0IGFscmVhZHlHb3RPbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRBcmVhcy5mb3JFYWNoKGFyZWEgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhcmVhLmNvbXBvbmVudC5zaXplID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoYWxyZWFkeUdvdE9uZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJlYS5zaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgYXJlYS5taW5TaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgYXJlYS5tYXhTaXplID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUdvdE9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcmVhLnNpemUgPSAxMDA7XG4gICAgICAgICAgICAgICAgICAgIGFyZWEubWluU2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGFyZWEubWF4U2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGFyZWEuc2l6ZSA9IGFyZWEuY29tcG9uZW50LnNpemU7XG4gICAgICAgICAgICAgICAgICBhcmVhLm1pblNpemUgPSBnZXRBcmVhTWluU2l6ZShhcmVhKTtcbiAgICAgICAgICAgICAgICAgIGFyZWEubWF4U2l6ZSA9IGdldEFyZWFNYXhTaXplKGFyZWEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoU3R5bGVTaXplcygpO1xuICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hTdHlsZVNpemVzKCk6IHZvaWQge1xuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBQRVJDRU5UIE1PREVcbiAgICBpZiAodGhpcy51bml0ID09PSAncGVyY2VudCcpIHtcbiAgICAgIC8vIE9ubHkgb25lIGFyZWEgPiBmbGV4LWJhc2lzIDEwMCVcbiAgICAgIGlmICh0aGlzLmRpc3BsYXllZEFyZWFzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0aGlzLmRpc3BsYXllZEFyZWFzWzBdLmNvbXBvbmVudC5zZXRTdHlsZUZsZXgoMCwgMCwgYDEwMCVgLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gTXVsdGlwbGUgYXJlYXMgPiB1c2UgZWFjaCBwZXJjZW50IGJhc2lzXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3VtR3V0dGVyU2l6ZSA9IHRoaXMuZ2V0TmJHdXR0ZXJzKCkgKiB0aGlzLmd1dHRlclNpemU7XG5cbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRBcmVhcy5mb3JFYWNoKGFyZWEgPT4ge1xuICAgICAgICAgIGFyZWEuY29tcG9uZW50LnNldFN0eWxlRmxleChcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgYGNhbGMoICR7YXJlYS5zaXplfSUgLSAkeygoYXJlYS5zaXplIGFzIG51bWJlcikgLyAxMDApICogc3VtR3V0dGVyU2l6ZX1weCApYCxcbiAgICAgICAgICAgIGFyZWEubWluU2l6ZSAhPT0gbnVsbCAmJiBhcmVhLm1pblNpemUgPT09IGFyZWEuc2l6ZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgIGFyZWEubWF4U2l6ZSAhPT0gbnVsbCAmJiBhcmVhLm1heFNpemUgPT09IGFyZWEuc2l6ZSA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUElYRUwgTU9ERVxuICAgIGVsc2UgaWYgKHRoaXMudW5pdCA9PT0gJ3BpeGVsJykge1xuICAgICAgdGhpcy5kaXNwbGF5ZWRBcmVhcy5mb3JFYWNoKGFyZWEgPT4ge1xuICAgICAgICAvLyBBcmVhIHdpdGggd2lsZGNhcmQgc2l6ZVxuICAgICAgICBpZiAoYXJlYS5zaXplID09PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGlzcGxheWVkQXJlYXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBhcmVhLmNvbXBvbmVudC5zZXRTdHlsZUZsZXgoMSwgMSwgYDEwMCVgLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcmVhLmNvbXBvbmVudC5zZXRTdHlsZUZsZXgoMSwgMSwgYGF1dG9gLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBBcmVhIHdpdGggcGl4ZWwgc2l6ZVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAvLyBPbmx5IG9uZSBhcmVhID4gZmxleC1iYXNpcyAxMDAlXG4gICAgICAgICAgaWYgKHRoaXMuZGlzcGxheWVkQXJlYXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBhcmVhLmNvbXBvbmVudC5zZXRTdHlsZUZsZXgoMCwgMCwgYDEwMCVgLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBNdWx0aXBsZSBhcmVhcyA+IHVzZSBlYWNoIHBpeGVsIGJhc2lzXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhcmVhLmNvbXBvbmVudC5zZXRTdHlsZUZsZXgoXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIGAke2FyZWEuc2l6ZX1weGAsXG4gICAgICAgICAgICAgIGFyZWEubWluU2l6ZSAhPT0gbnVsbCAmJiBhcmVhLm1pblNpemUgPT09IGFyZWEuc2l6ZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgYXJlYS5tYXhTaXplICE9PSBudWxsICYmIGFyZWEubWF4U2l6ZSA9PT0gYXJlYS5zaXplID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgX2NsaWNrVGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY2xpY2tHdXR0ZXIoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50LCBndXR0ZXJOdW06IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHRlbXBQb2ludCA9IGdldFBvaW50RnJvbUV2ZW50KGV2ZW50KSBhcyBNdHhTcGxpdFBvaW50O1xuXG4gICAgLy8gQmUgc3VyZSBtb3VzZXVwL3RvdWNoZW5kIGhhcHBlbmVkIGF0IHNhbWUgcG9pbnQgYXMgbW91c2Vkb3duL3RvdWNoc3RhcnQgdG8gdHJpZ2dlciBjbGljay9kYmxjbGlja1xuICAgIGlmICh0aGlzLnN0YXJ0UG9pbnQgJiYgdGhpcy5zdGFydFBvaW50LnggPT09IHRlbXBQb2ludC54ICYmIHRoaXMuc3RhcnRQb2ludC55ID09PSB0ZW1wUG9pbnQueSkge1xuICAgICAgLy8gSWYgdGltZW91dCBpbiBwcm9ncmVzcyBhbmQgbmV3IGNsaWNrID4gY2xlYXJUaW1lb3V0ICYgZGJsQ2xpY2tFdmVudFxuICAgICAgaWYgKHRoaXMuX2NsaWNrVGltZW91dCAhPT0gbnVsbCkge1xuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX2NsaWNrVGltZW91dCk7XG4gICAgICAgIHRoaXMuX2NsaWNrVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMubm90aWZ5KCdkYmxjbGljaycsIGd1dHRlck51bSk7XG4gICAgICAgIHRoaXMuc3RvcERyYWdnaW5nKCk7XG4gICAgICB9XG4gICAgICAvLyBFbHNlIHN0YXJ0IHRpbWVvdXQgdG8gY2FsbCBjbGlja0V2ZW50IGF0IGVuZFxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuX2NsaWNrVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9jbGlja1RpbWVvdXQgPSBudWxsO1xuICAgICAgICAgIHRoaXMubm90aWZ5KCdjbGljaycsIGd1dHRlck51bSk7XG4gICAgICAgICAgdGhpcy5zdG9wRHJhZ2dpbmcoKTtcbiAgICAgICAgfSwgdGhpcy5ndXR0ZXJEYmxDbGlja0R1cmF0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGFydERyYWdnaW5nKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCwgZ3V0dGVyT3JkZXI6IG51bWJlciwgZ3V0dGVyTnVtOiBudW1iZXIpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zdGFydFBvaW50ID0gZ2V0UG9pbnRGcm9tRXZlbnQoZXZlbnQpO1xuICAgIGlmICh0aGlzLnN0YXJ0UG9pbnQgPT09IG51bGwgfHwgdGhpcy5kaXNhYmxlZCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc25hcHNob3QgPSB7XG4gICAgICBndXR0ZXJOdW0sXG4gICAgICBsYXN0U3RlcHBlZE9mZnNldDogMCxcbiAgICAgIGFsbEFyZWFzU2l6ZVBpeGVsOlxuICAgICAgICBnZXRFbGVtZW50UGl4ZWxTaXplKHRoaXMuZWxSZWYsIHRoaXMuZGlyZWN0aW9uKSAtIHRoaXMuZ2V0TmJHdXR0ZXJzKCkgKiB0aGlzLmd1dHRlclNpemUsXG4gICAgICBhbGxJbnZvbHZlZEFyZWFzU2l6ZVBlcmNlbnQ6IDEwMCxcbiAgICAgIGFyZWFzQmVmb3JlR3V0dGVyOiBbXSxcbiAgICAgIGFyZWFzQWZ0ZXJHdXR0ZXI6IFtdLFxuICAgIH07XG5cbiAgICB0aGlzLmRpc3BsYXllZEFyZWFzLmZvckVhY2goYXJlYSA9PiB7XG4gICAgICBjb25zdCBhcmVhU25hcHNob3Q6IE10eFNwbGl0QXJlYVNuYXBzaG90ID0ge1xuICAgICAgICBhcmVhLFxuICAgICAgICBzaXplUGl4ZWxBdFN0YXJ0OiBnZXRFbGVtZW50UGl4ZWxTaXplKGFyZWEuY29tcG9uZW50LmVsUmVmLCB0aGlzLmRpcmVjdGlvbiksXG4gICAgICAgIHNpemVQZXJjZW50QXRTdGFydDogKHRoaXMudW5pdCA9PT0gJ3BlcmNlbnQnID8gYXJlYS5zaXplIDogLTEpIGFzIG51bWJlciwgLy8gSWYgcGl4ZWwgbW9kZSwgYW55d2F5LCB3aWxsIG5vdCBiZSB1c2VkLlxuICAgICAgfTtcblxuICAgICAgaWYgKGFyZWEub3JkZXIgPCBndXR0ZXJPcmRlcikge1xuICAgICAgICBpZiAodGhpcy5yZXN0cmljdE1vdmUgPT09IHRydWUpIHtcbiAgICAgICAgICAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5hcmVhc0JlZm9yZUd1dHRlciA9IFthcmVhU25hcHNob3RdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICh0aGlzLnNuYXBzaG90IGFzIE10eFNwbGl0U25hcHNob3QpLmFyZWFzQmVmb3JlR3V0dGVyLnVuc2hpZnQoYXJlYVNuYXBzaG90KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChhcmVhLm9yZGVyID4gZ3V0dGVyT3JkZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucmVzdHJpY3RNb3ZlID09PSB0cnVlKSB7XG4gICAgICAgICAgaWYgKCh0aGlzLnNuYXBzaG90IGFzIE10eFNwbGl0U25hcHNob3QpLmFyZWFzQWZ0ZXJHdXR0ZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5hcmVhc0FmdGVyR3V0dGVyID0gW2FyZWFTbmFwc2hvdF07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICh0aGlzLnNuYXBzaG90IGFzIE10eFNwbGl0U25hcHNob3QpLmFyZWFzQWZ0ZXJHdXR0ZXIucHVzaChhcmVhU25hcHNob3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnNuYXBzaG90LmFsbEludm9sdmVkQXJlYXNTaXplUGVyY2VudCA9IFtcbiAgICAgIC4uLnRoaXMuc25hcHNob3QuYXJlYXNCZWZvcmVHdXR0ZXIsXG4gICAgICAuLi50aGlzLnNuYXBzaG90LmFyZWFzQWZ0ZXJHdXR0ZXIsXG4gICAgXS5yZWR1Y2UoKHQsIGEpID0+IHQgKyBhLnNpemVQZXJjZW50QXRTdGFydCwgMCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnNuYXBzaG90LmFyZWFzQmVmb3JlR3V0dGVyLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgdGhpcy5zbmFwc2hvdC5hcmVhc0FmdGVyR3V0dGVyLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZHJhZ0xpc3RlbmVycy5wdXNoKFxuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ21vdXNldXAnLCB0aGlzLnN0b3BEcmFnZ2luZy5iaW5kKHRoaXMpKVxuICAgICk7XG4gICAgdGhpcy5kcmFnTGlzdGVuZXJzLnB1c2goXG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAndG91Y2hlbmQnLCB0aGlzLnN0b3BEcmFnZ2luZy5iaW5kKHRoaXMpKVxuICAgICk7XG4gICAgdGhpcy5kcmFnTGlzdGVuZXJzLnB1c2goXG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAndG91Y2hjYW5jZWwnLCB0aGlzLnN0b3BEcmFnZ2luZy5iaW5kKHRoaXMpKVxuICAgICk7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLmRyYWdMaXN0ZW5lcnMucHVzaChcbiAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ21vdXNlbW92ZScsIHRoaXMuZHJhZ0V2ZW50LmJpbmQodGhpcykpXG4gICAgICApO1xuICAgICAgdGhpcy5kcmFnTGlzdGVuZXJzLnB1c2goXG4gICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICd0b3VjaG1vdmUnLCB0aGlzLmRyYWdFdmVudC5iaW5kKHRoaXMpKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGlzcGxheWVkQXJlYXMuZm9yRWFjaChhcmVhID0+IGFyZWEuY29tcG9uZW50LmxvY2tFdmVudHMoKSk7XG5cbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnbXR4LWRyYWdnaW5nJyk7XG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgIHRoaXMuZ3V0dGVyRWxzLnRvQXJyYXkoKVt0aGlzLnNuYXBzaG90Lmd1dHRlck51bSAtIDFdLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnbXR4LWRyYWdnZWQnXG4gICAgKTtcblxuICAgIHRoaXMubm90aWZ5KCdzdGFydCcsIHRoaXMuc25hcHNob3QuZ3V0dGVyTnVtKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhZ0V2ZW50KGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5fY2xpY2tUaW1lb3V0ICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX2NsaWNrVGltZW91dCk7XG4gICAgICB0aGlzLl9jbGlja1RpbWVvdXQgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5lbmRQb2ludCA9IGdldFBvaW50RnJvbUV2ZW50KGV2ZW50KTtcbiAgICBpZiAodGhpcy5lbmRQb2ludCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBzdGVwcGVkT2Zmc2V0XG5cbiAgICBsZXQgb2Zmc2V0ID1cbiAgICAgIHRoaXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyAodGhpcy5zdGFydFBvaW50IGFzIE10eFNwbGl0UG9pbnQpLnggLSB0aGlzLmVuZFBvaW50LnhcbiAgICAgICAgOiAodGhpcy5zdGFydFBvaW50IGFzIE10eFNwbGl0UG9pbnQpLnkgLSB0aGlzLmVuZFBvaW50Lnk7XG4gICAgaWYgKHRoaXMuZGlyID09PSAncnRsJyAmJiB0aGlzLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICBvZmZzZXQgPSAtb2Zmc2V0O1xuICAgIH1cbiAgICBjb25zdCBzdGVwcGVkT2Zmc2V0ID0gTWF0aC5yb3VuZChvZmZzZXQgLyB0aGlzLmd1dHRlclN0ZXApICogdGhpcy5ndXR0ZXJTdGVwO1xuXG4gICAgaWYgKHN0ZXBwZWRPZmZzZXQgPT09ICh0aGlzLnNuYXBzaG90IGFzIE10eFNwbGl0U25hcHNob3QpLmxhc3RTdGVwcGVkT2Zmc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkubGFzdFN0ZXBwZWRPZmZzZXQgPSBzdGVwcGVkT2Zmc2V0O1xuXG4gICAgLy8gTmVlZCB0byBrbm93IGlmIGVhY2ggZ3V0dGVyIHNpZGUgYXJlYXMgY291bGQgcmVhY3RzIHRvIHN0ZXBwZWRPZmZzZXRcblxuICAgIGxldCBhcmVhc0JlZm9yZSA9IGdldEd1dHRlclNpZGVBYnNvcnB0aW9uQ2FwYWNpdHkoXG4gICAgICB0aGlzLnVuaXQsXG4gICAgICAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5hcmVhc0JlZm9yZUd1dHRlcixcbiAgICAgIC1zdGVwcGVkT2Zmc2V0LFxuICAgICAgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuYWxsQXJlYXNTaXplUGl4ZWxcbiAgICApO1xuICAgIGxldCBhcmVhc0FmdGVyID0gZ2V0R3V0dGVyU2lkZUFic29ycHRpb25DYXBhY2l0eShcbiAgICAgIHRoaXMudW5pdCxcbiAgICAgICh0aGlzLnNuYXBzaG90IGFzIE10eFNwbGl0U25hcHNob3QpLmFyZWFzQWZ0ZXJHdXR0ZXIsXG4gICAgICBzdGVwcGVkT2Zmc2V0LFxuICAgICAgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuYWxsQXJlYXNTaXplUGl4ZWxcbiAgICApO1xuXG4gICAgLy8gRWFjaCBndXR0ZXIgc2lkZSBhcmVhcyBjYW4ndCBhYnNvcmIgYWxsIG9mZnNldFxuICAgIGlmIChhcmVhc0JlZm9yZS5yZW1haW4gIT09IDAgJiYgYXJlYXNBZnRlci5yZW1haW4gIT09IDApIHtcbiAgICAgIGlmIChNYXRoLmFicyhhcmVhc0JlZm9yZS5yZW1haW4pID09PSBNYXRoLmFicyhhcmVhc0FmdGVyLnJlbWFpbikpIHtcbiAgICAgICAgLyoqICovXG4gICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGFyZWFzQmVmb3JlLnJlbWFpbikgPiBNYXRoLmFicyhhcmVhc0FmdGVyLnJlbWFpbikpIHtcbiAgICAgICAgYXJlYXNBZnRlciA9IGdldEd1dHRlclNpZGVBYnNvcnB0aW9uQ2FwYWNpdHkoXG4gICAgICAgICAgdGhpcy51bml0LFxuICAgICAgICAgICh0aGlzLnNuYXBzaG90IGFzIE10eFNwbGl0U25hcHNob3QpLmFyZWFzQWZ0ZXJHdXR0ZXIsXG4gICAgICAgICAgc3RlcHBlZE9mZnNldCArIGFyZWFzQmVmb3JlLnJlbWFpbixcbiAgICAgICAgICAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5hbGxBcmVhc1NpemVQaXhlbFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJlYXNCZWZvcmUgPSBnZXRHdXR0ZXJTaWRlQWJzb3JwdGlvbkNhcGFjaXR5KFxuICAgICAgICAgIHRoaXMudW5pdCxcbiAgICAgICAgICAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5hcmVhc0JlZm9yZUd1dHRlcixcbiAgICAgICAgICAtKHN0ZXBwZWRPZmZzZXQgLSBhcmVhc0FmdGVyLnJlbWFpbiksXG4gICAgICAgICAgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuYWxsQXJlYXNTaXplUGl4ZWxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQXJlYXMgYmVmb3JlIGd1dHRlciBjYW4ndCBhYnNvcmJzIGFsbCBvZmZzZXQgPiBuZWVkIHRvIHJlY2FsY3VsYXRlIHNpemVzIGZvciBhcmVhcyBhZnRlciBndXR0ZXIuXG4gICAgZWxzZSBpZiAoYXJlYXNCZWZvcmUucmVtYWluICE9PSAwKSB7XG4gICAgICBhcmVhc0FmdGVyID0gZ2V0R3V0dGVyU2lkZUFic29ycHRpb25DYXBhY2l0eShcbiAgICAgICAgdGhpcy51bml0LFxuICAgICAgICAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5hcmVhc0FmdGVyR3V0dGVyLFxuICAgICAgICBzdGVwcGVkT2Zmc2V0ICsgYXJlYXNCZWZvcmUucmVtYWluLFxuICAgICAgICAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5hbGxBcmVhc1NpemVQaXhlbFxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gQXJlYXMgYWZ0ZXIgZ3V0dGVyIGNhbid0IGFic29yYnMgYWxsIG9mZnNldCA+IG5lZWQgdG8gcmVjYWxjdWxhdGUgc2l6ZXMgZm9yIGFyZWFzIGJlZm9yZSBndXR0ZXIuXG4gICAgZWxzZSBpZiAoYXJlYXNBZnRlci5yZW1haW4gIT09IDApIHtcbiAgICAgIGFyZWFzQmVmb3JlID0gZ2V0R3V0dGVyU2lkZUFic29ycHRpb25DYXBhY2l0eShcbiAgICAgICAgdGhpcy51bml0LFxuICAgICAgICAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5hcmVhc0JlZm9yZUd1dHRlcixcbiAgICAgICAgLShzdGVwcGVkT2Zmc2V0IC0gYXJlYXNBZnRlci5yZW1haW4pLFxuICAgICAgICAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5hbGxBcmVhc1NpemVQaXhlbFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy51bml0ID09PSAncGVyY2VudCcpIHtcbiAgICAgIC8vIEhhY2sgYmVjYXVzZSBvZiBicm93c2VyIG1lc3NpbmcgdXAgd2l0aCBzaXplcyB1c2luZyBjYWxjKFglIC0gWXB4KSAtPiBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgLy8gSWYgbm90IHRoZXJlLCBwbGF5aW5nIHdpdGggZ3V0dGVycyBtYWtlcyB0b3RhbCBnb2luZyBkb3duIHRvIDk5Ljk5ODc1JSB0aGVuIDk5Ljk5Mjg2JSwgOTkuOTg5ODYlLC4uXG4gICAgICBjb25zdCBhbGwgPSBbLi4uYXJlYXNCZWZvcmUubGlzdCwgLi4uYXJlYXNBZnRlci5saXN0XTtcbiAgICAgIGNvbnN0IGFyZWFUb1Jlc2V0ID0gYWxsLmZpbmQoXG4gICAgICAgIGEgPT5cbiAgICAgICAgICBhLnBlcmNlbnRBZnRlckFic29ycHRpb24gIT09IDAgJiZcbiAgICAgICAgICBhLnBlcmNlbnRBZnRlckFic29ycHRpb24gIT09IGEuYXJlYVNuYXBzaG90LmFyZWEubWluU2l6ZSAmJlxuICAgICAgICAgIGEucGVyY2VudEFmdGVyQWJzb3JwdGlvbiAhPT0gYS5hcmVhU25hcHNob3QuYXJlYS5tYXhTaXplXG4gICAgICApO1xuXG4gICAgICBpZiAoYXJlYVRvUmVzZXQpIHtcbiAgICAgICAgYXJlYVRvUmVzZXQucGVyY2VudEFmdGVyQWJzb3JwdGlvbiA9XG4gICAgICAgICAgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuYWxsSW52b2x2ZWRBcmVhc1NpemVQZXJjZW50IC1cbiAgICAgICAgICBhbGxcbiAgICAgICAgICAgIC5maWx0ZXIoYSA9PiBhICE9PSBhcmVhVG9SZXNldClcbiAgICAgICAgICAgIC5yZWR1Y2UoKHRvdGFsLCBhKSA9PiB0b3RhbCArIGEucGVyY2VudEFmdGVyQWJzb3JwdGlvbiwgMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm93IHdlIGtub3cgYXJlYXMgY291bGQgYWJzb3JiIHN0ZXBwZWRPZmZzZXQsIHRpbWUgdG8gcmVhbGx5IHVwZGF0ZSBzaXplc1xuXG4gICAgYXJlYXNCZWZvcmUubGlzdC5mb3JFYWNoKGl0ZW0gPT4gdXBkYXRlQXJlYVNpemUodGhpcy51bml0LCBpdGVtKSk7XG4gICAgYXJlYXNBZnRlci5saXN0LmZvckVhY2goaXRlbSA9PiB1cGRhdGVBcmVhU2l6ZSh0aGlzLnVuaXQsIGl0ZW0pKTtcblxuICAgIHRoaXMucmVmcmVzaFN0eWxlU2l6ZXMoKTtcbiAgICB0aGlzLm5vdGlmeSgncHJvZ3Jlc3MnLCAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5ndXR0ZXJOdW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wRHJhZ2dpbmcoZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaXNwbGF5ZWRBcmVhcy5mb3JFYWNoKGFyZWEgPT4gYXJlYS5jb21wb25lbnQudW5sb2NrRXZlbnRzKCkpO1xuXG4gICAgd2hpbGUgKHRoaXMuZHJhZ0xpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmY3QgPSB0aGlzLmRyYWdMaXN0ZW5lcnMucG9wKCk7XG4gICAgICBpZiAoZmN0KSB7XG4gICAgICAgIGZjdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdhcm5pbmc6IEhhdmUgdG8gYmUgYmVmb3JlIFwibm90aWZ5KCdlbmQnKVwiXG4gICAgLy8gYmVjYXVzZSBcIm5vdGlmeSgnZW5kJylcIlwiIGNhbiBiZSBsaW5rZWQgdG8gXCJbc2l6ZV09J3gnXCIgPiBcImJ1aWxkKClcIiA+IFwic3RvcERyYWdnaW5nKClcIlxuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuXG4gICAgLy8gSWYgbW92ZWQgZnJvbSBzdGFydGluZyBwb2ludCwgbm90aWZ5IGVuZFxuICAgIGlmIChcbiAgICAgIHRoaXMuZW5kUG9pbnQgJiZcbiAgICAgICgodGhpcy5zdGFydFBvaW50IGFzIE10eFNwbGl0UG9pbnQpLnggIT09IHRoaXMuZW5kUG9pbnQueCB8fFxuICAgICAgICAodGhpcy5zdGFydFBvaW50IGFzIE10eFNwbGl0UG9pbnQpLnkgIT09IHRoaXMuZW5kUG9pbnQueSlcbiAgICApIHtcbiAgICAgIHRoaXMubm90aWZ5KCdlbmQnLCAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5ndXR0ZXJOdW0pO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnbXR4LWRyYWdnaW5nJyk7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhcbiAgICAgIHRoaXMuZ3V0dGVyRWxzLnRvQXJyYXkoKVsodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5ndXR0ZXJOdW0gLSAxXS5uYXRpdmVFbGVtZW50LFxuICAgICAgJ210eC1kcmFnZ2VkJ1xuICAgICk7XG4gICAgdGhpcy5zbmFwc2hvdCA9IG51bGw7XG5cbiAgICAvLyBOZWVkZWQgdG8gbGV0IChjbGljayk9XCJjbGlja0d1dHRlciguLi4pXCIgZXZlbnQgcnVuIGFuZCB2ZXJpZnkgaWYgbW91c2UgbW92ZWQgb3Igbm90XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhcnRQb2ludCA9IG51bGw7XG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBub3RpZnkoXG4gICAgdHlwZTogJ3N0YXJ0JyB8ICdwcm9ncmVzcycgfCAnZW5kJyB8ICdjbGljaycgfCAnZGJsY2xpY2snIHwgJ3RyYW5zaXRpb25FbmQnLFxuICAgIGd1dHRlck51bTogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHNpemVzID0gdGhpcy5nZXRWaXNpYmxlQXJlYVNpemVzKCk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3N0YXJ0Jykge1xuICAgICAgdGhpcy5kcmFnU3RhcnQuZW1pdCh7IGd1dHRlck51bSwgc2l6ZXMgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnZW5kJykge1xuICAgICAgdGhpcy5kcmFnRW5kLmVtaXQoeyBndXR0ZXJOdW0sIHNpemVzIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgdGhpcy5ndXR0ZXJDbGljay5lbWl0KHsgZ3V0dGVyTnVtLCBzaXplcyB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdkYmxjbGljaycpIHtcbiAgICAgIHRoaXMuZ3V0dGVyRGJsQ2xpY2suZW1pdCh7IGd1dHRlck51bSwgc2l6ZXMgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAndHJhbnNpdGlvbkVuZCcpIHtcbiAgICAgIGlmICh0aGlzLnRyYW5zaXRpb25FbmRTdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLnRyYW5zaXRpb25FbmRTdWJzY3JpYmVyLm5leHQoc2l6ZXMpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgIC8vIFN0YXkgb3V0c2lkZSB6b25lIHRvIGFsbG93IHVzZXJzIGRvIHdoYXQgdGhleSB3YW50IGFib3V0IGNoYW5nZSBkZXRlY3Rpb24gbWVjaGFuaXNtLlxuICAgICAgdGhpcy5kcmFnUHJvZ3Jlc3NTdWJqZWN0Lm5leHQoeyBndXR0ZXJOdW0sIHNpemVzIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcERyYWdnaW5nKCk7XG4gIH1cbn1cbiIsIjxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuQGZvciAoYXJlYSBvZiBkaXNwbGF5ZWRBcmVhczsgdHJhY2sgYXJlYTsgbGV0IGluZGV4ID0gJGluZGV4OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgQGlmICghbGFzdCkge1xyXG4gICAgPGRpdiAjZ3V0dGVyRWxzIGNsYXNzPVwibXR4LXNwbGl0LWd1dHRlclwiIFtjbGFzc109XCJjb2xvciA/ICdtYXQtJyArIGNvbG9yIDogJydcIlxyXG4gICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJndXR0ZXJTaXplXCJcclxuICAgICAgW3N0eWxlLm9yZGVyXT1cImluZGV4ICogMiArIDFcIlxyXG4gICAgICAobW91c2Vkb3duKT1cInN0YXJ0RHJhZ2dpbmcoJGV2ZW50LCBpbmRleCAqIDIgKyAxLCBpbmRleCArIDEpXCJcclxuICAgICAgKHRvdWNoc3RhcnQpPVwic3RhcnREcmFnZ2luZygkZXZlbnQsIGluZGV4ICogMiArIDEsIGluZGV4ICsgMSlcIlxyXG4gICAgICAobW91c2V1cCk9XCJjbGlja0d1dHRlcigkZXZlbnQsIGluZGV4ICsgMSlcIlxyXG4gICAgICAodG91Y2hlbmQpPVwiY2xpY2tHdXR0ZXIoJGV2ZW50LCBpbmRleCArIDEpXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdHgtc3BsaXQtZ3V0dGVyLWhhbmRsZVwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
634
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL3NwbGl0L3NwbGl0LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvZXh0ZW5zaW9ucy9zcGxpdC9zcGxpdC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUdOLFlBQVksRUFDWixpQkFBaUIsRUFDakIsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVk5QyxPQUFPLEVBQ0wsY0FBYyxFQUNkLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsK0JBQStCLEVBQy9CLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGNBQWMsR0FDZixNQUFNLFNBQVMsQ0FBQzs7QUFFakIseUVBQXlFO0FBQ3pFLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLElBQUksY0FBYyxDQUN6RCwyQkFBMkIsQ0FDNUIsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBY0gsTUFBTSxPQUFPLFFBQVE7SUFHbkIsMkJBQTJCO0lBQzNCLElBQ0ksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFBSSxTQUFTLENBQUMsQ0FBNEI7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUUvRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFB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bmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaGVtZVBhbGV0dGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmliZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgTXR4U3BsaXRBcmVhLFxuICBNdHhTcGxpdEFyZWFTbmFwc2hvdCxcbiAgTXR4U3BsaXREZWZhdWx0T3B0aW9ucyxcbiAgTXR4U3BsaXRPdXRwdXRBcmVhU2l6ZXMsXG4gIE10eFNwbGl0T3V0cHV0RGF0YSxcbiAgTXR4U3BsaXRQb2ludCxcbiAgTXR4U3BsaXRTbmFwc2hvdCxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE10eFNwbGl0UGFuZSB9IGZyb20gJy4vc3BsaXQtcGFuZSc7XG5pbXBvcnQge1xuICBnZXRBcmVhTWF4U2l6ZSxcbiAgZ2V0QXJlYU1pblNpemUsXG4gIGdldEVsZW1lbnRQaXhlbFNpemUsXG4gIGdldEd1dHRlclNpZGVBYnNvcnB0aW9uQ2FwYWNpdHksXG4gIGdldElucHV0UG9zaXRpdmVOdW1iZXIsXG4gIGdldFBvaW50RnJvbUV2ZW50LFxuICBpc1VzZXJTaXplc1ZhbGlkLFxuICB1cGRhdGVBcmVhU2l6ZSxcbn0gZnJvbSAnLi91dGlscyc7XG5cbi8qKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGRlZmF1bHQgc3BsaXQgb3B0aW9ucy4gKi9cbmV4cG9ydCBjb25zdCBNVFhfU1BMSVRfREVGQVVMVF9PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPE10eFNwbGl0RGVmYXVsdE9wdGlvbnM+KFxuICAnbXR4LXNwbGl0LWRlZmF1bHQtb3B0aW9ucydcbik7XG5cbi8qKlxuICogbXR4LXNwbGl0XG4gKlxuICpcbiAqICBQRVJDRU5UIE1PREUgKFt1bml0XT1cIidwZXJjZW50J1wiKVxuICogIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19cbiAqIHwgICAgICAgQSAgICAgICBbZzFdICAgICAgIEIgICAgICAgW2cyXSAgICAgICBDICAgICAgIFtnM10gICAgICAgRCAgICAgICBbZzRdICAgICAgIEUgICAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICAgICAgIDIwICAgICAgICAgICAgICAgICAzMCAgICAgICAgICAgICAgICAgMjAgICAgICAgICAgICAgICAgIDE1ICAgICAgICAgICAgICAgICAxNSAgICAgIHwgPC0tIFtzaXplXT1cInhcIlxuICogfCAgICAgICAgICAgICAgIDEwcHggICAgICAgICAgICAgICAxMHB4ICAgICAgICAgICAgICAgMTBweCAgICAgICAgICAgICAgIDEwcHggICAgICAgICAgICAgICB8IDwtLSBbZ3V0dGVyU2l6ZV09XCIxMFwiXG4gKiB8Y2FsYygyMCUgLSA4cHgpICAgIGNhbGMoMzAlIC0gMTJweCkgICBjYWxjKDIwJSAtIDhweCkgICAgY2FsYygxNSUgLSA2cHgpICAgIGNhbGMoMTUlIC0gNnB4KXwgPC0tIENTUyBmbGV4LWJhc2lzIHByb3BlcnR5ICh3aXRoIGZsZXgtZ3JvdyZzaHJpbmsgYXQgMClcbiAqIHwgICAgIDE1MnB4ICAgICAgICAgICAgICAyMjhweCAgICAgICAgICAgICAgMTUycHggICAgICAgICAgICAgIDExNHB4ICAgICAgICAgICAgICAxMTRweCAgICAgfCA8LS0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGhcbiAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4MDBweCAgICAgICAgIDwtLSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aFxuICogIGZsZXgtYmFzaXMgPSBjYWxjKCB7IGFyZWEuc2l6ZSB9JSAtIHsgYXJlYS5zaXplLzEwMCAqIG5iR3V0dGVyKmd1dHRlclNpemUgfXB4ICk7XG4gKlxuICpcbiAqICBQSVhFTCBNT0RFIChbdW5pdF09XCIncGl4ZWwnXCIpXG4gKiAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1xuICogfCAgICAgICBBICAgICAgIFtnMV0gICAgICAgQiAgICAgICBbZzJdICAgICAgIEMgICAgICAgW2czXSAgICAgICBEICAgICAgIFtnNF0gICAgICAgRSAgICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgICAgICAxMDAgICAgICAgICAgICAgICAgMjUwICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAxNTAgICAgICAgICAgICAgICAgMTAwICAgICAgfCA8LS0gW3NpemVdPVwieVwiXG4gKiB8ICAgICAgICAgICAgICAgMTBweCAgICAgICAgICAgICAgIDEwcHggICAgICAgICAgICAgICAxMHB4ICAgICAgICAgICAgICAgMTBweCAgICAgICAgICAgICAgIHwgPC0tIFtndXR0ZXJTaXplXT1cIjEwXCJcbiAqIHwgICAwIDAgMTAwcHggICAgICAgICAgMCAwIDI1MHB4ICAgICAgICAgICAxIDEgYXV0byAgICAgICAgICAwIDAgMTUwcHggICAgICAgICAgMCAwIDEwMHB4ICAgfCA8LS0gQ1NTIGZsZXggcHJvcGVydHkgKGZsZXgtZ3Jvdy9mbGV4LXNocmluay9mbGV4LWJhc2lzKVxuICogfCAgICAgMTAwcHggICAgICAgICAgICAgIDI1MHB4ICAgICAgICAgICAgICAyMDBweCAgICAgICAgICAgICAgMTUwcHggICAgICAgICAgICAgIDEwMHB4ICAgICB8IDwtLSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aFxuICogfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgwMHB4ICAgICAgICAgPC0tIGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoXG4gKlxuICovXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ210eC1zcGxpdCcsXG4gIGV4cG9ydEFzOiAnbXR4U3BsaXQnLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdtdHgtc3BsaXQnLFxuICB9LFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3R5bGVVcmw6ICcuL3NwbGl0LnNjc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3BsaXQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE10eFNwbGl0IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgY29sb3I6IFRoZW1lUGFsZXR0ZTtcblxuICAvKiogVGhlIHNwbGl0IGRpcmVjdGlvbi4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGRpcmVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlyZWN0aW9uO1xuICB9XG4gIHNldCBkaXJlY3Rpb24odjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJykge1xuICAgIHRoaXMuX2RpcmVjdGlvbiA9IHYgPT09ICd2ZXJ0aWNhbCcgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xuXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIGBtdHgtc3BsaXQtJHt0aGlzLl9kaXJlY3Rpb259YCk7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhcbiAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgIGBtdHgtc3BsaXQtJHt0aGlzLl9kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAnaG9yaXpvbnRhbCcgOiAndmVydGljYWwnfWBcbiAgICApO1xuXG4gICAgdGhpcy5idWlsZChmYWxzZSwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgX2RpcmVjdGlvbjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJyA9ICdob3Jpem9udGFsJztcblxuICAvKiogVGhlIHVuaXQgeW91IHdhbnQgdG8gc3BlY2lmeSBhcmVhIHNpemVzLiAqL1xuICBASW5wdXQoKVxuICBnZXQgdW5pdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdW5pdDtcbiAgfVxuICBzZXQgdW5pdCh2OiAncGVyY2VudCcgfCAncGl4ZWwnKSB7XG4gICAgdGhpcy5fdW5pdCA9IHYgPT09ICdwaXhlbCcgPyAncGl4ZWwnIDogJ3BlcmNlbnQnO1xuXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIGBtdHgtc3BsaXQtJHt0aGlzLl91bml0fWApO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoXG4gICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBgbXR4LXNwbGl0LSR7dGhpcy5fdW5pdCA9PT0gJ3BpeGVsJyA/ICdwZXJjZW50JyA6ICdwaXhlbCd9YFxuICAgICk7XG5cbiAgICB0aGlzLmJ1aWxkKGZhbHNlLCB0cnVlKTtcbiAgfVxuICBwcml2YXRlIF91bml0OiAncGVyY2VudCcgfCAncGl4ZWwnID0gJ3BlcmNlbnQnO1xuXG4gIC8qKiBHdXR0ZXJzJ3Mgc2l6ZSAoZHJhZ2dpbmcgZWxlbWVudHMpIGluIHBpeGVscy4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGd1dHRlclNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2d1dHRlclNpemU7XG4gIH1cbiAgc2V0IGd1dHRlclNpemUodjogbnVtYmVyKSB7XG4gICAgdGhpcy5fZ3V0dGVyU2l6ZSA9IGdldElucHV0UG9zaXRpdmVOdW1iZXIodiwgNCk7XG5cbiAgICB0aGlzLmJ1aWxkKGZhbHNlLCBmYWxzZSk7XG4gIH1cbiAgcHJpdmF0ZSBfZ3V0dGVyU2l6ZSA9IDQ7XG5cbiAgLyoqIEd1dHRlciBzdGVwIHdoaWxlIG1vdmluZyBpbiBwaXhlbHMuICovXG4gIEBJbnB1dCgpXG4gIGdldCBndXR0ZXJTdGVwKCkge1xuICAgIHJldHVybiB0aGlzLl9ndXR0ZXJTdGVwO1xuICB9XG4gIHNldCBndXR0ZXJTdGVwKHY6IG51bWJlcikge1xuICAgIHRoaXMuX2d1dHRlclN0ZXAgPSBnZXRJbnB1dFBvc2l0aXZlTnVtYmVyKHYsIDEpO1xuICB9XG4gIHByaXZhdGUgX2d1dHRlclN0ZXAgPSAxO1xuXG4gIC8qKiBTZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byBsaW1pdCBndXR0ZXIgbW92ZSB0byBhZGphY2VudCBhcmVhcyBvbmx5LiAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcmVzdHJpY3RNb3ZlID0gZmFsc2U7XG5cbiAgLyoqIEFkZCB0cmFuc2l0aW9uIHdoZW4gdG9nZ2xpbmcgdmlzaWJpbGl0eSB1c2luZyBgdmlzaWJsZWAgb3IgYHNpemVgIGNoYW5nZXMuICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBnZXQgdXNlVHJhbnNpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlVHJhbnNpdGlvbjtcbiAgfVxuICBzZXQgdXNlVHJhbnNpdGlvbih2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fdXNlVHJhbnNpdGlvbiA9IHY7XG5cbiAgICBpZiAodGhpcy5fdXNlVHJhbnNpdGlvbikge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdtdHgtc3BsaXQtdHJhbnNpdGlvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ210eC1zcGxpdC10cmFuc2l0aW9uJyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3VzZVRyYW5zaXRpb24gPSBmYWxzZTtcblxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgZHJhZ2dpbmcgZmVhdHVyZSAocmVtb3ZlIGN1cnNvci9pbWFnZSBvbiBndXR0ZXJzKS5cbiAgICogYGd1dHRlckNsaWNrYC9gZ3V0dGVyRGJsQ2xpY2tgIHN0aWxsIGVtaXRzLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHY7XG5cbiAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnbXR4LXNwbGl0LWRpc2FibGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnbXR4LXNwbGl0LWRpc2FibGVkJyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqIEluZGljYXRlcyB0aGUgZGlyZWN0aW9uYWxpdHkgb2YgdGhlIGFyZWFzLiAqL1xuICBASW5wdXQoKVxuICBnZXQgZGlyKCkge1xuICAgIHJldHVybiB0aGlzLl9kaXI7XG4gIH1cbiAgc2V0IGRpcih2OiAnbHRyJyB8ICdydGwnKSB7XG4gICAgdGhpcy5fZGlyID0gdiA9PT0gJ3J0bCcgPyAncnRsJyA6ICdsdHInO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnZGlyJywgdGhpcy5fZGlyKTtcbiAgfVxuICBwcml2YXRlIF9kaXI6ICdsdHInIHwgJ3J0bCcgPSAnbHRyJztcblxuICAvKipcbiAgICogTWlsbGlzZWNvbmRzIHRvIGRldGVjdCBhIGRvdWJsZSBjbGljayBvbiBhIGd1dHRlci4gU2V0IGl0IGFyb3VuZCAzMDAtNTAwbXMgaWZcbiAgICogeW91IHdhbnQgdG8gdXNlIGBndXR0ZXJEYmxDbGlja2AgZXZlbnQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZ3V0dGVyRGJsQ2xpY2tEdXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZ3V0dGVyRGJsQ2xpY2tEdXJhdGlvbjtcbiAgfVxuICBzZXQgZ3V0dGVyRGJsQ2xpY2tEdXJhdGlvbih2OiBudW1iZXIpIHtcbiAgICB0aGlzLl9ndXR0ZXJEYmxDbGlja0R1cmF0aW9uID0gZ2V0SW5wdXRQb3NpdGl2ZU51bWJlcih2LCAwKTtcbiAgfVxuICBwcml2YXRlIF9ndXR0ZXJEYmxDbGlja0R1cmF0aW9uID0gMDtcblxuICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRyYWcgc3RhcnRzLiAqL1xuICBAT3V0cHV0KCkgZHJhZ1N0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxNdHhTcGxpdE91dHB1dERhdGE+KGZhbHNlKTtcbiAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkcmFnIGVuZHMuICovXG4gIEBPdXRwdXQoKSBkcmFnRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxNdHhTcGxpdE91dHB1dERhdGE+KGZhbHNlKTtcbiAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBvbiBhIGd1dHRlci4gKi9cbiAgQE91dHB1dCgpIGd1dHRlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNdHhTcGxpdE91dHB1dERhdGE+KGZhbHNlKTtcbiAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB1c2VyIGRvdWJsZSBjbGlja3Mgb24gYSBndXR0ZXIuICovXG4gIEBPdXRwdXQoKSBndXR0ZXJEYmxDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8TXR4U3BsaXRPdXRwdXREYXRhPihmYWxzZSk7XG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdHJhbnNpdGlvbiBlbmRzIChjb3VsZCBiZSB0cmlnZ2VyZWQgZnJvbSBgdmlzaWJsZWAgb3IgYHNpemVgIGNoYW5nZXMpLlxuICAgKiBPbmx5IGlmIGB1c2VUcmFuc2l0aW9uYCBlcXVhbHMgdHJ1ZS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBnZXQgdHJhbnNpdGlvbkVuZCgpOiBPYnNlcnZhYmxlPE10eFNwbGl0T3V0cHV0QXJlYVNpemVzPiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4gKHRoaXMudHJhbnNpdGlvbkVuZFN1YnNjcmliZXIgPSBzdWJzY3JpYmVyKSkucGlwZShcbiAgICAgIGRlYm91bmNlVGltZTxhbnk+KDIwKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSB0cmFuc2l0aW9uRW5kU3Vic2NyaWJlciE6IFN1YnNjcmliZXI8TXR4U3BsaXRPdXRwdXRBcmVhU2l6ZXM+O1xuXG4gIHByaXZhdGUgZHJhZ1Byb2dyZXNzU3ViamVjdDogU3ViamVjdDxNdHhTcGxpdE91dHB1dERhdGE+ID0gbmV3IFN1YmplY3QoKTtcbiAgZHJhZ1Byb2dyZXNzJDogT2JzZXJ2YWJsZTxNdHhTcGxpdE91dHB1dERhdGE+ID0gdGhpcy5kcmFnUHJvZ3Jlc3NTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBwcml2YXRlIGRyYWdMaXN0ZW5lcnM6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG4gIHByaXZhdGUgc25hcHNob3Q6IE10eFNwbGl0U25hcHNob3QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGFydFBvaW50OiBNdHhTcGxpdFBvaW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZW5kUG9pbnQ6IE10eFNwbGl0UG9pbnQgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgcmVhZG9ubHkgZGlzcGxheWVkQXJlYXM6IEFycmF5PE10eFNwbGl0QXJlYT4gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBoaWRlZEFyZWFzOiBBcnJheTxNdHhTcGxpdEFyZWE+ID0gW107XG5cbiAgQFZpZXdDaGlsZHJlbignZ3V0dGVyRWxzJykgcHJpdmF0ZSBndXR0ZXJFbHMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoTVRYX1NQTElUX0RFRkFVTFRfT1BUSU9OUylcbiAgICBwcm90ZWN0ZWQgX2RlZmF1bHRPcHRpb25zPzogTXR4U3BsaXREZWZhdWx0T3B0aW9uc1xuICApIHtcbiAgICB0aGlzLmNvbG9yID0gX2RlZmF1bHRPcHRpb25zPy5jb2xvciA/PyAncHJpbWFyeSc7XG4gICAgdGhpcy5kaXJlY3Rpb24gPSBfZGVmYXVsdE9wdGlvbnM/LmRpcmVjdGlvbiA/PyAnaG9yaXpvbnRhbCc7XG4gICAgdGhpcy5kaXIgPSBfZGVmYXVsdE9wdGlvbnM/LmRpciA/PyAnbHRyJztcbiAgICB0aGlzLnVuaXQgPSBfZGVmYXVsdE9wdGlvbnM/LnVuaXQgPz8gJ3BlcmNlbnQnO1xuICAgIHRoaXMuZ3V0dGVyRGJsQ2xpY2tEdXJhdGlvbiA9IF9kZWZhdWx0T3B0aW9ucz8uZ3V0dGVyRGJsQ2xpY2tEdXJhdGlvbiA/PyAwO1xuICAgIHRoaXMuZ3V0dGVyU2l6ZSA9IF9kZWZhdWx0T3B0aW9ucz8uZ3V0dGVyU2l6ZSA/PyA0O1xuICAgIHRoaXMuZ3V0dGVyU3RlcCA9IF9kZWZhdWx0T3B0aW9ucz8uZ3V0dGVyU3RlcCA/PyAxO1xuICAgIHRoaXMucmVzdHJpY3RNb3ZlID0gX2RlZmF1bHRPcHRpb25zPy5yZXN0cmljdE1vdmUgPz8gZmFsc2U7XG4gICAgdGhpcy51c2VUcmFuc2l0aW9uID0gX2RlZmF1bHRPcHRpb25zPy51c2VUcmFuc2l0aW9uID8/IGZhbHNlO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIC8vIFRvIGF2b2lkIHRyYW5zaXRpb24gYXQgZmlyc3QgcmVuZGVyaW5nXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnbXR4LXNwbGl0LWluaXQnKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE5iR3V0dGVycygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZEFyZWFzLmxlbmd0aCA9PT0gMCA/IDAgOiB0aGlzLmRpc3BsYXllZEFyZWFzLmxlbmd0aCAtIDE7XG4gIH1cblxuICBhZGRBcmVhKGNvbXBvbmVudDogTXR4U3BsaXRQYW5lKTogdm9pZCB7XG4gICAgY29uc3QgbmV3QXJlYTogTXR4U3BsaXRBcmVhID0ge1xuICAgICAgY29tcG9uZW50LFxuICAgICAgb3JkZXI6IDAsXG4gICAgICBzaXplOiAwLFxuICAgICAgbWluU2l6ZTogbnVsbCxcbiAgICAgIG1heFNpemU6IG51bGwsXG4gICAgfTtcblxuICAgIGlmIChjb21wb25lbnQudmlzaWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kaXNwbGF5ZWRBcmVhcy5wdXNoKG5ld0FyZWEpO1xuXG4gICAgICB0aGlzLmJ1aWxkKHRydWUsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGVkQXJlYXMucHVzaChuZXdBcmVhKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVBcmVhKGNvbXBvbmVudDogTXR4U3BsaXRQYW5lKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzcGxheWVkQXJlYXMuc29tZShhID0+IGEuY29tcG9uZW50ID09PSBjb21wb25lbnQpKSB7XG4gICAgICBjb25zdCBhcmVhID0gdGhpcy5kaXNwbGF5ZWRBcmVhcy5maW5kKGEgPT4gYS5jb21wb25lbnQgPT09IGNvbXBvbmVudCkgYXMgTXR4U3BsaXRBcmVhO1xuICAgICAgdGhpcy5kaXNwbGF5ZWRBcmVhcy5zcGxpY2UodGhpcy5kaXNwbGF5ZWRBcmVhcy5pbmRleE9mKGFyZWEpLCAxKTtcblxuICAgICAgdGhpcy5idWlsZCh0cnVlLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaGlkZWRBcmVhcy5zb21lKGEgPT4gYS5jb21wb25lbnQgPT09IGNvbXBvbmVudCkpIHtcbiAgICAgIGNvbnN0IGFyZWEgPSB0aGlzLmhpZGVkQXJlYXMuZmluZChhID0+IGEuY29tcG9uZW50ID09PSBjb21wb25lbnQpIGFzIE10eFNwbGl0QXJlYTtcbiAgICAgIHRoaXMuaGlkZWRBcmVhcy5zcGxpY2UodGhpcy5oaWRlZEFyZWFzLmluZGV4T2YoYXJlYSksIDEpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUFyZWEoY29tcG9uZW50OiBNdHhTcGxpdFBhbmUsIHJlc2V0T3JkZXJzOiBib29sZWFuLCByZXNldFNpemVzOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGNvbXBvbmVudC52aXNpYmxlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmJ1aWxkKHJlc2V0T3JkZXJzLCByZXNldFNpemVzKTtcbiAgICB9XG4gIH1cblxuICBzaG93QXJlYShjb21wb25lbnQ6IE10eFNwbGl0UGFuZSk6IHZvaWQge1xuICAgIGNvbnN0IGFyZWEgPSB0aGlzLmhpZGVkQXJlYXMuZmluZChhID0+IGEuY29tcG9uZW50ID09PSBjb21wb25lbnQpO1xuICAgIGlmIChhcmVhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhcmVhcyA9IHRoaXMuaGlkZWRBcmVhcy5zcGxpY2UodGhpcy5oaWRlZEFyZWFzLmluZGV4T2YoYXJlYSksIDEpO1xuICAgIHRoaXMuZGlzcGxheWVkQXJlYXMucHVzaCguLi5hcmVhcyk7XG5cbiAgICB0aGlzLmJ1aWxkKHRydWUsIHRydWUpO1xuICB9XG5cbiAgaGlkZUFyZWEoY29tcDogTXR4U3BsaXRQYW5lKTogdm9pZCB7XG4gICAgY29uc3QgYXJlYSA9IHRoaXMuZGlzcGxheWVkQXJlYXMuZmluZChhID0+IGEuY29tcG9uZW50ID09PSBjb21wKTtcbiAgICBpZiAoYXJlYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXJlYXMgPSB0aGlzLmRpc3BsYXllZEFyZWFzLnNwbGljZSh0aGlzLmRpc3BsYXllZEFyZWFzLmluZGV4T2YoYXJlYSksIDEpO1xuICAgIGFyZWFzLmZvckVhY2goX2FyZWEgPT4ge1xuICAgICAgX2FyZWEub3JkZXIgPSAwO1xuICAgICAgX2FyZWEuc2l6ZSA9IDA7XG4gICAgfSk7XG4gICAgdGhpcy5oaWRlZEFyZWFzLnB1c2goLi4uYXJlYXMpO1xuXG4gICAgdGhpcy5idWlsZCh0cnVlLCB0cnVlKTtcbiAgfVxuXG4gIGdldFZpc2libGVBcmVhU2l6ZXMoKTogTXR4U3BsaXRPdXRwdXRBcmVhU2l6ZXMge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZEFyZWFzLm1hcChhID0+IChhLnNpemUgPT09IG51bGwgPyAnKicgOiBhLnNpemUpKTtcbiAgfVxuXG4gIHNldFZpc2libGVBcmVhU2l6ZXMoc2l6ZXM6IE10eFNwbGl0T3V0cHV0QXJlYVNpemVzKTogYm9vbGVhbiB7XG4gICAgaWYgKHNpemVzLmxlbmd0aCAhPT0gdGhpcy5kaXNwbGF5ZWRBcmVhcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtYXRlZFNpemVzID0gc2l6ZXMubWFwKHMgPT4gZ2V0SW5wdXRQb3NpdGl2ZU51bWJlcihzLCBudWxsKSkgYXMgbnVtYmVyW107XG4gICAgY29uc3QgaXNWYWxpZCA9IGlzVXNlclNpemVzVmFsaWQodGhpcy51bml0LCBmb3JtYXRlZFNpemVzKTtcblxuICAgIGlmIChpc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheWVkQXJlYXMuZm9yRWFjaCgoYXJlYSwgaSkgPT4gKGFyZWEuY29tcG9uZW50LnNpemUgPSBmb3JtYXRlZFNpemVzW2ldKSk7XG5cbiAgICB0aGlzLmJ1aWxkKGZhbHNlLCB0cnVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGQocmVzZXRPcmRlcnM6IGJvb2xlYW4sIHJlc2V0U2l6ZXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BEcmFnZ2luZygpO1xuXG4gICAgLy8gwqQgQVJFQVMgT1JERVJcblxuICAgIGlmIChyZXNldE9yZGVycyA9PT0gdHJ1ZSkge1xuICAgICAgLy8gSWYgdXNlciBwcm92aWRlZCAnb3JkZXInIGZvciBlYWNoIGFyZWEsIHVzZSBpdCB0byBzb3J0IHRoZW0uXG4gICAgICBpZiAodGhpcy5kaXNwbGF5ZWRBcmVhcy5ldmVyeShhID0+IGEuY29tcG9uZW50Lm9yZGVyICE9PSBudWxsKSkge1xuICAgICAgICB0aGlzLmRpc3BsYXllZEFyZWFzLnNvcnQoXG4gICAgICAgICAgKGEsIGIpID0+IChhLmNvbXBvbmVudC5vcmRlciBhcyBudW1iZXIpIC0gKGIuY29tcG9uZW50Lm9yZGVyIGFzIG51bWJlcilcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlbiBzZXQgcmVhbCBvcmRlciB3aXRoIG11bHRpcGxlcyBvZiAyLCBudW1iZXJzIGJldHdlZW4gd2lsbCBiZSB1c2VkIGJ5IGd1dHRlcnMuXG4gICAgICB0aGlzLmRpc3BsYXllZEFyZWFzLmZvckVhY2goKGFyZWEsIGkpID0+IHtcbiAgICAgICAgYXJlYS5vcmRlciA9IGkgKiAyO1xuICAgICAgICBhcmVhLmNvbXBvbmVudC5zZXRTdHlsZU9yZGVyKGFyZWEub3JkZXIpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gwqQgQVJFQVMgU0laRVxuXG4gICAgaWYgKHJlc2V0U2l6ZXMgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IHVzZVVzZXJTaXplcyA9IGlzVXNlclNpemVzVmFsaWQoXG4gICAgICAgIHRoaXMudW5pdCxcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRBcmVhcy5tYXAoYSA9PiBhLmNvbXBvbmVudC5zaXplKSBhcyBudW1iZXJbXVxuICAgICAgKTtcblxuICAgICAgc3dpdGNoICh0aGlzLnVuaXQpIHtcbiAgICAgICAgY2FzZSAncGVyY2VudCc6IHtcbiAgICAgICAgICBjb25zdCBkZWZhdWx0U2l6ZSA9IDEwMCAvIHRoaXMuZGlzcGxheWVkQXJlYXMubGVuZ3RoO1xuXG4gICAgICAgICAgdGhpcy5kaXNwbGF5ZWRBcmVhcy5mb3JFYWNoKGFyZWEgPT4ge1xuICAgICAgICAgICAgYXJlYS5zaXplID0gdXNlVXNlclNpemVzID8gKGFyZWEuY29tcG9uZW50LnNpemUgYXMgbnVtYmVyKSA6IGRlZmF1bHRTaXplO1xuICAgICAgICAgICAgYXJlYS5taW5TaXplID0gZ2V0QXJlYU1pblNpemUoYXJlYSk7XG4gICAgICAgICAgICBhcmVhLm1heFNpemUgPSBnZXRBcmVhTWF4U2l6ZShhcmVhKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdwaXhlbCc6IHtcbiAgICAgICAgICBpZiAodXNlVXNlclNpemVzKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZEFyZWFzLmZvckVhY2goYXJlYSA9PiB7XG4gICAgICAgICAgICAgIGFyZWEuc2l6ZSA9IGFyZWEuY29tcG9uZW50LnNpemU7XG4gICAgICAgICAgICAgIGFyZWEubWluU2l6ZSA9IGdldEFyZWFNaW5TaXplKGFyZWEpO1xuICAgICAgICAgICAgICBhcmVhLm1heFNpemUgPSBnZXRBcmVhTWF4U2l6ZShhcmVhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aWxkY2FyZFNpemVBcmVhcyA9IHRoaXMuZGlzcGxheWVkQXJlYXMuZmlsdGVyKGEgPT4gYS5jb21wb25lbnQuc2l6ZSA9PT0gbnVsbCk7XG5cbiAgICAgICAgICAgIC8vIE5vIHdpbGRjYXJkIGFyZWEgPiBOZWVkIHRvIHNlbGVjdCBvbmUgYXJiaXRyYXJpbHkgPiBmaXJzdFxuICAgICAgICAgICAgaWYgKHdpbGRjYXJkU2l6ZUFyZWFzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmRpc3BsYXllZEFyZWFzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRBcmVhcy5mb3JFYWNoKChhcmVhLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgYXJlYS5zaXplID0gaSA9PT0gMCA/IG51bGwgOiBhcmVhLmNvbXBvbmVudC5zaXplO1xuICAgICAgICAgICAgICAgIGFyZWEubWluU2l6ZSA9IGkgPT09IDAgPyBudWxsIDogZ2V0QXJlYU1pblNpemUoYXJlYSk7XG4gICAgICAgICAgICAgICAgYXJlYS5tYXhTaXplID0gaSA9PT0gMCA/IG51bGwgOiBnZXRBcmVhTWF4U2l6ZShhcmVhKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNb3JlIHRoYW4gb25lIHdpbGRjYXJkIGFyZWEgPiBOZWVkIHRvIGtlZXAgb25seSBvbmUgYXJiaXRyYXJseSA+IGZpcnN0XG4gICAgICAgICAgICBlbHNlIGlmICh3aWxkY2FyZFNpemVBcmVhcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIGxldCBhbHJlYWR5R290T25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkQXJlYXMuZm9yRWFjaChhcmVhID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXJlYS5jb21wb25lbnQuc2l6ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgaWYgKGFscmVhZHlHb3RPbmUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZWEuc2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGFyZWEubWluU2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGFyZWEubWF4U2l6ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGFscmVhZHlHb3RPbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJlYS5zaXplID0gMTAwO1xuICAgICAgICAgICAgICAgICAgICBhcmVhLm1pblNpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBhcmVhLm1heFNpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBhcmVhLnNpemUgPSBhcmVhLmNvbXBvbmVudC5zaXplO1xuICAgICAgICAgICAgICAgICAgYXJlYS5taW5TaXplID0gZ2V0QXJlYU1pblNpemUoYXJlYSk7XG4gICAgICAgICAgICAgICAgICBhcmVhLm1heFNpemUgPSBnZXRBcmVhTWF4U2l6ZShhcmVhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaFN0eWxlU2l6ZXMoKTtcbiAgICB0aGlzLmNkUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoU3R5bGVTaXplcygpOiB2b2lkIHtcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUEVSQ0VOVCBNT0RFXG4gICAgaWYgKHRoaXMudW5pdCA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAvLyBPbmx5IG9uZSBhcmVhID4gZmxleC1iYXNpcyAxMDAlXG4gICAgICBpZiAodGhpcy5kaXNwbGF5ZWRBcmVhcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRBcmVhc1swXS5jb21wb25lbnQuc2V0U3R5bGVGbGV4KDAsIDAsIGAxMDAlYCwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIE11bHRpcGxlIGFyZWFzID4gdXNlIGVhY2ggcGVyY2VudCBiYXNpc1xuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHN1bUd1dHRlclNpemUgPSB0aGlzLmdldE5iR3V0dGVycygpICogdGhpcy5ndXR0ZXJTaXplO1xuXG4gICAgICAgIHRoaXMuZGlzcGxheWVkQXJlYXMuZm9yRWFjaChhcmVhID0+IHtcbiAgICAgICAgICBhcmVhLmNvbXBvbmVudC5zZXRTdHlsZUZsZXgoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGBjYWxjKCAke2FyZWEuc2l6ZX0lIC0gJHsoKGFyZWEuc2l6ZSBhcyBudW1iZXIpIC8gMTAwKSAqIHN1bUd1dHRlclNpemV9cHggKWAsXG4gICAgICAgICAgICBhcmVhLm1pblNpemUgIT09IG51bGwgJiYgYXJlYS5taW5TaXplID09PSBhcmVhLnNpemUgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICBhcmVhLm1heFNpemUgIT09IG51bGwgJiYgYXJlYS5tYXhTaXplID09PSBhcmVhLnNpemUgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFBJWEVMIE1PREVcbiAgICBlbHNlIGlmICh0aGlzLnVuaXQgPT09ICdwaXhlbCcpIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQXJlYXMuZm9yRWFjaChhcmVhID0+IHtcbiAgICAgICAgLy8gQXJlYSB3aXRoIHdpbGRjYXJkIHNpemVcbiAgICAgICAgaWYgKGFyZWEuc2l6ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXllZEFyZWFzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgYXJlYS5jb21wb25lbnQuc2V0U3R5bGVGbGV4KDEsIDEsIGAxMDAlYCwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJlYS5jb21wb25lbnQuc2V0U3R5bGVGbGV4KDEsIDEsIGBhdXRvYCwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQXJlYSB3aXRoIHBpeGVsIHNpemVcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gT25seSBvbmUgYXJlYSA+IGZsZXgtYmFzaXMgMTAwJVxuICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXllZEFyZWFzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgYXJlYS5jb21wb25lbnQuc2V0U3R5bGVGbGV4KDAsIDAsIGAxMDAlYCwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gTXVsdGlwbGUgYXJlYXMgPiB1c2UgZWFjaCBwaXhlbCBiYXNpc1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXJlYS5jb21wb25lbnQuc2V0U3R5bGVGbGV4KFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICBgJHthcmVhLnNpemV9cHhgLFxuICAgICAgICAgICAgICBhcmVhLm1pblNpemUgIT09IG51bGwgJiYgYXJlYS5taW5TaXplID09PSBhcmVhLnNpemUgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgIGFyZWEubWF4U2l6ZSAhPT0gbnVsbCAmJiBhcmVhLm1heFNpemUgPT09IGFyZWEuc2l6ZSA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9jbGlja1RpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGNsaWNrR3V0dGVyKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCwgZ3V0dGVyTnVtOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0ZW1wUG9pbnQgPSBnZXRQb2ludEZyb21FdmVudChldmVudCkgYXMgTXR4U3BsaXRQb2ludDtcblxuICAgIC8vIEJlIHN1cmUgbW91c2V1cC90b3VjaGVuZCBoYXBwZW5lZCBhdCBzYW1lIHBvaW50IGFzIG1vdXNlZG93bi90b3VjaHN0YXJ0IHRvIHRyaWdnZXIgY2xpY2svZGJsY2xpY2tcbiAgICBpZiAodGhpcy5zdGFydFBvaW50ICYmIHRoaXMuc3RhcnRQb2ludC54ID09PSB0ZW1wUG9pbnQueCAmJiB0aGlzLnN0YXJ0UG9pbnQueSA9PT0gdGVtcFBvaW50LnkpIHtcbiAgICAgIC8vIElmIHRpbWVvdXQgaW4gcHJvZ3Jlc3MgYW5kIG5ldyBjbGljayA+IGNsZWFyVGltZW91dCAmIGRibENsaWNrRXZlbnRcbiAgICAgIGlmICh0aGlzLl9jbGlja1RpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9jbGlja1RpbWVvdXQpO1xuICAgICAgICB0aGlzLl9jbGlja1RpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLm5vdGlmeSgnZGJsY2xpY2snLCBndXR0ZXJOdW0pO1xuICAgICAgICB0aGlzLnN0b3BEcmFnZ2luZygpO1xuICAgICAgfVxuICAgICAgLy8gRWxzZSBzdGFydCB0aW1lb3V0IHRvIGNhbGwgY2xpY2tFdmVudCBhdCBlbmRcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLl9jbGlja1RpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY2xpY2tUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLm5vdGlmeSgnY2xpY2snLCBndXR0ZXJOdW0pO1xuICAgICAgICAgIHRoaXMuc3RvcERyYWdnaW5nKCk7XG4gICAgICAgIH0sIHRoaXMuZ3V0dGVyRGJsQ2xpY2tEdXJhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhcnREcmFnZ2luZyhldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQsIGd1dHRlck9yZGVyOiBudW1iZXIsIGd1dHRlck51bTogbnVtYmVyKTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHRoaXMuc3RhcnRQb2ludCA9IGdldFBvaW50RnJvbUV2ZW50KGV2ZW50KTtcbiAgICBpZiAodGhpcy5zdGFydFBvaW50ID09PSBudWxsIHx8IHRoaXMuZGlzYWJsZWQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNuYXBzaG90ID0ge1xuICAgICAgZ3V0dGVyTnVtLFxuICAgICAgbGFzdFN0ZXBwZWRPZmZzZXQ6IDAsXG4gICAgICBhbGxBcmVhc1NpemVQaXhlbDpcbiAgICAgICAgZ2V0RWxlbWVudFBpeGVsU2l6ZSh0aGlzLmVsUmVmLCB0aGlzLmRpcmVjdGlvbikgLSB0aGlzLmdldE5iR3V0dGVycygpICogdGhpcy5ndXR0ZXJTaXplLFxuICAgICAgYWxsSW52b2x2ZWRBcmVhc1NpemVQZXJjZW50OiAxMDAsXG4gICAgICBhcmVhc0JlZm9yZUd1dHRlcjogW10sXG4gICAgICBhcmVhc0FmdGVyR3V0dGVyOiBbXSxcbiAgICB9O1xuXG4gICAgdGhpcy5kaXNwbGF5ZWRBcmVhcy5mb3JFYWNoKGFyZWEgPT4ge1xuICAgICAgY29uc3QgYXJlYVNuYXBzaG90OiBNdHhTcGxpdEFyZWFTbmFwc2hvdCA9IHtcbiAgICAgICAgYXJlYSxcbiAgICAgICAgc2l6ZVBpeGVsQXRTdGFydDogZ2V0RWxlbWVudFBpeGVsU2l6ZShhcmVhLmNvbXBvbmVudC5lbFJlZiwgdGhpcy5kaXJlY3Rpb24pLFxuICAgICAgICBzaXplUGVyY2VudEF0U3RhcnQ6ICh0aGlzLnVuaXQgPT09ICdwZXJjZW50JyA/IGFyZWEuc2l6ZSA6IC0xKSBhcyBudW1iZXIsIC8vIElmIHBpeGVsIG1vZGUsIGFueXdheSwgd2lsbCBub3QgYmUgdXNlZC5cbiAgICAgIH07XG5cbiAgICAgIGlmIChhcmVhLm9yZGVyIDwgZ3V0dGVyT3JkZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucmVzdHJpY3RNb3ZlID09PSB0cnVlKSB7XG4gICAgICAgICAgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuYXJlYXNCZWZvcmVHdXR0ZXIgPSBbYXJlYVNuYXBzaG90XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5hcmVhc0JlZm9yZUd1dHRlci51bnNoaWZ0KGFyZWFTbmFwc2hvdCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYXJlYS5vcmRlciA+IGd1dHRlck9yZGVyKSB7XG4gICAgICAgIGlmICh0aGlzLnJlc3RyaWN0TW92ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGlmICgodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5hcmVhc0FmdGVyR3V0dGVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuYXJlYXNBZnRlckd1dHRlciA9IFthcmVhU25hcHNob3RdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5hcmVhc0FmdGVyR3V0dGVyLnB1c2goYXJlYVNuYXBzaG90KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5zbmFwc2hvdC5hbGxJbnZvbHZlZEFyZWFzU2l6ZVBlcmNlbnQgPSBbXG4gICAgICAuLi50aGlzLnNuYXBzaG90LmFyZWFzQmVmb3JlR3V0dGVyLFxuICAgICAgLi4udGhpcy5zbmFwc2hvdC5hcmVhc0FmdGVyR3V0dGVyLFxuICAgIF0ucmVkdWNlKCh0LCBhKSA9PiB0ICsgYS5zaXplUGVyY2VudEF0U3RhcnQsIDApO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zbmFwc2hvdC5hcmVhc0JlZm9yZUd1dHRlci5sZW5ndGggPT09IDAgfHxcbiAgICAgIHRoaXMuc25hcHNob3QuYXJlYXNBZnRlckd1dHRlci5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRyYWdMaXN0ZW5lcnMucHVzaChcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdtb3VzZXVwJywgdGhpcy5zdG9wRHJhZ2dpbmcuYmluZCh0aGlzKSlcbiAgICApO1xuICAgIHRoaXMuZHJhZ0xpc3RlbmVycy5wdXNoKFxuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ3RvdWNoZW5kJywgdGhpcy5zdG9wRHJhZ2dpbmcuYmluZCh0aGlzKSlcbiAgICApO1xuICAgIHRoaXMuZHJhZ0xpc3RlbmVycy5wdXNoKFxuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ3RvdWNoY2FuY2VsJywgdGhpcy5zdG9wRHJhZ2dpbmcuYmluZCh0aGlzKSlcbiAgICApO1xuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5kcmFnTGlzdGVuZXJzLnB1c2goXG4gICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdtb3VzZW1vdmUnLCB0aGlzLmRyYWdFdmVudC5iaW5kKHRoaXMpKVxuICAgICAgKTtcbiAgICAgIHRoaXMuZHJhZ0xpc3RlbmVycy5wdXNoKFxuICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAndG91Y2htb3ZlJywgdGhpcy5kcmFnRXZlbnQuYmluZCh0aGlzKSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRpc3BsYXllZEFyZWFzLmZvckVhY2goYXJlYSA9PiBhcmVhLmNvbXBvbmVudC5sb2NrRXZlbnRzKCkpO1xuXG4gICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ210eC1kcmFnZ2luZycpO1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICB0aGlzLmd1dHRlckVscy50b0FycmF5KClbdGhpcy5zbmFwc2hvdC5ndXR0ZXJOdW0gLSAxXS5uYXRpdmVFbGVtZW50LFxuICAgICAgJ210eC1kcmFnZ2VkJ1xuICAgICk7XG5cbiAgICB0aGlzLm5vdGlmeSgnc3RhcnQnLCB0aGlzLnNuYXBzaG90Lmd1dHRlck51bSk7XG4gIH1cblxuICBwcml2YXRlIGRyYWdFdmVudChldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuX2NsaWNrVGltZW91dCAhPT0gbnVsbCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9jbGlja1RpbWVvdXQpO1xuICAgICAgdGhpcy5fY2xpY2tUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0RyYWdnaW5nID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZW5kUG9pbnQgPSBnZXRQb2ludEZyb21FdmVudChldmVudCk7XG4gICAgaWYgKHRoaXMuZW5kUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgc3RlcHBlZE9mZnNldFxuXG4gICAgbGV0IG9mZnNldCA9XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gKHRoaXMuc3RhcnRQb2ludCBhcyBNdHhTcGxpdFBvaW50KS54IC0gdGhpcy5lbmRQb2ludC54XG4gICAgICAgIDogKHRoaXMuc3RhcnRQb2ludCBhcyBNdHhTcGxpdFBvaW50KS55IC0gdGhpcy5lbmRQb2ludC55O1xuICAgIGlmICh0aGlzLmRpciA9PT0gJ3J0bCcgJiYgdGhpcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICB9XG4gICAgY29uc3Qgc3RlcHBlZE9mZnNldCA9IE1hdGgucm91bmQob2Zmc2V0IC8gdGhpcy5ndXR0ZXJTdGVwKSAqIHRoaXMuZ3V0dGVyU3RlcDtcblxuICAgIGlmIChzdGVwcGVkT2Zmc2V0ID09PSAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5sYXN0U3RlcHBlZE9mZnNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICh0aGlzLnNuYXBzaG90IGFzIE10eFNwbGl0U25hcHNob3QpLmxhc3RTdGVwcGVkT2Zmc2V0ID0gc3RlcHBlZE9mZnNldDtcblxuICAgIC8vIE5lZWQgdG8ga25vdyBpZiBlYWNoIGd1dHRlciBzaWRlIGFyZWFzIGNvdWxkIHJlYWN0cyB0byBzdGVwcGVkT2Zmc2V0XG5cbiAgICBsZXQgYXJlYXNCZWZvcmUgPSBnZXRHdXR0ZXJTaWRlQWJzb3JwdGlvbkNhcGFjaXR5KFxuICAgICAgdGhpcy51bml0LFxuICAgICAgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuYXJlYXNCZWZvcmVHdXR0ZXIsXG4gICAgICAtc3RlcHBlZE9mZnNldCxcbiAgICAgICh0aGlzLnNuYXBzaG90IGFzIE10eFNwbGl0U25hcHNob3QpLmFsbEFyZWFzU2l6ZVBpeGVsXG4gICAgKTtcbiAgICBsZXQgYXJlYXNBZnRlciA9IGdldEd1dHRlclNpZGVBYnNvcnB0aW9uQ2FwYWNpdHkoXG4gICAgICB0aGlzLnVuaXQsXG4gICAgICAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5hcmVhc0FmdGVyR3V0dGVyLFxuICAgICAgc3RlcHBlZE9mZnNldCxcbiAgICAgICh0aGlzLnNuYXBzaG90IGFzIE10eFNwbGl0U25hcHNob3QpLmFsbEFyZWFzU2l6ZVBpeGVsXG4gICAgKTtcblxuICAgIC8vIEVhY2ggZ3V0dGVyIHNpZGUgYXJlYXMgY2FuJ3QgYWJzb3JiIGFsbCBvZmZzZXRcbiAgICBpZiAoYXJlYXNCZWZvcmUucmVtYWluICE9PSAwICYmIGFyZWFzQWZ0ZXIucmVtYWluICE9PSAwKSB7XG4gICAgICBpZiAoTWF0aC5hYnMoYXJlYXNCZWZvcmUucmVtYWluKSA9PT0gTWF0aC5hYnMoYXJlYXNBZnRlci5yZW1haW4pKSB7XG4gICAgICAgIC8qKiAqL1xuICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhhcmVhc0JlZm9yZS5yZW1haW4pID4gTWF0aC5hYnMoYXJlYXNBZnRlci5yZW1haW4pKSB7XG4gICAgICAgIGFyZWFzQWZ0ZXIgPSBnZXRHdXR0ZXJTaWRlQWJzb3JwdGlvbkNhcGFjaXR5KFxuICAgICAgICAgIHRoaXMudW5pdCxcbiAgICAgICAgICAodGhpcy5zbmFwc2hvdCBhcyBNdHhTcGxpdFNuYXBzaG90KS5hcmVhc0FmdGVyR3V0dGVyLFxuICAgICAgICAgIHN0ZXBwZWRPZmZzZXQgKyBhcmVhc0JlZm9yZS5yZW1haW4sXG4gICAgICAgICAgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuYWxsQXJlYXNTaXplUGl4ZWxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyZWFzQmVmb3JlID0gZ2V0R3V0dGVyU2lkZUFic29ycHRpb25DYXBhY2l0eShcbiAgICAgICAgICB0aGlzLnVuaXQsXG4gICAgICAgICAgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuYXJlYXNCZWZvcmVHdXR0ZXIsXG4gICAgICAgICAgLShzdGVwcGVkT2Zmc2V0IC0gYXJlYXNBZnRlci5yZW1haW4pLFxuICAgICAgICAgICh0aGlzLnNuYXBzaG90IGFzIE10eFNwbGl0U25hcHNob3QpLmFsbEFyZWFzU2l6ZVBpeGVsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFyZWFzIGJlZm9yZSBndXR0ZXIgY2FuJ3QgYWJzb3JicyBhbGwgb2Zmc2V0ID4gbmVlZCB0byByZWNhbGN1bGF0ZSBzaXplcyBmb3IgYXJlYXMgYWZ0ZXIgZ3V0dGVyLlxuICAgIGVsc2UgaWYgKGFyZWFzQmVmb3JlLnJlbWFpbiAhPT0gMCkge1xuICAgICAgYXJlYXNBZnRlciA9IGdldEd1dHRlclNpZGVBYnNvcnB0aW9uQ2FwYWNpdHkoXG4gICAgICAgIHRoaXMudW5pdCxcbiAgICAgICAgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuYXJlYXNBZnRlckd1dHRlcixcbiAgICAgICAgc3RlcHBlZE9mZnNldCArIGFyZWFzQmVmb3JlLnJlbWFpbixcbiAgICAgICAgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuYWxsQXJlYXNTaXplUGl4ZWxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIEFyZWFzIGFmdGVyIGd1dHRlciBjYW4ndCBhYnNvcmJzIGFsbCBvZmZzZXQgPiBuZWVkIHRvIHJlY2FsY3VsYXRlIHNpemVzIGZvciBhcmVhcyBiZWZvcmUgZ3V0dGVyLlxuICAgIGVsc2UgaWYgKGFyZWFzQWZ0ZXIucmVtYWluICE9PSAwKSB7XG4gICAgICBhcmVhc0JlZm9yZSA9IGdldEd1dHRlclNpZGVBYnNvcnB0aW9uQ2FwYWNpdHkoXG4gICAgICAgIHRoaXMudW5pdCxcbiAgICAgICAgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuYXJlYXNCZWZvcmVHdXR0ZXIsXG4gICAgICAgIC0oc3RlcHBlZE9mZnNldCAtIGFyZWFzQWZ0ZXIucmVtYWluKSxcbiAgICAgICAgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuYWxsQXJlYXNTaXplUGl4ZWxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudW5pdCA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAvLyBIYWNrIGJlY2F1c2Ugb2YgYnJvd3NlciBtZXNzaW5nIHVwIHdpdGggc2l6ZXMgdXNpbmcgY2FsYyhYJSAtIFlweCkgLT4gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIC8vIElmIG5vdCB0aGVyZSwgcGxheWluZyB3aXRoIGd1dHRlcnMgbWFrZXMgdG90YWwgZ29pbmcgZG93biB0byA5OS45OTg3NSUgdGhlbiA5OS45OTI4NiUsIDk5Ljk4OTg2JSwuLlxuICAgICAgY29uc3QgYWxsID0gWy4uLmFyZWFzQmVmb3JlLmxpc3QsIC4uLmFyZWFzQWZ0ZXIubGlzdF07XG4gICAgICBjb25zdCBhcmVhVG9SZXNldCA9IGFsbC5maW5kKFxuICAgICAgICBhID0+XG4gICAgICAgICAgYS5wZXJjZW50QWZ0ZXJBYnNvcnB0aW9uICE9PSAwICYmXG4gICAgICAgICAgYS5wZXJjZW50QWZ0ZXJBYnNvcnB0aW9uICE9PSBhLmFyZWFTbmFwc2hvdC5hcmVhLm1pblNpemUgJiZcbiAgICAgICAgICBhLnBlcmNlbnRBZnRlckFic29ycHRpb24gIT09IGEuYXJlYVNuYXBzaG90LmFyZWEubWF4U2l6ZVxuICAgICAgKTtcblxuICAgICAgaWYgKGFyZWFUb1Jlc2V0KSB7XG4gICAgICAgIGFyZWFUb1Jlc2V0LnBlcmNlbnRBZnRlckFic29ycHRpb24gPVxuICAgICAgICAgICh0aGlzLnNuYXBzaG90IGFzIE10eFNwbGl0U25hcHNob3QpLmFsbEludm9sdmVkQXJlYXNTaXplUGVyY2VudCAtXG4gICAgICAgICAgYWxsXG4gICAgICAgICAgICAuZmlsdGVyKGEgPT4gYSAhPT0gYXJlYVRvUmVzZXQpXG4gICAgICAgICAgICAucmVkdWNlKCh0b3RhbCwgYSkgPT4gdG90YWwgKyBhLnBlcmNlbnRBZnRlckFic29ycHRpb24sIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBrbm93IGFyZWFzIGNvdWxkIGFic29yYiBzdGVwcGVkT2Zmc2V0LCB0aW1lIHRvIHJlYWxseSB1cGRhdGUgc2l6ZXNcblxuICAgIGFyZWFzQmVmb3JlLmxpc3QuZm9yRWFjaChpdGVtID0+IHVwZGF0ZUFyZWFTaXplKHRoaXMudW5pdCwgaXRlbSkpO1xuICAgIGFyZWFzQWZ0ZXIubGlzdC5mb3JFYWNoKGl0ZW0gPT4gdXBkYXRlQXJlYVNpemUodGhpcy51bml0LCBpdGVtKSk7XG5cbiAgICB0aGlzLnJlZnJlc2hTdHlsZVNpemVzKCk7XG4gICAgdGhpcy5ub3RpZnkoJ3Byb2dyZXNzJywgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuZ3V0dGVyTnVtKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcERyYWdnaW5nKGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0RyYWdnaW5nID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGxheWVkQXJlYXMuZm9yRWFjaChhcmVhID0+IGFyZWEuY29tcG9uZW50LnVubG9ja0V2ZW50cygpKTtcblxuICAgIHdoaWxlICh0aGlzLmRyYWdMaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmN0ID0gdGhpcy5kcmFnTGlzdGVuZXJzLnBvcCgpO1xuICAgICAgaWYgKGZjdCkge1xuICAgICAgICBmY3QoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXYXJuaW5nOiBIYXZlIHRvIGJlIGJlZm9yZSBcIm5vdGlmeSgnZW5kJylcIlxuICAgIC8vIGJlY2F1c2UgXCJub3RpZnkoJ2VuZCcpXCJcIiBjYW4gYmUgbGlua2VkIHRvIFwiW3NpemVdPSd4J1wiID4gXCJidWlsZCgpXCIgPiBcInN0b3BEcmFnZ2luZygpXCJcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcblxuICAgIC8vIElmIG1vdmVkIGZyb20gc3RhcnRpbmcgcG9pbnQsIG5vdGlmeSBlbmRcbiAgICBpZiAoXG4gICAgICB0aGlzLmVuZFBvaW50ICYmXG4gICAgICAoKHRoaXMuc3RhcnRQb2ludCBhcyBNdHhTcGxpdFBvaW50KS54ICE9PSB0aGlzLmVuZFBvaW50LnggfHxcbiAgICAgICAgKHRoaXMuc3RhcnRQb2ludCBhcyBNdHhTcGxpdFBvaW50KS55ICE9PSB0aGlzLmVuZFBvaW50LnkpXG4gICAgKSB7XG4gICAgICB0aGlzLm5vdGlmeSgnZW5kJywgKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuZ3V0dGVyTnVtKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ210eC1kcmFnZ2luZycpO1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoXG4gICAgICB0aGlzLmd1dHRlckVscy50b0FycmF5KClbKHRoaXMuc25hcHNob3QgYXMgTXR4U3BsaXRTbmFwc2hvdCkuZ3V0dGVyTnVtIC0gMV0ubmF0aXZlRWxlbWVudCxcbiAgICAgICdtdHgtZHJhZ2dlZCdcbiAgICApO1xuICAgIHRoaXMuc25hcHNob3QgPSBudWxsO1xuXG4gICAgLy8gTmVlZGVkIHRvIGxldCAoY2xpY2spPVwiY2xpY2tHdXR0ZXIoLi4uKVwiIGV2ZW50IHJ1biBhbmQgdmVyaWZ5IGlmIG1vdXNlIG1vdmVkIG9yIG5vdFxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnN0YXJ0UG9pbnQgPSBudWxsO1xuICAgICAgICB0aGlzLmVuZFBvaW50ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbm90aWZ5KFxuICAgIHR5cGU6ICdzdGFydCcgfCAncHJvZ3Jlc3MnIHwgJ2VuZCcgfCAnY2xpY2snIHwgJ2RibGNsaWNrJyB8ICd0cmFuc2l0aW9uRW5kJyxcbiAgICBndXR0ZXJOdW06IG51bWJlclxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzaXplcyA9IHRoaXMuZ2V0VmlzaWJsZUFyZWFTaXplcygpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzdGFydCcpIHtcbiAgICAgIHRoaXMuZHJhZ1N0YXJ0LmVtaXQoeyBndXR0ZXJOdW0sIHNpemVzIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2VuZCcpIHtcbiAgICAgIHRoaXMuZHJhZ0VuZC5lbWl0KHsgZ3V0dGVyTnVtLCBzaXplcyB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgIHRoaXMuZ3V0dGVyQ2xpY2suZW1pdCh7IGd1dHRlck51bSwgc2l6ZXMgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnZGJsY2xpY2snKSB7XG4gICAgICB0aGlzLmd1dHRlckRibENsaWNrLmVtaXQoeyBndXR0ZXJOdW0sIHNpemVzIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RyYW5zaXRpb25FbmQnKSB7XG4gICAgICBpZiAodGhpcy50cmFuc2l0aW9uRW5kU3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy50cmFuc2l0aW9uRW5kU3Vic2NyaWJlci5uZXh0KHNpemVzKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICAvLyBTdGF5IG91dHNpZGUgem9uZSB0byBhbGxvdyB1c2VycyBkbyB3aGF0IHRoZXkgd2FudCBhYm91dCBjaGFuZ2UgZGV0ZWN0aW9uIG1lY2hhbmlzbS5cbiAgICAgIHRoaXMuZHJhZ1Byb2dyZXNzU3ViamVjdC5uZXh0KHsgZ3V0dGVyTnVtLCBzaXplcyB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BEcmFnZ2luZygpO1xuICB9XG59XG4iLCI8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbkBmb3IgKGFyZWEgb2YgZGlzcGxheWVkQXJlYXM7IHRyYWNrIGFyZWE7IGxldCBpbmRleCA9ICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xyXG4gIEBpZiAoIWxhc3QpIHtcclxuICAgIDxkaXYgI2d1dHRlckVscyBjbGFzcz1cIm10eC1zcGxpdC1ndXR0ZXJcIiBbY2xhc3NdPVwiY29sb3IgPyAnbWF0LScgKyBjb2xvciA6ICcnXCJcclxuICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwiZ3V0dGVyU2l6ZVwiXHJcbiAgICAgIFtzdHlsZS5vcmRlcl09XCJpbmRleCAqIDIgKyAxXCJcclxuICAgICAgKG1vdXNlZG93bik9XCJzdGFydERyYWdnaW5nKCRldmVudCwgaW5kZXggKiAyICsgMSwgaW5kZXggKyAxKVwiXHJcbiAgICAgICh0b3VjaHN0YXJ0KT1cInN0YXJ0RHJhZ2dpbmcoJGV2ZW50LCBpbmRleCAqIDIgKyAxLCBpbmRleCArIDEpXCJcclxuICAgICAgKG1vdXNldXApPVwiY2xpY2tHdXR0ZXIoJGV2ZW50LCBpbmRleCArIDEpXCJcclxuICAgICAgKHRvdWNoZW5kKT1cImNsaWNrR3V0dGVyKCRldmVudCwgaW5kZXggKyAxKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibXR4LXNwbGl0LWd1dHRlci1oYW5kbGVcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIH1cclxufVxyXG4iXX0=
|
package/fesm2022/mtxSplit.mjs
CHANGED
|
@@ -295,6 +295,7 @@ class MtxSplit {
|
|
|
295
295
|
return this._useTransition;
|
|
296
296
|
}
|
|
297
297
|
set useTransition(v) {
|
|
298
|
+
this._useTransition = v;
|
|
298
299
|
if (this._useTransition) {
|
|
299
300
|
this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-transition');
|
|
300
301
|
}
|
|
@@ -310,6 +311,7 @@ class MtxSplit {
|
|
|
310
311
|
return this._disabled;
|
|
311
312
|
}
|
|
312
313
|
set disabled(v) {
|
|
314
|
+
this._disabled = v;
|
|
313
315
|
if (this._disabled) {
|
|
314
316
|
this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-disabled');
|
|
315
317
|
}
|
|
@@ -896,6 +898,7 @@ class MtxSplitPane {
|
|
|
896
898
|
return this._lockSize;
|
|
897
899
|
}
|
|
898
900
|
set lockSize(v) {
|
|
901
|
+
this._lockSize = v;
|
|
899
902
|
this.split.updateArea(this, false, true);
|
|
900
903
|
}
|
|
901
904
|
/** Hide area visually but still present in the DOM, use `ngIf` to completely remove it. */
|
|
@@ -903,6 +906,7 @@ class MtxSplitPane {
|
|
|
903
906
|
return this._visible;
|
|
904
907
|
}
|
|
905
908
|
set visible(v) {
|
|
909
|
+
this._visible = v;
|
|
906
910
|
if (this._visible) {
|
|
907
911
|
this.split.showArea(this);
|
|
908
912
|
this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mtxSplit.mjs","sources":["../../../projects/extensions/split/utils.ts","../../../projects/extensions/split/split.ts","../../../projects/extensions/split/split.html","../../../projects/extensions/split/split-pane.ts","../../../projects/extensions/split/split-module.ts","../../../projects/extensions/split/mtxSplit.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\n\nimport {\n MtxSplitArea,\n MtxSplitPoint,\n MtxSplitAreaSnapshot,\n MtxSplitSideAbsorptionCapacity,\n MtxSplitAreaAbsorptionCapacity,\n} from './interfaces';\n\nexport function getPointFromEvent(event: MouseEvent | TouchEvent): MtxSplitPoint | null {\n // TouchEvent\n if (\n (event as TouchEvent).changedTouches !== undefined &&\n (event as TouchEvent).changedTouches.length > 0\n ) {\n return {\n x: (event as TouchEvent).changedTouches[0].clientX,\n y: (event as TouchEvent).changedTouches[0].clientY,\n };\n }\n // MouseEvent\n else if (\n (event as MouseEvent).clientX !== undefined &&\n (event as MouseEvent).clientY !== undefined\n ) {\n return {\n x: (event as MouseEvent).clientX,\n y: (event as MouseEvent).clientY,\n };\n }\n return null;\n}\n\nexport function getElementPixelSize(\n elRef: ElementRef,\n direction: 'horizontal' | 'vertical'\n): number {\n const rect = (elRef.nativeElement as HTMLElement).getBoundingClientRect();\n\n return direction === 'horizontal' ? rect.width : rect.height;\n}\n\nexport function getInputPositiveNumber<T>(v: any, defaultValue: T): number | T {\n if (v === null || v === undefined) {\n return defaultValue;\n }\n\n v = Number(v);\n return !isNaN(v) && v >= 0 ? v : defaultValue;\n}\n\nexport function isUserSizesValid(\n unit: 'percent' | 'pixel',\n sizes: Array<number>\n): boolean | number | void {\n // All sizes have to be not null and total should be 100\n if (unit === 'percent') {\n const total = sizes.reduce((_total, s) => (s !== null ? _total + s : _total), 0);\n return sizes.every(s => s !== null) && total && total > 99.9 && total < 100.1;\n }\n\n // A size at null is mandatory but only one.\n if (unit === 'pixel') {\n return sizes.filter(s => s === null).length === 1;\n }\n}\n\nexport function getAreaMinSize(a: MtxSplitArea): null | number {\n if (a.size === null) {\n return null;\n }\n\n if (a.component.lockSize === true) {\n return a.size;\n }\n\n if (a.component.minSize === null) {\n return null;\n }\n\n if (a.component.minSize > a.size) {\n return a.size;\n }\n\n return a.component.minSize;\n}\n\nexport function getAreaMaxSize(a: MtxSplitArea): null | number {\n if (a.size === null) {\n return null;\n }\n\n if (a.component.lockSize === true) {\n return a.size;\n }\n\n if (a.component.maxSize === null) {\n return null;\n }\n\n if (a.component.maxSize < a.size) {\n return a.size;\n }\n\n return a.component.maxSize;\n}\n\nexport function getGutterSideAbsorptionCapacity(\n unit: 'percent' | 'pixel',\n sideAreas: Array<MtxSplitAreaSnapshot>,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitSideAbsorptionCapacity {\n return sideAreas.reduce(\n (acc: any, area) => {\n const res = getAreaAbsorptionCapacity(unit, area, acc.remain, allAreasSizePixel);\n acc.list.push(res);\n acc.remain = res && res.pixelRemain;\n return acc;\n },\n { remain: pixels, list: [] }\n );\n}\n\nexport function getAreaAbsorptionCapacity(\n unit: 'percent' | 'pixel',\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n // No pain no gain\n if (pixels === 0) {\n return {\n areaSnapshot,\n pixelAbsorb: 0,\n percentAfterAbsorption: areaSnapshot.sizePercentAtStart,\n pixelRemain: 0,\n };\n }\n\n // Area start at zero and need to be reduced, not possible\n if (areaSnapshot.sizePixelAtStart === 0 && pixels < 0) {\n return {\n areaSnapshot,\n pixelAbsorb: 0,\n percentAfterAbsorption: 0,\n pixelRemain: pixels,\n };\n }\n\n if (unit === 'percent') {\n return getAreaAbsorptionCapacityPercent(areaSnapshot, pixels, allAreasSizePixel);\n }\n\n if (unit === 'pixel') {\n return getAreaAbsorptionCapacityPixel(areaSnapshot, pixels, allAreasSizePixel);\n }\n}\n\nexport function getAreaAbsorptionCapacityPercent(\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n const tempPercentSize = (tempPixelSize / allAreasSizePixel) * 100;\n\n // ENLARGE AREA\n\n if (pixels > 0) {\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n if (areaSnapshot.area.maxSize !== null && tempPercentSize > areaSnapshot.area.maxSize) {\n // Use area.area.maxSize as newPercentSize and return calculate pixels remaining\n const maxSizePixel = (areaSnapshot.area.maxSize / 100) * allAreasSizePixel;\n return {\n areaSnapshot,\n pixelAbsorb: maxSizePixel,\n percentAfterAbsorption: areaSnapshot.area.maxSize,\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - maxSizePixel,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: tempPercentSize > 100 ? 100 : tempPercentSize,\n pixelRemain: 0,\n };\n }\n\n // REDUCE AREA\n else if (pixels < 0) {\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n if (areaSnapshot.area.minSize !== null && tempPercentSize < areaSnapshot.area.minSize) {\n // Use area.area.minSize as newPercentSize and return calculate pixels remaining\n const minSizePixel = (areaSnapshot.area.minSize / 100) * allAreasSizePixel;\n return {\n areaSnapshot,\n pixelAbsorb: minSizePixel,\n percentAfterAbsorption: areaSnapshot.area.minSize,\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - minSizePixel,\n };\n }\n // If reduced under zero > return remaining pixels\n else if (tempPercentSize < 0) {\n // Use 0 as newPercentSize and return calculate pixels remaining\n return {\n areaSnapshot,\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: 0,\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: tempPercentSize,\n pixelRemain: 0,\n };\n }\n}\n\nexport function getAreaAbsorptionCapacityPixel(\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n containerSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n\n // ENLARGE AREA\n\n if (pixels > 0) {\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n if (areaSnapshot.area.maxSize !== null && tempPixelSize > areaSnapshot.area.maxSize) {\n return {\n areaSnapshot,\n pixelAbsorb: areaSnapshot.area.maxSize - areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: -1,\n pixelRemain: tempPixelSize - areaSnapshot.area.maxSize,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: -1,\n pixelRemain: 0,\n };\n }\n\n // REDUCE AREA\n else if (pixels < 0) {\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n if (areaSnapshot.area.minSize !== null && tempPixelSize < areaSnapshot.area.minSize) {\n return {\n areaSnapshot,\n pixelAbsorb: areaSnapshot.area.minSize + pixels - tempPixelSize,\n percentAfterAbsorption: -1,\n pixelRemain: tempPixelSize - areaSnapshot.area.minSize,\n };\n }\n // If reduced under zero > return remaining pixels\n else if (tempPixelSize < 0) {\n return {\n areaSnapshot,\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: -1,\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: -1,\n pixelRemain: 0,\n };\n }\n}\n\nexport function updateAreaSize(unit: 'percent' | 'pixel', item: MtxSplitAreaAbsorptionCapacity) {\n if (unit === 'percent') {\n item.areaSnapshot.area.size = item.percentAfterAbsorption;\n } else if (unit === 'pixel') {\n // Update size except for the wildcard size area\n if (item.areaSnapshot.area.size !== null) {\n item.areaSnapshot.area.size = item.areaSnapshot.sizePixelAtStart + item.pixelAbsorb;\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n Renderer2,\n ViewChildren,\n ViewEncapsulation,\n booleanAttribute,\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { Observable, Subject, Subscriber } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport {\n MtxSplitArea,\n MtxSplitAreaSnapshot,\n MtxSplitDefaultOptions,\n MtxSplitOutputAreaSizes,\n MtxSplitOutputData,\n MtxSplitPoint,\n MtxSplitSnapshot,\n} from './interfaces';\nimport { MtxSplitPane } from './split-pane';\nimport {\n getAreaMaxSize,\n getAreaMinSize,\n getElementPixelSize,\n getGutterSideAbsorptionCapacity,\n getInputPositiveNumber,\n getPointFromEvent,\n isUserSizesValid,\n updateAreaSize,\n} from './utils';\n\n/** Injection token that can be used to specify default split options. */\nexport const MTX_SPLIT_DEFAULT_OPTIONS = new InjectionToken<MtxSplitDefaultOptions>(\n 'mtx-split-default-options'\n);\n\n/**\n * mtx-split\n *\n *\n * PERCENT MODE ([unit]=\"'percent'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 20 30 20 15 15 | <-- [size]=\"x\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * |calc(20% - 8px) calc(30% - 12px) calc(20% - 8px) calc(15% - 6px) calc(15% - 6px)| <-- CSS flex-basis property (with flex-grow&shrink at 0)\n * | 152px 228px 152px 114px 114px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n * flex-basis = calc( { area.size }% - { area.size/100 * nbGutter*gutterSize }px );\n *\n *\n * PIXEL MODE ([unit]=\"'pixel'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 100 250 * 150 100 | <-- [size]=\"y\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * | 0 0 100px 0 0 250px 1 1 auto 0 0 150px 0 0 100px | <-- CSS flex property (flex-grow/flex-shrink/flex-basis)\n * | 100px 250px 200px 150px 100px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n *\n */\n\n@Component({\n selector: 'mtx-split',\n exportAs: 'mtxSplit',\n host: {\n class: 'mtx-split',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './split.scss',\n templateUrl: './split.html',\n standalone: true,\n})\nexport class MtxSplit implements AfterViewInit, OnDestroy {\n @Input() color: ThemePalette;\n\n /** The split direction. */\n @Input()\n get direction() {\n return this._direction;\n }\n set direction(v: 'horizontal' | 'vertical') {\n this._direction = v === 'vertical' ? 'vertical' : 'horizontal';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._direction}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._direction === 'vertical' ? 'horizontal' : 'vertical'}`\n );\n\n this.build(false, false);\n }\n private _direction: 'horizontal' | 'vertical' = 'horizontal';\n\n /** The unit you want to specify area sizes. */\n @Input()\n get unit() {\n return this._unit;\n }\n set unit(v: 'percent' | 'pixel') {\n this._unit = v === 'pixel' ? 'pixel' : 'percent';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._unit}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._unit === 'pixel' ? 'percent' : 'pixel'}`\n );\n\n this.build(false, true);\n }\n private _unit: 'percent' | 'pixel' = 'percent';\n\n /** Gutters's size (dragging elements) in pixels. */\n @Input()\n get gutterSize() {\n return this._gutterSize;\n }\n set gutterSize(v: number) {\n this._gutterSize = getInputPositiveNumber(v, 4);\n\n this.build(false, false);\n }\n private _gutterSize = 4;\n\n /** Gutter step while moving in pixels. */\n @Input()\n get gutterStep() {\n return this._gutterStep;\n }\n set gutterStep(v: number) {\n this._gutterStep = getInputPositiveNumber(v, 1);\n }\n private _gutterStep = 1;\n\n /** Set to true if you want to limit gutter move to adjacent areas only. */\n @Input({ transform: booleanAttribute }) restrictMove = false;\n\n /** Add transition when toggling visibility using `visible` or `size` changes. */\n @Input({ transform: booleanAttribute })\n get useTransition() {\n return this._useTransition;\n }\n set useTransition(v: boolean) {\n if (this._useTransition) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-transition');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-transition');\n }\n }\n private _useTransition = false;\n\n /**\n * Disable the dragging feature (remove cursor/image on gutters).\n * `gutterClick`/`gutterDblClick` still emits.\n */\n @Input({ transform: booleanAttribute })\n get disabled() {\n return this._disabled;\n }\n set disabled(v: boolean) {\n if (this._disabled) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-disabled');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-disabled');\n }\n }\n private _disabled = false;\n\n /** Indicates the directionality of the areas. */\n @Input()\n get dir() {\n return this._dir;\n }\n set dir(v: 'ltr' | 'rtl') {\n this._dir = v === 'rtl' ? 'rtl' : 'ltr';\n\n this.renderer.setAttribute(this.elRef.nativeElement, 'dir', this._dir);\n }\n private _dir: 'ltr' | 'rtl' = 'ltr';\n\n /**\n * Milliseconds to detect a double click on a gutter. Set it around 300-500ms if\n * you want to use `gutterDblClick` event.\n */\n @Input()\n get gutterDblClickDuration() {\n return this._gutterDblClickDuration;\n }\n set gutterDblClickDuration(v: number) {\n this._gutterDblClickDuration = getInputPositiveNumber(v, 0);\n }\n private _gutterDblClickDuration = 0;\n\n /** Event emitted when drag starts. */\n @Output() dragStart = new EventEmitter<MtxSplitOutputData>(false);\n /** Event emitted when drag ends. */\n @Output() dragEnd = new EventEmitter<MtxSplitOutputData>(false);\n /** Event emitted when user clicks on a gutter. */\n @Output() gutterClick = new EventEmitter<MtxSplitOutputData>(false);\n /** Event emitted when user double clicks on a gutter. */\n @Output() gutterDblClick = new EventEmitter<MtxSplitOutputData>(false);\n /**\n * Event emitted when transition ends (could be triggered from `visible` or `size` changes).\n * Only if `useTransition` equals true.\n */\n @Output()\n get transitionEnd(): Observable<MtxSplitOutputAreaSizes> {\n return new Observable(subscriber => (this.transitionEndSubscriber = subscriber)).pipe(\n debounceTime<any>(20)\n );\n }\n private transitionEndSubscriber!: Subscriber<MtxSplitOutputAreaSizes>;\n\n private dragProgressSubject: Subject<MtxSplitOutputData> = new Subject();\n dragProgress$: Observable<MtxSplitOutputData> = this.dragProgressSubject.asObservable();\n\n private isDragging = false;\n private dragListeners: Array<() => void> = [];\n private snapshot: MtxSplitSnapshot | null = null;\n private startPoint: MtxSplitPoint | null = null;\n private endPoint: MtxSplitPoint | null = null;\n\n public readonly displayedAreas: Array<MtxSplitArea> = [];\n private readonly hidedAreas: Array<MtxSplitArea> = [];\n\n @ViewChildren('gutterEls') private gutterEls!: QueryList<ElementRef>;\n\n constructor(\n private ngZone: NgZone,\n private elRef: ElementRef,\n private cdRef: ChangeDetectorRef,\n private renderer: Renderer2,\n @Optional()\n @Inject(MTX_SPLIT_DEFAULT_OPTIONS)\n protected _defaultOptions?: MtxSplitDefaultOptions\n ) {\n this.color = _defaultOptions?.color ?? 'primary';\n this.direction = _defaultOptions?.direction ?? 'horizontal';\n this.dir = _defaultOptions?.dir ?? 'ltr';\n this.unit = _defaultOptions?.unit ?? 'percent';\n this.gutterDblClickDuration = _defaultOptions?.gutterDblClickDuration ?? 0;\n this.gutterSize = _defaultOptions?.gutterSize ?? 4;\n this.gutterStep = _defaultOptions?.gutterStep ?? 1;\n this.restrictMove = _defaultOptions?.restrictMove ?? false;\n this.useTransition = _defaultOptions?.useTransition ?? false;\n }\n\n ngAfterViewInit() {\n this.ngZone.runOutsideAngular(() => {\n // To avoid transition at first rendering\n setTimeout(() => this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-init'));\n });\n }\n\n private getNbGutters(): number {\n return this.displayedAreas.length === 0 ? 0 : this.displayedAreas.length - 1;\n }\n\n addArea(component: MtxSplitPane): void {\n const newArea: MtxSplitArea = {\n component,\n order: 0,\n size: 0,\n minSize: null,\n maxSize: null,\n };\n\n if (component.visible === true) {\n this.displayedAreas.push(newArea);\n\n this.build(true, true);\n } else {\n this.hidedAreas.push(newArea);\n }\n }\n\n removeArea(component: MtxSplitPane): void {\n if (this.displayedAreas.some(a => a.component === component)) {\n const area = this.displayedAreas.find(a => a.component === component) as MtxSplitArea;\n this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n\n this.build(true, true);\n } else if (this.hidedAreas.some(a => a.component === component)) {\n const area = this.hidedAreas.find(a => a.component === component) as MtxSplitArea;\n this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n }\n }\n\n updateArea(component: MtxSplitPane, resetOrders: boolean, resetSizes: boolean): void {\n if (component.visible === true) {\n this.build(resetOrders, resetSizes);\n }\n }\n\n showArea(component: MtxSplitPane): void {\n const area = this.hidedAreas.find(a => a.component === component);\n if (area === undefined) {\n return;\n }\n\n const areas = this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n this.displayedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n hideArea(comp: MtxSplitPane): void {\n const area = this.displayedAreas.find(a => a.component === comp);\n if (area === undefined) {\n return;\n }\n\n const areas = this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n areas.forEach(_area => {\n _area.order = 0;\n _area.size = 0;\n });\n this.hidedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n getVisibleAreaSizes(): MtxSplitOutputAreaSizes {\n return this.displayedAreas.map(a => (a.size === null ? '*' : a.size));\n }\n\n setVisibleAreaSizes(sizes: MtxSplitOutputAreaSizes): boolean {\n if (sizes.length !== this.displayedAreas.length) {\n return false;\n }\n\n const formatedSizes = sizes.map(s => getInputPositiveNumber(s, null)) as number[];\n const isValid = isUserSizesValid(this.unit, formatedSizes);\n\n if (isValid === false) {\n return false;\n }\n\n this.displayedAreas.forEach((area, i) => (area.component.size = formatedSizes[i]));\n\n this.build(false, true);\n return true;\n }\n\n private build(resetOrders: boolean, resetSizes: boolean): void {\n this.stopDragging();\n\n // ¤ AREAS ORDER\n\n if (resetOrders === true) {\n // If user provided 'order' for each area, use it to sort them.\n if (this.displayedAreas.every(a => a.component.order !== null)) {\n this.displayedAreas.sort(\n (a, b) => (a.component.order as number) - (b.component.order as number)\n );\n }\n\n // Then set real order with multiples of 2, numbers between will be used by gutters.\n this.displayedAreas.forEach((area, i) => {\n area.order = i * 2;\n area.component.setStyleOrder(area.order);\n });\n }\n\n // ¤ AREAS SIZE\n\n if (resetSizes === true) {\n const useUserSizes = isUserSizesValid(\n this.unit,\n this.displayedAreas.map(a => a.component.size) as number[]\n );\n\n switch (this.unit) {\n case 'percent': {\n const defaultSize = 100 / this.displayedAreas.length;\n\n this.displayedAreas.forEach(area => {\n area.size = useUserSizes ? (area.component.size as number) : defaultSize;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n });\n break;\n }\n case 'pixel': {\n if (useUserSizes) {\n this.displayedAreas.forEach(area => {\n area.size = area.component.size;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n });\n } else {\n const wildcardSizeAreas = this.displayedAreas.filter(a => a.component.size === null);\n\n // No wildcard area > Need to select one arbitrarily > first\n if (wildcardSizeAreas.length === 0 && this.displayedAreas.length > 0) {\n this.displayedAreas.forEach((area, i) => {\n area.size = i === 0 ? null : area.component.size;\n area.minSize = i === 0 ? null : getAreaMinSize(area);\n area.maxSize = i === 0 ? null : getAreaMaxSize(area);\n });\n }\n // More than one wildcard area > Need to keep only one arbitrarly > first\n else if (wildcardSizeAreas.length > 1) {\n let alreadyGotOne = false;\n this.displayedAreas.forEach(area => {\n if (area.component.size === null) {\n if (alreadyGotOne === false) {\n area.size = null;\n area.minSize = null;\n area.maxSize = null;\n alreadyGotOne = true;\n } else {\n area.size = 100;\n area.minSize = null;\n area.maxSize = null;\n }\n } else {\n area.size = area.component.size;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n }\n });\n }\n }\n break;\n }\n }\n }\n\n this.refreshStyleSizes();\n this.cdRef.markForCheck();\n }\n\n private refreshStyleSizes(): void {\n ///////////////////////////////////////////\n // PERCENT MODE\n if (this.unit === 'percent') {\n // Only one area > flex-basis 100%\n if (this.displayedAreas.length === 1) {\n this.displayedAreas[0].component.setStyleFlex(0, 0, `100%`, false, false);\n }\n // Multiple areas > use each percent basis\n else {\n const sumGutterSize = this.getNbGutters() * this.gutterSize;\n\n this.displayedAreas.forEach(area => {\n area.component.setStyleFlex(\n 0,\n 0,\n `calc( ${area.size}% - ${((area.size as number) / 100) * sumGutterSize}px )`,\n area.minSize !== null && area.minSize === area.size ? true : false,\n area.maxSize !== null && area.maxSize === area.size ? true : false\n );\n });\n }\n }\n ///////////////////////////////////////////\n // PIXEL MODE\n else if (this.unit === 'pixel') {\n this.displayedAreas.forEach(area => {\n // Area with wildcard size\n if (area.size === null) {\n if (this.displayedAreas.length === 1) {\n area.component.setStyleFlex(1, 1, `100%`, false, false);\n } else {\n area.component.setStyleFlex(1, 1, `auto`, false, false);\n }\n }\n // Area with pixel size\n else {\n // Only one area > flex-basis 100%\n if (this.displayedAreas.length === 1) {\n area.component.setStyleFlex(0, 0, `100%`, false, false);\n }\n // Multiple areas > use each pixel basis\n else {\n area.component.setStyleFlex(\n 0,\n 0,\n `${area.size}px`,\n area.minSize !== null && area.minSize === area.size ? true : false,\n area.maxSize !== null && area.maxSize === area.size ? true : false\n );\n }\n }\n });\n }\n }\n\n _clickTimeout: number | null = null;\n\n clickGutter(event: MouseEvent | TouchEvent, gutterNum: number): void {\n const tempPoint = getPointFromEvent(event) as MtxSplitPoint;\n\n // Be sure mouseup/touchend happened at same point as mousedown/touchstart to trigger click/dblclick\n if (this.startPoint && this.startPoint.x === tempPoint.x && this.startPoint.y === tempPoint.y) {\n // If timeout in progress and new click > clearTimeout & dblClickEvent\n if (this._clickTimeout !== null) {\n window.clearTimeout(this._clickTimeout);\n this._clickTimeout = null;\n this.notify('dblclick', gutterNum);\n this.stopDragging();\n }\n // Else start timeout to call clickEvent at end\n else {\n this._clickTimeout = window.setTimeout(() => {\n this._clickTimeout = null;\n this.notify('click', gutterNum);\n this.stopDragging();\n }, this.gutterDblClickDuration);\n }\n }\n }\n\n startDragging(event: MouseEvent | TouchEvent, gutterOrder: number, gutterNum: number): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.startPoint = getPointFromEvent(event);\n if (this.startPoint === null || this.disabled === true) {\n return;\n }\n\n this.snapshot = {\n gutterNum,\n lastSteppedOffset: 0,\n allAreasSizePixel:\n getElementPixelSize(this.elRef, this.direction) - this.getNbGutters() * this.gutterSize,\n allInvolvedAreasSizePercent: 100,\n areasBeforeGutter: [],\n areasAfterGutter: [],\n };\n\n this.displayedAreas.forEach(area => {\n const areaSnapshot: MtxSplitAreaSnapshot = {\n area,\n sizePixelAtStart: getElementPixelSize(area.component.elRef, this.direction),\n sizePercentAtStart: (this.unit === 'percent' ? area.size : -1) as number, // If pixel mode, anyway, will not be used.\n };\n\n if (area.order < gutterOrder) {\n if (this.restrictMove === true) {\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter = [areaSnapshot];\n } else {\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter.unshift(areaSnapshot);\n }\n } else if (area.order > gutterOrder) {\n if (this.restrictMove === true) {\n if ((this.snapshot as MtxSplitSnapshot).areasAfterGutter.length === 0) {\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter = [areaSnapshot];\n }\n } else {\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter.push(areaSnapshot);\n }\n }\n });\n\n this.snapshot.allInvolvedAreasSizePercent = [\n ...this.snapshot.areasBeforeGutter,\n ...this.snapshot.areasAfterGutter,\n ].reduce((t, a) => t + a.sizePercentAtStart, 0);\n\n if (\n this.snapshot.areasBeforeGutter.length === 0 ||\n this.snapshot.areasAfterGutter.length === 0\n ) {\n return;\n }\n\n this.dragListeners.push(\n this.renderer.listen('document', 'mouseup', this.stopDragging.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchend', this.stopDragging.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchcancel', this.stopDragging.bind(this))\n );\n\n this.ngZone.runOutsideAngular(() => {\n this.dragListeners.push(\n this.renderer.listen('document', 'mousemove', this.dragEvent.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchmove', this.dragEvent.bind(this))\n );\n });\n\n this.displayedAreas.forEach(area => area.component.lockEvents());\n\n this.isDragging = true;\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-dragging');\n this.renderer.addClass(\n this.gutterEls.toArray()[this.snapshot.gutterNum - 1].nativeElement,\n 'mtx-dragged'\n );\n\n this.notify('start', this.snapshot.gutterNum);\n }\n\n private dragEvent(event: MouseEvent | TouchEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (this._clickTimeout !== null) {\n window.clearTimeout(this._clickTimeout);\n this._clickTimeout = null;\n }\n\n if (this.isDragging === false) {\n return;\n }\n\n this.endPoint = getPointFromEvent(event);\n if (this.endPoint === null) {\n return;\n }\n\n // Calculate steppedOffset\n\n let offset =\n this.direction === 'horizontal'\n ? (this.startPoint as MtxSplitPoint).x - this.endPoint.x\n : (this.startPoint as MtxSplitPoint).y - this.endPoint.y;\n if (this.dir === 'rtl' && this.direction === 'horizontal') {\n offset = -offset;\n }\n const steppedOffset = Math.round(offset / this.gutterStep) * this.gutterStep;\n\n if (steppedOffset === (this.snapshot as MtxSplitSnapshot).lastSteppedOffset) {\n return;\n }\n\n (this.snapshot as MtxSplitSnapshot).lastSteppedOffset = steppedOffset;\n\n // Need to know if each gutter side areas could reacts to steppedOffset\n\n let areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -steppedOffset,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n let areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n\n // Each gutter side areas can't absorb all offset\n if (areasBefore.remain !== 0 && areasAfter.remain !== 0) {\n if (Math.abs(areasBefore.remain) === Math.abs(areasAfter.remain)) {\n /** */\n } else if (Math.abs(areasBefore.remain) > Math.abs(areasAfter.remain)) {\n areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset + areasBefore.remain,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n } else {\n areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -(steppedOffset - areasAfter.remain),\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n }\n // Areas before gutter can't absorbs all offset > need to recalculate sizes for areas after gutter.\n else if (areasBefore.remain !== 0) {\n areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset + areasBefore.remain,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n // Areas after gutter can't absorbs all offset > need to recalculate sizes for areas before gutter.\n else if (areasAfter.remain !== 0) {\n areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -(steppedOffset - areasAfter.remain),\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n\n if (this.unit === 'percent') {\n // Hack because of browser messing up with sizes using calc(X% - Ypx) -> el.getBoundingClientRect()\n // If not there, playing with gutters makes total going down to 99.99875% then 99.99286%, 99.98986%,..\n const all = [...areasBefore.list, ...areasAfter.list];\n const areaToReset = all.find(\n a =>\n a.percentAfterAbsorption !== 0 &&\n a.percentAfterAbsorption !== a.areaSnapshot.area.minSize &&\n a.percentAfterAbsorption !== a.areaSnapshot.area.maxSize\n );\n\n if (areaToReset) {\n areaToReset.percentAfterAbsorption =\n (this.snapshot as MtxSplitSnapshot).allInvolvedAreasSizePercent -\n all\n .filter(a => a !== areaToReset)\n .reduce((total, a) => total + a.percentAfterAbsorption, 0);\n }\n }\n\n // Now we know areas could absorb steppedOffset, time to really update sizes\n\n areasBefore.list.forEach(item => updateAreaSize(this.unit, item));\n areasAfter.list.forEach(item => updateAreaSize(this.unit, item));\n\n this.refreshStyleSizes();\n this.notify('progress', (this.snapshot as MtxSplitSnapshot).gutterNum);\n }\n\n private stopDragging(event?: Event): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (this.isDragging === false) {\n return;\n }\n\n this.displayedAreas.forEach(area => area.component.unlockEvents());\n\n while (this.dragListeners.length > 0) {\n const fct = this.dragListeners.pop();\n if (fct) {\n fct();\n }\n }\n\n // Warning: Have to be before \"notify('end')\"\n // because \"notify('end')\"\" can be linked to \"[size]='x'\" > \"build()\" > \"stopDragging()\"\n this.isDragging = false;\n\n // If moved from starting point, notify end\n if (\n this.endPoint &&\n ((this.startPoint as MtxSplitPoint).x !== this.endPoint.x ||\n (this.startPoint as MtxSplitPoint).y !== this.endPoint.y)\n ) {\n this.notify('end', (this.snapshot as MtxSplitSnapshot).gutterNum);\n }\n\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-dragging');\n this.renderer.removeClass(\n this.gutterEls.toArray()[(this.snapshot as MtxSplitSnapshot).gutterNum - 1].nativeElement,\n 'mtx-dragged'\n );\n this.snapshot = null;\n\n // Needed to let (click)=\"clickGutter(...)\" event run and verify if mouse moved or not\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this.startPoint = null;\n this.endPoint = null;\n });\n });\n }\n\n notify(\n type: 'start' | 'progress' | 'end' | 'click' | 'dblclick' | 'transitionEnd',\n gutterNum: number\n ): void {\n const sizes = this.getVisibleAreaSizes();\n\n if (type === 'start') {\n this.dragStart.emit({ gutterNum, sizes });\n } else if (type === 'end') {\n this.dragEnd.emit({ gutterNum, sizes });\n } else if (type === 'click') {\n this.gutterClick.emit({ gutterNum, sizes });\n } else if (type === 'dblclick') {\n this.gutterDblClick.emit({ gutterNum, sizes });\n } else if (type === 'transitionEnd') {\n if (this.transitionEndSubscriber) {\n this.ngZone.run(() => this.transitionEndSubscriber.next(sizes));\n }\n } else if (type === 'progress') {\n // Stay outside zone to allow users do what they want about change detection mechanism.\n this.dragProgressSubject.next({ gutterNum, sizes });\n }\n }\n\n ngOnDestroy(): void {\n this.stopDragging();\n }\n}\n","<ng-content></ng-content>\r\n@for (area of displayedAreas; track area; let index = $index; let last = $last) {\r\n @if (!last) {\r\n <div #gutterEls class=\"mtx-split-gutter\" [class]=\"color ? 'mat-' + color : ''\"\r\n [style.flex-basis.px]=\"gutterSize\"\r\n [style.order]=\"index * 2 + 1\"\r\n (mousedown)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (touchstart)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (mouseup)=\"clickGutter($event, index + 1)\"\r\n (touchend)=\"clickGutter($event, index + 1)\">\r\n <div class=\"mtx-split-gutter-handle\"></div>\r\n </div>\r\n }\r\n}\r\n","import {\n Directive,\n ElementRef,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Renderer2,\n booleanAttribute,\n} from '@angular/core';\n\nimport { MtxSplit } from './split';\nimport { getInputPositiveNumber } from './utils';\n\n@Directive({\n selector: 'mtx-split-pane, [mtx-split-pane]',\n exportAs: 'mtxSplitPane',\n standalone: true,\n})\nexport class MtxSplitPane implements OnInit, OnDestroy {\n /**\n * Order of the area. Used to maintain the order of areas when toggling their visibility.\n * Toggling area visibility without specifying an `order` leads to weird behavior.\n */\n @Input()\n get order() {\n return this._order;\n }\n set order(v: number | null) {\n this._order = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, true, false);\n }\n private _order: number | null = null;\n\n /**\n * Size of the area in selected unit (percent/pixel).\n * - Percent: All areas sizes should equal to `100`, If not, all areas will have the same size.\n * - Pixel: An area with wildcard size (`size=\"*\"`) is mandatory (only one) and\n * can't have `visible=\"false\"` or `minSize`/`maxSize`/`lockSize` properties.\n */\n @Input()\n get size() {\n return this._size;\n }\n set size(v: number | null) {\n this._size = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n private _size: number | null = null;\n\n /** Minimum pixel or percent size, should be equal to or smaller than provided `size`. */\n @Input()\n get minSize() {\n return this._minSize;\n }\n set minSize(v: number | null) {\n this._minSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n private _minSize: number | null = null;\n\n /** Maximum pixel or percent size, should be equal to or larger than provided `size`. */\n @Input()\n get maxSize() {\n return this._maxSize;\n }\n set maxSize(v: number | null) {\n this._maxSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n private _maxSize: number | null = null;\n\n /** Lock area size, same as `minSize`=`maxSize`=`size`. */\n @Input({ transform: booleanAttribute })\n get lockSize() {\n return this._lockSize;\n }\n set lockSize(v: boolean) {\n this.split.updateArea(this, false, true);\n }\n private _lockSize = false;\n\n /** Hide area visually but still present in the DOM, use `ngIf` to completely remove it. */\n @Input({ transform: booleanAttribute })\n get visible() {\n return this._visible;\n }\n set visible(v: boolean) {\n if (this._visible) {\n this.split.showArea(this);\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n } else {\n this.split.hideArea(this);\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n }\n }\n private _visible = true;\n\n private transitionListener!: () => void;\n private readonly lockListeners: Array<() => void> = [];\n\n constructor(\n private ngZone: NgZone,\n public elRef: ElementRef,\n private renderer: Renderer2,\n private split: MtxSplit\n ) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane');\n }\n\n ngOnInit(): void {\n this.split.addArea(this);\n\n this.ngZone.runOutsideAngular(() => {\n this.transitionListener = this.renderer.listen(\n this.elRef.nativeElement,\n 'transitionend',\n (event: TransitionEvent) => {\n // Limit only flex-basis transition to trigger the event\n if (event.propertyName === 'flex-basis') {\n this.split.notify('transitionEnd', -1);\n }\n }\n );\n });\n }\n\n setStyleOrder(value: number): void {\n this.renderer.setStyle(this.elRef.nativeElement, 'order', value);\n }\n\n setStyleFlex(grow: number, shrink: number, basis: string, isMin: boolean, isMax: boolean): void {\n // Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);\n\n if (isMin === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-min');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-min');\n }\n\n if (isMax === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-max');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-max');\n }\n }\n\n lockEvents(): void {\n this.ngZone.runOutsideAngular(() => {\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e: Event) => false)\n );\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e: Event) => false)\n );\n });\n }\n\n unlockEvents(): void {\n while (this.lockListeners.length > 0) {\n const fct = this.lockListeners.pop();\n if (fct) {\n fct();\n }\n }\n }\n\n ngOnDestroy(): void {\n this.unlockEvents();\n\n if (this.transitionListener) {\n this.transitionListener();\n }\n\n this.split.removeArea(this);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MtxSplit } from './split';\nimport { MtxSplitPane } from './split-pane';\n\n@NgModule({\n imports: [CommonModule, MtxSplit, MtxSplitPane],\n exports: [MtxSplit, MtxSplitPane],\n})\nexport class MtxSplitModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MtxSplit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mtxSplit.mjs","sources":["../../../projects/extensions/split/utils.ts","../../../projects/extensions/split/split.ts","../../../projects/extensions/split/split.html","../../../projects/extensions/split/split-pane.ts","../../../projects/extensions/split/split-module.ts","../../../projects/extensions/split/mtxSplit.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\n\nimport {\n MtxSplitArea,\n MtxSplitPoint,\n MtxSplitAreaSnapshot,\n MtxSplitSideAbsorptionCapacity,\n MtxSplitAreaAbsorptionCapacity,\n} from './interfaces';\n\nexport function getPointFromEvent(event: MouseEvent | TouchEvent): MtxSplitPoint | null {\n // TouchEvent\n if (\n (event as TouchEvent).changedTouches !== undefined &&\n (event as TouchEvent).changedTouches.length > 0\n ) {\n return {\n x: (event as TouchEvent).changedTouches[0].clientX,\n y: (event as TouchEvent).changedTouches[0].clientY,\n };\n }\n // MouseEvent\n else if (\n (event as MouseEvent).clientX !== undefined &&\n (event as MouseEvent).clientY !== undefined\n ) {\n return {\n x: (event as MouseEvent).clientX,\n y: (event as MouseEvent).clientY,\n };\n }\n return null;\n}\n\nexport function getElementPixelSize(\n elRef: ElementRef,\n direction: 'horizontal' | 'vertical'\n): number {\n const rect = (elRef.nativeElement as HTMLElement).getBoundingClientRect();\n\n return direction === 'horizontal' ? rect.width : rect.height;\n}\n\nexport function getInputPositiveNumber<T>(v: any, defaultValue: T): number | T {\n if (v === null || v === undefined) {\n return defaultValue;\n }\n\n v = Number(v);\n return !isNaN(v) && v >= 0 ? v : defaultValue;\n}\n\nexport function isUserSizesValid(\n unit: 'percent' | 'pixel',\n sizes: Array<number>\n): boolean | number | void {\n // All sizes have to be not null and total should be 100\n if (unit === 'percent') {\n const total = sizes.reduce((_total, s) => (s !== null ? _total + s : _total), 0);\n return sizes.every(s => s !== null) && total && total > 99.9 && total < 100.1;\n }\n\n // A size at null is mandatory but only one.\n if (unit === 'pixel') {\n return sizes.filter(s => s === null).length === 1;\n }\n}\n\nexport function getAreaMinSize(a: MtxSplitArea): null | number {\n if (a.size === null) {\n return null;\n }\n\n if (a.component.lockSize === true) {\n return a.size;\n }\n\n if (a.component.minSize === null) {\n return null;\n }\n\n if (a.component.minSize > a.size) {\n return a.size;\n }\n\n return a.component.minSize;\n}\n\nexport function getAreaMaxSize(a: MtxSplitArea): null | number {\n if (a.size === null) {\n return null;\n }\n\n if (a.component.lockSize === true) {\n return a.size;\n }\n\n if (a.component.maxSize === null) {\n return null;\n }\n\n if (a.component.maxSize < a.size) {\n return a.size;\n }\n\n return a.component.maxSize;\n}\n\nexport function getGutterSideAbsorptionCapacity(\n unit: 'percent' | 'pixel',\n sideAreas: Array<MtxSplitAreaSnapshot>,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitSideAbsorptionCapacity {\n return sideAreas.reduce(\n (acc: any, area) => {\n const res = getAreaAbsorptionCapacity(unit, area, acc.remain, allAreasSizePixel);\n acc.list.push(res);\n acc.remain = res && res.pixelRemain;\n return acc;\n },\n { remain: pixels, list: [] }\n );\n}\n\nexport function getAreaAbsorptionCapacity(\n unit: 'percent' | 'pixel',\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n // No pain no gain\n if (pixels === 0) {\n return {\n areaSnapshot,\n pixelAbsorb: 0,\n percentAfterAbsorption: areaSnapshot.sizePercentAtStart,\n pixelRemain: 0,\n };\n }\n\n // Area start at zero and need to be reduced, not possible\n if (areaSnapshot.sizePixelAtStart === 0 && pixels < 0) {\n return {\n areaSnapshot,\n pixelAbsorb: 0,\n percentAfterAbsorption: 0,\n pixelRemain: pixels,\n };\n }\n\n if (unit === 'percent') {\n return getAreaAbsorptionCapacityPercent(areaSnapshot, pixels, allAreasSizePixel);\n }\n\n if (unit === 'pixel') {\n return getAreaAbsorptionCapacityPixel(areaSnapshot, pixels, allAreasSizePixel);\n }\n}\n\nexport function getAreaAbsorptionCapacityPercent(\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n const tempPercentSize = (tempPixelSize / allAreasSizePixel) * 100;\n\n // ENLARGE AREA\n\n if (pixels > 0) {\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n if (areaSnapshot.area.maxSize !== null && tempPercentSize > areaSnapshot.area.maxSize) {\n // Use area.area.maxSize as newPercentSize and return calculate pixels remaining\n const maxSizePixel = (areaSnapshot.area.maxSize / 100) * allAreasSizePixel;\n return {\n areaSnapshot,\n pixelAbsorb: maxSizePixel,\n percentAfterAbsorption: areaSnapshot.area.maxSize,\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - maxSizePixel,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: tempPercentSize > 100 ? 100 : tempPercentSize,\n pixelRemain: 0,\n };\n }\n\n // REDUCE AREA\n else if (pixels < 0) {\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n if (areaSnapshot.area.minSize !== null && tempPercentSize < areaSnapshot.area.minSize) {\n // Use area.area.minSize as newPercentSize and return calculate pixels remaining\n const minSizePixel = (areaSnapshot.area.minSize / 100) * allAreasSizePixel;\n return {\n areaSnapshot,\n pixelAbsorb: minSizePixel,\n percentAfterAbsorption: areaSnapshot.area.minSize,\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - minSizePixel,\n };\n }\n // If reduced under zero > return remaining pixels\n else if (tempPercentSize < 0) {\n // Use 0 as newPercentSize and return calculate pixels remaining\n return {\n areaSnapshot,\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: 0,\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: tempPercentSize,\n pixelRemain: 0,\n };\n }\n}\n\nexport function getAreaAbsorptionCapacityPixel(\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n containerSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n\n // ENLARGE AREA\n\n if (pixels > 0) {\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n if (areaSnapshot.area.maxSize !== null && tempPixelSize > areaSnapshot.area.maxSize) {\n return {\n areaSnapshot,\n pixelAbsorb: areaSnapshot.area.maxSize - areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: -1,\n pixelRemain: tempPixelSize - areaSnapshot.area.maxSize,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: -1,\n pixelRemain: 0,\n };\n }\n\n // REDUCE AREA\n else if (pixels < 0) {\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n if (areaSnapshot.area.minSize !== null && tempPixelSize < areaSnapshot.area.minSize) {\n return {\n areaSnapshot,\n pixelAbsorb: areaSnapshot.area.minSize + pixels - tempPixelSize,\n percentAfterAbsorption: -1,\n pixelRemain: tempPixelSize - areaSnapshot.area.minSize,\n };\n }\n // If reduced under zero > return remaining pixels\n else if (tempPixelSize < 0) {\n return {\n areaSnapshot,\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: -1,\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: -1,\n pixelRemain: 0,\n };\n }\n}\n\nexport function updateAreaSize(unit: 'percent' | 'pixel', item: MtxSplitAreaAbsorptionCapacity) {\n if (unit === 'percent') {\n item.areaSnapshot.area.size = item.percentAfterAbsorption;\n } else if (unit === 'pixel') {\n // Update size except for the wildcard size area\n if (item.areaSnapshot.area.size !== null) {\n item.areaSnapshot.area.size = item.areaSnapshot.sizePixelAtStart + item.pixelAbsorb;\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n Renderer2,\n ViewChildren,\n ViewEncapsulation,\n booleanAttribute,\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { Observable, Subject, Subscriber } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport {\n MtxSplitArea,\n MtxSplitAreaSnapshot,\n MtxSplitDefaultOptions,\n MtxSplitOutputAreaSizes,\n MtxSplitOutputData,\n MtxSplitPoint,\n MtxSplitSnapshot,\n} from './interfaces';\nimport { MtxSplitPane } from './split-pane';\nimport {\n getAreaMaxSize,\n getAreaMinSize,\n getElementPixelSize,\n getGutterSideAbsorptionCapacity,\n getInputPositiveNumber,\n getPointFromEvent,\n isUserSizesValid,\n updateAreaSize,\n} from './utils';\n\n/** Injection token that can be used to specify default split options. */\nexport const MTX_SPLIT_DEFAULT_OPTIONS = new InjectionToken<MtxSplitDefaultOptions>(\n 'mtx-split-default-options'\n);\n\n/**\n * mtx-split\n *\n *\n * PERCENT MODE ([unit]=\"'percent'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 20 30 20 15 15 | <-- [size]=\"x\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * |calc(20% - 8px) calc(30% - 12px) calc(20% - 8px) calc(15% - 6px) calc(15% - 6px)| <-- CSS flex-basis property (with flex-grow&shrink at 0)\n * | 152px 228px 152px 114px 114px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n * flex-basis = calc( { area.size }% - { area.size/100 * nbGutter*gutterSize }px );\n *\n *\n * PIXEL MODE ([unit]=\"'pixel'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 100 250 * 150 100 | <-- [size]=\"y\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * | 0 0 100px 0 0 250px 1 1 auto 0 0 150px 0 0 100px | <-- CSS flex property (flex-grow/flex-shrink/flex-basis)\n * | 100px 250px 200px 150px 100px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n *\n */\n\n@Component({\n selector: 'mtx-split',\n exportAs: 'mtxSplit',\n host: {\n class: 'mtx-split',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './split.scss',\n templateUrl: './split.html',\n standalone: true,\n})\nexport class MtxSplit implements AfterViewInit, OnDestroy {\n @Input() color: ThemePalette;\n\n /** The split direction. */\n @Input()\n get direction() {\n return this._direction;\n }\n set direction(v: 'horizontal' | 'vertical') {\n this._direction = v === 'vertical' ? 'vertical' : 'horizontal';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._direction}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._direction === 'vertical' ? 'horizontal' : 'vertical'}`\n );\n\n this.build(false, false);\n }\n private _direction: 'horizontal' | 'vertical' = 'horizontal';\n\n /** The unit you want to specify area sizes. */\n @Input()\n get unit() {\n return this._unit;\n }\n set unit(v: 'percent' | 'pixel') {\n this._unit = v === 'pixel' ? 'pixel' : 'percent';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._unit}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._unit === 'pixel' ? 'percent' : 'pixel'}`\n );\n\n this.build(false, true);\n }\n private _unit: 'percent' | 'pixel' = 'percent';\n\n /** Gutters's size (dragging elements) in pixels. */\n @Input()\n get gutterSize() {\n return this._gutterSize;\n }\n set gutterSize(v: number) {\n this._gutterSize = getInputPositiveNumber(v, 4);\n\n this.build(false, false);\n }\n private _gutterSize = 4;\n\n /** Gutter step while moving in pixels. */\n @Input()\n get gutterStep() {\n return this._gutterStep;\n }\n set gutterStep(v: number) {\n this._gutterStep = getInputPositiveNumber(v, 1);\n }\n private _gutterStep = 1;\n\n /** Set to true if you want to limit gutter move to adjacent areas only. */\n @Input({ transform: booleanAttribute }) restrictMove = false;\n\n /** Add transition when toggling visibility using `visible` or `size` changes. */\n @Input({ transform: booleanAttribute })\n get useTransition() {\n return this._useTransition;\n }\n set useTransition(v: boolean) {\n this._useTransition = v;\n\n if (this._useTransition) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-transition');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-transition');\n }\n }\n private _useTransition = false;\n\n /**\n * Disable the dragging feature (remove cursor/image on gutters).\n * `gutterClick`/`gutterDblClick` still emits.\n */\n @Input({ transform: booleanAttribute })\n get disabled() {\n return this._disabled;\n }\n set disabled(v: boolean) {\n this._disabled = v;\n\n if (this._disabled) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-disabled');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-disabled');\n }\n }\n private _disabled = false;\n\n /** Indicates the directionality of the areas. */\n @Input()\n get dir() {\n return this._dir;\n }\n set dir(v: 'ltr' | 'rtl') {\n this._dir = v === 'rtl' ? 'rtl' : 'ltr';\n\n this.renderer.setAttribute(this.elRef.nativeElement, 'dir', this._dir);\n }\n private _dir: 'ltr' | 'rtl' = 'ltr';\n\n /**\n * Milliseconds to detect a double click on a gutter. Set it around 300-500ms if\n * you want to use `gutterDblClick` event.\n */\n @Input()\n get gutterDblClickDuration() {\n return this._gutterDblClickDuration;\n }\n set gutterDblClickDuration(v: number) {\n this._gutterDblClickDuration = getInputPositiveNumber(v, 0);\n }\n private _gutterDblClickDuration = 0;\n\n /** Event emitted when drag starts. */\n @Output() dragStart = new EventEmitter<MtxSplitOutputData>(false);\n /** Event emitted when drag ends. */\n @Output() dragEnd = new EventEmitter<MtxSplitOutputData>(false);\n /** Event emitted when user clicks on a gutter. */\n @Output() gutterClick = new EventEmitter<MtxSplitOutputData>(false);\n /** Event emitted when user double clicks on a gutter. */\n @Output() gutterDblClick = new EventEmitter<MtxSplitOutputData>(false);\n /**\n * Event emitted when transition ends (could be triggered from `visible` or `size` changes).\n * Only if `useTransition` equals true.\n */\n @Output()\n get transitionEnd(): Observable<MtxSplitOutputAreaSizes> {\n return new Observable(subscriber => (this.transitionEndSubscriber = subscriber)).pipe(\n debounceTime<any>(20)\n );\n }\n private transitionEndSubscriber!: Subscriber<MtxSplitOutputAreaSizes>;\n\n private dragProgressSubject: Subject<MtxSplitOutputData> = new Subject();\n dragProgress$: Observable<MtxSplitOutputData> = this.dragProgressSubject.asObservable();\n\n private isDragging = false;\n private dragListeners: Array<() => void> = [];\n private snapshot: MtxSplitSnapshot | null = null;\n private startPoint: MtxSplitPoint | null = null;\n private endPoint: MtxSplitPoint | null = null;\n\n public readonly displayedAreas: Array<MtxSplitArea> = [];\n private readonly hidedAreas: Array<MtxSplitArea> = [];\n\n @ViewChildren('gutterEls') private gutterEls!: QueryList<ElementRef>;\n\n constructor(\n private ngZone: NgZone,\n private elRef: ElementRef,\n private cdRef: ChangeDetectorRef,\n private renderer: Renderer2,\n @Optional()\n @Inject(MTX_SPLIT_DEFAULT_OPTIONS)\n protected _defaultOptions?: MtxSplitDefaultOptions\n ) {\n this.color = _defaultOptions?.color ?? 'primary';\n this.direction = _defaultOptions?.direction ?? 'horizontal';\n this.dir = _defaultOptions?.dir ?? 'ltr';\n this.unit = _defaultOptions?.unit ?? 'percent';\n this.gutterDblClickDuration = _defaultOptions?.gutterDblClickDuration ?? 0;\n this.gutterSize = _defaultOptions?.gutterSize ?? 4;\n this.gutterStep = _defaultOptions?.gutterStep ?? 1;\n this.restrictMove = _defaultOptions?.restrictMove ?? false;\n this.useTransition = _defaultOptions?.useTransition ?? false;\n }\n\n ngAfterViewInit() {\n this.ngZone.runOutsideAngular(() => {\n // To avoid transition at first rendering\n setTimeout(() => this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-init'));\n });\n }\n\n private getNbGutters(): number {\n return this.displayedAreas.length === 0 ? 0 : this.displayedAreas.length - 1;\n }\n\n addArea(component: MtxSplitPane): void {\n const newArea: MtxSplitArea = {\n component,\n order: 0,\n size: 0,\n minSize: null,\n maxSize: null,\n };\n\n if (component.visible === true) {\n this.displayedAreas.push(newArea);\n\n this.build(true, true);\n } else {\n this.hidedAreas.push(newArea);\n }\n }\n\n removeArea(component: MtxSplitPane): void {\n if (this.displayedAreas.some(a => a.component === component)) {\n const area = this.displayedAreas.find(a => a.component === component) as MtxSplitArea;\n this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n\n this.build(true, true);\n } else if (this.hidedAreas.some(a => a.component === component)) {\n const area = this.hidedAreas.find(a => a.component === component) as MtxSplitArea;\n this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n }\n }\n\n updateArea(component: MtxSplitPane, resetOrders: boolean, resetSizes: boolean): void {\n if (component.visible === true) {\n this.build(resetOrders, resetSizes);\n }\n }\n\n showArea(component: MtxSplitPane): void {\n const area = this.hidedAreas.find(a => a.component === component);\n if (area === undefined) {\n return;\n }\n\n const areas = this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n this.displayedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n hideArea(comp: MtxSplitPane): void {\n const area = this.displayedAreas.find(a => a.component === comp);\n if (area === undefined) {\n return;\n }\n\n const areas = this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n areas.forEach(_area => {\n _area.order = 0;\n _area.size = 0;\n });\n this.hidedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n getVisibleAreaSizes(): MtxSplitOutputAreaSizes {\n return this.displayedAreas.map(a => (a.size === null ? '*' : a.size));\n }\n\n setVisibleAreaSizes(sizes: MtxSplitOutputAreaSizes): boolean {\n if (sizes.length !== this.displayedAreas.length) {\n return false;\n }\n\n const formatedSizes = sizes.map(s => getInputPositiveNumber(s, null)) as number[];\n const isValid = isUserSizesValid(this.unit, formatedSizes);\n\n if (isValid === false) {\n return false;\n }\n\n this.displayedAreas.forEach((area, i) => (area.component.size = formatedSizes[i]));\n\n this.build(false, true);\n return true;\n }\n\n private build(resetOrders: boolean, resetSizes: boolean): void {\n this.stopDragging();\n\n // ¤ AREAS ORDER\n\n if (resetOrders === true) {\n // If user provided 'order' for each area, use it to sort them.\n if (this.displayedAreas.every(a => a.component.order !== null)) {\n this.displayedAreas.sort(\n (a, b) => (a.component.order as number) - (b.component.order as number)\n );\n }\n\n // Then set real order with multiples of 2, numbers between will be used by gutters.\n this.displayedAreas.forEach((area, i) => {\n area.order = i * 2;\n area.component.setStyleOrder(area.order);\n });\n }\n\n // ¤ AREAS SIZE\n\n if (resetSizes === true) {\n const useUserSizes = isUserSizesValid(\n this.unit,\n this.displayedAreas.map(a => a.component.size) as number[]\n );\n\n switch (this.unit) {\n case 'percent': {\n const defaultSize = 100 / this.displayedAreas.length;\n\n this.displayedAreas.forEach(area => {\n area.size = useUserSizes ? (area.component.size as number) : defaultSize;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n });\n break;\n }\n case 'pixel': {\n if (useUserSizes) {\n this.displayedAreas.forEach(area => {\n area.size = area.component.size;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n });\n } else {\n const wildcardSizeAreas = this.displayedAreas.filter(a => a.component.size === null);\n\n // No wildcard area > Need to select one arbitrarily > first\n if (wildcardSizeAreas.length === 0 && this.displayedAreas.length > 0) {\n this.displayedAreas.forEach((area, i) => {\n area.size = i === 0 ? null : area.component.size;\n area.minSize = i === 0 ? null : getAreaMinSize(area);\n area.maxSize = i === 0 ? null : getAreaMaxSize(area);\n });\n }\n // More than one wildcard area > Need to keep only one arbitrarly > first\n else if (wildcardSizeAreas.length > 1) {\n let alreadyGotOne = false;\n this.displayedAreas.forEach(area => {\n if (area.component.size === null) {\n if (alreadyGotOne === false) {\n area.size = null;\n area.minSize = null;\n area.maxSize = null;\n alreadyGotOne = true;\n } else {\n area.size = 100;\n area.minSize = null;\n area.maxSize = null;\n }\n } else {\n area.size = area.component.size;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n }\n });\n }\n }\n break;\n }\n }\n }\n\n this.refreshStyleSizes();\n this.cdRef.markForCheck();\n }\n\n private refreshStyleSizes(): void {\n ///////////////////////////////////////////\n // PERCENT MODE\n if (this.unit === 'percent') {\n // Only one area > flex-basis 100%\n if (this.displayedAreas.length === 1) {\n this.displayedAreas[0].component.setStyleFlex(0, 0, `100%`, false, false);\n }\n // Multiple areas > use each percent basis\n else {\n const sumGutterSize = this.getNbGutters() * this.gutterSize;\n\n this.displayedAreas.forEach(area => {\n area.component.setStyleFlex(\n 0,\n 0,\n `calc( ${area.size}% - ${((area.size as number) / 100) * sumGutterSize}px )`,\n area.minSize !== null && area.minSize === area.size ? true : false,\n area.maxSize !== null && area.maxSize === area.size ? true : false\n );\n });\n }\n }\n ///////////////////////////////////////////\n // PIXEL MODE\n else if (this.unit === 'pixel') {\n this.displayedAreas.forEach(area => {\n // Area with wildcard size\n if (area.size === null) {\n if (this.displayedAreas.length === 1) {\n area.component.setStyleFlex(1, 1, `100%`, false, false);\n } else {\n area.component.setStyleFlex(1, 1, `auto`, false, false);\n }\n }\n // Area with pixel size\n else {\n // Only one area > flex-basis 100%\n if (this.displayedAreas.length === 1) {\n area.component.setStyleFlex(0, 0, `100%`, false, false);\n }\n // Multiple areas > use each pixel basis\n else {\n area.component.setStyleFlex(\n 0,\n 0,\n `${area.size}px`,\n area.minSize !== null && area.minSize === area.size ? true : false,\n area.maxSize !== null && area.maxSize === area.size ? true : false\n );\n }\n }\n });\n }\n }\n\n _clickTimeout: number | null = null;\n\n clickGutter(event: MouseEvent | TouchEvent, gutterNum: number): void {\n const tempPoint = getPointFromEvent(event) as MtxSplitPoint;\n\n // Be sure mouseup/touchend happened at same point as mousedown/touchstart to trigger click/dblclick\n if (this.startPoint && this.startPoint.x === tempPoint.x && this.startPoint.y === tempPoint.y) {\n // If timeout in progress and new click > clearTimeout & dblClickEvent\n if (this._clickTimeout !== null) {\n window.clearTimeout(this._clickTimeout);\n this._clickTimeout = null;\n this.notify('dblclick', gutterNum);\n this.stopDragging();\n }\n // Else start timeout to call clickEvent at end\n else {\n this._clickTimeout = window.setTimeout(() => {\n this._clickTimeout = null;\n this.notify('click', gutterNum);\n this.stopDragging();\n }, this.gutterDblClickDuration);\n }\n }\n }\n\n startDragging(event: MouseEvent | TouchEvent, gutterOrder: number, gutterNum: number): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.startPoint = getPointFromEvent(event);\n if (this.startPoint === null || this.disabled === true) {\n return;\n }\n\n this.snapshot = {\n gutterNum,\n lastSteppedOffset: 0,\n allAreasSizePixel:\n getElementPixelSize(this.elRef, this.direction) - this.getNbGutters() * this.gutterSize,\n allInvolvedAreasSizePercent: 100,\n areasBeforeGutter: [],\n areasAfterGutter: [],\n };\n\n this.displayedAreas.forEach(area => {\n const areaSnapshot: MtxSplitAreaSnapshot = {\n area,\n sizePixelAtStart: getElementPixelSize(area.component.elRef, this.direction),\n sizePercentAtStart: (this.unit === 'percent' ? area.size : -1) as number, // If pixel mode, anyway, will not be used.\n };\n\n if (area.order < gutterOrder) {\n if (this.restrictMove === true) {\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter = [areaSnapshot];\n } else {\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter.unshift(areaSnapshot);\n }\n } else if (area.order > gutterOrder) {\n if (this.restrictMove === true) {\n if ((this.snapshot as MtxSplitSnapshot).areasAfterGutter.length === 0) {\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter = [areaSnapshot];\n }\n } else {\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter.push(areaSnapshot);\n }\n }\n });\n\n this.snapshot.allInvolvedAreasSizePercent = [\n ...this.snapshot.areasBeforeGutter,\n ...this.snapshot.areasAfterGutter,\n ].reduce((t, a) => t + a.sizePercentAtStart, 0);\n\n if (\n this.snapshot.areasBeforeGutter.length === 0 ||\n this.snapshot.areasAfterGutter.length === 0\n ) {\n return;\n }\n\n this.dragListeners.push(\n this.renderer.listen('document', 'mouseup', this.stopDragging.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchend', this.stopDragging.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchcancel', this.stopDragging.bind(this))\n );\n\n this.ngZone.runOutsideAngular(() => {\n this.dragListeners.push(\n this.renderer.listen('document', 'mousemove', this.dragEvent.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchmove', this.dragEvent.bind(this))\n );\n });\n\n this.displayedAreas.forEach(area => area.component.lockEvents());\n\n this.isDragging = true;\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-dragging');\n this.renderer.addClass(\n this.gutterEls.toArray()[this.snapshot.gutterNum - 1].nativeElement,\n 'mtx-dragged'\n );\n\n this.notify('start', this.snapshot.gutterNum);\n }\n\n private dragEvent(event: MouseEvent | TouchEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (this._clickTimeout !== null) {\n window.clearTimeout(this._clickTimeout);\n this._clickTimeout = null;\n }\n\n if (this.isDragging === false) {\n return;\n }\n\n this.endPoint = getPointFromEvent(event);\n if (this.endPoint === null) {\n return;\n }\n\n // Calculate steppedOffset\n\n let offset =\n this.direction === 'horizontal'\n ? (this.startPoint as MtxSplitPoint).x - this.endPoint.x\n : (this.startPoint as MtxSplitPoint).y - this.endPoint.y;\n if (this.dir === 'rtl' && this.direction === 'horizontal') {\n offset = -offset;\n }\n const steppedOffset = Math.round(offset / this.gutterStep) * this.gutterStep;\n\n if (steppedOffset === (this.snapshot as MtxSplitSnapshot).lastSteppedOffset) {\n return;\n }\n\n (this.snapshot as MtxSplitSnapshot).lastSteppedOffset = steppedOffset;\n\n // Need to know if each gutter side areas could reacts to steppedOffset\n\n let areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -steppedOffset,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n let areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n\n // Each gutter side areas can't absorb all offset\n if (areasBefore.remain !== 0 && areasAfter.remain !== 0) {\n if (Math.abs(areasBefore.remain) === Math.abs(areasAfter.remain)) {\n /** */\n } else if (Math.abs(areasBefore.remain) > Math.abs(areasAfter.remain)) {\n areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset + areasBefore.remain,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n } else {\n areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -(steppedOffset - areasAfter.remain),\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n }\n // Areas before gutter can't absorbs all offset > need to recalculate sizes for areas after gutter.\n else if (areasBefore.remain !== 0) {\n areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset + areasBefore.remain,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n // Areas after gutter can't absorbs all offset > need to recalculate sizes for areas before gutter.\n else if (areasAfter.remain !== 0) {\n areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -(steppedOffset - areasAfter.remain),\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n\n if (this.unit === 'percent') {\n // Hack because of browser messing up with sizes using calc(X% - Ypx) -> el.getBoundingClientRect()\n // If not there, playing with gutters makes total going down to 99.99875% then 99.99286%, 99.98986%,..\n const all = [...areasBefore.list, ...areasAfter.list];\n const areaToReset = all.find(\n a =>\n a.percentAfterAbsorption !== 0 &&\n a.percentAfterAbsorption !== a.areaSnapshot.area.minSize &&\n a.percentAfterAbsorption !== a.areaSnapshot.area.maxSize\n );\n\n if (areaToReset) {\n areaToReset.percentAfterAbsorption =\n (this.snapshot as MtxSplitSnapshot).allInvolvedAreasSizePercent -\n all\n .filter(a => a !== areaToReset)\n .reduce((total, a) => total + a.percentAfterAbsorption, 0);\n }\n }\n\n // Now we know areas could absorb steppedOffset, time to really update sizes\n\n areasBefore.list.forEach(item => updateAreaSize(this.unit, item));\n areasAfter.list.forEach(item => updateAreaSize(this.unit, item));\n\n this.refreshStyleSizes();\n this.notify('progress', (this.snapshot as MtxSplitSnapshot).gutterNum);\n }\n\n private stopDragging(event?: Event): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (this.isDragging === false) {\n return;\n }\n\n this.displayedAreas.forEach(area => area.component.unlockEvents());\n\n while (this.dragListeners.length > 0) {\n const fct = this.dragListeners.pop();\n if (fct) {\n fct();\n }\n }\n\n // Warning: Have to be before \"notify('end')\"\n // because \"notify('end')\"\" can be linked to \"[size]='x'\" > \"build()\" > \"stopDragging()\"\n this.isDragging = false;\n\n // If moved from starting point, notify end\n if (\n this.endPoint &&\n ((this.startPoint as MtxSplitPoint).x !== this.endPoint.x ||\n (this.startPoint as MtxSplitPoint).y !== this.endPoint.y)\n ) {\n this.notify('end', (this.snapshot as MtxSplitSnapshot).gutterNum);\n }\n\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-dragging');\n this.renderer.removeClass(\n this.gutterEls.toArray()[(this.snapshot as MtxSplitSnapshot).gutterNum - 1].nativeElement,\n 'mtx-dragged'\n );\n this.snapshot = null;\n\n // Needed to let (click)=\"clickGutter(...)\" event run and verify if mouse moved or not\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this.startPoint = null;\n this.endPoint = null;\n });\n });\n }\n\n notify(\n type: 'start' | 'progress' | 'end' | 'click' | 'dblclick' | 'transitionEnd',\n gutterNum: number\n ): void {\n const sizes = this.getVisibleAreaSizes();\n\n if (type === 'start') {\n this.dragStart.emit({ gutterNum, sizes });\n } else if (type === 'end') {\n this.dragEnd.emit({ gutterNum, sizes });\n } else if (type === 'click') {\n this.gutterClick.emit({ gutterNum, sizes });\n } else if (type === 'dblclick') {\n this.gutterDblClick.emit({ gutterNum, sizes });\n } else if (type === 'transitionEnd') {\n if (this.transitionEndSubscriber) {\n this.ngZone.run(() => this.transitionEndSubscriber.next(sizes));\n }\n } else if (type === 'progress') {\n // Stay outside zone to allow users do what they want about change detection mechanism.\n this.dragProgressSubject.next({ gutterNum, sizes });\n }\n }\n\n ngOnDestroy(): void {\n this.stopDragging();\n }\n}\n","<ng-content></ng-content>\r\n@for (area of displayedAreas; track area; let index = $index; let last = $last) {\r\n @if (!last) {\r\n <div #gutterEls class=\"mtx-split-gutter\" [class]=\"color ? 'mat-' + color : ''\"\r\n [style.flex-basis.px]=\"gutterSize\"\r\n [style.order]=\"index * 2 + 1\"\r\n (mousedown)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (touchstart)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (mouseup)=\"clickGutter($event, index + 1)\"\r\n (touchend)=\"clickGutter($event, index + 1)\">\r\n <div class=\"mtx-split-gutter-handle\"></div>\r\n </div>\r\n }\r\n}\r\n","import {\n Directive,\n ElementRef,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Renderer2,\n booleanAttribute,\n} from '@angular/core';\n\nimport { MtxSplit } from './split';\nimport { getInputPositiveNumber } from './utils';\n\n@Directive({\n selector: 'mtx-split-pane, [mtx-split-pane]',\n exportAs: 'mtxSplitPane',\n standalone: true,\n})\nexport class MtxSplitPane implements OnInit, OnDestroy {\n /**\n * Order of the area. Used to maintain the order of areas when toggling their visibility.\n * Toggling area visibility without specifying an `order` leads to weird behavior.\n */\n @Input()\n get order() {\n return this._order;\n }\n set order(v: number | null) {\n this._order = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, true, false);\n }\n private _order: number | null = null;\n\n /**\n * Size of the area in selected unit (percent/pixel).\n * - Percent: All areas sizes should equal to `100`, If not, all areas will have the same size.\n * - Pixel: An area with wildcard size (`size=\"*\"`) is mandatory (only one) and\n * can't have `visible=\"false\"` or `minSize`/`maxSize`/`lockSize` properties.\n */\n @Input()\n get size() {\n return this._size;\n }\n set size(v: number | null) {\n this._size = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n private _size: number | null = null;\n\n /** Minimum pixel or percent size, should be equal to or smaller than provided `size`. */\n @Input()\n get minSize() {\n return this._minSize;\n }\n set minSize(v: number | null) {\n this._minSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n private _minSize: number | null = null;\n\n /** Maximum pixel or percent size, should be equal to or larger than provided `size`. */\n @Input()\n get maxSize() {\n return this._maxSize;\n }\n set maxSize(v: number | null) {\n this._maxSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n private _maxSize: number | null = null;\n\n /** Lock area size, same as `minSize`=`maxSize`=`size`. */\n @Input({ transform: booleanAttribute })\n get lockSize() {\n return this._lockSize;\n }\n set lockSize(v: boolean) {\n this._lockSize = v;\n\n this.split.updateArea(this, false, true);\n }\n private _lockSize = false;\n\n /** Hide area visually but still present in the DOM, use `ngIf` to completely remove it. */\n @Input({ transform: booleanAttribute })\n get visible() {\n return this._visible;\n }\n set visible(v: boolean) {\n this._visible = v;\n\n if (this._visible) {\n this.split.showArea(this);\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n } else {\n this.split.hideArea(this);\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n }\n }\n private _visible = true;\n\n private transitionListener!: () => void;\n private readonly lockListeners: Array<() => void> = [];\n\n constructor(\n private ngZone: NgZone,\n public elRef: ElementRef,\n private renderer: Renderer2,\n private split: MtxSplit\n ) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane');\n }\n\n ngOnInit(): void {\n this.split.addArea(this);\n\n this.ngZone.runOutsideAngular(() => {\n this.transitionListener = this.renderer.listen(\n this.elRef.nativeElement,\n 'transitionend',\n (event: TransitionEvent) => {\n // Limit only flex-basis transition to trigger the event\n if (event.propertyName === 'flex-basis') {\n this.split.notify('transitionEnd', -1);\n }\n }\n );\n });\n }\n\n setStyleOrder(value: number): void {\n this.renderer.setStyle(this.elRef.nativeElement, 'order', value);\n }\n\n setStyleFlex(grow: number, shrink: number, basis: string, isMin: boolean, isMax: boolean): void {\n // Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);\n\n if (isMin === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-min');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-min');\n }\n\n if (isMax === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-max');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-max');\n }\n }\n\n lockEvents(): void {\n this.ngZone.runOutsideAngular(() => {\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e: Event) => false)\n );\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e: Event) => false)\n );\n });\n }\n\n unlockEvents(): void {\n while (this.lockListeners.length > 0) {\n const fct = this.lockListeners.pop();\n if (fct) {\n fct();\n }\n }\n }\n\n ngOnDestroy(): void {\n this.unlockEvents();\n\n if (this.transitionListener) {\n this.transitionListener();\n }\n\n this.split.removeArea(this);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MtxSplit } from './split';\nimport { MtxSplitPane } from './split-pane';\n\n@NgModule({\n imports: [CommonModule, MtxSplit, MtxSplitPane],\n exports: [MtxSplit, MtxSplitPane],\n})\nexport class MtxSplitModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MtxSplit"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ng-matero/extensions",
|
|
3
|
-
"version": "18.0.
|
|
3
|
+
"version": "18.0.3",
|
|
4
4
|
"description": "Angular Material Extensions",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -84,18 +84,18 @@
|
|
|
84
84
|
"esm": "./esm2022/colorpicker/mtxColorpicker.mjs",
|
|
85
85
|
"default": "./fesm2022/mtxColorpicker.mjs"
|
|
86
86
|
},
|
|
87
|
-
"./column-resize": {
|
|
88
|
-
"types": "./column-resize/index.d.ts",
|
|
89
|
-
"esm2022": "./esm2022/column-resize/mtxColumnResize.mjs",
|
|
90
|
-
"esm": "./esm2022/column-resize/mtxColumnResize.mjs",
|
|
91
|
-
"default": "./fesm2022/mtxColumnResize.mjs"
|
|
92
|
-
},
|
|
93
87
|
"./core": {
|
|
94
88
|
"types": "./core/index.d.ts",
|
|
95
89
|
"esm2022": "./esm2022/core/mtxCore.mjs",
|
|
96
90
|
"esm": "./esm2022/core/mtxCore.mjs",
|
|
97
91
|
"default": "./fesm2022/mtxCore.mjs"
|
|
98
92
|
},
|
|
93
|
+
"./column-resize": {
|
|
94
|
+
"types": "./column-resize/index.d.ts",
|
|
95
|
+
"esm2022": "./esm2022/column-resize/mtxColumnResize.mjs",
|
|
96
|
+
"esm": "./esm2022/column-resize/mtxColumnResize.mjs",
|
|
97
|
+
"default": "./fesm2022/mtxColumnResize.mjs"
|
|
98
|
+
},
|
|
99
99
|
"./datetimepicker": {
|
|
100
100
|
"types": "./datetimepicker/index.d.ts",
|
|
101
101
|
"esm2022": "./esm2022/datetimepicker/mtxDatetimepicker.mjs",
|