@wizishop/wizi-block 15.0.13-beta → 15.0.15-beta

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.
@@ -1,11 +1,10 @@
1
- import { EventEmitter, Injectable } from '@angular/core';
1
+ import { Injectable } from '@angular/core';
2
2
  import { Subject } from 'rxjs';
3
3
  import { moveItemInArray } from '@angular/cdk/drag-drop';
4
4
  import { v4 as uuidV4 } from 'uuid';
5
5
  import * as i0 from "@angular/core";
6
6
  export class ContentService {
7
7
  constructor() {
8
- this.duplicateContent = new EventEmitter();
9
8
  this._contents = [];
10
9
  this.contentsSource = new Subject();
11
10
  this.contentsDone = this.contentsSource.asObservable();
@@ -57,7 +56,6 @@ export class ContentService {
57
56
  let toCopy = this.deepCopy(this._contents[keyToCopy].block);
58
57
  toCopy.uuid = uuidV4();
59
58
  this._contents.splice(keyToCopy + 1, 0, toCopy);
60
- this.duplicateContent.emit(toCopy);
61
59
  }
62
60
  this.contentsSource.next();
63
61
  }
@@ -112,13 +110,10 @@ export class ContentService {
112
110
  }
113
111
  throw new Error('Unable to copy obj! Its type not supported.');
114
112
  }
115
- getDuplicateContentEmitter() {
116
- return this.duplicateContent;
117
- }
118
113
  }
119
114
  ContentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: ContentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
120
115
  ContentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: ContentService });
121
116
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: ContentService, decorators: [{
122
117
  type: Injectable
123
118
  }] });
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2l6aS1ibG9jay9zcmMvbGliL3NlcnZpY2VzL3V0aWxzL2NvbnRlbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd6RCxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFHcEMsTUFBTSxPQUFPLGNBQWM7SUFEM0I7UUFHSSxxQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVqRCxjQUFTLEdBQXVDLEVBQUUsQ0FBQztRQUVuRCxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFckMsaUJBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0tBMEk3RDtJQXhJRyxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLEtBQXlDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBRXZCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLO1FBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEtBQUs7UUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FB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QUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxHQUFHLFlBQVksTUFBTSxFQUFFO1lBQ3ZCLElBQUksR0FBRyxFQUFFLENBQUM7WUFDVixLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRTtnQkFDcEIsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDekM7YUFDSjtZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELDBCQUEwQjtRQUN0QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDOzsyR0FqSlEsY0FBYzsrR0FBZCxjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgRm9ybXNEdG8gfSBmcm9tICcuLi8uLi9kdG9zL2Zvcm1zL2Zvcm1zLmR0byc7XG5pbXBvcnQgeyBQYXJlbnRCbG9ja0R0byB9IGZyb20gJy4uLy4uL2R0b3MvYmxvY2tzL3BhcmVudC1ibG9jay5kdG8nO1xuaW1wb3J0IHsgdjQgYXMgdXVpZFY0IH0gZnJvbSAndXVpZCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250ZW50U2VydmljZSB7XG5cbiAgICBkdXBsaWNhdGVDb250ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHByaXZhdGUgX2NvbnRlbnRzOiAoRm9ybXNEdG88UGFyZW50QmxvY2tEdG8+IHwgYW55KVtdID0gW107XG5cbiAgICBwcml2YXRlIGNvbnRlbnRzU291cmNlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHByaXZhdGUgY29udGVudHNEb25lID0gdGhpcy5jb250ZW50c1NvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICAgIGdldCBjb250ZW50cygpOiAoRm9ybXNEdG88UGFyZW50QmxvY2tEdG8+IHwgYW55KVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRzO1xuICAgIH1cblxuICAgIHNldCBjb250ZW50cyh2YWx1ZTogKEZvcm1zRHRvPFBhcmVudEJsb2NrRHRvPiB8IGFueSlbXSkge1xuICAgICAgICB0aGlzLl9jb250ZW50cyA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuY29udGVudHNTb3VyY2UubmV4dCgpO1xuICAgIH1cblxuICAgIHNldENvbnRlbnRzKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2NvbnRlbnRzLnB1c2godmFsdWUpO1xuXG4gICAgICAgIHRoaXMuY29udGVudHNTb3VyY2UubmV4dCgpO1xuICAgIH1cblxuICAgIHNldENvbnRlbnRzV2l0aEluZGV4KGluZGV4LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLl9jb250ZW50cy5zcGxpY2UoaW5kZXgsIDAsIHZhbHVlKTtcblxuICAgICAgICB0aGlzLmNvbnRlbnRzU291cmNlLm5leHQoKTtcbiAgICB9XG5cbiAgICByZW9yZGVyQ29udGVudHMocHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4KSB7XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLl9jb250ZW50cywgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4KTtcblxuICAgICAgICB0aGlzLmNvbnRlbnRzU291cmNlLm5leHQoKTtcbiAgICB9XG5cbiAgICBnZXRDb250ZW50QnlVVUlEKHV1aWQpIHtcbiAgICAgICAgbGV0IGNvbnRlbnQgPSBudWxsO1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9jb250ZW50cykubWFwKGsgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnRzW2tdLmJsb2NrPy51dWlkID09PSB1dWlkKSB7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IHRoaXMuX2NvbnRlbnRzW2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG5cbiAgICB1cGRhdGVCeVVVSUQodXVpZCwgbmV3Q29udGVudCkge1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9jb250ZW50cykubWFwKGsgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnRzW2tdLmJsb2NrPy51dWlkID09PSB1dWlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudHNba10gPSBuZXdDb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvbnRlbnRzU291cmNlLm5leHQoKTtcbiAgICB9XG5cbiAgICBkdXBsaWNhdGVDb250ZW50QnlVVUlEKHV1aWQpIHtcbiAgICAgICAgbGV0IGtleVRvQ29weSA9IG51bGw7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuX2NvbnRlbnRzKS5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb250ZW50c1tpbmRleF0uYmxvY2s/LnV1aWQgPT09IHV1aWQpIHtcbiAgICAgICAgICAgICAgICBrZXlUb0NvcHkgPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGtleVRvQ29weSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IHRvQ29weSA9IHRoaXMuZGVlcENvcHkodGhpcy5fY29udGVudHNba2V5VG9Db3B5XS5ibG9jayk7XG4gICAgICAgICAgICB0b0NvcHkudXVpZCA9IHV1aWRWNCgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50cy5zcGxpY2Uoa2V5VG9Db3B5ICsgMSwgMCwgdG9Db3B5KTtcblxuICAgICAgICAgICAgdGhpcy5kdXBsaWNhdGVDb250ZW50LmVtaXQodG9Db3B5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRlbnRzU291cmNlLm5leHQoKTtcbiAgICB9XG5cbiAgICByZW1vdmVDb250ZW50QnlVVUlEKHV1aWQpIHtcbiAgICAgICAgY29uc3QgY29udGVudHMgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5fY29udGVudHMpLm1hcChrID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb250ZW50c1trXS5ibG9jaz8udXVpZCAhPT0gdXVpZCkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRzLnB1c2godGhpcy5fY29udGVudHNba10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jb250ZW50cyA9IGNvbnRlbnRzO1xuICAgICAgICB0aGlzLmNvbnRlbnRzU291cmNlLm5leHQoKTtcbiAgICB9XG5cbiAgICBkZWxldGVBbGwoKSB7XG4gICAgICAgIHRoaXMuX2NvbnRlbnRzID0gW107XG4gICAgfVxuXG4gICAgY29udGVudEV2ZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50c0RvbmU7XG4gICAgfVxuXG4gICAgZ2V0UGFyc2VkQ29udGVudCgpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IFtdO1xuXG4gICAgICAgIHRoaXMuY29udGVudHMuZm9yRWFjaChmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnRlbnQucHVzaChmb3JtLmJsb2NrKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG5cbiAgICBkZWVwQ29weShvYmopIHtcbiAgICAgICAgbGV0IGNvcHk7XG5cbiAgICAgICAgaWYgKG51bGwgPT0gb2JqIHx8ICdvYmplY3QnICE9PSB0eXBlb2Ygb2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIGNvcHkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgY29weS5zZXRUaW1lKG9iai5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIGNvcHkgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBvYmoubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb3B5W2ldID0gdGhpcy5kZWVwQ29weShvYmpbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBjb3B5ID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGF0dHIgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShhdHRyKSkge1xuICAgICAgICAgICAgICAgICAgICBjb3B5W2F0dHJdID0gdGhpcy5kZWVwQ29weShvYmpbYXR0cl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb3B5O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY29weSBvYmohIEl0cyB0eXBlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgZ2V0RHVwbGljYXRlQ29udGVudEVtaXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmR1cGxpY2F0ZUNvbnRlbnQ7XG4gICAgfVxufVxuIl19
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvd2l6aS1ibG9jay9zcmMvbGliL3NlcnZpY2VzL3V0aWxzL2NvbnRlbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3pELE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUdwQyxNQUFNLE9BQU8sY0FBYztJQUQzQjtRQUdZLGNBQVMsR0FBdUMsRUFBRSxDQUFDO1FBRW5ELG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVyQyxpQkFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7S0FvSTdEO0lBbElHLElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBeUM7UUFDbEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFFdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUs7UUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsS0FBSztRQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FB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QUcsRUFBRTtnQkFDcEIsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDekM7YUFDSjtZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDbkUsQ0FBQzs7MkdBeklRLGNBQWM7K0dBQWQsY0FBYzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBGb3Jtc0R0byB9IGZyb20gJy4uLy4uL2R0b3MvZm9ybXMvZm9ybXMuZHRvJztcbmltcG9ydCB7IFBhcmVudEJsb2NrRHRvIH0gZnJvbSAnLi4vLi4vZHRvcy9ibG9ja3MvcGFyZW50LWJsb2NrLmR0byc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkVjQgfSBmcm9tICd1dWlkJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbnRlbnRTZXJ2aWNlIHtcblxuICAgIHByaXZhdGUgX2NvbnRlbnRzOiAoRm9ybXNEdG88UGFyZW50QmxvY2tEdG8+IHwgYW55KVtdID0gW107XG5cbiAgICBwcml2YXRlIGNvbnRlbnRzU291cmNlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHByaXZhdGUgY29udGVudHNEb25lID0gdGhpcy5jb250ZW50c1NvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICAgIGdldCBjb250ZW50cygpOiAoRm9ybXNEdG88UGFyZW50QmxvY2tEdG8+IHwgYW55KVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRzO1xuICAgIH1cblxuICAgIHNldCBjb250ZW50cyh2YWx1ZTogKEZvcm1zRHRvPFBhcmVudEJsb2NrRHRvPiB8IGFueSlbXSkge1xuICAgICAgICB0aGlzLl9jb250ZW50cyA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuY29udGVudHNTb3VyY2UubmV4dCgpO1xuICAgIH1cblxuICAgIHNldENvbnRlbnRzKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2NvbnRlbnRzLnB1c2godmFsdWUpO1xuXG4gICAgICAgIHRoaXMuY29udGVudHNTb3VyY2UubmV4dCgpO1xuICAgIH1cblxuICAgIHNldENvbnRlbnRzV2l0aEluZGV4KGluZGV4LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLl9jb250ZW50cy5zcGxpY2UoaW5kZXgsIDAsIHZhbHVlKTtcblxuICAgICAgICB0aGlzLmNvbnRlbnRzU291cmNlLm5leHQoKTtcbiAgICB9XG5cbiAgICByZW9yZGVyQ29udGVudHMocHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4KSB7XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLl9jb250ZW50cywgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4KTtcblxuICAgICAgICB0aGlzLmNvbnRlbnRzU291cmNlLm5leHQoKTtcbiAgICB9XG5cbiAgICBnZXRDb250ZW50QnlVVUlEKHV1aWQpIHtcbiAgICAgICAgbGV0IGNvbnRlbnQgPSBudWxsO1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9jb250ZW50cykubWFwKGsgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnRzW2tdLmJsb2NrPy51dWlkID09PSB1dWlkKSB7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IHRoaXMuX2NvbnRlbnRzW2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG5cbiAgICB1cGRhdGVCeVVVSUQodXVpZCwgbmV3Q29udGVudCkge1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLl9jb250ZW50cykubWFwKGsgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnRzW2tdLmJsb2NrPy51dWlkID09PSB1dWlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudHNba10gPSBuZXdDb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvbnRlbnRzU291cmNlLm5leHQoKTtcbiAgICB9XG5cbiAgICBkdXBsaWNhdGVDb250ZW50QnlVVUlEKHV1aWQpIHtcbiAgICAgICAgbGV0IGtleVRvQ29weSA9IG51bGw7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuX2NvbnRlbnRzKS5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb250ZW50c1tpbmRleF0uYmxvY2s/LnV1aWQgPT09IHV1aWQpIHtcbiAgICAgICAgICAgICAgICBrZXlUb0NvcHkgPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGtleVRvQ29weSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IHRvQ29weSA9IHRoaXMuZGVlcENvcHkodGhpcy5fY29udGVudHNba2V5VG9Db3B5XS5ibG9jayk7XG4gICAgICAgICAgICB0b0NvcHkudXVpZCA9IHV1aWRWNCgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50cy5zcGxpY2Uoa2V5VG9Db3B5ICsgMSwgMCwgdG9Db3B5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRlbnRzU291cmNlLm5leHQoKTtcbiAgICB9XG5cbiAgICByZW1vdmVDb250ZW50QnlVVUlEKHV1aWQpIHtcbiAgICAgICAgY29uc3QgY29udGVudHMgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5fY29udGVudHMpLm1hcChrID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb250ZW50c1trXS5ibG9jaz8udXVpZCAhPT0gdXVpZCkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRzLnB1c2godGhpcy5fY29udGVudHNba10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jb250ZW50cyA9IGNvbnRlbnRzO1xuICAgICAgICB0aGlzLmNvbnRlbnRzU291cmNlLm5leHQoKTtcbiAgICB9XG5cbiAgICBkZWxldGVBbGwoKSB7XG4gICAgICAgIHRoaXMuX2NvbnRlbnRzID0gW107XG4gICAgfVxuXG4gICAgY29udGVudEV2ZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50c0RvbmU7XG4gICAgfVxuXG4gICAgZ2V0UGFyc2VkQ29udGVudCgpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IFtdO1xuXG4gICAgICAgIHRoaXMuY29udGVudHMuZm9yRWFjaChmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnRlbnQucHVzaChmb3JtLmJsb2NrKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG5cbiAgICBkZWVwQ29weShvYmopIHtcbiAgICAgICAgbGV0IGNvcHk7XG5cbiAgICAgICAgaWYgKG51bGwgPT0gb2JqIHx8ICdvYmplY3QnICE9PSB0eXBlb2Ygb2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIGNvcHkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgY29weS5zZXRUaW1lKG9iai5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIGNvcHkgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBvYmoubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb3B5W2ldID0gdGhpcy5kZWVwQ29weShvYmpbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvcHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBjb3B5ID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGF0dHIgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShhdHRyKSkge1xuICAgICAgICAgICAgICAgICAgICBjb3B5W2F0dHJdID0gdGhpcy5kZWVwQ29weShvYmpbYXR0cl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb3B5O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY29weSBvYmohIEl0cyB0eXBlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxufVxuIl19
@@ -99,12 +99,6 @@ export class WiziBlockComponent {
99
99
  }
