ngx-beacon-notify 1.2.6 → 1.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/beacon/beacon.component.mjs +14 -1
- package/esm2022/lib/beacon-notify.service.mjs +11 -1
- package/esm2022/lib/types/interfaces/index.mjs +1 -1
- package/fesm2022/ngx-beacon-notify.mjs +23 -0
- package/fesm2022/ngx-beacon-notify.mjs.map +1 -1
- package/lib/beacon/beacon.component.d.ts +1 -0
- package/lib/beacon-notify.service.d.ts +4 -0
- package/lib/types/interfaces/index.d.ts +6 -0
- package/package.json +1 -1
|
@@ -30,6 +30,8 @@ export class BeaconNotifyComponent {
|
|
|
30
30
|
ngAfterViewInit() {
|
|
31
31
|
// Get beacon
|
|
32
32
|
const beacon = this.beaconDOM = this.beaconService.getBeaconContainer.nativeElement.querySelector(`#bc_${this.beacon.bid}`);
|
|
33
|
+
// Resolve font weight for title and body
|
|
34
|
+
this.resolveFontWeightForComponents(beacon);
|
|
33
35
|
// Resolve possible focus for beacon
|
|
34
36
|
this.resolvePossibleFocusForBeacon(beacon);
|
|
35
37
|
setTimeout(() => {
|
|
@@ -100,6 +102,17 @@ export class BeaconNotifyComponent {
|
|
|
100
102
|
beacon.classList.add(String(this.beacon.animationClass));
|
|
101
103
|
}
|
|
102
104
|
}
|
|
105
|
+
// Resolve font weight for title and body
|
|
106
|
+
resolveFontWeightForComponents(beacon) {
|
|
107
|
+
if (this.beacon.fontWeightTitle.trim()) {
|
|
108
|
+
const title = beacon.querySelector('div.beacon-message-header');
|
|
109
|
+
title && (title.style.fontWeight = this.beacon.fontWeightTitle);
|
|
110
|
+
}
|
|
111
|
+
if (this.beacon.fontWeightBody.trim()) {
|
|
112
|
+
const body = beacon.querySelector('div.beacon-message-body');
|
|
113
|
+
body && (body.style.fontWeight = this.beacon.fontWeightBody);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
103
116
|
// Resolve focus beacon
|
|
104
117
|
resolvePossibleFocusForBeacon(beacon, createOverlay = true) {
|
|
105
118
|
const activeFocusBeaconId = this.beaconService.getActiveFocusBeaconId;
|
|
@@ -140,4 +153,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
|
140
153
|
}], ctorParameters: () => [{ type: i1.BeaconNotifyService }, { type: i2.DomSanitizer }], propDecorators: { beacon: [{
|
|
141
154
|
type: Input
|
|
142
155
|
}] } });
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhY29uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYmVhY29uL2JlYWNvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2JlYWNvbi9iZWFjb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7OztBQVVoRSxNQUFNLE9BQU8scUJBQXFCO0lBS1o7SUFDVjtJQUxELE1BQU0sQ0FBZ0I7SUFDdkIsU0FBUyxDQUFjO0lBQ3hCLHFCQUFxQixDQUFXO0lBRXZDLFlBQW9CLGFBQWtDLEVBQzVDLFNBQXVCO1FBRGIsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBQzVDLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDL0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUE7SUFDMUUsQ0FBQztJQUVELFFBQVE7UUFDTixtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7WUFDNUMsS0FBSyxFQUFFLElBQUk7WUFDWCxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHO1NBQ3BCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxlQUFlO1FBQ2IsYUFBYTtRQUNiLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO1FBQzNILG9DQUFvQztRQUNwQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDMUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLHdCQUF3QjtZ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LENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTs7Z0JBQ2xFLElBQUksQ0FBQyxhQUFhLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUM3RSxDQUFDO0lBQ0gsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixXQUFXLENBQUMsYUFBa0IsRUFBRSxVQUF5QjtRQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQztnQkFDNUMsTUFBTSxFQUFFLElBQUk7Z0JBQ1osRUFBRSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7YUFDeEQsQ0FBQyxDQUFBO1FBQ0osQ0FBQztJQUNILENBQUM7dUdBbklVLHFCQUFxQjsyRkFBckIscUJBQXFCLGdGQ1ZsQyxrK0ZBNkNNOzsyRkRuQ08scUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLFlBQVk7bUhBS2IsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVhY29uTm90aWZ5U2VydmljZSB9IGZyb20gJy4uL2JlYWNvbi1ub3RpZnkuc2VydmljZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBJQmVhY29uQ29uZmlnLCBJQmVhY29uRXZlbnRNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYmVhY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JlYWNvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2JlYWNvbi5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQmVhY29uTm90aWZ5Q29tcG9uZW50IHtcbiAgQElucHV0KCkgYmVhY29uITogSUJlYWNvbkNvbmZpZ1xuICBwcml2YXRlIGJlYWNvbkRPTSE6IEhUTUxFbGVtZW50XG4gIHB1YmxpYyBiZWFjb25EZWZhdWx0SWNvbktleXMhOiBzdHJpbmdbXVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYmVhY29uU2VydmljZTogQmVhY29uTm90aWZ5U2VydmljZSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKXtcbiAgICB0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5cyA9IHRoaXMuYmVhY29uU2VydmljZS5nZXRCZWFjb25EZWZhdWx0SWNvbktleXNcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEZpcmUgbW91bnQgZXZlbnRcbiAgICB0aGlzLmJlYWNvblNlcnZpY2UuYmVhY29uRXZlbnRUYXNrTWFzdGVyLmVtaXQoe1xuICAgICAgbW91bnQ6IHRydWUsXG4gICAgICBpZDogdGhpcy5iZWFjb24uYmlkXG4gICAgfSlcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBHZXQgYmVhY29uXG4gICAgY29uc3QgYmVhY29uID0gdGhpcy5iZWFjb25ET00gPSB0aGlzLmJlYWNvblNlcnZpY2UuZ2V0QmVhY29uQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgI2JjXyR7dGhpcy5iZWFjb24uYmlkfWApXG4gICAgLy8gUmVzb2x2ZSBwb3NzaWJsZSBmb2N1cyBmb3IgYmVhY29uXG4gICAgdGhpcy5yZXNvbHZlUG9zc2libGVGb2N1c0ZvckJlYWNvbihiZWFjb24pXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBSZXNvbHZlIGRlbGF5IHNldHRpbmdcbiAgICAgIHRoaXMucmVzb2x2ZURlbGF5Rm9yQmVhY29uKGJlYWNvbiwgdHJ1ZSlcbiAgICAgIC8vIFNldCBiZWFjb24gbGlzdGVuZXJcbiAgICAgIHRoaXMuc2V0TGlzdGVuZXJGb3JCZWFjb24oYmVhY29uLCB0aGlzLmJlYWNvbilcblxuICAgICAgLy8gU2FuaXRpemUgc3ZnIGNvbnRlbnQgaWYgbm90IGZvbnQgaWNvblxuICAgICAgaWYgKHRoaXMuYmVhY29uLnN2Z0ljb24pIHtcbiAgICAgICAgY29uc3QgYmVhY29uU3ZnSWNvbiA9IGJlYWNvbi5xdWVyeVNlbGVjdG9yKCdzcGFuLmJlYWNvbi1tZXNzYWdlLXN2Zy1jb250cm9sIHN2ZycpXG4gICAgICAgIGJlYWNvblN2Z0ljb24uc3R5bGUud2lkdGggPSAnMjBweCdcbiAgICAgICAgYmVhY29uU3ZnSWNvbi5zdHlsZS5oZWlnaHQgPSAnMjBweCdcbiAgICAgICAgYmVhY29uU3ZnSWNvbi5zdHlsZS5tYXJnaW5SaWdodCA9ICc3cHgnXG4gICAgICAgIGJlYWNvblN2Z0ljb24uc3R5bGUubWFyZ2luVG9wID0gJy0ycHgnXG4gICAgICB9XG4gICAgfSwgMClcblxuICAgIC8vIExpc3RlbiBmb3IgZXZlbnRcbiAgICB0aGlzLmJlYWNvblNlcnZpY2UuYmVhY29uRXZlbnRUYXNrTWFzdGVyLnN1YnNjcmliZSgobWVzc2FnZTogSUJlYWNvbkV2ZW50TWVzc2FnZSkgPT4ge1xuICAgICAgLy8gQ2hlY2sgZm9yIG5leHQgZm9yIGZvY3VzIGV2ZW50XG4gICAgICBpZiAobWVzc2FnZS5hdXRvRGV0ZWN0TmV4dEZvY3VzQmVhY29uKVxuICAgICAgICB0aGlzLnJlc29sdmVQb3NzaWJsZUZvY3VzRm9yQmVhY29uKHRoaXMuYmVhY29uRE9NLCBmYWxzZSlcbiAgICB9KVxuICB9XG5cbiAgLy8gV2hlbiBiZWFjb24gYnV0dG9uIGlzIGNsaWNrZWRcbiAgYmVhY29uQnV0dG9uQ2xpY2soZTogRXZlbnQsIG5vOiBudW1iZXIpOiB2b2lkIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgc3dpdGNoIChubykge1xuICAgICAgY2FzZSAxOlxuICAgICAgICAvLyBDaGVjayBmb3IgY2FsbGJhY2tcbiAgICAgICAgaWYgKHRoaXMuYmVhY29uPy5idXR0b25zPy5vbmU/LmNhbGxiYWNrKVxuICAgICAgICAgIHRoaXMuYmVhY29uPy5idXR0b25zPy5vbmU/LmNhbGxiYWNrKC4uLih0aGlzLmJlYWNvbj8uYnV0dG9ucz8ub25lPy5jYWxsYmFja0FyZ3MgfHwgW10pKVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgY2FuIGRpc21pc3NcbiAgICAgICAgaWYgKHRoaXMuYmVhY29uPy5idXR0b25zPy5vbmU/LmNhbkRpc21pc3MpXG4gICAgICAgICAgdGhpcy5jbG9zZUJlYWNvbih0aGlzLmJlYWNvbkRPTSwgdGhpcy5iZWFjb24pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI6XG4gICAgICAgIC8vIENoZWNrIGZvciBjYWxsYmFja1xuICAgICAgICBpZiAodGhpcy5iZWFjb24/LmJ1dHRvbnM/LnR3bz8uY2FsbGJhY2spXG4gICAgICAgICAgdGhpcy5iZWFjb24/LmJ1dHRvbnM/LnR3bz8uY2FsbGJhY2soLi4uKHRoaXMuYmVhY29uPy5idXR0b25zPy50d28/LmNhbGxiYWNrQXJncyB8fCBbXSkpXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgY2FuIGRpc21pc3NcbiAgICAgICAgaWYgKHRoaXMuYmVhY29uPy5idXR0b25zPy50d28/LmNhbkRpc21pc3MpXG4gICAgICAgICAgdGhpcy5jbG9zZUJlYWNvbih0aGlzLmJlYWNvbkRPTSwgdGhpcy5iZWFjb24pXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IGxpc3RlbmVyIGZvciBiZWFjb24gY2hhbmdlc1xuICBzZXRMaXN0ZW5lckZvckJlYWNvbihiZWFjb246IEVsZW1lbnQsIGJlYWNvbkRhdGE6IElCZWFjb25Db25maWcpOiB2b2lkIHtcbiAgICAoKGIsIGQpID0+IHtcbiAgICAgIGJlYWNvbj8uYWRkRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgKGUpID0+IHRoaXMuY2xvc2VCZWFjb24oYiwgZCkpXG4gICAgICBiZWFjb24/LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdEFuaW1hdGlvbkVuZCcsIChlKSA9PiB0aGlzLmNsb3NlQmVhY29uKGIsIGQpKVxuICAgICAgYmVhY29uPy5hZGRFdmVudExpc3RlbmVyKCdvQW5pbWF0aW9uRW5kJywgKGUpID0+IHRoaXMuY2xvc2VCZWFjb24oYiwgZCkpXG4gICAgfSkoYmVhY29uLCBiZWFjb25EYXRhKVxuICB9XG5cbiAgLy8gVG9nZ2xlIGF1dG8tY2xvc2VcbiAgYXV0b0Nsb3NlKHN0YXR1czogYm9vbGVhbiwgY29udHJvbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBzdGF0dXNcbiAgICAgID8gKGNvbnRyb2wuZ2V0QXR0cmlidXRlKCdkYXRhLWJlYWNvbi1zdGF0aWMnKSAhPSAndHJ1ZScgJiYgdGhpcy5yZXNvbHZlRGVsYXlGb3JCZWFjb24oY29udHJvbCwgZmFsc2UpKVxuICAgICAgOiBjb250cm9sLmNsYXNzTGlzdC5yZW1vdmUoU3RyaW5nKHRoaXMuYmVhY29uLmFuaW1hdGlvbkNsYXNzKSlcbiAgfVxuXG4gIC8vIFJlc29sdmUgZGVsYXkgZm9yIGJlYWNvblxuICByZXNvbHZlRGVsYXlGb3JCZWFjb24oYmVhY29uOiBIVE1MRWxlbWVudCwgb25Mb2FkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIGRlbGF5IHNldFxuICAgIGlmICh0aGlzLmJlYWNvbi5zdGF0aWMgJiYgdHlwZW9mIHRoaXMuYmVhY29uLnN0YXRpYyA9PSAnbnVtYmVyJykge1xuICAgICAgYmVhY29uICYmIChiZWFjb24uc3R5bGUuYW5pbWF0aW9uRGVsYXkgPSB0aGlzLmJlYWNvbi5zdGF0aWMgKyAncycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvbkxvYWQgPT0gITEgJiYgdGhpcy5iZWFjb24/LmZpeGVkICE9IHRydWUpXG4gICAgICAgIGJlYWNvbi5jbGFzc0xpc3QuYWRkKFN0cmluZyh0aGlzLmJlYWNvbi5hbmltYXRpb25DbGFzcykpXG4gICAgfVxuICB9XG5cbiAgLy8gUmVzb2x2ZSBmb2N1cyBiZWFjb25cbiAgcmVzb2x2ZVBvc3NpYmxlRm9jdXNGb3JCZWFjb24oYmVhY29uOiBIVE1MRWxlbWVudCwgY3JlYXRlT3ZlcmxheTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVGb2N1c0JlYWNvbklkID0gdGhpcy5iZWFjb25TZXJ2aWNlLmdldEFjdGl2ZUZvY3VzQmVhY29uSWRcbiAgICBpZiAoYWN0aXZlRm9jdXNCZWFjb25JZCA9PSB0aGlzLmJlYWNvbi5iaWQpIHtcbiAgICAgIGJlYWNvbi5zdHlsZS56SW5kZXggPSAnOTAwMydcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgYmVhY29uIHNob3VsZCBiZSBjZW50ZXJlZFxuICAgICAgaWYgKHRoaXMuYmVhY29uLnNoaW5lKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5iZWFjb24uc2hpbmVTY2FsZSAmJiBTdHJpbmcodGhpcy5iZWFjb24uc2hpbmVTY2FsZSkubWF0Y2goLyhcXGQrKVxcLihcXGQrKS8pID8gdGhpcy5iZWFjb24uc2hpbmVTY2FsZSA6ICcxLjUnXG4gICAgICAgIGJlYWNvbi5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCdcbiAgICAgICAgYmVhY29uLnN0eWxlLnJpZ2h0ID0gJzAnXG4gICAgICAgIGJlYWNvbi5zdHlsZS5sZWZ0ID0gJzAnXG4gICAgICAgIGJlYWNvbi5zdHlsZS5ib3R0b20gPSAnNTAlJ1xuICAgICAgICBiZWFjb24uc3R5bGUubWFyZ2luID0gJ2F1dG8nXG4gICAgICAgIGJlYWNvbi5zdHlsZS50cmFuc2Zvcm0gPSAnc2NhbGUoJyArIHNjYWxlICsgJyknXG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBvdmVybGF5XG4gICAgICBpZiAoY3JlYXRlT3ZlcmxheSlcbiAgICAgICAgdGhpcy5iZWFjb25TZXJ2aWNlLmNyZWF0ZUJlYWNvbkZvY3VzT3ZlcmxheSh0aGlzLmJlYWNvbi5vdmVybGF5Q29sb3IpXG4gICAgICBlbHNlIHRoaXMuYmVhY29uU2VydmljZS5yZXBhaW50QmVhY29uRm9jdXNPdmVybGF5KHRoaXMuYmVhY29uLm92ZXJsYXlDb2xvcilcbiAgICB9XG4gIH1cblxuICAvLyBUcmlnZ2VyIGNsb3NlIGJlYWNvblxuICBjbG9zZUJlYWNvbihiZWFjb25Db250cm9sOiBhbnksIGJlYWNvbkRhdGE6IElCZWFjb25Db25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYmVhY29uPy5maXhlZCkge1xuICAgICAgdGhpcy5iZWFjb25TZXJ2aWNlLmJlYWNvbkV2ZW50VGFza01hc3Rlci5lbWl0KHtcbiAgICAgICAgZGVsZXRlOiB0cnVlLFxuICAgICAgICBpZDogYmVhY29uQ29udHJvbC5nZXRBdHRyaWJ1dGUoJ2lkJykucmVwbGFjZSgvYmNfLywgJycpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAjYmVhY29uQ29udHJvbCBcblx0XHRbaWRdPVwiJ2JjXycgKyBiZWFjb24uYmlkXCJcblx0XHQobW91c2VlbnRlcik9XCJhdXRvQ2xvc2UoZmFsc2UsIGJlYWNvbkNvbnRyb2wpXCIgXG5cdFx0KG1vdXNlbGVhdmUpPVwiYXV0b0Nsb3NlKHRydWUsIGJlYWNvbkNvbnRyb2wpXCJcblx0XHQoY2xpY2spPVwiYmVhY29uLnByZXZlbnRDbGlja0Nsb3NlID8gbnVsbCA6IGNsb3NlQmVhY29uKGJlYWNvbkNvbnRyb2wsIGJlYWNvbilcIlxuXHRcdFthdHRyLmRhdGEtYmVhY29uLXN0YXRpY109XCJiZWFjb24uc3RhdGljXCJcblx0XHRjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWNvbnRyb2wge3sgKGJlYWNvbi5zdGF0aWMgIT09IHRydWUgJiYgYmVhY29uLmZpeGVkICE9PSB0cnVlKSA/IGJlYWNvbi5hbmltYXRpb25DbGFzcyA6ICcnIH19IHt7IGJlYWNvbi5yZXBsYWNlbWVudENsYXNzIHx8IGJlYWNvbi50eXBlIH19IHt7IGJlYWNvbi5zdHlsZUNsYXNzIH19XCJcblx0XHRbY2xhc3MuYmVhY29uLW1lc3NhZ2UtY29udHJvbC1uby1ob3Zlci1lZmZlY3RdPVwiYmVhY29uLm5vSG92ZXJFZmZlY3RcIj5cblx0PGRpdiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWhlYWRlclwiPlxuXHRcdDxkaXY+XG5cdFx0XHQ8c3BhbiAqbmdJZj1cImJlYWNvbi5mb250SWNvblwiPjxpIFtjbGFzc109XCJiZWFjb24uaWNvblwiPjwvaT48L3NwYW4+XG5cdFx0XHQ8c3BhbiAqbmdJZj1cIiFiZWFjb24uZm9udEljb24gJiYgYmVhY29uRGVmYXVsdEljb25LZXlzLmluY2x1ZGVzKGJlYWNvbi5pY29uKVwiIGNsYXNzPVwiYmVhY29uLW1lc3NhZ2Utc3ZnLWNvbnRyb2xcIj5cblx0XHRcdFx0PGFwcC1iZWFjb24taWNvbi1hbGVydCAqbmdJZj1cImJlYWNvbi5pY29uIHwgYmVhY29uVHlwZVJlc29sdmU6J2FsZXJ0J1wiPjwvYXBwLWJlYWNvbi1pY29uLWFsZXJ0PlxuXHRcdFx0XHQ8YXBwLWJlYWNvbi1pY29uLWVycm9yICpuZ0lmPVwiYmVhY29uLmljb24gfCBiZWFjb25UeXBlUmVzb2x2ZTonZXJyb3InXCI+PC9hcHAtYmVhY29uLWljb24tZXJyb3I+XG5cdFx0XHRcdDxhcHAtYmVhY29uLWljb24taW5mbyAqbmdJZj1cImJlYWNvbi5pY29uIHwgYmVhY29uVHlwZVJlc29sdmU6J2luZm8nXCI+PC9hcHAtYmVhY29uLWljb24taW5mbz5cblx0XHRcdFx0PGFwcC1iZWFjb24taWNvbi1zdWNjZXNzICpuZ0lmPVwiYmVhY29uLmljb24gfCBiZWFjb25UeXBlUmVzb2x2ZTonc3VjY2VzcydcIj48L2FwcC1iZWFjb24taWNvbi1zdWNjZXNzPlxuXHRcdFx0XHQ8YXBwLWJlYWNvbi1pY29uLXdhcm5pbmcgKm5nSWY9XCJiZWFjb24uaWNvbiB8IGJlYWNvblR5cGVSZXNvbHZlOid3YXJuaW5nJ1wiPjwvYXBwLWJlYWNvbi1pY29uLXdhcm5pbmc+XG5cdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8c3BhbiAqbmdJZj1cIiFiZWFjb24uZm9udEljb24gJiYgYmVhY29uLmljb24gJiYgIWJlYWNvbkRlZmF1bHRJY29uS2V5cy5pbmNsdWRlcyhiZWFjb24uaWNvbilcIiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLXN2Zy1jb250cm9sXCIgW2lubmVySFRNTF09XCJiZWFjb24uc3ZnSWNvblwiPjwvc3Bhbj5cblx0XHRcdHt7IGJlYWNvbi50aXRsZSB9fVxuXHRcdDwvZGl2PlxuXHRcdDxkaXY+XG5cdFx0XHQ8ZGl2ICpuZ0lmPVwiIWJlYWNvbi5maXhlZFwiIGNsYXNzPVwiYmVhY29uLW1lc3NhZ2UtY2xvc2VcIiAoY2xpY2spPVwiY2xvc2VCZWFjb24oYmVhY29uQ29udHJvbCwgYmVhY29uKVwiPlxuXHRcdFx0XHQ8c3ZnIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgNzggNzhcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cblx0XHRcdCAgICA8cmVjdCB5PVwiNy4wNzEwNFwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMDBcIiByeD1cIjVcIiB0cmFuc2Zvcm09XCJyb3RhdGUoLTQ1IDAgNy4wNzEwNClcIiAvPlxuXHRcdFx0ICAgIDxyZWN0IHg9XCI3MC43MTA5XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwMFwiIHJ4PVwiNVwiIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSA3MC43MTA5IDApXCIgLz5cblx0XHRcdFx0PC9zdmc+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJiZWFjb24tbWVzc2FnZS1kaXZpZGVyXCI+PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJiZWFjb24tbWVzc2FnZS1ib2R5XCIgW2lubmVySFRNTF09XCJiZWFjb24uYm9keUh0bWxcIj48L2Rpdj5cblx0PGRpdiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWRpdmlkZXJcIiAqbmdJZj1cImJlYWNvbi5idXR0b25zPy5vbmUgfHwgYmVhY29uLmJ1dHRvbnM/LnR3b1wiPjwvZGl2PlxuXG5cdDxkaXYgY2xhc3M9XCJiZWFjb24tbWVzc2FnZS1mb290ZXJcIiAqbmdJZj1cImJlYWNvbi5idXR0b25zICYmIGJlYWNvbi5idXR0b25zPy5vbmUgJiYgYmVhY29uLmJ1dHRvbnM/LnR3b1wiPlxuXHRcdDxkaXY+PGJ1dHRvbiAoY2xpY2spPVwiYmVhY29uQnV0dG9uQ2xpY2soJGV2ZW50LCAxKVwiPnt7IGJlYWNvbi5idXR0b25zPy5vbmU/LnRleHQgfX08L2J1dHRvbj48L2Rpdj5cblx0XHQ8ZGl2PjxidXR0b24gKGNsaWNrKT1cImJlYWNvbkJ1dHRvbkNsaWNrKCRldmVudCwgMilcIj57eyBiZWFjb24uYnV0dG9ucz8udHdvPy50ZXh0IH19PC9idXR0b24+PC9kaXY+XG5cdDwvZGl2PlxuXG5cdDxkaXYgY2xhc3M9XCJiZWFjb24tbWVzc2FnZS1mb290ZXJcIiAqbmdJZj1cImJlYWNvbi5idXR0b25zICYmIGJlYWNvbi5idXR0b25zPy5vbmUgJiYgIWJlYWNvbj8uYnV0dG9ucz8udHdvXCI+XG5cdFx0PGRpdiBbY2xhc3NdPVwiYmVhY29uLmJ1dHRvbnM/Lm9uZT8ucG9zaXRpb24gPyAoJ2JlYWNvbi1tZXNzYWdlLWJ1dHRvbi1jb250YWluZXItJyArIGJlYWNvbj8uYnV0dG9ucz8ub25lPy5wb3NpdGlvbikgOiAnJ1wiPlxuXHRcdFx0PGJ1dHRvbiAoY2xpY2spPVwiYmVhY29uQnV0dG9uQ2xpY2soJGV2ZW50LCAxKVwiPnt7IGJlYWNvbi5idXR0b25zPy5vbmU/LnRleHQgfX08L2J1dHRvbj5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cbjwvZGl2PiJdfQ==
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhY29uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYmVhY29uL2JlYWNvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2JlYWNvbi9iZWFjb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7OztBQVVoRSxNQUFNLE9BQU8scUJBQXFCO0lBS1o7SUFDVjtJQUxELE1BQU0sQ0FBZ0I7SUFDdkIsU0FBUyxDQUFjO0lBQ3hCLHFCQUFxQixDQUFXO0lBRXZDLFlBQW9CLGFBQWtDLEVBQzVDLFNBQXVCO1FBRGIsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBQzVDLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDL0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUE7SUFDMUUsQ0FBQztJQUVELFFBQVE7UUFDTixtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7WUFDNUMsS0FBSyxFQUFFLElBQUk7WUFDWCxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHO1NBQ3BCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxlQUFlO1FBQ2IsYUFBYTtRQUNiLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO1FBQzNILHlDQUF5QztRQUN6QyxJQUFJLENBQUMsOEJBQThCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDM0Msb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyw2QkFBNkIsQ0FB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QUFLLEVBQUUsRUFBRSxDQUFDO2FBQ3hELENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO3VHQWxKVSxxQkFBcUI7MkZBQXJCLHFCQUFxQixnRkNWbEMsaytGQTZDTTs7MkZEbkNPLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxZQUFZO21IQUtiLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlYWNvbk5vdGlmeVNlcnZpY2UgfSBmcm9tICcuLi9iZWFjb24tbm90aWZ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSUJlYWNvbkNvbmZpZywgSUJlYWNvbkV2ZW50TWVzc2FnZSB9IGZyb20gJy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWJlYWNvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9iZWFjb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9iZWFjb24uY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEJlYWNvbk5vdGlmeUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGJlYWNvbiE6IElCZWFjb25Db25maWdcbiAgcHJpdmF0ZSBiZWFjb25ET00hOiBIVE1MRWxlbWVudFxuICBwdWJsaWMgYmVhY29uRGVmYXVsdEljb25LZXlzITogc3RyaW5nW11cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJlYWNvblNlcnZpY2U6IEJlYWNvbk5vdGlmeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcil7XG4gICAgdGhpcy5iZWFjb25EZWZhdWx0SWNvbktleXMgPSB0aGlzLmJlYWNvblNlcnZpY2UuZ2V0QmVhY29uRGVmYXVsdEljb25LZXlzXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBGaXJlIG1vdW50IGV2ZW50XG4gICAgdGhpcy5iZWFjb25TZXJ2aWNlLmJlYWNvbkV2ZW50VGFza01hc3Rlci5lbWl0KHtcbiAgICAgIG1vdW50OiB0cnVlLFxuICAgICAgaWQ6IHRoaXMuYmVhY29uLmJpZFxuICAgIH0pXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gR2V0IGJlYWNvblxuICAgIGNvbnN0IGJlYWNvbiA9IHRoaXMuYmVhY29uRE9NID0gdGhpcy5iZWFjb25TZXJ2aWNlLmdldEJlYWNvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCNiY18ke3RoaXMuYmVhY29uLmJpZH1gKVxuICAgIC8vIFJlc29sdmUgZm9udCB3ZWlnaHQgZm9yIHRpdGxlIGFuZCBib2R5XG4gICAgdGhpcy5yZXNvbHZlRm9udFdlaWdodEZvckNvbXBvbmVudHMoYmVhY29uKVxuICAgIC8vIFJlc29sdmUgcG9zc2libGUgZm9jdXMgZm9yIGJlYWNvblxuICAgIHRoaXMucmVzb2x2ZVBvc3NpYmxlRm9jdXNGb3JCZWFjb24oYmVhY29uKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gUmVzb2x2ZSBkZWxheSBzZXR0aW5nXG4gICAgICB0aGlzLnJlc29sdmVEZWxheUZvckJlYWNvbihiZWFjb24sIHRydWUpXG4gICAgICAvLyBTZXQgYmVhY29uIGxpc3RlbmVyXG4gICAgICB0aGlzLnNldExpc3RlbmVyRm9yQmVhY29uKGJlYWNvbiwgdGhpcy5iZWFjb24pXG5cbiAgICAgIC8vIFNhbml0aXplIHN2ZyBjb250ZW50IGlmIG5vdCBmb250IGljb25cbiAgICAgIGlmICh0aGlzLmJlYWNvbi5zdmdJY29uKSB7XG4gICAgICAgIGNvbnN0IGJlYWNvblN2Z0ljb24gPSBiZWFjb24ucXVlcnlTZWxlY3Rvcignc3Bhbi5iZWFjb24tbWVzc2FnZS1zdmctY29udHJvbCBzdmcnKVxuICAgICAgICBiZWFjb25TdmdJY29uLnN0eWxlLndpZHRoID0gJzIwcHgnXG4gICAgICAgIGJlYWNvblN2Z0ljb24uc3R5bGUuaGVpZ2h0ID0gJzIwcHgnXG4gICAgICAgIGJlYWNvblN2Z0ljb24uc3R5bGUubWFyZ2luUmlnaHQgPSAnN3B4J1xuICAgICAgICBiZWFjb25TdmdJY29uLnN0eWxlLm1hcmdpblRvcCA9ICctMnB4J1xuICAgICAgfVxuICAgIH0sIDApXG5cbiAgICAvLyBMaXN0ZW4gZm9yIGV2ZW50XG4gICAgdGhpcy5iZWFjb25TZXJ2aWNlLmJlYWNvbkV2ZW50VGFza01hc3Rlci5zdWJzY3JpYmUoKG1lc3NhZ2U6IElCZWFjb25FdmVudE1lc3NhZ2UpID0+IHtcbiAgICAgIC8vIENoZWNrIGZvciBuZXh0IGZvciBmb2N1cyBldmVudFxuICAgICAgaWYgKG1lc3NhZ2UuYXV0b0RldGVjdE5leHRGb2N1c0JlYWNvbilcbiAgICAgICAgdGhpcy5yZXNvbHZlUG9zc2libGVGb2N1c0ZvckJlYWNvbih0aGlzLmJlYWNvbkRPTSwgZmFsc2UpXG4gICAgfSlcbiAgfVxuXG4gIC8vIFdoZW4gYmVhY29uIGJ1dHRvbiBpcyBjbGlja2VkXG4gIGJlYWNvbkJ1dHRvbkNsaWNrKGU6IEV2ZW50LCBubzogbnVtYmVyKTogdm9pZCB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHN3aXRjaCAobm8pIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGNhbGxiYWNrXG4gICAgICAgIGlmICh0aGlzLmJlYWNvbj8uYnV0dG9ucz8ub25lPy5jYWxsYmFjaylcbiAgICAgICAgICB0aGlzLmJlYWNvbj8uYnV0dG9ucz8ub25lPy5jYWxsYmFjayguLi4odGhpcy5iZWFjb24/LmJ1dHRvbnM/Lm9uZT8uY2FsbGJhY2tBcmdzIHx8IFtdKSlcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGlmIGNhbiBkaXNtaXNzXG4gICAgICAgIGlmICh0aGlzLmJlYWNvbj8uYnV0dG9ucz8ub25lPy5jYW5EaXNtaXNzKVxuICAgICAgICAgIHRoaXMuY2xvc2VCZWFjb24odGhpcy5iZWFjb25ET00sIHRoaXMuYmVhY29uKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyOlxuICAgICAgICAvLyBDaGVjayBmb3IgY2FsbGJhY2tcbiAgICAgICAgaWYgKHRoaXMuYmVhY29uPy5idXR0b25zPy50d28/LmNhbGxiYWNrKVxuICAgICAgICAgIHRoaXMuYmVhY29uPy5idXR0b25zPy50d28/LmNhbGxiYWNrKC4uLih0aGlzLmJlYWNvbj8uYnV0dG9ucz8udHdvPy5jYWxsYmFja0FyZ3MgfHwgW10pKVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGNhbiBkaXNtaXNzXG4gICAgICAgIGlmICh0aGlzLmJlYWNvbj8uYnV0dG9ucz8udHdvPy5jYW5EaXNtaXNzKVxuICAgICAgICAgIHRoaXMuY2xvc2VCZWFjb24odGhpcy5iZWFjb25ET00sIHRoaXMuYmVhY29uKVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBsaXN0ZW5lciBmb3IgYmVhY29uIGNoYW5nZXNcbiAgc2V0TGlzdGVuZXJGb3JCZWFjb24oYmVhY29uOiBFbGVtZW50LCBiZWFjb25EYXRhOiBJQmVhY29uQ29uZmlnKTogdm9pZCB7XG4gICAgKChiLCBkKSA9PiB7XG4gICAgICBiZWFjb24/LmFkZEV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIChlKSA9PiB0aGlzLmNsb3NlQmVhY29uKGIsIGQpKVxuICAgICAgYmVhY29uPy5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRBbmltYXRpb25FbmQnLCAoZSkgPT4gdGhpcy5jbG9zZUJlYWNvbihiLCBkKSlcbiAgICAgIGJlYWNvbj8uYWRkRXZlbnRMaXN0ZW5lcignb0FuaW1hdGlvbkVuZCcsIChlKSA9PiB0aGlzLmNsb3NlQmVhY29uKGIsIGQpKVxuICAgIH0pKGJlYWNvbiwgYmVhY29uRGF0YSlcbiAgfVxuXG4gIC8vIFRvZ2dsZSBhdXRvLWNsb3NlXG4gIGF1dG9DbG9zZShzdGF0dXM6IGJvb2xlYW4sIGNvbnRyb2w6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgc3RhdHVzXG4gICAgICA/IChjb250cm9sLmdldEF0dHJpYnV0ZSgnZGF0YS1iZWFjb24tc3RhdGljJykgIT0gJ3RydWUnICYmIHRoaXMucmVzb2x2ZURlbGF5Rm9yQmVhY29uKGNvbnRyb2wsIGZhbHNlKSlcbiAgICAgIDogY29udHJvbC5jbGFzc0xpc3QucmVtb3ZlKFN0cmluZyh0aGlzLmJlYWNvbi5hbmltYXRpb25DbGFzcykpXG4gIH1cblxuICAvLyBSZXNvbHZlIGRlbGF5IGZvciBiZWFjb25cbiAgcmVzb2x2ZURlbGF5Rm9yQmVhY29uKGJlYWNvbjogSFRNTEVsZW1lbnQsIG9uTG9hZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiBkZWxheSBzZXRcbiAgICBpZiAodGhpcy5iZWFjb24uc3RhdGljICYmIHR5cGVvZiB0aGlzLmJlYWNvbi5zdGF0aWMgPT0gJ251bWJlcicpIHtcbiAgICAgIGJlYWNvbiAmJiAoYmVhY29uLnN0eWxlLmFuaW1hdGlvbkRlbGF5ID0gdGhpcy5iZWFjb24uc3RhdGljICsgJ3MnKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob25Mb2FkID09ICExICYmIHRoaXMuYmVhY29uPy5maXhlZCAhPSB0cnVlKVxuICAgICAgICBiZWFjb24uY2xhc3NMaXN0LmFkZChTdHJpbmcodGhpcy5iZWFjb24uYW5pbWF0aW9uQ2xhc3MpKVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc29sdmUgZm9udCB3ZWlnaHQgZm9yIHRpdGxlIGFuZCBib2R5XG4gIHJlc29sdmVGb250V2VpZ2h0Rm9yQ29tcG9uZW50cyhiZWFjb246IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYmVhY29uLmZvbnRXZWlnaHRUaXRsZS50cmltKCkpIHtcbiAgICAgIGNvbnN0IHRpdGxlOiBIVE1MRWxlbWVudCA9IGJlYWNvbi5xdWVyeVNlbGVjdG9yKCdkaXYuYmVhY29uLW1lc3NhZ2UtaGVhZGVyJylcbiAgICAgIHRpdGxlICYmICh0aXRsZS5zdHlsZS5mb250V2VpZ2h0ID0gdGhpcy5iZWFjb24uZm9udFdlaWdodFRpdGxlKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmJlYWNvbi5mb250V2VpZ2h0Qm9keS50cmltKCkpIHtcbiAgICAgIGNvbnN0IGJvZHk6IEhUTUxFbGVtZW50ID0gYmVhY29uLnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5iZWFjb24tbWVzc2FnZS1ib2R5JylcbiAgICAgIGJvZHkgJiYgKGJvZHkuc3R5bGUuZm9udFdlaWdodCA9IHRoaXMuYmVhY29uLmZvbnRXZWlnaHRCb2R5KVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc29sdmUgZm9jdXMgYmVhY29uXG4gIHJlc29sdmVQb3NzaWJsZUZvY3VzRm9yQmVhY29uKGJlYWNvbjogSFRNTEVsZW1lbnQsIGNyZWF0ZU92ZXJsYXk6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRm9jdXNCZWFjb25JZCA9IHRoaXMuYmVhY29uU2VydmljZS5nZXRBY3RpdmVGb2N1c0JlYWNvbklkXG4gICAgaWYgKGFjdGl2ZUZvY3VzQmVhY29uSWQgPT0gdGhpcy5iZWFjb24uYmlkKSB7XG4gICAgICBiZWFjb24uc3R5bGUuekluZGV4ID0gJzkwMDMnXG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGJlYWNvbiBzaG91bGQgYmUgY2VudGVyZWRcbiAgICAgIGlmICh0aGlzLmJlYWNvbi5zaGluZSkge1xuICAgICAgICBjb25zdCBzY2FsZSA9IHRoaXMuYmVhY29uLnNoaW5lU2NhbGUgJiYgU3RyaW5nKHRoaXMuYmVhY29uLnNoaW5lU2NhbGUpLm1hdGNoKC8oXFxkKylcXC4oXFxkKykvKSA/IHRoaXMuYmVhY29uLnNoaW5lU2NhbGUgOiAnMS41J1xuICAgICAgICBiZWFjb24uc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnXG4gICAgICAgIGJlYWNvbi5zdHlsZS5yaWdodCA9ICcwJ1xuICAgICAgICBiZWFjb24uc3R5bGUubGVmdCA9ICcwJ1xuICAgICAgICBiZWFjb24uc3R5bGUuYm90dG9tID0gJzUwJSdcbiAgICAgICAgYmVhY29uLnN0eWxlLm1hcmdpbiA9ICdhdXRvJ1xuICAgICAgICBiZWFjb24uc3R5bGUudHJhbnNmb3JtID0gJ3NjYWxlKCcgKyBzY2FsZSArICcpJ1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgb3ZlcmxheVxuICAgICAgaWYgKGNyZWF0ZU92ZXJsYXkpXG4gICAgICAgIHRoaXMuYmVhY29uU2VydmljZS5jcmVhdGVCZWFjb25Gb2N1c092ZXJsYXkodGhpcy5iZWFjb24ub3ZlcmxheUNvbG9yKVxuICAgICAgZWxzZSB0aGlzLmJlYWNvblNlcnZpY2UucmVwYWludEJlYWNvbkZvY3VzT3ZlcmxheSh0aGlzLmJlYWNvbi5vdmVybGF5Q29sb3IpXG4gICAgfVxuICB9XG5cbiAgLy8gVHJpZ2dlciBjbG9zZSBiZWFjb25cbiAgY2xvc2VCZWFjb24oYmVhY29uQ29udHJvbDogYW55LCBiZWFjb25EYXRhOiBJQmVhY29uQ29uZmlnKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmJlYWNvbj8uZml4ZWQpIHtcbiAgICAgIHRoaXMuYmVhY29uU2VydmljZS5iZWFjb25FdmVudFRhc2tNYXN0ZXIuZW1pdCh7XG4gICAgICAgIGRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgaWQ6IGJlYWNvbkNvbnRyb2wuZ2V0QXR0cmlidXRlKCdpZCcpLnJlcGxhY2UoL2JjXy8sICcnKVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgI2JlYWNvbkNvbnRyb2wgXG5cdFx0W2lkXT1cIidiY18nICsgYmVhY29uLmJpZFwiXG5cdFx0KG1vdXNlZW50ZXIpPVwiYXV0b0Nsb3NlKGZhbHNlLCBiZWFjb25Db250cm9sKVwiIFxuXHRcdChtb3VzZWxlYXZlKT1cImF1dG9DbG9zZSh0cnVlLCBiZWFjb25Db250cm9sKVwiXG5cdFx0KGNsaWNrKT1cImJlYWNvbi5wcmV2ZW50Q2xpY2tDbG9zZSA/IG51bGwgOiBjbG9zZUJlYWNvbihiZWFjb25Db250cm9sLCBiZWFjb24pXCJcblx0XHRbYXR0ci5kYXRhLWJlYWNvbi1zdGF0aWNdPVwiYmVhY29uLnN0YXRpY1wiXG5cdFx0Y2xhc3M9XCJiZWFjb24tbWVzc2FnZS1jb250cm9sIHt7IChiZWFjb24uc3RhdGljICE9PSB0cnVlICYmIGJlYWNvbi5maXhlZCAhPT0gdHJ1ZSkgPyBiZWFjb24uYW5pbWF0aW9uQ2xhc3MgOiAnJyB9fSB7eyBiZWFjb24ucmVwbGFjZW1lbnRDbGFzcyB8fCBiZWFjb24udHlwZSB9fSB7eyBiZWFjb24uc3R5bGVDbGFzcyB9fVwiXG5cdFx0W2NsYXNzLmJlYWNvbi1tZXNzYWdlLWNvbnRyb2wtbm8taG92ZXItZWZmZWN0XT1cImJlYWNvbi5ub0hvdmVyRWZmZWN0XCI+XG5cdDxkaXYgY2xhc3M9XCJiZWFjb24tbWVzc2FnZS1oZWFkZXJcIj5cblx0XHQ8ZGl2PlxuXHRcdFx0PHNwYW4gKm5nSWY9XCJiZWFjb24uZm9udEljb25cIj48aSBbY2xhc3NdPVwiYmVhY29uLmljb25cIj48L2k+PC9zcGFuPlxuXHRcdFx0PHNwYW4gKm5nSWY9XCIhYmVhY29uLmZvbnRJY29uICYmIGJlYWNvbkRlZmF1bHRJY29uS2V5cy5pbmNsdWRlcyhiZWFjb24uaWNvbilcIiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLXN2Zy1jb250cm9sXCI+XG5cdFx0XHRcdDxhcHAtYmVhY29uLWljb24tYWxlcnQgKm5nSWY9XCJiZWFjb24uaWNvbiB8IGJlYWNvblR5cGVSZXNvbHZlOidhbGVydCdcIj48L2FwcC1iZWFjb24taWNvbi1hbGVydD5cblx0XHRcdFx0PGFwcC1iZWFjb24taWNvbi1lcnJvciAqbmdJZj1cImJlYWNvbi5pY29uIHwgYmVhY29uVHlwZVJlc29sdmU6J2Vycm9yJ1wiPjwvYXBwLWJlYWNvbi1pY29uLWVycm9yPlxuXHRcdFx0XHQ8YXBwLWJlYWNvbi1pY29uLWluZm8gKm5nSWY9XCJiZWFjb24uaWNvbiB8IGJlYWNvblR5cGVSZXNvbHZlOidpbmZvJ1wiPjwvYXBwLWJlYWNvbi1pY29uLWluZm8+XG5cdFx0XHRcdDxhcHAtYmVhY29uLWljb24tc3VjY2VzcyAqbmdJZj1cImJlYWNvbi5pY29uIHwgYmVhY29uVHlwZVJlc29sdmU6J3N1Y2Nlc3MnXCI+PC9hcHAtYmVhY29uLWljb24tc3VjY2Vzcz5cblx0XHRcdFx0PGFwcC1iZWFjb24taWNvbi13YXJuaW5nICpuZ0lmPVwiYmVhY29uLmljb24gfCBiZWFjb25UeXBlUmVzb2x2ZTond2FybmluZydcIj48L2FwcC1iZWFjb24taWNvbi13YXJuaW5nPlxuXHRcdFx0PC9zcGFuPlxuXHRcdFx0PHNwYW4gKm5nSWY9XCIhYmVhY29uLmZvbnRJY29uICYmIGJlYWNvbi5pY29uICYmICFiZWFjb25EZWZhdWx0SWNvbktleXMuaW5jbHVkZXMoYmVhY29uLmljb24pXCIgY2xhc3M9XCJiZWFjb24tbWVzc2FnZS1zdmctY29udHJvbFwiIFtpbm5lckhUTUxdPVwiYmVhY29uLnN2Z0ljb25cIj48L3NwYW4+XG5cdFx0XHR7eyBiZWFjb24udGl0bGUgfX1cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2PlxuXHRcdFx0PGRpdiAqbmdJZj1cIiFiZWFjb24uZml4ZWRcIiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWNsb3NlXCIgKGNsaWNrKT1cImNsb3NlQmVhY29uKGJlYWNvbkNvbnRyb2wsIGJlYWNvbilcIj5cblx0XHRcdFx0PHN2ZyB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDc4IDc4XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG5cdFx0XHQgICAgPHJlY3QgeT1cIjcuMDcxMDRcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTAwXCIgcng9XCI1XCIgdHJhbnNmb3JtPVwicm90YXRlKC00NSAwIDcuMDcxMDQpXCIgLz5cblx0XHRcdCAgICA8cmVjdCB4PVwiNzAuNzEwOVwiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMDBcIiByeD1cIjVcIiB0cmFuc2Zvcm09XCJyb3RhdGUoNDUgNzAuNzEwOSAwKVwiIC8+XG5cdFx0XHRcdDwvc3ZnPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiYmVhY29uLW1lc3NhZ2UtZGl2aWRlclwiPjwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiYmVhY29uLW1lc3NhZ2UtYm9keVwiIFtpbm5lckhUTUxdPVwiYmVhY29uLmJvZHlIdG1sXCI+PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJiZWFjb24tbWVzc2FnZS1kaXZpZGVyXCIgKm5nSWY9XCJiZWFjb24uYnV0dG9ucz8ub25lIHx8IGJlYWNvbi5idXR0b25zPy50d29cIj48L2Rpdj5cblxuXHQ8ZGl2IGNsYXNzPVwiYmVhY29uLW1lc3NhZ2UtZm9vdGVyXCIgKm5nSWY9XCJiZWFjb24uYnV0dG9ucyAmJiBiZWFjb24uYnV0dG9ucz8ub25lICYmIGJlYWNvbi5idXR0b25zPy50d29cIj5cblx0XHQ8ZGl2PjxidXR0b24gKGNsaWNrKT1cImJlYWNvbkJ1dHRvbkNsaWNrKCRldmVudCwgMSlcIj57eyBiZWFjb24uYnV0dG9ucz8ub25lPy50ZXh0IH19PC9idXR0b24+PC9kaXY+XG5cdFx0PGRpdj48YnV0dG9uIChjbGljayk9XCJiZWFjb25CdXR0b25DbGljaygkZXZlbnQsIDIpXCI+e3sgYmVhY29uLmJ1dHRvbnM/LnR3bz8udGV4dCB9fTwvYnV0dG9uPjwvZGl2PlxuXHQ8L2Rpdj5cblxuXHQ8ZGl2IGNsYXNzPVwiYmVhY29uLW1lc3NhZ2UtZm9vdGVyXCIgKm5nSWY9XCJiZWFjb24uYnV0dG9ucyAmJiBiZWFjb24uYnV0dG9ucz8ub25lICYmICFiZWFjb24/LmJ1dHRvbnM/LnR3b1wiPlxuXHRcdDxkaXYgW2NsYXNzXT1cImJlYWNvbi5idXR0b25zPy5vbmU/LnBvc2l0aW9uID8gKCdiZWFjb24tbWVzc2FnZS1idXR0b24tY29udGFpbmVyLScgKyBiZWFjb24/LmJ1dHRvbnM/Lm9uZT8ucG9zaXRpb24pIDogJydcIj5cblx0XHRcdDxidXR0b24gKGNsaWNrKT1cImJlYWNvbkJ1dHRvbkNsaWNrKCRldmVudCwgMSlcIj57eyBiZWFjb24uYnV0dG9ucz8ub25lPy50ZXh0IH19PC9idXR0b24+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXG48L2Rpdj4iXX0=
|
|
@@ -35,6 +35,8 @@ export class BeaconNotifyService {
|
|
|
35
35
|
beaconReplacementClass;
|
|
36
36
|
beaconAnimationClass;
|
|
37
37
|
beaconNoHoverEffect;
|
|
38
|
+
beaconFontWeightTitle;
|
|
39
|
+
beaconFontWeightBody;
|
|
38
40
|
beaconGlobalStatic;
|
|
39
41
|
beaconGlobalFixed;
|
|
40
42
|
beaconGlobalBlockOthers;
|
|
@@ -44,6 +46,8 @@ export class BeaconNotifyService {
|
|
|
44
46
|
beaconGlobalFocusShineScale;
|
|
45
47
|
beaconGlobalPositioning;
|
|
46
48
|
beaconGlobalFocusOverlayColor;
|
|
49
|
+
beaconGlobalFontWeightTitle;
|
|
50
|
+
beaconGlobalFontWeightBody;
|
|
47
51
|
beaconContainer;
|
|
48
52
|
beaconDefaultAnimationClassName = 'beacon-message-control-animate';
|
|
49
53
|
beaconSuccessorBlockerAutoId;
|
|
@@ -90,6 +94,8 @@ export class BeaconNotifyService {
|
|
|
90
94
|
globalConfig.position && (this.beaconGlobalPositioning = globalConfig.position);
|
|
91
95
|
globalConfig.noHoverEffect && (this.beaconGlobalNoHoverEffect = globalConfig.noHoverEffect);
|
|
92
96
|
globalConfig.shineScale && (this.beaconGlobalFocusShineScale = globalConfig.shineScale);
|
|
97
|
+
globalConfig.fontWeightTitle && (this.beaconGlobalFontWeightTitle = globalConfig.fontWeightTitle);
|
|
98
|
+
globalConfig.fontWeightBody && (this.beaconGlobalFontWeightBody = globalConfig.fontWeightBody);
|
|
93
99
|
}
|
|
94
100
|
// Resolve global config / for property
|
|
95
101
|
resolveGlobalPropertyConfig(config, property) {
|
|
@@ -426,6 +432,8 @@ export class BeaconNotifyService {
|
|
|
426
432
|
config.overlayColor && (this.beaconOverlayColor = config.overlayColor);
|
|
427
433
|
config.noHoverEffect && (this.beaconNoHoverEffect = config.noHoverEffect);
|
|
428
434
|
config.shineScale && (this.beaconFocusShineScale = config.shineScale);
|
|
435
|
+
config.fontWeightTitle && (this.beaconFontWeightTitle = config.fontWeightTitle);
|
|
436
|
+
config.fontWeightBody && (this.beaconFontWeightBody = config.fontWeightBody);
|
|
429
437
|
return this;
|
|
430
438
|
}
|
|
431
439
|
// create notification beacon
|
|
@@ -460,6 +468,8 @@ export class BeaconNotifyService {
|
|
|
460
468
|
shine: this.beaconFocusShine,
|
|
461
469
|
noHoverEffect: this.beaconNoHoverEffect || this.beaconGlobalNoHoverEffect,
|
|
462
470
|
shineScale: this.beaconFocusShineScale || this.beaconGlobalFocusShineScale,
|
|
471
|
+
fontWeightTitle: this.beaconFontWeightTitle || this.beaconGlobalFontWeightTitle,
|
|
472
|
+
fontWeightBody: this.beaconFontWeightBody || this.beaconGlobalFontWeightBody,
|
|
463
473
|
signature
|
|
464
474
|
};
|
|
465
475
|
// Sanitize icon if passed
|
|
@@ -608,4 +618,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
|
608
618
|
type: Inject,
|
|
609
619
|
args: [BEACON_GLOBAL_CONFIG]
|
|
610
620
|
}] }] });
|
|
611
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhY29uLW5vdGlmeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9iZWFjb24tbm90aWZ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWEsWUFBWSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBR3hGLE9BQU8sRUFXTCxvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDakIsTUFBTSxTQUFTLENBQUM7OztBQUtqQixNQUFNLE9BQU8sbUJBQW1CO0lBdURWO0lBQ29CO0lBdkRoQyxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQTtJQUN4QyxlQUFlLEdBQWlEO1FBQ3RFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtRQUN6SixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7UUFDekosSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUs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QUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2xLLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2xLLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNKLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzFLLE1BQU0sRUFBRSxPQUFPLEVB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O2lCQUNuQjs7MEJBeURJLE1BQU07MkJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBWaWV3Q2hpbGQsIEV2ZW50RW1pdHRlciwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQmVhY29uTm90aWZ5Q29tcG9uZW50IH0gZnJvbSAnLi9iZWFjb24vYmVhY29uLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBJQmVhY29uQ29uZmlnLFxuICBJQmVhY29uSW5saW5lQ29uZmlnLFxuICBJQmVhY29uR2xvYmFsQ29uZmlnLFxuICBJQmVhY29uVHlwZSxcbiAgSUJlYWNvblBvc2l0aW9uQ29uZmlnLFxuICBJQmVhY29uRXZlbnQsXG4gIElCZWFjb25XYXRjaGVkRXZlbnQsXG4gIElCZWFjb25FdmVudE1lc3NhZ2UsXG4gIElCZWFjb25UeXBlSWNvbixcbiAgSUJlYWNvbkJ1dHRvblR5cGUsXG4gIEJFQUNPTl9HTE9CQUxfQ09ORklHLFxuICBCRUFDT05fT1ZFUkxBWV9DT0xPUixcbiAgQkVBQ09OX09WRVJMQVlfSUQsXG4gIEJFQUNPTl9UWVBFX0tFWVNcbn0gZnJvbSAnLi90eXBlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICBwcml2YXRlIGJlYWNvbkRlZmF1bHRJY29uS2V5cyA9IEJFQUNPTl9UWVBFX0tFWVNcbiAgcHJpdmF0ZSBiZWFjb25Db25maWdNYXA6IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge1xuICAgIGFsZXJ0OiB7IGljb246IHRoaXMuYmVhY29uRGVmYXVsdEljb25LZXlzWzBdLCBmb250SWNvbjogJ2ZhbHNlJywgY2xhc3M6ICdiZWFjb24tbWVzc2FnZS1hbGVydCcsIHRpdGxlOiAnQWxlcnQnLCBzdHlsZTogJycsIGFuaW1hdGlvbjogJycsIHR5cGU6ICdhbGVydCcgfSxcbiAgICBlcnJvcjogeyBpY29uOiB0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5c1sxXSwgZm9udEljb246ICdmYWxzZScsIGNsYXNzOiAnYmVhY29uLW1lc3NhZ2UtZXJyb3InLCB0aXRsZTogJ0Vycm9yJywgc3R5bGU6ICcnLCBhbmltYXRpb246ICcnLCB0eXBlOiAnZXJyb3InIH0sXG4gICAgaW5mbzogeyBpY29uOiB0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5c1syXSwgZm9udEljb246ICdmYWxzZScsIGNsYXNzOiAnYmVhY29uLW1lc3NhZ2UtaW5mbycsIHRpdGxlOiAnSW5mb3JtYXRpb24nLCBzdHlsZTogJycsIGFuaW1hdGlvbjogJycsIHR5cGU6ICdpbmZvJyB9LFxuICAgIHN1Y2Nlc3M6IHsgaWNvbjogdGhpcy5iZWFjb25EZWZhdWx0SWNvbktleXNbM10sIGZvbnRJY29uOiAnZmFsc2UnLCBjbGFzczogJ2JlYWNvbi1tZXNzYWdlLXN1Y2Nlc3MnLCB0aXRsZTogJ1N1Y2Nlc3MnLCBzdHlsZTogJycsIGFuaW1hdGlvbjogJycsIHR5cGU6ICdzdWNjZXNzJyB9LFxuICAgIHdhcm5pbmc6IHsgaWNvbjogdGhpcy5iZWFjb25EZWZhdWx0SWNvbktleXNbNF0sIGZvbnRJY29uOiAnZmFsc2UnLCBjbGFzczogJ2JlYWNvbi1tZXNzYWdlLXdhcm5pbmcnLCB0aXRsZTogJ1dhcm5pbmcnLCBzdHlsZTogJycsIGFuaW1hdGlvbjogJycsIHR5cGU6ICd3YXJuaW5nJyB9XG4gIH1cbiAgcHJpdmF0ZSBiZWFjb25UeXBlTWFwOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIGE6ICdzdWNjZXNzJywgYjogJ2Vycm9yJywgYzogJ3dhcm5pbmcnLCBkOiAnaW5mbycsIGU6ICdhbGVydCdcbiAgfVxuICBwcml2YXRlIGJlYWNvblRpdGxlPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uTWVzc2FnZT86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvbkljb24/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25NYW51YWxJZD86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvblNlbGVjdGVkTWFudWFsSWQ/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25JY29uRnJvbUZvbnQ/OiB0cnVlXG4gIHByaXZhdGUgYmVhY29uU3RhdGljPzogdHJ1ZSB8IG51bWJlclxuICBwcml2YXRlIGJlYWNvbkZpeGVkPzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvbkJsb2NrT3RoZXJzPzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvblByZXZlbnRDbGlja0Nsb3NlPzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvbkFsbG93RHVwbGljYXRlPzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvbkZvY3VzPzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvbkZvY3VzU2hpbmU/OiB0cnVlXG4gIHByaXZhdGUgYmVhY29uRm9jdXNTaGluZVNjYWxlPzogbnVtYmVyXG4gIHByaXZhdGUgYmVhY29uT3ZlcmxheUNvbG9yPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uU3R5bGVDbGFzcz86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvblJlcGxhY2VtZW50Q2xhc3M/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25BbmltYXRpb25DbGFzcz86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvbk5vSG92ZXJFZmZlY3Q/OiB0cnVlXG4gIHByaXZhdGUgYmVhY29uR2xvYmFsU3RhdGljPzogdHJ1ZSB8IG51bWJlclxuICBwcml2YXRlIGJlYWNvbkdsb2JhbEZpeGVkPzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvbkdsb2JhbEJsb2NrT3RoZXJzPzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvbkdsb2JhbFByZXZlbnRDbGlja0Nsb3NlPzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvbkdsb2JhbER1cGxpY2F0ZT86IGJvb2xlYW5cbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxOb0hvdmVyRWZmZWN0PzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvbkdsb2JhbEZvY3VzU2hpbmVTY2FsZT86IG51bWJlclxuICBwcml2YXRlIGJlYWNvbkdsb2JhbFBvc2l0aW9uaW5nPzogSUJlYWNvblBvc2l0aW9uQ29uZmlnXG4gIHByaXZhdGUgYmVhY29uR2xvYmFsRm9jdXNPdmVybGF5Q29sb3I/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25Db250YWluZXIhOiBFbGVtZW50UmVmXG4gIHByaXZhdGUgYmVhY29uRGVmYXVsdEFuaW1hdGlvbkNsYXNzTmFtZTogc3RyaW5nID0gJ2JlYWNvbi1tZXNzYWdlLWNvbnRyb2wtYW5pbWF0ZSdcbiAgcHJpdmF0ZSBiZWFjb25TdWNjZXNzb3JCbG9ja2VyQXV0b0lkPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uV2l0aEFjdGl2ZUZvY3VzQXV0b0lkPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uQnV0dG9uczogSUJlYWNvbkJ1dHRvblR5cGUgPSB7fVxuICBwcml2YXRlIGJlYWNvbkZvY3VzT3JkZXJMaWJyYXJ5OiBBcnJheTxzdHJpbmc+ID0gW11cbiAgcHJpdmF0ZSBiZWFjb25TdWJzY3JpYmVkRXZlbnRMaWJyYXJ5OiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgRXZlbnRFbWl0dGVyPElCZWFjb25FdmVudD4gfSB9ID0ge31cbiAgcHJpdmF0ZSBiZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5OiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW10pXG4gIHByaXZhdGUgYmVhY29uV2F0Y2hlZEV2ZW50VGFza01hc3RlcjogRXZlbnRFbWl0dGVyPElCZWFjb25XYXRjaGVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQmVhY29uV2F0Y2hlZEV2ZW50PigpXG4gIHByaXZhdGUgYmVhY29uQWxsRXZlbnRUYXNrTWFzdGVyOiBFdmVudEVtaXR0ZXI8SUJlYWNvbldhdGNoZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElCZWFjb25XYXRjaGVkRXZlbnQ+KClcbiAgcHJpdmF0ZSBiZWFjb25Gb2N1c092ZXJsYXlET00/OiBIVE1MRWxlbWVudFxuICBwdWJsaWMgYmVhY29uRXZlbnRUYXNrTWFzdGVyOiBFdmVudEVtaXR0ZXI8eyBba2V5OiBzdHJpbmddOiBib29sZWFufCBzdHJpbmcgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB8IHN0cmluZyB9PigpXG4gIHB1YmxpYyBiZWFjb25MaWJyYXJ5OiBBcnJheTxJQmVhY29uQ29uZmlnPiA9IFtdXG4gIHB1YmxpYyBiZWFjb25MaWJyYXJ5UXVldWU6IEFycmF5PElCZWFjb25Db25maWc+ID0gW11cbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgQEluamVjdChCRUFDT05fR0xPQkFMX0NPTkZJRykgcHJpdmF0ZSBnbG9iYWxDb25maWc/OiBJQmVhY29uR2xvYmFsQ29uZmlnKSB7XG4gICAgdGhpcy5nbG9iYWxDb25maWcgJiYgdGhpcy5yZXNvbHZlR2xvYmFsQ29uZmlnKHRoaXMuZ2xvYmFsQ29uZmlnKVxuICAgIC8vIFJlc29sdmUgZXZlbnRzXG4gICAgdGhpcy5yZXNvbHZlQmVhY29uRXZlbnRzKClcbiAgfVxuXG4gIC8vIFJlc29sdmUgZ2xvYmFsIGNvbmZpZ1xuICBwcml2YXRlIHJlc29sdmVHbG9iYWxDb25maWcoZ2xvYmFsQ29uZmlnOiBJQmVhY29uR2xvYmFsQ29uZmlnKTogdm9pZCB7XG4gICAgaWYgKGdsb2JhbENvbmZpZy5zdGF0aWMpIHtcbiAgICAgIGlmICh0eXBlb2YgZ2xvYmFsQ29uZmlnLnN0YXRpYyA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5iZWFjb25HbG9iYWxGaXhlZCA9IHVuZGVmaW5lZFxuICAgICAgICB0aGlzLmJlYWNvbkdsb2JhbFN0YXRpYyA9IHRydWVcbiAgICAgIH0gZWxzZSB0aGlzLmJlYWNvbkdsb2JhbFN0YXRpYyA9IGdsb2JhbENvbmZpZy5zdGF0aWNcbiAgICB9XG5cbiAgICBpZiAoZ2xvYmFsQ29uZmlnLmZpeGVkKSB7XG4gICAgICB0aGlzLmJlYWNvbkdsb2JhbFN0YXRpYyA9IHVuZGVmaW5lZFxuICAgICAgdGhpcy5iZWFjb25HbG9iYWxGaXhlZCA9IHRydWVcbiAgICB9XG5cbiAgICBnbG9iYWxDb25maWcucHJldmVudENsaWNrQ2xvc2UgJiYgKHRoaXMuYmVhY29uR2xvYmFsUHJldmVudENsaWNrQ2xvc2UgPSBnbG9iYWxDb25maWcucHJldmVudENsaWNrQ2xvc2UpXG4gICAgZ2xvYmFsQ29uZmlnLmJsb2NrT3RoZXJzICYmICh0aGlzLmJlYWNvbkdsb2JhbEJsb2NrT3RoZXJzID0gZ2xvYmFsQ29uZmlnLmJsb2NrT3RoZXJzKVxuICAgIGdsb2JhbENvbmZpZy5vdmVybGF5Q29sb3IgJiYgKHRoaXMuYmVhY29uR2xvYmFsRm9jdXNPdmVybGF5Q29sb3IgPSBnbG9iYWxDb25maWcub3ZlcmxheUNvbG9yKVxuICAgIGdsb2JhbENvbmZpZy5kdXBsaWNhdGUgJiYgKHRoaXMuYmVhY29uR2xvYmFsRHVwbGljYXRlID0gZ2xvYmFsQ29uZmlnLmR1cGxpY2F0ZSlcbiAgICBnbG9iYWxDb25maWcuaWNvbiAmJiB0aGlzLnJlc29sdmVHbG9iYWxJY29uQ29uZmlnKGdsb2JhbENvbmZpZy5pY29uKVxuICAgIGdsb2JhbENvbmZpZy5zdHlsZUNsYXNzICYmIHRoaXMucmVzb2x2ZUdsb2JhbFByb3BlcnR5Q29uZmlnKGdsb2JhbENvbmZpZy5zdHlsZUNsYXNzLCAnc3R5bGUnKVxuICAgIGdsb2JhbENvbmZpZy5yZXBsYWNlbWVudENsYXNzICYmIHRoaXMucmVzb2x2ZUdsb2JhbFByb3BlcnR5Q29uZmlnKGdsb2JhbENvbmZpZy5yZXBsYWNlbWVudENsYXNzLCAnY2xhc3MnKVxuICAgIGdsb2JhbENvbmZpZy5hbmltYXRpb25DbGFzcyAmJiB0aGlzLnJlc29sdmVHbG9iYWxQcm9wZXJ0eUNvbmZpZyhnbG9iYWxDb25maWcuYW5pbWF0aW9uQ2xhc3MsICdhbmltYXRpb24nKVxuICAgIGdsb2JhbENvbmZpZy5wb3NpdGlvbiAmJiAodGhpcy5iZWFjb25HbG9iYWxQb3NpdGlvbmluZyA9IGdsb2JhbENvbmZpZy5wb3NpdGlvbilcbiAgICBnbG9iYWxDb25maWcubm9Ib3ZlckVmZmVjdCAmJiAodGhpcy5iZWFjb25HbG9iYWxOb0hvdmVyRWZmZWN0ID0gZ2xvYmFsQ29uZmlnLm5vSG92ZXJFZmZlY3QpXG4gICAgZ2xvYmFsQ29uZmlnLnNoaW5lU2NhbGUgJiYgKHRoaXMuYmVhY29uR2xvYmFsRm9jdXNTaGluZVNjYWxlID0gZ2xvYmFsQ29uZmlnLnNoaW5lU2NhbGUpXG4gIH1cblxuICAvLyBSZXNvbHZlIGdsb2JhbCBjb25maWcgLyBmb3IgcHJvcGVydHlcbiAgcHJpdmF0ZSByZXNvbHZlR2xvYmFsUHJvcGVydHlDb25maWcoY29uZmlnOiBJQmVhY29uVHlwZSwgcHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbmZpZy5hbGVydCAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuYWxlcnRbcHJvcGVydHldID0gY29uZmlnLmFsZXJ0KVxuICAgIGNvbmZpZy5lcnJvciAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuZXJyb3JbcHJvcGVydHldID0gY29uZmlnLmVycm9yKVxuICAgIGNvbmZpZy5pbmZvICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5pbmZvW3Byb3BlcnR5XSA9IGNvbmZpZy5pbmZvKVxuICAgIGNvbmZpZy5zdWNjZXNzICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5zdWNjZXNzW3Byb3BlcnR5XSA9IGNvbmZpZy5zdWNjZXNzKVxuICAgIGNvbmZpZy53YXJuaW5nICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC53YXJuaW5nW3Byb3BlcnR5XSA9IGNvbmZpZy53YXJuaW5nKVxuICB9XG5cbiAgLy8gUmVzb2x2ZSBnbG9iYWwgY29uZmlnIC8gZm9yIGljb25zXG4gIHByaXZhdGUgcmVzb2x2ZUdsb2JhbEljb25Db25maWcoY29uZmlnOiBJQmVhY29uVHlwZUljb24pOiB2b2lkIHtcbiAgICBjb25maWc/LmFsZXJ0Py5pY29uICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5hbGVydC5pY29uID0gY29uZmlnLmFsZXJ0Lmljb24pICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5hbGVydC5mb250SWNvbiA9IFN0cmluZygoY29uZmlnPy5hbGVydD8uZm9udEljb24gfHwgZmFsc2UpKSlcbiAgICBjb25maWc/LmVycm9yPy5pY29uICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5lcnJvci5pY29uID0gY29uZmlnLmVycm9yLmljb24pICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5lcnJvci5mb250SWNvbiA9IFN0cmluZygoY29uZmlnPy5lcnJvcj8uZm9udEljb24gfHwgZmFsc2UpKSlcbiAgICBjb25maWc/LmluZm8/Lmljb24gJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLmluZm8uaWNvbiA9IGNvbmZpZy5pbmZvLmljb24pICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5pbmZvLmZvbnRJY29uID0gU3RyaW5nKChjb25maWcuaW5mby5mb250SWNvbiB8fCBmYWxzZSkpKVxuICAgIGNvbmZpZz8uc3VjY2Vzcz8uaWNvbiAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuc3VjY2Vzcy5pY29uID0gY29uZmlnLnN1Y2Nlc3MuaWNvbikgJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLnN1Y2Nlc3MuZm9udEljb24gPSBTdHJpbmcoKGNvbmZpZy5zdWNjZXNzLmZvbnRJY29uIHx8IGZhbHNlKSkpXG4gICAgY29uZmlnPy53YXJuaW5nPy5pY29uICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC53YXJuaW5nLmljb24gPSBjb25maWcud2FybmluZy5pY29uKSAmJiAodGhpcy5iZWFjb25Db25maWdNYXAud2FybmluZy5mb250SWNvbiA9IFN0cmluZygoY29uZmlnLndhcm5pbmcuZm9udEljb24gfHwgZmFsc2UpKSlcbiAgfVxuXG4gIC8vIFJlc29sdmUgYmVhY29uIGV2ZW50c1xuICBwcml2YXRlIHJlc29sdmVCZWFjb25FdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5iZWFjb25FdmVudFRhc2tNYXN0ZXIuc3Vic2NyaWJlKChtZXNzYWdlOiBJQmVhY29uRXZlbnRNZXNzYWdlKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IFN0cmluZyhtZXNzYWdlLmlkKVxuICAgICAgaWYgKG1lc3NhZ2UuZGVsZXRlKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZVBvc3NpYmxlQmxvY2tlZEJlYWNvbnMoaWQpXG4gICAgICAgIHRoaXMucmVzb2x2ZVBvc3NpYmxlUXVldWVkRm9jdXMoaWQpXG4gICAgICAgIHRoaXMucGVyZm9ybUV2ZW50VGFzayhpZCwgeyBvbjogZmFsc2UsIG9mZjogdHJ1ZSB9KVxuICAgICAgICBkZWxldGUgdGhpcy5iZWFjb25TdWJzY3JpYmVkRXZlbnRMaWJyYXJ5W2lkXVxuICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1vdW50KSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUV2ZW50VGFzayhpZCwgeyBvbjogdHJ1ZSwgb2ZmOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvLyBQZXJmb3JtIGV2ZW50IHRhc2tcbiAgcHJpdmF0ZSBwZXJmb3JtRXZlbnRUYXNrKGlkOiBzdHJpbmcsIGV2ZW50T2JqZWN0OiBJQmVhY29uRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFtcCA9IHRoaXMuYmVhY29uU3Vic2NyaWJlZEV2ZW50TGlicmFyeVtpZF1cbiAgICBjb25zdCBldmVudCA9IDxFdmVudEVtaXR0ZXI8SUJlYWNvbkV2ZW50Pj5zdGFtcC5ldmVudFxuICAgIGNvbnN0IG1hbnVhbElkID0gc3RhbXA/Lm1hbnVhbElkPy50b1N0cmluZygpLnJlcGxhY2UoL3VuZGVmaW5lZC8sICcnKVxuICAgIGV2ZW50LmVtaXQoZXZlbnRPYmplY3QpXG4gICAgdGhpcy5iZWFjb25BbGxFdmVudFRhc2tNYXN0ZXIuZW1pdCh7IGlkOiBtYW51YWxJZCB8fCBudWxsLCB0eXBlOiBTdHJpbmcoc3RhbXAudHlwZSksIC4uLmV2ZW50T2JqZWN0IH0pXG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIG1hbnVhbCBpZCBpcyB3YXRjaGVkXG4gICAgaWYgKG1hbnVhbElkICYmIHRoaXMuYmVhY29uV2F0Y2hlZEV2ZW50TGlicmFyeS5oYXMobWFudWFsSWQpKSB7XG4gICAgICB0aGlzLmJlYWNvbldhdGNoZWRFdmVudFRhc2tNYXN0ZXIuZW1pdCh7IGlkOiBtYW51YWxJZCwgdHlwZTogU3RyaW5nKHN0YW1wLnR5cGUpLCAuLi5ldmVudE9iamVjdCB9KVxuICAgICAgLy8gQ2hlY2sgaWYgYmVhY29uIGlzIG9mZlxuICAgICAgaWYgKGV2ZW50T2JqZWN0Lm9mZikgXG4gICAgICAgIHRoaXMuYmVhY29uV2F0Y2hlZEV2ZW50TGlicmFyeS5kZWxldGUobWFudWFsSWQpXG4gICAgfVxuICB9XG5cbiAgLy8gUmVzb2x2ZSBwb3NzaWJsZSBibG9ja2VkIGJlYWNvbnNcbiAgcHJpdmF0ZSByZXNvbHZlUG9zc2libGVCbG9ja2VkQmVhY29ucyhpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpZCBpcyBibG9ja2luZyBvdGhlcnNcbiAgICBpZiAoaWQgPT0gdGhpcy5iZWFjb25TdWNjZXNzb3JCbG9ja2VyQXV0b0lkKSB7XG4gICAgICBpZiAodGhpcy5iZWFjb25MaWJyYXJ5UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlTGVuZ3RoID0gdGhpcy5iZWFjb25MaWJyYXJ5UXVldWUubGVuZ3RoXG4gICAgICAgIC8vIExvb3AgdGhyb3VnaCBxdWV1ZVxuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHF1ZXVlTGVuZ3RoOyB4KyspIHtcbiAgICAgICAgICBjb25zdCBuZXh0SW5MaW5lID0gPElCZWFjb25Db25maWc+dGhpcy5iZWFjb25MaWJyYXJ5UXVldWUuc2hpZnQoKVxuXG4gICAgICAgICAgLy8gQWRkIG1lc3NhZ2UgdG8gbGlicmFyeVxuICAgICAgICAgIGlmICh0aGlzLmdldEJlYWNvbkdsb2JhbFBvc2l0aW9uQ29uZmlnPy50b3BCb3R0b20gPT0gJ3RvcCcpXG4gICAgICAgICAgICB0aGlzLmJlYWNvbkxpYnJhcnkudW5zaGlmdChuZXh0SW5MaW5lKVxuICAgICAgICAgIGVsc2UgdGhpcy5iZWFjb25MaWJyYXJ5LnB1c2gobmV4dEluTGluZSkgICAgXG5cbiAgICAgICAgICAvLyBDaGVjayBpZiBzZXQgdG8gYmxvY2tcbiAgICAgICAgICBpZiAobmV4dEluTGluZS5ibG9ja090aGVycykge1xuICAgICAgICAgICAgdGhpcy5iZWFjb25TdWNjZXNzb3JCbG9ja2VyQXV0b0lkID0gbmV4dEluTGluZS5iaWRcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgbm8gbmV3IGJlYWNvbiBpcyBzZXQgYXMgYmxvY2tlciBhbmQgdW5zZXQgcHJldmlvdXMgdmFsdWVcbiAgICAgICAgaWYgKGlkID09IHRoaXMuYmVhY29uU3VjY2Vzc29yQmxvY2tlckF1dG9JZCkgXG4gICAgICAgICAgdGhpcy5iZWFjb25TdWNjZXNzb3JCbG9ja2VyQXV0b0lkID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBlbHNlIHRoaXMuYmVhY29uU3VjY2Vzc29yQmxvY2tlckF1dG9JZCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc29sdmUgcXVldWVkIGJlYWNvbiBmb2N1c1xuICBwcml2YXRlIHJlc29sdmVQb3NzaWJsZVF1ZXVlZEZvY3VzKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlkIGlzIGFjdGl2ZSBmb2N1cyBiZWFjb25cbiAgICBpZiAoaWQgPT0gdGhpcy5iZWFjb25XaXRoQWN0aXZlRm9jdXNBdXRvSWQpIHtcbiAgICAgIGlmICh0aGlzLmJlYWNvbkZvY3VzT3JkZXJMaWJyYXJ5Lmxlbmd0aCkge1xuICAgICAgICAvLyBQYXNzIHRoZSBuZXh0IGZvY3VzXG4gICAgICAgIHRoaXMuYmVhY29uV2l0aEFjdGl2ZUZvY3VzQXV0b0lkID0gdGhpcy5iZWFjb25Gb2N1c09yZGVyTGlicmFyeS5zaGlmdCgpXG4gICAgICAgIHRoaXMuYmVhY29uRXZlbnRUYXNrTWFzdGVyLmVtaXQoeyBhdXRvRGV0ZWN0TmV4dEZvY3VzQmVhY29uOiB0cnVlIH0pXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5iZWFjb25XaXRoQWN0aXZlRm9jdXNBdXRvSWQgPSB1bmRlZmluZWRcbiAgICAgICAgdGhpcy5kZXN0cm95QmVhY29uRm9jdXNPdmVybGF5KClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBHZW5lcmF0ZSB1bmlxdWUgaWQgZm9yIGl0ZW1cbiAgcHJpdmF0ZSBnZXQgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMikpLnRvU3RyaW5nKCkuc3BsaXQoJywnKS5qb2luKCcnKVxuICB9XG5cbiAgLy8gU2V0IGJlYWNvbiBjb250YWluZXJcbiAgcHVibGljIHNldEJlYWNvbkNvbnRhaW5lcihjb250YWluZXI6IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICB0aGlzLmJlYWNvbkNvbnRhaW5lciA9IGNvbnRhaW5lclxuICB9XG5cbiAgLy8gR2V0IGJlYWNvbiBjb250YWluZXJcbiAgcHVibGljIGdldCBnZXRCZWFjb25Db250YWluZXIoKTogRWxlbWVudFJlZiB7XG4gICAgcmV0dXJuIHRoaXMuYmVhY29uQ29udGFpbmVyXG4gIH1cblxuICAvLyBHZXQgYmVhY29uIGdsb2JhbCBwb3NpdGlvbiBjb25maWdcbiAgcHVibGljIGdldCBnZXRCZWFjb25HbG9iYWxQb3NpdGlvbkNvbmZpZygpOiBJQmVhY29uUG9zaXRpb25Db25maWcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmJlYWNvbkdsb2JhbFBvc2l0aW9uaW5nXG4gIH1cblxuICAvLyBHZXQgZGVmYXVsdCBpY29uIGtleXNcbiAgcHVibGljIGdldCBnZXRCZWFjb25EZWZhdWx0SWNvbktleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5c1xuICB9XG5cbiAgLy8gR2V0IGFjdGl2ZSBmb2N1cyBiZWFjb24gaWRcbiAgcHVibGljIGdldCBnZXRBY3RpdmVGb2N1c0JlYWNvbklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYmVhY29uV2l0aEFjdGl2ZUZvY3VzQXV0b0lkXG4gIH1cblxuICAvLyBDcmVhdGUgb3ZlcmxheSBmb3IgZm9jdXNlZCBiZWFjb25cbiAgcHVibGljIGNyZWF0ZUJlYWNvbkZvY3VzT3ZlcmxheShvdmVybGF5Q29sb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBvdmVybGF5LnNldEF0dHJpYnV0ZSgnaWQnLCBCRUFDT05fT1ZFUkxBWV9JRClcbiAgICBvdmVybGF5LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJ1xuICAgIG92ZXJsYXkuc3R5bGUudG9wID0gJzAnXG4gICAgb3ZlcmxheS5zdHlsZS5ib3R0b20gPSAnMCdcbiAgICBvdmVybGF5LnN0eWxlLnJpZ2h0ID0gJzAnXG4gICAgb3ZlcmxheS5zdHlsZS5sZWZ0ID0gJzAnXG4gICAgb3ZlcmxheS5zdHlsZS56SW5kZXggPSAnOTAwMidcbiAgICBvdmVybGF5LnN0eWxlLmJhY2tncm91bmQgPSBvdmVybGF5Q29sb3IgfHwgdGhpcy5iZWFjb25HbG9iYWxGb2N1c092ZXJsYXlDb2xvciB8fCBCRUFDT05fT1ZFUkxBWV9DT0xPUlxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuXG4gICAgLy8gUGFzcyBvdmVybGF5IGVsZW1lbnRcbiAgICB0aGlzLmJlYWNvbkZvY3VzT3ZlcmxheURPTSA9IG92ZXJsYXlcblxuICAgIHRoaXMuYmVhY29uQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQob3ZlcmxheSlcbiAgfVxuXG4gIC8vIFJlcGFpbnQgb3ZlcmxheSBmb3IgZm9jdXNlZCBiZWFjb25cbiAgcHVibGljIHJlcGFpbnRCZWFjb25Gb2N1c092ZXJsYXkob3ZlcmxheUNvbG9yPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYmVhY29uRm9jdXNPdmVybGF5RE9NKVxuICAgICAgdGhpcy5iZWFjb25Gb2N1c092ZXJsYXlET00uc3R5bGUuYmFja2dyb3VuZCA9IG92ZXJsYXlDb2xvciB8fCB0aGlzLmJlYWNvbkdsb2JhbEZvY3VzT3ZlcmxheUNvbG9yIHx8IEJFQUNPTl9PVkVSTEFZX0NPTE9SXG4gIH1cblxuICAvLyBEZXN0cm95IG92ZXJsYXkgZm9yIGZvY3VzZWQgYmVhY29uXG4gIHB1YmxpYyBkZXN0cm95QmVhY29uRm9jdXNPdmVybGF5KCk6IHZvaWQge1xuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnYXV0bydcbiAgICB0aGlzLmJlYWNvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2RpdiMnICsgQkVBQ09OX09WRVJMQVlfSUQpLnJlbW92ZSgpXG4gICAgdGhpcy5iZWFjb25Gb2N1c092ZXJsYXlET00gPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8vIFNldCBpZCBmb3IgYmVhY29uXG4gIHB1YmxpYyBpZChpZDogc3RyaW5nKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgaWQgJiYgKHRoaXMuYmVhY29uTWFudWFsSWQgPSBpZClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gU2V0IG5vdGlmaWNhdGlvbiB0aXRsZVxuICBwdWJsaWMgdGl0bGUodGl0bGU6IHN0cmluZyk6IEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICAgIHRpdGxlICYmICh0aGlzLmJlYWNvblRpdGxlID0gdGl0bGUpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZVxuICBwdWJsaWMgbWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICBtZXNzYWdlICYmICh0aGlzLmJlYWNvbk1lc3NhZ2UgPSBtZXNzYWdlKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBIaWdobGlnaHQgaWQgb2YgYmVhY29uIHRvIHVwZGF0ZVxuICBwdWJsaWMgc2VsZWN0KGlkOiBzdHJpbmcpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICBpZCAmJiAodGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkID0gaWQpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIENoYW5nZSBub3RpZmljYXRpb24gdGl0bGVcbiAgcHVibGljIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBmb3IgYWN0aXZlIG1hbnVhbCBpZCAvIGFuZCBpZiBhIGJlYWNvbiBpcyB0aWVkIHRvIGl0XG4gICAgaWYgKHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZCkge1xuICAgICAgY29uc3QgYmVhY29uSW5kZXggPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmluZEluZGV4KHggPT4geC5taWQgPT0gdGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKVxuICAgICAgaWYgKGJlYWNvbkluZGV4ID49IDApXG4gICAgICAgIHRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0udGl0bGUgPSB0aXRsZVxuICAgIH1cbiAgfVxuXG4gIC8vIENoYW5nZSBub3RpZmljYXRpb24gbWVzc2FnZVxuICBwdWJsaWMgc2V0TWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBmb3IgYWN0aXZlIG1hbnVhbCBpZCAvIGFuZCBpZiBhIGJlYWNvbiBpcyB0aWVkIHRvIGl0XG4gICAgaWYgKHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZCkge1xuICAgICAgY29uc3QgYmVhY29uSW5kZXggPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmluZEluZGV4KHggPT4geC5taWQgPT0gdGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKVxuICAgICAgaWYgKGJlYWNvbkluZGV4ID49IDApXG4gICAgICAgIHRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0uYm9keSA9IG1lc3NhZ2VcbiAgICB9XG4gIH1cblxuICAvLyBDaGFuZ2Ugbm90aWZpY2F0aW9uIHRpdGxlICYgbWVzc2FnZVxuICBwdWJsaWMgc2V0Q29udGVudCh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBmb3IgYWN0aXZlIG1hbnVhbCBpZCAvIGFuZCBpZiBhIGJlYWNvbiBpcyB0aWVkIHRvIGl0XG4gICAgaWYgKHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZCkge1xuICAgICAgY29uc3QgYmVhY29uSW5kZXggPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmluZEluZGV4KHggPT4geC5taWQgPT0gdGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKVxuICAgICAgaWYgKGJlYWNvbkluZGV4ID49IDApXG4gICAgICAgIHRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0udGl0bGUgPSB0aXRsZVxuICAgICAgICB0aGlzLmJlYWNvbkxpYnJhcnlbYmVhY29uSW5kZXhdLmJvZHkgPSBtZXNzYWdlXG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIGJlYWNvbiBidXR0b24gMVxuICBwdWJsaWMgc2V0QnV0dG9uT25lKHRleHQ6IHN0cmluZywgY2FuRGlzbWlzcz86IGJvb2xlYW4gfCBudWxsLCBjYWxsYmFjaz86IGFueSwgY2FsbGJhY2tBcmdzPzogYW55W10gfCBudWxsLCBwb3NpdGlvbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0Jyk6IHZvaWQge1xuICAgIC8vIENoZWNrIGZvciBhY3RpdmUgbWFudWFsIGlkIC8gYW5kIGlmIGEgYmVhY29uIGlzIHRpZWQgdG8gaXRcbiAgICBpZiAodGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKSB7XG4gICAgICBjb25zdCBiZWFjb25JbmRleCA9IHRoaXMuYmVhY29uTGlicmFyeS5maW5kSW5kZXgoeCA9PiB4Lm1pZCA9PSB0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpXG4gICAgICBpZiAoYmVhY29uSW5kZXggPj0gMCkge1xuICAgICAgICAoPElCZWFjb25CdXR0b25UeXBlPnRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0uYnV0dG9ucykub25lID0ge1xuICAgICAgICAgIHRleHQ6IHRleHQuc3Vic3RyaW5nKDAsIDE1KSxcbiAgICAgICAgICBjYW5EaXNtaXNzLFxuICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgIGNhbGxiYWNrQXJncyxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIGJlYWNvbiBidXR0b24gMlxuICBwdWJsaWMgc2V0QnV0dG9uVHdvKHRleHQ6IHN0cmluZywgY2FuRGlzbWlzcz86IGJvb2xlYW4gfCBudWxsLCBjYWxsYmFjaz86IGFueSwgY2FsbGJhY2tBcmdzPzogYW55W10gfCBudWxsLCBwb3NpdGlvbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0Jyk6IHZvaWQge1xuICAgIC8vIENoZWNrIGZvciBhY3RpdmUgbWFudWFsIGlkIC8gYW5kIGlmIGEgYmVhY29uIGlzIHRpZWQgdG8gaXRcbiAgICBpZiAodGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKSB7XG4gICAgICBjb25zdCBiZWFjb25JbmRleCA9IHRoaXMuYmVhY29uTGlicmFyeS5maW5kSW5kZXgoeCA9PiB4Lm1pZCA9PSB0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpXG4gICAgICBpZiAoYmVhY29uSW5kZXggPj0gMCkge1xuICAgICAgICBpZiAodGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS5idXR0b25zPy5vbmUpIHtcbiAgICAgICAgICAoPElCZWFjb25CdXR0b25UeXBlPnRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0uYnV0dG9ucykudHdvID0ge1xuICAgICAgICAgICAgdGV4dDogdGV4dC5zdWJzdHJpbmcoMCwgMTUpLFxuICAgICAgICAgICAgY2FuRGlzbWlzcyxcbiAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgY2FsbGJhY2tBcmdzLFxuICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB0aGlzLnNldEJ1dHRvbk9uZSh0ZXh0LCBjYW5EaXNtaXNzLCBjYWxsYmFjaywgY2FsbGJhY2tBcmdzLCBwb3NpdGlvbilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmUgYmVhY29uIGJ1dHRvbiAxXG4gIHB1YmxpYyByZW1vdmVCdXR0b25PbmUoKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgZm9yIGFjdGl2ZSBtYW51YWwgaWQgLyBhbmQgaWYgYSBiZWFjb24gaXMgdGllZCB0byBpdFxuICAgIGlmICh0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpIHtcbiAgICAgIGNvbnN0IGJlYWNvbkluZGV4ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbmRJbmRleCh4ID0+IHgubWlkID09IHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZClcbiAgICAgIGlmIChiZWFjb25JbmRleCA+PSAwKSB7XG4gICAgICAgICg8SUJlYWNvbkJ1dHRvblR5cGU+dGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS5idXR0b25zKS5vbmUgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmUgYmVhY29uIGJ1dHRvbiAyXG4gIHB1YmxpYyByZW1vdmVCdXR0b25Ud28oKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgZm9yIGFjdGl2ZSBtYW51YWwgaWQgLyBhbmQgaWYgYSBiZWFjb24gaXMgdGllZCB0byBpdFxuICAgIGlmICh0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpIHtcbiAgICAgIGNvbnN0IGJlYWNvbkluZGV4ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbmRJbmRleCh4ID0+IHgubWlkID09IHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZClcbiAgICAgIGlmIChiZWFjb25JbmRleCA+PSAwKSB7XG4gICAgICAgICg8SUJlYWNvbkJ1dHRvblR5cGU+dGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS5idXR0b25zKS50d28gPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmUgYmVhY29uIGJ1dHRvbnNcbiAgcHVibGljIHJlbW92ZUJ1dHRvbnMoKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgZm9yIGFjdGl2ZSBtYW51YWwgaWQgLyBhbmQgaWYgYSBiZWFjb24gaXMgdGllZCB0byBpdFxuICAgIGlmICh0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpIHtcbiAgICAgIGNvbnN0IGJlYWNvbkluZGV4ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbmRJbmRleCh4ID0+IHgubWlkID09IHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZClcbiAgICAgIGlmIChiZWFjb25JbmRleCA+PSAwKSB7XG4gICAgICAgICg8SUJlYWNvbkJ1dHRvblR5cGU+dGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS5idXR0b25zKS5vbmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICg8SUJlYWNvbkJ1dHRvblR5cGU+dGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS5idXR0b25zKS50d28gPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZXQgYmVhY29uIGFzIHN0YXRpYyBvciB3aXRoIGRlbGF5XG4gIHB1YmxpYyBzdGF0aWMoZGVsYXk/OiBudW1iZXIpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICB0aGlzLmJlYWNvblN0YXRpYyA9IGRlbGF5IHx8IHRydWVcbiAgICB0aGlzLmJlYWNvbkZpeGVkID0gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIFNldCBiZWFjb24gYXMgZml4ZWQgd2hpY2ggcmVtb3ZlcyB0aGUgY2xvc2UgYnV0dG9uIGFuZCBkaXNhbGxvd3MgY2xvc2Ugb24gY2xpY2tcbiAgcHVibGljIGZpeGVkKCk6IEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICAgIHRoaXMuYmVhY29uU3RhdGljID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25GaXhlZCA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gQWxsb3cgYmVhY29uIHRvIGJsb2NrIG90aGVyc1xuICBwdWJsaWMgYmxvY2soKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgdGhpcy5iZWFjb25CbG9ja090aGVycyA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gRm9jdXMgb24gYmVhY29uXG4gIHB1YmxpYyBmb2N1cyhvdmVybGF5Q29sb3I/OiBzdHJpbmcpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICBvdmVybGF5Q29sb3IgJiYgKHRoaXMuYmVhY29uT3ZlcmxheUNvbG9yID0gb3ZlcmxheUNvbG9yKVxuICAgIHRoaXMuYmVhY29uRm9jdXMgPSB0cnVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEZvY3VzIGJlYWNvbiBvbiBjZW50ZXIgc2NyZWVuXG4gIHB1YmxpYyBzaGluZShzY2FsZT86IG51bWJlciwgb3ZlcmxheUNvbG9yPzogc3RyaW5nKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgb3ZlcmxheUNvbG9yICYmICh0aGlzLmJlYWNvbk92ZXJsYXlDb2xvciA9IG92ZXJsYXlDb2xvcilcbiAgICB0aGlzLmJlYWNvbkZvY3VzU2hpbmUgPSB0aGlzLmJlYWNvbkZvY3VzID0gdHJ1ZVxuICAgIHNjYWxlICYmICh0aGlzLmJlYWNvbkZvY3VzU2hpbmVTY2FsZSA9IHNjYWxlKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBBZGQgYnV0dG9uIGZvciBiZWFjb25cbiAgcHVibGljIGJ1dHRvbih0ZXh0OiBzdHJpbmcsIGNhbkRpc21pc3M/OiBib29sZWFuIHwgbnVsbCwgY2FsbGJhY2s/OiBhbnksIGNhbGxiYWNrQXJncz86IGFueVtdIHwgbnVsbCwgcG9zaXRpb24/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICBpZiAoIXRoaXMuYmVhY29uQnV0dG9ucz8ub25lKSB7XG4gICAgICB0aGlzLmJlYWNvbkJ1dHRvbnMub25lID0ge1xuICAgICAgICB0ZXh0OiB0ZXh0LnN1YnN0cmluZygwLCAxNSksXG4gICAgICAgIGNhbkRpc21pc3MsXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBjYWxsYmFja0FyZ3MsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmJlYWNvbkJ1dHRvbnMub25lICYmICF0aGlzLmJlYWNvbkJ1dHRvbnMudHdvKSB7XG4gICAgICB0aGlzLmJlYWNvbkJ1dHRvbnMudHdvID0ge1xuICAgICAgICB0ZXh0OiB0ZXh0LnN1YnN0cmluZygwLCAxNSksXG4gICAgICAgIGNhbkRpc21pc3MsXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBjYWxsYmFja0FyZ3MsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEFsbG93IGR1cGxpY2F0ZSBmb3IgYmVhY29uXG4gIHB1YmxpYyBkdXBsaWNhdGUoKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgdGhpcy5iZWFjb25BbGxvd0R1cGxpY2F0ZSA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gU2V0IGNvbmZpZyB2YWx1ZXMgZm9yIGJlYWNvblxuICBwdWJsaWMgYnVpbGQoY29uZmlnOiBJQmVhY29uSW5saW5lQ29uZmlnKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgaWYgKGNvbmZpZy5zdGF0aWMpIHtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLnN0YXRpYyA9PSAnYm9vbGVhbicpXG4gICAgICAgIHRoaXMuc3RhdGljKClcbiAgICAgIGVsc2UgdGhpcy5zdGF0aWMoTnVtYmVyKGNvbmZpZy5zdGF0aWMpKVxuICAgIH1cblxuICAgIGNvbmZpZy5maXhlZCAmJiB0aGlzLmZpeGVkKClcbiAgICBjb25maWcuZHVwbGljYXRlICYmIHRoaXMuZHVwbGljYXRlKClcbiAgICBjb25maWcucHJldmVudENsaWNrQ2xvc2UgJiYgKHRoaXMuYmVhY29uUHJldmVudENsaWNrQ2xvc2UgPSBjb25maWcucHJldmVudENsaWNrQ2xvc2UpXG4gICAgY29uZmlnLmJsb2NrT3RoZXJzICYmICh0aGlzLmJlYWNvbkJsb2NrT3RoZXJzID0gY29uZmlnLmJsb2NrT3RoZXJzKVxuICAgIGNvbmZpZy5mb2N1cyAmJiAodGhpcy5iZWFjb25Gb2N1cyA9IGNvbmZpZy5mb2N1cylcbiAgICBjb25maWcuc2hpbmUgJiYgKHRoaXMuYmVhY29uRm9jdXNTaGluZSA9IHRoaXMuYmVhY29uRm9jdXMgPSBjb25maWcuc2hpbmUpXG4gICAgY29uZmlnLmljb24gJiYgKHRoaXMuYmVhY29uSWNvbiA9IGNvbmZpZy5pY29uKVxuICAgIGNvbmZpZy5mb250SWNvbiAmJiAodGhpcy5iZWFjb25JY29uRnJvbUZvbnQgPSBjb25maWcuZm9udEljb24pXG4gICAgY29uZmlnLnN0eWxlQ2xhc3MgJiYgKHRoaXMuYmVhY29uU3R5bGVDbGFzcyA9IGNvbmZpZy5zdHlsZUNsYXNzKVxuICAgIGNvbmZpZy5yZXBsYWNlbWVudENsYXNzICYmICh0aGlzLmJlYWNvblJlcGxhY2VtZW50Q2xhc3MgPSBjb25maWcucmVwbGFjZW1lbnRDbGFzcylcbiAgICBjb25maWcuYW5pbWF0aW9uQ2xhc3MgJiYgKHRoaXMuYmVhY29uQW5pbWF0aW9uQ2xhc3MgPSBjb25maWcuYW5pbWF0aW9uQ2xhc3MpXG4gICAgY29uZmlnLmFuaW1hdGlvbkNsYXNzICYmICh0aGlzLmJlYWNvbkFuaW1hdGlvbkNsYXNzID0gY29uZmlnLmFuaW1hdGlvbkNsYXNzKVxuICAgIGNvbmZpZy5vdmVybGF5Q29sb3IgJiYgKHRoaXMuYmVhY29uT3ZlcmxheUNvbG9yID0gY29uZmlnLm92ZXJsYXlDb2xvcilcbiAgICBjb25maWcubm9Ib3ZlckVmZmVjdCAmJiAodGhpcy5iZWFjb25Ob0hvdmVyRWZmZWN0ID0gY29uZmlnLm5vSG92ZXJFZmZlY3QpXG4gICAgY29uZmlnLnNoaW5lU2NhbGUgJiYgKHRoaXMuYmVhY29uRm9jdXNTaGluZVNjYWxlID0gY29uZmlnLnNoaW5lU2NhbGUpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIGNyZWF0ZSBub3RpZmljYXRpb24gYmVhY29uXG4gIHByaXZhdGUgYmVhY29uKG1lc3NhZ2U6IHN0cmluZywgdHlwZTogc3RyaW5nKTogRXZlbnRFbWl0dGVyPElCZWFjb25FdmVudD4ge1xuICAgIC8vIEdldCBzaWduYXR1cmVcbiAgICBjb25zdCBzaWduYXR1cmUgPSB3aW5kb3cuYnRvYSgodGhpcy5iZWFjb25UaXRsZSB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcFt0eXBlXS50aXRsZSkgKyAnLicgKyBtZXNzYWdlKVxuICAgIC8vIEdlbmVyYXRlIGJlYWNvbiBpZFxuICAgIGNvbnN0IGJlYWNvbklkID0gdGhpcy5nZXRJZFxuICAgIC8vIFJlZ2lzdGVyIGJlYWNvbiBpbiBldmVudCBsaWJyYXJ5XG4gICAgdGhpcy5iZWFjb25TdWJzY3JpYmVkRXZlbnRMaWJyYXJ5W2JlYWNvbklkXSA9IE9iamVjdC5jcmVhdGUoe30pXG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBpZiBzZXQgdG8gcHJldmVudCBvciBwcm9jZWVkIGlmIHR1cm5lZCBvZmZcbiAgICBpZiAodGhpcy5iZWFjb25BbGxvd0R1cGxpY2F0ZSB8fCAoKFt1bmRlZmluZWQsIGZhbHNlXS5pbmNsdWRlcyh0aGlzLmJlYWNvbkdsb2JhbER1cGxpY2F0ZSkgJiYgdGhpcy5pc05ld0JlYWNvbkFEdXBsaWNhdGUoc2lnbmF0dXJlKSA9PSAhMSkgfHwgdGhpcy5iZWFjb25HbG9iYWxEdXBsaWNhdGUpKSB7XG4gICAgICBjb25zdCBiZWFjb25PYmplY3Q6IElCZWFjb25Db25maWcgPSB7XG4gICAgICAgIGJpZDogYmVhY29uSWQsXG4gICAgICAgIG1pZDogdGhpcy5iZWFjb25NYW51YWxJZCxcbiAgICAgICAgdHlwZTogdGhpcy5iZWFjb25Db25maWdNYXBbdHlwZV0uY2xhc3MsXG4gICAgICAgIGljb246IHRoaXMuYmVhY29uSWNvbiB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcFt0eXBlXS5pY29uLFxuICAgICAgICBmb250SWNvbjogdGhpcy5iZWFjb25JY29uRnJvbUZvbnQgfHwgKHRoaXMuYmVhY29uQ29uZmlnTWFwW3R5cGVdLmZvbnRJY29uID09ICd0cnVlJyA/IHRydWUgOiB1bmRlZmluZWQpLFxuICAgICAgICB0aXRsZTogdGhpcy5iZWFjb25UaXRsZSB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcFt0eXBlXS50aXRsZSxcbiAgICAgICAgc3RhdGljOiB0aGlzLmJlYWNvblN0YXRpYyB8fCB0aGlzLmJlYWNvbkdsb2JhbFN0YXRpYyxcbiAgICAgICAgZml4ZWQ6IHRoaXMuYmVhY29uRml4ZWQgfHwgdGhpcy5iZWFjb25HbG9iYWxGaXhlZCxcbiAgICAgICAgcHJldmVudENsaWNrQ2xvc2U6IHRoaXMuYmVhY29uUHJldmVudENsaWNrQ2xvc2UgfHwgdGhpcy5iZWFjb25HbG9iYWxQcmV2ZW50Q2xpY2tDbG9zZSxcbiAgICAgICAgc3R5bGVDbGFzczogdGhpcy5iZWFjb25TdHlsZUNsYXNzIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwW3R5cGVdLnN0eWxlLFxuICAgICAgICByZXBsYWNlbWVudENsYXNzOiB0aGlzLmJlYWNvblJlcGxhY2VtZW50Q2xhc3MsXG4gICAgICAgIGFuaW1hdGlvbkNsYXNzOiB0aGlzLmJlYWNvbkFuaW1hdGlvbkNsYXNzIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwW3R5cGVdLmFuaW1hdGlvbiB8fCB0aGlzLmJlYWNvbkRlZmF1bHRBbmltYXRpb25DbGFzc05hbWUsXG4gICAgICAgIGJsb2NrT3RoZXJzOiB0aGlzLmJlYWNvbkJsb2NrT3RoZXJzIHx8IHRoaXMuYmVhY29uR2xvYmFsQmxvY2tPdGhlcnMsXG4gICAgICAgIGJ1dHRvbnM6IHRoaXMuYmVhY29uQnV0dG9ucyxcbiAgICAgICAgb3ZlcmxheUNvbG9yOiB0aGlzLmJlYWNvbk92ZXJsYXlDb2xvcixcbiAgICAgICAgYm9keUh0bWw6IDxTYWZlSHRtbD50aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChtZXNzYWdlKSxcbiAgICAgICAgYm9keTogbWVzc2FnZSxcbiAgICAgICAgZm9jdXM6IHRoaXMuYmVhY29uRm9jdXMsXG4gICAgICAgIHNoaW5lOiB0aGlzLmJlYWNvbkZvY3VzU2hpbmUsXG4gICAgICAgIG5vSG92ZXJFZmZlY3Q6IHRoaXMuYmVhY29uTm9Ib3ZlckVmZmVjdCB8fCB0aGlzLmJlYWNvbkdsb2JhbE5vSG92ZXJFZmZlY3QsXG4gICAgICAgIHNoaW5lU2NhbGU6IHRoaXMuYmVhY29uRm9jdXNTaGluZVNjYWxlIHx8IHRoaXMuYmVhY29uR2xvYmFsRm9jdXNTaGluZVNjYWxlLFxuICAgICAgICBzaWduYXR1cmVcbiAgICAgIH1cblxuICAgICAgLy8gU2FuaXRpemUgaWNvbiBpZiBwYXNzZWRcbiAgICAgIGlmICghYmVhY29uT2JqZWN0LmZvbnRJY29uICYmIGJlYWNvbk9iamVjdC5pY29uICYmICF0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5cy5pbmNsdWRlcyhiZWFjb25PYmplY3QuaWNvbikpIHtcbiAgICAgICAgYmVhY29uT2JqZWN0LnN2Z0ljb24gPSA8U2FmZUh0bWw+dGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoYmVhY29uT2JqZWN0Lmljb24pXG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBiZWFjb24gYmxvY2tpbmcgb3RoZXJzIGFuZCBhZGQgYnVpbGQgYmVhY29uIHRvIHF1ZXVlXG4gICAgICBpZiAodGhpcy5iZWFjb25TdWNjZXNzb3JCbG9ja2VyQXV0b0lkKSB7XG4gICAgICAgIHRoaXMuYmVhY29uTGlicmFyeVF1ZXVlLnB1c2goYmVhY29uT2JqZWN0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgYmVhY29uIGNhbiBibG9jayBhbmQgcmVnaXN0ZXIgaWRcbiAgICAgICAgaWYgKGJlYWNvbk9iamVjdC5ibG9ja090aGVycylcbiAgICAgICAgICB0aGlzLmJlYWNvblN1Y2Nlc3NvckJsb2NrZXJBdXRvSWQgPSBiZWFjb25PYmplY3QuYmlkXG5cbiAgICAgICAgLy8gQWRkIG1lc3NhZ2UgdG8gbGlicmFyeVxuICAgICAgICBpZiAodGhpcy5nZXRCZWFjb25HbG9iYWxQb3NpdGlvbkNvbmZpZz8udG9wQm90dG9tID09ICd0b3AnKVxuICAgICAgICAgIHRoaXMuYmVhY29uTGlicmFyeS51bnNoaWZ0KGJlYWNvbk9iamVjdClcbiAgICAgICAgZWxzZSB0aGlzLmJlYWNvbkxpYnJhcnkucHVzaChiZWFjb25PYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIGJlYWNvbiBoYXMgZm9jdXNcbiAgICAgIGlmICh0aGlzLmJlYWNvbkZvY3VzKSB7XG4gICAgICAgIGlmICh0aGlzLmJlYWNvbldpdGhBY3RpdmVGb2N1c0F1dG9JZClcbiAgICAgICAgICB0aGlzLmJlYWNvbkZvY3VzT3JkZXJMaWJyYXJ5LnB1c2goYmVhY29uT2JqZWN0LmJpZClcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXMuYmVhY29uV2l0aEFjdGl2ZUZvY3VzQXV0b0lkID0gYmVhY29uT2JqZWN0LmJpZFxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBpZCBpcyBzZXQgYW5kIHJlZ2lzdGVyIGl0XG4gICAgICBpZiAodGhpcy5iZWFjb25NYW51YWxJZCkge1xuICAgICAgICB0aGlzLmJlYWNvblN1YnNjcmliZWRFdmVudExpYnJhcnlbYmVhY29uSWRdLm1hbnVhbElkID0gdGhpcy5iZWFjb25NYW51YWxJZFxuICAgICAgICAvLyBNYXAgdGhlIGRlZmluZWQgaWQgdG8gdGhlIGF1dG8tZ2VuIGlkXG4gICAgICAgIHRoaXMuYmVhY29uV2F0Y2hlZEV2ZW50TGlicmFyeS5zZXQodGhpcy5iZWFjb25NYW51YWxJZCwgYmVhY29uSWQpXG4gICAgICB9XG5cbiAgICAgIC8vIFJlZ2lzdGVyIGJlYWNvbiB0eXBlIFxuICAgICAgdGhpcy5iZWFjb25TdWJzY3JpYmVkRXZlbnRMaWJyYXJ5W2JlYWNvbklkXS50eXBlID0gdGhpcy5iZWFjb25Db25maWdNYXBbdHlwZV0udHlwZVxuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIGV2ZW50IGZvciBiZWFjb25cbiAgICB0aGlzLmJlYWNvblN1YnNjcmliZWRFdmVudExpYnJhcnlbYmVhY29uSWRdLmV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+KClcblxuICAgIC8vIFJlc2V0XG4gICAgdGhpcy5iZWFjb25UaXRsZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uTWVzc2FnZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uU3RhdGljID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25GaXhlZCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uQmxvY2tPdGhlcnMgPSB1bmRlZmluZWRcbiAgICB0aGlzLmJlYWNvbk1hbnVhbElkID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25Gb2N1cyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uRm9jdXNTaGluZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uT3ZlcmxheUNvbG9yID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25BbGxvd0R1cGxpY2F0ZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uTm9Ib3ZlckVmZmVjdCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uSWNvbiA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uSWNvbkZyb21Gb250ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25TdHlsZUNsYXNzID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25SZXBsYWNlbWVudENsYXNzID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25BbmltYXRpb25DbGFzcyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uQnV0dG9ucyA9IHt9XG5cbiAgICByZXR1cm4gPEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+PnRoaXMuYmVhY29uU3Vic2NyaWJlZEV2ZW50TGlicmFyeVtiZWFjb25JZF0uZXZlbnRcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIHN1Y2Nlc3NcbiAgcHVibGljIHN1Y2Nlc3MoLi4ubWVzc2FnZTogc3RyaW5nW10pOiBFdmVudEVtaXR0ZXI8SUJlYWNvbkV2ZW50PiB7XG4gICAgLy8gU2V0IHRpdGxlXG4gICAgKG1lc3NhZ2UubGVuZ3RoID4gMSkgJiYgbWVzc2FnZVswXSAmJiB0aGlzLnRpdGxlKG1lc3NhZ2VbMF0pXG4gICAgLy8gU2V0IGJvZHlcbiAgICByZXR1cm4gdGhpcy5iZWFjb24obWVzc2FnZVsxXSB8fCBtZXNzYWdlWzBdIHx8IHRoaXMuYmVhY29uTWVzc2FnZSB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcC5zdWNjZXNzLnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuYSlcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIGVycm9yXG4gIHB1YmxpYyBlcnJvciguLi5tZXNzYWdlOiBzdHJpbmdbXSk6IEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+IHtcbiAgICAvLyBTZXQgdGl0bGVcbiAgICAobWVzc2FnZS5sZW5ndGggPiAxKSAmJiBtZXNzYWdlWzBdICYmIHRoaXMudGl0bGUobWVzc2FnZVswXSlcbiAgICAvLyBTZXQgYm9keVxuICAgIHJldHVybiB0aGlzLmJlYWNvbihtZXNzYWdlWzFdIHx8IG1lc3NhZ2VbMF0gfHwgdGhpcy5iZWFjb25NZXNzYWdlIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwLmVycm9yLnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuYilcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIHdhcm5pbmdcbiAgcHVibGljIHdhcm5pbmcoLi4ubWVzc2FnZTogc3RyaW5nW10pOiBFdmVudEVtaXR0ZXI8SUJlYWNvbkV2ZW50PiB7XG4gICAgLy8gU2V0IHRpdGxlXG4gICAgKG1lc3NhZ2UubGVuZ3RoID4gMSkgJiYgbWVzc2FnZVswXSAmJiB0aGlzLnRpdGxlKG1lc3NhZ2VbMF0pXG4gICAgLy8gU2V0IGJvZHlcbiAgICByZXR1cm4gdGhpcy5iZWFjb24obWVzc2FnZVsxXSB8fCBtZXNzYWdlWzBdIHx8IHRoaXMuYmVhY29uTWVzc2FnZSB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcC53YXJuaW5nLnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuYylcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIGluZm9cbiAgcHVibGljIGluZm8oLi4ubWVzc2FnZTogc3RyaW5nW10pOiBFdmVudEVtaXR0ZXI8SUJlYWNvbkV2ZW50PiB7XG4gICAgLy8gU2V0IHRpdGxlXG4gICAgKG1lc3NhZ2UubGVuZ3RoID4gMSkgJiYgbWVzc2FnZVswXSAmJiB0aGlzLnRpdGxlKG1lc3NhZ2VbMF0pXG4gICAgLy8gU2V0IGJvZHlcbiAgICByZXR1cm4gdGhpcy5iZWFjb24obWVzc2FnZVsxXSB8fCBtZXNzYWdlWzBdIHx8IHRoaXMuYmVhY29uTWVzc2FnZSB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcC5pbmZvLnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuZClcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIGFsZXJ0XG4gIHB1YmxpYyBhbGVydCguLi5tZXNzYWdlOiBzdHJpbmdbXSk6IEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+IHtcbiAgICAvLyBTZXQgdGl0bGVcbiAgICAobWVzc2FnZS5sZW5ndGggPiAxKSAmJiBtZXNzYWdlWzBdICYmIHRoaXMudGl0bGUobWVzc2FnZVswXSlcbiAgICAvLyBTZXQgYm9keVxuICAgIHJldHVybiB0aGlzLmJlYWNvbihtZXNzYWdlWzFdIHx8IG1lc3NhZ2VbMF0gfHwgdGhpcy5iZWFjb25NZXNzYWdlIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwLmFsZXJ0LnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuZSlcbiAgfVxuXG4gIC8vIFdhdGNoIGV2ZW50cyBmb3IgYmVhY29uIHdpdGggc3BlY2lmaWVkIGlkXG4gIHB1YmxpYyB3YXRjaChpZDogc3RyaW5nIHwgc3RyaW5nW10pOiBFdmVudEVtaXR0ZXI8SUJlYWNvbldhdGNoZWRFdmVudD4ge1xuICAgIC8vIFJlZ2lzdGVyIHdhdGNoZWQgaWRcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpZCkpXG4gICAgICBpZC5mb3JFYWNoKGsgPT4gdGhpcy5iZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5LnNldChrLCBTdHJpbmcoKSkpXG4gICAgZWxzZSB0aGlzLmJlYWNvbldhdGNoZWRFdmVudExpYnJhcnkuc2V0KGlkLCBTdHJpbmcoKSlcblxuICAgIHJldHVybiB0aGlzLmJlYWNvbldhdGNoZWRFdmVudFRhc2tNYXN0ZXJcbiAgfVxuXG4gIC8vIFdhdGNoIGV2ZW50cyBmb3IgYWxsIGJlYWNvbnNcbiAgcHVibGljIGV2ZW50cygpOiBFdmVudEVtaXR0ZXI8SUJlYWNvbldhdGNoZWRFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLmJlYWNvbkFsbEV2ZW50VGFza01hc3RlclxuICB9XG5cbiAgLy8gQ2xvc2UgYmVhY29uIHdpdGggaWRcbiAgcHVibGljIGNsb3NlT25lKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5iZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5LmhhcyhpZCkpIHtcbiAgICAgIGNvbnN0IGF1dG9JZCA9IDxzdHJpbmc+dGhpcy5iZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5LmdldChpZClcblxuICAgICAgLy8gUmVtb3ZlIHRoZSBiZWFjb25cbiAgICAgIHRoaXMuYmVhY29uTGlicmFyeSA9IHRoaXMuYmVhY29uTGlicmFyeS5maWx0ZXIoeCA9PiB7XG4gICAgICAgIHJldHVybiAoeC5iaWQgIT0gYXV0b0lkKVxuICAgICAgfSlcblxuICAgICAgdGhpcy5iZWFjb25FdmVudFRhc2tNYXN0ZXIuZW1pdCh7XG4gICAgICAgIGRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgaWQ6IGF1dG9JZFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvLyBDbG9zZSBhbGwgYmVhY29uc1xuICBwdWJsaWMgY2xvc2VBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5iZWFjb25MaWJyYXJ5ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbHRlcih4ID0+IHtcbiAgICAgIHRoaXMuYmVhY29uRXZlbnRUYXNrTWFzdGVyLmVtaXQoe1xuICAgICAgICBkZWxldGU6IHRydWUsXG4gICAgICAgIGlkOiB4LmJpZFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuICEoeC5iaWQpXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBwb3NzaWJsZSBkdXBsaWNhdGVcbiAgcHJpdmF0ZSBpc05ld0JlYWNvbkFEdXBsaWNhdGUoc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBkdXBsaWNhdGUgPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmluZCh4ID0+IHguc2lnbmF0dXJlID09IHNpZ25hdHVyZSlcbiAgICBjb25zdCBiZWFjb24gPSB0aGlzLmJlYWNvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYGRpdiNiY18ke2R1cGxpY2F0ZT8uYmlkfWApXG4gICAgcmV0dXJuIEJvb2xlYW4oYmVhY29uICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGJlYWNvbikub3BhY2l0eSA9PSAnMScpXG4gIH1cbn0iXX0=
|
|
621
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhY29uLW5vdGlmeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9iZWFjb24tbm90aWZ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWEsWUFBWSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBR3hGLE9BQU8sRUFXTCxvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDakIsTUFBTSxTQUFTLENBQUM7OztBQUtqQixNQUFNLE9BQU8sbUJBQW1CO0lBMkRWO0lBQ29CO0lBM0RoQyxxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQTtJQUN4QyxlQUFlLEdBQWlEO1FBQ3RFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtRQUN6SixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7UUFDekosSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUs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R0FBRyxDQUFDLENBQUE7UUFDakIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsK0JBQStCO0lBQ3ZCLHFCQUFxQixDQUFDLFNBQWlCO1FBQzdDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsQ0FBQTtRQUN4RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsVUFBVSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUMzRixPQUFPLE9BQU8sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUMxRSxDQUFDO3VHQW5wQlUsbUJBQW1CLDhDQTREcEIsb0JBQW9COzJHQTVEbkIsbUJBQW1CLGNBRmxCLE1BQU07OzJGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQTZESSxNQUFNOzJCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgVmlld0NoaWxkLCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEJlYWNvbk5vdGlmeUNvbXBvbmVudCB9IGZyb20gJy4vYmVhY29uL2JlYWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgSUJlYWNvbkNvbmZpZyxcbiAgSUJlYWNvbklubGluZUNvbmZpZyxcbiAgSUJlYWNvbkdsb2JhbENvbmZpZyxcbiAgSUJlYWNvblR5cGUsXG4gIElCZWFjb25Qb3NpdGlvbkNvbmZpZyxcbiAgSUJlYWNvbkV2ZW50LFxuICBJQmVhY29uV2F0Y2hlZEV2ZW50LFxuICBJQmVhY29uRXZlbnRNZXNzYWdlLFxuICBJQmVhY29uVHlwZUljb24sXG4gIElCZWFjb25CdXR0b25UeXBlLFxuICBCRUFDT05fR0xPQkFMX0NPTkZJRyxcbiAgQkVBQ09OX09WRVJMQVlfQ09MT1IsXG4gIEJFQUNPTl9PVkVSTEFZX0lELFxuICBCRUFDT05fVFlQRV9LRVlTXG59IGZyb20gJy4vdHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBiZWFjb25EZWZhdWx0SWNvbktleXMgPSBCRUFDT05fVFlQRV9LRVlTXG4gIHByaXZhdGUgYmVhY29uQ29uZmlnTWFwOiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHtcbiAgICBhbGVydDogeyBpY29uOiB0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5c1swXSwgZm9udEljb246ICdmYWxzZScsIGNsYXNzOiAnYmVhY29uLW1lc3NhZ2UtYWxlcnQnLCB0aXRsZTogJ0FsZXJ0Jywgc3R5bGU6ICcnLCBhbmltYXRpb246ICcnLCB0eXBlOiAnYWxlcnQnIH0sXG4gICAgZXJyb3I6IHsgaWNvbjogdGhpcy5iZWFjb25EZWZhdWx0SWNvbktleXNbMV0sIGZvbnRJY29uOiAnZmFsc2UnLCBjbGFzczogJ2JlYWNvbi1tZXNzYWdlLWVycm9yJywgdGl0bGU6ICdFcnJvcicsIHN0eWxlOiAnJywgYW5pbWF0aW9uOiAnJywgdHlwZTogJ2Vycm9yJyB9LFxuICAgIGluZm86IHsgaWNvbjogdGhpcy5iZWFjb25EZWZhdWx0SWNvbktleXNbMl0sIGZvbnRJY29uOiAnZmFsc2UnLCBjbGFzczogJ2JlYWNvbi1tZXNzYWdlLWluZm8nLCB0aXRsZTogJ0luZm9ybWF0aW9uJywgc3R5bGU6ICcnLCBhbmltYXRpb246ICcnLCB0eXBlOiAnaW5mbycgfSxcbiAgICBzdWNjZXNzOiB7IGljb246IHRoaXMuYmVhY29uRGVmYXVsdEljb25LZXlzWzNdLCBmb250SWNvbjogJ2ZhbHNlJywgY2xhc3M6ICdiZWFjb24tbWVzc2FnZS1zdWNjZXNzJywgdGl0bGU6ICdTdWNjZXNzJywgc3R5bGU6ICcnLCBhbmltYXRpb246ICcnLCB0eXBlOiAnc3VjY2VzcycgfSxcbiAgICB3YXJuaW5nOiB7IGljb246IHRoaXMuYmVhY29uRGVmYXVsdEljb25LZXlzWzRdLCBmb250SWNvbjogJ2ZhbHNlJywgY2xhc3M6ICdiZWFjb24tbWVzc2FnZS13YXJuaW5nJywgdGl0bGU6ICdXYXJuaW5nJywgc3R5bGU6ICcnLCBhbmltYXRpb246ICcnLCB0eXBlOiAnd2FybmluZycgfVxuICB9XG4gIHByaXZhdGUgYmVhY29uVHlwZU1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICBhOiAnc3VjY2VzcycsIGI6ICdlcnJvcicsIGM6ICd3YXJuaW5nJywgZDogJ2luZm8nLCBlOiAnYWxlcnQnXG4gIH1cbiAgcHJpdmF0ZSBiZWFjb25UaXRsZT86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvbk1lc3NhZ2U/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25JY29uPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uTWFudWFsSWQ/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25TZWxlY3RlZE1hbnVhbElkPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uSWNvbkZyb21Gb250PzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvblN0YXRpYz86IHRydWUgfCBudW1iZXJcbiAgcHJpdmF0ZSBiZWFjb25GaXhlZD86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25CbG9ja090aGVycz86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25QcmV2ZW50Q2xpY2tDbG9zZT86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25BbGxvd0R1cGxpY2F0ZT86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25Gb2N1cz86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25Gb2N1c1NoaW5lPzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvbkZvY3VzU2hpbmVTY2FsZT86IG51bWJlclxuICBwcml2YXRlIGJlYWNvbk92ZXJsYXlDb2xvcj86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvblN0eWxlQ2xhc3M/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25SZXBsYWNlbWVudENsYXNzPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uQW5pbWF0aW9uQ2xhc3M/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25Ob0hvdmVyRWZmZWN0PzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvbkZvbnRXZWlnaHRUaXRsZT86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvbkZvbnRXZWlnaHRCb2R5Pzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uR2xvYmFsU3RhdGljPzogdHJ1ZSB8IG51bWJlclxuICBwcml2YXRlIGJlYWNvbkdsb2JhbEZpeGVkPzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvbkdsb2JhbEJsb2NrT3RoZXJzPzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvbkdsb2JhbFByZXZlbnRDbGlja0Nsb3NlPzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvbkdsb2JhbER1cGxpY2F0ZT86IGJvb2xlYW5cbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxOb0hvdmVyRWZmZWN0PzogdHJ1ZVxuICBwcml2YXRlIGJlYWNvbkdsb2JhbEZvY3VzU2hpbmVTY2FsZT86IG51bWJlclxuICBwcml2YXRlIGJlYWNvbkdsb2JhbFBvc2l0aW9uaW5nPzogSUJlYWNvblBvc2l0aW9uQ29uZmlnXG4gIHByaXZhdGUgYmVhY29uR2xvYmFsRm9jdXNPdmVybGF5Q29sb3I/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxGb250V2VpZ2h0VGl0bGU/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxGb250V2VpZ2h0Qm9keT86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvbkNvbnRhaW5lciE6IEVsZW1lbnRSZWZcbiAgcHJpdmF0ZSBiZWFjb25EZWZhdWx0QW5pbWF0aW9uQ2xhc3NOYW1lOiBzdHJpbmcgPSAnYmVhY29uLW1lc3NhZ2UtY29udHJvbC1hbmltYXRlJ1xuICBwcml2YXRlIGJlYWNvblN1Y2Nlc3NvckJsb2NrZXJBdXRvSWQ/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25XaXRoQWN0aXZlRm9jdXNBdXRvSWQ/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25CdXR0b25zOiBJQmVhY29uQnV0dG9uVHlwZSA9IHt9XG4gIHByaXZhdGUgYmVhY29uRm9jdXNPcmRlckxpYnJhcnk6IEFycmF5PHN0cmluZz4gPSBbXVxuICBwcml2YXRlIGJlYWNvblN1YnNjcmliZWRFdmVudExpYnJhcnk6IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBFdmVudEVtaXR0ZXI8SUJlYWNvbkV2ZW50PiB9IH0gPSB7fVxuICBwcml2YXRlIGJlYWNvbldhdGNoZWRFdmVudExpYnJhcnk6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXSlcbiAgcHJpdmF0ZSBiZWFjb25XYXRjaGVkRXZlbnRUYXNrTWFzdGVyOiBFdmVudEVtaXR0ZXI8SUJlYWNvbldhdGNoZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElCZWFjb25XYXRjaGVkRXZlbnQ+KClcbiAgcHJpdmF0ZSBiZWFjb25BbGxFdmVudFRhc2tNYXN0ZXI6IEV2ZW50RW1pdHRlcjxJQmVhY29uV2F0Y2hlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUJlYWNvbldhdGNoZWRFdmVudD4oKVxuICBwcml2YXRlIGJlYWNvbkZvY3VzT3ZlcmxheURPTT86IEhUTUxFbGVtZW50XG4gIHB1YmxpYyBiZWFjb25FdmVudFRhc2tNYXN0ZXI6IEV2ZW50RW1pdHRlcjx7IFtrZXk6IHN0cmluZ106IGJvb2xlYW58IHN0cmluZyB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBba2V5OiBzdHJpbmddOiBib29sZWFuIHwgc3RyaW5nIH0+KClcbiAgcHVibGljIGJlYWNvbkxpYnJhcnk6IEFycmF5PElCZWFjb25Db25maWc+ID0gW11cbiAgcHVibGljIGJlYWNvbkxpYnJhcnlRdWV1ZTogQXJyYXk8SUJlYWNvbkNvbmZpZz4gPSBbXVxuICBcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBASW5qZWN0KEJFQUNPTl9HTE9CQUxfQ09ORklHKSBwcml2YXRlIGdsb2JhbENvbmZpZz86IElCZWFjb25HbG9iYWxDb25maWcpIHtcbiAgICB0aGlzLmdsb2JhbENvbmZpZyAmJiB0aGlzLnJlc29sdmVHbG9iYWxDb25maWcodGhpcy5nbG9iYWxDb25maWcpXG4gICAgLy8gUmVzb2x2ZSBldmVudHNcbiAgICB0aGlzLnJlc29sdmVCZWFjb25FdmVudHMoKVxuICB9XG5cbiAgLy8gUmVzb2x2ZSBnbG9iYWwgY29uZmlnXG4gIHByaXZhdGUgcmVzb2x2ZUdsb2JhbENvbmZpZyhnbG9iYWxDb25maWc6IElCZWFjb25HbG9iYWxDb25maWcpOiB2b2lkIHtcbiAgICBpZiAoZ2xvYmFsQ29uZmlnLnN0YXRpYykge1xuICAgICAgaWYgKHR5cGVvZiBnbG9iYWxDb25maWcuc3RhdGljID09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLmJlYWNvbkdsb2JhbEZpeGVkID0gdW5kZWZpbmVkXG4gICAgICAgIHRoaXMuYmVhY29uR2xvYmFsU3RhdGljID0gdHJ1ZVxuICAgICAgfSBlbHNlIHRoaXMuYmVhY29uR2xvYmFsU3RhdGljID0gZ2xvYmFsQ29uZmlnLnN0YXRpY1xuICAgIH1cblxuICAgIGlmIChnbG9iYWxDb25maWcuZml4ZWQpIHtcbiAgICAgIHRoaXMuYmVhY29uR2xvYmFsU3RhdGljID0gdW5kZWZpbmVkXG4gICAgICB0aGlzLmJlYWNvbkdsb2JhbEZpeGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIGdsb2JhbENvbmZpZy5wcmV2ZW50Q2xpY2tDbG9zZSAmJiAodGhpcy5iZWFjb25HbG9iYWxQcmV2ZW50Q2xpY2tDbG9zZSA9IGdsb2JhbENvbmZpZy5wcmV2ZW50Q2xpY2tDbG9zZSlcbiAgICBnbG9iYWxDb25maWcuYmxvY2tPdGhlcnMgJiYgKHRoaXMuYmVhY29uR2xvYmFsQmxvY2tPdGhlcnMgPSBnbG9iYWxDb25maWcuYmxvY2tPdGhlcnMpXG4gICAgZ2xvYmFsQ29uZmlnLm92ZXJsYXlDb2xvciAmJiAodGhpcy5iZWFjb25HbG9iYWxGb2N1c092ZXJsYXlDb2xvciA9IGdsb2JhbENvbmZpZy5vdmVybGF5Q29sb3IpXG4gICAgZ2xvYmFsQ29uZmlnLmR1cGxpY2F0ZSAmJiAodGhpcy5iZWFjb25HbG9iYWxEdXBsaWNhdGUgPSBnbG9iYWxDb25maWcuZHVwbGljYXRlKVxuICAgIGdsb2JhbENvbmZpZy5pY29uICYmIHRoaXMucmVzb2x2ZUdsb2JhbEljb25Db25maWcoZ2xvYmFsQ29uZmlnLmljb24pXG4gICAgZ2xvYmFsQ29uZmlnLnN0eWxlQ2xhc3MgJiYgdGhpcy5yZXNvbHZlR2xvYmFsUHJvcGVydHlDb25maWcoZ2xvYmFsQ29uZmlnLnN0eWxlQ2xhc3MsICdzdHlsZScpXG4gICAgZ2xvYmFsQ29uZmlnLnJlcGxhY2VtZW50Q2xhc3MgJiYgdGhpcy5yZXNvbHZlR2xvYmFsUHJvcGVydHlDb25maWcoZ2xvYmFsQ29uZmlnLnJlcGxhY2VtZW50Q2xhc3MsICdjbGFzcycpXG4gICAgZ2xvYmFsQ29uZmlnLmFuaW1hdGlvbkNsYXNzICYmIHRoaXMucmVzb2x2ZUdsb2JhbFByb3BlcnR5Q29uZmlnKGdsb2JhbENvbmZpZy5hbmltYXRpb25DbGFzcywgJ2FuaW1hdGlvbicpXG4gICAgZ2xvYmFsQ29uZmlnLnBvc2l0aW9uICYmICh0aGlzLmJlYWNvbkdsb2JhbFBvc2l0aW9uaW5nID0gZ2xvYmFsQ29uZmlnLnBvc2l0aW9uKVxuICAgIGdsb2JhbENvbmZpZy5ub0hvdmVyRWZmZWN0ICYmICh0aGlzLmJlYWNvbkdsb2JhbE5vSG92ZXJFZmZlY3QgPSBnbG9iYWxDb25maWcubm9Ib3ZlckVmZmVjdClcbiAgICBnbG9iYWxDb25maWcuc2hpbmVTY2FsZSAmJiAodGhpcy5iZWFjb25HbG9iYWxGb2N1c1NoaW5lU2NhbGUgPSBnbG9iYWxDb25maWcuc2hpbmVTY2FsZSlcbiAgICBnbG9iYWxDb25maWcuZm9udFdlaWdodFRpdGxlICYmICh0aGlzLmJlYWNvbkdsb2JhbEZvbnRXZWlnaHRUaXRsZSA9IGdsb2JhbENvbmZpZy5mb250V2VpZ2h0VGl0bGUpXG4gICAgZ2xvYmFsQ29uZmlnLmZvbnRXZWlnaHRCb2R5ICYmICh0aGlzLmJlYWNvbkdsb2JhbEZvbnRXZWlnaHRCb2R5ID0gZ2xvYmFsQ29uZmlnLmZvbnRXZWlnaHRCb2R5KVxuICB9XG5cbiAgLy8gUmVzb2x2ZSBnbG9iYWwgY29uZmlnIC8gZm9yIHByb3BlcnR5XG4gIHByaXZhdGUgcmVzb2x2ZUdsb2JhbFByb3BlcnR5Q29uZmlnKGNvbmZpZzogSUJlYWNvblR5cGUsIHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25maWcuYWxlcnQgJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLmFsZXJ0W3Byb3BlcnR5XSA9IGNvbmZpZy5hbGVydClcbiAgICBjb25maWcuZXJyb3IgJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLmVycm9yW3Byb3BlcnR5XSA9IGNvbmZpZy5lcnJvcilcbiAgICBjb25maWcuaW5mbyAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuaW5mb1twcm9wZXJ0eV0gPSBjb25maWcuaW5mbylcbiAgICBjb25maWcuc3VjY2VzcyAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuc3VjY2Vzc1twcm9wZXJ0eV0gPSBjb25maWcuc3VjY2VzcylcbiAgICBjb25maWcud2FybmluZyAmJiAodGhpcy5iZWFjb25Db25maWdNYXAud2FybmluZ1twcm9wZXJ0eV0gPSBjb25maWcud2FybmluZylcbiAgfVxuXG4gIC8vIFJlc29sdmUgZ2xvYmFsIGNvbmZpZyAvIGZvciBpY29uc1xuICBwcml2YXRlIHJlc29sdmVHbG9iYWxJY29uQ29uZmlnKGNvbmZpZzogSUJlYWNvblR5cGVJY29uKTogdm9pZCB7XG4gICAgY29uZmlnPy5hbGVydD8uaWNvbiAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuYWxlcnQuaWNvbiA9IGNvbmZpZy5hbGVydC5pY29uKSAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuYWxlcnQuZm9udEljb24gPSBTdHJpbmcoKGNvbmZpZz8uYWxlcnQ/LmZvbnRJY29uIHx8IGZhbHNlKSkpXG4gICAgY29uZmlnPy5lcnJvcj8uaWNvbiAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuZXJyb3IuaWNvbiA9IGNvbmZpZy5lcnJvci5pY29uKSAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuZXJyb3IuZm9udEljb24gPSBTdHJpbmcoKGNvbmZpZz8uZXJyb3I/LmZvbnRJY29uIHx8IGZhbHNlKSkpXG4gICAgY29uZmlnPy5pbmZvPy5pY29uICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5pbmZvLmljb24gPSBjb25maWcuaW5mby5pY29uKSAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuaW5mby5mb250SWNvbiA9IFN0cmluZygoY29uZmlnLmluZm8uZm9udEljb24gfHwgZmFsc2UpKSlcbiAgICBjb25maWc/LnN1Y2Nlc3M/Lmljb24gJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLnN1Y2Nlc3MuaWNvbiA9IGNvbmZpZy5zdWNjZXNzLmljb24pICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5zdWNjZXNzLmZvbnRJY29uID0gU3RyaW5nKChjb25maWcuc3VjY2Vzcy5mb250SWNvbiB8fCBmYWxzZSkpKVxuICAgIGNvbmZpZz8ud2FybmluZz8uaWNvbiAmJiAodGhpcy5iZWFjb25Db25maWdNYXAud2FybmluZy5pY29uID0gY29uZmlnLndhcm5pbmcuaWNvbikgJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLndhcm5pbmcuZm9udEljb24gPSBTdHJpbmcoKGNvbmZpZy53YXJuaW5nLmZvbnRJY29uIHx8IGZhbHNlKSkpXG4gIH1cblxuICAvLyBSZXNvbHZlIGJlYWNvbiBldmVudHNcbiAgcHJpdmF0ZSByZXNvbHZlQmVhY29uRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuYmVhY29uRXZlbnRUYXNrTWFzdGVyLnN1YnNjcmliZSgobWVzc2FnZTogSUJlYWNvbkV2ZW50TWVzc2FnZSkgPT4ge1xuICAgICAgY29uc3QgaWQgPSBTdHJpbmcobWVzc2FnZS5pZClcbiAgICAgIGlmIChtZXNzYWdlLmRlbGV0ZSkge1xuICAgICAgICB0aGlzLnJlc29sdmVQb3NzaWJsZUJsb2NrZWRCZWFjb25zKGlkKVxuICAgICAgICB0aGlzLnJlc29sdmVQb3NzaWJsZVF1ZXVlZEZvY3VzKGlkKVxuICAgICAgICB0aGlzLnBlcmZvcm1FdmVudFRhc2soaWQsIHsgb246IGZhbHNlLCBvZmY6IHRydWUgfSlcbiAgICAgICAgZGVsZXRlIHRoaXMuYmVhY29uU3Vic2NyaWJlZEV2ZW50TGlicmFyeVtpZF1cbiAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5tb3VudCkge1xuICAgICAgICB0aGlzLnBlcmZvcm1FdmVudFRhc2soaWQsIHsgb246IHRydWUsIG9mZjogZmFsc2UgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLy8gUGVyZm9ybSBldmVudCB0YXNrXG4gIHByaXZhdGUgcGVyZm9ybUV2ZW50VGFzayhpZDogc3RyaW5nLCBldmVudE9iamVjdDogSUJlYWNvbkV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3RhbXAgPSB0aGlzLmJlYWNvblN1YnNjcmliZWRFdmVudExpYnJhcnlbaWRdXG4gICAgY29uc3QgZXZlbnQgPSA8RXZlbnRFbWl0dGVyPElCZWFjb25FdmVudD4+c3RhbXAuZXZlbnRcbiAgICBjb25zdCBtYW51YWxJZCA9IHN0YW1wPy5tYW51YWxJZD8udG9TdHJpbmcoKS5yZXBsYWNlKC91bmRlZmluZWQvLCAnJylcbiAgICBldmVudC5lbWl0KGV2ZW50T2JqZWN0KVxuICAgIHRoaXMuYmVhY29uQWxsRXZlbnRUYXNrTWFzdGVyLmVtaXQoeyBpZDogbWFudWFsSWQgfHwgbnVsbCwgdHlwZTogU3RyaW5nKHN0YW1wLnR5cGUpLCAuLi5ldmVudE9iamVjdCB9KVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBtYW51YWwgaWQgaXMgd2F0Y2hlZFxuICAgIGlmIChtYW51YWxJZCAmJiB0aGlzLmJlYWNvbldhdGNoZWRFdmVudExpYnJhcnkuaGFzKG1hbnVhbElkKSkge1xuICAgICAgdGhpcy5iZWFjb25XYXRjaGVkRXZlbnRUYXNrTWFzdGVyLmVtaXQoeyBpZDogbWFudWFsSWQsIHR5cGU6IFN0cmluZyhzdGFtcC50eXBlKSwgLi4uZXZlbnRPYmplY3QgfSlcbiAgICAgIC8vIENoZWNrIGlmIGJlYWNvbiBpcyBvZmZcbiAgICAgIGlmIChldmVudE9iamVjdC5vZmYpIFxuICAgICAgICB0aGlzLmJlYWNvbldhdGNoZWRFdmVudExpYnJhcnkuZGVsZXRlKG1hbnVhbElkKVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc29sdmUgcG9zc2libGUgYmxvY2tlZCBiZWFjb25zXG4gIHByaXZhdGUgcmVzb2x2ZVBvc3NpYmxlQmxvY2tlZEJlYWNvbnMoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoaXMgaWQgaXMgYmxvY2tpbmcgb3RoZXJzXG4gICAgaWYgKGlkID09IHRoaXMuYmVhY29uU3VjY2Vzc29yQmxvY2tlckF1dG9JZCkge1xuICAgICAgaWYgKHRoaXMuYmVhY29uTGlicmFyeVF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBxdWV1ZUxlbmd0aCA9IHRoaXMuYmVhY29uTGlicmFyeVF1ZXVlLmxlbmd0aFxuICAgICAgICAvLyBMb29wIHRocm91Z2ggcXVldWVcbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBxdWV1ZUxlbmd0aDsgeCsrKSB7XG4gICAgICAgICAgY29uc3QgbmV4dEluTGluZSA9IDxJQmVhY29uQ29uZmlnPnRoaXMuYmVhY29uTGlicmFyeVF1ZXVlLnNoaWZ0KClcblxuICAgICAgICAgIC8vIEFkZCBtZXNzYWdlIHRvIGxpYnJhcnlcbiAgICAgICAgICBpZiAodGhpcy5nZXRCZWFjb25HbG9iYWxQb3NpdGlvbkNvbmZpZz8udG9wQm90dG9tID09ICd0b3AnKVxuICAgICAgICAgICAgdGhpcy5iZWFjb25MaWJyYXJ5LnVuc2hpZnQobmV4dEluTGluZSlcbiAgICAgICAgICBlbHNlIHRoaXMuYmVhY29uTGlicmFyeS5wdXNoKG5leHRJbkxpbmUpICAgIFxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgc2V0IHRvIGJsb2NrXG4gICAgICAgICAgaWYgKG5leHRJbkxpbmUuYmxvY2tPdGhlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuYmVhY29uU3VjY2Vzc29yQmxvY2tlckF1dG9JZCA9IG5leHRJbkxpbmUuYmlkXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIG5vIG5ldyBiZWFjb24gaXMgc2V0IGFzIGJsb2NrZXIgYW5kIHVuc2V0IHByZXZpb3VzIHZhbHVlXG4gICAgICAgIGlmIChpZCA9PSB0aGlzLmJlYWNvblN1Y2Nlc3NvckJsb2NrZXJBdXRvSWQpIFxuICAgICAgICAgIHRoaXMuYmVhY29uU3VjY2Vzc29yQmxvY2tlckF1dG9JZCA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgZWxzZSB0aGlzLmJlYWNvblN1Y2Nlc3NvckJsb2NrZXJBdXRvSWQgPSB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICAvLyBSZXNvbHZlIHF1ZXVlZCBiZWFjb24gZm9jdXNcbiAgcHJpdmF0ZSByZXNvbHZlUG9zc2libGVRdWV1ZWRGb2N1cyhpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpZCBpcyBhY3RpdmUgZm9jdXMgYmVhY29uXG4gICAgaWYgKGlkID09IHRoaXMuYmVhY29uV2l0aEFjdGl2ZUZvY3VzQXV0b0lkKSB7XG4gICAgICBpZiAodGhpcy5iZWFjb25Gb2N1c09yZGVyTGlicmFyeS5sZW5ndGgpIHtcbiAgICAgICAgLy8gUGFzcyB0aGUgbmV4dCBmb2N1c1xuICAgICAgICB0aGlzLmJlYWNvbldpdGhBY3RpdmVGb2N1c0F1dG9JZCA9IHRoaXMuYmVhY29uRm9jdXNPcmRlckxpYnJhcnkuc2hpZnQoKVxuICAgICAgICB0aGlzLmJlYWNvbkV2ZW50VGFza01hc3Rlci5lbWl0KHsgYXV0b0RldGVjdE5leHRGb2N1c0JlYWNvbjogdHJ1ZSB9KVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuYmVhY29uV2l0aEFjdGl2ZUZvY3VzQXV0b0lkID0gdW5kZWZpbmVkXG4gICAgICAgIHRoaXMuZGVzdHJveUJlYWNvbkZvY3VzT3ZlcmxheSgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gR2VuZXJhdGUgdW5pcXVlIGlkIGZvciBpdGVtXG4gIHByaXZhdGUgZ2V0IGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDIpKS50b1N0cmluZygpLnNwbGl0KCcsJykuam9pbignJylcbiAgfVxuXG4gIC8vIFNldCBiZWFjb24gY29udGFpbmVyXG4gIHB1YmxpYyBzZXRCZWFjb25Db250YWluZXIoY29udGFpbmVyOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgdGhpcy5iZWFjb25Db250YWluZXIgPSBjb250YWluZXJcbiAgfVxuXG4gIC8vIEdldCBiZWFjb24gY29udGFpbmVyXG4gIHB1YmxpYyBnZXQgZ2V0QmVhY29uQ29udGFpbmVyKCk6IEVsZW1lbnRSZWYge1xuICAgIHJldHVybiB0aGlzLmJlYWNvbkNvbnRhaW5lclxuICB9XG5cbiAgLy8gR2V0IGJlYWNvbiBnbG9iYWwgcG9zaXRpb24gY29uZmlnXG4gIHB1YmxpYyBnZXQgZ2V0QmVhY29uR2xvYmFsUG9zaXRpb25Db25maWcoKTogSUJlYWNvblBvc2l0aW9uQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5iZWFjb25HbG9iYWxQb3NpdGlvbmluZ1xuICB9XG5cbiAgLy8gR2V0IGRlZmF1bHQgaWNvbiBrZXlzXG4gIHB1YmxpYyBnZXQgZ2V0QmVhY29uRGVmYXVsdEljb25LZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5iZWFjb25EZWZhdWx0SWNvbktleXNcbiAgfVxuXG4gIC8vIEdldCBhY3RpdmUgZm9jdXMgYmVhY29uIGlkXG4gIHB1YmxpYyBnZXQgZ2V0QWN0aXZlRm9jdXNCZWFjb25JZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmJlYWNvbldpdGhBY3RpdmVGb2N1c0F1dG9JZFxuICB9XG5cbiAgLy8gQ3JlYXRlIG92ZXJsYXkgZm9yIGZvY3VzZWQgYmVhY29uXG4gIHB1YmxpYyBjcmVhdGVCZWFjb25Gb2N1c092ZXJsYXkob3ZlcmxheUNvbG9yPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgb3ZlcmxheS5zZXRBdHRyaWJ1dGUoJ2lkJywgQkVBQ09OX09WRVJMQVlfSUQpXG4gICAgb3ZlcmxheS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCdcbiAgICBvdmVybGF5LnN0eWxlLnRvcCA9ICcwJ1xuICAgIG92ZXJsYXkuc3R5bGUuYm90dG9tID0gJzAnXG4gICAgb3ZlcmxheS5zdHlsZS5yaWdodCA9ICcwJ1xuICAgIG92ZXJsYXkuc3R5bGUubGVmdCA9ICcwJ1xuICAgIG92ZXJsYXkuc3R5bGUuekluZGV4ID0gJzkwMDInXG4gICAgb3ZlcmxheS5zdHlsZS5iYWNrZ3JvdW5kID0gb3ZlcmxheUNvbG9yIHx8IHRoaXMuYmVhY29uR2xvYmFsRm9jdXNPdmVybGF5Q29sb3IgfHwgQkVBQ09OX09WRVJMQVlfQ09MT1JcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcblxuICAgIC8vIFBhc3Mgb3ZlcmxheSBlbGVtZW50XG4gICAgdGhpcy5iZWFjb25Gb2N1c092ZXJsYXlET00gPSBvdmVybGF5XG5cbiAgICB0aGlzLmJlYWNvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKG92ZXJsYXkpXG4gIH1cblxuICAvLyBSZXBhaW50IG92ZXJsYXkgZm9yIGZvY3VzZWQgYmVhY29uXG4gIHB1YmxpYyByZXBhaW50QmVhY29uRm9jdXNPdmVybGF5KG92ZXJsYXlDb2xvcj86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmJlYWNvbkZvY3VzT3ZlcmxheURPTSlcbiAgICAgIHRoaXMuYmVhY29uRm9jdXNPdmVybGF5RE9NLnN0eWxlLmJhY2tncm91bmQgPSBvdmVybGF5Q29sb3IgfHwgdGhpcy5iZWFjb25HbG9iYWxGb2N1c092ZXJsYXlDb2xvciB8fCBCRUFDT05fT1ZFUkxBWV9DT0xPUlxuICB9XG5cbiAgLy8gRGVzdHJveSBvdmVybGF5IGZvciBmb2N1c2VkIGJlYWNvblxuICBwdWJsaWMgZGVzdHJveUJlYWNvbkZvY3VzT3ZlcmxheSgpOiB2b2lkIHtcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nXG4gICAgdGhpcy5iZWFjb25Db250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdkaXYjJyArIEJFQUNPTl9PVkVSTEFZX0lEKS5yZW1vdmUoKVxuICAgIHRoaXMuYmVhY29uRm9jdXNPdmVybGF5RE9NID0gdW5kZWZpbmVkXG4gIH1cblxuICAvLyBTZXQgaWQgZm9yIGJlYWNvblxuICBwdWJsaWMgaWQoaWQ6IHN0cmluZyk6IEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICAgIGlkICYmICh0aGlzLmJlYWNvbk1hbnVhbElkID0gaWQpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gdGl0bGVcbiAgcHVibGljIHRpdGxlKHRpdGxlOiBzdHJpbmcpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICB0aXRsZSAmJiAodGhpcy5iZWFjb25UaXRsZSA9IHRpdGxlKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBTZXQgbm90aWZpY2F0aW9uIG1lc3NhZ2VcbiAgcHVibGljIG1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgbWVzc2FnZSAmJiAodGhpcy5iZWFjb25NZXNzYWdlID0gbWVzc2FnZSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gSGlnaGxpZ2h0IGlkIG9mIGJlYWNvbiB0byB1cGRhdGVcbiAgcHVibGljIHNlbGVjdChpZDogc3RyaW5nKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgaWQgJiYgKHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZCA9IGlkKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBDaGFuZ2Ugbm90aWZpY2F0aW9uIHRpdGxlXG4gIHB1YmxpYyBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgZm9yIGFjdGl2ZSBtYW51YWwgaWQgLyBhbmQgaWYgYSBiZWFjb24gaXMgdGllZCB0byBpdFxuICAgIGlmICh0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpIHtcbiAgICAgIGNvbnN0IGJlYWNvbkluZGV4ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbmRJbmRleCh4ID0+IHgubWlkID09IHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZClcbiAgICAgIGlmIChiZWFjb25JbmRleCA+PSAwKVxuICAgICAgICB0aGlzLmJlYWNvbkxpYnJhcnlbYmVhY29uSW5kZXhdLnRpdGxlID0gdGl0bGVcbiAgICB9XG4gIH1cblxuICAvLyBDaGFuZ2Ugbm90aWZpY2F0aW9uIG1lc3NhZ2VcbiAgcHVibGljIHNldE1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgZm9yIGFjdGl2ZSBtYW51YWwgaWQgLyBhbmQgaWYgYSBiZWFjb24gaXMgdGllZCB0byBpdFxuICAgIGlmICh0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpIHtcbiAgICAgIGNvbnN0IGJlYWNvbkluZGV4ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbmRJbmRleCh4ID0+IHgubWlkID09IHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZClcbiAgICAgIGlmIChiZWFjb25JbmRleCA+PSAwKVxuICAgICAgICB0aGlzLmJlYWNvbkxpYnJhcnlbYmVhY29uSW5kZXhdLmJvZHkgPSBtZXNzYWdlXG4gICAgfVxuICB9XG5cbiAgLy8gQ2hhbmdlIG5vdGlmaWNhdGlvbiB0aXRsZSAmIG1lc3NhZ2VcbiAgcHVibGljIHNldENvbnRlbnQodGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgZm9yIGFjdGl2ZSBtYW51YWwgaWQgLyBhbmQgaWYgYSBiZWFjb24gaXMgdGllZCB0byBpdFxuICAgIGlmICh0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpIHtcbiAgICAgIGNvbnN0IGJlYWNvbkluZGV4ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbmRJbmRleCh4ID0+IHgubWlkID09IHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZClcbiAgICAgIGlmIChiZWFjb25JbmRleCA+PSAwKVxuICAgICAgICB0aGlzLmJlYWNvbkxpYnJhcnlbYmVhY29uSW5kZXhdLnRpdGxlID0gdGl0bGVcbiAgICAgICAgdGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS5ib2R5ID0gbWVzc2FnZVxuICAgIH1cbiAgfVxuXG4gIC8vIFVwZGF0ZSBiZWFjb24gYnV0dG9uIDFcbiAgcHVibGljIHNldEJ1dHRvbk9uZSh0ZXh0OiBzdHJpbmcsIGNhbkRpc21pc3M/OiBib29sZWFuIHwgbnVsbCwgY2FsbGJhY2s/OiBhbnksIGNhbGxiYWNrQXJncz86IGFueVtdIHwgbnVsbCwgcG9zaXRpb24/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBmb3IgYWN0aXZlIG1hbnVhbCBpZCAvIGFuZCBpZiBhIGJlYWNvbiBpcyB0aWVkIHRvIGl0XG4gICAgaWYgKHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZCkge1xuICAgICAgY29uc3QgYmVhY29uSW5kZXggPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmluZEluZGV4KHggPT4geC5taWQgPT0gdGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKVxuICAgICAgaWYgKGJlYWNvbkluZGV4ID49IDApIHtcbiAgICAgICAgKDxJQmVhY29uQnV0dG9uVHlwZT50aGlzLmJlYWNvbkxpYnJhcnlbYmVhY29uSW5kZXhdLmJ1dHRvbnMpLm9uZSA9IHtcbiAgICAgICAgICB0ZXh0OiB0ZXh0LnN1YnN0cmluZygwLCAxNSksXG4gICAgICAgICAgY2FuRGlzbWlzcyxcbiAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICBjYWxsYmFja0FyZ3MsXG4gICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFVwZGF0ZSBiZWFjb24gYnV0dG9uIDJcbiAgcHVibGljIHNldEJ1dHRvblR3byh0ZXh0OiBzdHJpbmcsIGNhbkRpc21pc3M/OiBib29sZWFuIHwgbnVsbCwgY2FsbGJhY2s/OiBhbnksIGNhbGxiYWNrQXJncz86IGFueVtdIHwgbnVsbCwgcG9zaXRpb24/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBmb3IgYWN0aXZlIG1hbnVhbCBpZCAvIGFuZCBpZiBhIGJlYWNvbiBpcyB0aWVkIHRvIGl0XG4gICAgaWYgKHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZCkge1xuICAgICAgY29uc3QgYmVhY29uSW5kZXggPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmluZEluZGV4KHggPT4geC5taWQgPT0gdGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKVxuICAgICAgaWYgKGJlYWNvbkluZGV4ID49IDApIHtcbiAgICAgICAgaWYgKHRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0uYnV0dG9ucz8ub25lKSB7XG4gICAgICAgICAgKDxJQmVhY29uQnV0dG9uVHlwZT50aGlzLmJlYWNvbkxpYnJhcnlbYmVhY29uSW5kZXhdLmJ1dHRvbnMpLnR3byA9IHtcbiAgICAgICAgICAgIHRleHQ6IHRleHQuc3Vic3RyaW5nKDAsIDE1KSxcbiAgICAgICAgICAgIGNhbkRpc21pc3MsXG4gICAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICAgIGNhbGxiYWNrQXJncyxcbiAgICAgICAgICAgIHBvc2l0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgdGhpcy5zZXRCdXR0b25PbmUodGV4dCwgY2FuRGlzbWlzcywgY2FsbGJhY2ssIGNhbGxiYWNrQXJncywgcG9zaXRpb24pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZlIGJlYWNvbiBidXR0b24gMVxuICBwdWJsaWMgcmVtb3ZlQnV0dG9uT25lKCk6IHZvaWQge1xuICAgIC8vIENoZWNrIGZvciBhY3RpdmUgbWFudWFsIGlkIC8gYW5kIGlmIGEgYmVhY29uIGlzIHRpZWQgdG8gaXRcbiAgICBpZiAodGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKSB7XG4gICAgICBjb25zdCBiZWFjb25JbmRleCA9IHRoaXMuYmVhY29uTGlicmFyeS5maW5kSW5kZXgoeCA9PiB4Lm1pZCA9PSB0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpXG4gICAgICBpZiAoYmVhY29uSW5kZXggPj0gMCkge1xuICAgICAgICAoPElCZWFjb25CdXR0b25UeXBlPnRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0uYnV0dG9ucykub25lID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZlIGJlYWNvbiBidXR0b24gMlxuICBwdWJsaWMgcmVtb3ZlQnV0dG9uVHdvKCk6IHZvaWQge1xuICAgIC8vIENoZWNrIGZvciBhY3RpdmUgbWFudWFsIGlkIC8gYW5kIGlmIGEgYmVhY29uIGlzIHRpZWQgdG8gaXRcbiAgICBpZiAodGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKSB7XG4gICAgICBjb25zdCBiZWFjb25JbmRleCA9IHRoaXMuYmVhY29uTGlicmFyeS5maW5kSW5kZXgoeCA9PiB4Lm1pZCA9PSB0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpXG4gICAgICBpZiAoYmVhY29uSW5kZXggPj0gMCkge1xuICAgICAgICAoPElCZWFjb25CdXR0b25UeXBlPnRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0uYnV0dG9ucykudHdvID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZlIGJlYWNvbiBidXR0b25zXG4gIHB1YmxpYyByZW1vdmVCdXR0b25zKCk6IHZvaWQge1xuICAgIC8vIENoZWNrIGZvciBhY3RpdmUgbWFudWFsIGlkIC8gYW5kIGlmIGEgYmVhY29uIGlzIHRpZWQgdG8gaXRcbiAgICBpZiAodGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKSB7XG4gICAgICBjb25zdCBiZWFjb25JbmRleCA9IHRoaXMuYmVhY29uTGlicmFyeS5maW5kSW5kZXgoeCA9PiB4Lm1pZCA9PSB0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpXG4gICAgICBpZiAoYmVhY29uSW5kZXggPj0gMCkge1xuICAgICAgICAoPElCZWFjb25CdXR0b25UeXBlPnRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0uYnV0dG9ucykub25lID0gdW5kZWZpbmVkO1xuICAgICAgICAoPElCZWFjb25CdXR0b25UeXBlPnRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0uYnV0dG9ucykudHdvID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IGJlYWNvbiBhcyBzdGF0aWMgb3Igd2l0aCBkZWxheVxuICBwdWJsaWMgc3RhdGljKGRlbGF5PzogbnVtYmVyKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgdGhpcy5iZWFjb25TdGF0aWMgPSBkZWxheSB8fCB0cnVlXG4gICAgdGhpcy5iZWFjb25GaXhlZCA9IHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBTZXQgYmVhY29uIGFzIGZpeGVkIHdoaWNoIHJlbW92ZXMgdGhlIGNsb3NlIGJ1dHRvbiBhbmQgZGlzYWxsb3dzIGNsb3NlIG9uIGNsaWNrXG4gIHB1YmxpYyBmaXhlZCgpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICB0aGlzLmJlYWNvblN0YXRpYyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uRml4ZWQgPSB0cnVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEFsbG93IGJlYWNvbiB0byBibG9jayBvdGhlcnNcbiAgcHVibGljIGJsb2NrKCk6IEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICAgIHRoaXMuYmVhY29uQmxvY2tPdGhlcnMgPSB0cnVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEZvY3VzIG9uIGJlYWNvblxuICBwdWJsaWMgZm9jdXMob3ZlcmxheUNvbG9yPzogc3RyaW5nKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgb3ZlcmxheUNvbG9yICYmICh0aGlzLmJlYWNvbk92ZXJsYXlDb2xvciA9IG92ZXJsYXlDb2xvcilcbiAgICB0aGlzLmJlYWNvbkZvY3VzID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBGb2N1cyBiZWFjb24gb24gY2VudGVyIHNjcmVlblxuICBwdWJsaWMgc2hpbmUoc2NhbGU/OiBudW1iZXIsIG92ZXJsYXlDb2xvcj86IHN0cmluZyk6IEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICAgIG92ZXJsYXlDb2xvciAmJiAodGhpcy5iZWFjb25PdmVybGF5Q29sb3IgPSBvdmVybGF5Q29sb3IpXG4gICAgdGhpcy5iZWFjb25Gb2N1c1NoaW5lID0gdGhpcy5iZWFjb25Gb2N1cyA9IHRydWVcbiAgICBzY2FsZSAmJiAodGhpcy5iZWFjb25Gb2N1c1NoaW5lU2NhbGUgPSBzY2FsZSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gQWRkIGJ1dHRvbiBmb3IgYmVhY29uXG4gIHB1YmxpYyBidXR0b24odGV4dDogc3RyaW5nLCBjYW5EaXNtaXNzPzogYm9vbGVhbiB8IG51bGwsIGNhbGxiYWNrPzogYW55LCBjYWxsYmFja0FyZ3M/OiBhbnlbXSB8IG51bGwsIHBvc2l0aW9uPzogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgaWYgKCF0aGlzLmJlYWNvbkJ1dHRvbnM/Lm9uZSkge1xuICAgICAgdGhpcy5iZWFjb25CdXR0b25zLm9uZSA9IHtcbiAgICAgICAgdGV4dDogdGV4dC5zdWJzdHJpbmcoMCwgMTUpLFxuICAgICAgICBjYW5EaXNtaXNzLFxuICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgY2FsbGJhY2tBcmdzLFxuICAgICAgICBwb3NpdGlvblxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5iZWFjb25CdXR0b25zLm9uZSAmJiAhdGhpcy5iZWFjb25CdXR0b25zLnR3bykge1xuICAgICAgdGhpcy5iZWFjb25CdXR0b25zLnR3byA9IHtcbiAgICAgICAgdGV4dDogdGV4dC5zdWJzdHJpbmcoMCwgMTUpLFxuICAgICAgICBjYW5EaXNtaXNzLFxuICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgY2FsbGJhY2tBcmdzLFxuICAgICAgICBwb3NpdGlvblxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBBbGxvdyBkdXBsaWNhdGUgZm9yIGJlYWNvblxuICBwdWJsaWMgZHVwbGljYXRlKCk6IEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICAgIHRoaXMuYmVhY29uQWxsb3dEdXBsaWNhdGUgPSB0cnVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIFNldCBjb25maWcgdmFsdWVzIGZvciBiZWFjb25cbiAgcHVibGljIGJ1aWxkKGNvbmZpZzogSUJlYWNvbklubGluZUNvbmZpZyk6IEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICAgIGlmIChjb25maWcuc3RhdGljKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZy5zdGF0aWMgPT0gJ2Jvb2xlYW4nKVxuICAgICAgICB0aGlzLnN0YXRpYygpXG4gICAgICBlbHNlIHRoaXMuc3RhdGljKE51bWJlcihjb25maWcuc3RhdGljKSlcbiAgICB9XG5cbiAgICBjb25maWcuZml4ZWQgJiYgdGhpcy5maXhlZCgpXG4gICAgY29uZmlnLmR1cGxpY2F0ZSAmJiB0aGlzLmR1cGxpY2F0ZSgpXG4gICAgY29uZmlnLnByZXZlbnRDbGlja0Nsb3NlICYmICh0aGlzLmJlYWNvblByZXZlbnRDbGlja0Nsb3NlID0gY29uZmlnLnByZXZlbnRDbGlja0Nsb3NlKVxuICAgIGNvbmZpZy5ibG9ja090aGVycyAmJiAodGhpcy5iZWFjb25CbG9ja090aGVycyA9IGNvbmZpZy5ibG9ja090aGVycylcbiAgICBjb25maWcuZm9jdXMgJiYgKHRoaXMuYmVhY29uRm9jdXMgPSBjb25maWcuZm9jdXMpXG4gICAgY29uZmlnLnNoaW5lICYmICh0aGlzLmJlYWNvbkZvY3VzU2hpbmUgPSB0aGlzLmJlYWNvbkZvY3VzID0gY29uZmlnLnNoaW5lKVxuICAgIGNvbmZpZy5pY29uICYmICh0aGlzLmJlYWNvbkljb24gPSBjb25maWcuaWNvbilcbiAgICBjb25maWcuZm9udEljb24gJiYgKHRoaXMuYmVhY29uSWNvbkZyb21Gb250ID0gY29uZmlnLmZvbnRJY29uKVxuICAgIGNvbmZpZy5zdHlsZUNsYXNzICYmICh0aGlzLmJlYWNvblN0eWxlQ2xhc3MgPSBjb25maWcuc3R5bGVDbGFzcylcbiAgICBjb25maWcucmVwbGFjZW1lbnRDbGFzcyAmJiAodGhpcy5iZWFjb25SZXBsYWNlbWVudENsYXNzID0gY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MpXG4gICAgY29uZmlnLmFuaW1hdGlvbkNsYXNzICYmICh0aGlzLmJlYWNvbkFuaW1hdGlvbkNsYXNzID0gY29uZmlnLmFuaW1hdGlvbkNsYXNzKVxuICAgIGNvbmZpZy5hbmltYXRpb25DbGFzcyAmJiAodGhpcy5iZWFjb25BbmltYXRpb25DbGFzcyA9IGNvbmZpZy5hbmltYXRpb25DbGFzcylcbiAgICBjb25maWcub3ZlcmxheUNvbG9yICYmICh0aGlzLmJlYWNvbk92ZXJsYXlDb2xvciA9IGNvbmZpZy5vdmVybGF5Q29sb3IpXG4gICAgY29uZmlnLm5vSG92ZXJFZmZlY3QgJiYgKHRoaXMuYmVhY29uTm9Ib3ZlckVmZmVjdCA9IGNvbmZpZy5ub0hvdmVyRWZmZWN0KVxuICAgIGNvbmZpZy5zaGluZVNjYWxlICYmICh0aGlzLmJlYWNvbkZvY3VzU2hpbmVTY2FsZSA9IGNvbmZpZy5zaGluZVNjYWxlKVxuICAgIGNvbmZpZy5mb250V2VpZ2h0VGl0bGUgJiYgKHRoaXMuYmVhY29uRm9udFdlaWdodFRpdGxlID0gY29uZmlnLmZvbnRXZWlnaHRUaXRsZSlcbiAgICBjb25maWcuZm9udFdlaWdodEJvZHkgJiYgKHRoaXMuYmVhY29uRm9udFdlaWdodEJvZHkgPSBjb25maWcuZm9udFdlaWdodEJvZHkpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIGNyZWF0ZSBub3RpZmljYXRpb24gYmVhY29uXG4gIHByaXZhdGUgYmVhY29uKG1lc3NhZ2U6IHN0cmluZywgdHlwZTogc3RyaW5nKTogRXZlbnRFbWl0dGVyPElCZWFjb25FdmVudD4ge1xuICAgIC8vIEdldCBzaWduYXR1cmVcbiAgICBjb25zdCBzaWduYXR1cmUgPSB3aW5kb3cuYnRvYSgodGhpcy5iZWFjb25UaXRsZSB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcFt0eXBlXS50aXRsZSkgKyAnLicgKyBtZXNzYWdlKVxuICAgIC8vIEdlbmVyYXRlIGJlYWNvbiBpZFxuICAgIGNvbnN0IGJlYWNvbklkID0gdGhpcy5nZXRJZFxuICAgIC8vIFJlZ2lzdGVyIGJlYWNvbiBpbiBldmVudCBsaWJyYXJ5XG4gICAgdGhpcy5iZWFjb25TdWJzY3JpYmVkRXZlbnRMaWJyYXJ5W2JlYWNvbklkXSA9IE9iamVjdC5jcmVhdGUoe30pXG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBpZiBzZXQgdG8gcHJldmVudCBvciBwcm9jZWVkIGlmIHR1cm5lZCBvZmZcbiAgICBpZiAodGhpcy5iZWFjb25BbGxvd0R1cGxpY2F0ZSB8fCAoKFt1bmRlZmluZWQsIGZhbHNlXS5pbmNsdWRlcyh0aGlzLmJlYWNvbkdsb2JhbER1cGxpY2F0ZSkgJiYgdGhpcy5pc05ld0JlYWNvbkFEdXBsaWNhdGUoc2lnbmF0dXJlKSA9PSAhMSkgfHwgdGhpcy5iZWFjb25HbG9iYWxEdXBsaWNhdGUpKSB7XG4gICAgICBjb25zdCBiZWFjb25PYmplY3Q6IElCZWFjb25Db25maWcgPSB7XG4gICAgICAgIGJpZDogYmVhY29uSWQsXG4gICAgICAgIG1pZDogdGhpcy5iZWFjb25NYW51YWxJZCxcbiAgICAgICAgdHlwZTogdGhpcy5iZWFjb25Db25maWdNYXBbdHlwZV0uY2xhc3MsXG4gICAgICAgIGljb246IHRoaXMuYmVhY29uSWNvbiB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcFt0eXBlXS5pY29uLFxuICAgICAgICBmb250SWNvbjogdGhpcy5iZWFjb25JY29uRnJvbUZvbnQgfHwgKHRoaXMuYmVhY29uQ29uZmlnTWFwW3R5cGVdLmZvbnRJY29uID09ICd0cnVlJyA/IHRydWUgOiB1bmRlZmluZWQpLFxuICAgICAgICB0aXRsZTogdGhpcy5iZWFjb25UaXRsZSB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcFt0eXBlXS50aXRsZSxcbiAgICAgICAgc3RhdGljOiB0aGlzLmJlYWNvblN0YXRpYyB8fCB0aGlzLmJlYWNvbkdsb2JhbFN0YXRpYyxcbiAgICAgICAgZml4ZWQ6IHRoaXMuYmVhY29uRml4ZWQgfHwgdGhpcy5iZWFjb25HbG9iYWxGaXhlZCxcbiAgICAgICAgcHJldmVudENsaWNrQ2xvc2U6IHRoaXMuYmVhY29uUHJldmVudENsaWNrQ2xvc2UgfHwgdGhpcy5iZWFjb25HbG9iYWxQcmV2ZW50Q2xpY2tDbG9zZSxcbiAgICAgICAgc3R5bGVDbGFzczogdGhpcy5iZWFjb25TdHlsZUNsYXNzIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwW3R5cGVdLnN0eWxlLFxuICAgICAgICByZXBsYWNlbWVudENsYXNzOiB0aGlzLmJlYWNvblJlcGxhY2VtZW50Q2xhc3MsXG4gICAgICAgIGFuaW1hdGlvbkNsYXNzOiB0aGlzLmJlYWNvbkFuaW1hdGlvbkNsYXNzIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwW3R5cGVdLmFuaW1hdGlvbiB8fCB0aGlzLmJlYWNvbkRlZmF1bHRBbmltYXRpb25DbGFzc05hbWUsXG4gICAgICAgIGJsb2NrT3RoZXJzOiB0aGlzLmJlYWNvbkJsb2NrT3RoZXJzIHx8IHRoaXMuYmVhY29uR2xvYmFsQmxvY2tPdGhlcnMsXG4gICAgICAgIGJ1dHRvbnM6IHRoaXMuYmVhY29uQnV0dG9ucyxcbiAgICAgICAgb3ZlcmxheUNvbG9yOiB0aGlzLmJlYWNvbk92ZXJsYXlDb2xvcixcbiAgICAgICAgYm9keUh0bWw6IDxTYWZlSHRtbD50aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChtZXNzYWdlKSxcbiAgICAgICAgYm9keTogbWVzc2FnZSxcbiAgICAgICAgZm9jdXM6IHRoaXMuYmVhY29uRm9jdXMsXG4gICAgICAgIHNoaW5lOiB0aGlzLmJlYWNvbkZvY3VzU2hpbmUsXG4gICAgICAgIG5vSG92ZXJFZmZlY3Q6IHRoaXMuYmVhY29uTm9Ib3ZlckVmZmVjdCB8fCB0aGlzLmJlYWNvbkdsb2JhbE5vSG92ZXJFZmZlY3QsXG4gICAgICAgIHNoaW5lU2NhbGU6IHRoaXMuYmVhY29uRm9jdXNTaGluZVNjYWxlIHx8IHRoaXMuYmVhY29uR2xvYmFsRm9jdXNTaGluZVNjYWxlLFxuICAgICAgICBmb250V2VpZ2h0VGl0bGU6IHRoaXMuYmVhY29uRm9udFdlaWdodFRpdGxlIHx8IHRoaXMuYmVhY29uR2xvYmFsRm9udFdlaWdodFRpdGxlLFxuICAgICAgICBmb250V2VpZ2h0Qm9keTogdGhpcy5iZWFjb25Gb250V2VpZ2h0Qm9keSB8fCB0aGlzLmJlYWNvbkdsb2JhbEZvbnRXZWlnaHRCb2R5LFxuICAgICAgICBzaWduYXR1cmVcbiAgICAgIH1cblxuICAgICAgLy8gU2FuaXRpemUgaWNvbiBpZiBwYXNzZWRcbiAgICAgIGlmICghYmVhY29uT2JqZWN0LmZvbnRJY29uICYmIGJlYWNvbk9iamVjdC5pY29uICYmICF0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5cy5pbmNsdWRlcyhiZWFjb25PYmplY3QuaWNvbikpIHtcbiAgICAgICAgYmVhY29uT2JqZWN0LnN2Z0ljb24gPSA8U2FmZUh0bWw+dGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoYmVhY29uT2JqZWN0Lmljb24pXG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBiZWFjb24gYmxvY2tpbmcgb3RoZXJzIGFuZCBhZGQgYnVpbGQgYmVhY29uIHRvIHF1ZXVlXG4gICAgICBpZiAodGhpcy5iZWFjb25TdWNjZXNzb3JCbG9ja2VyQXV0b0lkKSB7XG4gICAgICAgIHRoaXMuYmVhY29uTGlicmFyeVF1ZXVlLnB1c2goYmVhY29uT2JqZWN0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgYmVhY29uIGNhbiBibG9jayBhbmQgcmVnaXN0ZXIgaWRcbiAgICAgICAgaWYgKGJlYWNvbk9iamVjdC5ibG9ja090aGVycylcbiAgICAgICAgICB0aGlzLmJlYWNvblN1Y2Nlc3NvckJsb2NrZXJBdXRvSWQgPSBiZWFjb25PYmplY3QuYmlkXG5cbiAgICAgICAgLy8gQWRkIG1lc3NhZ2UgdG8gbGlicmFyeVxuICAgICAgICBpZiAodGhpcy5nZXRCZWFjb25HbG9iYWxQb3NpdGlvbkNvbmZpZz8udG9wQm90dG9tID09ICd0b3AnKVxuICAgICAgICAgIHRoaXMuYmVhY29uTGlicmFyeS51bnNoaWZ0KGJlYWNvbk9iamVjdClcbiAgICAgICAgZWxzZSB0aGlzLmJlYWNvbkxpYnJhcnkucHVzaChiZWFjb25PYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIGJlYWNvbiBoYXMgZm9jdXNcbiAgICAgIGlmICh0aGlzLmJlYWNvbkZvY3VzKSB7XG4gICAgICAgIGlmICh0aGlzLmJlYWNvbldpdGhBY3RpdmVGb2N1c0F1dG9JZClcbiAgICAgICAgICB0aGlzLmJlYWNvbkZvY3VzT3JkZXJMaWJyYXJ5LnB1c2goYmVhY29uT2JqZWN0LmJpZClcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXMuYmVhY29uV2l0aEFjdGl2ZUZvY3VzQXV0b0lkID0gYmVhY29uT2JqZWN0LmJpZFxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBpZCBpcyBzZXQgYW5kIHJlZ2lzdGVyIGl0XG4gICAgICBpZiAodGhpcy5iZWFjb25NYW51YWxJZCkge1xuICAgICAgICB0aGlzLmJlYWNvblN1YnNjcmliZWRFdmVudExpYnJhcnlbYmVhY29uSWRdLm1hbnVhbElkID0gdGhpcy5iZWFjb25NYW51YWxJZFxuICAgICAgICAvLyBNYXAgdGhlIGRlZmluZWQgaWQgdG8gdGhlIGF1dG8tZ2VuIGlkXG4gICAgICAgIHRoaXMuYmVhY29uV2F0Y2hlZEV2ZW50TGlicmFyeS5zZXQodGhpcy5iZWFjb25NYW51YWxJZCwgYmVhY29uSWQpXG4gICAgICB9XG5cbiAgICAgIC8vIFJlZ2lzdGVyIGJlYWNvbiB0eXBlIFxuICAgICAgdGhpcy5iZWFjb25TdWJzY3JpYmVkRXZlbnRMaWJyYXJ5W2JlYWNvbklkXS50eXBlID0gdGhpcy5iZWFjb25Db25maWdNYXBbdHlwZV0udHlwZVxuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIGV2ZW50IGZvciBiZWFjb25cbiAgICB0aGlzLmJlYWNvblN1YnNjcmliZWRFdmVudExpYnJhcnlbYmVhY29uSWRdLmV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+KClcblxuICAgIC8vIFJlc2V0XG4gICAgdGhpcy5iZWFjb25UaXRsZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uTWVzc2FnZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uU3RhdGljID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25GaXhlZCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uQmxvY2tPdGhlcnMgPSB1bmRlZmluZWRcbiAgICB0aGlzLmJlYWNvbk1hbnVhbElkID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25Gb2N1cyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uRm9jdXNTaGluZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uT3ZlcmxheUNvbG9yID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25BbGxvd0R1cGxpY2F0ZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uTm9Ib3ZlckVmZmVjdCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uSWNvbiA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uSWNvbkZyb21Gb250ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25TdHlsZUNsYXNzID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25SZXBsYWNlbWVudENsYXNzID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25BbmltYXRpb25DbGFzcyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uQnV0dG9ucyA9IHt9XG5cbiAgICByZXR1cm4gPEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+PnRoaXMuYmVhY29uU3Vic2NyaWJlZEV2ZW50TGlicmFyeVtiZWFjb25JZF0uZXZlbnRcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIHN1Y2Nlc3NcbiAgcHVibGljIHN1Y2Nlc3MoLi4ubWVzc2FnZTogc3RyaW5nW10pOiBFdmVudEVtaXR0ZXI8SUJlYWNvbkV2ZW50PiB7XG4gICAgLy8gU2V0IHRpdGxlXG4gICAgKG1lc3NhZ2UubGVuZ3RoID4gMSkgJiYgbWVzc2FnZVswXSAmJiB0aGlzLnRpdGxlKG1lc3NhZ2VbMF0pXG4gICAgLy8gU2V0IGJvZHlcbiAgICByZXR1cm4gdGhpcy5iZWFjb24obWVzc2FnZVsxXSB8fCBtZXNzYWdlWzBdIHx8IHRoaXMuYmVhY29uTWVzc2FnZSB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcC5zdWNjZXNzLnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuYSlcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIGVycm9yXG4gIHB1YmxpYyBlcnJvciguLi5tZXNzYWdlOiBzdHJpbmdbXSk6IEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+IHtcbiAgICAvLyBTZXQgdGl0bGVcbiAgICAobWVzc2FnZS5sZW5ndGggPiAxKSAmJiBtZXNzYWdlWzBdICYmIHRoaXMudGl0bGUobWVzc2FnZVswXSlcbiAgICAvLyBTZXQgYm9keVxuICAgIHJldHVybiB0aGlzLmJlYWNvbihtZXNzYWdlWzFdIHx8IG1lc3NhZ2VbMF0gfHwgdGhpcy5iZWFjb25NZXNzYWdlIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwLmVycm9yLnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuYilcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIHdhcm5pbmdcbiAgcHVibGljIHdhcm5pbmcoLi4ubWVzc2FnZTogc3RyaW5nW10pOiBFdmVudEVtaXR0ZXI8SUJlYWNvbkV2ZW50PiB7XG4gICAgLy8gU2V0IHRpdGxlXG4gICAgKG1lc3NhZ2UubGVuZ3RoID4gMSkgJiYgbWVzc2FnZVswXSAmJiB0aGlzLnRpdGxlKG1lc3NhZ2VbMF0pXG4gICAgLy8gU2V0IGJvZHlcbiAgICByZXR1cm4gdGhpcy5iZWFjb24obWVzc2FnZVsxXSB8fCBtZXNzYWdlWzBdIHx8IHRoaXMuYmVhY29uTWVzc2FnZSB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcC53YXJuaW5nLnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuYylcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIGluZm9cbiAgcHVibGljIGluZm8oLi4ubWVzc2FnZTogc3RyaW5nW10pOiBFdmVudEVtaXR0ZXI8SUJlYWNvbkV2ZW50PiB7XG4gICAgLy8gU2V0IHRpdGxlXG4gICAgKG1lc3NhZ2UubGVuZ3RoID4gMSkgJiYgbWVzc2FnZVswXSAmJiB0aGlzLnRpdGxlKG1lc3NhZ2VbMF0pXG4gICAgLy8gU2V0IGJvZHlcbiAgICByZXR1cm4gdGhpcy5iZWFjb24obWVzc2FnZVsxXSB8fCBtZXNzYWdlWzBdIHx8IHRoaXMuYmVhY29uTWVzc2FnZSB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcC5pbmZvLnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuZClcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIGFsZXJ0XG4gIHB1YmxpYyBhbGVydCguLi5tZXNzYWdlOiBzdHJpbmdbXSk6IEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+IHtcbiAgICAvLyBTZXQgdGl0bGVcbiAgICAobWVzc2FnZS5sZW5ndGggPiAxKSAmJiBtZXNzYWdlWzBdICYmIHRoaXMudGl0bGUobWVzc2FnZVswXSlcbiAgICAvLyBTZXQgYm9keVxuICAgIHJldHVybiB0aGlzLmJlYWNvbihtZXNzYWdlWzFdIHx8IG1lc3NhZ2VbMF0gfHwgdGhpcy5iZWFjb25NZXNzYWdlIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwLmFsZXJ0LnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuZSlcbiAgfVxuXG4gIC8vIFdhdGNoIGV2ZW50cyBmb3IgYmVhY29uIHdpdGggc3BlY2lmaWVkIGlkXG4gIHB1YmxpYyB3YXRjaChpZDogc3RyaW5nIHwgc3RyaW5nW10pOiBFdmVudEVtaXR0ZXI8SUJlYWNvbldhdGNoZWRFdmVudD4ge1xuICAgIC8vIFJlZ2lzdGVyIHdhdGNoZWQgaWRcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpZCkpXG4gICAgICBpZC5mb3JFYWNoKGsgPT4gdGhpcy5iZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5LnNldChrLCBTdHJpbmcoKSkpXG4gICAgZWxzZSB0aGlzLmJlYWNvbldhdGNoZWRFdmVudExpYnJhcnkuc2V0KGlkLCBTdHJpbmcoKSlcblxuICAgIHJldHVybiB0aGlzLmJlYWNvbldhdGNoZWRFdmVudFRhc2tNYXN0ZXJcbiAgfVxuXG4gIC8vIFdhdGNoIGV2ZW50cyBmb3IgYWxsIGJlYWNvbnNcbiAgcHVibGljIGV2ZW50cygpOiBFdmVudEVtaXR0ZXI8SUJlYWNvbldhdGNoZWRFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLmJlYWNvbkFsbEV2ZW50VGFza01hc3RlclxuICB9XG5cbiAgLy8gQ2xvc2UgYmVhY29uIHdpdGggaWRcbiAgcHVibGljIGNsb3NlT25lKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5iZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5LmhhcyhpZCkpIHtcbiAgICAgIGNvbnN0IGF1dG9JZCA9IDxzdHJpbmc+dGhpcy5iZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5LmdldChpZClcblxuICAgICAgLy8gUmVtb3ZlIHRoZSBiZWFjb25cbiAgICAgIHRoaXMuYmVhY29uTGlicmFyeSA9IHRoaXMuYmVhY29uTGlicmFyeS5maWx0ZXIoeCA9PiB7XG4gICAgICAgIHJldHVybiAoeC5iaWQgIT0gYXV0b0lkKVxuICAgICAgfSlcblxuICAgICAgdGhpcy5iZWFjb25FdmVudFRhc2tNYXN0ZXIuZW1pdCh7XG4gICAgICAgIGRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgaWQ6IGF1dG9JZFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvLyBDbG9zZSBhbGwgYmVhY29uc1xuICBwdWJsaWMgY2xvc2VBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5iZWFjb25MaWJyYXJ5ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbHRlcih4ID0+IHtcbiAgICAgIHRoaXMuYmVhY29uRXZlbnRUYXNrTWFzdGVyLmVtaXQoe1xuICAgICAgICBkZWxldGU6IHRydWUsXG4gICAgICAgIGlkOiB4LmJpZFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuICEoeC5iaWQpXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBwb3NzaWJsZSBkdXBsaWNhdGVcbiAgcHJpdmF0ZSBpc05ld0JlYWNvbkFEdXBsaWNhdGUoc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBkdXBsaWNhdGUgPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmluZCh4ID0+IHguc2lnbmF0dXJlID09IHNpZ25hdHVyZSlcbiAgICBjb25zdCBiZWFjb24gPSB0aGlzLmJlYWNvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYGRpdiNiY18ke2R1cGxpY2F0ZT8uYmlkfWApXG4gICAgcmV0dXJuIEJvb2xlYW4oYmVhY29uICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGJlYWNvbikub3BhY2l0eSA9PSAnMScpXG4gIH1cbn0iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3R5cGVzL2ludGVyZmFjZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSUJlYWNvblR5cGUge1xyXG4gIGFsZXJ0Pzogc3RyaW5nXHJcbiAgZXJyb3I/OiBzdHJpbmdcclxuICBpbmZvPzogc3RyaW5nXHJcbiAgc3VjY2Vzcz86IHN0cmluZ1xyXG4gIHdhcm5pbmc/OiBzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQmVhY29uSWNvbkNvbmZpZyB7XHJcbiAgaWNvbj86IHN0cmluZ1xyXG4gIGZvbnRJY29uPzogdHJ1ZVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElCZWFjb25UeXBlSWNvbiB7XHJcbiAgYWxlcnQ/OiBJQmVhY29uSWNvbkNvbmZpZ1xyXG4gIGVycm9yPzogSUJlYWNvbkljb25Db25maWdcclxuICBpbmZvPzogSUJlYWNvbkljb25Db25maWdcclxuICBzdWNjZXNzPzogSUJlYWNvbkljb25Db25maWdcclxuICB3YXJuaW5nPzogSUJlYWNvbkljb25Db25maWdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQmVhY29uUG9zaXRpb25Db25maWcge1xyXG4gIGxlZnRSaWdodD86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0J1xyXG4gIHRvcEJvdHRvbT86ICd0b3AnIHwgJ2JvdHRvbSdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQmVhY29uQ29uZmlnIHtcclxuICBiaWQ6IHN0cmluZ1xyXG4gIG1pZD86IHN0cmluZ1xyXG4gIHR5cGU6IHN0cmluZ1xyXG4gIGljb246IHN0cmluZ1xyXG4gIHN2Z0ljb24/OiBhbnlcclxuICBmb250SWNvbj86IHRydWUsXHJcbiAgdGl0bGU6IHN0cmluZ1xyXG4gIGJvZHk6IHN0cmluZ1xyXG4gIGJvZHlIdG1sOiBhbnlcclxuICBzaWduYXR1cmU/OiBzdHJpbmdcclxuICBzdGF0aWM/OiB0cnVlIHwgbnVtYmVyXHJcbiAgZml4ZWQ/OiB0cnVlXHJcbiAgZm9jdXM/OiB0cnVlXHJcbiAgc2hpbmU/OiB0cnVlXHJcbiAgcHJldmVudENsaWNrQ2xvc2U/OiB0cnVlXHJcbiAgYmxvY2tPdGhlcnM/OiB0cnVlXHJcbiAgZHVwbGljYXRlPzogdHJ1ZVxyXG4gIHN0eWxlQ2xhc3M/OiBzdHJpbmdcclxuICByZXBsYWNlbWVudENsYXNzPzogc3RyaW5nXHJcbiAgYW5pbWF0aW9uQ2xhc3M/OiBzdHJpbmdcclxuICBidXR0b25zPzogSUJlYWNvbkJ1dHRvblR5cGVcclxuICBvdmVybGF5Q29sb3I/OiBzdHJpbmdcclxuICBub0hvdmVyRWZmZWN0PzogdHJ1ZVxyXG4gIHNoaW5lU2NhbGU/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3R5cGVzL2ludGVyZmFjZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSUJlYWNvblR5cGUge1xyXG4gIGFsZXJ0Pzogc3RyaW5nXHJcbiAgZXJyb3I/OiBzdHJpbmdcclxuICBpbmZvPzogc3RyaW5nXHJcbiAgc3VjY2Vzcz86IHN0cmluZ1xyXG4gIHdhcm5pbmc/OiBzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQmVhY29uSWNvbkNvbmZpZyB7XHJcbiAgaWNvbj86IHN0cmluZ1xyXG4gIGZvbnRJY29uPzogdHJ1ZVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElCZWFjb25UeXBlSWNvbiB7XHJcbiAgYWxlcnQ/OiBJQmVhY29uSWNvbkNvbmZpZ1xyXG4gIGVycm9yPzogSUJlYWNvbkljb25Db25maWdcclxuICBpbmZvPzogSUJlYWNvbkljb25Db25maWdcclxuICBzdWNjZXNzPzogSUJlYWNvbkljb25Db25maWdcclxuICB3YXJuaW5nPzogSUJlYWNvbkljb25Db25maWdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQmVhY29uUG9zaXRpb25Db25maWcge1xyXG4gIGxlZnRSaWdodD86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0J1xyXG4gIHRvcEJvdHRvbT86ICd0b3AnIHwgJ2JvdHRvbSdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQmVhY29uQ29uZmlnIHtcclxuICBiaWQ6IHN0cmluZ1xyXG4gIG1pZD86IHN0cmluZ1xyXG4gIHR5cGU6IHN0cmluZ1xyXG4gIGljb246IHN0cmluZ1xyXG4gIHN2Z0ljb24/OiBhbnlcclxuICBmb250SWNvbj86IHRydWUsXHJcbiAgdGl0bGU6IHN0cmluZ1xyXG4gIGJvZHk6IHN0cmluZ1xyXG4gIGJvZHlIdG1sOiBhbnlcclxuICBzaWduYXR1cmU/OiBzdHJpbmdcclxuICBzdGF0aWM/OiB0cnVlIHwgbnVtYmVyXHJcbiAgZml4ZWQ/OiB0cnVlXHJcbiAgZm9jdXM/OiB0cnVlXHJcbiAgc2hpbmU/OiB0cnVlXHJcbiAgcHJldmVudENsaWNrQ2xvc2U/OiB0cnVlXHJcbiAgYmxvY2tPdGhlcnM/OiB0cnVlXHJcbiAgZHVwbGljYXRlPzogdHJ1ZVxyXG4gIHN0eWxlQ2xhc3M/OiBzdHJpbmdcclxuICByZXBsYWNlbWVudENsYXNzPzogc3RyaW5nXHJcbiAgYW5pbWF0aW9uQ2xhc3M/OiBzdHJpbmdcclxuICBidXR0b25zPzogSUJlYWNvbkJ1dHRvblR5cGVcclxuICBvdmVybGF5Q29sb3I/OiBzdHJpbmdcclxuICBub0hvdmVyRWZmZWN0PzogdHJ1ZVxyXG4gIHNoaW5lU2NhbGU/OiBudW1iZXJcclxuICBmb250V2VpZ2h0VGl0bGU/OiBzdHJpbmdcclxuICBmb250V2VpZ2h0Qm9keT86IHN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElCZWFjb25JbmxpbmVDb25maWcge1xyXG4gIHN0YXRpYz86IHRydWUgfCBudW1iZXJcclxuICBmaXhlZD86IHRydWVcclxuICBmb2N1cz86IHRydWVcclxuICBzaGluZT86IHRydWVcclxuICBwcmV2ZW50Q2xpY2tDbG9zZT86IHRydWVcclxuICBibG9ja090aGVycz86IHRydWVcclxuICBkdXBsaWNhdGU/OiB0cnVlXHJcbiAgaWNvbj86IHN0cmluZ1xyXG4gIGZvbnRJY29uPzogdHJ1ZVxyXG4gIHN0eWxlQ2xhc3M/OiBzdHJpbmdcclxuICByZXBsYWNlbWVudENsYXNzPzogc3RyaW5nXHJcbiAgYW5pbWF0aW9uQ2xhc3M/OiBzdHJpbmdcclxuICBvdmVybGF5Q29sb3I/OiBzdHJpbmdcclxuICBub0hvdmVyRWZmZWN0PzogdHJ1ZVxyXG4gIHNoaW5lU2NhbGU/OiBudW1iZXJcclxuICBmb250V2VpZ2h0VGl0bGU/OiBzdHJpbmdcclxuICBmb250V2VpZ2h0Qm9keT86IHN0cmluZ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElCZWFjb25HbG9iYWxDb25maWcge1xyXG4gIHN0YXRpYz86IHRydWUgfCBudW1iZXJcclxuICBmaXhlZD86IHRydWVcclxuICBwcmV2ZW50Q2xpY2tDbG9zZT86IHRydWVcclxuICBibG9ja090aGVycz86IHRydWVcclxuICBvdmVybGF5Q29sb3I/OiBzdHJpbmdcclxuICBkdXBsaWNhdGU/OiB0cnVlXHJcbiAgaWNvbj86IElCZWFjb25UeXBlSWNvblxyXG4gIHN0eWxlQ2xhc3M/OiBJQmVhY29uVHlwZVxyXG4gIHJlcGxhY2VtZW50Q2xhc3M/OiBJQmVhY29uVHlwZVxyXG4gIGFuaW1hdGlvbkNsYXNzPzogSUJlYWNvblR5cGVcclxuICBwb3NpdGlvbj86IElCZWFjb25Qb3NpdGlvbkNvbmZpZ1xyXG4gIG5vSG92ZXJFZmZlY3Q/OiB0cnVlXHJcbiAgc2hpbmVTY2FsZT86IG51bWJlclxyXG4gIGZvbnRXZWlnaHRUaXRsZT86IHN0cmluZ1xyXG4gIGZvbnRXZWlnaHRCb2R5Pzogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJlYWNvbkV2ZW50IHtcclxuICBvbjogYm9vbGVhblxyXG4gIG9mZjogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElCZWFjb25XYXRjaGVkRXZlbnQgZXh0ZW5kcyBJQmVhY29uRXZlbnQge1xyXG4gIGlkOiBzdHJpbmcgfCBudWxsXHJcbiAgdHlwZTogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUJlYWNvbkV2ZW50TWVzc2FnZSB7XHJcbiAgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElCZWFjb25CdXR0b25UeXBlIHtcclxuICBvbmU/OiBJQmVhY29uQnV0dG9uQ29uZmlnXHJcbiAgdHdvPzogSUJlYWNvbkJ1dHRvbkNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElCZWFjb25CdXR0b25Db25maWcge1xyXG4gIHRleHQ6IHN0cmluZ1xyXG4gIGNhbkRpc21pc3M/OiBib29sZWFuIHwgbnVsbFxyXG4gIGNhbGxiYWNrPzogYW55XHJcbiAgY2FsbGJhY2tBcmdzPzogYW55W10gfCBudWxsXHJcbiAgcG9zaXRpb24/OiBzdHJpbmdcclxufSJdfQ==
|
|
@@ -42,6 +42,8 @@ class BeaconNotifyService {
|
|
|
42
42
|
beaconReplacementClass;
|
|
43
43
|
beaconAnimationClass;
|
|
44
44
|
beaconNoHoverEffect;
|
|
45
|
+
beaconFontWeightTitle;
|
|
46
|
+
beaconFontWeightBody;
|
|
45
47
|
beaconGlobalStatic;
|
|
46
48
|
beaconGlobalFixed;
|
|
47
49
|
beaconGlobalBlockOthers;
|
|
@@ -51,6 +53,8 @@ class BeaconNotifyService {
|
|
|
51
53
|
beaconGlobalFocusShineScale;
|
|
52
54
|
beaconGlobalPositioning;
|
|
53
55
|
beaconGlobalFocusOverlayColor;
|
|
56
|
+
beaconGlobalFontWeightTitle;
|
|
57
|
+
beaconGlobalFontWeightBody;
|
|
54
58
|
beaconContainer;
|
|
55
59
|
beaconDefaultAnimationClassName = 'beacon-message-control-animate';
|
|
56
60
|
beaconSuccessorBlockerAutoId;
|
|
@@ -97,6 +101,8 @@ class BeaconNotifyService {
|
|
|
97
101
|
globalConfig.position && (this.beaconGlobalPositioning = globalConfig.position);
|
|
98
102
|
globalConfig.noHoverEffect && (this.beaconGlobalNoHoverEffect = globalConfig.noHoverEffect);
|
|
99
103
|
globalConfig.shineScale && (this.beaconGlobalFocusShineScale = globalConfig.shineScale);
|
|
104
|
+
globalConfig.fontWeightTitle && (this.beaconGlobalFontWeightTitle = globalConfig.fontWeightTitle);
|
|
105
|
+
globalConfig.fontWeightBody && (this.beaconGlobalFontWeightBody = globalConfig.fontWeightBody);
|
|
100
106
|
}
|
|
101
107
|
// Resolve global config / for property
|
|
102
108
|
resolveGlobalPropertyConfig(config, property) {
|
|
@@ -433,6 +439,8 @@ class BeaconNotifyService {
|
|
|
433
439
|
config.overlayColor && (this.beaconOverlayColor = config.overlayColor);
|
|
434
440
|
config.noHoverEffect && (this.beaconNoHoverEffect = config.noHoverEffect);
|
|
435
441
|
config.shineScale && (this.beaconFocusShineScale = config.shineScale);
|
|
442
|
+
config.fontWeightTitle && (this.beaconFontWeightTitle = config.fontWeightTitle);
|
|
443
|
+
config.fontWeightBody && (this.beaconFontWeightBody = config.fontWeightBody);
|
|
436
444
|
return this;
|
|
437
445
|
}
|
|
438
446
|
// create notification beacon
|
|
@@ -467,6 +475,8 @@ class BeaconNotifyService {
|
|
|
467
475
|
shine: this.beaconFocusShine,
|
|
468
476
|
noHoverEffect: this.beaconNoHoverEffect || this.beaconGlobalNoHoverEffect,
|
|
469
477
|
shineScale: this.beaconFocusShineScale || this.beaconGlobalFocusShineScale,
|
|
478
|
+
fontWeightTitle: this.beaconFontWeightTitle || this.beaconGlobalFontWeightTitle,
|
|
479
|
+
fontWeightBody: this.beaconFontWeightBody || this.beaconGlobalFontWeightBody,
|
|
470
480
|
signature
|
|
471
481
|
};
|
|
472
482
|
// Sanitize icon if passed
|
|
@@ -718,6 +728,8 @@ class BeaconNotifyComponent {
|
|
|
718
728
|
ngAfterViewInit() {
|
|
719
729
|
// Get beacon
|
|
720
730
|
const beacon = this.beaconDOM = this.beaconService.getBeaconContainer.nativeElement.querySelector(`#bc_${this.beacon.bid}`);
|
|
731
|
+
// Resolve font weight for title and body
|
|
732
|
+
this.resolveFontWeightForComponents(beacon);
|
|
721
733
|
// Resolve possible focus for beacon
|
|
722
734
|
this.resolvePossibleFocusForBeacon(beacon);
|
|
723
735
|
setTimeout(() => {
|
|
@@ -788,6 +800,17 @@ class BeaconNotifyComponent {
|
|
|
788
800
|
beacon.classList.add(String(this.beacon.animationClass));
|
|
789
801
|
}
|
|
790
802
|
}
|
|
803
|
+
// Resolve font weight for title and body
|
|
804
|
+
resolveFontWeightForComponents(beacon) {
|
|
805
|
+
if (this.beacon.fontWeightTitle.trim()) {
|
|
806
|
+
const title = beacon.querySelector('div.beacon-message-header');
|
|
807
|
+
title && (title.style.fontWeight = this.beacon.fontWeightTitle);
|
|
808
|
+
}
|
|
809
|
+
if (this.beacon.fontWeightBody.trim()) {
|
|
810
|
+
const body = beacon.querySelector('div.beacon-message-body');
|
|
811
|
+
body && (body.style.fontWeight = this.beacon.fontWeightBody);
|
|
812
|
+
}
|
|
813
|
+
}
|
|
791
814
|
// Resolve focus beacon
|
|
792
815
|
resolvePossibleFocusForBeacon(beacon, createOverlay = true) {
|
|
793
816
|
const activeFocusBeaconId = this.beaconService.getActiveFocusBeaconId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-beacon-notify.mjs","sources":["../../src/lib/types/constants/index.ts","../../src/lib/beacon-notify.service.ts","../../src/lib/icons/beacon-icon-alert/beacon-icon-alert.component.ts","../../src/lib/icons/beacon-icon-alert/beacon-icon-alert.component.html","../../src/lib/icons/beacon-icon-error/beacon-icon-error.component.ts","../../src/lib/icons/beacon-icon-error/beacon-icon-error.component.html","../../src/lib/icons/beacon-icon-info/beacon-icon-info.component.ts","../../src/lib/icons/beacon-icon-info/beacon-icon-info.component.html","../../src/lib/icons/beacon-icon-success/beacon-icon-success.component.ts","../../src/lib/icons/beacon-icon-success/beacon-icon-success.component.html","../../src/lib/icons/beacon-icon-warning/beacon-icon-warning.component.ts","../../src/lib/icons/beacon-icon-warning/beacon-icon-warning.component.html","../../src/lib/pipes/beacon-type-resolve.pipe.ts","../../src/lib/beacon/beacon.component.ts","../../src/lib/beacon/beacon.component.html","../../src/lib/container/container.component.ts","../../src/lib/container/container.component.html","../../src/lib/beacon-notify.module.ts","../../src/ngx-beacon-notify.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { IBeaconGlobalConfig } from '../interfaces';\r\n\r\nexport const BEACON_GLOBAL_CONFIG = new InjectionToken<IBeaconGlobalConfig>('IBeaconGlobalConfig')\r\n\r\nexport const BEACON_OVERLAY_COLOR = '#000000DD'\r\n\r\nexport const BEACON_OVERLAY_ID = 'beacon-notify-focus-overlay_x'\r\n\r\nexport const BEACON_TYPE_KEYS = ['a.a', 'a.e', 'a.i', 'a.s', 'a.w']","import { Injectable, Inject, ViewChild, EventEmitter, ElementRef } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { BeaconNotifyComponent } from './beacon/beacon.component';\nimport {\n IBeaconConfig,\n IBeaconInlineConfig,\n IBeaconGlobalConfig,\n IBeaconType,\n IBeaconPositionConfig,\n IBeaconEvent,\n IBeaconWatchedEvent,\n IBeaconEventMessage,\n IBeaconTypeIcon,\n IBeaconButtonType,\n BEACON_GLOBAL_CONFIG,\n BEACON_OVERLAY_COLOR,\n BEACON_OVERLAY_ID,\n BEACON_TYPE_KEYS\n} from './types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BeaconNotifyService {\n private beaconDefaultIconKeys = BEACON_TYPE_KEYS\n private beaconConfigMap: { [key: string]: { [key: string]: string } } = {\n alert: { icon: this.beaconDefaultIconKeys[0], fontIcon: 'false', class: 'beacon-message-alert', title: 'Alert', style: '', animation: '', type: 'alert' },\n error: { icon: this.beaconDefaultIconKeys[1], fontIcon: 'false', class: 'beacon-message-error', title: 'Error', style: '', animation: '', type: 'error' },\n info: { icon: this.beaconDefaultIconKeys[2], fontIcon: 'false', class: 'beacon-message-info', title: 'Information', style: '', animation: '', type: 'info' },\n success: { icon: this.beaconDefaultIconKeys[3], fontIcon: 'false', class: 'beacon-message-success', title: 'Success', style: '', animation: '', type: 'success' },\n warning: { icon: this.beaconDefaultIconKeys[4], fontIcon: 'false', class: 'beacon-message-warning', title: 'Warning', style: '', animation: '', type: 'warning' }\n }\n private beaconTypeMap: { [key: string]: string } = {\n a: 'success', b: 'error', c: 'warning', d: 'info', e: 'alert'\n }\n private beaconTitle?: string\n private beaconMessage?: string\n private beaconIcon?: string\n private beaconManualId?: string\n private beaconSelectedManualId?: string\n private beaconIconFromFont?: true\n private beaconStatic?: true | number\n private beaconFixed?: true\n private beaconBlockOthers?: true\n private beaconPreventClickClose?: true\n private beaconAllowDuplicate?: true\n private beaconFocus?: true\n private beaconFocusShine?: true\n private beaconFocusShineScale?: number\n private beaconOverlayColor?: string\n private beaconStyleClass?: string\n private beaconReplacementClass?: string\n private beaconAnimationClass?: string\n private beaconNoHoverEffect?: true\n private beaconGlobalStatic?: true | number\n private beaconGlobalFixed?: true\n private beaconGlobalBlockOthers?: true\n private beaconGlobalPreventClickClose?: true\n private beaconGlobalDuplicate?: boolean\n private beaconGlobalNoHoverEffect?: true\n private beaconGlobalFocusShineScale?: number\n private beaconGlobalPositioning?: IBeaconPositionConfig\n private beaconGlobalFocusOverlayColor?: string\n private beaconContainer!: ElementRef\n private beaconDefaultAnimationClassName: string = 'beacon-message-control-animate'\n private beaconSuccessorBlockerAutoId?: string\n private beaconWithActiveFocusAutoId?: string\n private beaconButtons: IBeaconButtonType = {}\n private beaconFocusOrderLibrary: Array<string> = []\n private beaconSubscribedEventLibrary: { [key: string]: { [key: string]: string | EventEmitter<IBeaconEvent> } } = {}\n private beaconWatchedEventLibrary: Map<string, string> = new Map<string, string>([])\n private beaconWatchedEventTaskMaster: EventEmitter<IBeaconWatchedEvent> = new EventEmitter<IBeaconWatchedEvent>()\n private beaconAllEventTaskMaster: EventEmitter<IBeaconWatchedEvent> = new EventEmitter<IBeaconWatchedEvent>()\n private beaconFocusOverlayDOM?: HTMLElement\n public beaconEventTaskMaster: EventEmitter<{ [key: string]: boolean| string }> = new EventEmitter<{ [key: string]: boolean | string }>()\n public beaconLibrary: Array<IBeaconConfig> = []\n public beaconLibraryQueue: Array<IBeaconConfig> = []\n \n constructor(private sanitizer: DomSanitizer,\n @Inject(BEACON_GLOBAL_CONFIG) private globalConfig?: IBeaconGlobalConfig) {\n this.globalConfig && this.resolveGlobalConfig(this.globalConfig)\n // Resolve events\n this.resolveBeaconEvents()\n }\n\n // Resolve global config\n private resolveGlobalConfig(globalConfig: IBeaconGlobalConfig): void {\n if (globalConfig.static) {\n if (typeof globalConfig.static == 'boolean') {\n this.beaconGlobalFixed = undefined\n this.beaconGlobalStatic = true\n } else this.beaconGlobalStatic = globalConfig.static\n }\n\n if (globalConfig.fixed) {\n this.beaconGlobalStatic = undefined\n this.beaconGlobalFixed = true\n }\n\n globalConfig.preventClickClose && (this.beaconGlobalPreventClickClose = globalConfig.preventClickClose)\n globalConfig.blockOthers && (this.beaconGlobalBlockOthers = globalConfig.blockOthers)\n globalConfig.overlayColor && (this.beaconGlobalFocusOverlayColor = globalConfig.overlayColor)\n globalConfig.duplicate && (this.beaconGlobalDuplicate = globalConfig.duplicate)\n globalConfig.icon && this.resolveGlobalIconConfig(globalConfig.icon)\n globalConfig.styleClass && this.resolveGlobalPropertyConfig(globalConfig.styleClass, 'style')\n globalConfig.replacementClass && this.resolveGlobalPropertyConfig(globalConfig.replacementClass, 'class')\n globalConfig.animationClass && this.resolveGlobalPropertyConfig(globalConfig.animationClass, 'animation')\n globalConfig.position && (this.beaconGlobalPositioning = globalConfig.position)\n globalConfig.noHoverEffect && (this.beaconGlobalNoHoverEffect = globalConfig.noHoverEffect)\n globalConfig.shineScale && (this.beaconGlobalFocusShineScale = globalConfig.shineScale)\n }\n\n // Resolve global config / for property\n private resolveGlobalPropertyConfig(config: IBeaconType, property: string): void {\n config.alert && (this.beaconConfigMap.alert[property] = config.alert)\n config.error && (this.beaconConfigMap.error[property] = config.error)\n config.info && (this.beaconConfigMap.info[property] = config.info)\n config.success && (this.beaconConfigMap.success[property] = config.success)\n config.warning && (this.beaconConfigMap.warning[property] = config.warning)\n }\n\n // Resolve global config / for icons\n private resolveGlobalIconConfig(config: IBeaconTypeIcon): void {\n config?.alert?.icon && (this.beaconConfigMap.alert.icon = config.alert.icon) && (this.beaconConfigMap.alert.fontIcon = String((config?.alert?.fontIcon || false)))\n config?.error?.icon && (this.beaconConfigMap.error.icon = config.error.icon) && (this.beaconConfigMap.error.fontIcon = String((config?.error?.fontIcon || false)))\n config?.info?.icon && (this.beaconConfigMap.info.icon = config.info.icon) && (this.beaconConfigMap.info.fontIcon = String((config.info.fontIcon || false)))\n config?.success?.icon && (this.beaconConfigMap.success.icon = config.success.icon) && (this.beaconConfigMap.success.fontIcon = String((config.success.fontIcon || false)))\n config?.warning?.icon && (this.beaconConfigMap.warning.icon = config.warning.icon) && (this.beaconConfigMap.warning.fontIcon = String((config.warning.fontIcon || false)))\n }\n\n // Resolve beacon events\n private resolveBeaconEvents(): void {\n this.beaconEventTaskMaster.subscribe((message: IBeaconEventMessage) => {\n const id = String(message.id)\n if (message.delete) {\n this.resolvePossibleBlockedBeacons(id)\n this.resolvePossibleQueuedFocus(id)\n this.performEventTask(id, { on: false, off: true })\n delete this.beaconSubscribedEventLibrary[id]\n } else if (message.mount) {\n this.performEventTask(id, { on: true, off: false })\n }\n })\n }\n\n // Perform event task\n private performEventTask(id: string, eventObject: IBeaconEvent): void {\n const stamp = this.beaconSubscribedEventLibrary[id]\n const event = <EventEmitter<IBeaconEvent>>stamp.event\n const manualId = stamp?.manualId?.toString().replace(/undefined/, '')\n event.emit(eventObject)\n this.beaconAllEventTaskMaster.emit({ id: manualId || null, type: String(stamp.type), ...eventObject })\n\n // Check if this manual id is watched\n if (manualId && this.beaconWatchedEventLibrary.has(manualId)) {\n this.beaconWatchedEventTaskMaster.emit({ id: manualId, type: String(stamp.type), ...eventObject })\n // Check if beacon is off\n if (eventObject.off) \n this.beaconWatchedEventLibrary.delete(manualId)\n }\n }\n\n // Resolve possible blocked beacons\n private resolvePossibleBlockedBeacons(id: string): void {\n // Check if this id is blocking others\n if (id == this.beaconSuccessorBlockerAutoId) {\n if (this.beaconLibraryQueue.length) {\n const queueLength = this.beaconLibraryQueue.length\n // Loop through queue\n for (let x = 0; x < queueLength; x++) {\n const nextInLine = <IBeaconConfig>this.beaconLibraryQueue.shift()\n\n // Add message to library\n if (this.getBeaconGlobalPositionConfig?.topBottom == 'top')\n this.beaconLibrary.unshift(nextInLine)\n else this.beaconLibrary.push(nextInLine) \n\n // Check if set to block\n if (nextInLine.blockOthers) {\n this.beaconSuccessorBlockerAutoId = nextInLine.bid\n break\n }\n }\n\n // Check if no new beacon is set as blocker and unset previous value\n if (id == this.beaconSuccessorBlockerAutoId) \n this.beaconSuccessorBlockerAutoId = undefined\n }\n else this.beaconSuccessorBlockerAutoId = undefined\n }\n }\n\n // Resolve queued beacon focus\n private resolvePossibleQueuedFocus(id: string): void {\n // Check if this id is active focus beacon\n if (id == this.beaconWithActiveFocusAutoId) {\n if (this.beaconFocusOrderLibrary.length) {\n // Pass the next focus\n this.beaconWithActiveFocusAutoId = this.beaconFocusOrderLibrary.shift()\n this.beaconEventTaskMaster.emit({ autoDetectNextFocusBeacon: true })\n }\n else {\n this.beaconWithActiveFocusAutoId = undefined\n this.destroyBeaconFocusOverlay()\n }\n }\n }\n\n // Generate unique id for item\n private get getId(): string {\n return crypto.getRandomValues(new Uint32Array(2)).toString().split(',').join('')\n }\n\n // Set beacon container\n public setBeaconContainer(container: ElementRef): void {\n this.beaconContainer = container\n }\n\n // Get beacon container\n public get getBeaconContainer(): ElementRef {\n return this.beaconContainer\n }\n\n // Get beacon global position config\n public get getBeaconGlobalPositionConfig(): IBeaconPositionConfig | undefined {\n return this.beaconGlobalPositioning\n }\n\n // Get default icon keys\n public get getBeaconDefaultIconKeys(): string[] {\n return this.beaconDefaultIconKeys\n }\n\n // Get active focus beacon id\n public get getActiveFocusBeaconId(): string | undefined {\n return this.beaconWithActiveFocusAutoId\n }\n\n // Create overlay for focused beacon\n public createBeaconFocusOverlay(overlayColor?: string): void {\n const overlay = document.createElement('div')\n overlay.setAttribute('id', BEACON_OVERLAY_ID)\n overlay.style.position = 'fixed'\n overlay.style.top = '0'\n overlay.style.bottom = '0'\n overlay.style.right = '0'\n overlay.style.left = '0'\n overlay.style.zIndex = '9002'\n overlay.style.background = overlayColor || this.beaconGlobalFocusOverlayColor || BEACON_OVERLAY_COLOR\n document.body.style.overflow = 'hidden'\n\n // Pass overlay element\n this.beaconFocusOverlayDOM = overlay\n\n this.beaconContainer.nativeElement.appendChild(overlay)\n }\n\n // Repaint overlay for focused beacon\n public repaintBeaconFocusOverlay(overlayColor?: string): void {\n if (this.beaconFocusOverlayDOM)\n this.beaconFocusOverlayDOM.style.background = overlayColor || this.beaconGlobalFocusOverlayColor || BEACON_OVERLAY_COLOR\n }\n\n // Destroy overlay for focused beacon\n public destroyBeaconFocusOverlay(): void {\n document.body.style.overflow = 'auto'\n this.beaconContainer.nativeElement.querySelector('div#' + BEACON_OVERLAY_ID).remove()\n this.beaconFocusOverlayDOM = undefined\n }\n\n // Set id for beacon\n public id(id: string): BeaconNotifyService {\n id && (this.beaconManualId = id)\n return this\n }\n\n // Set notification title\n public title(title: string): BeaconNotifyService {\n title && (this.beaconTitle = title)\n return this\n }\n\n // Set notification message\n public message(message: string): BeaconNotifyService {\n message && (this.beaconMessage = message)\n return this\n }\n\n // Highlight id of beacon to update\n public select(id: string): BeaconNotifyService {\n id && (this.beaconSelectedManualId = id)\n return this\n }\n\n // Change notification title\n public setTitle(title: string): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0)\n this.beaconLibrary[beaconIndex].title = title\n }\n }\n\n // Change notification message\n public setMessage(message: string): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0)\n this.beaconLibrary[beaconIndex].body = message\n }\n }\n\n // Change notification title & message\n public setContent(title: string, message: string): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0)\n this.beaconLibrary[beaconIndex].title = title\n this.beaconLibrary[beaconIndex].body = message\n }\n }\n\n // Update beacon button 1\n public setButtonOne(text: string, canDismiss?: boolean | null, callback?: any, callbackArgs?: any[] | null, position?: 'left' | 'center' | 'right'): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0) {\n (<IBeaconButtonType>this.beaconLibrary[beaconIndex].buttons).one = {\n text: text.substring(0, 15),\n canDismiss,\n callback,\n callbackArgs,\n position\n }\n }\n }\n }\n\n // Update beacon button 2\n public setButtonTwo(text: string, canDismiss?: boolean | null, callback?: any, callbackArgs?: any[] | null, position?: 'left' | 'center' | 'right'): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0) {\n if (this.beaconLibrary[beaconIndex].buttons?.one) {\n (<IBeaconButtonType>this.beaconLibrary[beaconIndex].buttons).two = {\n text: text.substring(0, 15),\n canDismiss,\n callback,\n callbackArgs,\n position\n }\n } else this.setButtonOne(text, canDismiss, callback, callbackArgs, position)\n }\n }\n }\n\n // Remove beacon button 1\n public removeButtonOne(): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0) {\n (<IBeaconButtonType>this.beaconLibrary[beaconIndex].buttons).one = undefined\n }\n }\n }\n\n // Remove beacon button 2\n public removeButtonTwo(): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0) {\n (<IBeaconButtonType>this.beaconLibrary[beaconIndex].buttons).two = undefined\n }\n }\n }\n\n // Remove beacon buttons\n public removeButtons(): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0) {\n (<IBeaconButtonType>this.beaconLibrary[beaconIndex].buttons).one = undefined;\n (<IBeaconButtonType>this.beaconLibrary[beaconIndex].buttons).two = undefined\n }\n }\n }\n\n // Set beacon as static or with delay\n public static(delay?: number): BeaconNotifyService {\n this.beaconStatic = delay || true\n this.beaconFixed = undefined\n return this\n }\n\n // Set beacon as fixed which removes the close button and disallows close on click\n public fixed(): BeaconNotifyService {\n this.beaconStatic = undefined\n this.beaconFixed = true\n return this\n }\n\n // Allow beacon to block others\n public block(): BeaconNotifyService {\n this.beaconBlockOthers = true\n return this\n }\n\n // Focus on beacon\n public focus(overlayColor?: string): BeaconNotifyService {\n overlayColor && (this.beaconOverlayColor = overlayColor)\n this.beaconFocus = true\n return this\n }\n\n // Focus beacon on center screen\n public shine(scale?: number, overlayColor?: string): BeaconNotifyService {\n overlayColor && (this.beaconOverlayColor = overlayColor)\n this.beaconFocusShine = this.beaconFocus = true\n scale && (this.beaconFocusShineScale = scale)\n return this\n }\n\n // Add button for beacon\n public button(text: string, canDismiss?: boolean | null, callback?: any, callbackArgs?: any[] | null, position?: 'left' | 'center' | 'right'): BeaconNotifyService {\n if (!this.beaconButtons?.one) {\n this.beaconButtons.one = {\n text: text.substring(0, 15),\n canDismiss,\n callback,\n callbackArgs,\n position\n }\n } else if (this.beaconButtons.one && !this.beaconButtons.two) {\n this.beaconButtons.two = {\n text: text.substring(0, 15),\n canDismiss,\n callback,\n callbackArgs,\n position\n }\n }\n\n return this\n }\n\n // Allow duplicate for beacon\n public duplicate(): BeaconNotifyService {\n this.beaconAllowDuplicate = true\n return this\n }\n\n // Set config values for beacon\n public build(config: IBeaconInlineConfig): BeaconNotifyService {\n if (config.static) {\n if (typeof config.static == 'boolean')\n this.static()\n else this.static(Number(config.static))\n }\n\n config.fixed && this.fixed()\n config.duplicate && this.duplicate()\n config.preventClickClose && (this.beaconPreventClickClose = config.preventClickClose)\n config.blockOthers && (this.beaconBlockOthers = config.blockOthers)\n config.focus && (this.beaconFocus = config.focus)\n config.shine && (this.beaconFocusShine = this.beaconFocus = config.shine)\n config.icon && (this.beaconIcon = config.icon)\n config.fontIcon && (this.beaconIconFromFont = config.fontIcon)\n config.styleClass && (this.beaconStyleClass = config.styleClass)\n config.replacementClass && (this.beaconReplacementClass = config.replacementClass)\n config.animationClass && (this.beaconAnimationClass = config.animationClass)\n config.animationClass && (this.beaconAnimationClass = config.animationClass)\n config.overlayColor && (this.beaconOverlayColor = config.overlayColor)\n config.noHoverEffect && (this.beaconNoHoverEffect = config.noHoverEffect)\n config.shineScale && (this.beaconFocusShineScale = config.shineScale)\n return this\n }\n\n // create notification beacon\n private beacon(message: string, type: string): EventEmitter<IBeaconEvent> {\n // Get signature\n const signature = window.btoa((this.beaconTitle || this.beaconConfigMap[type].title) + '.' + message)\n // Generate beacon id\n const beaconId = this.getId\n // Register beacon in event library\n this.beaconSubscribedEventLibrary[beaconId] = Object.create({})\n // Check for duplicate if set to prevent or proceed if turned off\n if (this.beaconAllowDuplicate || (([undefined, false].includes(this.beaconGlobalDuplicate) && this.isNewBeaconADuplicate(signature) == !1) || this.beaconGlobalDuplicate)) {\n const beaconObject: IBeaconConfig = {\n bid: beaconId,\n mid: this.beaconManualId,\n type: this.beaconConfigMap[type].class,\n icon: this.beaconIcon || this.beaconConfigMap[type].icon,\n fontIcon: this.beaconIconFromFont || (this.beaconConfigMap[type].fontIcon == 'true' ? true : undefined),\n title: this.beaconTitle || this.beaconConfigMap[type].title,\n static: this.beaconStatic || this.beaconGlobalStatic,\n fixed: this.beaconFixed || this.beaconGlobalFixed,\n preventClickClose: this.beaconPreventClickClose || this.beaconGlobalPreventClickClose,\n styleClass: this.beaconStyleClass || this.beaconConfigMap[type].style,\n replacementClass: this.beaconReplacementClass,\n animationClass: this.beaconAnimationClass || this.beaconConfigMap[type].animation || this.beaconDefaultAnimationClassName,\n blockOthers: this.beaconBlockOthers || this.beaconGlobalBlockOthers,\n buttons: this.beaconButtons,\n overlayColor: this.beaconOverlayColor,\n bodyHtml: <SafeHtml>this.sanitizer.bypassSecurityTrustHtml(message),\n body: message,\n focus: this.beaconFocus,\n shine: this.beaconFocusShine,\n noHoverEffect: this.beaconNoHoverEffect || this.beaconGlobalNoHoverEffect,\n shineScale: this.beaconFocusShineScale || this.beaconGlobalFocusShineScale,\n signature\n }\n\n // Sanitize icon if passed\n if (!beaconObject.fontIcon && beaconObject.icon && !this.beaconDefaultIconKeys.includes(beaconObject.icon)) {\n beaconObject.svgIcon = <SafeHtml>this.sanitizer.bypassSecurityTrustHtml(beaconObject.icon)\n }\n\n // Check if there is an active beacon blocking others and add build beacon to queue\n if (this.beaconSuccessorBlockerAutoId) {\n this.beaconLibraryQueue.push(beaconObject)\n } else {\n // Check if beacon can block and register id\n if (beaconObject.blockOthers)\n this.beaconSuccessorBlockerAutoId = beaconObject.bid\n\n // Add message to library\n if (this.getBeaconGlobalPositionConfig?.topBottom == 'top')\n this.beaconLibrary.unshift(beaconObject)\n else this.beaconLibrary.push(beaconObject)\n }\n\n // Check if beacon has focus\n if (this.beaconFocus) {\n if (this.beaconWithActiveFocusAutoId)\n this.beaconFocusOrderLibrary.push(beaconObject.bid)\n else\n this.beaconWithActiveFocusAutoId = beaconObject.bid\n }\n\n // Check if id is set and register it\n if (this.beaconManualId) {\n this.beaconSubscribedEventLibrary[beaconId].manualId = this.beaconManualId\n // Map the defined id to the auto-gen id\n this.beaconWatchedEventLibrary.set(this.beaconManualId, beaconId)\n }\n\n // Register beacon type \n this.beaconSubscribedEventLibrary[beaconId].type = this.beaconConfigMap[type].type\n }\n\n // Register event for beacon\n this.beaconSubscribedEventLibrary[beaconId].event = new EventEmitter<IBeaconEvent>()\n\n // Reset\n this.beaconTitle = undefined\n this.beaconMessage = undefined\n this.beaconStatic = undefined\n this.beaconFixed = undefined\n this.beaconBlockOthers = undefined\n this.beaconManualId = undefined\n this.beaconFocus = undefined\n this.beaconFocusShine = undefined\n this.beaconOverlayColor = undefined\n this.beaconAllowDuplicate = undefined\n this.beaconNoHoverEffect = undefined\n this.beaconIcon = undefined\n this.beaconIconFromFont = undefined\n this.beaconStyleClass = undefined\n this.beaconReplacementClass = undefined\n this.beaconAnimationClass = undefined\n this.beaconButtons = {}\n\n return <EventEmitter<IBeaconEvent>>this.beaconSubscribedEventLibrary[beaconId].event\n }\n\n // Set notification message / success\n public success(...message: string[]): EventEmitter<IBeaconEvent> {\n // Set title\n (message.length > 1) && message[0] && this.title(message[0])\n // Set body\n return this.beacon(message[1] || message[0] || this.beaconMessage || this.beaconConfigMap.success.title, this.beaconTypeMap.a)\n }\n\n // Set notification message / error\n public error(...message: string[]): EventEmitter<IBeaconEvent> {\n // Set title\n (message.length > 1) && message[0] && this.title(message[0])\n // Set body\n return this.beacon(message[1] || message[0] || this.beaconMessage || this.beaconConfigMap.error.title, this.beaconTypeMap.b)\n }\n\n // Set notification message / warning\n public warning(...message: string[]): EventEmitter<IBeaconEvent> {\n // Set title\n (message.length > 1) && message[0] && this.title(message[0])\n // Set body\n return this.beacon(message[1] || message[0] || this.beaconMessage || this.beaconConfigMap.warning.title, this.beaconTypeMap.c)\n }\n\n // Set notification message / info\n public info(...message: string[]): EventEmitter<IBeaconEvent> {\n // Set title\n (message.length > 1) && message[0] && this.title(message[0])\n // Set body\n return this.beacon(message[1] || message[0] || this.beaconMessage || this.beaconConfigMap.info.title, this.beaconTypeMap.d)\n }\n\n // Set notification message / alert\n public alert(...message: string[]): EventEmitter<IBeaconEvent> {\n // Set title\n (message.length > 1) && message[0] && this.title(message[0])\n // Set body\n return this.beacon(message[1] || message[0] || this.beaconMessage || this.beaconConfigMap.alert.title, this.beaconTypeMap.e)\n }\n\n // Watch events for beacon with specified id\n public watch(id: string | string[]): EventEmitter<IBeaconWatchedEvent> {\n // Register watched id\n if (Array.isArray(id))\n id.forEach(k => this.beaconWatchedEventLibrary.set(k, String()))\n else this.beaconWatchedEventLibrary.set(id, String())\n\n return this.beaconWatchedEventTaskMaster\n }\n\n // Watch events for all beacons\n public events(): EventEmitter<IBeaconWatchedEvent> {\n return this.beaconAllEventTaskMaster\n }\n\n // Close beacon with id\n public closeOne(id: string): void {\n if (this.beaconWatchedEventLibrary.has(id)) {\n const autoId = <string>this.beaconWatchedEventLibrary.get(id)\n\n // Remove the beacon\n this.beaconLibrary = this.beaconLibrary.filter(x => {\n return (x.bid != autoId)\n })\n\n this.beaconEventTaskMaster.emit({\n delete: true,\n id: autoId\n })\n }\n }\n\n // Close all beacons\n public closeAll(): void {\n this.beaconLibrary = this.beaconLibrary.filter(x => {\n this.beaconEventTaskMaster.emit({\n delete: true,\n id: x.bid\n })\n\n return !(x.bid)\n })\n }\n\n // Check for possible duplicate\n private isNewBeaconADuplicate(signature: string): boolean {\n const duplicate = this.beaconLibrary.find(x => x.signature == signature)\n const beacon = this.beaconContainer.nativeElement.querySelector(`div#bc_${duplicate?.bid}`)\n return Boolean(beacon && window.getComputedStyle(beacon).opacity == '1')\n }\n}","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-beacon-icon-alert',\n templateUrl: './beacon-icon-alert.component.html',\n styleUrls: ['./beacon-icon-alert.component.css']\n})\nexport class BeaconIconAlertComponent {\n\n}\n","<svg fill=\"currentColor\" viewBox=\"0 0 48 48\" data-name=\"Layer 1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n <g id=\"SVGRepo_iconCarrier\">\n <title></title>\n <path\n d=\"M40.62,28.34l-.87-.7A2,2,0,0,1,39,26.08V18A15,15,0,0,0,26.91,3.29a3,3,0,0,0-5.81,0A15,15,0,0,0,9,18v8.08a2,2,0,0,1-.75,1.56l-.87.7a9,9,0,0,0-3.38,7V37a4,4,0,0,0,4,4h8.26a8,8,0,0,0,15.47,0H40a4,4,0,0,0,4-4V35.36A9,9,0,0,0,40.62,28.34ZM24,43a4,4,0,0,1-3.44-2h6.89A4,4,0,0,1,24,43Zm16-6H8V35.36a5,5,0,0,1,1.88-3.9l.87-.7A6,6,0,0,0,13,26.08V18a11,11,0,0,1,22,0v8.08a6,6,0,0,0,2.25,4.69l.87.7A5,5,0,0,1,40,35.36Z\"\n ></path>\n </g>\n</svg>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-beacon-icon-error',\n templateUrl: './beacon-icon-error.component.html',\n styleUrls: ['./beacon-icon-error.component.css']\n})\nexport class BeaconIconErrorComponent {\n\n}\n","<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n <g id=\"SVGRepo_iconCarrier\">\n <path\n d=\"M11.3586 20.6831C11.5639 20.7901 11.6666 20.8436 11.809 20.8713C11.92 20.8929 12.08 20.8929 12.191 20.8713C12.3334 20.8436 12.4361 20.7901 12.6414 20.6831C14.54 19.6939 20 16.4612 20 12.0001V8.21772C20 7.4182 20 7.01845 19.8692 6.67482C19.7537 6.37126 19.566 6.10039 19.3223 5.88564C19.0465 5.64255 18.6722 5.50219 17.9236 5.22146L12.5618 3.21079C12.3539 3.13283 12.25 3.09385 12.143 3.07839C12.0482 3.06469 11.9518 3.06469 11.857 3.07839C11.75 3.09385 11.6461 3.13283 11.4382 3.21079L6.0764 5.22146C5.3278 5.50219 4.9535 5.64255 4.67766 5.88564C4.43398 6.10039 4.24627 6.37126 4.13076 6.67482C4 7.01845 4 7.4182 4 8.21772V12.0001C4 16.4612 9.45996 19.6939 11.3586 20.6831Z\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </g>\n</svg>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-beacon-icon-info',\n templateUrl: './beacon-icon-info.component.html',\n styleUrls: ['./beacon-icon-info.component.css']\n})\nexport class BeaconIconInfoComponent {\n\n}\n","<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n <g id=\"SVGRepo_iconCarrier\">\n <path\n d=\"M10 22H14M5 9C5 5.13401 8.13401 2 12 2C15.866 2 19 5.13401 19 9C19 11.3787 17.8135 13.4694 16 14.7344L15.4582 17.3004C15.3097 18.2778 14.4695 19 13.4809 19H10.5191C9.53052 19 8.69027 18.2778 8.54177 17.3004L8 14.7453C6.18652 13.4804 5 11.3787 5 9Z\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n <path d=\"M8 15H16\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </g>\n</svg>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-beacon-icon-success',\n templateUrl: './beacon-icon-success.component.html',\n styleUrls: ['./beacon-icon-success.component.css']\n})\nexport class BeaconIconSuccessComponent {\n}\n","<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n <g id=\"SVGRepo_iconCarrier\">\n <path\n d=\"M8.5 12.5L10.0089 14.0089C10.3526 14.3526 10.5245 14.5245 10.7198 14.5822C10.8914 14.6328 11.0749 14.6245 11.2412 14.5585C11.4305 14.4834 11.5861 14.2967 11.8973 13.9232L16 9M16.3287 4.75855C17.0676 4.77963 17.8001 5.07212 18.364 5.636C18.9278 6.19989 19.2203 6.9324 19.2414 7.67121C19.2623 8.40232 19.2727 8.76787 19.2942 8.85296C19.3401 9.0351 19.2867 8.90625 19.383 9.06752C19.428 9.14286 19.6792 9.40876 20.1814 9.94045C20.6889 10.4778 21 11.2026 21 12C21 12.7974 20.6889 13.5222 20.1814 14.0595C19.6792 14.5912 19.428 14.8571 19.383 14.9325C19.2867 15.0937 19.3401 14.9649 19.2942 15.147C19.2727 15.2321 19.2623 15.5977 19.2414 16.3288C19.2203 17.0676 18.9278 17.8001 18.364 18.364C17.8001 18.9279 17.0676 19.2204 16.3287 19.2414C15.5976 19.2623 15.2321 19.2727 15.147 19.2942C14.9649 19.3401 15.0937 19.2868 14.9325 19.3831C14.8571 19.4281 14.5912 19.6792 14.0595 20.1814C13.5222 20.6889 12.7974 21 12 21C11.2026 21 10.4778 20.6889 9.94047 20.1814C9.40874 19.6792 9.14287 19.4281 9.06753 19.3831C8.90626 19.2868 9.0351 19.3401 8.85296 19.2942C8.76788 19.2727 8.40225 19.2623 7.67121 19.2414C6.93238 19.2204 6.19986 18.9279 5.63597 18.364C5.07207 17.8001 4.77959 17.0676 4.75852 16.3287C4.73766 15.5976 4.72724 15.2321 4.70578 15.147C4.65985 14.9649 4.71322 15.0937 4.61691 14.9324C4.57192 14.8571 4.32082 14.5912 3.81862 14.0595C3.31113 13.5222 3 12.7974 3 12C3 11.2026 3.31113 10.4778 3.81862 9.94048C4.32082 9.40876 4.57192 9.14289 4.61691 9.06755C4.71322 8.90628 4.65985 9.03512 4.70578 8.85299C4.72724 8.7679 4.73766 8.40235 4.75852 7.67126C4.77959 6.93243 5.07207 6.1999 5.63597 5.636C6.19986 5.07211 6.93238 4.77963 7.67121 4.75855C8.40232 4.73769 8.76788 4.72727 8.85296 4.70581C9.0351 4.65988 8.90626 4.71325 9.06753 4.61694C9.14287 4.57195 9.40876 4.32082 9.94047 3.81863C10.4778 3.31113 11.2026 3 12 3C12.7974 3 13.5222 3.31114 14.0595 3.81864C14.5913 4.32084 14.8571 4.57194 14.9325 4.61693C15.0937 4.71324 14.9649 4.65988 15.147 4.70581C15.2321 4.72726 15.5976 4.73769 16.3287 4.75855Z\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </g>\n</svg>","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-beacon-icon-warning',\n templateUrl: './beacon-icon-warning.component.html',\n styleUrls: ['./beacon-icon-warning.component.css']\n})\nexport class BeaconIconWarningComponent {\n\n}\n","<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n <g id=\"SVGRepo_iconCarrier\">\n <path d=\"M12 7.75V13\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path\n d=\"M21.08 8.58003V15.42C21.08 16.54 20.48 17.58 19.51 18.15L13.57 21.58C12.6 22.14 11.4 22.14 10.42 21.58L4.47998 18.15C3.50998 17.59 2.90997 16.55 2.90997 15.42V8.58003C2.90997 7.46003 3.50998 6.41999 4.47998 5.84999L10.42 2.42C11.39 1.86 12.59 1.86 13.57 2.42L19.51 5.84999C20.48 6.41999 21.08 7.45003 21.08 8.58003Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n <path d=\"M12 16.2V16.2999\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </g>\n</svg>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { BEACON_TYPE_KEYS } from '../types/constants';\n\n@Pipe({\n name: 'beaconTypeResolve'\n})\nexport class BeaconTypeResolvePipe implements PipeTransform {\n private beaconTypeKeys!: Array<string>\n constructor(){\n this.beaconTypeKeys = BEACON_TYPE_KEYS\n }\n\n transform(value: string, ...args: string[]): boolean {\n let status: boolean = false\n switch (args[0]) {\n case 'alert':\n status = value == this.beaconTypeKeys[0]\n break\n case 'error':\n status = value == this.beaconTypeKeys[1]\n break\n case 'info':\n status = value == this.beaconTypeKeys[2]\n break\n case 'success':\n status = value == this.beaconTypeKeys[3]\n break\n case 'warning':\n status = value == this.beaconTypeKeys[4]\n break\n }\n\n return status\n }\n\n}\n","import { Component, Input, AfterViewInit } from '@angular/core';\nimport { BeaconNotifyService } from '../beacon-notify.service';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { IBeaconConfig, IBeaconEventMessage } from '../types';\n\n@Component({\n selector: 'app-beacon',\n templateUrl: './beacon.component.html',\n styleUrls: ['./beacon.component.css']\n})\nexport class BeaconNotifyComponent {\n @Input() beacon!: IBeaconConfig\n private beaconDOM!: HTMLElement\n public beaconDefaultIconKeys!: string[]\n\n constructor(private beaconService: BeaconNotifyService,\n private sanitizer: DomSanitizer){\n this.beaconDefaultIconKeys = this.beaconService.getBeaconDefaultIconKeys\n }\n\n ngOnInit(): void {\n // Fire mount event\n this.beaconService.beaconEventTaskMaster.emit({\n mount: true,\n id: this.beacon.bid\n })\n }\n\n ngAfterViewInit(): void {\n // Get beacon\n const beacon = this.beaconDOM = this.beaconService.getBeaconContainer.nativeElement.querySelector(`#bc_${this.beacon.bid}`)\n // Resolve possible focus for beacon\n this.resolvePossibleFocusForBeacon(beacon)\n setTimeout(() => {\n // Resolve delay setting\n this.resolveDelayForBeacon(beacon, true)\n // Set beacon listener\n this.setListenerForBeacon(beacon, this.beacon)\n\n // Sanitize svg content if not font icon\n if (this.beacon.svgIcon) {\n const beaconSvgIcon = beacon.querySelector('span.beacon-message-svg-control svg')\n beaconSvgIcon.style.width = '20px'\n beaconSvgIcon.style.height = '20px'\n beaconSvgIcon.style.marginRight = '7px'\n beaconSvgIcon.style.marginTop = '-2px'\n }\n }, 0)\n\n // Listen for event\n this.beaconService.beaconEventTaskMaster.subscribe((message: IBeaconEventMessage) => {\n // Check for next for focus event\n if (message.autoDetectNextFocusBeacon)\n this.resolvePossibleFocusForBeacon(this.beaconDOM, false)\n })\n }\n\n // When beacon button is clicked\n beaconButtonClick(e: Event, no: number): void {\n e.stopPropagation()\n switch (no) {\n case 1:\n // Check for callback\n if (this.beacon?.buttons?.one?.callback)\n this.beacon?.buttons?.one?.callback(...(this.beacon?.buttons?.one?.callbackArgs || []))\n \n // Check if can dismiss\n if (this.beacon?.buttons?.one?.canDismiss)\n this.closeBeacon(this.beaconDOM, this.beacon)\n break\n case 2:\n // Check for callback\n if (this.beacon?.buttons?.two?.callback)\n this.beacon?.buttons?.two?.callback(...(this.beacon?.buttons?.two?.callbackArgs || []))\n\n // Check if can dismiss\n if (this.beacon?.buttons?.two?.canDismiss)\n this.closeBeacon(this.beaconDOM, this.beacon)\n break\n }\n }\n\n // Set listener for beacon changes\n setListenerForBeacon(beacon: Element, beaconData: IBeaconConfig): void {\n ((b, d) => {\n beacon?.addEventListener('animationend', (e) => this.closeBeacon(b, d))\n beacon?.addEventListener('webkitAnimationEnd', (e) => this.closeBeacon(b, d))\n beacon?.addEventListener('oAnimationEnd', (e) => this.closeBeacon(b, d))\n })(beacon, beaconData)\n }\n\n // Toggle auto-close\n autoClose(status: boolean, control: HTMLElement): void {\n status\n ? (control.getAttribute('data-beacon-static') != 'true' && this.resolveDelayForBeacon(control, false))\n : control.classList.remove(String(this.beacon.animationClass))\n }\n\n // Resolve delay for beacon\n resolveDelayForBeacon(beacon: HTMLElement, onLoad?: boolean): void {\n // Check if delay set\n if (this.beacon.static && typeof this.beacon.static == 'number') {\n beacon && (beacon.style.animationDelay = this.beacon.static + 's')\n } else {\n if (onLoad == !1 && this.beacon?.fixed != true)\n beacon.classList.add(String(this.beacon.animationClass))\n }\n }\n\n // Resolve focus beacon\n resolvePossibleFocusForBeacon(beacon: HTMLElement, createOverlay: boolean = true): void {\n const activeFocusBeaconId = this.beaconService.getActiveFocusBeaconId\n if (activeFocusBeaconId == this.beacon.bid) {\n beacon.style.zIndex = '9003'\n \n // Check if beacon should be centered\n if (this.beacon.shine) {\n const scale = this.beacon.shineScale && String(this.beacon.shineScale).match(/(\\d+)\\.(\\d+)/) ? this.beacon.shineScale : '1.5'\n beacon.style.position = 'fixed'\n beacon.style.right = '0'\n beacon.style.left = '0'\n beacon.style.bottom = '50%'\n beacon.style.margin = 'auto'\n beacon.style.transform = 'scale(' + scale + ')'\n }\n\n // Create overlay\n if (createOverlay)\n this.beaconService.createBeaconFocusOverlay(this.beacon.overlayColor)\n else this.beaconService.repaintBeaconFocusOverlay(this.beacon.overlayColor)\n }\n }\n\n // Trigger close beacon\n closeBeacon(beaconControl: any, beaconData: IBeaconConfig): void {\n if (!this.beacon?.fixed) {\n this.beaconService.beaconEventTaskMaster.emit({\n delete: true,\n id: beaconControl.getAttribute('id').replace(/bc_/, '')\n })\n }\n }\n}\n","<div #beaconControl \n\t\t[id]=\"'bc_' + beacon.bid\"\n\t\t(mouseenter)=\"autoClose(false, beaconControl)\" \n\t\t(mouseleave)=\"autoClose(true, beaconControl)\"\n\t\t(click)=\"beacon.preventClickClose ? null : closeBeacon(beaconControl, beacon)\"\n\t\t[attr.data-beacon-static]=\"beacon.static\"\n\t\tclass=\"beacon-message-control {{ (beacon.static !== true && beacon.fixed !== true) ? beacon.animationClass : '' }} {{ beacon.replacementClass || beacon.type }} {{ beacon.styleClass }}\"\n\t\t[class.beacon-message-control-no-hover-effect]=\"beacon.noHoverEffect\">\n\t<div class=\"beacon-message-header\">\n\t\t<div>\n\t\t\t<span *ngIf=\"beacon.fontIcon\"><i [class]=\"beacon.icon\"></i></span>\n\t\t\t<span *ngIf=\"!beacon.fontIcon && beaconDefaultIconKeys.includes(beacon.icon)\" class=\"beacon-message-svg-control\">\n\t\t\t\t<app-beacon-icon-alert *ngIf=\"beacon.icon | beaconTypeResolve:'alert'\"></app-beacon-icon-alert>\n\t\t\t\t<app-beacon-icon-error *ngIf=\"beacon.icon | beaconTypeResolve:'error'\"></app-beacon-icon-error>\n\t\t\t\t<app-beacon-icon-info *ngIf=\"beacon.icon | beaconTypeResolve:'info'\"></app-beacon-icon-info>\n\t\t\t\t<app-beacon-icon-success *ngIf=\"beacon.icon | beaconTypeResolve:'success'\"></app-beacon-icon-success>\n\t\t\t\t<app-beacon-icon-warning *ngIf=\"beacon.icon | beaconTypeResolve:'warning'\"></app-beacon-icon-warning>\n\t\t\t</span>\n\t\t\t<span *ngIf=\"!beacon.fontIcon && beacon.icon && !beaconDefaultIconKeys.includes(beacon.icon)\" class=\"beacon-message-svg-control\" [innerHTML]=\"beacon.svgIcon\"></span>\n\t\t\t{{ beacon.title }}\n\t\t</div>\n\t\t<div>\n\t\t\t<div *ngIf=\"!beacon.fixed\" class=\"beacon-message-close\" (click)=\"closeBeacon(beaconControl, beacon)\">\n\t\t\t\t<svg width=\"10\" height=\"10\" viewBox=\"0 0 78 78\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t <rect y=\"7.07104\" width=\"10\" height=\"100\" rx=\"5\" transform=\"rotate(-45 0 7.07104)\" />\n\t\t\t <rect x=\"70.7109\" width=\"10\" height=\"100\" rx=\"5\" transform=\"rotate(45 70.7109 0)\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"beacon-message-divider\"></div>\n\t<div class=\"beacon-message-body\" [innerHTML]=\"beacon.bodyHtml\"></div>\n\t<div class=\"beacon-message-divider\" *ngIf=\"beacon.buttons?.one || beacon.buttons?.two\"></div>\n\n\t<div class=\"beacon-message-footer\" *ngIf=\"beacon.buttons && beacon.buttons?.one && beacon.buttons?.two\">\n\t\t<div><button (click)=\"beaconButtonClick($event, 1)\">{{ beacon.buttons?.one?.text }}</button></div>\n\t\t<div><button (click)=\"beaconButtonClick($event, 2)\">{{ beacon.buttons?.two?.text }}</button></div>\n\t</div>\n\n\t<div class=\"beacon-message-footer\" *ngIf=\"beacon.buttons && beacon.buttons?.one && !beacon?.buttons?.two\">\n\t\t<div [class]=\"beacon.buttons?.one?.position ? ('beacon-message-button-container-' + beacon?.buttons?.one?.position) : ''\">\n\t\t\t<button (click)=\"beaconButtonClick($event, 1)\">{{ beacon.buttons?.one?.text }}</button>\n\t\t</div>\n\t</div>\n\n</div>","import { Component, Input, ViewChild, ElementRef, AfterViewInit } from '@angular/core';\nimport { BeaconNotifyService } from '../beacon-notify.service';\nimport { IBeaconConfig, IBeaconEventMessage } from '../types';\n\n@Component({\n selector: 'ngx-beacon-notify',\n templateUrl: './container.component.html',\n styleUrls: ['./container.component.css']\n})\nexport class BeaconNotifyContainerComponent implements AfterViewInit {\n @ViewChild('beaconContainer', { static: false }) set content(content: ElementRef) {\n content && this.resolveBeaconContainer(content)\n }\n beaconLibrary!: Array<IBeaconConfig>\n\n constructor(private beaconService: BeaconNotifyService){\n this.beaconLibrary = this.beaconService.beaconLibrary\n }\n\n ngOnInit(): void {\n // Listen for delete event\n this.beaconService.beaconEventTaskMaster.subscribe((message: IBeaconEventMessage) => {\n if (message.delete)\n this.beaconLibrary = this.beaconService.beaconLibrary = this.beaconService.beaconLibrary.filter(x => x.bid != message.id)\n })\n }\n\n ngAfterViewInit(): void {}\n\n // Resolve beacon container\n resolveBeaconContainer(content: ElementRef): void {\n this.beaconService.setBeaconContainer(content)\n\n // Resolve position\n const position = this.beaconService.getBeaconGlobalPositionConfig\n // Resolve ltr\n if (position?.leftRight) {\n if(position?.leftRight == 'left') {\n content.nativeElement.style.left = 0\n content.nativeElement.style.right = 'auto'\n } else if (position?.leftRight == 'center') {\n content.nativeElement.style.left = 0\n content.nativeElement.style.right = 0\n content.nativeElement.style.margin = 'auto'\n } else {\n content.nativeElement.style.left = 'auto'\n content.nativeElement.style.right = 0\n }\n }\n // Resolve ttb\n if (position?.topBottom) {\n if(position?.topBottom == 'top') {\n content.nativeElement.style.top = 0\n content.nativeElement.style.bottom = 'auto'\n } else {\n content.nativeElement.style.top = 'auto'\n content.nativeElement.style.bottom = 0\n }\n }\n }\n\n // Track-by function\n trackBy(idx: number, item: { bid: string }): string {\n return item.bid;\n }\n}\n","<div id=\"app-beacon-notify-container\" #beaconContainer>\n\t<app-beacon *ngFor=\"let beacon of beaconLibrary; trackBy: trackBy\" [id]=\"'bcp_'+beacon.bid\" [beacon]=\"beacon\"></app-beacon>\n</div>","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BeaconNotifyContainerComponent } from './container/container.component';\r\nimport { BeaconNotifyComponent } from './beacon/beacon.component';\r\nimport { IBeaconGlobalConfig, BEACON_GLOBAL_CONFIG } from './types';\r\nimport { BeaconNotifyService } from './beacon-notify.service';\r\nimport { BeaconIconSuccessComponent } from './icons/beacon-icon-success/beacon-icon-success.component';\r\nimport { BeaconIconAlertComponent } from './icons/beacon-icon-alert/beacon-icon-alert.component';\r\nimport { BeaconIconErrorComponent } from './icons/beacon-icon-error/beacon-icon-error.component';\r\nimport { BeaconIconInfoComponent } from './icons/beacon-icon-info/beacon-icon-info.component';\r\nimport { BeaconIconWarningComponent } from './icons/beacon-icon-warning/beacon-icon-warning.component';\r\nimport { BeaconTypeResolvePipe } from './pipes/beacon-type-resolve.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n BeaconNotifyComponent,\r\n BeaconNotifyContainerComponent,\r\n BeaconIconAlertComponent,\r\n BeaconIconErrorComponent,\r\n BeaconIconInfoComponent,\r\n BeaconIconSuccessComponent,\r\n BeaconIconWarningComponent,\r\n BeaconTypeResolvePipe\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n BeaconNotifyComponent,\r\n BeaconNotifyContainerComponent\r\n ]\r\n})\r\nexport class BeaconNotifyModule {\r\n static forRoot(config?: IBeaconGlobalConfig): ModuleWithProviders<BeaconNotifyModule> {\r\n return {\r\n ngModule: BeaconNotifyModule,\r\n providers: [\r\n { provide: BEACON_GLOBAL_CONFIG, useValue: config },\r\n BeaconNotifyService\r\n ]\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.BeaconNotifyService","i2","i4.BeaconIconAlertComponent","i5.BeaconIconErrorComponent","i6.BeaconIconInfoComponent","i7.BeaconIconSuccessComponent","i8.BeaconIconWarningComponent","i9.BeaconTypeResolvePipe","i3.BeaconNotifyComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-beacon-notify.mjs","sources":["../../src/lib/types/constants/index.ts","../../src/lib/beacon-notify.service.ts","../../src/lib/icons/beacon-icon-alert/beacon-icon-alert.component.ts","../../src/lib/icons/beacon-icon-alert/beacon-icon-alert.component.html","../../src/lib/icons/beacon-icon-error/beacon-icon-error.component.ts","../../src/lib/icons/beacon-icon-error/beacon-icon-error.component.html","../../src/lib/icons/beacon-icon-info/beacon-icon-info.component.ts","../../src/lib/icons/beacon-icon-info/beacon-icon-info.component.html","../../src/lib/icons/beacon-icon-success/beacon-icon-success.component.ts","../../src/lib/icons/beacon-icon-success/beacon-icon-success.component.html","../../src/lib/icons/beacon-icon-warning/beacon-icon-warning.component.ts","../../src/lib/icons/beacon-icon-warning/beacon-icon-warning.component.html","../../src/lib/pipes/beacon-type-resolve.pipe.ts","../../src/lib/beacon/beacon.component.ts","../../src/lib/beacon/beacon.component.html","../../src/lib/container/container.component.ts","../../src/lib/container/container.component.html","../../src/lib/beacon-notify.module.ts","../../src/ngx-beacon-notify.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { IBeaconGlobalConfig } from '../interfaces';\r\n\r\nexport const BEACON_GLOBAL_CONFIG = new InjectionToken<IBeaconGlobalConfig>('IBeaconGlobalConfig')\r\n\r\nexport const BEACON_OVERLAY_COLOR = '#000000DD'\r\n\r\nexport const BEACON_OVERLAY_ID = 'beacon-notify-focus-overlay_x'\r\n\r\nexport const BEACON_TYPE_KEYS = ['a.a', 'a.e', 'a.i', 'a.s', 'a.w']","import { Injectable, Inject, ViewChild, EventEmitter, ElementRef } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { BeaconNotifyComponent } from './beacon/beacon.component';\nimport {\n IBeaconConfig,\n IBeaconInlineConfig,\n IBeaconGlobalConfig,\n IBeaconType,\n IBeaconPositionConfig,\n IBeaconEvent,\n IBeaconWatchedEvent,\n IBeaconEventMessage,\n IBeaconTypeIcon,\n IBeaconButtonType,\n BEACON_GLOBAL_CONFIG,\n BEACON_OVERLAY_COLOR,\n BEACON_OVERLAY_ID,\n BEACON_TYPE_KEYS\n} from './types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BeaconNotifyService {\n private beaconDefaultIconKeys = BEACON_TYPE_KEYS\n private beaconConfigMap: { [key: string]: { [key: string]: string } } = {\n alert: { icon: this.beaconDefaultIconKeys[0], fontIcon: 'false', class: 'beacon-message-alert', title: 'Alert', style: '', animation: '', type: 'alert' },\n error: { icon: this.beaconDefaultIconKeys[1], fontIcon: 'false', class: 'beacon-message-error', title: 'Error', style: '', animation: '', type: 'error' },\n info: { icon: this.beaconDefaultIconKeys[2], fontIcon: 'false', class: 'beacon-message-info', title: 'Information', style: '', animation: '', type: 'info' },\n success: { icon: this.beaconDefaultIconKeys[3], fontIcon: 'false', class: 'beacon-message-success', title: 'Success', style: '', animation: '', type: 'success' },\n warning: { icon: this.beaconDefaultIconKeys[4], fontIcon: 'false', class: 'beacon-message-warning', title: 'Warning', style: '', animation: '', type: 'warning' }\n }\n private beaconTypeMap: { [key: string]: string } = {\n a: 'success', b: 'error', c: 'warning', d: 'info', e: 'alert'\n }\n private beaconTitle?: string\n private beaconMessage?: string\n private beaconIcon?: string\n private beaconManualId?: string\n private beaconSelectedManualId?: string\n private beaconIconFromFont?: true\n private beaconStatic?: true | number\n private beaconFixed?: true\n private beaconBlockOthers?: true\n private beaconPreventClickClose?: true\n private beaconAllowDuplicate?: true\n private beaconFocus?: true\n private beaconFocusShine?: true\n private beaconFocusShineScale?: number\n private beaconOverlayColor?: string\n private beaconStyleClass?: string\n private beaconReplacementClass?: string\n private beaconAnimationClass?: string\n private beaconNoHoverEffect?: true\n private beaconFontWeightTitle?: string\n private beaconFontWeightBody?: string\n private beaconGlobalStatic?: true | number\n private beaconGlobalFixed?: true\n private beaconGlobalBlockOthers?: true\n private beaconGlobalPreventClickClose?: true\n private beaconGlobalDuplicate?: boolean\n private beaconGlobalNoHoverEffect?: true\n private beaconGlobalFocusShineScale?: number\n private beaconGlobalPositioning?: IBeaconPositionConfig\n private beaconGlobalFocusOverlayColor?: string\n private beaconGlobalFontWeightTitle?: string\n private beaconGlobalFontWeightBody?: string\n private beaconContainer!: ElementRef\n private beaconDefaultAnimationClassName: string = 'beacon-message-control-animate'\n private beaconSuccessorBlockerAutoId?: string\n private beaconWithActiveFocusAutoId?: string\n private beaconButtons: IBeaconButtonType = {}\n private beaconFocusOrderLibrary: Array<string> = []\n private beaconSubscribedEventLibrary: { [key: string]: { [key: string]: string | EventEmitter<IBeaconEvent> } } = {}\n private beaconWatchedEventLibrary: Map<string, string> = new Map<string, string>([])\n private beaconWatchedEventTaskMaster: EventEmitter<IBeaconWatchedEvent> = new EventEmitter<IBeaconWatchedEvent>()\n private beaconAllEventTaskMaster: EventEmitter<IBeaconWatchedEvent> = new EventEmitter<IBeaconWatchedEvent>()\n private beaconFocusOverlayDOM?: HTMLElement\n public beaconEventTaskMaster: EventEmitter<{ [key: string]: boolean| string }> = new EventEmitter<{ [key: string]: boolean | string }>()\n public beaconLibrary: Array<IBeaconConfig> = []\n public beaconLibraryQueue: Array<IBeaconConfig> = []\n \n constructor(private sanitizer: DomSanitizer,\n @Inject(BEACON_GLOBAL_CONFIG) private globalConfig?: IBeaconGlobalConfig) {\n this.globalConfig && this.resolveGlobalConfig(this.globalConfig)\n // Resolve events\n this.resolveBeaconEvents()\n }\n\n // Resolve global config\n private resolveGlobalConfig(globalConfig: IBeaconGlobalConfig): void {\n if (globalConfig.static) {\n if (typeof globalConfig.static == 'boolean') {\n this.beaconGlobalFixed = undefined\n this.beaconGlobalStatic = true\n } else this.beaconGlobalStatic = globalConfig.static\n }\n\n if (globalConfig.fixed) {\n this.beaconGlobalStatic = undefined\n this.beaconGlobalFixed = true\n }\n\n globalConfig.preventClickClose && (this.beaconGlobalPreventClickClose = globalConfig.preventClickClose)\n globalConfig.blockOthers && (this.beaconGlobalBlockOthers = globalConfig.blockOthers)\n globalConfig.overlayColor && (this.beaconGlobalFocusOverlayColor = globalConfig.overlayColor)\n globalConfig.duplicate && (this.beaconGlobalDuplicate = globalConfig.duplicate)\n globalConfig.icon && this.resolveGlobalIconConfig(globalConfig.icon)\n globalConfig.styleClass && this.resolveGlobalPropertyConfig(globalConfig.styleClass, 'style')\n globalConfig.replacementClass && this.resolveGlobalPropertyConfig(globalConfig.replacementClass, 'class')\n globalConfig.animationClass && this.resolveGlobalPropertyConfig(globalConfig.animationClass, 'animation')\n globalConfig.position && (this.beaconGlobalPositioning = globalConfig.position)\n globalConfig.noHoverEffect && (this.beaconGlobalNoHoverEffect = globalConfig.noHoverEffect)\n globalConfig.shineScale && (this.beaconGlobalFocusShineScale = globalConfig.shineScale)\n globalConfig.fontWeightTitle && (this.beaconGlobalFontWeightTitle = globalConfig.fontWeightTitle)\n globalConfig.fontWeightBody && (this.beaconGlobalFontWeightBody = globalConfig.fontWeightBody)\n }\n\n // Resolve global config / for property\n private resolveGlobalPropertyConfig(config: IBeaconType, property: string): void {\n config.alert && (this.beaconConfigMap.alert[property] = config.alert)\n config.error && (this.beaconConfigMap.error[property] = config.error)\n config.info && (this.beaconConfigMap.info[property] = config.info)\n config.success && (this.beaconConfigMap.success[property] = config.success)\n config.warning && (this.beaconConfigMap.warning[property] = config.warning)\n }\n\n // Resolve global config / for icons\n private resolveGlobalIconConfig(config: IBeaconTypeIcon): void {\n config?.alert?.icon && (this.beaconConfigMap.alert.icon = config.alert.icon) && (this.beaconConfigMap.alert.fontIcon = String((config?.alert?.fontIcon || false)))\n config?.error?.icon && (this.beaconConfigMap.error.icon = config.error.icon) && (this.beaconConfigMap.error.fontIcon = String((config?.error?.fontIcon || false)))\n config?.info?.icon && (this.beaconConfigMap.info.icon = config.info.icon) && (this.beaconConfigMap.info.fontIcon = String((config.info.fontIcon || false)))\n config?.success?.icon && (this.beaconConfigMap.success.icon = config.success.icon) && (this.beaconConfigMap.success.fontIcon = String((config.success.fontIcon || false)))\n config?.warning?.icon && (this.beaconConfigMap.warning.icon = config.warning.icon) && (this.beaconConfigMap.warning.fontIcon = String((config.warning.fontIcon || false)))\n }\n\n // Resolve beacon events\n private resolveBeaconEvents(): void {\n this.beaconEventTaskMaster.subscribe((message: IBeaconEventMessage) => {\n const id = String(message.id)\n if (message.delete) {\n this.resolvePossibleBlockedBeacons(id)\n this.resolvePossibleQueuedFocus(id)\n this.performEventTask(id, { on: false, off: true })\n delete this.beaconSubscribedEventLibrary[id]\n } else if (message.mount) {\n this.performEventTask(id, { on: true, off: false })\n }\n })\n }\n\n // Perform event task\n private performEventTask(id: string, eventObject: IBeaconEvent): void {\n const stamp = this.beaconSubscribedEventLibrary[id]\n const event = <EventEmitter<IBeaconEvent>>stamp.event\n const manualId = stamp?.manualId?.toString().replace(/undefined/, '')\n event.emit(eventObject)\n this.beaconAllEventTaskMaster.emit({ id: manualId || null, type: String(stamp.type), ...eventObject })\n\n // Check if this manual id is watched\n if (manualId && this.beaconWatchedEventLibrary.has(manualId)) {\n this.beaconWatchedEventTaskMaster.emit({ id: manualId, type: String(stamp.type), ...eventObject })\n // Check if beacon is off\n if (eventObject.off) \n this.beaconWatchedEventLibrary.delete(manualId)\n }\n }\n\n // Resolve possible blocked beacons\n private resolvePossibleBlockedBeacons(id: string): void {\n // Check if this id is blocking others\n if (id == this.beaconSuccessorBlockerAutoId) {\n if (this.beaconLibraryQueue.length) {\n const queueLength = this.beaconLibraryQueue.length\n // Loop through queue\n for (let x = 0; x < queueLength; x++) {\n const nextInLine = <IBeaconConfig>this.beaconLibraryQueue.shift()\n\n // Add message to library\n if (this.getBeaconGlobalPositionConfig?.topBottom == 'top')\n this.beaconLibrary.unshift(nextInLine)\n else this.beaconLibrary.push(nextInLine) \n\n // Check if set to block\n if (nextInLine.blockOthers) {\n this.beaconSuccessorBlockerAutoId = nextInLine.bid\n break\n }\n }\n\n // Check if no new beacon is set as blocker and unset previous value\n if (id == this.beaconSuccessorBlockerAutoId) \n this.beaconSuccessorBlockerAutoId = undefined\n }\n else this.beaconSuccessorBlockerAutoId = undefined\n }\n }\n\n // Resolve queued beacon focus\n private resolvePossibleQueuedFocus(id: string): void {\n // Check if this id is active focus beacon\n if (id == this.beaconWithActiveFocusAutoId) {\n if (this.beaconFocusOrderLibrary.length) {\n // Pass the next focus\n this.beaconWithActiveFocusAutoId = this.beaconFocusOrderLibrary.shift()\n this.beaconEventTaskMaster.emit({ autoDetectNextFocusBeacon: true })\n }\n else {\n this.beaconWithActiveFocusAutoId = undefined\n this.destroyBeaconFocusOverlay()\n }\n }\n }\n\n // Generate unique id for item\n private get getId(): string {\n return crypto.getRandomValues(new Uint32Array(2)).toString().split(',').join('')\n }\n\n // Set beacon container\n public setBeaconContainer(container: ElementRef): void {\n this.beaconContainer = container\n }\n\n // Get beacon container\n public get getBeaconContainer(): ElementRef {\n return this.beaconContainer\n }\n\n // Get beacon global position config\n public get getBeaconGlobalPositionConfig(): IBeaconPositionConfig | undefined {\n return this.beaconGlobalPositioning\n }\n\n // Get default icon keys\n public get getBeaconDefaultIconKeys(): string[] {\n return this.beaconDefaultIconKeys\n }\n\n // Get active focus beacon id\n public get getActiveFocusBeaconId(): string | undefined {\n return this.beaconWithActiveFocusAutoId\n }\n\n // Create overlay for focused beacon\n public createBeaconFocusOverlay(overlayColor?: string): void {\n const overlay = document.createElement('div')\n overlay.setAttribute('id', BEACON_OVERLAY_ID)\n overlay.style.position = 'fixed'\n overlay.style.top = '0'\n overlay.style.bottom = '0'\n overlay.style.right = '0'\n overlay.style.left = '0'\n overlay.style.zIndex = '9002'\n overlay.style.background = overlayColor || this.beaconGlobalFocusOverlayColor || BEACON_OVERLAY_COLOR\n document.body.style.overflow = 'hidden'\n\n // Pass overlay element\n this.beaconFocusOverlayDOM = overlay\n\n this.beaconContainer.nativeElement.appendChild(overlay)\n }\n\n // Repaint overlay for focused beacon\n public repaintBeaconFocusOverlay(overlayColor?: string): void {\n if (this.beaconFocusOverlayDOM)\n this.beaconFocusOverlayDOM.style.background = overlayColor || this.beaconGlobalFocusOverlayColor || BEACON_OVERLAY_COLOR\n }\n\n // Destroy overlay for focused beacon\n public destroyBeaconFocusOverlay(): void {\n document.body.style.overflow = 'auto'\n this.beaconContainer.nativeElement.querySelector('div#' + BEACON_OVERLAY_ID).remove()\n this.beaconFocusOverlayDOM = undefined\n }\n\n // Set id for beacon\n public id(id: string): BeaconNotifyService {\n id && (this.beaconManualId = id)\n return this\n }\n\n // Set notification title\n public title(title: string): BeaconNotifyService {\n title && (this.beaconTitle = title)\n return this\n }\n\n // Set notification message\n public message(message: string): BeaconNotifyService {\n message && (this.beaconMessage = message)\n return this\n }\n\n // Highlight id of beacon to update\n public select(id: string): BeaconNotifyService {\n id && (this.beaconSelectedManualId = id)\n return this\n }\n\n // Change notification title\n public setTitle(title: string): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0)\n this.beaconLibrary[beaconIndex].title = title\n }\n }\n\n // Change notification message\n public setMessage(message: string): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0)\n this.beaconLibrary[beaconIndex].body = message\n }\n }\n\n // Change notification title & message\n public setContent(title: string, message: string): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0)\n this.beaconLibrary[beaconIndex].title = title\n this.beaconLibrary[beaconIndex].body = message\n }\n }\n\n // Update beacon button 1\n public setButtonOne(text: string, canDismiss?: boolean | null, callback?: any, callbackArgs?: any[] | null, position?: 'left' | 'center' | 'right'): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0) {\n (<IBeaconButtonType>this.beaconLibrary[beaconIndex].buttons).one = {\n text: text.substring(0, 15),\n canDismiss,\n callback,\n callbackArgs,\n position\n }\n }\n }\n }\n\n // Update beacon button 2\n public setButtonTwo(text: string, canDismiss?: boolean | null, callback?: any, callbackArgs?: any[] | null, position?: 'left' | 'center' | 'right'): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0) {\n if (this.beaconLibrary[beaconIndex].buttons?.one) {\n (<IBeaconButtonType>this.beaconLibrary[beaconIndex].buttons).two = {\n text: text.substring(0, 15),\n canDismiss,\n callback,\n callbackArgs,\n position\n }\n } else this.setButtonOne(text, canDismiss, callback, callbackArgs, position)\n }\n }\n }\n\n // Remove beacon button 1\n public removeButtonOne(): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0) {\n (<IBeaconButtonType>this.beaconLibrary[beaconIndex].buttons).one = undefined\n }\n }\n }\n\n // Remove beacon button 2\n public removeButtonTwo(): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0) {\n (<IBeaconButtonType>this.beaconLibrary[beaconIndex].buttons).two = undefined\n }\n }\n }\n\n // Remove beacon buttons\n public removeButtons(): void {\n // Check for active manual id / and if a beacon is tied to it\n if (this.beaconSelectedManualId) {\n const beaconIndex = this.beaconLibrary.findIndex(x => x.mid == this.beaconSelectedManualId)\n if (beaconIndex >= 0) {\n (<IBeaconButtonType>this.beaconLibrary[beaconIndex].buttons).one = undefined;\n (<IBeaconButtonType>this.beaconLibrary[beaconIndex].buttons).two = undefined\n }\n }\n }\n\n // Set beacon as static or with delay\n public static(delay?: number): BeaconNotifyService {\n this.beaconStatic = delay || true\n this.beaconFixed = undefined\n return this\n }\n\n // Set beacon as fixed which removes the close button and disallows close on click\n public fixed(): BeaconNotifyService {\n this.beaconStatic = undefined\n this.beaconFixed = true\n return this\n }\n\n // Allow beacon to block others\n public block(): BeaconNotifyService {\n this.beaconBlockOthers = true\n return this\n }\n\n // Focus on beacon\n public focus(overlayColor?: string): BeaconNotifyService {\n overlayColor && (this.beaconOverlayColor = overlayColor)\n this.beaconFocus = true\n return this\n }\n\n // Focus beacon on center screen\n public shine(scale?: number, overlayColor?: string): BeaconNotifyService {\n overlayColor && (this.beaconOverlayColor = overlayColor)\n this.beaconFocusShine = this.beaconFocus = true\n scale && (this.beaconFocusShineScale = scale)\n return this\n }\n\n // Add button for beacon\n public button(text: string, canDismiss?: boolean | null, callback?: any, callbackArgs?: any[] | null, position?: 'left' | 'center' | 'right'): BeaconNotifyService {\n if (!this.beaconButtons?.one) {\n this.beaconButtons.one = {\n text: text.substring(0, 15),\n canDismiss,\n callback,\n callbackArgs,\n position\n }\n } else if (this.beaconButtons.one && !this.beaconButtons.two) {\n this.beaconButtons.two = {\n text: text.substring(0, 15),\n canDismiss,\n callback,\n callbackArgs,\n position\n }\n }\n\n return this\n }\n\n // Allow duplicate for beacon\n public duplicate(): BeaconNotifyService {\n this.beaconAllowDuplicate = true\n return this\n }\n\n // Set config values for beacon\n public build(config: IBeaconInlineConfig): BeaconNotifyService {\n if (config.static) {\n if (typeof config.static == 'boolean')\n this.static()\n else this.static(Number(config.static))\n }\n\n config.fixed && this.fixed()\n config.duplicate && this.duplicate()\n config.preventClickClose && (this.beaconPreventClickClose = config.preventClickClose)\n config.blockOthers && (this.beaconBlockOthers = config.blockOthers)\n config.focus && (this.beaconFocus = config.focus)\n config.shine && (this.beaconFocusShine = this.beaconFocus = config.shine)\n config.icon && (this.beaconIcon = config.icon)\n config.fontIcon && (this.beaconIconFromFont = config.fontIcon)\n config.styleClass && (this.beaconStyleClass = config.styleClass)\n config.replacementClass && (this.beaconReplacementClass = config.replacementClass)\n config.animationClass && (this.beaconAnimationClass = config.animationClass)\n config.animationClass && (this.beaconAnimationClass = config.animationClass)\n config.overlayColor && (this.beaconOverlayColor = config.overlayColor)\n config.noHoverEffect && (this.beaconNoHoverEffect = config.noHoverEffect)\n config.shineScale && (this.beaconFocusShineScale = config.shineScale)\n config.fontWeightTitle && (this.beaconFontWeightTitle = config.fontWeightTitle)\n config.fontWeightBody && (this.beaconFontWeightBody = config.fontWeightBody)\n return this\n }\n\n // create notification beacon\n private beacon(message: string, type: string): EventEmitter<IBeaconEvent> {\n // Get signature\n const signature = window.btoa((this.beaconTitle || this.beaconConfigMap[type].title) + '.' + message)\n // Generate beacon id\n const beaconId = this.getId\n // Register beacon in event library\n this.beaconSubscribedEventLibrary[beaconId] = Object.create({})\n // Check for duplicate if set to prevent or proceed if turned off\n if (this.beaconAllowDuplicate || (([undefined, false].includes(this.beaconGlobalDuplicate) && this.isNewBeaconADuplicate(signature) == !1) || this.beaconGlobalDuplicate)) {\n const beaconObject: IBeaconConfig = {\n bid: beaconId,\n mid: this.beaconManualId,\n type: this.beaconConfigMap[type].class,\n icon: this.beaconIcon || this.beaconConfigMap[type].icon,\n fontIcon: this.beaconIconFromFont || (this.beaconConfigMap[type].fontIcon == 'true' ? true : undefined),\n title: this.beaconTitle || this.beaconConfigMap[type].title,\n static: this.beaconStatic || this.beaconGlobalStatic,\n fixed: this.beaconFixed || this.beaconGlobalFixed,\n preventClickClose: this.beaconPreventClickClose || this.beaconGlobalPreventClickClose,\n styleClass: this.beaconStyleClass || this.beaconConfigMap[type].style,\n replacementClass: this.beaconReplacementClass,\n animationClass: this.beaconAnimationClass || this.beaconConfigMap[type].animation || this.beaconDefaultAnimationClassName,\n blockOthers: this.beaconBlockOthers || this.beaconGlobalBlockOthers,\n buttons: this.beaconButtons,\n overlayColor: this.beaconOverlayColor,\n bodyHtml: <SafeHtml>this.sanitizer.bypassSecurityTrustHtml(message),\n body: message,\n focus: this.beaconFocus,\n shine: this.beaconFocusShine,\n noHoverEffect: this.beaconNoHoverEffect || this.beaconGlobalNoHoverEffect,\n shineScale: this.beaconFocusShineScale || this.beaconGlobalFocusShineScale,\n fontWeightTitle: this.beaconFontWeightTitle || this.beaconGlobalFontWeightTitle,\n fontWeightBody: this.beaconFontWeightBody || this.beaconGlobalFontWeightBody,\n signature\n }\n\n // Sanitize icon if passed\n if (!beaconObject.fontIcon && beaconObject.icon && !this.beaconDefaultIconKeys.includes(beaconObject.icon)) {\n beaconObject.svgIcon = <SafeHtml>this.sanitizer.bypassSecurityTrustHtml(beaconObject.icon)\n }\n\n // Check if there is an active beacon blocking others and add build beacon to queue\n if (this.beaconSuccessorBlockerAutoId) {\n this.beaconLibraryQueue.push(beaconObject)\n } else {\n // Check if beacon can block and register id\n if (beaconObject.blockOthers)\n this.beaconSuccessorBlockerAutoId = beaconObject.bid\n\n // Add message to library\n if (this.getBeaconGlobalPositionConfig?.topBottom == 'top')\n this.beaconLibrary.unshift(beaconObject)\n else this.beaconLibrary.push(beaconObject)\n }\n\n // Check if beacon has focus\n if (this.beaconFocus) {\n if (this.beaconWithActiveFocusAutoId)\n this.beaconFocusOrderLibrary.push(beaconObject.bid)\n else\n this.beaconWithActiveFocusAutoId = beaconObject.bid\n }\n\n // Check if id is set and register it\n if (this.beaconManualId) {\n this.beaconSubscribedEventLibrary[beaconId].manualId = this.beaconManualId\n // Map the defined id to the auto-gen id\n this.beaconWatchedEventLibrary.set(this.beaconManualId, beaconId)\n }\n\n // Register beacon type \n this.beaconSubscribedEventLibrary[beaconId].type = this.beaconConfigMap[type].type\n }\n\n // Register event for beacon\n this.beaconSubscribedEventLibrary[beaconId].event = new EventEmitter<IBeaconEvent>()\n\n // Reset\n this.beaconTitle = undefined\n this.beaconMessage = undefined\n this.beaconStatic = undefined\n this.beaconFixed = undefined\n this.beaconBlockOthers = undefined\n this.beaconManualId = undefined\n this.beaconFocus = undefined\n this.beaconFocusShine = undefined\n this.beaconOverlayColor = undefined\n this.beaconAllowDuplicate = undefined\n this.beaconNoHoverEffect = undefined\n this.beaconIcon = undefined\n this.beaconIconFromFont = undefined\n this.beaconStyleClass = undefined\n this.beaconReplacementClass = undefined\n this.beaconAnimationClass = undefined\n this.beaconButtons = {}\n\n return <EventEmitter<IBeaconEvent>>this.beaconSubscribedEventLibrary[beaconId].event\n }\n\n // Set notification message / success\n public success(...message: string[]): EventEmitter<IBeaconEvent> {\n // Set title\n (message.length > 1) && message[0] && this.title(message[0])\n // Set body\n return this.beacon(message[1] || message[0] || this.beaconMessage || this.beaconConfigMap.success.title, this.beaconTypeMap.a)\n }\n\n // Set notification message / error\n public error(...message: string[]): EventEmitter<IBeaconEvent> {\n // Set title\n (message.length > 1) && message[0] && this.title(message[0])\n // Set body\n return this.beacon(message[1] || message[0] || this.beaconMessage || this.beaconConfigMap.error.title, this.beaconTypeMap.b)\n }\n\n // Set notification message / warning\n public warning(...message: string[]): EventEmitter<IBeaconEvent> {\n // Set title\n (message.length > 1) && message[0] && this.title(message[0])\n // Set body\n return this.beacon(message[1] || message[0] || this.beaconMessage || this.beaconConfigMap.warning.title, this.beaconTypeMap.c)\n }\n\n // Set notification message / info\n public info(...message: string[]): EventEmitter<IBeaconEvent> {\n // Set title\n (message.length > 1) && message[0] && this.title(message[0])\n // Set body\n return this.beacon(message[1] || message[0] || this.beaconMessage || this.beaconConfigMap.info.title, this.beaconTypeMap.d)\n }\n\n // Set notification message / alert\n public alert(...message: string[]): EventEmitter<IBeaconEvent> {\n // Set title\n (message.length > 1) && message[0] && this.title(message[0])\n // Set body\n return this.beacon(message[1] || message[0] || this.beaconMessage || this.beaconConfigMap.alert.title, this.beaconTypeMap.e)\n }\n\n // Watch events for beacon with specified id\n public watch(id: string | string[]): EventEmitter<IBeaconWatchedEvent> {\n // Register watched id\n if (Array.isArray(id))\n id.forEach(k => this.beaconWatchedEventLibrary.set(k, String()))\n else this.beaconWatchedEventLibrary.set(id, String())\n\n return this.beaconWatchedEventTaskMaster\n }\n\n // Watch events for all beacons\n public events(): EventEmitter<IBeaconWatchedEvent> {\n return this.beaconAllEventTaskMaster\n }\n\n // Close beacon with id\n public closeOne(id: string): void {\n if (this.beaconWatchedEventLibrary.has(id)) {\n const autoId = <string>this.beaconWatchedEventLibrary.get(id)\n\n // Remove the beacon\n this.beaconLibrary = this.beaconLibrary.filter(x => {\n return (x.bid != autoId)\n })\n\n this.beaconEventTaskMaster.emit({\n delete: true,\n id: autoId\n })\n }\n }\n\n // Close all beacons\n public closeAll(): void {\n this.beaconLibrary = this.beaconLibrary.filter(x => {\n this.beaconEventTaskMaster.emit({\n delete: true,\n id: x.bid\n })\n\n return !(x.bid)\n })\n }\n\n // Check for possible duplicate\n private isNewBeaconADuplicate(signature: string): boolean {\n const duplicate = this.beaconLibrary.find(x => x.signature == signature)\n const beacon = this.beaconContainer.nativeElement.querySelector(`div#bc_${duplicate?.bid}`)\n return Boolean(beacon && window.getComputedStyle(beacon).opacity == '1')\n }\n}","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-beacon-icon-alert',\n templateUrl: './beacon-icon-alert.component.html',\n styleUrls: ['./beacon-icon-alert.component.css']\n})\nexport class BeaconIconAlertComponent {\n\n}\n","<svg fill=\"currentColor\" viewBox=\"0 0 48 48\" data-name=\"Layer 1\" id=\"Layer_1\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n <g id=\"SVGRepo_iconCarrier\">\n <title></title>\n <path\n d=\"M40.62,28.34l-.87-.7A2,2,0,0,1,39,26.08V18A15,15,0,0,0,26.91,3.29a3,3,0,0,0-5.81,0A15,15,0,0,0,9,18v8.08a2,2,0,0,1-.75,1.56l-.87.7a9,9,0,0,0-3.38,7V37a4,4,0,0,0,4,4h8.26a8,8,0,0,0,15.47,0H40a4,4,0,0,0,4-4V35.36A9,9,0,0,0,40.62,28.34ZM24,43a4,4,0,0,1-3.44-2h6.89A4,4,0,0,1,24,43Zm16-6H8V35.36a5,5,0,0,1,1.88-3.9l.87-.7A6,6,0,0,0,13,26.08V18a11,11,0,0,1,22,0v8.08a6,6,0,0,0,2.25,4.69l.87.7A5,5,0,0,1,40,35.36Z\"\n ></path>\n </g>\n</svg>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-beacon-icon-error',\n templateUrl: './beacon-icon-error.component.html',\n styleUrls: ['./beacon-icon-error.component.css']\n})\nexport class BeaconIconErrorComponent {\n\n}\n","<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n <g id=\"SVGRepo_iconCarrier\">\n <path\n d=\"M11.3586 20.6831C11.5639 20.7901 11.6666 20.8436 11.809 20.8713C11.92 20.8929 12.08 20.8929 12.191 20.8713C12.3334 20.8436 12.4361 20.7901 12.6414 20.6831C14.54 19.6939 20 16.4612 20 12.0001V8.21772C20 7.4182 20 7.01845 19.8692 6.67482C19.7537 6.37126 19.566 6.10039 19.3223 5.88564C19.0465 5.64255 18.6722 5.50219 17.9236 5.22146L12.5618 3.21079C12.3539 3.13283 12.25 3.09385 12.143 3.07839C12.0482 3.06469 11.9518 3.06469 11.857 3.07839C11.75 3.09385 11.6461 3.13283 11.4382 3.21079L6.0764 5.22146C5.3278 5.50219 4.9535 5.64255 4.67766 5.88564C4.43398 6.10039 4.24627 6.37126 4.13076 6.67482C4 7.01845 4 7.4182 4 8.21772V12.0001C4 16.4612 9.45996 19.6939 11.3586 20.6831Z\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </g>\n</svg>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-beacon-icon-info',\n templateUrl: './beacon-icon-info.component.html',\n styleUrls: ['./beacon-icon-info.component.css']\n})\nexport class BeaconIconInfoComponent {\n\n}\n","<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n <g id=\"SVGRepo_iconCarrier\">\n <path\n d=\"M10 22H14M5 9C5 5.13401 8.13401 2 12 2C15.866 2 19 5.13401 19 9C19 11.3787 17.8135 13.4694 16 14.7344L15.4582 17.3004C15.3097 18.2778 14.4695 19 13.4809 19H10.5191C9.53052 19 8.69027 18.2778 8.54177 17.3004L8 14.7453C6.18652 13.4804 5 11.3787 5 9Z\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n <path d=\"M8 15H16\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </g>\n</svg>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-beacon-icon-success',\n templateUrl: './beacon-icon-success.component.html',\n styleUrls: ['./beacon-icon-success.component.css']\n})\nexport class BeaconIconSuccessComponent {\n}\n","<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n <g id=\"SVGRepo_iconCarrier\">\n <path\n d=\"M8.5 12.5L10.0089 14.0089C10.3526 14.3526 10.5245 14.5245 10.7198 14.5822C10.8914 14.6328 11.0749 14.6245 11.2412 14.5585C11.4305 14.4834 11.5861 14.2967 11.8973 13.9232L16 9M16.3287 4.75855C17.0676 4.77963 17.8001 5.07212 18.364 5.636C18.9278 6.19989 19.2203 6.9324 19.2414 7.67121C19.2623 8.40232 19.2727 8.76787 19.2942 8.85296C19.3401 9.0351 19.2867 8.90625 19.383 9.06752C19.428 9.14286 19.6792 9.40876 20.1814 9.94045C20.6889 10.4778 21 11.2026 21 12C21 12.7974 20.6889 13.5222 20.1814 14.0595C19.6792 14.5912 19.428 14.8571 19.383 14.9325C19.2867 15.0937 19.3401 14.9649 19.2942 15.147C19.2727 15.2321 19.2623 15.5977 19.2414 16.3288C19.2203 17.0676 18.9278 17.8001 18.364 18.364C17.8001 18.9279 17.0676 19.2204 16.3287 19.2414C15.5976 19.2623 15.2321 19.2727 15.147 19.2942C14.9649 19.3401 15.0937 19.2868 14.9325 19.3831C14.8571 19.4281 14.5912 19.6792 14.0595 20.1814C13.5222 20.6889 12.7974 21 12 21C11.2026 21 10.4778 20.6889 9.94047 20.1814C9.40874 19.6792 9.14287 19.4281 9.06753 19.3831C8.90626 19.2868 9.0351 19.3401 8.85296 19.2942C8.76788 19.2727 8.40225 19.2623 7.67121 19.2414C6.93238 19.2204 6.19986 18.9279 5.63597 18.364C5.07207 17.8001 4.77959 17.0676 4.75852 16.3287C4.73766 15.5976 4.72724 15.2321 4.70578 15.147C4.65985 14.9649 4.71322 15.0937 4.61691 14.9324C4.57192 14.8571 4.32082 14.5912 3.81862 14.0595C3.31113 13.5222 3 12.7974 3 12C3 11.2026 3.31113 10.4778 3.81862 9.94048C4.32082 9.40876 4.57192 9.14289 4.61691 9.06755C4.71322 8.90628 4.65985 9.03512 4.70578 8.85299C4.72724 8.7679 4.73766 8.40235 4.75852 7.67126C4.77959 6.93243 5.07207 6.1999 5.63597 5.636C6.19986 5.07211 6.93238 4.77963 7.67121 4.75855C8.40232 4.73769 8.76788 4.72727 8.85296 4.70581C9.0351 4.65988 8.90626 4.71325 9.06753 4.61694C9.14287 4.57195 9.40876 4.32082 9.94047 3.81863C10.4778 3.31113 11.2026 3 12 3C12.7974 3 13.5222 3.31114 14.0595 3.81864C14.5913 4.32084 14.8571 4.57194 14.9325 4.61693C15.0937 4.71324 14.9649 4.65988 15.147 4.70581C15.2321 4.72726 15.5976 4.73769 16.3287 4.75855Z\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n </g>\n</svg>","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-beacon-icon-warning',\n templateUrl: './beacon-icon-warning.component.html',\n styleUrls: ['./beacon-icon-warning.component.css']\n})\nexport class BeaconIconWarningComponent {\n\n}\n","<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n <g id=\"SVGRepo_iconCarrier\">\n <path d=\"M12 7.75V13\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path\n d=\"M21.08 8.58003V15.42C21.08 16.54 20.48 17.58 19.51 18.15L13.57 21.58C12.6 22.14 11.4 22.14 10.42 21.58L4.47998 18.15C3.50998 17.59 2.90997 16.55 2.90997 15.42V8.58003C2.90997 7.46003 3.50998 6.41999 4.47998 5.84999L10.42 2.42C11.39 1.86 12.59 1.86 13.57 2.42L19.51 5.84999C20.48 6.41999 21.08 7.45003 21.08 8.58003Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n ></path>\n <path d=\"M12 16.2V16.2999\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </g>\n</svg>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { BEACON_TYPE_KEYS } from '../types/constants';\n\n@Pipe({\n name: 'beaconTypeResolve'\n})\nexport class BeaconTypeResolvePipe implements PipeTransform {\n private beaconTypeKeys!: Array<string>\n constructor(){\n this.beaconTypeKeys = BEACON_TYPE_KEYS\n }\n\n transform(value: string, ...args: string[]): boolean {\n let status: boolean = false\n switch (args[0]) {\n case 'alert':\n status = value == this.beaconTypeKeys[0]\n break\n case 'error':\n status = value == this.beaconTypeKeys[1]\n break\n case 'info':\n status = value == this.beaconTypeKeys[2]\n break\n case 'success':\n status = value == this.beaconTypeKeys[3]\n break\n case 'warning':\n status = value == this.beaconTypeKeys[4]\n break\n }\n\n return status\n }\n\n}\n","import { Component, Input, AfterViewInit } from '@angular/core';\nimport { BeaconNotifyService } from '../beacon-notify.service';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { IBeaconConfig, IBeaconEventMessage } from '../types';\n\n@Component({\n selector: 'app-beacon',\n templateUrl: './beacon.component.html',\n styleUrls: ['./beacon.component.css']\n})\nexport class BeaconNotifyComponent {\n @Input() beacon!: IBeaconConfig\n private beaconDOM!: HTMLElement\n public beaconDefaultIconKeys!: string[]\n\n constructor(private beaconService: BeaconNotifyService,\n private sanitizer: DomSanitizer){\n this.beaconDefaultIconKeys = this.beaconService.getBeaconDefaultIconKeys\n }\n\n ngOnInit(): void {\n // Fire mount event\n this.beaconService.beaconEventTaskMaster.emit({\n mount: true,\n id: this.beacon.bid\n })\n }\n\n ngAfterViewInit(): void {\n // Get beacon\n const beacon = this.beaconDOM = this.beaconService.getBeaconContainer.nativeElement.querySelector(`#bc_${this.beacon.bid}`)\n // Resolve font weight for title and body\n this.resolveFontWeightForComponents(beacon)\n // Resolve possible focus for beacon\n this.resolvePossibleFocusForBeacon(beacon)\n setTimeout(() => {\n // Resolve delay setting\n this.resolveDelayForBeacon(beacon, true)\n // Set beacon listener\n this.setListenerForBeacon(beacon, this.beacon)\n\n // Sanitize svg content if not font icon\n if (this.beacon.svgIcon) {\n const beaconSvgIcon = beacon.querySelector('span.beacon-message-svg-control svg')\n beaconSvgIcon.style.width = '20px'\n beaconSvgIcon.style.height = '20px'\n beaconSvgIcon.style.marginRight = '7px'\n beaconSvgIcon.style.marginTop = '-2px'\n }\n }, 0)\n\n // Listen for event\n this.beaconService.beaconEventTaskMaster.subscribe((message: IBeaconEventMessage) => {\n // Check for next for focus event\n if (message.autoDetectNextFocusBeacon)\n this.resolvePossibleFocusForBeacon(this.beaconDOM, false)\n })\n }\n\n // When beacon button is clicked\n beaconButtonClick(e: Event, no: number): void {\n e.stopPropagation()\n switch (no) {\n case 1:\n // Check for callback\n if (this.beacon?.buttons?.one?.callback)\n this.beacon?.buttons?.one?.callback(...(this.beacon?.buttons?.one?.callbackArgs || []))\n \n // Check if can dismiss\n if (this.beacon?.buttons?.one?.canDismiss)\n this.closeBeacon(this.beaconDOM, this.beacon)\n break\n case 2:\n // Check for callback\n if (this.beacon?.buttons?.two?.callback)\n this.beacon?.buttons?.two?.callback(...(this.beacon?.buttons?.two?.callbackArgs || []))\n\n // Check if can dismiss\n if (this.beacon?.buttons?.two?.canDismiss)\n this.closeBeacon(this.beaconDOM, this.beacon)\n break\n }\n }\n\n // Set listener for beacon changes\n setListenerForBeacon(beacon: Element, beaconData: IBeaconConfig): void {\n ((b, d) => {\n beacon?.addEventListener('animationend', (e) => this.closeBeacon(b, d))\n beacon?.addEventListener('webkitAnimationEnd', (e) => this.closeBeacon(b, d))\n beacon?.addEventListener('oAnimationEnd', (e) => this.closeBeacon(b, d))\n })(beacon, beaconData)\n }\n\n // Toggle auto-close\n autoClose(status: boolean, control: HTMLElement): void {\n status\n ? (control.getAttribute('data-beacon-static') != 'true' && this.resolveDelayForBeacon(control, false))\n : control.classList.remove(String(this.beacon.animationClass))\n }\n\n // Resolve delay for beacon\n resolveDelayForBeacon(beacon: HTMLElement, onLoad?: boolean): void {\n // Check if delay set\n if (this.beacon.static && typeof this.beacon.static == 'number') {\n beacon && (beacon.style.animationDelay = this.beacon.static + 's')\n } else {\n if (onLoad == !1 && this.beacon?.fixed != true)\n beacon.classList.add(String(this.beacon.animationClass))\n }\n }\n\n // Resolve font weight for title and body\n resolveFontWeightForComponents(beacon: HTMLElement): void {\n if (this.beacon.fontWeightTitle.trim()) {\n const title: HTMLElement = beacon.querySelector('div.beacon-message-header')\n title && (title.style.fontWeight = this.beacon.fontWeightTitle)\n }\n\n if (this.beacon.fontWeightBody.trim()) {\n const body: HTMLElement = beacon.querySelector('div.beacon-message-body')\n body && (body.style.fontWeight = this.beacon.fontWeightBody)\n }\n }\n\n // Resolve focus beacon\n resolvePossibleFocusForBeacon(beacon: HTMLElement, createOverlay: boolean = true): void {\n const activeFocusBeaconId = this.beaconService.getActiveFocusBeaconId\n if (activeFocusBeaconId == this.beacon.bid) {\n beacon.style.zIndex = '9003'\n \n // Check if beacon should be centered\n if (this.beacon.shine) {\n const scale = this.beacon.shineScale && String(this.beacon.shineScale).match(/(\\d+)\\.(\\d+)/) ? this.beacon.shineScale : '1.5'\n beacon.style.position = 'fixed'\n beacon.style.right = '0'\n beacon.style.left = '0'\n beacon.style.bottom = '50%'\n beacon.style.margin = 'auto'\n beacon.style.transform = 'scale(' + scale + ')'\n }\n\n // Create overlay\n if (createOverlay)\n this.beaconService.createBeaconFocusOverlay(this.beacon.overlayColor)\n else this.beaconService.repaintBeaconFocusOverlay(this.beacon.overlayColor)\n }\n }\n\n // Trigger close beacon\n closeBeacon(beaconControl: any, beaconData: IBeaconConfig): void {\n if (!this.beacon?.fixed) {\n this.beaconService.beaconEventTaskMaster.emit({\n delete: true,\n id: beaconControl.getAttribute('id').replace(/bc_/, '')\n })\n }\n }\n}\n","<div #beaconControl \n\t\t[id]=\"'bc_' + beacon.bid\"\n\t\t(mouseenter)=\"autoClose(false, beaconControl)\" \n\t\t(mouseleave)=\"autoClose(true, beaconControl)\"\n\t\t(click)=\"beacon.preventClickClose ? null : closeBeacon(beaconControl, beacon)\"\n\t\t[attr.data-beacon-static]=\"beacon.static\"\n\t\tclass=\"beacon-message-control {{ (beacon.static !== true && beacon.fixed !== true) ? beacon.animationClass : '' }} {{ beacon.replacementClass || beacon.type }} {{ beacon.styleClass }}\"\n\t\t[class.beacon-message-control-no-hover-effect]=\"beacon.noHoverEffect\">\n\t<div class=\"beacon-message-header\">\n\t\t<div>\n\t\t\t<span *ngIf=\"beacon.fontIcon\"><i [class]=\"beacon.icon\"></i></span>\n\t\t\t<span *ngIf=\"!beacon.fontIcon && beaconDefaultIconKeys.includes(beacon.icon)\" class=\"beacon-message-svg-control\">\n\t\t\t\t<app-beacon-icon-alert *ngIf=\"beacon.icon | beaconTypeResolve:'alert'\"></app-beacon-icon-alert>\n\t\t\t\t<app-beacon-icon-error *ngIf=\"beacon.icon | beaconTypeResolve:'error'\"></app-beacon-icon-error>\n\t\t\t\t<app-beacon-icon-info *ngIf=\"beacon.icon | beaconTypeResolve:'info'\"></app-beacon-icon-info>\n\t\t\t\t<app-beacon-icon-success *ngIf=\"beacon.icon | beaconTypeResolve:'success'\"></app-beacon-icon-success>\n\t\t\t\t<app-beacon-icon-warning *ngIf=\"beacon.icon | beaconTypeResolve:'warning'\"></app-beacon-icon-warning>\n\t\t\t</span>\n\t\t\t<span *ngIf=\"!beacon.fontIcon && beacon.icon && !beaconDefaultIconKeys.includes(beacon.icon)\" class=\"beacon-message-svg-control\" [innerHTML]=\"beacon.svgIcon\"></span>\n\t\t\t{{ beacon.title }}\n\t\t</div>\n\t\t<div>\n\t\t\t<div *ngIf=\"!beacon.fixed\" class=\"beacon-message-close\" (click)=\"closeBeacon(beaconControl, beacon)\">\n\t\t\t\t<svg width=\"10\" height=\"10\" viewBox=\"0 0 78 78\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t <rect y=\"7.07104\" width=\"10\" height=\"100\" rx=\"5\" transform=\"rotate(-45 0 7.07104)\" />\n\t\t\t <rect x=\"70.7109\" width=\"10\" height=\"100\" rx=\"5\" transform=\"rotate(45 70.7109 0)\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"beacon-message-divider\"></div>\n\t<div class=\"beacon-message-body\" [innerHTML]=\"beacon.bodyHtml\"></div>\n\t<div class=\"beacon-message-divider\" *ngIf=\"beacon.buttons?.one || beacon.buttons?.two\"></div>\n\n\t<div class=\"beacon-message-footer\" *ngIf=\"beacon.buttons && beacon.buttons?.one && beacon.buttons?.two\">\n\t\t<div><button (click)=\"beaconButtonClick($event, 1)\">{{ beacon.buttons?.one?.text }}</button></div>\n\t\t<div><button (click)=\"beaconButtonClick($event, 2)\">{{ beacon.buttons?.two?.text }}</button></div>\n\t</div>\n\n\t<div class=\"beacon-message-footer\" *ngIf=\"beacon.buttons && beacon.buttons?.one && !beacon?.buttons?.two\">\n\t\t<div [class]=\"beacon.buttons?.one?.position ? ('beacon-message-button-container-' + beacon?.buttons?.one?.position) : ''\">\n\t\t\t<button (click)=\"beaconButtonClick($event, 1)\">{{ beacon.buttons?.one?.text }}</button>\n\t\t</div>\n\t</div>\n\n</div>","import { Component, Input, ViewChild, ElementRef, AfterViewInit } from '@angular/core';\nimport { BeaconNotifyService } from '../beacon-notify.service';\nimport { IBeaconConfig, IBeaconEventMessage } from '../types';\n\n@Component({\n selector: 'ngx-beacon-notify',\n templateUrl: './container.component.html',\n styleUrls: ['./container.component.css']\n})\nexport class BeaconNotifyContainerComponent implements AfterViewInit {\n @ViewChild('beaconContainer', { static: false }) set content(content: ElementRef) {\n content && this.resolveBeaconContainer(content)\n }\n beaconLibrary!: Array<IBeaconConfig>\n\n constructor(private beaconService: BeaconNotifyService){\n this.beaconLibrary = this.beaconService.beaconLibrary\n }\n\n ngOnInit(): void {\n // Listen for delete event\n this.beaconService.beaconEventTaskMaster.subscribe((message: IBeaconEventMessage) => {\n if (message.delete)\n this.beaconLibrary = this.beaconService.beaconLibrary = this.beaconService.beaconLibrary.filter(x => x.bid != message.id)\n })\n }\n\n ngAfterViewInit(): void {}\n\n // Resolve beacon container\n resolveBeaconContainer(content: ElementRef): void {\n this.beaconService.setBeaconContainer(content)\n\n // Resolve position\n const position = this.beaconService.getBeaconGlobalPositionConfig\n // Resolve ltr\n if (position?.leftRight) {\n if(position?.leftRight == 'left') {\n content.nativeElement.style.left = 0\n content.nativeElement.style.right = 'auto'\n } else if (position?.leftRight == 'center') {\n content.nativeElement.style.left = 0\n content.nativeElement.style.right = 0\n content.nativeElement.style.margin = 'auto'\n } else {\n content.nativeElement.style.left = 'auto'\n content.nativeElement.style.right = 0\n }\n }\n // Resolve ttb\n if (position?.topBottom) {\n if(position?.topBottom == 'top') {\n content.nativeElement.style.top = 0\n content.nativeElement.style.bottom = 'auto'\n } else {\n content.nativeElement.style.top = 'auto'\n content.nativeElement.style.bottom = 0\n }\n }\n }\n\n // Track-by function\n trackBy(idx: number, item: { bid: string }): string {\n return item.bid;\n }\n}\n","<div id=\"app-beacon-notify-container\" #beaconContainer>\n\t<app-beacon *ngFor=\"let beacon of beaconLibrary; trackBy: trackBy\" [id]=\"'bcp_'+beacon.bid\" [beacon]=\"beacon\"></app-beacon>\n</div>","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BeaconNotifyContainerComponent } from './container/container.component';\r\nimport { BeaconNotifyComponent } from './beacon/beacon.component';\r\nimport { IBeaconGlobalConfig, BEACON_GLOBAL_CONFIG } from './types';\r\nimport { BeaconNotifyService } from './beacon-notify.service';\r\nimport { BeaconIconSuccessComponent } from './icons/beacon-icon-success/beacon-icon-success.component';\r\nimport { BeaconIconAlertComponent } from './icons/beacon-icon-alert/beacon-icon-alert.component';\r\nimport { BeaconIconErrorComponent } from './icons/beacon-icon-error/beacon-icon-error.component';\r\nimport { BeaconIconInfoComponent } from './icons/beacon-icon-info/beacon-icon-info.component';\r\nimport { BeaconIconWarningComponent } from './icons/beacon-icon-warning/beacon-icon-warning.component';\r\nimport { BeaconTypeResolvePipe } from './pipes/beacon-type-resolve.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n BeaconNotifyComponent,\r\n BeaconNotifyContainerComponent,\r\n BeaconIconAlertComponent,\r\n BeaconIconErrorComponent,\r\n BeaconIconInfoComponent,\r\n BeaconIconSuccessComponent,\r\n BeaconIconWarningComponent,\r\n BeaconTypeResolvePipe\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n BeaconNotifyComponent,\r\n BeaconNotifyContainerComponent\r\n ]\r\n})\r\nexport class BeaconNotifyModule {\r\n static forRoot(config?: IBeaconGlobalConfig): ModuleWithProviders<BeaconNotifyModule> {\r\n return {\r\n ngModule: BeaconNotifyModule,\r\n providers: [\r\n { provide: BEACON_GLOBAL_CONFIG, useValue: config },\r\n BeaconNotifyService\r\n ]\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.BeaconNotifyService","i2","i4.BeaconIconAlertComponent","i5.BeaconIconErrorComponent","i6.BeaconIconInfoComponent","i7.BeaconIconSuccessComponent","i8.BeaconIconWarningComponent","i9.BeaconTypeResolvePipe","i3.BeaconNotifyComponent"],"mappings":";;;;;;AAGO,MAAM,oBAAoB,GAAG,IAAI,cAAc,CAAsB,qBAAqB,CAAC,CAAA;AAE3F,MAAM,oBAAoB,GAAG,WAAW,CAAA;AAExC,MAAM,iBAAiB,GAAG,+BAA+B,CAAA;AAEzD,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;;MCctD,mBAAmB,CAAA;AA2DV,IAAA,SAAA,CAAA;AACoB,IAAA,YAAA,CAAA;IA3DhC,qBAAqB,GAAG,gBAAgB,CAAA;AACxC,IAAA,eAAe,GAAiD;AACtE,QAAA,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AACzJ,QAAA,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AACzJ,QAAA,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;AAC5J,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;AACjK,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAClK,CAAA;AACO,IAAA,aAAa,GAA8B;AACjD,QAAA,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO;KAC9D,CAAA;AACO,IAAA,WAAW,CAAS;AACpB,IAAA,aAAa,CAAS;AACtB,IAAA,UAAU,CAAS;AACnB,IAAA,cAAc,CAAS;AACvB,IAAA,sBAAsB,CAAS;AAC/B,IAAA,kBAAkB,CAAO;AACzB,IAAA,YAAY,CAAgB;AAC5B,IAAA,WAAW,CAAO;AAClB,IAAA,iBAAiB,CAAO;AACxB,IAAA,uBAAuB,CAAO;AAC9B,IAAA,oBAAoB,CAAO;AAC3B,IAAA,WAAW,CAAO;AAClB,IAAA,gBAAgB,CAAO;AACvB,IAAA,qBAAqB,CAAS;AAC9B,IAAA,kBAAkB,CAAS;AAC3B,IAAA,gBAAgB,CAAS;AACzB,IAAA,sBAAsB,CAAS;AAC/B,IAAA,oBAAoB,CAAS;AAC7B,IAAA,mBAAmB,CAAO;AAC1B,IAAA,qBAAqB,CAAS;AAC9B,IAAA,oBAAoB,CAAS;AAC7B,IAAA,kBAAkB,CAAgB;AAClC,IAAA,iBAAiB,CAAO;AACxB,IAAA,uBAAuB,CAAO;AAC9B,IAAA,6BAA6B,CAAO;AACpC,IAAA,qBAAqB,CAAU;AAC/B,IAAA,yBAAyB,CAAO;AAChC,IAAA,2BAA2B,CAAS;AACpC,IAAA,uBAAuB,CAAwB;AAC/C,IAAA,6BAA6B,CAAS;AACtC,IAAA,2BAA2B,CAAS;AACpC,IAAA,0BAA0B,CAAS;AACnC,IAAA,eAAe,CAAa;IAC5B,+BAA+B,GAAW,gCAAgC,CAAA;AAC1E,IAAA,4BAA4B,CAAS;AACrC,IAAA,2BAA2B,CAAS;IACpC,aAAa,GAAsB,EAAE,CAAA;IACrC,uBAAuB,GAAkB,EAAE,CAAA;IAC3C,4BAA4B,GAA8E,EAAE,CAAA;AAC5G,IAAA,yBAAyB,GAAwB,IAAI,GAAG,CAAiB,EAAE,CAAC,CAAA;AAC5E,IAAA,4BAA4B,GAAsC,IAAI,YAAY,EAAuB,CAAA;AACzG,IAAA,wBAAwB,GAAsC,IAAI,YAAY,EAAuB,CAAA;AACrG,IAAA,qBAAqB,CAAc;AACpC,IAAA,qBAAqB,GAAqD,IAAI,YAAY,EAAuC,CAAA;IACjI,aAAa,GAAyB,EAAE,CAAA;IACxC,kBAAkB,GAAyB,EAAE,CAAA;IAEpD,WAAoB,CAAA,SAAuB,EACH,YAAkC,EAAA;QADtD,IAAS,CAAA,SAAA,GAAT,SAAS,CAAc;QACH,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAsB;QACxE,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;;QAEhE,IAAI,CAAC,mBAAmB,EAAE,CAAA;KAC3B;;AAGO,IAAA,mBAAmB,CAAC,YAAiC,EAAA;AAC3D,QAAA,IAAI,YAAY,CAAC,MAAM,EAAE;AACvB,YAAA,IAAI,OAAO,YAAY,CAAC,MAAM,IAAI,SAAS,EAAE;AAC3C,gBAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAA;AAClC,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAA;aAC/B;;AAAM,gBAAA,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAA;SACrD;AAED,QAAA,IAAI,YAAY,CAAC,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAA;AACnC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;SAC9B;AAED,QAAA,YAAY,CAAC,iBAAiB,KAAK,IAAI,CAAC,6BAA6B,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAA;AACvG,QAAA,YAAY,CAAC,WAAW,KAAK,IAAI,CAAC,uBAAuB,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;AACrF,QAAA,YAAY,CAAC,YAAY,KAAK,IAAI,CAAC,6BAA6B,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;AAC7F,QAAA,YAAY,CAAC,SAAS,KAAK,IAAI,CAAC,qBAAqB,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;QAC/E,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;AACpE,QAAA,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;AAC7F,QAAA,YAAY,CAAC,gBAAgB,IAAI,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;AACzG,QAAA,YAAY,CAAC,cAAc,IAAI,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;AACzG,QAAA,YAAY,CAAC,QAAQ,KAAK,IAAI,CAAC,uBAAuB,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;AAC/E,QAAA,YAAY,CAAC,aAAa,KAAK,IAAI,CAAC,yBAAyB,GAAG,YAAY,CAAC,aAAa,CAAC,CAAA;AAC3F,QAAA,YAAY,CAAC,UAAU,KAAK,IAAI,CAAC,2BAA2B,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;AACvF,QAAA,YAAY,CAAC,eAAe,KAAK,IAAI,CAAC,2BAA2B,GAAG,YAAY,CAAC,eAAe,CAAC,CAAA;AACjG,QAAA,YAAY,CAAC,cAAc,KAAK,IAAI,CAAC,0BAA0B,GAAG,YAAY,CAAC,cAAc,CAAC,CAAA;KAC/F;;IAGO,2BAA2B,CAAC,MAAmB,EAAE,QAAgB,EAAA;AACvE,QAAA,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACrE,QAAA,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACrE,QAAA,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;AAClE,QAAA,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AAC3E,QAAA,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;KAC5E;;AAGO,IAAA,uBAAuB,CAAC,MAAuB,EAAA;AACrD,QAAA,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAA;AAClK,QAAA,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAA;AAClK,QAAA,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAA;AAC3J,QAAA,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,GAAG,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAA;AAC1K,QAAA,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,GAAG,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAA;KAC3K;;IAGO,mBAAmB,GAAA;QACzB,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,OAA4B,KAAI;YACpE,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;AAC7B,YAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,gBAAA,IAAI,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAA;AACtC,gBAAA,IAAI,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAA;AACnC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;AACnD,gBAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAA;aAC7C;AAAM,iBAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACxB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;aACpD;AACH,SAAC,CAAC,CAAA;KACH;;IAGO,gBAAgB,CAAC,EAAU,EAAE,WAAyB,EAAA;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAA;AACnD,QAAA,MAAM,KAAK,GAA+B,KAAK,CAAC,KAAK,CAAA;AACrD,QAAA,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;AACrE,QAAA,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACvB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC,CAAA;;QAGtG,IAAI,QAAQ,IAAI,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC5D,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC,CAAA;;YAElG,IAAI,WAAW,CAAC,GAAG;AACjB,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;SAClD;KACF;;AAGO,IAAA,6BAA6B,CAAC,EAAU,EAAA;;AAE9C,QAAA,IAAI,EAAE,IAAI,IAAI,CAAC,4BAA4B,EAAE;AAC3C,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;AAClC,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAA;;AAElD,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;oBACpC,MAAM,UAAU,GAAkB,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAA;;AAGjE,oBAAA,IAAI,IAAI,CAAC,6BAA6B,EAAE,SAAS,IAAI,KAAK;AACxD,wBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;;AACnC,wBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;;AAGxC,oBAAA,IAAI,UAAU,CAAC,WAAW,EAAE;AAC1B,wBAAA,IAAI,CAAC,4BAA4B,GAAG,UAAU,CAAC,GAAG,CAAA;wBAClD,MAAK;qBACN;iBACF;;AAGD,gBAAA,IAAI,EAAE,IAAI,IAAI,CAAC,4BAA4B;AACzC,oBAAA,IAAI,CAAC,4BAA4B,GAAG,SAAS,CAAA;aAChD;;AACI,gBAAA,IAAI,CAAC,4BAA4B,GAAG,SAAS,CAAA;SACnD;KACF;;AAGO,IAAA,0BAA0B,CAAC,EAAU,EAAA;;AAE3C,QAAA,IAAI,EAAE,IAAI,IAAI,CAAC,2BAA2B,EAAE;AAC1C,YAAA,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE;;gBAEvC,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAA;gBACvE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC,CAAA;aACrE;iBACI;AACH,gBAAA,IAAI,CAAC,2BAA2B,GAAG,SAAS,CAAA;gBAC5C,IAAI,CAAC,yBAAyB,EAAE,CAAA;aACjC;SACF;KACF;;AAGD,IAAA,IAAY,KAAK,GAAA;QACf,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;KACjF;;AAGM,IAAA,kBAAkB,CAAC,SAAqB,EAAA;AAC7C,QAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;KACjC;;AAGD,IAAA,IAAW,kBAAkB,GAAA;QAC3B,OAAO,IAAI,CAAC,eAAe,CAAA;KAC5B;;AAGD,IAAA,IAAW,6BAA6B,GAAA;QACtC,OAAO,IAAI,CAAC,uBAAuB,CAAA;KACpC;;AAGD,IAAA,IAAW,wBAAwB,GAAA;QACjC,OAAO,IAAI,CAAC,qBAAqB,CAAA;KAClC;;AAGD,IAAA,IAAW,sBAAsB,GAAA;QAC/B,OAAO,IAAI,CAAC,2BAA2B,CAAA;KACxC;;AAGM,IAAA,wBAAwB,CAAC,YAAqB,EAAA;QACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;AAC7C,QAAA,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;AAC7C,QAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAA;AAChC,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;AACvB,QAAA,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAA;AAC1B,QAAA,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAA;AACzB,QAAA,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAA;AACxB,QAAA,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;AAC7B,QAAA,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,IAAI,IAAI,CAAC,6BAA6B,IAAI,oBAAoB,CAAA;QACrG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;;AAGvC,QAAA,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAA;QAEpC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;KACxD;;AAGM,IAAA,yBAAyB,CAAC,YAAqB,EAAA;QACpD,IAAI,IAAI,CAAC,qBAAqB;AAC5B,YAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,IAAI,IAAI,CAAC,6BAA6B,IAAI,oBAAoB,CAAA;KAC3H;;IAGM,yBAAyB,GAAA;QAC9B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAA;AACrC,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAA;AACrF,QAAA,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAA;KACvC;;AAGM,IAAA,EAAE,CAAC,EAAU,EAAA;QAClB,EAAE,KAAK,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,CAAA;AAChC,QAAA,OAAO,IAAI,CAAA;KACZ;;AAGM,IAAA,KAAK,CAAC,KAAa,EAAA;QACxB,KAAK,KAAK,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAA;AACnC,QAAA,OAAO,IAAI,CAAA;KACZ;;AAGM,IAAA,OAAO,CAAC,OAAe,EAAA;QAC5B,OAAO,KAAK,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,CAAA;AACzC,QAAA,OAAO,IAAI,CAAA;KACZ;;AAGM,IAAA,MAAM,CAAC,EAAU,EAAA;QACtB,EAAE,KAAK,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,CAAA;AACxC,QAAA,OAAO,IAAI,CAAA;KACZ;;AAGM,IAAA,QAAQ,CAAC,KAAa,EAAA;;AAE3B,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAA;YAC3F,IAAI,WAAW,IAAI,CAAC;gBAClB,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,KAAK,GAAG,KAAK,CAAA;SAChD;KACF;;AAGM,IAAA,UAAU,CAAC,OAAe,EAAA;;AAE/B,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAA;YAC3F,IAAI,WAAW,IAAI,CAAC;gBAClB,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,OAAO,CAAA;SACjD;KACF;;IAGM,UAAU,CAAC,KAAa,EAAE,OAAe,EAAA;;AAE9C,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAA;YAC3F,IAAI,WAAW,IAAI,CAAC;gBAClB,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,KAAK,GAAG,KAAK,CAAA;YAC7C,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,OAAO,CAAA;SACjD;KACF;;IAGM,YAAY,CAAC,IAAY,EAAE,UAA2B,EAAE,QAAc,EAAE,YAA2B,EAAE,QAAsC,EAAA;;AAEhJ,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAA;AAC3F,YAAA,IAAI,WAAW,IAAI,CAAC,EAAE;gBACA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,OAAQ,CAAC,GAAG,GAAG;oBACjE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC3B,UAAU;oBACV,QAAQ;oBACR,YAAY;oBACZ,QAAQ;iBACT,CAAA;aACF;SACF;KACF;;IAGM,YAAY,CAAC,IAAY,EAAE,UAA2B,EAAE,QAAc,EAAE,YAA2B,EAAE,QAAsC,EAAA;;AAEhJ,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAA;AAC3F,YAAA,IAAI,WAAW,IAAI,CAAC,EAAE;gBACpB,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE;oBAC5B,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,OAAQ,CAAC,GAAG,GAAG;wBACjE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;wBAC3B,UAAU;wBACV,QAAQ;wBACR,YAAY;wBACZ,QAAQ;qBACT,CAAA;iBACF;;AAAM,oBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;aAC7E;SACF;KACF;;IAGM,eAAe,GAAA;;AAEpB,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAA;AAC3F,YAAA,IAAI,WAAW,IAAI,CAAC,EAAE;gBACA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,OAAQ,CAAC,GAAG,GAAG,SAAS,CAAA;aAC7E;SACF;KACF;;IAGM,eAAe,GAAA;;AAEpB,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAA;AAC3F,YAAA,IAAI,WAAW,IAAI,CAAC,EAAE;gBACA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,OAAQ,CAAC,GAAG,GAAG,SAAS,CAAA;aAC7E;SACF;KACF;;IAGM,aAAa,GAAA;;AAElB,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAA;AAC3F,YAAA,IAAI,WAAW,IAAI,CAAC,EAAE;gBACA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,OAAQ,CAAC,GAAG,GAAG,SAAS,CAAC;gBACzD,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,OAAQ,CAAC,GAAG,GAAG,SAAS,CAAA;aAC7E;SACF;KACF;;AAGM,IAAA,MAAM,CAAC,KAAc,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,IAAI,IAAI,CAAA;AACjC,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;AAC5B,QAAA,OAAO,IAAI,CAAA;KACZ;;IAGM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;AACvB,QAAA,OAAO,IAAI,CAAA;KACZ;;IAGM,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;AAC7B,QAAA,OAAO,IAAI,CAAA;KACZ;;AAGM,IAAA,KAAK,CAAC,YAAqB,EAAA;QAChC,YAAY,KAAK,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,CAAA;AACxD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;AACvB,QAAA,OAAO,IAAI,CAAA;KACZ;;IAGM,KAAK,CAAC,KAAc,EAAE,YAAqB,EAAA;QAChD,YAAY,KAAK,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,CAAA;QACxD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QAC/C,KAAK,KAAK,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,CAAA;AAC7C,QAAA,OAAO,IAAI,CAAA;KACZ;;IAGM,MAAM,CAAC,IAAY,EAAE,UAA2B,EAAE,QAAc,EAAE,YAA2B,EAAE,QAAsC,EAAA;AAC1I,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE;AAC5B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG;gBACvB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC3B,UAAU;gBACV,QAAQ;gBACR,YAAY;gBACZ,QAAQ;aACT,CAAA;SACF;AAAM,aAAA,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;AAC5D,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG;gBACvB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC3B,UAAU;gBACV,QAAQ;gBACR,YAAY;gBACZ,QAAQ;aACT,CAAA;SACF;AAED,QAAA,OAAO,IAAI,CAAA;KACZ;;IAGM,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAA;AAChC,QAAA,OAAO,IAAI,CAAA;KACZ;;AAGM,IAAA,KAAK,CAAC,MAA2B,EAAA;AACtC,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACjB,YAAA,IAAI,OAAO,MAAM,CAAC,MAAM,IAAI,SAAS;gBACnC,IAAI,CAAC,MAAM,EAAE,CAAA;;gBACV,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;SACxC;AAED,QAAA,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAA;AAC5B,QAAA,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAA;AACpC,QAAA,MAAM,CAAC,iBAAiB,KAAK,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;AACrF,QAAA,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;AACnE,QAAA,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACjD,QAAA,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AACzE,QAAA,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;AAC9C,QAAA,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;AAC9D,QAAA,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;AAChE,QAAA,MAAM,CAAC,gBAAgB,KAAK,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;AAClF,QAAA,MAAM,CAAC,cAAc,KAAK,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;AAC5E,QAAA,MAAM,CAAC,cAAc,KAAK,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;AAC5E,QAAA,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;AACtE,QAAA,MAAM,CAAC,aAAa,KAAK,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;AACzE,QAAA,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;AACrE,QAAA,MAAM,CAAC,eAAe,KAAK,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;AAC/E,QAAA,MAAM,CAAC,cAAc,KAAK,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAA;AAC5E,QAAA,OAAO,IAAI,CAAA;KACZ;;IAGO,MAAM,CAAC,OAAe,EAAE,IAAY,EAAA;;QAE1C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,GAAG,OAAO,CAAC,CAAA;;AAErG,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAA;;AAE3B,QAAA,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;;AAE/D,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,qBAAqB,CAAC,EAAE;AACzK,YAAA,MAAM,YAAY,GAAkB;AAClC,gBAAA,GAAG,EAAE,QAAQ;gBACb,GAAG,EAAE,IAAI,CAAC,cAAc;gBACxB,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK;AACtC,gBAAA,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI;gBACxD,QAAQ,EAAE,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AACvG,gBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK;AAC3D,gBAAA,MAAM,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,kBAAkB;AACpD,gBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB;AACjD,gBAAA,iBAAiB,EAAE,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,6BAA6B;AACrF,gBAAA,UAAU,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK;gBACrE,gBAAgB,EAAE,IAAI,CAAC,sBAAsB;AAC7C,gBAAA,cAAc,EAAE,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,+BAA+B;AACzH,gBAAA,WAAW,EAAE,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,uBAAuB;gBACnE,OAAO,EAAE,IAAI,CAAC,aAAa;gBAC3B,YAAY,EAAE,IAAI,CAAC,kBAAkB;gBACrC,QAAQ,EAAY,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,OAAO,CAAC;AACnE,gBAAA,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,IAAI,CAAC,WAAW;gBACvB,KAAK,EAAE,IAAI,CAAC,gBAAgB;AAC5B,gBAAA,aAAa,EAAE,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,yBAAyB;AACzE,gBAAA,UAAU,EAAE,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,2BAA2B;AAC1E,gBAAA,eAAe,EAAE,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,2BAA2B;AAC/E,gBAAA,cAAc,EAAE,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,0BAA0B;gBAC5E,SAAS;aACV,CAAA;;YAGD,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;AAC1G,gBAAA,YAAY,CAAC,OAAO,GAAa,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;aAC3F;;AAGD,YAAA,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACrC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;aAC3C;iBAAM;;gBAEL,IAAI,YAAY,CAAC,WAAW;AAC1B,oBAAA,IAAI,CAAC,4BAA4B,GAAG,YAAY,CAAC,GAAG,CAAA;;AAGtD,gBAAA,IAAI,IAAI,CAAC,6BAA6B,EAAE,SAAS,IAAI,KAAK;AACxD,oBAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;;AACrC,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;aAC3C;;AAGD,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IAAI,IAAI,CAAC,2BAA2B;oBAClC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;;AAEnD,oBAAA,IAAI,CAAC,2BAA2B,GAAG,YAAY,CAAC,GAAG,CAAA;aACtD;;AAGD,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAA;;gBAE1E,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;aAClE;;AAGD,YAAA,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAA;SACnF;;QAGD,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,IAAI,YAAY,EAAgB,CAAA;;AAGpF,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;AAC5B,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAA;AAClC,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;AAC5B,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAA;AACjC,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAA;AACnC,QAAA,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAA;AACrC,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAA;AACpC,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;AAC3B,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAA;AACnC,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAA;AACjC,QAAA,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAA;AACvC,QAAA,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAA;AACrC,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;QAEvB,OAAmC,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAA;KACrF;;IAGM,OAAO,CAAC,GAAG,OAAiB,EAAA;;QAEjC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;;AAE5D,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;KAC/H;;IAGM,KAAK,CAAC,GAAG,OAAiB,EAAA;;QAE/B,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;;AAE5D,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;KAC7H;;IAGM,OAAO,CAAC,GAAG,OAAiB,EAAA;;QAEjC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;;AAE5D,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;KAC/H;;IAGM,IAAI,CAAC,GAAG,OAAiB,EAAA;;QAE9B,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;;AAE5D,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;KAC5H;;IAGM,KAAK,CAAC,GAAG,OAAiB,EAAA;;QAE/B,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;;AAE5D,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;KAC7H;;AAGM,IAAA,KAAK,CAAC,EAAqB,EAAA;;AAEhC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;AACnB,YAAA,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;;YAC7D,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QAErD,OAAO,IAAI,CAAC,4BAA4B,CAAA;KACzC;;IAGM,MAAM,GAAA;QACX,OAAO,IAAI,CAAC,wBAAwB,CAAA;KACrC;;AAGM,IAAA,QAAQ,CAAC,EAAU,EAAA;QACxB,IAAI,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAC1C,MAAM,MAAM,GAAW,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;;YAG7D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAG;AACjD,gBAAA,QAAQ,CAAC,CAAC,GAAG,IAAI,MAAM,EAAC;AAC1B,aAAC,CAAC,CAAA;AAEF,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC9B,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,EAAE,EAAE,MAAM;AACX,aAAA,CAAC,CAAA;SACH;KACF;;IAGM,QAAQ,GAAA;QACb,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAG;AACjD,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC9B,gBAAA,MAAM,EAAE,IAAI;gBACZ,EAAE,EAAE,CAAC,CAAC,GAAG;AACV,aAAA,CAAC,CAAA;AAEF,YAAA,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;AACjB,SAAC,CAAC,CAAA;KACH;;AAGO,IAAA,qBAAqB,CAAC,SAAiB,EAAA;AAC7C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,CAAA;AACxE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,SAAS,EAAE,GAAG,CAAA,CAAE,CAAC,CAAA;AAC3F,QAAA,OAAO,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,CAAA;KACzE;AAnpBU,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,8CA4DpB,oBAAoB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AA5DnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BA6DI,MAAM;2BAAC,oBAAoB,CAAA;;;MC5EnB,wBAAwB,CAAA;uGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,6DCPrC,sxBAUA,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA,CAAA,CAAA;;2FDHa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;+BACE,uBAAuB,EAAA,QAAA,EAAA,sxBAAA,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA,CAAA;;;MEItB,wBAAwB,CAAA;uGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,6DCPrC,wlCAaA,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA,CAAA,CAAA;;2FDNa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBALpC,SAAS;+BACE,uBAAuB,EAAA,QAAA,EAAA,wlCAAA,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA,CAAA;;;MEItB,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,4DCPpC,8yBAcA,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA,CAAA,CAAA;;2FDPa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,8yBAAA,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA,CAAA;;;MEIrB,0BAA0B,CAAA;uGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,+DCPvC,w4EAYM,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA,CAAA,CAAA;;2FDLO,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;+BACE,yBAAyB,EAAA,QAAA,EAAA,w4EAAA,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA,CAAA;;;MEIxB,0BAA0B,CAAA;uGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,+DCPvC,igCAeA,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA,CAAA,CAAA;;2FDRa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;+BACE,yBAAyB,EAAA,QAAA,EAAA,igCAAA,EAAA,MAAA,EAAA,CAAA,8FAAA,CAAA,EAAA,CAAA;;;MEGxB,qBAAqB,CAAA;AACxB,IAAA,cAAc,CAAgB;AACtC,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAA;KACvC;AAED,IAAA,SAAS,CAAC,KAAa,EAAE,GAAG,IAAc,EAAA;QACxC,IAAI,MAAM,GAAY,KAAK,CAAA;AAC3B,QAAA,QAAQ,IAAI,CAAC,CAAC,CAAC;AACb,YAAA,KAAK,OAAO;gBACV,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;gBACxC,MAAK;AACP,YAAA,KAAK,OAAO;gBACV,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;gBACxC,MAAK;AACP,YAAA,KAAK,MAAM;gBACT,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;gBACxC,MAAK;AACP,YAAA,KAAK,SAAS;gBACZ,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;gBACxC,MAAK;AACP,YAAA,KAAK,SAAS;gBACZ,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;gBACxC,MAAK;SACR;AAED,QAAA,OAAO,MAAM,CAAA;KACd;uGA3BU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;qGAArB,qBAAqB,EAAA,IAAA,EAAA,mBAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,mBAAmB;AAC1B,iBAAA,CAAA;;;MCKY,qBAAqB,CAAA;AAKZ,IAAA,aAAA,CAAA;AACV,IAAA,SAAA,CAAA;AALD,IAAA,MAAM,CAAgB;AACvB,IAAA,SAAS,CAAc;AACxB,IAAA,qBAAqB,CAAW;IAEvC,WAAoB,CAAA,aAAkC,EAC5C,SAAuB,EAAA;QADb,IAAa,CAAA,aAAA,GAAb,aAAa,CAAqB;QAC5C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAc;QAC/B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAA;KACzE;IAED,QAAQ,GAAA;;AAEN,QAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC5C,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;AACpB,SAAA,CAAC,CAAA;KACH;IAED,eAAe,GAAA;;QAEb,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA,IAAA,EAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAE,CAAA,CAAC,CAAA;;AAE3H,QAAA,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAA;;AAE3C,QAAA,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAA;QAC1C,UAAU,CAAC,MAAK;;AAEd,YAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;;YAExC,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;;AAG9C,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;gBACvB,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,qCAAqC,CAAC,CAAA;AACjF,gBAAA,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAA;AAClC,gBAAA,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;AACnC,gBAAA,aAAa,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAA;AACvC,gBAAA,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAA;aACvC;SACF,EAAE,CAAC,CAAC,CAAA;;QAGL,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,OAA4B,KAAI;;YAElF,IAAI,OAAO,CAAC,yBAAyB;gBACnC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;AAC7D,SAAC,CAAC,CAAA;KACH;;IAGD,iBAAiB,CAAC,CAAQ,EAAE,EAAU,EAAA;QACpC,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,QAAQ,EAAE;AACR,YAAA,KAAK,CAAC;;gBAEJ,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ;oBACrC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,CAAA;;gBAGzF,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU;oBACvC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;gBAC/C,MAAK;AACP,YAAA,KAAK,CAAC;;gBAEJ,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ;oBACrC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,CAAA;;gBAGzF,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU;oBACvC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;gBAC/C,MAAK;SACR;KACF;;IAGD,oBAAoB,CAAC,MAAe,EAAE,UAAyB,EAAA;AAC7D,QAAA,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACR,YAAA,MAAM,EAAE,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AACvE,YAAA,MAAM,EAAE,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAC7E,YAAA,MAAM,EAAE,gBAAgB,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAC1E,SAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;KACvB;;IAGD,SAAS,CAAC,MAAe,EAAE,OAAoB,EAAA;QAC7C,MAAM;AACJ,eAAG,OAAO,CAAC,YAAY,CAAC,oBAAoB,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC;AACrG,cAAE,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAA;KACjE;;IAGD,qBAAqB,CAAC,MAAmB,EAAE,MAAgB,EAAA;;AAEzD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,QAAQ,EAAE;AAC/D,YAAA,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;SACnE;aAAM;YACL,IAAI,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI;AAC5C,gBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAA;SAC3D;KACF;;AAGD,IAAA,8BAA8B,CAAC,MAAmB,EAAA;QAChD,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE;YACtC,MAAM,KAAK,GAAgB,MAAM,CAAC,aAAa,CAAC,2BAA2B,CAAC,CAAA;AAC5E,YAAA,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;SAChE;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE;YACrC,MAAM,IAAI,GAAgB,MAAM,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAA;AACzE,YAAA,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;SAC7D;KACF;;AAGD,IAAA,6BAA6B,CAAC,MAAmB,EAAE,aAAA,GAAyB,IAAI,EAAA;AAC9E,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAA;QACrE,IAAI,mBAAmB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;AAC1C,YAAA,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;;AAG5B,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACrB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAA;AAC7H,gBAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAA;AAC/B,gBAAA,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAA;AACxB,gBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAA;AACvB,gBAAA,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAA;AAC3B,gBAAA,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;gBAC5B,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,GAAG,CAAA;aAChD;;AAGD,YAAA,IAAI,aAAa;gBACf,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;;gBAClE,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;SAC5E;KACF;;IAGD,WAAW,CAAC,aAAkB,EAAE,UAAyB,EAAA;AACvD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC5C,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,EAAE,EAAE,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACxD,aAAA,CAAC,CAAA;SACH;KACF;uGAlJU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,gFCVlC,k+FA6CM,EAAA,MAAA,EAAA,CAAA,0rGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDnCO,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,YAAY,EAAA,QAAA,EAAA,k+FAAA,EAAA,MAAA,EAAA,CAAA,0rGAAA,CAAA,EAAA,CAAA;gHAKb,MAAM,EAAA,CAAA;sBAAd,KAAK;;;MEFK,8BAA8B,CAAA;AAMrB,IAAA,aAAA,CAAA;IALpB,IAAqD,OAAO,CAAC,OAAmB,EAAA;AAC9E,QAAA,OAAO,IAAI,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAA;KAChD;AACD,IAAA,aAAa,CAAuB;AAEpC,IAAA,WAAA,CAAoB,aAAkC,EAAA;QAAlC,IAAa,CAAA,aAAA,GAAb,aAAa,CAAqB;QACpD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAA;KACtD;IAED,QAAQ,GAAA;;QAEN,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,OAA4B,KAAI;YAClF,IAAI,OAAO,CAAC,MAAM;AAChB,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC,CAAA;AAC7H,SAAC,CAAC,CAAA;KACH;AAED,IAAA,eAAe,MAAW;;AAG1B,IAAA,sBAAsB,CAAC,OAAmB,EAAA;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;;AAG9C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAA;;AAEjE,QAAA,IAAI,QAAQ,EAAE,SAAS,EAAE;AACvB,YAAA,IAAG,QAAQ,EAAE,SAAS,IAAI,MAAM,EAAE;gBAChC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;gBACpC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAA;aAC3C;AAAM,iBAAA,IAAI,QAAQ,EAAE,SAAS,IAAI,QAAQ,EAAE;gBAC1C,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;gBACpC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAA;gBACrC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;aAC5C;iBAAM;gBACL,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAA;gBACzC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAA;aACtC;SACF;;AAED,QAAA,IAAI,QAAQ,EAAE,SAAS,EAAE;AACvB,YAAA,IAAG,QAAQ,EAAE,SAAS,IAAI,KAAK,EAAE;gBAC/B,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAA;gBACnC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;aAC5C;iBAAM;gBACL,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAA;gBACxC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;aACvC;SACF;KACF;;IAGD,OAAO,CAAC,GAAW,EAAE,IAAqB,EAAA;QACxC,OAAO,IAAI,CAAC,GAAG,CAAC;KACjB;uGAvDU,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAP,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,qKCT3C,wMAEM,EAAA,MAAA,EAAA,CAAA,oHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,qBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDOO,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAL1C,SAAS;+BACE,mBAAmB,EAAA,QAAA,EAAA,wMAAA,EAAA,MAAA,EAAA,CAAA,oHAAA,CAAA,EAAA,CAAA;qFAKwB,OAAO,EAAA,CAAA;sBAA3D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;;;MEsBpC,kBAAkB,CAAA;IAC7B,OAAO,OAAO,CAAC,MAA4B,EAAA;QACzC,OAAO;AACL,YAAA,QAAQ,EAAE,kBAAkB;AAC5B,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,EAAE;gBACnD,mBAAmB;AACpB,aAAA;SACF,CAAA;KACF;uGATU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,iBAjB3B,qBAAqB;YACrB,8BAA8B;YAC9B,wBAAwB;YACxB,wBAAwB;YACxB,uBAAuB;YACvB,0BAA0B;YAC1B,0BAA0B;YAC1B,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAGrB,YAAY,CAAA,EAAA,OAAA,EAAA,CAGZ,qBAAqB;YACrB,8BAA8B,CAAA,EAAA,CAAA,CAAA;AAGrB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAP3B,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAOH,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAnB9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,qBAAqB;wBACrB,8BAA8B;wBAC9B,wBAAwB;wBACxB,wBAAwB;wBACxB,uBAAuB;wBACvB,0BAA0B;wBAC1B,0BAA0B;wBAC1B,qBAAqB;AACtB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;AACb,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,qBAAqB;wBACrB,8BAA8B;AAC/B,qBAAA;AACF,iBAAA,CAAA;;;AC/BD;;AAEG;;;;"}
|
|
@@ -15,6 +15,7 @@ export declare class BeaconNotifyComponent {
|
|
|
15
15
|
setListenerForBeacon(beacon: Element, beaconData: IBeaconConfig): void;
|
|
16
16
|
autoClose(status: boolean, control: HTMLElement): void;
|
|
17
17
|
resolveDelayForBeacon(beacon: HTMLElement, onLoad?: boolean): void;
|
|
18
|
+
resolveFontWeightForComponents(beacon: HTMLElement): void;
|
|
18
19
|
resolvePossibleFocusForBeacon(beacon: HTMLElement, createOverlay?: boolean): void;
|
|
19
20
|
closeBeacon(beaconControl: any, beaconData: IBeaconConfig): void;
|
|
20
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<BeaconNotifyComponent, never>;
|
|
@@ -27,6 +27,8 @@ export declare class BeaconNotifyService {
|
|
|
27
27
|
private beaconReplacementClass?;
|
|
28
28
|
private beaconAnimationClass?;
|
|
29
29
|
private beaconNoHoverEffect?;
|
|
30
|
+
private beaconFontWeightTitle?;
|
|
31
|
+
private beaconFontWeightBody?;
|
|
30
32
|
private beaconGlobalStatic?;
|
|
31
33
|
private beaconGlobalFixed?;
|
|
32
34
|
private beaconGlobalBlockOthers?;
|
|
@@ -36,6 +38,8 @@ export declare class BeaconNotifyService {
|
|
|
36
38
|
private beaconGlobalFocusShineScale?;
|
|
37
39
|
private beaconGlobalPositioning?;
|
|
38
40
|
private beaconGlobalFocusOverlayColor?;
|
|
41
|
+
private beaconGlobalFontWeightTitle?;
|
|
42
|
+
private beaconGlobalFontWeightBody?;
|
|
39
43
|
private beaconContainer;
|
|
40
44
|
private beaconDefaultAnimationClassName;
|
|
41
45
|
private beaconSuccessorBlockerAutoId?;
|
|
@@ -45,6 +45,8 @@ export interface IBeaconConfig {
|
|
|
45
45
|
overlayColor?: string;
|
|
46
46
|
noHoverEffect?: true;
|
|
47
47
|
shineScale?: number;
|
|
48
|
+
fontWeightTitle?: string;
|
|
49
|
+
fontWeightBody?: string;
|
|
48
50
|
}
|
|
49
51
|
export interface IBeaconInlineConfig {
|
|
50
52
|
static?: true | number;
|
|
@@ -62,6 +64,8 @@ export interface IBeaconInlineConfig {
|
|
|
62
64
|
overlayColor?: string;
|
|
63
65
|
noHoverEffect?: true;
|
|
64
66
|
shineScale?: number;
|
|
67
|
+
fontWeightTitle?: string;
|
|
68
|
+
fontWeightBody?: string;
|
|
65
69
|
}
|
|
66
70
|
export interface IBeaconGlobalConfig {
|
|
67
71
|
static?: true | number;
|
|
@@ -77,6 +81,8 @@ export interface IBeaconGlobalConfig {
|
|
|
77
81
|
position?: IBeaconPositionConfig;
|
|
78
82
|
noHoverEffect?: true;
|
|
79
83
|
shineScale?: number;
|
|
84
|
+
fontWeightTitle?: string;
|
|
85
|
+
fontWeightBody?: string;
|
|
80
86
|
}
|
|
81
87
|
export interface IBeaconEvent {
|
|
82
88
|
on: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ngx-beacon-notify",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.7",
|
|
4
4
|
"description": "A versatile and beautifully designed toast/alert plugin for Angular, offering flexible functionalities for powerful and seamless notifications.",
|
|
5
5
|
"main": "bundles/ngx-beacon-notify.umd.js",
|
|
6
6
|
"module": "fesm2022/ngx-beacon-notify.mjs",
|