100
100
  this.wiziBlockService.setConfig(this.availableComponents, this.texts);
101
101
  this.components = this.wiziBlockService.getComponents();
102
- this.duplicateContentSubscription = this.contentService.getDuplicateContentEmitter().subscribe((block) => {
103
- // prevent display init issue
104
- setTimeout(() => {
105
- this.checkWiziblocks();
106
- }, 20);
107
- });
108
102
  this.translation = this.wiziBlockService.getTranslation();
109
103
  this.wiziblockServicesList = this.wiziBlockService.getBlocksService();
110
104
  this.configEventSubscription = this.configService
@@ -145,7 +139,10 @@ export class WiziBlockComponent {
145
139
  this.calculatePositionTools(top);
146
140
  }
147
141
  this.blocksContents = this.contentService.contents;
148
- this.emitContent();
142
+ // prevent block loading issue
143
+ setTimeout(() => {
144
+ this.emitContent();
145
+ }, 20);
149
146
  });
150
147
  this.contentService.contents = this.content;
151
148
  this.resizeWithWidth(window.innerWidth);
@@ -156,10 +153,6 @@ export class WiziBlockComponent {
156
153
  }
157
154
  }
158
155
  }
159
- // added small timeout to prevent any loading issues
160
- setTimeout(() => {
161
- this.checkWiziblocks();
162
- }, 100);
163
156
  // start progressive loading
164
157
  this.progressiveBlockLoadingInterval = setInterval(() => {
165
158
  this.progressiveBlockLoading();
@@ -180,7 +173,8 @@ export class WiziBlockComponent {
180
173
  });
181
174
  });
182
175
  }
183
- emitContent() {
176
+ async emitContent() {
177
+ await this.checkWiziblocks();
184
178
  const parsedDto = [];
185
179
  this.blocksContents.forEach((v) => {
186
180
  parsedDto.push(v.block);
@@ -247,28 +241,35 @@ export class WiziBlockComponent {
247
241
  }
248
242
  }
249
243
  async checkWiziblocks() {
250
- let loadedAllBlocks = true;
251
244
  let blockContainers = document.querySelectorAll('.wb-blocks__container');
245
+ if (blockContainers.length <= 0) {
246
+ return;
247
+ }
248
+ let loadedAllBlocks = true;
249
+ let modifiedContent = false;
252
250
  let windowHeight = window.innerHeight;
253
251
  var scrollY = window.scrollY;
254
- this.content.forEach((block, index) => {
255
- if (!(block instanceof (FormsDto))) {
252
+ for (var i = 0; i < this.blocksContents.length; ++i) {
253
+ if (!(this.blocksContents[i] instanceof (FormsDto))) {
256
254
  loadedAllBlocks = false;
257
- var rect = blockContainers[index].getBoundingClientRect();
255
+ var rect = blockContainers[i].getBoundingClientRect();
258
256
  var pos = rect.top + scrollY;
259
257
  if ((windowHeight + scrollY + this.LOADING_OFFSET) >= (pos)) {
260
- this.content[index] = this.loadWiziblock(block);
258
+ this.blocksContents[i] = await this.loadWiziblock(this.blocksContents[i]);
259
+ modifiedContent = true;
261
260
  }
262
261
  }
263
- });
262
+ }
264
263
  this.allWiziblocksLoaded = loadedAllBlocks;
265
- this.contentService.contents = this.content;
264
+ if (modifiedContent) {
265
+ this.contentService.contents = this.blocksContents;
266
+ }
266
267
  if (this.allWiziblocksLoaded && this.progressiveBlockLoadingInterval) {
267
268
  clearInterval(this.progressiveBlockLoadingInterval);
268
269
  this.progressiveBlockLoadingInterval = null;
269
270
  }
270
271
  }
271
- loadWiziblock(block) {
272
+ async loadWiziblock(block) {
272
273
  let content = null;
273
274
  this.wiziblockServicesList.forEach((service) => {
274
275
  if (block.type === service.type()) {
@@ -289,13 +290,13 @@ export class WiziBlockComponent {
289
290
  progressiveBlockLoading() {
290
291
  let loadedAllBlocks = true;
291
292
  let blocksLeftToLoad = 3;
292
- for (let index = 0; index < this.content.length; ++index) {
293
+ for (let index = 0; index < this.blocksContents.length; ++index) {
293
294
  if (blocksLeftToLoad === 0) {
294
295
  break;
295
296
  }
296
- if (!(this.content[index] instanceof (FormsDto))) {
297
+ if (!(this.blocksContents[index] instanceof (FormsDto))) {
297
298
  loadedAllBlocks = false;
298
- this.content[index] = this.loadWiziblock(this.content[index]);
299
+ this.blocksContents[index] = this.loadWiziblock(this.blocksContents[index]);
299
300
  blocksLeftToLoad--;
300
301
  }
301
302
  }
@@ -333,4 +334,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
333
334
  type: HostListener,
334
335
  args: ['window:scroll', []]
335
336
  }] } });
336
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6aS1ibG9jay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93aXppLWJsb2NrL3NyYy9saWIvd2l6aS1ibG9jay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93aXppLWJsb2NrL3NyYy9saWIvd2l6aS1ibG9jay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUVoRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVF2RCxNQUFNLE9BQU8sa0JBQWtCO0lBMkMzQixZQUNZLGdC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Z0JBQWdCLEVBQUUsQ0FBQzthQUN0QjtTQUNKO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGVBQWUsQ0FBQztRQUMzQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsK0JBQStCLEVBQUU7WUFDbEUsYUFBYSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQywrQkFBK0IsR0FBRyxJQUFJLENBQUM7U0FDL0M7SUFDTCxDQUFDOzsrR0E1VFEsa0JBQWtCO21HQUFsQixrQkFBa0IsNGVDdkIvQixtL1FBOEpBLDhqRkR6SWdCLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLEVBQUUsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsQ0FBQzsyRkFFakcsa0JBQWtCO2tCQU45QixTQUFTOytCQUNJLGVBQWUsY0FHYixDQUFDLG9CQUFvQixDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxFQUFFLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQUM7K0xBR2pHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFFcUIsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQXlDaUIsWUFBWTtzQkFBdEQsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUlGLGNBQWM7c0JBQWhELFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXaXppQmxvY2tTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy93aXppLWJsb2NrLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RydWN0dXJlc0xpc3REdG8gfSBmcm9tICcuL2R0b3MvY29uZmlncy9zdHJ1Y3R1cmVzL3N0cnVjdHVyZXMtbGlzdC5kdG8nO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zRHRvIH0gZnJvbSAnLi9kdG9zL2NvbmZpZ3MvdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5kdG8nO1xuaW1wb3J0IHsgVHlwZXNEdG8gfSBmcm9tICcuL2R0b3MvY29uZmlncy90eXBlcy90eXBlcy5kdG8nO1xuaW1wb3J0IHsgU3RydWN0dXJlQ29uZmlnRHRvIH0gZnJvbSAnLi9kdG9zL2NvbmZpZ3Mvc3RydWN0dXJlcy9zdHJ1Y3R1cmUtY29uZmlnLmR0byc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91dGlscy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91dGlscy9jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgYW5pbWF0ZUxpc3RGcm9tUmlnaHQgfSBmcm9tICcuL3NoYXJlZC9hbmltYXRpb25zL2xpc3QvYW5pbWF0ZS1saXN0LWZyb20tcmlnaHQuYW5pbWF0aW9uJztcbmltcG9ydCB7IGFuaW1hdGVMaXN0RnJvbUxlZnQgfSBmcm9tICcuL3NoYXJlZC9hbmltYXRpb25zL2xpc3QvYW5pbWF0ZS1saXN0LWZyb20tbGVmdC5hbmltYXRpb24nO1xuaW1wb3J0IHsgUGFyZW50QmxvY2tEdG8gfSBmcm9tICcuL2R0b3MvYmxvY2tzL3BhcmVudC1ibG9jay5kdG8nO1xuaW1wb3J0IHsgRm9ybXNEdG8gfSBmcm9tICcuL2R0b3MvZm9ybXMvZm9ybXMuZHRvJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJsb2Nrc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9ibG9ja3MvYmxvY2tzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnd2Itd2l6aS1ibG9jaycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3dpemktYmxvY2suY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogW10sXG4gICAgYW5pbWF0aW9uczogW2FuaW1hdGVMaXN0RnJvbVJpZ2h0KCcyMDBtcyBlYXNlLWluLW91dCcsICcxMDBtcycpLCBhbmltYXRlTGlzdEZyb21MZWZ0KCcxMDBtcyBlYXNlLWluLW91dCcpXSxcbn0pXG5leHBvcnQgY2xhc3MgV2l6aUJsb2NrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIGF2YWlsYWJsZUNvbXBvbmVudHM6IEFycmF5PHN0cmluZz47XG4gICAgQElucHV0KCkgdGV4dHM6IFRyYW5zbGF0aW9uc0R0byA9IG51bGw7XG4gICAgQElucHV0KCkgY29udGVudCA9IFtdO1xuICAgIEBJbnB1dCgpIHZlcmJvc2UgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBpc0luRGV2ID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgY29udGVudENoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PFBhcmVudEJsb2NrRHRvPj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAVmlld0NoaWxkKCdjb21wb25lbnRMaXN0JykgY29tcG9uZW50TGlzdDtcblxuICAgIGJyZWFrUG9pbnRTaXplID0gMTQyMTtcbiAgICBibG9ja3NDb250ZW50cyA9IFtdO1xuICAgIHNlbGVjdGVkU3RydWN0dXJlOiBTdHJ1Y3R1cmVDb25maWdEdG8gPSBudWxsO1xuICAgIHNlbGVjdGVkQ29uZmlnOiBGb3Jtc0R0bzxQYXJlbnRCbG9ja0R0bz4gPSBudWxsO1xuICAgIGNvbXBvbmVudHM6IFN0cnVjdHVyZXNMaXN0RHRvID0gbnVsbDtcbiAgICB0cmFuc2xhdGlvbjogVHJhbnNsYXRpb25zRHRvID0gbnVsbDtcbiAgICBpc0hpZGRlbkNvbmZpZyA9IFtdO1xuICAgIGlzRmlyc3RJbkxvb3AgPSBmYWxzZTtcbiAgICBsb29wSW5kZXggPSAwO1xuICAgIGhvdmVyQ2hpbGRyZW46IGJvb2xlYW4gfCBzdHJpbmc7XG5cbiAgICBjdXJyZW50VG9wVG9vbCA9IDA7XG4gICAgdG9vbFVucGluID0gZmFsc2U7XG4gICAgdG9vbEhpZGRlbiA9IGZhbHNlO1xuICAgIHNtYWxsU2NyZWVuID0gZmFsc2U7XG5cblxuICAgIGJsb2NrQ29tcG9uZW50OiBCbG9ja3NDb21wb25lbnQ7XG5cbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBwcml2YXRlIGNvbmZpZ0V2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIHByaXZhdGUgY29udGVudEV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIHByaXZhdGUgd2l6aWJsb2NrU2VydmljZXNMaXN0OiBBcnJheTxhbnk+ID0gW107XG5cbiAgICBwcml2YXRlIHByb2dyZXNzaXZlQmxvY2tMb2FkaW5nSW50ZXJ2YWw6IGFueTtcbiAgICBwcml2YXRlIExPQURJTkdfT0ZGU0VUID0gd2luZG93LmlubmVySGVpZ2h0O1xuICAgIHByaXZhdGUgUFJPR1JFU1NJVkVfTE9BRElOR19JTlRFUlZBTCA9IDMwMDA7XG5cbiAgICBwcml2YXRlIGFsbFdpemlibG9ja3NMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByaXZhdGUgZHVwbGljYXRlQ29udGVudFN1YnNjcmlwdGlvbjogYW55O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgd2l6aUJsb2NrU2VydmljZTogV2l6aUJsb2NrU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnRTZXJ2aWNlOiBDb250ZW50U2VydmljZSxcbiAgICAgICAgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgICApIHt9XG5cbiAgICBAVmlld0NoaWxkKCdibG9jaycsIHsgc3RhdGljOiBmYWxzZSB9KSBzZXQgY29udGVudEJsb2NrKGNvbnRyb2w6IEJsb2Nrc0NvbXBvbmVudCkge1xuICAgICAgICB0aGlzLmJsb2NrQ29tcG9uZW50ID0gY29udHJvbDtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgW10pIG9uV2luZG93U2Nyb2xsKCkge1xuICAgICAgICBjb25zdCBjdXJyZW50VG9wID0gd2luZG93LnNjcm9sbFk7XG4gICAgICAgIGlmICh0aGlzLnRvb2xVbnBpbiAmJiAhdGhpcy50b29sSGlkZGVuICYmIE1hdGguYWJzKGN1cnJlbnRUb3AgLSB0aGlzLmN1cnJlbnRUb3BUb29sKSA+IDgwMCkge1xuICAgICAgICAgICAgdGhpcy50b29sSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuYWxsV2l6aWJsb2Nrc0xvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja1dpemlibG9ja3MoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMuYXZhaWxhYmxlQ29tcG9uZW50cyB8fCB0aGlzLmF2YWlsYWJsZUNvbXBvbmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUNvbXBvbmVudHMgPSBbXG4gICAgICAgICAgICAgICAgVHlwZXNEdG8uc2xpZGVycyxcbiAgICAgICAgICAgICAgICBUeXBlc0R0by52aWRlb3MsXG4gICAgICAgICAgICAgICAgVHlwZXNEdG8ubGF1bmNoX3ZpZGVvcyxcbiAgICAgICAgICAgICAgICBUeXBlc0R0by5pbWFnZXMsXG4gICAgICAgICAgICAgICAgVHlwZXNEdG8udGV4dF9iYWNrZ3JvdW5kcyxcbiAgICAgICAgICAgICAgICBUeXBlc0R0by5pbWFnZXNfdGV4dHMsXG4gICAgICAgICAgICAgICAgVHlwZXNEdG8udGV4dHMsXG4gICAgICAgICAgICAgICAgVHlwZXNEdG8uZm9ybXMsXG4gICAgICAgICAgICAgICAgVHlwZXNEdG8ucHJvZHVjdHNfbGlzdCxcbiAgICAgICAgICAgICAgICBUeXBlc0R0by5wcm9kdWN0LFxuICAgICAgICAgICAgICAgIFR5cGVzRHRvLnNvY2lhbHMsXG4gICAgICAgICAgICAgICAgVHlwZXNEdG8ucmFzc3VyYW5jZXMsXG4gICAgICAgICAgICAgICAgVHlwZXNEdG8ubmV3c2xldHRlcixcbiAgICAgICAgICAgICAgICBUeXBlc0R0by53aXRuZXNzLFxuICAgICAgICAgICAgICAgIFR5cGVzRHRvLnJldmlld3MsXG4gICAgICAgICAgICAgICAgVHlwZXNEdG8ucXVvdGVzLFxuICAgICAgICAgICAgICAgIFR5cGVzRHRvLnRpbWVyLFxuICAgICAgICAgICAgICAgIFR5cGVzRHRvLm1hcCxcbiAgICAgICAgICAgICAgICBUeXBlc0R0by5jb2RlLFxuICAgICAgICAgICAgICAgIFR5cGVzRHRvLnNlcGFyYXRvcixcbiAgICAgICAgICAgICAgICBUeXBlc0R0by5mYXEsXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5zZXREb2N1bWVudEV2ZW50TGlzdGVuZXIoKTtcblxuICAgICAgICBpZiAodGhpcy5pc0luRGV2KSB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaXNJbkRldiA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndpemlCbG9ja1NlcnZpY2Uuc2V0Q29uZmlnKHRoaXMuYXZhaWxhYmxlQ29tcG9uZW50cywgdGhpcy50ZXh0cyk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50cyA9IHRoaXMud2l6aUJsb2NrU2VydmljZS5nZXRDb21wb25lbnRzKCk7XG5cbiAgICAgICAgdGhpcy5kdXBsaWNhdGVDb250ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5jb250ZW50U2VydmljZS5nZXREdXBsaWNhdGVDb250ZW50RW1pdHRlcigpLnN1YnNjcmliZSgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgZGlzcGxheSBpbml0IGlzc3VlXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrV2l6aWJsb2NrcygpO1xuICAgICAgICAgICAgfSwgMjApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbiA9IHRoaXMud2l6aUJsb2NrU2VydmljZS5nZXRUcmFuc2xhdGlvbigpO1xuICAgICAgICB0aGlzLndpemlibG9ja1NlcnZpY2VzTGlzdCA9IHRoaXMud2l6aUJsb2NrU2VydmljZS5nZXRCbG9ja3NTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuY29uZmlnRXZlbnRTdWJzY3JpcHRpb24gPSB0aGlzLmNvbmZpZ1NlcnZpY2VcbiAgICAgICAgICAgIC5jb25maWdFdmVudCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnID0gdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZztcbiAgICAgICAgICAgICAgICB0aGlzLmlzRmlyc3RJbkxvb3AgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvb3BJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBiIG9mIHRoaXMuYmxvY2tzQ29udGVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiWydibG9jayddICYmIGJbJ2Jsb2NrJ11bJ3V1aWQnXSA9PT0gdGhpcy5zZWxlY3RlZENvbmZpZy5ibG9jay51dWlkICYmIHRoaXMubG9vcEluZGV4IDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNGaXJzdEluTG9vcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvb3BJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJDaGlsZHJlbiA9IHRoaXMuc2VsZWN0ZWRDb25maWcuYmxvY2sudXVpZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdmVyQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudG9vbEhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEhpZGRlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFN0cnVjdHVyZSA9PT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkQ29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3RydWN0dXJlT25GbHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMudmVyYm9zZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0F2YWlsYWJsZSBjb250ZW50IG9uIHN0YXJ0JywgdGhpcy5jb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRlbnRFdmVudFN1YnNjcmlwdGlvbiA9IHRoaXMuY29udGVudFNlcnZpY2VcbiAgICAgICAgICAgIC5jb250ZW50RXZlbnQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGVudFNlcnZpY2UuY29udGVudHMubGVuZ3RoIDwgdGhpcy5ibG9ja3NDb250ZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9wID0gd2luZG93LnNjcm9sbFk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUG9zaXRpb25Ub29scyh0b3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmJsb2Nrc0NvbnRlbnRzID0gdGhpcy5jb250ZW50U2VydmljZS5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDb250ZW50KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb250ZW50U2VydmljZS5jb250ZW50cyA9IHRoaXMuY29udGVudDtcbiAgICAgICAgdGhpcy5yZXNpemVXaXRoV2lkdGgod2luZG93LmlubmVyV2lkdGgpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5jb250ZW50U2VydmljZS5jb250ZW50cykge1xuICAgICAgICAgICAgaWYgKChpdGVtIGluc3RhbmNlb2YgRm9ybXNEdG88UGFyZW50QmxvY2tEdG8+KSAgJiYgdHlwZW9mIGl0ZW0uYmxvY2suaGlkZV9ibG9jayAhPT0gdHlwZW9mIHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmJsb2NrLmhpZGVfYmxvY2sgPT09ICcwJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzSGlkZGVuQ29uZmlnLnB1c2goaXRlbS5ibG9jay51dWlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkZWQgc21hbGwgdGltZW91dCB0byBwcmV2ZW50IGFueSBsb2FkaW5nIGlzc3Vlc1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tXaXppYmxvY2tzKCk7XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICAgIC8vIHN0YXJ0IHByb2dyZXNzaXZlIGxvYWRpbmdcbiAgICAgICAgdGhpcy5wcm9ncmVzc2l2ZUJsb2NrTG9hZGluZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc2l2ZUJsb2NrTG9hZGluZygpO1xuICAgICAgICB9LCB0aGlzLlBST0dSRVNTSVZFX0xPQURJTkdfSU5URVJWQUwpO1xuICAgIH1cblxuICAgIGFkZFRoaXMoc2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5ibG9ja0NvbXBvbmVudC5hZGRUaGlzU2VsZWN0ZWQoc2VsZWN0ZWQsIHRoaXMudmVyYm9zZSk7XG4gICAgfVxuXG4gICAgY2xvc2VDb25maWcoKSB7XG4gICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWcgPSBudWxsO1xuICAgIH1cblxuICAgIHNlbGVjdFN0cnVjdHVyZU9uRmx5KCkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudHMuY29tcG9uZW50cy5mb3JFYWNoKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5jb250ZW50cy5mb3JFYWNoKChzdWJDb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3ViQ29tcG9uZW50LnR5cGUgPT09IHRoaXMuc2VsZWN0ZWRDb25maWcudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RydWN0dXJlID0gY29tcG9uZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBlbWl0Q29udGVudCgpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkRHRvID0gW107XG4gICAgICAgIHRoaXMuYmxvY2tzQ29udGVudHMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgcGFyc2VkRHRvLnB1c2godi5ibG9jayk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbnRlbnRDaGFuZ2UuZW1pdChwYXJzZWREdG8pO1xuICAgIH1cblxuICAgIG9uUmVzaXplKCRldmVudCkge1xuICAgICAgICB0aGlzLnJlc2l6ZVdpdGhXaWR0aCgkZXZlbnQudGFyZ2V0LmlubmVyV2lkdGgpO1xuICAgIH1cblxuICAgIHJlc2l6ZVdpdGhXaWR0aChjdXJyZW50QnJvd3NlclNpemUpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRCcm93c2VyU2l6ZSA8IHRoaXMuYnJlYWtQb2ludFNpemUpIHtcbiAgICAgICAgICAgIHRoaXMudG9vbFVucGluID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc21hbGxTY3JlZW4gPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50b29sVW5waW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc21hbGxTY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFVucGluKCkge1xuICAgICAgICBjb25zdCB0b3AgPSB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgICAgdGhpcy50b29sVW5waW4gPSAhdGhpcy50b29sVW5waW47XG4gICAgICAgIGlmICh0aGlzLnRvb2xVbnBpbikge1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVQb3NpdGlvblRvb2xzKHRvcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRIaWRkZW4oKSB7XG4gICAgICAgIGNvbnN0IHRvcCA9IHdpbmRvdy5zY3JvbGxZO1xuICAgICAgICB0aGlzLnRvb2xIaWRkZW4gPSAhdGhpcy50b29sSGlkZGVuO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZVBvc2l0aW9uVG9vbHModG9wKTtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVQb3NpdGlvblRvb2xzKHRvcCkge1xuICAgICAgICBpZiAoIXRoaXMudG9vbEhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9wVG9vbCA9IHRvcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRvcFRvb2wgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlQ29uZmlnV2l6aWJsb2NrcyhldmVudCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnID0gZXZlbnQuY29uZmlnO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VsZWN0ZWRDb25maWcuZm9ybXMgIT09IHR5cGVvZiB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnNlbGVjdGVkQ29uZmlnLmZvcm1zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09ICdoaWRlX2Jsb2NrJyAmJiBpdGVtLnZhbHVlID09PSAnMCcgJiYgIXRoaXMuaXNIaWRkZW5Db25maWcuaW5jbHVkZXModGhpcy5zZWxlY3RlZENvbmZpZy5ibG9jay51dWlkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzSGlkZGVuQ29uZmlnLnB1c2godGhpcy5zZWxlY3RlZENvbmZpZy5ibG9jay51dWlkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT09ICdoaWRlX2Jsb2NrJyAmJiBpdGVtLnZhbHVlID09PSAnMScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0hpZGRlbkNvbmZpZyA9IHRoaXMuaXNIaWRkZW5Db25maWcuZmlsdGVyKChlKSA9PiBlICE9PSB0aGlzLnNlbGVjdGVkQ29uZmlnLmJsb2NrLnV1aWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLndpemlCbG9ja1NlcnZpY2UuX2Jsb2Nrc1NlcnZpY2UgPSBbXTtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gW107XG4gICAgICAgIHRoaXMuYmxvY2tzQ29udGVudHMgPSBbXTtcblxuICAgICAgICB0aGlzLmNvbmZpZ0V2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuY29udGVudEV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuY29udGVudFNlcnZpY2UuZGVsZXRlQWxsKCk7XG5cbiAgICAgICAgaWYgKHRoaXMudmVyYm9zZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0dvb2RCeWUgV2l6aUJsb2NrIFlvdSBXZXJlIExvdmVkJywgJ0Rlc3Ryb3kgb2YgVGhpcyBTZXNzaW9uJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrV2l6aWJsb2NrcygpIHtcbiAgICAgICAgbGV0IGxvYWRlZEFsbEJsb2NrcyA9IHRydWU7XG4gICAgICAgIGxldCBibG9ja0NvbnRhaW5lcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcud2ItYmxvY2tzX19jb250YWluZXInKTtcbiAgICAgICAgbGV0IHdpbmRvd0hlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgICAgdmFyIHNjcm9sbFkgPSB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgICAgdGhpcy5jb250ZW50LmZvckVhY2goKGJsb2NrLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKCEoYmxvY2sgaW5zdGFuY2VvZiBGb3Jtc0R0bzxQYXJlbnRCbG9ja0R0bz4pKSB7XG4gICAgICAgICAgICAgICAgbG9hZGVkQWxsQmxvY2tzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBibG9ja0NvbnRhaW5lcnNbaW5kZXhdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIHZhciBwb3MgPSByZWN0LnRvcCArIHNjcm9sbFk7XG4gICAgICAgICAgICAgICAgaWYgKCh3aW5kb3dIZWlnaHQgKyBzY3JvbGxZICsgdGhpcy5MT0FESU5HX09GRlNFVCkgPj0gKHBvcykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50W2luZGV4XSA9IHRoaXMubG9hZFdpemlibG9jayhibG9jayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFsbFdpemlibG9ja3NMb2FkZWQgPSBsb2FkZWRBbGxCbG9ja3M7XG4gICAgICAgIHRoaXMuY29udGVudFNlcnZpY2UuY29udGVudHMgPSB0aGlzLmNvbnRlbnQ7XG4gICAgICAgIGlmICh0aGlzLmFsbFdpemlibG9ja3NMb2FkZWQgJiYgdGhpcy5wcm9ncmVzc2l2ZUJsb2NrTG9hZGluZ0ludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMucHJvZ3Jlc3NpdmVCbG9ja0xvYWRpbmdJbnRlcnZhbCk7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzaXZlQmxvY2tMb2FkaW5nSW50ZXJ2YWwgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkV2l6aWJsb2NrKGJsb2NrOiBhbnkpIHtcbiAgICAgICAgbGV0IGNvbnRlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLndpemlibG9ja1NlcnZpY2VzTGlzdC5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoYmxvY2sudHlwZSA9PT0gc2VydmljZS50eXBlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNlcnZpY2UuZ2V0Rm9ybSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBmb3JtIGZvciAnICsgc2VydmljZS50eXBlKCkgKyAnJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IHNlcnZpY2UuZ2V0Rm9ybShibG9jayk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQudHlwZSA9IHNlcnZpY2UudHlwZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnU2V0IGEgY29udGVudCcsIGNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9ncmVzc2l2ZUJsb2NrTG9hZGluZygpIHtcbiAgICAgICAgbGV0IGxvYWRlZEFsbEJsb2NrcyA9IHRydWU7XG4gICAgICAgIGxldCBibG9ja3NMZWZ0VG9Mb2FkID0gMztcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY29udGVudC5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChibG9ja3NMZWZ0VG9Mb2FkID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISh0aGlzLmNvbnRlbnRbaW5kZXhdIGluc3RhbmNlb2YgRm9ybXNEdG88UGFyZW50QmxvY2tEdG8+KSkge1xuICAgICAgICAgICAgICAgIGxvYWRlZEFsbEJsb2NrcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGVudFtpbmRleF0gPSB0aGlzLmxvYWRXaXppYmxvY2sodGhpcy5jb250ZW50W2luZGV4XSk7XG4gICAgICAgICAgICAgICAgYmxvY2tzTGVmdFRvTG9hZC0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWxsV2l6aWJsb2Nrc0xvYWRlZCA9IGxvYWRlZEFsbEJsb2NrcztcbiAgICAgICAgaWYgKHRoaXMuYWxsV2l6aWJsb2Nrc0xvYWRlZCAmJiB0aGlzLnByb2dyZXNzaXZlQmxvY2tMb2FkaW5nSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5wcm9ncmVzc2l2ZUJsb2NrTG9hZGluZ0ludGVydmFsKTtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NpdmVCbG9ja0xvYWRpbmdJbnRlcnZhbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgaWQ9XCJ3Yi1jb250YWluZXJcIlxuICAgIGNsYXNzPVwiY29sdW1ucyB3Yi1jb250YWluZXJcIlxuICAgICpuZ0lmPVwidHJhbnNsYXRpb25cIlxuICAgICNjb250YWluZXJcbiAgICAod2luZG93OnJlc2l6ZSk9XCJvblJlc2l6ZSgkZXZlbnQpXCJcbiAgICBbbmdDbGFzc109XCJ7ICdpcy1zbWFsbHNjcmVlbic6IHNtYWxsU2NyZWVuIH1cIlxuPlxuICAgIDxkaXZcbiAgICAgICAgY2RrRHJhZ1xuICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiF0b29sVW5waW5cIlxuICAgICAgICBjbGFzcz1cImNvbHVtbiB3Yi1jb250YWluZXJfX3Rvb2xzXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtdW5waW5uZWQnOiB0b29sVW5waW4gJiYgIXRvb2xIaWRkZW4sICdpcy1zbWFsbHNjcmVlbic6IHNtYWxsU2NyZWVuLCAnaGFzLW5vLXRvb2wnOiB0b29sSGlkZGVuIH1cIlxuICAgICAgICBbc3R5bGUudG9wLnB4XT1cImN1cnJlbnRUb3BUb29sXCJcbiAgICA+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnaXMtaGlkZGVuJzogIXRvb2xIaWRkZW4gfVwiIChjbGljayk9XCJzZXRIaWRkZW4oKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICA8ZGl2IFtud2JUb29sVGlwXT1cIid3Yi5wYW5lbC5odG1sLjEnIHwgdHJhbnNsYXRlXCIgbndiVG9vbFRpcFBvc2l0aW9uPVwicmlnaHRcIiBjbGFzcz1cImlzLXRvb2x0aXAtaW5mb1wiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLWFycm93LWZyb20tbGVmdFwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdpcy1oaWRkZW4nOiB0b29sSGlkZGVuIH1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Yi10b29sc1wiICpuZ0lmPVwic2VsZWN0ZWRTdHJ1Y3R1cmUgPT09IG51bGxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2ItdG9vbHNfX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIndiLXRvb2xzX19oZWFkZXJfX2FjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1yb3VuZGVkIGlzLXRvb2x0aXAtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW253YlRvb2xUaXBdPVwidG9vbFVucGluID8gJ3diLnBhbmVsLmh0bWwuMicgOiAoJ3diLnBhbmVsLmh0bWwuMycgfCB0cmFuc2xhdGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBud2JUb29sVGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0aGlzLnNldFVucGluKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxpIGNsYXNzPVwiZmFyXCIgW25nQ2xhc3NdPVwieyAnZmEtdW5saW5rJzogIXRvb2xVbnBpbiwgJ2ZhLWxpbmsnOiB0b29sVW5waW4gfVwiPjwvaVxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtcm91bmRlZCBpcy10b29sdGlwLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtud2JUb29sVGlwXT1cIid3Yi5wYW5lbC5odG1sLjQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBud2JUb29sVGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRIaWRkZW4oKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGkgY2xhc3M9XCJmYXIgZmEtYXJyb3ctZnJvbS1yaWdodFwiPjwvaVxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIndiLXRvb2xzX19oZWFkZXJfX2xpc3RcIj57eyB0cmFuc2xhdGlvbi5saXN0X2NvbXBvbmVudCB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctc2Nyb2xsYmFyXG4gICAgICAgICAgICAgICAgICAgIFt2aXNpYmlsaXR5XT1cIidob3ZlcidcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbXBvbmVudHNcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgbWF4LWhlaWdodDogODV2aFwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvSGVpZ2h0RGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndiLXRvb2xzX19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy1tdWx0aWxpbmVcIiBbQGFuaW1hdGVMaXN0RnJvbUxlZnRdPVwiY29tcG9uZW50cy5jb21wb25lbnRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2x1bW4gaXMtNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb21wb25lbnQgb2YgY29tcG9uZW50cy5jb21wb25lbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkU3RydWN0dXJlID0gY29tcG9uZW50OyBzZWxlY3RlZENvbmZpZyA9IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cIidhc3NldHMvYmxvY2tzL2ltYWdlcy9pY29ucy8nICsgY29tcG9uZW50LmltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWx0XT1cImNvbXBvbmVudC50ZXh0IHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbXBvbmVudC5pbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e3sgY29tcG9uZW50LnRleHQgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctc2Nyb2xsYmFyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2ItY29uZmlndXJhdGlvblwiICpuZ0lmPVwic2VsZWN0ZWRTdHJ1Y3R1cmUgIT09IG51bGxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2ItY29uZmlndXJhdGlvbl9faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwid2ItdG9vbHNfX2hlYWRlcl9fYWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXJvdW5kZWQgaXMtdG9vbHRpcC1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbndiVG9vbFRpcF09XCJ0b29sVW5waW4gPyAnd2IucGFuZWwuaHRtbC4yJyA6ICgnd2IucGFuZWwuaHRtbC4zJyB8IHRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG53YlRvb2xUaXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRoaXMuc2V0VW5waW4oKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGkgY2xhc3M9XCJmYWxcIiBbbmdDbGFzc109XCJ7ICdmYS11bmxpbmsnOiAhdG9vbFVucGluLCAnZmEtbGluayc6IHRvb2xVbnBpbiB9XCI+PC9pXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1yb3VuZGVkIGlzLXRvb2x0aXAtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW253YlRvb2xUaXBdPVwiJ3diLnBhbmVsLmh0bWwuNCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG53YlRvb2xUaXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEhpZGRlbigpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48aSBjbGFzcz1cImZhciBmYS1hcnJvdy1mcm9tLXJpZ2h0XCI+PC9pXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwid2ItY29uZmlndXJhdGlvbl9faGVhZGVyLWNsaWNrIHdiLXRvb2xzX19oZWFkZXJfX2xpc3RcIiAoY2xpY2spPVwic2VsZWN0ZWRTdHJ1Y3R1cmUgPSBudWxsOyBjbG9zZUNvbmZpZygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhciBmYS1hbmdsZS1sZWZ0XCI+PC9pPiB7eyBzZWxlY3RlZFN0cnVjdHVyZS50ZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2ItY29uZmlndXJhdGlvbl9fc3ViaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJjbG9zZUNvbmZpZygpXCIgW25nQ2xhc3NdPVwieyAnaXMtYWN0aXZlJzogc2VsZWN0ZWRDb25maWcgPT09IG51bGwgfVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbi5zdHJ1Y3R1cmUgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgfX08L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cInsgJ2lzLWFjdGl2ZSc6IHNlbGVjdGVkQ29uZmlnICE9PSBudWxsIH1cIiAqbmdJZj1cInNlbGVjdGVkQ29uZmlnICE9PSBudWxsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uLmNvbmZpZyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICB9fTwvYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctc2Nyb2xsYmFyXG4gICAgICAgICAgICAgICAgICAgIFt2aXNpYmlsaXR5XT1cIidob3ZlcidcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBzXCJcbiAgICAgICAgICAgICAgICAgICAgcGVyZmVjdFNjcm9sbGJhclxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTsgbWF4LWhlaWdodDogODB2aFwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvSGVpZ2h0RGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndiLWNvbmZpZ3VyYXRpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkQ29uZmlnID09PSBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIndiLWNvbmZpZ3VyYXRpb25fX2NvbnRlbnRfc3RydWN0dXJlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW0BhbmltYXRlTGlzdEZyb21SaWdodF09XCJzZWxlY3RlZFN0cnVjdHVyZS5jb250ZW50cy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiYmxvY2tzQ29udGVudHMubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiWydibG9jay1jb250ZW50J11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VsZWN0ZWQgb2Ygc2VsZWN0ZWRTdHJ1Y3R1cmUuY29udGVudHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInNlbGVjdGVkLmltYWdlIHwgaW1nUGF0aFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPnt7IHNlbGVjdGVkLm5hbWUgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid2ItY29uZmlndXJhdGlvbl9fY29udGVudF9zdHJ1Y3R1cmVzX19kcmFnZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJzZWxlY3RlZC50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka0RyYWdIYW5kbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWRyYWdnYWJsZSc6IGJsb2Nrc0NvbnRlbnRzLmxlbmd0aCB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRUaGlzKHNlbGVjdGVkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwid2ItY29uZmlndXJhdGlvbl9fY29udGVudF9zdHJ1Y3R1cmVzX19wcmV2aWV3XCIgKmNka0RyYWdQcmV2aWV3PjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwid2ItY29uZmlndXJhdGlvbl9fY29udGVudF9zdHJ1Y3R1cmVzX19wbGFjZWhvbGRlclwiICpjZGtEcmFnUGxhY2Vob2xkZXI+PHNwYW4+PC9zcGFuPjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZENvbmZpZyAhPT0gbnVsbFwiIGNsYXNzPVwid2ItY29uZmlndXJhdGlvbl9fY29udGVudF9jb25maWd1cmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdiLWNvbmZpZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzRmlyc3RdPVwiaXNGaXJzdEluTG9vcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWdzXT1cInNlbGVjdGVkQ29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZUNvbmZpZyk9XCJjaGFuZ2VDb25maWdXaXppYmxvY2tzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3diLWNvbmZpZ3M+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1zY3JvbGxiYXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiB3Yi1jb250YWluZXJfX2NvbnRlbnRcIiBbbmdDbGFzc109XCJ7ICdoYXMtbm8tdG9vbCc6IHRvb2xIaWRkZW4gfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwid2ItY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndiLWNvbnRlbnRfX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxwPjxpIGNsYXNzPVwiZmFzIGZhLWxvY2tcIj48L2k+IHt7IHRyYW5zbGF0aW9uLmhlYWRlciB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndiLWNvbnRlbnRfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8d2ItYmxvY2tzIFtkeW5hbWljSGlkZGVuXT1cImlzSGlkZGVuQ29uZmlnXCIgW3NlbGVjdGVkQ29uZmlnXT1cImhvdmVyQ2hpbGRyZW5cIiAjYmxvY2sgW2NvbnRlbnRzXT1cImJsb2Nrc0NvbnRlbnRzXCI+PC93Yi1ibG9ja3M+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Yi1jb250ZW50X19mb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8cD48aSBjbGFzcz1cImZhcyBmYS1sb2NrXCI+PC9pPiB7eyB0cmFuc2xhdGlvbi5mb290ZXIgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxociBpZD1cIndiLWZvb3Rlcl9fYmxvY2tcIiAvPlxuIl19
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6aS1ibG9jay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93aXppLWJsb2NrL3NyYy9saWIvd2l6aS1ibG9jay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93aXppLWJsb2NrL3NyYy9saWIvd2l6aS1ibG9jay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUVoRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVF2RCxNQUFNLE9BQU8sa0JBQWtCO0lBeUMzQixZQUNZLGdC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QUFDLENBQUM7Z0JBQzVFLGdCQUFnQixFQUFFLENBQUM7YUFDdEI7U0FDSjtRQUNELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxlQUFlLENBQUM7UUFDM0MsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFFO1lBQ2xFLGFBQWEsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsK0JBQStCLEdBQUcsSUFBSSxDQUFDO1NBQy9DO0lBQ0wsQ0FBQzs7K0dBM1RRLGtCQUFrQjttR0FBbEIsa0JBQWtCLDRlQ3ZCL0IsbS9RQThKQSw4akZEeklnQixDQUFDLG9CQUFvQixDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxFQUFFLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQUM7MkZBRWpHLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDSSxlQUFlLGNBR2IsQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDOytMQUdqRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBRXFCLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkF1Q2lCLFlBQVk7c0JBQXRELFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJRixjQUFjO3NCQUFoRCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgV2l6aUJsb2NrU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvd2l6aS1ibG9jay5zZXJ2aWNlJztcbmltcG9ydCB7IFN0cnVjdHVyZXNMaXN0RHRvIH0gZnJvbSAnLi9kdG9zL2NvbmZpZ3Mvc3RydWN0dXJlcy9zdHJ1Y3R1cmVzLWxpc3QuZHRvJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uc0R0byB9IGZyb20gJy4vZHRvcy9jb25maWdzL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMuZHRvJztcbmltcG9ydCB7IFR5cGVzRHRvIH0gZnJvbSAnLi9kdG9zL2NvbmZpZ3MvdHlwZXMvdHlwZXMuZHRvJztcbmltcG9ydCB7IFN0cnVjdHVyZUNvbmZpZ0R0byB9IGZyb20gJy4vZHRvcy9jb25maWdzL3N0cnVjdHVyZXMvc3RydWN0dXJlLWNvbmZpZy5kdG8nO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdXRpbHMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb250ZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdXRpbHMvY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGFuaW1hdGVMaXN0RnJvbVJpZ2h0IH0gZnJvbSAnLi9zaGFyZWQvYW5pbWF0aW9ucy9saXN0L2FuaW1hdGUtbGlzdC1mcm9tLXJpZ2h0LmFuaW1hdGlvbic7XG5pbXBvcnQgeyBhbmltYXRlTGlzdEZyb21MZWZ0IH0gZnJvbSAnLi9zaGFyZWQvYW5pbWF0aW9ucy9saXN0L2FuaW1hdGUtbGlzdC1mcm9tLWxlZnQuYW5pbWF0aW9uJztcbmltcG9ydCB7IFBhcmVudEJsb2NrRHRvIH0gZnJvbSAnLi9kdG9zL2Jsb2Nrcy9wYXJlbnQtYmxvY2suZHRvJztcbmltcG9ydCB7IEZvcm1zRHRvIH0gZnJvbSAnLi9kdG9zL2Zvcm1zL2Zvcm1zLmR0byc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCbG9ja3NDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYmxvY2tzL2Jsb2Nrcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3diLXdpemktYmxvY2snLFxuICAgIHRlbXBsYXRlVXJsOiAnLi93aXppLWJsb2NrLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFtdLFxuICAgIGFuaW1hdGlvbnM6IFthbmltYXRlTGlzdEZyb21SaWdodCgnMjAwbXMgZWFzZS1pbi1vdXQnLCAnMTAwbXMnKSwgYW5pbWF0ZUxpc3RGcm9tTGVmdCgnMTAwbXMgZWFzZS1pbi1vdXQnKV0sXG59KVxuZXhwb3J0IGNsYXNzIFdpemlCbG9ja0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBhdmFpbGFibGVDb21wb25lbnRzOiBBcnJheTxzdHJpbmc+O1xuICAgIEBJbnB1dCgpIHRleHRzOiBUcmFuc2xhdGlvbnNEdG8gPSBudWxsO1xuICAgIEBJbnB1dCgpIGNvbnRlbnQgPSBbXTtcbiAgICBASW5wdXQoKSB2ZXJib3NlID0gZmFsc2U7XG4gICAgQElucHV0KCkgaXNJbkRldiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIGNvbnRlbnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxQYXJlbnRCbG9ja0R0bz4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQFZpZXdDaGlsZCgnY29tcG9uZW50TGlzdCcpIGNvbXBvbmVudExpc3Q7XG5cbiAgICBicmVha1BvaW50U2l6ZSA9IDE0MjE7XG4gICAgYmxvY2tzQ29udGVudHMgPSBbXTtcbiAgICBzZWxlY3RlZFN0cnVjdHVyZTogU3RydWN0dXJlQ29uZmlnRHRvID0gbnVsbDtcbiAgICBzZWxlY3RlZENvbmZpZzogRm9ybXNEdG88UGFyZW50QmxvY2tEdG8+ID0gbnVsbDtcbiAgICBjb21wb25lbnRzOiBTdHJ1Y3R1cmVzTGlzdER0byA9IG51bGw7XG4gICAgdHJhbnNsYXRpb246IFRyYW5zbGF0aW9uc0R0byA9IG51bGw7XG4gICAgaXNIaWRkZW5Db25maWcgPSBbXTtcbiAgICBpc0ZpcnN0SW5Mb29wID0gZmFsc2U7XG4gICAgbG9vcEluZGV4ID0gMDtcbiAgICBob3ZlckNoaWxkcmVuOiBib29sZWFuIHwgc3RyaW5nO1xuXG4gICAgY3VycmVudFRvcFRvb2wgPSAwO1xuICAgIHRvb2xVbnBpbiA9IGZhbHNlO1xuICAgIHRvb2xIaWRkZW4gPSBmYWxzZTtcbiAgICBzbWFsbFNjcmVlbiA9IGZhbHNlO1xuXG5cbiAgICBibG9ja0NvbXBvbmVudDogQmxvY2tzQ29tcG9uZW50O1xuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcHJpdmF0ZSBjb25maWdFdmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICBwcml2YXRlIGNvbnRlbnRFdmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICBwcml2YXRlIHdpemlibG9ja1NlcnZpY2VzTGlzdDogQXJyYXk8YW55PiA9IFtdO1xuXG4gICAgcHJpdmF0ZSBwcm9ncmVzc2l2ZUJsb2NrTG9hZGluZ0ludGVydmFsOiBhbnk7XG4gICAgcHJpdmF0ZSBMT0FESU5HX09GRlNFVCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICBwcml2YXRlIFBST0dSRVNTSVZFX0xPQURJTkdfSU5URVJWQUwgPSAzMDAwO1xuXG4gICAgcHJpdmF0ZSBhbGxXaXppYmxvY2tzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB3aXppQmxvY2tTZXJ2aWNlOiBXaXppQmxvY2tTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29udGVudFNlcnZpY2U6IENvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICAgICkge31cblxuICAgIEBWaWV3Q2hpbGQoJ2Jsb2NrJywgeyBzdGF0aWM6IGZhbHNlIH0pIHNldCBjb250ZW50QmxvY2soY29udHJvbDogQmxvY2tzQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuYmxvY2tDb21wb25lbnQgPSBjb250cm9sO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnLCBbXSkgb25XaW5kb3dTY3JvbGwoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUb3AgPSB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgICAgaWYgKHRoaXMudG9vbFVucGluICYmICF0aGlzLnRvb2xIaWRkZW4gJiYgTWF0aC5hYnMoY3VycmVudFRvcCAtIHRoaXMuY3VycmVudFRvcFRvb2wpID4gODAwKSB7XG4gICAgICAgICAgICB0aGlzLnRvb2xIaWRkZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5hbGxXaXppYmxvY2tzTG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrV2l6aWJsb2NrcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5hdmFpbGFibGVDb21wb25lbnRzIHx8IHRoaXMuYXZhaWxhYmxlQ29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlQ29tcG9uZW50cyA9IFtcbiAgICAgICAgICAgICAgICBUeXBlc0R0by5zbGlkZXJzLFxuICAgICAgICAgICAgICAgIFR5cGVzRHRvLnZpZGVvcyxcbiAgICAgICAgICAgICAgICBUeXBlc0R0by5sYXVuY2hfdmlkZW9zLFxuICAgICAgICAgICAgICAgIFR5cGVzRHRvLmltYWdlcyxcbiAgICAgICAgICAgICAgICBUeXBlc0R0by50ZXh0X2JhY2tncm91bmRzLFxuICAgICAgICAgICAgICAgIFR5cGVzRHRvLmltYWdlc190ZXh0cyxcbiAgICAgICAgICAgICAgICBUeXBlc0R0by50ZXh0cyxcbiAgICAgICAgICAgICAgICBUeXBlc0R0by5mb3JtcyxcbiAgICAgICAgICAgICAgICBUeXBlc0R0by5wcm9kdWN0c19saXN0LFxuICAgICAgICAgICAgICAgIFR5cGVzRHRvLnByb2R1Y3QsXG4gICAgICAgICAgICAgICAgVHlwZXNEdG8uc29jaWFscyxcbiAgICAgICAgICAgICAgICBUeXBlc0R0by5yYXNzdXJhbmNlcyxcbiAgICAgICAgICAgICAgICBUeXBlc0R0by5uZXdzbGV0dGVyLFxuICAgICAgICAgICAgICAgIFR5cGVzRHRvLndpdG5lc3MsXG4gICAgICAgICAgICAgICAgVHlwZXNEdG8ucmV2aWV3cyxcbiAgICAgICAgICAgICAgICBUeXBlc0R0by5xdW90ZXMsXG4gICAgICAgICAgICAgICAgVHlwZXNEdG8udGltZXIsXG4gICAgICAgICAgICAgICAgVHlwZXNEdG8ubWFwLFxuICAgICAgICAgICAgICAgIFR5cGVzRHRvLmNvZGUsXG4gICAgICAgICAgICAgICAgVHlwZXNEdG8uc2VwYXJhdG9yLFxuICAgICAgICAgICAgICAgIFR5cGVzRHRvLmZhcSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLnNldERvY3VtZW50RXZlbnRMaXN0ZW5lcigpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzSW5EZXYpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pc0luRGV2ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud2l6aUJsb2NrU2VydmljZS5zZXRDb25maWcodGhpcy5hdmFpbGFibGVDb21wb25lbnRzLCB0aGlzLnRleHRzKTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRzID0gdGhpcy53aXppQmxvY2tTZXJ2aWNlLmdldENvbXBvbmVudHMoKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbiA9IHRoaXMud2l6aUJsb2NrU2VydmljZS5nZXRUcmFuc2xhdGlvbigpO1xuICAgICAgICB0aGlzLndpemlibG9ja1NlcnZpY2VzTGlzdCA9IHRoaXMud2l6aUJsb2NrU2VydmljZS5nZXRCbG9ja3NTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuY29uZmlnRXZlbnRTdWJzY3JpcHRpb24gPSB0aGlzLmNvbmZpZ1NlcnZpY2VcbiAgICAgICAgICAgIC5jb25maWdFdmVudCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29uZmlnID0gdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZztcbiAgICAgICAgICAgICAgICB0aGlzLmlzRmlyc3RJbkxvb3AgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvb3BJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBiIG9mIHRoaXMuYmxvY2tzQ29udGVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiWydibG9jayddICYmIGJbJ2Jsb2NrJ11bJ3V1aWQnXSA9PT0gdGhpcy5zZWxlY3RlZENvbmZpZy5ibG9jay51dWlkICYmIHRoaXMubG9vcEluZGV4IDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNGaXJzdEluTG9vcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvb3BJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJDaGlsZHJlbiA9IHRoaXMuc2VsZWN0ZWRDb25maWcuYmxvY2sudXVpZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdmVyQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudG9vbEhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEhpZGRlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFN0cnVjdHVyZSA9PT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkQ29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U3RydWN0dXJlT25GbHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMudmVyYm9zZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0F2YWlsYWJsZSBjb250ZW50IG9uIHN0YXJ0JywgdGhpcy5jb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRlbnRFdmVudFN1YnNjcmlwdGlvbiA9IHRoaXMuY29udGVudFNlcnZpY2VcbiAgICAgICAgICAgIC5jb250ZW50RXZlbnQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udGVudFNlcnZpY2UuY29udGVudHMubGVuZ3RoIDwgdGhpcy5ibG9ja3NDb250ZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9wID0gd2luZG93LnNjcm9sbFk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUG9zaXRpb25Ub29scyh0b3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmJsb2Nrc0NvbnRlbnRzID0gdGhpcy5jb250ZW50U2VydmljZS5jb250ZW50cztcbiAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IGJsb2NrIGxvYWRpbmcgaXNzdWVcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0Q29udGVudCgpO1xuICAgICAgICAgICAgICAgIH0sIDIwKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbnRlbnRTZXJ2aWNlLmNvbnRlbnRzID0gdGhpcy5jb250ZW50O1xuICAgICAgICB0aGlzLnJlc2l6ZVdpdGhXaWR0aCh3aW5kb3cuaW5uZXJXaWR0aCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmNvbnRlbnRTZXJ2aWNlLmNvbnRlbnRzKSB7XG4gICAgICAgICAgICBpZiAoKGl0ZW0gaW5zdGFuY2VvZiBGb3Jtc0R0bzxQYXJlbnRCbG9ja0R0bz4pICAmJiB0eXBlb2YgaXRlbS5ibG9jay5oaWRlX2Jsb2NrICE9PSB0eXBlb2YgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uYmxvY2suaGlkZV9ibG9jayA9PT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNIaWRkZW5Db25maWcucHVzaChpdGVtLmJsb2NrLnV1aWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBzdGFydCBwcm9ncmVzc2l2ZSBsb2FkaW5nXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NpdmVCbG9ja0xvYWRpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NpdmVCbG9ja0xvYWRpbmcoKTtcbiAgICAgICAgfSwgdGhpcy5QUk9HUkVTU0lWRV9MT0FESU5HX0lOVEVSVkFMKTtcbiAgICB9XG5cbiAgICBhZGRUaGlzKHNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuYmxvY2tDb21wb25lbnQuYWRkVGhpc1NlbGVjdGVkKHNlbGVjdGVkLCB0aGlzLnZlcmJvc2UpO1xuICAgIH1cblxuICAgIGNsb3NlQ29uZmlnKCkge1xuICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnID0gbnVsbDtcbiAgICB9XG5cbiAgICBzZWxlY3RTdHJ1Y3R1cmVPbkZseSgpIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnRzLmNvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICBjb21wb25lbnQuY29udGVudHMuZm9yRWFjaCgoc3ViQ29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN1YkNvbXBvbmVudC50eXBlID09PSB0aGlzLnNlbGVjdGVkQ29uZmlnLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN0cnVjdHVyZSA9IGNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZW1pdENvbnRlbnQoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tXaXppYmxvY2tzKCk7XG4gICAgICAgIGNvbnN0IHBhcnNlZER0byA9IFtdO1xuICAgICAgICB0aGlzLmJsb2Nrc0NvbnRlbnRzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgIHBhcnNlZER0by5wdXNoKHYuYmxvY2spO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb250ZW50Q2hhbmdlLmVtaXQocGFyc2VkRHRvKTtcbiAgICB9XG5cbiAgICBvblJlc2l6ZSgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5yZXNpemVXaXRoV2lkdGgoJGV2ZW50LnRhcmdldC5pbm5lcldpZHRoKTtcbiAgICB9XG5cbiAgICByZXNpemVXaXRoV2lkdGgoY3VycmVudEJyb3dzZXJTaXplKSB7XG4gICAgICAgIGlmIChjdXJyZW50QnJvd3NlclNpemUgPCB0aGlzLmJyZWFrUG9pbnRTaXplKSB7XG4gICAgICAgICAgICB0aGlzLnRvb2xVbnBpbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNtYWxsU2NyZWVuID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudG9vbFVucGluID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNtYWxsU2NyZWVuID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRVbnBpbigpIHtcbiAgICAgICAgY29uc3QgdG9wID0gd2luZG93LnNjcm9sbFk7XG4gICAgICAgIHRoaXMudG9vbFVucGluID0gIXRoaXMudG9vbFVucGluO1xuICAgICAgICBpZiAodGhpcy50b29sVW5waW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUG9zaXRpb25Ub29scyh0b3ApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0SGlkZGVuKCkge1xuICAgICAgICBjb25zdCB0b3AgPSB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgICAgdGhpcy50b29sSGlkZGVuID0gIXRoaXMudG9vbEhpZGRlbjtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVQb3NpdGlvblRvb2xzKHRvcCk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlUG9zaXRpb25Ub29scyh0b3ApIHtcbiAgICAgICAgaWYgKCF0aGlzLnRvb2xIaWRkZW4pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRvcFRvb2wgPSB0b3A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb3BUb29sID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoYW5nZUNvbmZpZ1dpemlibG9ja3MoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbmZpZyA9IGV2ZW50LmNvbmZpZztcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlbGVjdGVkQ29uZmlnLmZvcm1zICE9PSB0eXBlb2YgdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5zZWxlY3RlZENvbmZpZy5mb3Jtcykge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSAnaGlkZV9ibG9jaycgJiYgaXRlbS52YWx1ZSA9PT0gJzAnICYmICF0aGlzLmlzSGlkZGVuQ29uZmlnLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRDb25maWcuYmxvY2sudXVpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0hpZGRlbkNvbmZpZy5wdXNoKHRoaXMuc2VsZWN0ZWRDb25maWcuYmxvY2sudXVpZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmlkID09PSAnaGlkZV9ibG9jaycgJiYgaXRlbS52YWx1ZSA9PT0gJzEnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNIaWRkZW5Db25maWcgPSB0aGlzLmlzSGlkZGVuQ29uZmlnLmZpbHRlcigoZSkgPT4gZSAhPT0gdGhpcy5zZWxlY3RlZENvbmZpZy5ibG9jay51dWlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53aXppQmxvY2tTZXJ2aWNlLl9ibG9ja3NTZXJ2aWNlID0gW107XG4gICAgICAgIHRoaXMuY29udGVudCA9IFtdO1xuICAgICAgICB0aGlzLmJsb2Nrc0NvbnRlbnRzID0gW107XG5cbiAgICAgICAgdGhpcy5jb25maWdFdmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmNvbnRlbnRFdmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmNvbnRlbnRTZXJ2aWNlLmRlbGV0ZUFsbCgpO1xuXG4gICAgICAgIGlmICh0aGlzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdHb29kQnllIFdpemlCbG9jayBZb3UgV2VyZSBMb3ZlZCcsICdEZXN0cm95IG9mIFRoaXMgU2Vzc2lvbicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjaGVja1dpemlibG9ja3MoKSB7XG4gICAgICAgIGxldCBibG9ja0NvbnRhaW5lcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcud2ItYmxvY2tzX19jb250YWluZXInKTtcbiAgICAgICAgaWYgKGJsb2NrQ29udGFpbmVycy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsb2FkZWRBbGxCbG9ja3MgPSB0cnVlO1xuICAgICAgICBsZXQgbW9kaWZpZWRDb250ZW50ID0gZmFsc2U7XG4gICAgICAgIGxldCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgICAgIHZhciBzY3JvbGxZID0gd2luZG93LnNjcm9sbFk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ibG9ja3NDb250ZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKCEodGhpcy5ibG9ja3NDb250ZW50c1tpXSBpbnN0YW5jZW9mIEZvcm1zRHRvPFBhcmVudEJsb2NrRHRvPikpIHtcbiAgICAgICAgICAgICAgICBsb2FkZWRBbGxCbG9ja3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IGJsb2NrQ29udGFpbmVyc1tpXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICB2YXIgcG9zID0gcmVjdC50b3AgKyBzY3JvbGxZO1xuICAgICAgICAgICAgICAgIGlmICgod2luZG93SGVpZ2h0ICsgc2Nyb2xsWSArIHRoaXMuTE9BRElOR19PRkZTRVQpID49IChwb3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tzQ29udGVudHNbaV0gPSBhd2FpdCB0aGlzLmxvYWRXaXppYmxvY2sodGhpcy5ibG9ja3NDb250ZW50c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkQ29udGVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hbGxXaXppYmxvY2tzTG9hZGVkID0gbG9hZGVkQWxsQmxvY2tzO1xuICAgICAgICBpZiAobW9kaWZpZWRDb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRTZXJ2aWNlLmNvbnRlbnRzID0gdGhpcy5ibG9ja3NDb250ZW50cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hbGxXaXppYmxvY2tzTG9hZGVkICYmIHRoaXMucHJvZ3Jlc3NpdmVCbG9ja0xvYWRpbmdJbnRlcnZhbCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnByb2dyZXNzaXZlQmxvY2tMb2FkaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc2l2ZUJsb2NrTG9hZGluZ0ludGVydmFsID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbG9hZFdpemlibG9jayhibG9jazogYW55KSB7XG4gICAgICAgIGxldCBjb250ZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy53aXppYmxvY2tTZXJ2aWNlc0xpc3QuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGJsb2NrLnR5cGUgPT09IHNlcnZpY2UudHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzZXJ2aWNlLmdldEZvcm0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignTm8gZm9ybSBmb3IgJyArIHNlcnZpY2UudHlwZSgpICsgJycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBzZXJ2aWNlLmdldEZvcm0oYmxvY2spO1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50LnR5cGUgPSBzZXJ2aWNlLnR5cGUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1NldCBhIGNvbnRlbnQnLCBjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvZ3Jlc3NpdmVCbG9ja0xvYWRpbmcoKSB7XG4gICAgICAgIGxldCBsb2FkZWRBbGxCbG9ja3MgPSB0cnVlO1xuICAgICAgICBsZXQgYmxvY2tzTGVmdFRvTG9hZCA9IDM7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmJsb2Nrc0NvbnRlbnRzLmxlbmd0aDsgKytpbmRleCkge1xuICAgICAgICAgICAgaWYgKGJsb2Nrc0xlZnRUb0xvYWQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKHRoaXMuYmxvY2tzQ29udGVudHNbaW5kZXhdIGluc3RhbmNlb2YgRm9ybXNEdG88UGFyZW50QmxvY2tEdG8+KSkge1xuICAgICAgICAgICAgICAgIGxvYWRlZEFsbEJsb2NrcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tzQ29udGVudHNbaW5kZXhdID0gdGhpcy5sb2FkV2l6aWJsb2NrKHRoaXMuYmxvY2tzQ29udGVudHNbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICBibG9ja3NMZWZ0VG9Mb2FkLS07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hbGxXaXppYmxvY2tzTG9hZGVkID0gbG9hZGVkQWxsQmxvY2tzO1xuICAgICAgICBpZiAodGhpcy5hbGxXaXppYmxvY2tzTG9hZGVkICYmIHRoaXMucHJvZ3Jlc3NpdmVCbG9ja0xvYWRpbmdJbnRlcnZhbCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnByb2dyZXNzaXZlQmxvY2tMb2FkaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc2l2ZUJsb2NrTG9hZGluZ0ludGVydmFsID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBpZD1cIndiLWNvbnRhaW5lclwiXG4gICAgY2xhc3M9XCJjb2x1bW5zIHdiLWNvbnRhaW5lclwiXG4gICAgKm5nSWY9XCJ0cmFuc2xhdGlvblwiXG4gICAgI2NvbnRhaW5lclxuICAgICh3aW5kb3c6cmVzaXplKT1cIm9uUmVzaXplKCRldmVudClcIlxuICAgIFtuZ0NsYXNzXT1cInsgJ2lzLXNtYWxsc2NyZWVuJzogc21hbGxTY3JlZW4gfVwiXG4+XG4gICAgPGRpdlxuICAgICAgICBjZGtEcmFnXG4gICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIXRvb2xVbnBpblwiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uIHdiLWNvbnRhaW5lcl9fdG9vbHNcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy11bnBpbm5lZCc6IHRvb2xVbnBpbiAmJiAhdG9vbEhpZGRlbiwgJ2lzLXNtYWxsc2NyZWVuJzogc21hbGxTY3JlZW4sICdoYXMtbm8tdG9vbCc6IHRvb2xIaWRkZW4gfVwiXG4gICAgICAgIFtzdHlsZS50b3AucHhdPVwiY3VycmVudFRvcFRvb2xcIlxuICAgID5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdpcy1oaWRkZW4nOiAhdG9vbEhpZGRlbiB9XCIgKGNsaWNrKT1cInNldEhpZGRlbigpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgIDxkaXYgW253YlRvb2xUaXBdPVwiJ3diLnBhbmVsLmh0bWwuMScgfCB0cmFuc2xhdGVcIiBud2JUb29sVGlwUG9zaXRpb249XCJyaWdodFwiIGNsYXNzPVwiaXMtdG9vbHRpcC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXIgZmEtYXJyb3ctZnJvbS1sZWZ0XCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2lzLWhpZGRlbic6IHRvb2xIaWRkZW4gfVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndiLXRvb2xzXCIgKm5nSWY9XCJzZWxlY3RlZFN0cnVjdHVyZSA9PT0gbnVsbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Yi10b29sc19faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwid2ItdG9vbHNfX2hlYWRlcl9fYWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXJvdW5kZWQgaXMtdG9vbHRpcC1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbndiVG9vbFRpcF09XCJ0b29sVW5waW4gPyAnd2IucGFuZWwuaHRtbC4yJyA6ICgnd2IucGFuZWwuaHRtbC4zJyB8IHRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG53YlRvb2xUaXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRoaXMuc2V0VW5waW4oKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGkgY2xhc3M9XCJmYXJcIiBbbmdDbGFzc109XCJ7ICdmYS11bmxpbmsnOiAhdG9vbFVucGluLCAnZmEtbGluayc6IHRvb2xVbnBpbiB9XCI+PC9pXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1yb3VuZGVkIGlzLXRvb2x0aXAtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW253YlRvb2xUaXBdPVwiJ3diLnBhbmVsLmh0bWwuNCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG53YlRvb2xUaXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEhpZGRlbigpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48aSBjbGFzcz1cImZhciBmYS1hcnJvdy1mcm9tLXJpZ2h0XCI+PC9pXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwid2ItdG9vbHNfX2hlYWRlcl9fbGlzdFwiPnt7IHRyYW5zbGF0aW9uLmxpc3RfY29tcG9uZW50IHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1zY3JvbGxiYXJcbiAgICAgICAgICAgICAgICAgICAgW3Zpc2liaWxpdHldPVwiJ2hvdmVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcG9uZW50c1wiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlOyBtYXgtaGVpZ2h0OiA4NXZoXCJcbiAgICAgICAgICAgICAgICAgICAgW2F1dG9IZWlnaHREaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2ItdG9vbHNfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLW11bHRpbGluZVwiIFtAYW5pbWF0ZUxpc3RGcm9tTGVmdF09XCJjb21wb25lbnRzLmNvbXBvbmVudHMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbiBpcy02XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzLmNvbXBvbmVudHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRTdHJ1Y3R1cmUgPSBjb21wb25lbnQ7IHNlbGVjdGVkQ29uZmlnID0gbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiJ2Fzc2V0cy9ibG9ja3MvaW1hZ2VzL2ljb25zLycgKyBjb21wb25lbnQuaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbHRdPVwiY29tcG9uZW50LnRleHQgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcG9uZW50LmltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57eyBjb21wb25lbnQudGV4dCB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1zY3JvbGxiYXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Yi1jb25maWd1cmF0aW9uXCIgKm5nSWY9XCJzZWxlY3RlZFN0cnVjdHVyZSAhPT0gbnVsbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Yi1jb25maWd1cmF0aW9uX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ3Yi10b29sc19faGVhZGVyX19hY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtcm91bmRlZCBpcy10b29sdGlwLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtud2JUb29sVGlwXT1cInRvb2xVbnBpbiA/ICd3Yi5wYW5lbC5odG1sLjInIDogKCd3Yi5wYW5lbC5odG1sLjMnIHwgdHJhbnNsYXRlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbndiVG9vbFRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGhpcy5zZXRVbnBpbigpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48aSBjbGFzcz1cImZhbFwiIFtuZ0NsYXNzXT1cInsgJ2ZhLXVubGluayc6ICF0b29sVW5waW4sICdmYS1saW5rJzogdG9vbFVucGluIH1cIj48L2lcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXJvdW5kZWQgaXMtdG9vbHRpcC1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbndiVG9vbFRpcF09XCInd2IucGFuZWwuaHRtbC40JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbndiVG9vbFRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0SGlkZGVuKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxpIGNsYXNzPVwiZmFyIGZhLWFycm93LWZyb20tcmlnaHRcIj48L2lcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ3Yi1jb25maWd1cmF0aW9uX19oZWFkZXItY2xpY2sgd2ItdG9vbHNfX2hlYWRlcl9fbGlzdFwiIChjbGljayk9XCJzZWxlY3RlZFN0cnVjdHVyZSA9IG51bGw7IGNsb3NlQ29uZmlnKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFyIGZhLWFuZ2xlLWxlZnRcIj48L2k+IHt7IHNlbGVjdGVkU3RydWN0dXJlLnRleHQgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Yi1jb25maWd1cmF0aW9uX19zdWJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImNsb3NlQ29uZmlnKClcIiBbbmdDbGFzc109XCJ7ICdpcy1hY3RpdmUnOiBzZWxlY3RlZENvbmZpZyA9PT0gbnVsbCB9XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uLnN0cnVjdHVyZSB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICB9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwieyAnaXMtYWN0aXZlJzogc2VsZWN0ZWRDb25maWcgIT09IG51bGwgfVwiICpuZ0lmPVwic2VsZWN0ZWRDb25maWcgIT09IG51bGxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24uY29uZmlnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgIH19PC9hPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1zY3JvbGxiYXJcbiAgICAgICAgICAgICAgICAgICAgW3Zpc2liaWxpdHldPVwiJ2hvdmVyJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHNcIlxuICAgICAgICAgICAgICAgICAgICBwZXJmZWN0U2Nyb2xsYmFyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlOyBtYXgtaGVpZ2h0OiA4MHZoXCJcbiAgICAgICAgICAgICAgICAgICAgW2F1dG9IZWlnaHREaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2ItY29uZmlndXJhdGlvbl9fY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRDb25maWcgPT09IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid2ItY29uZmlndXJhdGlvbl9fY29udGVudF9zdHJ1Y3R1cmVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQGFuaW1hdGVMaXN0RnJvbVJpZ2h0XT1cInNlbGVjdGVkU3RydWN0dXJlLmNvbnRlbnRzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3REaXNhYmxlZF09XCJibG9ja3NDb250ZW50cy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJbJ2Jsb2NrLWNvbnRlbnQnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzZWxlY3RlZCBvZiBzZWxlY3RlZFN0cnVjdHVyZS5jb250ZW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwic2VsZWN0ZWQuaW1hZ2UgfCBpbWdQYXRoXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e3sgc2VsZWN0ZWQubmFtZSB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3Yi1jb25maWd1cmF0aW9uX19jb250ZW50X3N0cnVjdHVyZXNfX2RyYWdnZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cInNlbGVjdGVkLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrRHJhZ0hhbmRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtZHJhZ2dhYmxlJzogYmxvY2tzQ29udGVudHMubGVuZ3RoIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFRoaXMoc2VsZWN0ZWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ3Yi1jb25maWd1cmF0aW9uX19jb250ZW50X3N0cnVjdHVyZXNfX3ByZXZpZXdcIiAqY2RrRHJhZ1ByZXZpZXc+PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ3Yi1jb25maWd1cmF0aW9uX19jb250ZW50X3N0cnVjdHVyZXNfX3BsYWNlaG9sZGVyXCIgKmNka0RyYWdQbGFjZWhvbGRlcj48c3Bhbj48L3NwYW4+PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkQ29uZmlnICE9PSBudWxsXCIgY2xhc3M9XCJ3Yi1jb25maWd1cmF0aW9uX19jb250ZW50X2NvbmZpZ3VyYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2ItY29uZmlnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNGaXJzdF09XCJpc0ZpcnN0SW5Mb29wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ3NdPVwic2VsZWN0ZWRDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlQ29uZmlnKT1cImNoYW5nZUNvbmZpZ1dpemlibG9ja3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvd2ItY29uZmlncz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXNjcm9sbGJhcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIHdiLWNvbnRhaW5lcl9fY29udGVudFwiIFtuZ0NsYXNzXT1cInsgJ2hhcy1uby10b29sJzogdG9vbEhpZGRlbiB9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3Yi1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2ItY29udGVudF9faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPHA+PGkgY2xhc3M9XCJmYXMgZmEtbG9ja1wiPjwvaT4ge3sgdHJhbnNsYXRpb24uaGVhZGVyIHwgdHJhbnNsYXRlIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2ItY29udGVudF9fY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDx3Yi1ibG9ja3MgW2R5bmFtaWNIaWRkZW5dPVwiaXNIaWRkZW5Db25maWdcIiBbc2VsZWN0ZWRDb25maWddPVwiaG92ZXJDaGlsZHJlblwiICNibG9jayBbY29udGVudHNdPVwiYmxvY2tzQ29udGVudHNcIj48L3diLWJsb2Nrcz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndiLWNvbnRlbnRfX2Zvb3RlclwiPlxuICAgICAgICAgICAgICAgIDxwPjxpIGNsYXNzPVwiZmFzIGZhLWxvY2tcIj48L2k+IHt7IHRyYW5zbGF0aW9uLmZvb3RlciB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGhyIGlkPVwid2ItZm9vdGVyX19ibG9ja1wiIC8+XG4iXX0=
@@ -7880,7 +7880,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImpor
7880
7880
 
7881
7881
  class ContentService {
7882
7882
  constructor() {
7883
- this.duplicateContent = new EventEmitter();
7884
7883
  this._contents = [];
7885
7884
  this.contentsSource = new Subject();
7886
7885
  this.contentsDone = this.contentsSource.asObservable();
@@ -7935,7 +7934,6 @@ class ContentService {
7935
7934
  let toCopy = this.deepCopy(this._contents[keyToCopy].block);
7936
7935
  toCopy.uuid = v4();
7937
7936
  this._contents.splice(keyToCopy + 1, 0, toCopy);
7938
- this.duplicateContent.emit(toCopy);
7939
7937
  }
7940
7938
  this.contentsSource.next();
7941
7939
  }
@@ -7991,9 +7989,6 @@ class ContentService {
7991
7989
  }
7992
7990
  throw new Error('Unable to copy obj! Its type not supported.');
7993
7991
  }
7994
- getDuplicateContentEmitter() {
7995
- return this.duplicateContent;
7996
- }
7997
7992
  }
7998
7993
  ContentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: ContentService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7999
7994
  ContentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: ContentService });
@@ -25334,12 +25329,6 @@ class WiziBlockComponent {
25334
25329
  }
25335
25330
  this.wiziBlockService.setConfig(this.availableComponents, this.texts);
25336
25331
  this.components = this.wiziBlockService.getComponents();
25337
- this.duplicateContentSubscription = this.contentService.getDuplicateContentEmitter().subscribe((block) => {
25338
- // prevent display init issue
25339
- setTimeout(() => {
25340
- this.checkWiziblocks();
25341
- }, 20);
25342
- });
25343
25332
  this.translation = this.wiziBlockService.getTranslation();
25344
25333
  this.wiziblockServicesList = this.wiziBlockService.getBlocksService();
25345
25334
  this.configEventSubscription = this.configService
@@ -25380,7 +25369,10 @@ class WiziBlockComponent {
25380
25369
  this.calculatePositionTools(top);
25381
25370
  }
25382
25371
  this.blocksContents = this.contentService.contents;
25383
- this.emitContent();
25372
+ // prevent block loading issue
25373
+ setTimeout(() => {
25374
+ this.emitContent();
25375
+ }, 20);
25384
25376
  });
25385
25377
  this.contentService.contents = this.content;
25386
25378
  this.resizeWithWidth(window.innerWidth);
@@ -25391,10 +25383,6 @@ class WiziBlockComponent {
25391
25383
  }
25392
25384
  }
25393
25385
  }
25394
- // added small timeout to prevent any loading issues
25395
- setTimeout(() => {
25396
- this.checkWiziblocks();
25397
- }, 100);
25398
25386
  // start progressive loading
25399
25387
  this.progressiveBlockLoadingInterval = setInterval(() => {
25400
25388
  this.progressiveBlockLoading();
@@ -25416,11 +25404,14 @@ class WiziBlockComponent {
25416
25404
  });
25417
25405
  }
25418
25406
  emitContent() {
25419
- const parsedDto = [];
25420
- this.blocksContents.forEach((v) => {
25421
- parsedDto.push(v.block);
25407
+ return __awaiter(this, void 0, void 0, function* () {
25408
+ yield this.checkWiziblocks();
25409
+ const parsedDto = [];
25410
+ this.blocksContents.forEach((v) => {
25411
+ parsedDto.push(v.block);
25412
+ });
25413
+ this.contentChange.emit(parsedDto);
25422
25414
  });
25423
- this.contentChange.emit(parsedDto);
25424
25415
  }
25425
25416
  onResize($event) {
25426
25417
  this.resizeWithWidth($event.target.innerWidth);
@@ -25483,22 +25474,29 @@ class WiziBlockComponent {
25483
25474
  }
25484
25475
  checkWiziblocks() {
25485
25476
  return __awaiter(this, void 0, void 0, function* () {
25486
- let loadedAllBlocks = true;
25487
25477
  let blockContainers = document.querySelectorAll('.wb-blocks__container');
25478
+ if (blockContainers.length <= 0) {
25479
+ return;
25480
+ }
25481
+ let loadedAllBlocks = true;
25482
+ let modifiedContent = false;
25488
25483
  let windowHeight = window.innerHeight;
25489
25484
  var scrollY = window.scrollY;
25490
- this.content.forEach((block, index) => {
25491
- if (!(block instanceof (FormsDto))) {
25485
+ for (var i = 0; i < this.blocksContents.length; ++i) {
25486
+ if (!(this.blocksContents[i] instanceof (FormsDto))) {
25492
25487
  loadedAllBlocks = false;
25493
- var rect = blockContainers[index].getBoundingClientRect();
25488
+ var rect = blockContainers[i].getBoundingClientRect();
25494
25489
  var pos = rect.top + scrollY;
25495
25490
  if ((windowHeight + scrollY + this.LOADING_OFFSET) >= (pos)) {
25496
- this.content[index] = this.loadWiziblock(block);
25491
+ this.blocksContents[i] = yield this.loadWiziblock(this.blocksContents[i]);
25492
+ modifiedContent = true;
25497
25493
  }
25498
25494
  }
25499
- });
25495
+ }
25500
25496
  this.allWiziblocksLoaded = loadedAllBlocks;
25501
- this.contentService.contents = this.content;
25497
+ if (modifiedContent) {
25498
+ this.contentService.contents = this.blocksContents;
25499
+ }
25502
25500
  if (this.allWiziblocksLoaded && this.progressiveBlockLoadingInterval) {
25503
25501
  clearInterval(this.progressiveBlockLoadingInterval);
25504
25502
  this.progressiveBlockLoadingInterval = null;
@@ -25506,33 +25504,35 @@ class WiziBlockComponent {
25506
25504
  });
25507
25505
  }
25508
25506
  loadWiziblock(block) {
25509
- let content = null;
25510
- this.wiziblockServicesList.forEach((service) => {
25511
- if (block.type === service.type()) {
25512
- if (typeof service.getForm !== 'function') {
25513
- console.error('No form for ' + service.type() + '');
25514
- }
25515
- else {
25516
- content = service.getForm(block);
25517
- content.type = service.type();
25518
- if (this.verbose) {
25519
- console.log('Set a content', content);
25507
+ return __awaiter(this, void 0, void 0, function* () {
25508
+ let content = null;
25509
+ this.wiziblockServicesList.forEach((service) => {
25510
+ if (block.type === service.type()) {
25511
+ if (typeof service.getForm !== 'function') {
25512
+ console.error('No form for ' + service.type() + '');
25513
+ }
25514
+ else {
25515
+ content = service.getForm(block);
25516
+ content.type = service.type();
25517
+ if (this.verbose) {
25518
+ console.log('Set a content', content);
25519
+ }
25520
25520
  }
25521
25521
  }
25522
- }
25522
+ });
25523
+ return content;
25523
25524
  });
25524
- return content;
25525
25525
  }
25526
25526
  progressiveBlockLoading() {
25527
25527
  let loadedAllBlocks = true;
25528
25528
  let blocksLeftToLoad = 3;
25529
- for (let index = 0; index < this.content.length; ++index) {
25529
+ for (let index = 0; index < this.blocksContents.length; ++index) {
25530
25530
  if (blocksLeftToLoad === 0) {
25531
25531
  break;
25532
25532
  }
25533
- if (!(this.content[index] instanceof (FormsDto))) {
25533
+ if (!(this.blocksContents[index] instanceof (FormsDto))) {
25534
25534
  loadedAllBlocks = false;
25535
- this.content[index] = this.loadWiziblock(this.content[index]);
25535
+ this.blocksContents[index] = this.loadWiziblock(this.blocksContents[index]);
25536
25536
  blocksLeftToLoad--;
25537
25537
  }
25538
25538
  }