@magic-xpa/gui 4.1000.0-dev4100.21 → 4.1000.0-dev4100.210

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.
@@ -4,6 +4,15 @@ import { StorageAttribute, StrUtil, PICInterface } from "@magic-xpa/utils";
4
4
  import { Events } from "../../Events";
5
5
  import { ValidationDetailsBase } from "./ValidationDetailsBase";
6
6
  export class ValidationDetails extends ValidationDetailsBase {
7
+ get ErrorMessage() {
8
+ return this.errMessage;
9
+ }
10
+ set ErrorMessage(msg) {
11
+ this.errMessage = msg;
12
+ }
13
+ get ValidationFailed() {
14
+ return this._validationFailed;
15
+ }
7
16
  constructor(oldvalueOrRangeStrOrVd, val, range, pic, control) {
8
17
  super();
9
18
  this._control = null;
@@ -24,15 +33,6 @@ export class ValidationDetails extends ValidationDetailsBase {
24
33
  else if (arguments.length === 1 && (oldvalueOrRangeStrOrVd === null || oldvalueOrRangeStrOrVd instanceof ValidationDetails))
25
34
  this.constructor_2(oldvalueOrRangeStrOrVd);
26
35
  }
27
- get ErrorMessage() {
28
- return this.errMessage;
29
- }
30
- set ErrorMessage(msg) {
31
- this.errMessage = msg;
32
- }
33
- get ValidationFailed() {
34
- return this._validationFailed;
35
- }
36
36
  constructor_0(oldvalue, val, range, pic, control) {
37
37
  this._picData = pic;
38
38
  this._oldvalue = oldvalue;
@@ -245,4 +245,4 @@ export class ValidationDetails extends ValidationDetailsBase {
245
245
  return clone;
246
246
  }
247
247
  }
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsaWRhdGlvbkRldGFpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZ3VpL1ZhbGlkYXRpb25EZXRhaWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsYUFBYSxFQUFFLElBQUksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDekUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdoRSxNQUFNLE9BQU8saUJBQWtCLFNBQVEscUJBQXFCO0lBb0MxRCxZQUFZLHNCQUE0QixFQUFFLEdBQVksRUFBRSxLQUFjLEVBQUUsR0FBUyxFQUFFLE9BQXVCO1FBQ3hHLEtBQUssRUFBRSxDQUFDO1FBaENGLGFBQVEsR0FBa0IsSUFBSSxDQUFDO1FBQy9CLG9CQUFlLEdBQW1CLElBQUksQ0FBQztRQUN2QyxhQUFRLEdBQVEsSUFBSSxDQUFDO1FBQ3JCLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNyQyxpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFDbkMsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixjQUFTLEdBQVcsSUFBSSxDQUFDO1FBQ3pCLFNBQUksR0FBUSxJQUFJLENBQUM7UUFDakIsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBRW5DLGVBQVUsR0FBVyxJQUFJLENBQUM7UUF1QmhDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFz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QyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFNTyx3QkFBd0I7UUFDOUIsSUFBSSxLQUFLLEdBQWlCLElBQUksSUFBSSxFQUFVLENBQUM7UUFDN0MsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUMxRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsSUFBSSxLQUFLLEdBQWlCLElBQUksSUFBSSxFQUFVLENBQUM7UUFDN0MsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUM1RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWdDb250cm9sQmFzZX0gZnJvbSBcIi4vTWdDb250cm9sQmFzZVwiO1xyXG5pbXBvcnQge0ZpZWxkVmFsaWRhdG9yfSBmcm9tIFwiLi9GaWVsZFZhbGlkYXRvclwiO1xyXG5pbXBvcnQge1BJQ30gZnJvbSBcIi4vUElDXCI7XHJcbmltcG9ydCB7U3RyaW5nQnVpbGRlciwgTGlzdH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7U3RvcmFnZUF0dHJpYnV0ZSwgU3RyVXRpbCwgUElDSW50ZXJmYWNlfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge0V2ZW50c30gZnJvbSBcIi4uLy4uL0V2ZW50c1wiO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uRGV0YWlsc0Jhc2UgfSBmcm9tIFwiLi9WYWxpZGF0aW9uRGV0YWlsc0Jhc2VcIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkRldGFpbHMgZXh0ZW5kcyBWYWxpZGF0aW9uRGV0YWlsc0Jhc2Uge1xyXG5cclxuICAvLyBBVFRFTlRJT04gISEhIHdoZW4geW91IGFkZC9tb2RpZnkvZGVsZXRlIGEgbWVtYmVyIHZhcmlhYmxlIGRvbid0IGZvcmdldCB0byB0YWtlIGNhcmVcclxuICAvLyBhYm91dCB0aGUgY29weSBjb25zdHJ1Y3RvcjogVmFsaWRhdGlvbkRldGFpbHMoVmFsaWRhdGlvbkRldGFpbHMgdmQpXHJcblxyXG4gIHByaXZhdGUgX2NvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSBudWxsO1xyXG4gIHByaXZhdGUgX2ZpZWxkVmFsaWRhdG9yOiBGaWVsZFZhbGlkYXRvciA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfcGljRGF0YTogUElDID0gbnVsbDtcclxuICBwcml2YXRlIF9waWN0dXJlRW5hYmxlOiBTdHJpbmdCdWlsZGVyID0gbnVsbDsgLy8gZm9yIGlubmVyIChvZiBOdW1lcmljIHR5cGUpIHVzZSBvbmx5LCBTdHJpbmcgb2YgMSdzIC0+IHBvc3NpYmxlIHRvIHdyaXRlIDsgMCdzIC0+IGltcG9zc2libGUgdG8gd3JpdGUgOyBmb3IgJ1xcJyB1c2luZ1xyXG4gIHByaXZhdGUgX3BpY3R1cmVSZWFsOiBTdHJpbmdCdWlsZGVyID0gbnVsbDsgLy8gZm9yIGlubmVyIChvZiBOdW1lcmljIHR5cGUpIHVzZSBvbmx5XHJcbiAgcHJpdmF0ZSBfaXNOdWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfb2xkdmFsdWU6IHN0cmluZyA9IG51bGw7IC8vIG9sZCB2YWx1ZSBvZiB0aGUgY29udHJvbFxyXG4gIHByaXZhdGUgX3ZhbDogYW55ID0gbnVsbDsgIC8vIG5ldyB2YWx1ZSwgaW5zZXJ0ZWQgaW50byBjb250cm9sXHJcbiAgcHJpdmF0ZSBfdmFsaWRhdGlvbkZhaWxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGVyck1lc3NhZ2U6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIGdldCBFcnJvck1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmVyck1lc3NhZ2U7XHJcbiAgfVxyXG5cclxuICBzZXQgRXJyb3JNZXNzYWdlKG1zZzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmVyck1lc3NhZ2UgPSBtc2c7XHJcbiAgfVxyXG5cclxuICBnZXQgVmFsaWRhdGlvbkZhaWxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92YWxpZGF0aW9uRmFpbGVkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbnN0cnVjdG9yLCB3aGljaCBzZXRzIGFsbCBtZW1iZXIgdmFsdWVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcihvbGR2YWx1ZTogYW55LCB2YWw6IGFueSwgcmFuZ2U6IHN0cmluZywgcGljOiBQSUMsIGNvbnRyb2w6IE1nQ29udHJvbEJhc2UpO1xyXG4gIGNvbnN0cnVjdG9yKHJhbmdlU3RyOiBzdHJpbmcpO1xyXG4gIGNvbnN0cnVjdG9yKHZkOiBWYWxpZGF0aW9uRGV0YWlscyk7XHJcbiAgY29uc3RydWN0b3IoKTtcclxuICBjb25zdHJ1Y3RvcihvbGR2YWx1ZU9yUmFuZ2VTdHJPclZkPzogYW55LCB2YWw/OiBzdHJpbmcsIHJhbmdlPzogc3RyaW5nLCBwaWM/OiBQSUMsIGNvbnRyb2w/OiBNZ0NvbnRyb2xCYXNlKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8zKCk7XHJcblxyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDUpXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMChvbGR2YWx1ZU9yUmFuZ2VTdHJPclZkLCB2YWwsIHJhbmdlLCBwaWMsIGNvbnRyb2wpO1xyXG5cclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKG9sZHZhbHVlT3JSYW5nZVN0ck9yVmQgPT09IG51bGwgfHwgb2xkdmFsdWVPclJhbmdlU3RyT3JWZC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSlcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8xKG9sZHZhbHVlT3JSYW5nZVN0ck9yVmQpO1xyXG5cclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKG9sZHZhbHVlT3JSYW5nZVN0ck9yVmQgPT09IG51bGwgfHwgb2xkdmFsdWVPclJhbmdlU3RyT3JWZCBpbnN0YW5jZW9mIFZhbGlkYXRpb25EZXRhaWxzKSlcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8yKG9sZHZhbHVlT3JSYW5nZVN0ck9yVmQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8wKG9sZHZhbHVlOiBhbnksIHZhbDogYW55LCByYW5nZTogc3RyaW5nLCBwaWM6IFBJQywgY29udHJvbDogTWdDb250cm9sQmFzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcGljRGF0YSA9IHBpYztcclxuICAgIHRoaXMuX29sZHZhbHVlID0gb2xkdmFsdWU7IC8vIG9sZCB2YWx1ZSBvZiB0aGUgZmllbGRcclxuICAgIHRoaXMuX3ZhbCA9IHZhbDsgLy8gbmV3ICBpbnNlcnRlZCB2YWx1ZSBvZiB0aGUgZmllbGRcclxuICAgIHRoaXMuX3JhbmdlID0gcmFuZ2U7XHJcbiAgICB0aGlzLl9jb250cm9sID0gY29udHJvbDtcclxuXHJcbiAgICBzd2l0Y2ggKHBpYy5nZXRBdHRyKCkpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgdGhpcy5fcGljdHVyZVJlYWwgPSBuZXcgU3RyaW5nQnVpbGRlcih0aGlzLl9waWNEYXRhLmdldE1hc2tTaXplKCkpO1xyXG4gICAgICAgIHRoaXMuX3BpY3R1cmVFbmFibGUgPSBuZXcgU3RyaW5nQnVpbGRlcih0aGlzLl9waWNEYXRhLmdldE1hc2tTaXplKCkpO1xyXG4gICAgICAgIHRoaXMuZ2V0UmVhbE51bWVyaWNQaWN0dXJlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICBpZiAodGhpcy5fcmFuZ2UgPT0gbnVsbClcclxuICAgICAgICAgIHRoaXMuX3JhbmdlID0gXCJUcnVlLEZhbHNlXCI7IC8vIGRlZmF1bHQgcmFuZ2UgdmFsdWUgZm9yIExvZ2ljYWxcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhcIlZhbGlkYXRpb25EZXRhaWxzLlZhbGlkYXRpb25EZXRhaWxzOiBUaGVyZSBpcyBubyB0eXBlIFwiICtcclxuICAgICAgICAgIHRoaXMuX3BpY0RhdGEuZ2V0QXR0cigpKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIC8vIGdldCBSYW5nZSBmb3IgdGhlIHBpY3R1cmU6XHJcbiAgICBpZiAodGhpcy5fcmFuZ2UgIT0gbnVsbClcclxuICAgICAgdGhpcy5maWxsUmFuZ2UoKTtcclxuXHJcbiAgICAvLyBmcmVlIG1lbW9yeVxyXG4gICAgcmFuZ2UgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbnN0cnVjdG9yIGZvciByYW5nZSBvbmx5LCBtYWtlIHBhcnNpbmcgb2YgIFJhbmdlIGFuZCBmaWxsXHJcbiAgLy8vICAgRGlzY3JldGVSYW5nZVZhbHVlcyBhbmQgQ29udGludW91c1JhbmdlVmFsdWVzXHJcbiAgLy8vICAgKHVzZWQgaW4gRGlzcGxheUNvbnZlbnRvcilcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmFuZ2VcIj5zdHJpbmc8L3BhcmFtPlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMShyYW5nZVN0cjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzMoKTtcclxuICAgIHRoaXMuX3JhbmdlID0gcmFuZ2VTdHI7XHJcbiAgICBpZiAodGhpcy5fcmFuZ2UgIT09IG51bGwpXHJcbiAgICAgIHRoaXMuZmlsbFJhbmdlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTWFrZSBjb3B5IG9mIHZhbGlkYXRpb24gZGV0YWlscyxcclxuICAvLy8gICBjb3B5IGNvbnN0cnVjdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzIodmQ6IFZhbGlkYXRpb25EZXRhaWxzKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzMoKTtcclxuICAgIHRoaXMuX29sZHZhbHVlID0gdmQuZ2V0T2xkVmFsdWUoKTtcclxuICAgIHRoaXMuX3ZhbCA9IHZkLl92YWw7XHJcbiAgICB0aGlzLl9yYW5nZSA9IHZkLmdldFJhbmdlKCk7XHJcbiAgICB0aGlzLl9jb250cm9sID0gdmQuZ2V0Q29udHJvbCgpO1xyXG4gICAgdGhpcy5fdmFsaWRhdGlvbkZhaWxlZCA9IGZhbHNlO1xyXG4gICAgaWYgKHZkLl9waWN0dXJlUmVhbCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9waWN0dXJlUmVhbCA9IG5ldyBTdHJpbmdCdWlsZGVyKHZkLl9waWN0dXJlUmVhbC5Ub1N0cmluZygpKTtcclxuICAgIH1cclxuICAgIGlmICh2ZC5fcGljdHVyZUVuYWJsZSAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9waWN0dXJlRW5hYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIodmQuX3BpY3R1cmVFbmFibGUuVG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodmQuZ2V0RGlzY3JldGVSYW5nZVZhbHVlcygpICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX2Rpc2NyZXRlUmFuZ2VWYWx1ZXMgPSB2ZC5DbG9uZURpc2NyZXRlUmFuZ2VWYWx1ZXMoKTtcclxuICAgIH1cclxuICAgIGlmICh2ZC5nZXRDb250aW51b3VzUmFuZ2VWYWx1ZXMoKSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX2NvbnRpbnVvdXNSYW5nZVZhbHVlcyA9IHZkLkNsb25lQ29udGludW91c1JhbmdlVmFsdWVzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9waWNEYXRhID0gdmQuZ2V0UElDKCk7XHJcbiAgICB0aGlzLl9pc051bGwgPSB2ZC5nZXRJc051bGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2ZpZWxkVmFsaWRhdG9yID0gbmV3IEZpZWxkVmFsaWRhdG9yKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgKioqKioqKioqKioqKioqKioqKioqKipOdW1lcmljKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZ2V0UmVhbE51bWVyaWNQaWN0dXJlKCk6IHZvaWQge1xyXG4gICAgbGV0IG1hc2s6IHN0cmluZyA9IHRoaXMuX3BpY0RhdGEuZ2V0TWFzaygpO1xyXG4gICAgbGV0IGRlY186IG51bWJlciA9IHRoaXMuX3BpY0RhdGEuZ2V0RGVjKCk7XHJcbiAgICBsZXQgd2hvbGVfOiBudW1iZXIgPSB0aGlzLl9waWNEYXRhLmdldFdob2xlcygpO1xyXG4gICAgbGV0IGRlY2ltYWxfOiBib29sZWFuID0gdGhpcy5fcGljRGF0YS53aXRoRGVjaW1hbCgpO1xyXG4gICAgbGV0IGRlY19wbnRfaW5fZmlyc3Q6IGJvb2xlYW4gPSB0aGlzLl9waWNEYXRhLmRlY0luRmlyc3RQb3MoKTtcclxuICAgIGxldCBpc05lZ2F0aXZlOiBib29sZWFuID0gdGhpcy5fcGljRGF0YS5pc05lZ2F0aXZlKCk7XHJcbiAgICBsZXQgaXNGaXJzdFBpY19OOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGxldCBpc1BvaW50SW5zZXJ0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgY3VyckNoYXIgPSAwO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9waWNEYXRhLmdldE1hc2tTaXplKCk7IGkgPSBpICsgMSkge1xyXG4gICAgICBjdXJyQ2hhciA9ICttYXNrLmNoYXJBdChpKTsgLy8gaXQncyBBU0NJSSBvZiB0aGUgY2hhclxyXG5cclxuICAgICAgc3dpdGNoIChjdXJyQ2hhcikge1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19OOlxyXG4gICAgICAgICAgaWYgKGlzRmlyc3RQaWNfTikge1xyXG4gICAgICAgICAgICBpZiAoaXNOZWdhdGl2ZSlcclxuICAgICAgICAgICAgICB0aGlzLnNldFBpY3R1cmVzKCctJywgJzAnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkZWNfcG50X2luX2ZpcnN0KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRQaWN0dXJlcygnLicsICcxJyk7XHJcbiAgICAgICAgICAgICAgaXNQb2ludEluc2VydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh3aG9sZV8gPiAwKSB7XHJcbiAgICAgICAgICAgICAgd2hvbGVfLS07XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRQaWN0dXJlcygnIycsICcwJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXNGaXJzdFBpY19OID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChkZWNpbWFsXykge1xyXG4gICAgICAgICAgICBpZiAod2hvbGVfID4gMCkge1xyXG4gICAgICAgICAgICAgIHdob2xlXy0tO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0UGljdHVyZXMoJyMnLCAnMCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHdob2xlXyA9PT0gMCAmJiAhaXNQb2ludEluc2VydGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRQaWN0dXJlcygnLicsICcxJyk7XHJcbiAgICAgICAgICAgICAgaXNQb2ludEluc2VydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkZWNfID4gMCkge1xyXG4gICAgICAgICAgICAgIGRlY18tLTtcclxuICAgICAgICAgICAgICB0aGlzLnNldFBpY3R1cmVzKCcjJywgJzAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh3aG9sZV8gPiAwKSB7XHJcbiAgICAgICAgICAgICAgd2hvbGVfLS07XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRQaWN0dXJlcygnIycsICcwJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OiAvLyBjb25zdCBzdHJpbmcgaW4gQWxwaGFcclxuICAgICAgICAgIHRoaXMuc2V0UGljdHVyZXMoY3VyckNoYXIudG9TdHJpbmcoKSwgJzEnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBFdmVudHMuV3JpdGVEZXZUb0xvZyh0aGlzLl9waWN0dXJlUmVhbC5Ub1N0cmluZygpKTtcclxuICAgIEV2ZW50cy5Xcml0ZURldlRvTG9nKHRoaXMuX3BpY3R1cmVFbmFibGUuVG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYWRkIGNoYXJzIHRvIFJlYWwgYW5kIEVuYWJsZSBTdHJpbmcgQnVmZmVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZWFsXCI+dG8gUmVhbDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJFbmFibGVcIj50byBFbmFibGU8L3BhcmFtPlxyXG4gIHByaXZhdGUgc2V0UGljdHVyZXMoUmVhbDogc3RyaW5nLCBFbmFibGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fcGljdHVyZUVuYWJsZS5BcHBlbmQoRW5hYmxlKTtcclxuICAgIHRoaXMuX3BpY3R1cmVSZWFsLkFwcGVuZChSZWFsKTtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHZhbDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl92YWwgPSB2YWw7XHJcbiAgfVxyXG5cclxuICBzZXRPbGRWYWx1ZShvbGR2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9vbGR2YWx1ZSA9IG9sZHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0UmFuZ2UocmFuZ2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmFuZ2UgPSByYW5nZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIFwidmFsaWRhdGlvbiBmYWlsZWRcIiBmbGFnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRWYWxpZGF0aW9uRmFpbGVkKHZhbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5fdmFsaWRhdGlvbkZhaWxlZCA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgaXNOdWxsIGZsYWcgb2YgdGhlIFZhbERldGFpbHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldE51bGwoaXNOdWxsXzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5faXNOdWxsID0gaXNOdWxsXztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSB2YWxpZCBkaXNwbGF5IHZhbHVlICh3aXRoIG1hc2spXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXREaXNwVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0eXBlb2YgdGhpcy5fdmFsID09PSAnc3RyaW5nJykge1xyXG4gICAgICBsZXQgbWluaW11bVZhbHVlTGVuZ3RoOiBudW1iZXIgPSB0aGlzLl9waWNEYXRhLmdldE1pbmltdW1WYWx1ZUxlbmd0aCgpO1xyXG5cclxuICAgICAgLy8gUlRyaW0gdGhlIHZhbHVlIGJleW9uZCB0aGlzIGluZGV4XHJcbiAgICAgIGlmICh0aGlzLl92YWwubGVuZ3RoID4gbWluaW11bVZhbHVlTGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKG1pbmltdW1WYWx1ZUxlbmd0aCA+IDAgfHwgU3RyVXRpbC5ydHJpbSh0aGlzLl92YWwpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGxldCBzdHI6IHN0cmluZyA9IHRoaXMuX3ZhbC5zdWJzdHIobWluaW11bVZhbHVlTGVuZ3RoKTtcclxuICAgICAgICAgIHRoaXMuX3ZhbCA9IHRoaXMuX3ZhbC5zdWJzdHIoMCwgbWluaW11bVZhbHVlTGVuZ3RoKTtcclxuICAgICAgICAgIHRoaXMuX3ZhbCA9IHRoaXMuX3ZhbCArIFN0clV0aWwucnRyaW0oc3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fY29udHJvbCAhPSBudWxsICYmIHRoaXMuX2NvbnRyb2wuaXNDaG9pY2VDb250cm9sKCkpXHJcbiAgICAgICAgdGhpcy5fdmFsID0gdGhpcy5fdmFsLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2xkVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9vbGR2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldFR5cGUoKTogU3RvcmFnZUF0dHJpYnV0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGljRGF0YS5nZXRBdHRyKCk7XHJcbiAgfVxyXG5cclxuICBnZXRQaWN0dXJlUmVhbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY3R1cmVSZWFsLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBnZXRQaWN0dXJlRW5hYmxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGljdHVyZUVuYWJsZS5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8gZm9yIE51bWVyaWNcclxuICBnZXRJc05lZ2F0aXZlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY0RhdGEuaXNOZWdhdGl2ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gZm9yIE51bWVyaWNcclxuICBnZXRJc1BhZEZpbGwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGljRGF0YS5wYWRGaWxsKCk7XHJcbiAgfVxyXG5cclxuICAvLyBmb3IgTnVtZXJpY1xyXG4gIGdldFBhZEZpbGxDaGFyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGljRGF0YS5nZXRQYWQoKTtcclxuICB9XHJcblxyXG4gIC8vIGZvciBOdW1lcmljLCBEYXRlLCBUaW1lXHJcbiAgZ2V0SXNaZXJvRmlsbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9waWNEYXRhLnplcm9GaWxsKCk7XHJcbiAgfVxyXG5cclxuICAvLyBmb3IgTnVtZXJpYywgRGF0ZSwgVGltZVxyXG4gIGdldFplcm9GaWxsQ2hhcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY0RhdGEuZ2V0WmVyb1BhZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gZm9yIE51bWVyaWNcclxuICBnZXROZWdhdGl2ZVNpZ25QcmVmKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGljRGF0YS5nZXROZWdQcmVmXygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmFuZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yYW5nZTtcclxuICB9XHJcblxyXG4gIGdldENvbnRyb2woKTogTWdDb250cm9sQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udHJvbDtcclxuICB9XHJcblxyXG4gIGdldFBJQygpOiBQSUMge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY0RhdGE7XHJcbiAgfVxyXG5cclxuICBnZXRJc051bGwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNOdWxsO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGUoKTogVmFsaWRhdGlvbkRldGFpbHMge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkVmFsaWRhdG9yLmNoZWNrVmFsKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIENsb25lRGlzY3JldGVSYW5nZVZhbHVlcygpOiBMaXN0PHN0cmluZz4ge1xyXG4gICAgbGV0IGNsb25lOiBMaXN0PHN0cmluZz4gPSBuZXcgTGlzdDxzdHJpbmc+KCk7XHJcbiAgICBjbG9uZS5BZGRSYW5nZSh0aGlzLl9kaXNjcmV0ZVJhbmdlVmFsdWVzLkdldEVudW1lcmF0b3IoKSk7XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIENsb25lQ29udGludW91c1JhbmdlVmFsdWVzKCk6IExpc3Q8c3RyaW5nPiB7XHJcbiAgICBsZXQgY2xvbmU6IExpc3Q8c3RyaW5nPiA9IG5ldyBMaXN0PHN0cmluZz4oKTtcclxuICAgIGNsb25lLkFkZFJhbmdlKHRoaXMuX2NvbnRpbnVvdXNSYW5nZVZhbHVlcy5HZXRFbnVtZXJhdG9yKCkpO1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG4gIH1cclxufVxyXG4iXX0=
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsaWRhdGlvbkRldGFpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZ3VpL1ZhbGlkYXRpb25EZXRhaWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsYUFBYSxFQUFFLElBQUksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDekUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUdoRSxNQUFNLE9BQU8saUJBQWtCLFNBQVEscUJBQXFCO0lBaUIxRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksWUFBWSxDQUFDLEdBQVc7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFTRCxZQUFZLHNCQUE0QixFQUFFLEdBQVksRUFBRSxLQUFjLEVBQUUsR0FBUyxFQUFFLE9BQXVCO1FBQ3hHLEtBQUssRUFBRSxDQUFDO1FBaENGLGFBQVEsR0FBa0IsSUFBSSxDQUFDO1FBQy9CLG9CQUFlLEdBQW1CLElBQUksQ0FBQztRQUN2QyxhQUFRLEdBQVEsSUFBSSxDQUFDO1FBQ3JCLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNyQyxpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFDbkMsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixjQUFTLEdBQVcs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TUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBTU8sd0JBQXdCO1FBQzlCLElBQUksS0FBSyxHQUFpQixJQUFJLElBQUksRUFBVSxDQUFDO1FBQzdDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDMUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksS0FBSyxHQUFpQixJQUFJLElBQUksRUFBVSxDQUFDO1FBQzdDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDNUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01nQ29udHJvbEJhc2V9IGZyb20gXCIuL01nQ29udHJvbEJhc2VcIjtcclxuaW1wb3J0IHtGaWVsZFZhbGlkYXRvcn0gZnJvbSBcIi4vRmllbGRWYWxpZGF0b3JcIjtcclxuaW1wb3J0IHtQSUN9IGZyb20gXCIuL1BJQ1wiO1xyXG5pbXBvcnQge1N0cmluZ0J1aWxkZXIsIExpc3R9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1N0b3JhZ2VBdHRyaWJ1dGUsIFN0clV0aWwsIFBJQ0ludGVyZmFjZX0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtFdmVudHN9IGZyb20gXCIuLi8uLi9FdmVudHNcIjtcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkRldGFpbHNCYXNlIH0gZnJvbSBcIi4vVmFsaWRhdGlvbkRldGFpbHNCYXNlXCI7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25EZXRhaWxzIGV4dGVuZHMgVmFsaWRhdGlvbkRldGFpbHNCYXNlIHtcclxuXHJcbiAgLy8gQVRURU5USU9OICEhISB3aGVuIHlvdSBhZGQvbW9kaWZ5L2RlbGV0ZSBhIG1lbWJlciB2YXJpYWJsZSBkb24ndCBmb3JnZXQgdG8gdGFrZSBjYXJlXHJcbiAgLy8gYWJvdXQgdGhlIGNvcHkgY29uc3RydWN0b3I6IFZhbGlkYXRpb25EZXRhaWxzKFZhbGlkYXRpb25EZXRhaWxzIHZkKVxyXG5cclxuICBwcml2YXRlIF9jb250cm9sOiBNZ0NvbnRyb2xCYXNlID0gbnVsbDtcclxuICBwcml2YXRlIF9maWVsZFZhbGlkYXRvcjogRmllbGRWYWxpZGF0b3IgPSBudWxsO1xyXG4gIHByaXZhdGUgX3BpY0RhdGE6IFBJQyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfcGljdHVyZUVuYWJsZTogU3RyaW5nQnVpbGRlciA9IG51bGw7IC8vIGZvciBpbm5lciAob2YgTnVtZXJpYyB0eXBlKSB1c2Ugb25seSwgU3RyaW5nIG9mIDEncyAtPiBwb3NzaWJsZSB0byB3cml0ZSA7IDAncyAtPiBpbXBvc3NpYmxlIHRvIHdyaXRlIDsgZm9yICdcXCcgdXNpbmdcclxuICBwcml2YXRlIF9waWN0dXJlUmVhbDogU3RyaW5nQnVpbGRlciA9IG51bGw7IC8vIGZvciBpbm5lciAob2YgTnVtZXJpYyB0eXBlKSB1c2Ugb25seVxyXG4gIHByaXZhdGUgX2lzTnVsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX29sZHZhbHVlOiBzdHJpbmcgPSBudWxsOyAvLyBvbGQgdmFsdWUgb2YgdGhlIGNvbnRyb2xcclxuICBwcml2YXRlIF92YWw6IGFueSA9IG51bGw7ICAvLyBuZXcgdmFsdWUsIGluc2VydGVkIGludG8gY29udHJvbFxyXG4gIHByaXZhdGUgX3ZhbGlkYXRpb25GYWlsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBlcnJNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBnZXQgRXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5lcnJNZXNzYWdlO1xyXG4gIH1cclxuXHJcbiAgc2V0IEVycm9yTWVzc2FnZShtc2c6IHN0cmluZykge1xyXG4gICAgdGhpcy5lcnJNZXNzYWdlID0gbXNnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IFZhbGlkYXRpb25GYWlsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGlvbkZhaWxlZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb25zdHJ1Y3Rvciwgd2hpY2ggc2V0cyBhbGwgbWVtYmVyIHZhbHVlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3Iob2xkdmFsdWU6IGFueSwgdmFsOiBhbnksIHJhbmdlOiBzdHJpbmcsIHBpYzogUElDLCBjb250cm9sOiBNZ0NvbnRyb2xCYXNlKTtcclxuICBjb25zdHJ1Y3RvcihyYW5nZVN0cjogc3RyaW5nKTtcclxuICBjb25zdHJ1Y3Rvcih2ZDogVmFsaWRhdGlvbkRldGFpbHMpO1xyXG4gIGNvbnN0cnVjdG9yKCk7XHJcbiAgY29uc3RydWN0b3Iob2xkdmFsdWVPclJhbmdlU3RyT3JWZD86IGFueSwgdmFsPzogc3RyaW5nLCByYW5nZT86IHN0cmluZywgcGljPzogUElDLCBjb250cm9sPzogTWdDb250cm9sQmFzZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfMygpO1xyXG5cclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA1KVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzAob2xkdmFsdWVPclJhbmdlU3RyT3JWZCwgdmFsLCByYW5nZSwgcGljLCBjb250cm9sKTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIChvbGR2YWx1ZU9yUmFuZ2VTdHJPclZkID09PSBudWxsIHx8IG9sZHZhbHVlT3JSYW5nZVN0ck9yVmQuY29uc3RydWN0b3IgPT09IFN0cmluZykpXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMShvbGR2YWx1ZU9yUmFuZ2VTdHJPclZkKTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIChvbGR2YWx1ZU9yUmFuZ2VTdHJPclZkID09PSBudWxsIHx8IG9sZHZhbHVlT3JSYW5nZVN0ck9yVmQgaW5zdGFuY2VvZiBWYWxpZGF0aW9uRGV0YWlscykpXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMihvbGR2YWx1ZU9yUmFuZ2VTdHJPclZkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMChvbGR2YWx1ZTogYW55LCB2YWw6IGFueSwgcmFuZ2U6IHN0cmluZywgcGljOiBQSUMsIGNvbnRyb2w6IE1nQ29udHJvbEJhc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuX3BpY0RhdGEgPSBwaWM7XHJcbiAgICB0aGlzLl9vbGR2YWx1ZSA9IG9sZHZhbHVlOyAvLyBvbGQgdmFsdWUgb2YgdGhlIGZpZWxkXHJcbiAgICB0aGlzLl92YWwgPSB2YWw7IC8vIG5ldyAgaW5zZXJ0ZWQgdmFsdWUgb2YgdGhlIGZpZWxkXHJcbiAgICB0aGlzLl9yYW5nZSA9IHJhbmdlO1xyXG4gICAgdGhpcy5fY29udHJvbCA9IGNvbnRyb2w7XHJcblxyXG4gICAgc3dpdGNoIChwaWMuZ2V0QXR0cigpKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgIHRoaXMuX3BpY3R1cmVSZWFsID0gbmV3IFN0cmluZ0J1aWxkZXIodGhpcy5fcGljRGF0YS5nZXRNYXNrU2l6ZSgpKTtcclxuICAgICAgICB0aGlzLl9waWN0dXJlRW5hYmxlID0gbmV3IFN0cmluZ0J1aWxkZXIodGhpcy5fcGljRGF0YS5nZXRNYXNrU2l6ZSgpKTtcclxuICAgICAgICB0aGlzLmdldFJlYWxOdW1lcmljUGljdHVyZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgaWYgKHRoaXMuX3JhbmdlID09IG51bGwpXHJcbiAgICAgICAgICB0aGlzLl9yYW5nZSA9IFwiVHJ1ZSxGYWxzZVwiOyAvLyBkZWZhdWx0IHJhbmdlIHZhbHVlIGZvciBMb2dpY2FsXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgRXZlbnRzLldyaXRlRXhjZXB0aW9uVG9Mb2coXCJWYWxpZGF0aW9uRGV0YWlscy5WYWxpZGF0aW9uRGV0YWlsczogVGhlcmUgaXMgbm8gdHlwZSBcIiArXHJcbiAgICAgICAgICB0aGlzLl9waWNEYXRhLmdldEF0dHIoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICAvLyBnZXQgUmFuZ2UgZm9yIHRoZSBwaWN0dXJlOlxyXG4gICAgaWYgKHRoaXMuX3JhbmdlICE9IG51bGwpXHJcbiAgICAgIHRoaXMuZmlsbFJhbmdlKCk7XHJcblxyXG4gICAgLy8gZnJlZSBtZW1vcnlcclxuICAgIHJhbmdlID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb25zdHJ1Y3RvciBmb3IgcmFuZ2Ugb25seSwgbWFrZSBwYXJzaW5nIG9mICBSYW5nZSBhbmQgZmlsbFxyXG4gIC8vLyAgIERpc2NyZXRlUmFuZ2VWYWx1ZXMgYW5kIENvbnRpbnVvdXNSYW5nZVZhbHVlc1xyXG4gIC8vLyAgICh1c2VkIGluIERpc3BsYXlDb252ZW50b3IpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJhbmdlXCI+c3RyaW5nPC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEocmFuZ2VTdHI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8zKCk7XHJcbiAgICB0aGlzLl9yYW5nZSA9IHJhbmdlU3RyO1xyXG4gICAgaWYgKHRoaXMuX3JhbmdlICE9PSBudWxsKVxyXG4gICAgICB0aGlzLmZpbGxSYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIE1ha2UgY29weSBvZiB2YWxpZGF0aW9uIGRldGFpbHMsXHJcbiAgLy8vICAgY29weSBjb25zdHJ1Y3RvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8yKHZkOiBWYWxpZGF0aW9uRGV0YWlscyk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8zKCk7XHJcbiAgICB0aGlzLl9vbGR2YWx1ZSA9IHZkLmdldE9sZFZhbHVlKCk7XHJcbiAgICB0aGlzLl92YWwgPSB2ZC5fdmFsO1xyXG4gICAgdGhpcy5fcmFuZ2UgPSB2ZC5nZXRSYW5nZSgpO1xyXG4gICAgdGhpcy5fY29udHJvbCA9IHZkLmdldENvbnRyb2woKTtcclxuICAgIHRoaXMuX3ZhbGlkYXRpb25GYWlsZWQgPSBmYWxzZTtcclxuICAgIGlmICh2ZC5fcGljdHVyZVJlYWwgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fcGljdHVyZVJlYWwgPSBuZXcgU3RyaW5nQnVpbGRlcih2ZC5fcGljdHVyZVJlYWwuVG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodmQuX3BpY3R1cmVFbmFibGUgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fcGljdHVyZUVuYWJsZSA9IG5ldyBTdHJpbmdCdWlsZGVyKHZkLl9waWN0dXJlRW5hYmxlLlRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHZkLmdldERpc2NyZXRlUmFuZ2VWYWx1ZXMoKSAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9kaXNjcmV0ZVJhbmdlVmFsdWVzID0gdmQuQ2xvbmVEaXNjcmV0ZVJhbmdlVmFsdWVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodmQuZ2V0Q29udGludW91c1JhbmdlVmFsdWVzKCkgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9jb250aW51b3VzUmFuZ2VWYWx1ZXMgPSB2ZC5DbG9uZUNvbnRpbnVvdXNSYW5nZVZhbHVlcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcGljRGF0YSA9IHZkLmdldFBJQygpO1xyXG4gICAgdGhpcy5faXNOdWxsID0gdmQuZ2V0SXNOdWxsKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9maWVsZFZhbGlkYXRvciA9IG5ldyBGaWVsZFZhbGlkYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgICoqKioqKioqKioqKioqKioqKioqKioqTnVtZXJpYyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGdldFJlYWxOdW1lcmljUGljdHVyZSgpOiB2b2lkIHtcclxuICAgIGxldCBtYXNrOiBzdHJpbmcgPSB0aGlzLl9waWNEYXRhLmdldE1hc2soKTtcclxuICAgIGxldCBkZWNfOiBudW1iZXIgPSB0aGlzLl9waWNEYXRhLmdldERlYygpO1xyXG4gICAgbGV0IHdob2xlXzogbnVtYmVyID0gdGhpcy5fcGljRGF0YS5nZXRXaG9sZXMoKTtcclxuICAgIGxldCBkZWNpbWFsXzogYm9vbGVhbiA9IHRoaXMuX3BpY0RhdGEud2l0aERlY2ltYWwoKTtcclxuICAgIGxldCBkZWNfcG50X2luX2ZpcnN0OiBib29sZWFuID0gdGhpcy5fcGljRGF0YS5kZWNJbkZpcnN0UG9zKCk7XHJcbiAgICBsZXQgaXNOZWdhdGl2ZTogYm9vbGVhbiA9IHRoaXMuX3BpY0RhdGEuaXNOZWdhdGl2ZSgpO1xyXG4gICAgbGV0IGlzRmlyc3RQaWNfTjogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBsZXQgaXNQb2ludEluc2VydGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IGN1cnJDaGFyID0gMDtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fcGljRGF0YS5nZXRNYXNrU2l6ZSgpOyBpID0gaSArIDEpIHtcclxuICAgICAgY3VyckNoYXIgPSArbWFzay5jaGFyQXQoaSk7IC8vIGl0J3MgQVNDSUkgb2YgdGhlIGNoYXJcclxuXHJcbiAgICAgIHN3aXRjaCAoY3VyckNoYXIpIHtcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTjpcclxuICAgICAgICAgIGlmIChpc0ZpcnN0UGljX04pIHtcclxuICAgICAgICAgICAgaWYgKGlzTmVnYXRpdmUpXHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRQaWN0dXJlcygnLScsICcwJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGVjX3BudF9pbl9maXJzdCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0UGljdHVyZXMoJy4nLCAnMScpO1xyXG4gICAgICAgICAgICAgIGlzUG9pbnRJbnNlcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAod2hvbGVfID4gMCkge1xyXG4gICAgICAgICAgICAgIHdob2xlXy0tO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0UGljdHVyZXMoJyMnLCAnMCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlzRmlyc3RQaWNfTiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZGVjaW1hbF8pIHtcclxuICAgICAgICAgICAgaWYgKHdob2xlXyA+IDApIHtcclxuICAgICAgICAgICAgICB3aG9sZV8tLTtcclxuICAgICAgICAgICAgICB0aGlzLnNldFBpY3R1cmVzKCcjJywgJzAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh3aG9sZV8gPT09IDAgJiYgIWlzUG9pbnRJbnNlcnRlZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0UGljdHVyZXMoJy4nLCAnMScpO1xyXG4gICAgICAgICAgICAgIGlzUG9pbnRJbnNlcnRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZGVjXyA+IDApIHtcclxuICAgICAgICAgICAgICBkZWNfLS07XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRQaWN0dXJlcygnIycsICcwJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAod2hvbGVfID4gMCkge1xyXG4gICAgICAgICAgICAgIHdob2xlXy0tO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0UGljdHVyZXMoJyMnLCAnMCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDogLy8gY29uc3Qgc3RyaW5nIGluIEFscGhhXHJcbiAgICAgICAgICB0aGlzLnNldFBpY3R1cmVzKGN1cnJDaGFyLnRvU3RyaW5nKCksICcxJyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgRXZlbnRzLldyaXRlRGV2VG9Mb2codGhpcy5fcGljdHVyZVJlYWwuVG9TdHJpbmcoKSk7XHJcbiAgICBFdmVudHMuV3JpdGVEZXZUb0xvZyh0aGlzLl9waWN0dXJlRW5hYmxlLlRvU3RyaW5nKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCBjaGFycyB0byBSZWFsIGFuZCBFbmFibGUgU3RyaW5nIEJ1ZmZlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVhbFwiPnRvIFJlYWw8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiRW5hYmxlXCI+dG8gRW5hYmxlPC9wYXJhbT5cclxuICBwcml2YXRlIHNldFBpY3R1cmVzKFJlYWw6IHN0cmluZywgRW5hYmxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3BpY3R1cmVFbmFibGUuQXBwZW5kKEVuYWJsZSk7XHJcbiAgICB0aGlzLl9waWN0dXJlUmVhbC5BcHBlbmQoUmVhbCk7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2YWw6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fdmFsID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgc2V0T2xkVmFsdWUob2xkdmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fb2xkdmFsdWUgPSBvbGR2YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldFJhbmdlKHJhbmdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3JhbmdlID0gcmFuZ2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBcInZhbGlkYXRpb24gZmFpbGVkXCIgZmxhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0VmFsaWRhdGlvbkZhaWxlZCh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX3ZhbGlkYXRpb25GYWlsZWQgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGlzTnVsbCBmbGFnIG9mIHRoZSBWYWxEZXRhaWxzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXROdWxsKGlzTnVsbF86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2lzTnVsbCA9IGlzTnVsbF87XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdmFsaWQgZGlzcGxheSB2YWx1ZSAod2l0aCBtYXNrKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0RGlzcFZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodHlwZW9mIHRoaXMuX3ZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgbGV0IG1pbmltdW1WYWx1ZUxlbmd0aDogbnVtYmVyID0gdGhpcy5fcGljRGF0YS5nZXRNaW5pbXVtVmFsdWVMZW5ndGgoKTtcclxuXHJcbiAgICAgIC8vIFJUcmltIHRoZSB2YWx1ZSBiZXlvbmQgdGhpcyBpbmRleFxyXG4gICAgICBpZiAodGhpcy5fdmFsLmxlbmd0aCA+IG1pbmltdW1WYWx1ZUxlbmd0aCkge1xyXG4gICAgICAgIGlmIChtaW5pbXVtVmFsdWVMZW5ndGggPiAwIHx8IFN0clV0aWwucnRyaW0odGhpcy5fdmFsKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBsZXQgc3RyOiBzdHJpbmcgPSB0aGlzLl92YWwuc3Vic3RyKG1pbmltdW1WYWx1ZUxlbmd0aCk7XHJcbiAgICAgICAgICB0aGlzLl92YWwgPSB0aGlzLl92YWwuc3Vic3RyKDAsIG1pbmltdW1WYWx1ZUxlbmd0aCk7XHJcbiAgICAgICAgICB0aGlzLl92YWwgPSB0aGlzLl92YWwgKyBTdHJVdGlsLnJ0cmltKHN0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX2NvbnRyb2wgIT0gbnVsbCAmJiB0aGlzLl9jb250cm9sLmlzQ2hvaWNlQ29udHJvbCgpKVxyXG4gICAgICAgIHRoaXMuX3ZhbCA9IHRoaXMuX3ZhbC50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbDtcclxuICB9XHJcblxyXG4gIGdldE9sZFZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb2xkdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXRUeXBlKCk6IFN0b3JhZ2VBdHRyaWJ1dGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY0RhdGEuZ2V0QXR0cigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGljdHVyZVJlYWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9waWN0dXJlUmVhbC5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGljdHVyZUVuYWJsZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY3R1cmVFbmFibGUuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vIGZvciBOdW1lcmljXHJcbiAgZ2V0SXNOZWdhdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9waWNEYXRhLmlzTmVnYXRpdmUoKTtcclxuICB9XHJcblxyXG4gIC8vIGZvciBOdW1lcmljXHJcbiAgZ2V0SXNQYWRGaWxsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY0RhdGEucGFkRmlsbCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gZm9yIE51bWVyaWNcclxuICBnZXRQYWRGaWxsQ2hhcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY0RhdGEuZ2V0UGFkKCk7XHJcbiAgfVxyXG5cclxuICAvLyBmb3IgTnVtZXJpYywgRGF0ZSwgVGltZVxyXG4gIGdldElzWmVyb0ZpbGwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGljRGF0YS56ZXJvRmlsbCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gZm9yIE51bWVyaWMsIERhdGUsIFRpbWVcclxuICBnZXRaZXJvRmlsbENoYXIoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9waWNEYXRhLmdldFplcm9QYWQoKTtcclxuICB9XHJcblxyXG4gIC8vIGZvciBOdW1lcmljXHJcbiAgZ2V0TmVnYXRpdmVTaWduUHJlZigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BpY0RhdGEuZ2V0TmVnUHJlZl8oKTtcclxuICB9XHJcblxyXG4gIGdldFJhbmdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmFuZ2U7XHJcbiAgfVxyXG5cclxuICBnZXRDb250cm9sKCk6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBnZXRQSUMoKTogUElDIHtcclxuICAgIHJldHVybiB0aGlzLl9waWNEYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXNOdWxsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzTnVsbDtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlKCk6IFZhbGlkYXRpb25EZXRhaWxzIHtcclxuICAgIHJldHVybiB0aGlzLl9maWVsZFZhbGlkYXRvci5jaGVja1ZhbCh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBDbG9uZURpc2NyZXRlUmFuZ2VWYWx1ZXMoKTogTGlzdDxzdHJpbmc+IHtcclxuICAgIGxldCBjbG9uZTogTGlzdDxzdHJpbmc+ID0gbmV3IExpc3Q8c3RyaW5nPigpO1xyXG4gICAgY2xvbmUuQWRkUmFuZ2UodGhpcy5fZGlzY3JldGVSYW5nZVZhbHVlcy5HZXRFbnVtZXJhdG9yKCkpO1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBDbG9uZUNvbnRpbnVvdXNSYW5nZVZhbHVlcygpOiBMaXN0PHN0cmluZz4ge1xyXG4gICAgbGV0IGNsb25lOiBMaXN0PHN0cmluZz4gPSBuZXcgTGlzdDxzdHJpbmc+KCk7XHJcbiAgICBjbG9uZS5BZGRSYW5nZSh0aGlzLl9jb250aW51b3VzUmFuZ2VWYWx1ZXMuR2V0RW51bWVyYXRvcigpKTtcclxuICAgIHJldHVybiBjbG9uZTtcclxuICB9XHJcbn1cclxuIl19
@@ -9,6 +9,21 @@ import { GuiConstants } from "../../GuiConstants";
9
9
  import { GuiDataCollection } from "./GuiDataCollection";
10
10
  import { CommandType, HtmlProperties } from "../../GuiEnums";
11
11
  export class GuiTaskBase {
12
+ Init() {
13
+ this.DataView.Init();
14
+ }
15
+ get RouterPath() {
16
+ return this.routerPath;
17
+ }
18
+ get RouterParams() {
19
+ return this.routeParams;
20
+ }
21
+ get InDefaultRouterOutlet() {
22
+ return this.inDefaultRouterOutlet;
23
+ }
24
+ get IsBlockingBatch() {
25
+ return !this._isMainPrg && this.isOpenWin() && !this._allowEvents && !this.IsInteractive;
26
+ }
12
27
  constructor() {
13
28
  this._flowMonitor = null;
14
29
  this._keyboardMappingState = 0xFFFF0000;
@@ -53,21 +68,6 @@ export class GuiTaskBase {
53
68
  this._nullArithmetic = Constants.NULL_ARITH_USE_DEF;
54
69
  this._propTab = new PropTable(this);
55
70
  }
56
- Init() {
57
- this.DataView.Init();
58
- }
59
- get RouterPath() {
60
- return this.routerPath;
61
- }
62
- get RouterParams() {
63
- return this.routeParams;
64
- }
65
- get InDefaultRouterOutlet() {
66
- return this.inDefaultRouterOutlet;
67
- }
68
- get IsBlockingBatch() {
69
- return !this._isMainPrg && this.isOpenWin() && !this._allowEvents && !this.IsInteractive;
70
- }
71
71
  getTaskTag() {
72
72
  return this._taskTag;
73
73
  }
@@ -507,4 +507,4 @@ export class GuiTaskBase {
507
507
  }
508
508
  }
509
509
  GuiTaskBase.MAIN_PRG_PARENT_ID = 32768;
510
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpVGFza0Jhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvdGFza3MvR3VpVGFza0Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFPLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDL0YsT0FBTyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBb0IsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBT3hHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUkzQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzdELE1BQU0sT0FBZ0IsV0FBVztJQTRFL0I7UUExRUEsaUJBQVksR0FBc0IsSUFBSSxDQUFDO1FBQy9CLDBCQUFxQixHQUFXLFVBQVUsQ0FBQztRQUNuRCxpQkFBWSxHQUFXLEdBQUcsQ0FBQztRQUMzQixvQkFBZSxHQUFrQixJQUFJLENBQUM7UUFDOUIsY0FBUyxHQUFXLElBQUksQ0FBQztRQUN6QixtQkFBYyxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzVCLGVBQVUsR0FBVyxJQUFJLENBQUM7UUFDMUIsV0FBTSxH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Q3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBTU8sZUFBZSxDQUFDLFFBQWdCO1FBQ3RDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBTU8sVUFBVSxDQUFDLFFBQWdCO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBTUQsVUFBVSxDQUFDLFNBQWtCO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBQzVCLENBQUM7SUFNRCxjQUFjLENBQUMsUUFBZ0I7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFNTyxRQUFRLENBQUMsUUFBZ0I7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCw2QkFBNkIsQ0FBQyxNQUFjO1FBQzFDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQVFELGtCQUFrQixDQUFDLEdBQVc7UUFFNUIsSUFBSSxHQUFHLElBQUksSUFBSTtZQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQVFELHlCQUF5QixDQUFDLEtBQWE7UUFDckMsSUFBSSxHQUFHLEdBQVcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDOztBQXg3QmdCLDhCQUFrQixHQUFXLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdCwgTk51bWJlciwgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24sIE5TdHJpbmcsIFJlZlBhcmFtfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtDb25zdGFudHMsIExvZ2dlcl9Mb2dMZXZlbHMsIFN0b3JhZ2VBdHRyaWJ1dGUsIFhNTENvbnN0YW50cywgWG1sUGFyc2VyfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge0lUYXNrfSBmcm9tIFwiLi9JVGFza1wiO1xyXG5pbXBvcnQge1Byb3BQYXJlbnRJbnRlcmZhY2V9IGZyb20gXCIuLi8uLi9ndWkvUHJvcFBhcmVudEludGVyZmFjZVwiO1xyXG5pbXBvcnQge0lGbG93TW9uaXRvclF1ZXVlfSBmcm9tIFwiLi4vLi4vSUZsb3dNb25pdG9yUXVldWVcIjtcclxuaW1wb3J0IHtNZ0NvbnRyb2xCYXNlfSBmcm9tIFwiLi4vZ3VpL01nQ29udHJvbEJhc2VcIjtcclxuaW1wb3J0IHtHdWlGaWVsZEJhc2V9IGZyb20gXCIuLi9kYXRhL0d1aUZpZWxkQmFzZVwiO1xyXG5pbXBvcnQge01nRm9ybUJhc2V9IGZyb20gXCIuLi9ndWkvTWdGb3JtQmFzZVwiO1xyXG5pbXBvcnQge1Byb3BUYWJsZX0gZnJvbSBcIi4uL2d1aS9Qcm9wVGFibGVcIjtcclxuaW1wb3J0IHtIZWxwcywgTWFnaWNIZWxwfSBmcm9tIFwiLi4vZ3VpL0hlbHBzXCI7XHJcbmltcG9ydCB7R3VpRGF0YVZpZXdCYXNlfSBmcm9tIFwiLi4vZGF0YS9HdWlEYXRhVmlld0Jhc2VcIjtcclxuaW1wb3J0IHtJQWN0aW9uTWFuYWdlcn0gZnJvbSBcIi4uL2V2ZW50cy9JQWN0aW9uTWFuYWdlclwiO1xyXG5pbXBvcnQge1Byb3BlcnR5fSBmcm9tIFwiLi4vZ3VpL1Byb3BlcnR5XCI7XHJcbmltcG9ydCB7UHJvcEludGVyZmFjZX0gZnJvbSBcIi4uL2d1aS9Qcm9wSW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7RmllbGREZWZ9IGZyb20gXCIuLi9kYXRhL0ZpZWxkRGVmXCI7XHJcbmltcG9ydCB7Q29tbWFuZHN9IGZyb20gXCIuLi8uLi9Db21tYW5kc1wiO1xyXG5pbXBvcnQge0V2ZW50c30gZnJvbSBcIi4uLy4uL0V2ZW50c1wiO1xyXG5pbXBvcnQge0d1aUNvbnN0YW50c30gZnJvbSBcIi4uLy4uL0d1aUNvbnN0YW50c1wiO1xyXG5pbXBvcnQge0d1aURhdGFDb2xsZWN0aW9ufSBmcm9tIFwiLi9HdWlEYXRhQ29sbGVjdGlvblwiO1xyXG5pbXBvcnQgeyBDb21tYW5kVHlwZSwgSHRtbFByb3BlcnRpZXMgfSBmcm9tIFwiLi4vLi4vR3VpRW51bXNcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vIHRhc2sgcHJvcGVydGllcyAoKyBmZXcgYWNjZXNzIG1ldGhvZHMpIHJlcXVpcmVkIGFuZCByZWxldmFudCBmb3IgdGhlIEdVSSBuYW1lc3BhY2UuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHdWlUYXNrQmFzZSBpbXBsZW1lbnRzIElUYXNrLCBQcm9wUGFyZW50SW50ZXJmYWNlIHtcclxuICBwcm90ZWN0ZWQgc3RhdGljIE1BSU5fUFJHX1BBUkVOVF9JRDogbnVtYmVyID0gMzI3Njg7XHJcbiAgX2Zsb3dNb25pdG9yOiBJRmxvd01vbml0b3JRdWV1ZSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfa2V5Ym9hcmRNYXBwaW5nU3RhdGU6IG51bWJlciA9IDB4RkZGRjAwMDA7XHJcbiAgX3JlZnJlc2hUeXBlOiBzdHJpbmcgPSBcIlRcIjtcclxuICBfbGFzdFBhcmtlZEN0cmw6IE1nQ29udHJvbEJhc2UgPSBudWxsO1xyXG4gIHByaXZhdGUgX2Jya0xldmVsOiBzdHJpbmcgPSBudWxsOyAvLyB0aGUgcnVudGltZSBsZXZlbCAoUmVjb3JkICBTdWZmaXgsIEd1aVRhc2tCYXNlIFByZWZpeCwgZXRjLilcclxuICBwcml2YXRlIF9icmtMZXZlbEluZGV4OiBudW1iZXIgPSAtMTtcclxuICBwcml2YXRlIF9tYWluTGV2ZWw6IHN0cmluZyA9IG51bGw7IC8vIHRoZSBydW50aW1lIG1haW5sZXZlbFxyXG4gIHByaXZhdGUgX2xldmVsOiBzdHJpbmcgPSBcIlxcMFwiOyAvLyAnQycgPSBpbiBjb250cm9sLCAnUicgPSBpbiByZWNvcmQgKG91dCBvZiBjb250cm9sKSwgJ1QnID0gaW4gdGFzayAob3V0IG9mIHJlY29yZClcclxuICBfZW50ZXJlZFJlY0xldmVsOiBib29sZWFuID0gZmFsc2U7IC8vIFRSVUUgb25seSBpZiB0aGUgdGFzayB3YXMgZXZlciBtb3ZlZCB0byByZWNvcmQgbGV2ZWwuXHJcbiAgX2N1cnJQYXJrZWRGbGQ6IEd1aUZpZWxkQmFzZSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBpc0luUmVjb21wdXRlID0gZmFsc2U7XHJcbiAgLy8gVGhpcyBmbGFnIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgZWRpdGluZyBjb250cm9sLlxyXG4gIC8vIEl0IGlzIHJlc2V0IHRvIG51bGwgd2hlbiB3ZSBhcmUgaW4gYmV0d2VlbiBzZXR0aW5nIHRoZSBmb2N1cyBhbmQgb25jZSB3ZSBzZXQgdGhlIGZvY3VzIHRvIGNvbnRyb2wgdGhlbiB3ZSBzZXQgdGhpcyBmbGFnIHRvIGN1cnJlbnQgZm9jdXNlZCBjb250cm9sLlxyXG4gIEN1cnJlbnRFZGl0aW5nQ29udHJvbDogTWdDb250cm9sQmFzZSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBzaG91bGRSZXN1bWVTdWJmb3JtTGF5b3V0OiBib29sZWFuID0gdHJ1ZTtcclxuICBBcHBsaWNhdGlvbkd1aWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgUHJvZ3JhbUlzbjogbnVtYmVyID0gMDtcclxuICBUYXNrSXNuOiBudW1iZXIgPSAwO1xyXG4gIENvbnRleHRJRDogbnVtYmVyID0gMDtcclxuICBJc1N1YkZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICBfY3RsSWR4OiBudW1iZXIgPSAwO1xyXG4gIF9jb21wSWR4OiBudW1iZXIgPSAwO1xyXG4gIF9pc1ByZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIF9pc01haW5Qcmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJc0ludGVyYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgX3Rhc2tUYWc6IHN0cmluZyA9IG51bGw7XHJcbiAgX29wZW5XaW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9hbGxvd0V2ZW50czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEZvcm06IE1nRm9ybUJhc2UgPSBudWxsO1xyXG4gIF9wcm9wVGFiOiBQcm9wVGFibGUgPSBudWxsO1xyXG4gIF9oZWxwVGFiOiBIZWxwcyA9IG51bGw7XHJcbiAgX251bGxBcml0aG1ldGljOiBzdHJpbmc7XHJcbiAgSWNvbkZpbGVOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBJc1BhcmFsbGVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgRGF0YVZpZXc6IEd1aURhdGFWaWV3QmFzZSA9IG51bGw7XHJcbiAgQWN0aW9uTWFuYWdlcjogSUFjdGlvbk1hbmFnZXIgPSBudWxsO1xyXG4gIFN0dWRpb1BhcmVudFRhc2s6IEd1aVRhc2tCYXNlID0gbnVsbDsgLy8gcGFyZW50IHRhc2sgb2YgdGhlIHN1YnRhc2sgYnkgdG9vbGtpdCB0cmVlLlxyXG5cclxuICBwcml2YXRlIHJvdXRlclBhdGg6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIHJvdXRlUGFyYW1zOiBMaXN0PGFueT4gPSBudWxsO1xyXG4gIHByaXZhdGUgaW5EZWZhdWx0Um91dGVyT3V0bGV0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5EYXRhVmlldy5Jbml0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgUm91dGVyUGF0aCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucm91dGVyUGF0aDtcclxuICB9XHJcblxyXG4gIGdldCBSb3V0ZXJQYXJhbXMoKTogTGlzdDxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLnJvdXRlUGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgZ2V0IEluRGVmYXVsdFJvdXRlck91dGxldCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmluRGVmYXVsdFJvdXRlck91dGxldDtcclxuICB9XHJcblxyXG4gIElzU3VidGFzazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIERhdGFWaWV3V2FzUmV0cmlldmVkOiBib29sZWFuID0gZmFsc2U7IC8vIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIHZpZXcgd2FzIHJldHJpZXZlZCwgaS5lLiBpdCBpcyBwb3NzaWJsZSB0byBldmFsdWF0ZSBleHByZXNzaW9uc1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGluZGljYXRlcyB3aGV0aGVyIHRoZSB0YXNrIHByZWZpeCB3YXMgcGVyZm9ybWVkIGZvciB0aGlzIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFRhc2tQcmVmaXhFeGVjdXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybnMgdHJ1ZSBpZiB0aGlzIHRhc2sgc2hvdWxkIGJsb2NrIGFjdGl2YXRpb24gb2YgaXRzIGFjc2VzdG9yc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0IElzQmxvY2tpbmdCYXRjaCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5faXNNYWluUHJnICYmIHRoaXMuaXNPcGVuV2luKCkgJiYgIXRoaXMuX2FsbG93RXZlbnRzICYmICF0aGlzLklzSW50ZXJhY3RpdmU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuX251bGxBcml0aG1ldGljID0gQ29uc3RhbnRzLk5VTExfQVJJVEhfVVNFX0RFRjtcclxuICAgIHRoaXMuX3Byb3BUYWIgPSBuZXcgUHJvcFRhYmxlKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0YXNrIGlkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRUYXNrVGFnKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFza1RhZztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIGN0bCBpZHhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEN0bElkeCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N0bElkeDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgdGhpcyB0YXNrIGlzIGEgbWFpbiBwcm9ncmFtIG9mIGFuIGludGVybmFsIG9yIGV4dGVybmFsIGNvbXBvbmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNNYWluUHJvZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc01haW5Qcmc7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSB0b3Btb3N0IG1nZm9ybSBvZiB0aGUgc3ViZm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRUb3BNb3N0Rm9ybSgpOiBNZ0Zvcm1CYXNlIHtcclxuICAgIGxldCBmb3JtOiBNZ0Zvcm1CYXNlID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5Gb3JtICE9PSBudWxsKVxyXG4gICAgICBmb3JtID0gdGhpcy5Gb3JtLmdldFRvcE1vc3RGb3JtKCk7XHJcbiAgICAvLyBlbHNlXHJcbiAgICAvLyBBc3NlcnQgc2hvdWxkIG5vdCBiZSBoZXJlIGJlY2F1c2Ugd2UgaGF2ZSBkaWZmZXJlbnQgY29uZGl0aW9ucyBmb3IgUkMgJiBPTC5cclxuICAgIC8vIE90aGVyIHRoZW4gTWFpbiBQcm9ncmFtLCB0YXNrJ3MgZm9ybSBzaG91bGQgbm90IGJlIG51bGwuXHJcbiAgICAvLyBEZWJ1Zy5Bc3NlcnQoaXNNYWluUHJvZygpKTtcclxuXHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSByZXF1ZXN0ZWQgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Q3RybChjdHJsSWR4OiBudW1iZXIpOiBNZ0NvbnRyb2xCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLkZvcm0uZ2V0Q3RybChjdHJsSWR4KTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNldHMgdGhlIGN1cnJlbnQgdGFzayBtb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxcIj5uZXcgdGFzayBtb2RlPC9wYXJhbT5cclxuICBzZXRNb2RlKHZhbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5nZXRNb2RlKCkgIT09IHZhbCkge1xyXG4gICAgICB0aGlzLnNldFByb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19NT0RFLCB2YWwpO1xyXG4gICAgICBpZiAodGhpcy5fZmxvd01vbml0b3IgIT09IG51bGwpXHJcbiAgICAgICAgdGhpcy5fZmxvd01vbml0b3IuYWRkVGFza0NuZ01vZGUodmFsLCB0aGlzLkdldFRhc2tEZXRhaWxzKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIHRhc2sgbW9kZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TW9kZSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IHRhc2tNb2RlOiBzdHJpbmcgPSBDb25zdGFudHMuVEFTS19NT0RFX01PRElGWTtcclxuICAgIGxldCBwcm9wOiBQcm9wZXJ0eSA9IHRoaXMuX3Byb3BUYWIuZ2V0UHJvcEJ5SWQoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19NT0RFKTtcclxuICAgIGlmIChwcm9wICE9PSBudWxsKSB7XHJcbiAgICAgIHRhc2tNb2RlID0gcHJvcC5HZXRDb21wdXRlZFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFza01vZGU7XHJcbiAgfVxyXG5cclxuICBTZXRJblJlY29tcHV0ZShpblJlY29tcHV0ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0luUmVjb21wdXRlID0gaW5SZWNvbXB1dGU7XHJcbiAgfVxyXG5cclxuICBJc0luUmVjb21wdXRlKCkgOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzSW5SZWNvbXB1dGU7XHJcbiAgfVxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXNldCByZWZyZXNoIHR5cGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHJlc2V0UmVmcmVzaFR5cGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZWZyZXNoVHlwZSA9IENvbnN0YW50cy5UQVNLX1JFRlJFU0hfTk9ORTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgcmVmcmVzaCB0eXBlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFJlZnJlc2hUeXBlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVmcmVzaFR5cGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSByZWZyZXNoIHR5cGUgZm9yIHRoZSBuZXh0IFJlZnJlc2hEaXNwbGF5KCkgY2FsbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZWZyZXNoVHlwZVwiPnRoZSBuZXcgcmVmcmVzaCB0eXBlPC9wYXJhbT5cclxuICBTZXRSZWZyZXNoVHlwZShyZWZyZXNoVHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHJlZnJlc2hUeXBlKSB7XHJcbiAgICAgIGNhc2UgQ29uc3RhbnRzLlRBU0tfUkVGUkVTSF9GT1JNOlxyXG4gICAgICBjYXNlIENvbnN0YW50cy5UQVNLX1JFRlJFU0hfVEFCTEU6XHJcbiAgICAgIGNhc2UgQ29uc3RhbnRzLlRBU0tfUkVGUkVTSF9DVVJSX1JFQzpcclxuICAgICAgICB0aGlzLl9yZWZyZXNoVHlwZSA9IHJlZnJlc2hUeXBlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEdldFJvdXRlclBhcmFtcygpOiBMaXN0PGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucm91dGVQYXJhbXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGxhc3QgcGFya2VkIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldExhc3RQYXJrZWRDdHJsKCk6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhc3RQYXJrZWRDdHJsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBnZXQgdGhlIG9wZW4gd2luZG93XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc09wZW5XaW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3BlbldpbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpZiB0aGUgcHJvcGVydHkgZXhpc3RzIHJldHVybnMgaXRzIGJvb2xlYW4gdmFsdWUgb3RoZXJ3aXNlIHJldHVybnMgdGhlIGRlZmF1bHQgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicHJvcElkXCI+aWQgb2YgdGhlIHByb3BlcnR5PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlZmF1bHRSZXRWYWxcIj50aGUgdmFsdWUgdG8gcmV0dXJuIGluIGNhc2UgdGhlIHByb3BlcnR5IGRvZXMgbm90IGV4aXN0PC9wYXJhbT5cclxuICBhc3luYyBjaGVja1Byb3AocHJvcElkOiBudW1iZXIsIGRlZmF1bHRSZXRWYWw6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBwcm9wOiBQcm9wZXJ0eSA9IHRoaXMuZ2V0UHJvcChwcm9wSWQpO1xyXG4gICAgaWYgKHByb3AgIT09IG51bGwpXHJcbiAgICAgIHJldHVybiBhd2FpdCBwcm9wLmdldFZhbHVlQm9vbGVhbigpO1xyXG4gICAgcmV0dXJuIGRlZmF1bHRSZXRWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgY2xpY2tlZCBjb250cm9sIG9uIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRDbGlja2VkQ29udHJvbCgpOiBNZ0NvbnRyb2xCYXNlIHtcclxuICAgIGxldCBjbGlja2VkQ3RybDogTWdDb250cm9sQmFzZSA9IEV2ZW50cy5HZXRSdW50aW1lQ29udGV4dChudWxsKS5DdXJyZW50Q2xpY2tlZEN0cmw7XHJcblxyXG4gICAgaWYgKGNsaWNrZWRDdHJsICE9PSBudWxsICYmIGNsaWNrZWRDdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkgIT09IHRoaXMpXHJcbiAgICAgIGNsaWNrZWRDdHJsID0gbnVsbDtcclxuXHJcbiAgICByZXR1cm4gY2xpY2tlZEN0cmw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHJldHVybnM+IGtleWJvYXJkTWFwcGluZ1N0YXRlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBnZXRLZXlib2FyZE1hcHBpbmdTdGF0ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2tleWJvYXJkTWFwcGluZ1N0YXRlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiBzdGF0ZSBlbmFibGVkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXRlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzU3RhdGVFbmFibGVkKHN0YXRlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoc3RhdGUgJiB0aGlzLl9rZXlib2FyZE1hcHBpbmdTdGF0ZSkgPiAwO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNldHMgdGhlIHN0YXRlIG9uL29mZlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvblwiPjwvcGFyYW0+XHJcbiAgc2V0S2V5Ym9hcmRNYXBwaW5nU3RhdGUoc3RhdGU6IG51bWJlciwgb246IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2tleWJvYXJkTWFwcGluZ1N0YXRlID0gb25cclxuICAgICAgPyBHdWlUYXNrQmFzZS5ta0ludChHdWlUYXNrQmFzZS5oaVNocnQodGhpcy5fa2V5Ym9hcmRNYXBwaW5nU3RhdGUpICYgfnN0YXRlLCBHdWlUYXNrQmFzZS5sb1NocnQodGhpcy5fa2V5Ym9hcmRNYXBwaW5nU3RhdGUpIHwgc3RhdGUpXHJcbiAgICAgIDogR3VpVGFza0Jhc2UubWtJbnQoR3VpVGFza0Jhc2UuaGlTaHJ0KHRoaXMuX2tleWJvYXJkTWFwcGluZ1N0YXRlKSB8IHN0YXRlLCBHdWlUYXNrQmFzZS5sb1NocnQodGhpcy5fa2V5Ym9hcmRNYXBwaW5nU3RhdGUpICYgfnN0YXRlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBoaWdoZXIgaGFsZiBvZiB0aGUgaW50ZWdlcjwvcmV0dXJucz5cclxuICBzdGF0aWMgaGlTaHJ0KG46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKG4gJiAweGZmZmYwMDAwKSA+PiAxNjtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiblwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBsb3cgaGFsZiBvZiB0aGUgaW50ZWdlcjwvcmV0dXJucz5cclxuICBzdGF0aWMgbG9TaHJ0KG46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gbiAmIDB4MDAwMGZmZmY7XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm4xXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm4yXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHVuaXRlcyBsb3cgaGFsdmVzIG9mIDIgaW50ZWdlcnMgLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBta0ludChuMTogbnVtYmVyLCBuMjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBuMSA8PCAxNiB8IG4yO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGVscEl0ZW0oaWR4OiBudW1iZXIpOiBNYWdpY0hlbHAge1xyXG4gICAgaWYgKHRoaXMuX2hlbHBUYWIgIT09IG51bGwpXHJcbiAgICAgIHJldHVybiB0aGlzLl9oZWxwVGFiLmdldEhlbHAoaWR4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYSBwcm9wZXJ0eSBvZiB0aGUgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj50aGUgaWQgb2YgdGhlIHByb3BlcnR5PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPnRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIHNldFByb3AocHJvcElkOiBudW1iZXIsIHZhbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wcm9wVGFiLnNldFByb3AocHJvcElkLCB2YWwsIHRoaXMsIFwiVFwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHJ1bnRpbWUgbGV2ZWwgb2YgdGhlIHRhc2sgKFJlY29yZCBTdWZmaXgsIEd1aVRhc2tCYXNlIFByZWZpeCwgZXRjLilcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldEJya0xldmVsKGNCcmtMZXZlbDogc3RyaW5nLCBOZXdCcmtMZXZlbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Jya0xldmVsID0gY0Jya0xldmVsO1xyXG4gICAgdGhpcy5fYnJrTGV2ZWxJbmRleCA9IE5ld0Jya0xldmVsSW5kZXg7XHJcblxyXG4gICAgdGhpcy5zZXRNYWluTGV2ZWwoY0Jya0xldmVsKTsgLy8gVXBkYXRlIHRoZSBNYWluTGV2ZWwgYWNjb3JkaW5nIHRvIHRoZSBuZXcgTGV2ZWxcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBydW50aW1lIGxldmVsIG9mIHRoZSB0YXNrIChSZWNvcmQgU3VmZml4LCBHdWlUYXNrQmFzZSBQcmVmaXgsIGV0Yy4pXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRCcmtMZXZlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jya0xldmVsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgaWQgb2YgdGhlIGN1cnJlbnQgZXhlY3V0aW5nIGhhbmRsZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGludCBpZCBvZiB0aGUgY3VycmVudCBleGVjdXRpbmcgaGFuZGxlcjwvcmV0dXJucz5cclxuICBnZXRCcmtMZXZlbEluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnJrTGV2ZWxJbmRleDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHJ1bnRpbWUgbWFpbmxldmVsIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRNYWluTGV2ZWwoY0Jya0xldmVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChjQnJrTGV2ZWwgIT09IG51bGwgJiYgY0Jya0xldmVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGxldmVsOiBzdHJpbmcgPSBjQnJrTGV2ZWwuY2hhckF0KDApO1xyXG4gICAgICAvKiB0aGVuIE1BSU5MRVZFTCBpcyB1cGRhdGVkIG9ubHkgaWYgdGhlIGFjdHVhbCBMZXZlbCBpcyBhIFRBU0sgb3IgUkVDT1JEICggb3Igbm9uZSApIGxldmVsICovXHJcbiAgICAgIGlmIChsZXZlbCA9PT0gQ29uc3RhbnRzLlRBU0tfTEVWRUxfTk9ORSB8fCBsZXZlbCA9PT0gQ29uc3RhbnRzLlRBU0tfTEVWRUxfVEFTSyB8fFxyXG4gICAgICAgIGxldmVsID09PSBDb25zdGFudHMuVEFTS19MRVZFTF9SRUNPUkQpXHJcbiAgICAgICAgdGhpcy5fbWFpbkxldmVsID0gY0Jya0xldmVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgcnVudGltZSBtYWlubGV2ZWwgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldE1haW5MZXZlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX21haW5MZXZlbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGxldmVsIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNMZXZlbFwiPidDJyA9IGluIGNvbnRyb2wsICdSJyA9IGluIHJlY29yZCAob3V0IG9mIGNvbnRyb2wpLCAnVCcgPSBpbiB0YXNrIChvdXQgb2YgcmVjb3JkKSAgICAgIC8vLyA8L3BhcmFtPlxyXG4gIHNldExldmVsKGNMZXZlbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sZXZlbCA9IGNMZXZlbDtcclxuXHJcbiAgICBpZiAodGhpcy5fbGV2ZWwgPT09IENvbnN0YW50cy5UQVNLX0xFVkVMX1JFQ09SRClcclxuICAgICAgdGhpcy5fZW50ZXJlZFJlY0xldmVsID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIGxldmVsIG9mIHRoZSB0YXNrOiAnQycgPSBpbiBjb250cm9sLCAnUicgPSBpbiByZWNvcmQgKG91dCBvZiBjb250cm9sKSwgJ1QnID0gaW4gdGFzayAob3V0IG9mIHJlY29yZClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldExldmVsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBEYXRhU3luY2VkIHByb3BlcnR5IG9mIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldERhdGFTeW5jZWQoc3luY2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBzY2hlbWUgZm9yIG51bGwgYXJpdGhtZXRpY1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TnVsbEFyaXRobWV0aWMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9udWxsQXJpdGhtZXRpYztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGxhc3QgcGFya2VkIGNvbnRyb2wgaW4gdGhpcyB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxcIj5sYXN0IGZvY3VzZWQgY29udHJvbDwvcGFyYW0+XHJcbiAgc2V0TGFzdFBhcmtlZEN0cmwoY3RybDogTWdDb250cm9sQmFzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fbGFzdFBhcmtlZEN0cmwgPSBjdHJsO1xyXG4gICAgdGhpcy5fY3VyclBhcmtlZEZsZCA9ICgodGhpcy5fbGFzdFBhcmtlZEN0cmwgIT09IG51bGwpXHJcbiAgICAgID8gdGhpcy5fbGFzdFBhcmtlZEN0cmwuZ2V0RmllbGQoKVxyXG4gICAgICA6IG51bGwpO1xyXG4gICAgdGhpcy5DdXJyZW50RWRpdGluZ0NvbnRyb2wgPSBjdHJsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBjdXJyZW50IGZpZWxkIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRDdXJyRmllbGQoKTogR3VpRmllbGRCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyUGFya2VkRmxkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBjdXJyZW50IGZpZWxkIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRDdXJyRmllbGQoY3VyckZpZWxkOiBHdWlGaWVsZEJhc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuX2N1cnJQYXJrZWRGbGQgPSBjdXJyRmllbGQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpZWxkIG9mIHRoZSBjdXJyZW50IHBhcmtlZCBjb250cm9sIG9yIC0xIGlmIHRoZXJlIGlzIG5vIHN1Y2ggZmllbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEN1cnJGaWVsZElkeCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJQYXJrZWRGbGQgIT09IG51bGwpXHJcbiAgICAgIHJldHVybiB0aGlzLl9jdXJyUGFya2VkRmxkLmdldElkKCk7XHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfVxyXG5cclxuICBnZXRGaWVsZEJ5VmFsdWVTdHIodmFsdWVTdHI6IHN0cmluZyk6IEZpZWxkRGVmO1xyXG4gIGdldEZpZWxkQnlWYWx1ZVN0cih2YWx1ZVN0cjogc3RyaW5nLCBwYXJlbnQ6IFJlZlBhcmFtPG51bWJlcj4sIHZlZTogUmVmUGFyYW08bnVtYmVyPik6IEZpZWxkRGVmO1xyXG4gIGdldEZpZWxkQnlWYWx1ZVN0cih2YWx1ZVN0cjogc3RyaW5nLCBwYXJlbnQ/OiBSZWZQYXJhbTxudW1iZXI+LCB2ZWU/OiBSZWZQYXJhbTxudW1iZXI+KTogRmllbGREZWYge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpXHJcbiAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkQnlWYWx1ZVN0cl8wKHZhbHVlU3RyKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRCeVZhbHVlU3RyXzEodmFsdWVTdHIsIHBhcmVudCwgdmVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmllbGRCeVZhbHVlU3RyXzAodmFsdWVTdHI6IHN0cmluZyk6IEZpZWxkRGVmIHtcclxuICAgIGxldCBwYXJlbnQ6IG51bWJlcjtcclxuICAgIGxldCB2ZWU6IG51bWJlcjtcclxuICAgIGxldCByZWZQYXJlbnQ6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW0ocGFyZW50KTtcclxuICAgIGxldCByZWZWZWU6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW0odmVlKTtcclxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkQnlWYWx1ZVN0cl8xKHZhbHVlU3RyLCByZWZQYXJlbnQsIHJlZlZlZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCB0aGUgZmllbGQgYnkgJ3ZhbHVlU3RyJ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVTdHJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRGaWVsZEJ5VmFsdWVTdHJfMSh2YWx1ZVN0cjogc3RyaW5nLCBwYXJlbnQ6IFJlZlBhcmFtPG51bWJlcj4sIHZlZTogUmVmUGFyYW08bnVtYmVyPik6IEZpZWxkRGVmIHtcclxuICAgIHBhcmVudC52YWx1ZSA9IHZlZS52YWx1ZSA9IDA7XHJcbiAgICBsZXQgdGVtcEZpZWxkOiBGaWVsZERlZiA9IG51bGw7XHJcbiAgICBsZXQgY29tbWE6IG51bWJlciA9IHZhbHVlU3RyLmluZGV4T2YoXCIsXCIpO1xyXG4gICAgaWYgKGNvbW1hID4gMCkge1xyXG4gICAgICBsZXQgcGFyZW50SWQ6IG51bWJlciA9IE5OdW1iZXIuUGFyc2UodmFsdWVTdHIuc3Vic3RyKDAsIGNvbW1hKSk7XHJcbiAgICAgIGxldCBmbGRJZHg6IG51bWJlciA9IE5OdW1iZXIuUGFyc2UodmFsdWVTdHIuc3Vic3RyKGNvbW1hICsgMSkpO1xyXG4gICAgICB0ZW1wRmllbGQgPSAoKHBhcmVudElkICE9PSAwKVxyXG4gICAgICAgID8gdGhpcy5nZXRGaWVsZERlZihwYXJlbnRJZCwgZmxkSWR4KVxyXG4gICAgICAgIDogdGhpcy5nZXRGaWVsZERlZihmbGRJZHgpKTtcclxuICAgICAgcGFyZW50LnZhbHVlID0gcGFyZW50SWQ7XHJcbiAgICAgIHZlZS52YWx1ZSA9IGZsZElkeDtcclxuICAgIH1cclxuICAgIHJldHVybiB0ZW1wRmllbGQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCB0aGUgZmllbGQgZnJvbSBhIDEtYmFzZWQgbWFpbiBwcm9nIGFyZ3VtZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVN0clwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRNYWluUHJvZ0ZpZWxkQnlWYWx1ZVN0cih2YWx1ZVN0cjogc3RyaW5nKTogRmllbGREZWYge1xyXG4gICAgLy8gc3RyaW5nIGlzIDEtYmFzZWQgLSBuZWVkIHRvIHN1YnRyYWN0IDEgdG8gZ2V0IHRvIDAtYmFzZWQgdmFsdWVcclxuICAgIGxldCBmbGRJZHg6IG51bWJlciA9IE5OdW1iZXIuUGFyc2UodmFsdWVTdHIpIC0gMTtcclxuICAgIHJldHVybiB0aGlzLmdldEZpZWxkRGVmKGZsZElkeCk7XHJcbiAgfVxyXG5cclxuICBnZXRGaWVsZERlZihmbGRJZDogbnVtYmVyKTogRmllbGREZWY7XHJcbiAgZ2V0RmllbGREZWYocGFyZW50OiBudW1iZXIsIGZsZElkeDogbnVtYmVyKTogRmllbGREZWY7XHJcbiAgZ2V0RmllbGREZWYoZmxkSWRPclBhcmVudDogbnVtYmVyLCBmbGRJZHg/OiBudW1iZXIpOiBGaWVsZERlZiB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSlcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRfMChmbGRJZE9yUGFyZW50KTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRfMShmbGRJZE9yUGFyZW50LCBmbGRJZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBhIGZpZWxkIGJ5IGl0cyBpZHhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZmxkSWRcIj5pZCBvZiB0aGUgZmllbGQgPC9wYXJhbT5cclxuICBwcml2YXRlIGdldEZpZWxkXzAoZmxkSWQ6IG51bWJlcik6IEZpZWxkRGVmIHtcclxuICAgIHJldHVybiB0aGlzLkRhdGFWaWV3LmdldEZpZWxkKGZsZElkKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW5pdGlhbGl6ZSB0aGUgY3VycmVudCB0YXNrJ3MgZm9ybS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIEluaXRGb3JtKCkge1xyXG4gICAgaWYgKHRoaXMuRm9ybSAhPT0gbnVsbCAmJiB0aGlzLmlzT3BlbldpbigpKSB7XHJcbiAgICAgIHRoaXMuRm9ybS5JbkluaXRGb3JtID0gdHJ1ZTtcclxuICAgICAgdGhpcy5Gb3JtLmluaXQoKTtcclxuXHJcblxyXG4gICAgICB0aGlzLlNldFJlZnJlc2hUeXBlKENvbnN0YW50cy5UQVNLX1JFRlJFU0hfRk9STSk7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLlJlZnJlc2hEaXNwbGF5KCk7XHJcblxyXG4gICAgICBDb21tYW5kcy5iZWdpbkludm9rZSgpO1xyXG4gICAgICB0aGlzLkZvcm0uSW5Jbml0Rm9ybSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXN1bWUgc3ViZm9ybSBsYXlvdXRcclxuICAvLy8gPC9zdW1tYXJ5XHJcbiAgUmVzdW1lU3ViZm9ybUxheW91dCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLkZvcm0gIT09IG51bGwpIHtcclxuICAgICAgbGV0IHN1YkZvcm1DdHJsOiBNZ0NvbnRyb2xCYXNlID0gPE1nQ29udHJvbEJhc2U+dGhpcy5Gb3JtLmdldFN1YkZvcm1DdHJsKCk7XHJcbiAgICAgIGlmIChzdWJGb3JtQ3RybCAhPT0gbnVsbCAmJiB0aGlzLnNob3VsZFJlc3VtZVN1YmZvcm1MYXlvdXQpIHtcclxuICAgICAgICAvLyByZWZyZXNoIHRoZSB2aXNpYmxlIHByb3BlcnR5XHJcbiAgICAgICAgQ29tbWFuZHMuYWRkT3BlcmF0aW9uV2l0aExpbmUoQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZLCBzdWJGb3JtQ3RybCwgMCxcclxuICAgICAgICAgICBIdG1sUHJvcGVydGllcy5WaXNpYmxlICwgc3ViRm9ybUN0cmwuaXNWaXNpYmxlKCkpO1xyXG5cclxuICAgICAgICB0aGlzLnNob3VsZFJlc3VtZVN1YmZvcm1MYXlvdXQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wgd2hpY2ggd2FzIGxhc3QgcGFya2VkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlcHRoXCI+dGhlIGdlbmVyYXRpb248L3BhcmFtPlxyXG4gIEdldExhc3RQYXJrZWRDdHJsTmFtZShkZXB0aDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBhbmNlc3RvcjogR3VpVGFza0Jhc2UgPSA8R3VpVGFza0Jhc2U+dGhpcy5HZXRUYXNrQW5jZXN0b3IoZGVwdGgpO1xyXG4gICAgaWYgKGFuY2VzdG9yID09PSBudWxsIHx8IGFuY2VzdG9yLl9sYXN0UGFya2VkQ3RybCA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICByZXR1cm4gYW5jZXN0b3IuX2xhc3RQYXJrZWRDdHJsLk5hbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBmb3JtIG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IEZvcm0gaXMgdGhlIGZvcm0gb2YgdGhlIHRhc2s8L3JldHVybnM+XHJcbiAgZ2V0Rm9ybSgpOiBNZ0Zvcm1CYXNlIHtcclxuICAgIHJldHVybiB0aGlzLkZvcm07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFNldCB0YXNrJ3MgZm9ybS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gRm9ybSBpcyB0aGUgZm9ybSBvZiB0aGUgdGFzazwvcmV0dXJucz5cclxuICBTZXRGb3JtKHZhbHVlOiBNZ0Zvcm1CYXNlKTogTWdGb3JtQmFzZSB7XHJcbiAgICB0aGlzLkZvcm0gPSB2YWx1ZTtcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZFeGlzdFByb3AocHJvcElkOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGxldCBleGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLl9wcm9wVGFiICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBwcm9wOiBQcm9wZXJ0eSA9IHRoaXMuX3Byb3BUYWIuZ2V0UHJvcEJ5SWQocHJvcElkKTtcclxuICAgICAgZXhpc3QgPSAocHJvcCAhPT0gbnVsbCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXhpc3Q7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGEgdGFzayBwcm9wZXJ0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj5JZCBvZiB0aGUgcmVxdWVzdGVkIHByb3BlcnR5XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgZ2V0UHJvcChwcm9wSWQ6IG51bWJlcik6IFByb3BlcnR5IHtcclxuICAgIGxldCBwcm9wOiBQcm9wZXJ0eSA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuX3Byb3BUYWIgIT09IG51bGwpIHtcclxuICAgICAgcHJvcCA9IHRoaXMuX3Byb3BUYWIuZ2V0UHJvcEJ5SWQocHJvcElkKTtcclxuXHJcbiAgICAgIC8vIGlmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0IHRoZW4gY3JlYXRlIGEgbmV3IHByb3BlcnR5IGFuZCBnaXZlIGl0IHRoZSBkZWZhdWx0IHZhbHVlXHJcbiAgICAgIC8vIGluIGFkZGl0aW9uIGFkZCB0aGlzIHByb3BlcnR5IHRvIHRoZSBwcm9wZXJ0aWVzIHRhYmxlXHJcbiAgICAgIGlmIChwcm9wID09PSBudWxsKSB7XHJcbiAgICAgICAgcHJvcCA9IFByb3BlcnR5LmdldERlZmF1bHRQcm9wKHByb3BJZCwgR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX1RBU0ssIHRoaXMpO1xyXG4gICAgICAgIGlmIChwcm9wICE9PSBudWxsKSB7XHJcbiAgICAgICAgICBwcm9wLlN0dWRpb1ZhbHVlID0gcHJvcC5nZXRPcmdWYWx1ZSgpO1xyXG4gICAgICAgICAgdGhpcy5fcHJvcFRhYi5hZGRQcm9wKHByb3ApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb3A7XHJcbiAgfVxyXG5cclxuICBHZXRDb21wdXRlZFByb3BlcnR5KHByb3BJZDogbnVtYmVyKTogUHJvcGVydHkge1xyXG4gICAgbGV0IHByb3A6IFByb3BlcnR5ID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5fcHJvcFRhYiAhPT0gbnVsbClcclxuICAgICAgcHJvcCA9IHRoaXMuX3Byb3BUYWIuZ2V0UHJvcEJ5SWQocHJvcElkKTtcclxuICAgIHJldHVybiBwcm9wO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgY29tcG9uZW50IGlkeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Q29tcElkeCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbXBJZHg7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgdGhpcyBpcyBmaXJzdCByZWZyZXNoXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIElzRmlyc3RSZWZyZXNoT2ZQcm9wcygpOiBib29sZWFuIHtcclxuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBFdmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24gY29ycmVzcG9uZGluZyB0byB0aGUgcGFzc2VkIElELlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZXhwSWRcIj5FeHAgSUQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1R5cGVcIj5leHBlY3RlZCByZXR1cm4gdHlwZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGVuZ3RoXCI+RXhwZWN0ZWQgbGVuIC0gaXMgbm90IHVzZWQsIGl0IG11c3QgYmUgaGVyZSBiZWNhdXNlIG9mIGNvbXB1dGFiaWxpdHkgd2l0aCBSaWNoIENsaWVudDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udGVudFR5cGVVbmljb2RlXCI+c2hvdWxkIHRoZSByZXN1bHQgYmUgdW5pY29kZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzQ2VsbFR5cGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImFsd2F5c0V2YWx1YXRlXCI+Zm9yIGZvcm0gcHJvcGVydGllcyBhbmQgc29tZSBjb250cm9sIHByb3BlcnRpZXMgd2UgYWx3YXlzIGV2YWx1YXRlIGV4cHJlc3Npb25zPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ3YXNFdmFsdWF0ZWRcIj5pbmRpY2F0ZXMgd2hldGhlciB0aGUgZXhwcmVzc2lvbiB3YXMgZXZhbHVhdGVkPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+ZXZhbHVhdGVkIHZhbHVlPC9yZXR1cm5zPlxyXG4gIGFzeW5jIEV2YWx1YXRlRXhwcmVzc2lvbihleHBJZDogbnVtYmVyLCByZXNUeXBlOiBTdG9yYWdlQXR0cmlidXRlLCBsZW5ndGg6IG51bWJlciwgY29udGVudFR5cGVVbmljb2RlOiBib29sZWFuLCByZXNDZWxsVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgYWx3YXlzRXZhbHVhdGU6IGJvb2xlYW4sIHdhc0V2YWx1YXRlZDogUmVmUGFyYW08Ym9vbGVhbj4pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gbnVsbDtcclxuICAgIHdhc0V2YWx1YXRlZC52YWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChhbHdheXNFdmFsdWF0ZSB8fCB0aGlzLkRhdGFWaWV3V2FzUmV0cmlldmVkKSB7XHJcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuQ2FsY3VsYXRlRXhwcmVzc2lvbihleHBJZCwgcmVzVHlwZSwgbGVuZ3RoKTtcclxuICAgICAgd2FzRXZhbHVhdGVkLnZhbHVlID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBHZXRFeHByZXNzaW9uU3RvcmFnZShleHBJZDogbnVtYmVyKTogU3RvcmFnZUF0dHJpYnV0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5HZXRFeHByZXNzaW9uU3RvcmFnZShleHBJZCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIENhbGN1bGF0ZSBleHByZXNpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImV4cElkXCI+VGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1R5cGVcIj5UaGUgZXhwZWN0ZWQgcmVzdWx0IHR5cGUuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsZW5ndGhcIj5UaGUgZXhwZWN0ZWQgbGVuZ3RoIG9mIHRoZSByZXN1bHQuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250ZW50VHlwZVVuaWNvZGVcIj5EZW5vdGVzIHdoZXRoZXIgdGhlIHJlc3VsdCBpcyBleHBlY3RlZCB0byBiZSBhIHVuaWNvZGUgc3RyaW5nLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzQ2VsbFR5cGVcIj5Ob3QgdXNlZC48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgYXN5bmMgQ2FsY3VsYXRlRXhwcmVzc2lvbihleHBJZDogbnVtYmVyLCByZXNUeXBlOiBTdG9yYWdlQXR0cmlidXRlLCBsZW5ndGg6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPntcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNyZWF0ZXMgYSBtZ2Zvcm0gb2JqZWN0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGFic3RyYWN0IENvbnN0cnVjdE1nRm9ybShhbHJlYWR5U2V0UGFyZW50Rm9ybTogUmVmUGFyYW08Ym9vbGVhbj4pOiBNZ0Zvcm1CYXNlIDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiB0aGUgdGFzayBpcyBzdGFydGVkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc1N0YXJ0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0ZWxscyB3aGV0aGVyIHRoZSB0YXNrIGlzIGFib3J0aW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc0Fib3J0aW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgYW5jZXN0b3Igb2YgdGhlIEd1aVRhc2tCYXNlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImdlbmVyYXRpb25cIj5vZiB0aGUgYW5jZXN0b3IgdGFzazwvcGFyYW0+XHJcbiAgYWJzdHJhY3QgR2V0VGFza0FuY2VzdG9yKGdlbmVyYXRpb246IG51bWJlcik6IElUYXNrO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCB0aGUgY29udGV4dCB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGFic3RyYWN0IEdldENvbnRleHRUYXNrKCk6IElUYXNrO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybnMgdGFzayBkZXB0aFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBhYnN0cmFjdCBHZXRUYXNrRGVwdGgoKTogbnVtYmVyO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJlZnJlc2ggdGhlIGRpc3BsYXksIHBhaW50IHRoZSBjb250cm9scyBhbmQgdGhlaXIgcHJvcGVydGllcyBhZ2FpbiA8L3N1bW1hcnk+XHJcbiAgYWJzdHJhY3QgUmVmcmVzaERpc3BsYXkoKTogdm9pZCA7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gZ2V0IHRoZSB2YWx1ZSBvZiBhIGZpZWxkLiA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZmllbGREZWZcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbHVlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc051bGxcIj48L3BhcmFtPlxyXG4gIC8vIFRPRE8gc2FkaGFuIHJlbW92ZSB1bnVzZWRcclxuICAvLyBhYnN0cmFjdCBhc3luYyBnZXRGaWVsZFZhbHVlKGZpZWxkRGVmOiBGaWVsZERlZiwgdmFsdWU6IFJlZlBhcmFtPHN0cmluZz4sIGlzTnVsbDogUmVmUGFyYW08Ym9vbGVhbj4pOiBQcm9taXNlPHZvaWQ+IDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBnZXQgdGhlIGRpc3BsYXkgdmFsdWUgb2YgYSBmaWVsZC4gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZpZWxkRGVmXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNOdWxsXCI+PC9wYXJhbT5cclxuICBhYnN0cmFjdCBnZXRGaWVsZERpc3BsYXlWYWx1ZShmaWVsZERlZjogRmllbGREZWYsIHZhbHVlOiBSZWZQYXJhbTxzdHJpbmc+LCBpc051bGw6IFJlZlBhcmFtPGJvb2xlYW4+KTogdm9pZCA7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gdXBkYXRlcyB0aGUgZmllbGQncyB2YWx1ZSBhbmQgc3RhcnRzIHJlY29tcHV0ZS4gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZpZWxkRGVmXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaXNOdWxsXCI+PC9wYXJhbT5cclxuICBhYnN0cmFjdCBVcGRhdGVGaWVsZFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUoZmllbGREZWY6IEZpZWxkRGVmLCB2YWx1ZTogc3RyaW5nLCBpc051bGw6IGJvb2xlYW4pOiB2b2lkIDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmdldCBhIGZpZWxkIGZyb20gdGhlIHRhc2sudHJhdmVsIGJ5IHBhcmVudHMgKGkuZS4gTk9UIGJ5IHRyaWdnZXJpbmcgdGFza3MpLjwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudFwiPmdlbmVyYXRpb24gbnVtYmVyICgwIGlzIGN1cnJlbnQgdGFzayk8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZmxkSWR4XCI+dGhlIGZpZWxkIGluZGV4IHdpdGhpbiBpdHMgdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgaWQgb2YgdGhlIGZpZWxkIGRlc2NyaWJlZCBieSBwYXJlbnQgKyBpZHg8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRGaWVsZF8xKHBhcmVudDogbnVtYmVyLCBmbGRJZHg6IG51bWJlcik6IEZpZWxkRGVmIHtcclxuXHJcbiAgICBzd2l0Y2ggKHBhcmVudCkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGREZWYoZmxkSWR4KTtcclxuXHJcbiAgICAgIGNhc2UgR3VpVGFza0Jhc2UuTUFJTl9QUkdfUEFSRU5UX0lEOlxyXG4gICAgICAgIC8vIGZpbmQgdGhlIG1haW4gcHJvZ3JhbSB1c2luZyB0aGUgY29tcG9uZW50IGlkIChjdGwgaWR4KVxyXG4gICAgICAgIGxldCBjb21wTWFpblByb2c6IEd1aVRhc2tCYXNlID0gPEd1aVRhc2tCYXNlPiBHdWlEYXRhQ29sbGVjdGlvbi5NR0RhdGFUYWJsZS5HZXRNYWluUHJvZ0J5Q3RsSWR4KHRoaXMuQ29udGV4dElELCB0aGlzLl9jdGxJZHgpO1xyXG4gICAgICAgIHJldHVybiBjb21wTWFpblByb2cuZ2V0RmllbGREZWYoZmxkSWR4KTtcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcGFyZW50LS07XHJcbiAgICAgICAgaWYgKHRoaXMuU3R1ZGlvUGFyZW50VGFzayAhPSBudWxsKVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuU3R1ZGlvUGFyZW50VGFzay5nZXRGaWVsZERlZihwYXJlbnQsIGZsZElkeCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSB0YXNrIGF0dHJpYnV0ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGZpbGxBdHRyaWJ1dGVzKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcbiAgICAgIC8vIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBzdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihYTUxDb25zdGFudHMuTUdfVEFHX1RBU0spICsgWE1MQ29uc3RhbnRzLk1HX1RBR19UQVNLLmxlbmd0aCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5zOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcblxyXG4gICAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgdG9rZW5zLmxlbmd0aDsgaiA9IGogKyAyKSB7XHJcbiAgICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gdG9rZW5zLmdldF9JdGVtKGopO1xyXG4gICAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gdG9rZW5zLmdldF9JdGVtKGogKyAxKTtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWVTdHIpICYmIEV2ZW50cy5TaG91bGRMb2coTG9nZ2VyX0xvZ0xldmVscy5EZXZlbG9wbWVudCkpXHJcbiAgICAgICAgICBFdmVudHMuV3JpdGVEZXZUb0xvZyhOU3RyaW5nLkZvcm1hdChcIkluIFRhc2tCYXNlLmZpbGxBdHRyaWJ1dGVzKCk6IFVucHJvY2Vzc2VkKCEpIGF0dHJpYnV0ZTogJ3swfScgPSAnezF9J1wiLCBhdHRyaWJ1dGUsIHZhbHVlU3RyKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHBhcnNlci5nZXRDdXJySW5kZXgoKSkgKyAxKTsgLy8gdG8gZGVsZXRlIFwiPlwiIHRvb1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgdGFzayBhdHRyaWJ1dGVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRBdHRyaWJ1dGUoYXR0cmlidXRlOiBzdHJpbmcsIHZhbHVlU3RyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBpc1RhZ1Byb2Nlc3NlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9BUFBMX0dVSUQ6XHJcbiAgICAgICAgdGhpcy5BcHBsaWNhdGlvbkd1aWQgPSB2YWx1ZVN0cjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfUFJPR1JBTV9JU046XHJcbiAgICAgICAgdGhpcy5Qcm9ncmFtSXNuID0gTk51bWJlci5QYXJzZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX1RBU0tfSVNOOlxyXG4gICAgICAgIHRoaXMuVGFza0lzbiA9IE5OdW1iZXIuUGFyc2UodmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9UT09MS0lUX1BBUkVOVF9UQVNLOlxyXG4gICAgICAgIGlmIChOTnVtYmVyLlBhcnNlKHZhbHVlU3RyKSAhPT0gMClcclxuICAgICAgICAgIHRoaXMuU3R1ZGlvUGFyZW50VGFzayA9IDxHdWlUYXNrQmFzZT5HdWlEYXRhQ29sbGVjdGlvbi5NR0RhdGFUYWJsZS5HZXRUYXNrQnlJRCh2YWx1ZVN0cik7XHJcblxyXG4gICAgICAgIHRoaXMuSXNTdWJ0YXNrID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfVEFTS0lEOlxyXG4gICAgICAgIHRoaXMuc2V0VGFza0lkKHZhbHVlU3RyKTtcclxuICAgICAgICBpZiAoRXZlbnRzLlNob3VsZExvZyhMb2dnZXJfTG9nTGV2ZWxzLkRldmVsb3BtZW50KSlcclxuICAgICAgICAgIEV2ZW50cy5Xcml0ZURldlRvTG9nKFwiVEFTSzogXCIgKyB0aGlzLl90YXNrVGFnKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfQ1RMX0lEWDpcclxuICAgICAgICB0aGlzLnNldEN0bEFuZENvbXBJZHgodmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9NQUlOUFJHOlxyXG4gICAgICAgIHRoaXMuc2V0TWFpblByZyh2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX05VTExfQVJJVEhNRVRJQzpcclxuICAgICAgICB0aGlzLnNldE51bGxBcml0aG1ldGljKHZhbHVlU3RyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfSU5URVJBQ1RJVkU6XHJcbiAgICAgICAgdGhpcy5zZXRJc0ludGVyYWNpdmUodmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9PUEVOX1dJTjpcclxuICAgICAgICB0aGlzLnNldE9wZW5XaW4odmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9BTExPV19FVkVOVFM6XHJcbiAgICAgICAgdGhpcy5TZXRBbGxvd0V2ZW50cyh2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0lTUFJHOlxyXG4gICAgICAgIHRoaXMuc2V0SXNQcmcodmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9JQ09OX0ZJTEVfTkFNRTpcclxuICAgICAgICB0aGlzLkljb25GaWxlTmFtZSA9IHZhbHVlU3RyO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfUEFSQUxMRUw6XHJcbiAgICAgICAgdGhpcy5Jc1BhcmFsbGVsID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9ST1VURVJfUEFUSDpcclxuICAgICAgICBpZiAodmFsdWVTdHIudHJpbSgpICE9IFwiXCIpXHJcbiAgICAgICAgICB0aGlzLnJvdXRlclBhdGggPSB2YWx1ZVN0cjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfSU5fREVGQVVMVF9ST1VURVJfT1VUTEVUOlxyXG4gICAgICAgIHRoaXMuaW5EZWZhdWx0Um91dGVyT3V0bGV0ID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBpc1RhZ1Byb2Nlc3NlZCA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc1RhZ1Byb2Nlc3NlZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW5pdCBkYXRhIGZvciBmb3JtIGFuZCByZXR1cm4gdGhlIGZvcm1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZvdW5kVGFnTmFtZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicGFyZW50Rm9ybVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBGb3JtSW5pdERhdGEocGFyZW50Rm9ybTogTWdGb3JtQmFzZSk6IE1nRm9ybUJhc2Uge1xyXG4gICAgbGV0IGFscmVhZHlTZXRQYXJlbnRGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgcmVmQWxyZWFkeVNldFBhcmVudEZvcm06IFJlZlBhcmFtPGJvb2xlYW4+ID0gbmV3IFJlZlBhcmFtKGFscmVhZHlTZXRQYXJlbnRGb3JtKTtcclxuXHJcbiAgICBpZiAodGhpcy5Gb3JtID09PSBudWxsKVxyXG4gICAgICB0aGlzLkZvcm0gPSB0aGlzLkNvbnN0cnVjdE1nRm9ybShyZWZBbHJlYWR5U2V0UGFyZW50Rm9ybSk7XHJcblxyXG4gICAgaWYgKCFhbHJlYWR5U2V0UGFyZW50Rm9ybSlcclxuICAgICAgdGhpcy5Gb3JtLlBhcmVudEZvcm0gPSBwYXJlbnRGb3JtO1xyXG5cclxuICAgIGlmIChFdmVudHMuU2hvdWxkTG9nKExvZ2dlcl9Mb2dMZXZlbHMuRGV2ZWxvcG1lbnQpKVxyXG4gICAgICBFdmVudHMuV3JpdGVEZXZUb0xvZyhcImZvcm1cIik7XHJcblxyXG4gICAgdGhpcy5Gb3JtLmZpbGxEYXRhKHRoaXMpO1xyXG4gICAgcmV0dXJuIHRoaXMuRm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGFzayBpZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0VGFza0lkKHZhbHVlU3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Rhc2tUYWcgPSB2YWx1ZVN0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgY3RsSWR4ICYgY29tcElkeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBzZXRDdGxBbmRDb21wSWR4KHZhbHVlU3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXIgPSB2YWx1ZVN0ci5pbmRleE9mKFwiLFwiKTtcclxuICAgIGlmIChpID4gLTEpIHtcclxuICAgICAgdGhpcy5fY3RsSWR4ID0gTk51bWJlci5QYXJzZSh2YWx1ZVN0ci5zdWJzdHIoMCwgaSkpO1xyXG4gICAgICB0aGlzLl9jb21wSWR4ID0gTk51bWJlci5QYXJzZSh2YWx1ZVN0ci5zdWJzdHIoaSArIDEpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gR2V0IGFuY2VzdG9yIHRhc2sgY29udGFpbmluZyBmb3JtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+R3VpVGFza0Jhc2U8L3JldHVybnM+XHJcbiAgR2V0QW5jZXN0b3JUYXNrQ29udGFpbmluZ0Zvcm0oKTogR3VpVGFza0Jhc2Uge1xyXG4gICAgbGV0IHBhcmVudFRhc2s6IEd1aVRhc2tCYXNlID0gPEd1aVRhc2tCYXNlPnRoaXMuR2V0VGFza0FuY2VzdG9yKDEpO1xyXG4gICAgd2hpbGUgKHBhcmVudFRhc2sgIT09IG51bGwgJiYgcGFyZW50VGFzay5nZXRGb3JtKCkgPT09IG51bGwpIHtcclxuICAgICAgcGFyZW50VGFzayA9IDxHdWlUYXNrQmFzZT5wYXJlbnRUYXNrLkdldFRhc2tBbmNlc3RvcigxKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGFyZW50VGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gc2V0IGlzTWFpblByZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVTdHJcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgc2V0TWFpblByZyh2YWx1ZVN0cjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pc01haW5QcmcgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNldCBudWxsQXJpdGhtZXRpY1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVTdHJcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgc2V0TnVsbEFyaXRobWV0aWModmFsdWVTdHI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fbnVsbEFyaXRobWV0aWMgPSB2YWx1ZVN0ci5jaGFyQXQoMCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNldCBpc0ludGVyYWN0aXZlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVN0clwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzZXRJc0ludGVyYWNpdmUodmFsdWVTdHI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5Jc0ludGVyYWN0aXZlID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzZXQgb3BlbldpblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVTdHJcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgc2V0T3Blbldpbih2YWx1ZVN0cjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vcGVuV2luID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzZXQgb3BlbldpblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVTdHJcIj48L3BhcmFtPlxyXG4gIFNldE9wZW5XaW4odmFsdWVib29sOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vcGVuV2luID0gdmFsdWVib29sO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzZXQgQWxsb3dFdmVudHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbHVlU3RyXCI+PC9wYXJhbT5cclxuICBTZXRBbGxvd0V2ZW50cyh2YWx1ZVN0cjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hbGxvd0V2ZW50cyA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gc2V0IGlzUHJnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVN0clwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzZXRJc1ByZyh2YWx1ZVN0cjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pc1ByZyA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICB9XHJcblxyXG4gIFNob3VsZEV2YWx1YXRlUHJvcGVydHlMb2NhbGx5KHByb3BJZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCBHZXRUYXNrRGV0YWlscygpOiBzdHJpbmc7XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+IFNldHMgdGhlIG1lc3NhZ2Ugb24gdGhlIG1lc3NhZ2UgcGFuZSBvZiBzdGF0dXMgYmFyLjwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtc2dcIj5tZXNzYWdlIHRvIGJlIHNob3duPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzb3VuZEJlZXBcIj50byBiZWVwIG9yIG5vdDwvcGFyYW0+XHJcbiAgV3JpdGVUb01lc3NhZ2VQYW5lKG1zZzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAvLyBTdG9yeSAxNDkzMTYgOiBzZW5kIG1lc3NhZ2UgdG8gY29uc29sZVxyXG4gICAgaWYgKG1zZyAhPSBudWxsKVxyXG4gICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB3cml0ZSBhIG1lc3NhZ2UgdG8gc3RhdHVzIGJhclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtc2dJZFwiPmlkIG9mIG1lc3NhZ2UgdG8gYmUgd3JpdHRlbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic291bmRCZWVwXCI+PC9wYXJhbT5cclxuICBXcml0ZVRvTWVzc2FnZVBhbmVieU1zZ0lkKG1zZ0lkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBtc2c6IHN0cmluZyA9IEV2ZW50cy5HZXRNZXNzYWdlU3RyaW5nKG1zZ0lkKTtcclxuICAgIHRoaXMuV3JpdGVUb01lc3NhZ2VQYW5lKG1zZyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
510
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpVGFza0Jhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvdGFza3MvR3VpVGFza0Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFPLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDL0YsT0FBTyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBb0IsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBT3hHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUkzQyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzdELE1BQU0sT0FBZ0IsV0FBVztJQTZDeEIsSUFBSTtRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQyxx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eEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFNTyxlQUFlLENBQUMsUUFBZ0I7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFNTyxVQUFVLENBQUMsUUFBZ0I7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFNRCxVQUFVLENBQUMsU0FBa0I7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7SUFDNUIsQ0FBQztJQU1ELGNBQWMsQ0FBQyxRQUFnQjtRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQU1PLFFBQVEsQ0FBQyxRQUFnQjtRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELDZCQUE2QixDQUFDLE1BQWM7UUFDMUMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBUUQsa0JBQWtCLENBQUMsR0FBVztRQUU1QixJQUFJLEdBQUcsSUFBSSxJQUFJO1lBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBUUQseUJBQXlCLENBQUMsS0FBYTtRQUNyQyxJQUFJLEdBQUcsR0FBVyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7O0FBeDdCZ0IsOEJBQWtCLEdBQVcsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0LCBOTnVtYmVyLCBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiwgTlN0cmluZywgUmVmUGFyYW19IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge0NvbnN0YW50cywgTG9nZ2VyX0xvZ0xldmVscywgU3RvcmFnZUF0dHJpYnV0ZSwgWE1MQ29uc3RhbnRzLCBYbWxQYXJzZXJ9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7SVRhc2t9IGZyb20gXCIuL0lUYXNrXCI7XHJcbmltcG9ydCB7UHJvcFBhcmVudEludGVyZmFjZX0gZnJvbSBcIi4uLy4uL2d1aS9Qcm9wUGFyZW50SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7SUZsb3dNb25pdG9yUXVldWV9IGZyb20gXCIuLi8uLi9JRmxvd01vbml0b3JRdWV1ZVwiO1xyXG5pbXBvcnQge01nQ29udHJvbEJhc2V9IGZyb20gXCIuLi9ndWkvTWdDb250cm9sQmFzZVwiO1xyXG5pbXBvcnQge0d1aUZpZWxkQmFzZX0gZnJvbSBcIi4uL2RhdGEvR3VpRmllbGRCYXNlXCI7XHJcbmltcG9ydCB7TWdGb3JtQmFzZX0gZnJvbSBcIi4uL2d1aS9NZ0Zvcm1CYXNlXCI7XHJcbmltcG9ydCB7UHJvcFRhYmxlfSBmcm9tIFwiLi4vZ3VpL1Byb3BUYWJsZVwiO1xyXG5pbXBvcnQge0hlbHBzLCBNYWdpY0hlbHB9IGZyb20gXCIuLi9ndWkvSGVscHNcIjtcclxuaW1wb3J0IHtHdWlEYXRhVmlld0Jhc2V9IGZyb20gXCIuLi9kYXRhL0d1aURhdGFWaWV3QmFzZVwiO1xyXG5pbXBvcnQge0lBY3Rpb25NYW5hZ2VyfSBmcm9tIFwiLi4vZXZlbnRzL0lBY3Rpb25NYW5hZ2VyXCI7XHJcbmltcG9ydCB7UHJvcGVydHl9IGZyb20gXCIuLi9ndWkvUHJvcGVydHlcIjtcclxuaW1wb3J0IHtQcm9wSW50ZXJmYWNlfSBmcm9tIFwiLi4vZ3VpL1Byb3BJbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtGaWVsZERlZn0gZnJvbSBcIi4uL2RhdGEvRmllbGREZWZcIjtcclxuaW1wb3J0IHtDb21tYW5kc30gZnJvbSBcIi4uLy4uL0NvbW1hbmRzXCI7XHJcbmltcG9ydCB7RXZlbnRzfSBmcm9tIFwiLi4vLi4vRXZlbnRzXCI7XHJcbmltcG9ydCB7R3VpQ29uc3RhbnRzfSBmcm9tIFwiLi4vLi4vR3VpQ29uc3RhbnRzXCI7XHJcbmltcG9ydCB7R3VpRGF0YUNvbGxlY3Rpb259IGZyb20gXCIuL0d1aURhdGFDb2xsZWN0aW9uXCI7XHJcbmltcG9ydCB7IENvbW1hbmRUeXBlLCBIdG1sUHJvcGVydGllcyB9IGZyb20gXCIuLi8uLi9HdWlFbnVtc1wiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gdGFzayBwcm9wZXJ0aWVzICgrIGZldyBhY2Nlc3MgbWV0aG9kcykgcmVxdWlyZWQgYW5kIHJlbGV2YW50IGZvciB0aGUgR1VJIG5hbWVzcGFjZS5cclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEd1aVRhc2tCYXNlIGltcGxlbWVudHMgSVRhc2ssIFByb3BQYXJlbnRJbnRlcmZhY2Uge1xyXG4gIHByb3RlY3RlZCBzdGF0aWMgTUFJTl9QUkdfUEFSRU5UX0lEOiBudW1iZXIgPSAzMjc2ODtcclxuICBfZmxvd01vbml0b3I6IElGbG93TW9uaXRvclF1ZXVlID0gbnVsbDtcclxuICBwcml2YXRlIF9rZXlib2FyZE1hcHBpbmdTdGF0ZTogbnVtYmVyID0gMHhGRkZGMDAwMDtcclxuICBfcmVmcmVzaFR5cGU6IHN0cmluZyA9IFwiVFwiO1xyXG4gIF9sYXN0UGFya2VkQ3RybDogTWdDb250cm9sQmFzZSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfYnJrTGV2ZWw6IHN0cmluZyA9IG51bGw7IC8vIHRoZSBydW50aW1lIGxldmVsIChSZWNvcmQgIFN1ZmZpeCwgR3VpVGFza0Jhc2UgUHJlZml4LCBldGMuKVxyXG4gIHByaXZhdGUgX2Jya0xldmVsSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIHByaXZhdGUgX21haW5MZXZlbDogc3RyaW5nID0gbnVsbDsgLy8gdGhlIHJ1bnRpbWUgbWFpbmxldmVsXHJcbiAgcHJpdmF0ZSBfbGV2ZWw6IHN0cmluZyA9IFwiXFwwXCI7IC8vICdDJyA9IGluIGNvbnRyb2wsICdSJyA9IGluIHJlY29yZCAob3V0IG9mIGNvbnRyb2wpLCAnVCcgPSBpbiB0YXNrIChvdXQgb2YgcmVjb3JkKVxyXG4gIF9lbnRlcmVkUmVjTGV2ZWw6IGJvb2xlYW4gPSBmYWxzZTsgLy8gVFJVRSBvbmx5IGlmIHRoZSB0YXNrIHdhcyBldmVyIG1vdmVkIHRvIHJlY29yZCBsZXZlbC5cclxuICBfY3VyclBhcmtlZEZsZDogR3VpRmllbGRCYXNlID0gbnVsbDtcclxuICBwcml2YXRlIGlzSW5SZWNvbXB1dGUgPSBmYWxzZTtcclxuICAvLyBUaGlzIGZsYWcgcmVwcmVzZW50cyB0aGUgY3VycmVudCBlZGl0aW5nIGNvbnRyb2wuXHJcbiAgLy8gSXQgaXMgcmVzZXQgdG8gbnVsbCB3aGVuIHdlIGFyZSBpbiBiZXR3ZWVuIHNldHRpbmcgdGhlIGZvY3VzIGFuZCBvbmNlIHdlIHNldCB0aGUgZm9jdXMgdG8gY29udHJvbCB0aGVuIHdlIHNldCB0aGlzIGZsYWcgdG8gY3VycmVudCBmb2N1c2VkIGNvbnRyb2wuXHJcbiAgQ3VycmVudEVkaXRpbmdDb250cm9sOiBNZ0NvbnRyb2xCYXNlID0gbnVsbDtcclxuICBwcml2YXRlIHNob3VsZFJlc3VtZVN1YmZvcm1MYXlvdXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEFwcGxpY2F0aW9uR3VpZDogc3RyaW5nID0gbnVsbDtcclxuICBQcm9ncmFtSXNuOiBudW1iZXIgPSAwO1xyXG4gIFRhc2tJc246IG51bWJlciA9IDA7XHJcbiAgQ29udGV4dElEOiBudW1iZXIgPSAwO1xyXG4gIElzU3ViRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIF9jdGxJZHg6IG51bWJlciA9IDA7XHJcbiAgX2NvbXBJZHg6IG51bWJlciA9IDA7XHJcbiAgX2lzUHJnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgX2lzTWFpblByZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIElzSW50ZXJhY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBfdGFza1RhZzogc3RyaW5nID0gbnVsbDtcclxuICBfb3BlbldpbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2FsbG93RXZlbnRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgRm9ybTogTWdGb3JtQmFzZSA9IG51bGw7XHJcbiAgX3Byb3BUYWI6IFByb3BUYWJsZSA9IG51bGw7XHJcbiAgX2hlbHBUYWI6IEhlbHBzID0gbnVsbDtcclxuICBfbnVsbEFyaXRobWV0aWM6IHN0cmluZztcclxuICBJY29uRmlsZU5hbWU6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIElzUGFyYWxsZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBEYXRhVmlldzogR3VpRGF0YVZpZXdCYXNlID0gbnVsbDtcclxuICBBY3Rpb25NYW5hZ2VyOiBJQWN0aW9uTWFuYWdlciA9IG51bGw7XHJcbiAgU3R1ZGlvUGFyZW50VGFzazogR3VpVGFza0Jhc2UgPSBudWxsOyAvLyBwYXJlbnQgdGFzayBvZiB0aGUgc3VidGFzayBieSB0b29sa2l0IHRyZWUuXHJcblxyXG4gIHByaXZhdGUgcm91dGVyUGF0aDogc3RyaW5nID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgcm91dGVQYXJhbXM6IExpc3Q8YW55PiA9IG51bGw7XHJcbiAgcHJpdmF0ZSBpbkRlZmF1bHRSb3V0ZXJPdXRsZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLkRhdGFWaWV3LkluaXQoKTtcclxuICB9XHJcblxyXG4gIGdldCBSb3V0ZXJQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXJQYXRoO1xyXG4gIH1cclxuXHJcbiAgZ2V0IFJvdXRlclBhcmFtcygpOiBMaXN0PGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucm91dGVQYXJhbXM7XHJcbiAgfVxyXG5cclxuICBnZXQgSW5EZWZhdWx0Um91dGVyT3V0bGV0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5EZWZhdWx0Um91dGVyT3V0bGV0O1xyXG4gIH1cclxuXHJcbiAgSXNTdWJ0YXNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgRGF0YVZpZXdXYXNSZXRyaWV2ZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgdmlldyB3YXMgcmV0cmlldmVkLCBpLmUuIGl0IGlzIHBvc3NpYmxlIHRvIGV2YWx1YXRlIGV4cHJlc3Npb25zXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRhc2sgcHJlZml4IHdhcyBwZXJmb3JtZWQgZm9yIHRoaXMgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgVGFza1ByZWZpeEV4ZWN1dGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJucyB0cnVlIGlmIHRoaXMgdGFzayBzaG91bGQgYmxvY2sgYWN0aXZhdGlvbiBvZiBpdHMgYWNzZXN0b3JzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXQgSXNCbG9ja2luZ0JhdGNoKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLl9pc01haW5QcmcgJiYgdGhpcy5pc09wZW5XaW4oKSAmJiAhdGhpcy5fYWxsb3dFdmVudHMgJiYgIXRoaXMuSXNJbnRlcmFjdGl2ZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fbnVsbEFyaXRobWV0aWMgPSBDb25zdGFudHMuTlVMTF9BUklUSF9VU0VfREVGO1xyXG4gICAgdGhpcy5fcHJvcFRhYiA9IG5ldyBQcm9wVGFibGUodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRhc2sgaWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFRhc2tUYWcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90YXNrVGFnO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgY3RsIGlkeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Q3RsSWR4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3RsSWR4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiB0aGlzIHRhc2sgaXMgYSBtYWluIHByb2dyYW0gb2YgYW4gaW50ZXJuYWwgb3IgZXh0ZXJuYWwgY29tcG9uZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc01haW5Qcm9nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzTWFpblByZztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIHRvcG1vc3QgbWdmb3JtIG9mIHRoZSBzdWJmb3JtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFRvcE1vc3RGb3JtKCk6IE1nRm9ybUJhc2Uge1xyXG4gICAgbGV0IGZvcm06IE1nRm9ybUJhc2UgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLkZvcm0gIT09IG51bGwpXHJcbiAgICAgIGZvcm0gPSB0aGlzLkZvcm0uZ2V0VG9wTW9zdEZvcm0oKTtcclxuICAgIC8vIGVsc2VcclxuICAgIC8vIEFzc2VydCBzaG91bGQgbm90IGJlIGhlcmUgYmVjYXVzZSB3ZSBoYXZlIGRpZmZlcmVudCBjb25kaXRpb25zIGZvciBSQyAmIE9MLlxyXG4gICAgLy8gT3RoZXIgdGhlbiBNYWluIFByb2dyYW0sIHRhc2sncyBmb3JtIHNob3VsZCBub3QgYmUgbnVsbC5cclxuICAgIC8vIERlYnVnLkFzc2VydChpc01haW5Qcm9nKCkpO1xyXG5cclxuICAgIHJldHVybiBmb3JtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHJlcXVlc3RlZCBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRDdHJsKGN0cmxJZHg6IG51bWJlcik6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuRm9ybS5nZXRDdHJsKGN0cmxJZHgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gc2V0cyB0aGUgY3VycmVudCB0YXNrIG1vZGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbFwiPm5ldyB0YXNrIG1vZGU8L3BhcmFtPlxyXG4gIHNldE1vZGUodmFsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmdldE1vZGUoKSAhPT0gdmFsKSB7XHJcbiAgICAgIHRoaXMuc2V0UHJvcChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX01PREUsIHZhbCk7XHJcbiAgICAgIGlmICh0aGlzLl9mbG93TW9uaXRvciAhPT0gbnVsbClcclxuICAgICAgICB0aGlzLl9mbG93TW9uaXRvci5hZGRUYXNrQ25nTW9kZSh2YWwsIHRoaXMuR2V0VGFza0RldGFpbHMoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgdGFzayBtb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRNb2RlKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGFza01vZGU6IHN0cmluZyA9IENvbnN0YW50cy5UQVNLX01PREVfTU9ESUZZO1xyXG4gICAgbGV0IHByb3A6IFByb3BlcnR5ID0gdGhpcy5fcHJvcFRhYi5nZXRQcm9wQnlJZChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX01PREUpO1xyXG4gICAgaWYgKHByb3AgIT09IG51bGwpIHtcclxuICAgICAgdGFza01vZGUgPSBwcm9wLkdldENvbXB1dGVkVmFsdWUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0YXNrTW9kZTtcclxuICB9XHJcblxyXG4gIFNldEluUmVjb21wdXRlKGluUmVjb21wdXRlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzSW5SZWNvbXB1dGUgPSBpblJlY29tcHV0ZTtcclxuICB9XHJcblxyXG4gIElzSW5SZWNvbXB1dGUoKSA6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNJblJlY29tcHV0ZTtcclxuICB9XHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlc2V0IHJlZnJlc2ggdHlwZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcmVzZXRSZWZyZXNoVHlwZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3JlZnJlc2hUeXBlID0gQ29uc3RhbnRzLlRBU0tfUkVGUkVTSF9OT05FO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCByZWZyZXNoIHR5cGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0UmVmcmVzaFR5cGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWZyZXNoVHlwZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHJlZnJlc2ggdHlwZSBmb3IgdGhlIG5leHQgUmVmcmVzaERpc3BsYXkoKSBjYWxsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlZnJlc2hUeXBlXCI+dGhlIG5ldyByZWZyZXNoIHR5cGU8L3BhcmFtPlxyXG4gIFNldFJlZnJlc2hUeXBlKHJlZnJlc2hUeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAocmVmcmVzaFR5cGUpIHtcclxuICAgICAgY2FzZSBDb25zdGFudHMuVEFTS19SRUZSRVNIX0ZPUk06XHJcbiAgICAgIGNhc2UgQ29uc3RhbnRzLlRBU0tfUkVGUkVTSF9UQUJMRTpcclxuICAgICAgY2FzZSBDb25zdGFudHMuVEFTS19SRUZSRVNIX0NVUlJfUkVDOlxyXG4gICAgICAgIHRoaXMuX3JlZnJlc2hUeXBlID0gcmVmcmVzaFR5cGU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgR2V0Um91dGVyUGFyYW1zKCk6IExpc3Q8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5yb3V0ZVBhcmFtcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgbGFzdCBwYXJrZWQgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TGFzdFBhcmtlZEN0cmwoKTogTWdDb250cm9sQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGFzdFBhcmtlZEN0cmw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGdldCB0aGUgb3BlbiB3aW5kb3dcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzT3BlbldpbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9vcGVuV2luO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGlmIHRoZSBwcm9wZXJ0eSBleGlzdHMgcmV0dXJucyBpdHMgYm9vbGVhbiB2YWx1ZSBvdGhlcndpc2UgcmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj5pZCBvZiB0aGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGVmYXVsdFJldFZhbFwiPnRoZSB2YWx1ZSB0byByZXR1cm4gaW4gY2FzZSB0aGUgcHJvcGVydHkgZG9lcyBub3QgZXhpc3Q8L3BhcmFtPlxyXG4gIGFzeW5jIGNoZWNrUHJvcChwcm9wSWQ6IG51bWJlciwgZGVmYXVsdFJldFZhbDogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IHByb3A6IFByb3BlcnR5ID0gdGhpcy5nZXRQcm9wKHByb3BJZCk7XHJcbiAgICBpZiAocHJvcCAhPT0gbnVsbClcclxuICAgICAgcmV0dXJuIGF3YWl0IHByb3AuZ2V0VmFsdWVCb29sZWFuKCk7XHJcbiAgICByZXR1cm4gZGVmYXVsdFJldFZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBjbGlja2VkIGNvbnRyb2wgb24gdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldENsaWNrZWRDb250cm9sKCk6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgbGV0IGNsaWNrZWRDdHJsOiBNZ0NvbnRyb2xCYXNlID0gRXZlbnRzLkdldFJ1bnRpbWVDb250ZXh0KG51bGwpLkN1cnJlbnRDbGlja2VkQ3RybDtcclxuXHJcbiAgICBpZiAoY2xpY2tlZEN0cmwgIT09IG51bGwgJiYgY2xpY2tlZEN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKSAhPT0gdGhpcylcclxuICAgICAgY2xpY2tlZEN0cmwgPSBudWxsO1xyXG5cclxuICAgIHJldHVybiBjbGlja2VkQ3RybDtcclxuICB9XHJcblxyXG4gIC8vLyA8cmV0dXJucz4ga2V5Ym9hcmRNYXBwaW5nU3RhdGVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGdldEtleWJvYXJkTWFwcGluZ1N0YXRlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fa2V5Ym9hcmRNYXBwaW5nU3RhdGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIHN0YXRlIGVuYWJsZWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RhdGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNTdGF0ZUVuYWJsZWQoc3RhdGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChzdGF0ZSAmIHRoaXMuX2tleWJvYXJkTWFwcGluZ1N0YXRlKSA+IDA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU2V0cyB0aGUgc3RhdGUgb24vb2ZmXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXRlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9uXCI+PC9wYXJhbT5cclxuICBzZXRLZXlib2FyZE1hcHBpbmdTdGF0ZShzdGF0ZTogbnVtYmVyLCBvbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5fa2V5Ym9hcmRNYXBwaW5nU3RhdGUgPSBvblxyXG4gICAgICA/IEd1aVRhc2tCYXNlLm1rSW50KEd1aVRhc2tCYXNlLmhpU2hydCh0aGlzLl9rZXlib2FyZE1hcHBpbmdTdGF0ZSkgJiB+c3RhdGUsIEd1aVRhc2tCYXNlLmxvU2hydCh0aGlzLl9rZXlib2FyZE1hcHBpbmdTdGF0ZSkgfCBzdGF0ZSlcclxuICAgICAgOiBHdWlUYXNrQmFzZS5ta0ludChHdWlUYXNrQmFzZS5oaVNocnQodGhpcy5fa2V5Ym9hcmRNYXBwaW5nU3RhdGUpIHwgc3RhdGUsIEd1aVRhc2tCYXNlLmxvU2hydCh0aGlzLl9rZXlib2FyZE1hcHBpbmdTdGF0ZSkgJiB+c3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGhpZ2hlciBoYWxmIG9mIHRoZSBpbnRlZ2VyPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBoaVNocnQobjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAobiAmIDB4ZmZmZjAwMDApID4+IDE2O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGxvdyBoYWxmIG9mIHRoZSBpbnRlZ2VyPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBsb1NocnQobjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBuICYgMHgwMDAwZmZmZjtcclxuICB9XHJcblxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibjFcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibjJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdW5pdGVzIGxvdyBoYWx2ZXMgb2YgMiBpbnRlZ2VycyAvLyA8L3JldHVybnM+XHJcbiAgc3RhdGljIG1rSW50KG4xOiBudW1iZXIsIG4yOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIG4xIDw8IDE2IHwgbjI7XHJcbiAgfVxyXG5cclxuICBnZXRIZWxwSXRlbShpZHg6IG51bWJlcik6IE1hZ2ljSGVscCB7XHJcbiAgICBpZiAodGhpcy5faGVscFRhYiAhPT0gbnVsbClcclxuICAgICAgcmV0dXJuIHRoaXMuX2hlbHBUYWIuZ2V0SGVscChpZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBhIHByb3BlcnR5IG9mIHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInByb3BJZFwiPnRoZSBpZCBvZiB0aGUgcHJvcGVydHk8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+dGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eTwvcGFyYW0+XHJcbiAgc2V0UHJvcChwcm9wSWQ6IG51bWJlciwgdmFsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Byb3BUYWIuc2V0UHJvcChwcm9wSWQsIHZhbCwgdGhpcywgXCJUXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgcnVudGltZSBsZXZlbCBvZiB0aGUgdGFzayAoUmVjb3JkIFN1ZmZpeCwgR3VpVGFza0Jhc2UgUHJlZml4LCBldGMuKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0QnJrTGV2ZWwoY0Jya0xldmVsOiBzdHJpbmcsIE5ld0Jya0xldmVsSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fYnJrTGV2ZWwgPSBjQnJrTGV2ZWw7XHJcbiAgICB0aGlzLl9icmtMZXZlbEluZGV4ID0gTmV3QnJrTGV2ZWxJbmRleDtcclxuXHJcbiAgICB0aGlzLnNldE1haW5MZXZlbChjQnJrTGV2ZWwpOyAvLyBVcGRhdGUgdGhlIE1haW5MZXZlbCBhY2NvcmRpbmcgdG8gdGhlIG5ldyBMZXZlbFxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHJ1bnRpbWUgbGV2ZWwgb2YgdGhlIHRhc2sgKFJlY29yZCBTdWZmaXgsIEd1aVRhc2tCYXNlIFByZWZpeCwgZXRjLilcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEJya0xldmVsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnJrTGV2ZWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBpZCBvZiB0aGUgY3VycmVudCBleGVjdXRpbmcgaGFuZGxlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgaW50IGlkIG9mIHRoZSBjdXJyZW50IGV4ZWN1dGluZyBoYW5kbGVyPC9yZXR1cm5zPlxyXG4gIGdldEJya0xldmVsSW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9icmtMZXZlbEluZGV4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgcnVudGltZSBtYWlubGV2ZWwgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldE1haW5MZXZlbChjQnJrTGV2ZWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKGNCcmtMZXZlbCAhPT0gbnVsbCAmJiBjQnJrTGV2ZWwubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgbGV2ZWw6IHN0cmluZyA9IGNCcmtMZXZlbC5jaGFyQXQoMCk7XHJcbiAgICAgIC8qIHRoZW4gTUFJTkxFVkVMIGlzIHVwZGF0ZWQgb25seSBpZiB0aGUgYWN0dWFsIExldmVsIGlzIGEgVEFTSyBvciBSRUNPUkQgKCBvciBub25lICkgbGV2ZWwgKi9cclxuICAgICAgaWYgKGxldmVsID09PSBDb25zdGFudHMuVEFTS19MRVZFTF9OT05FIHx8IGxldmVsID09PSBDb25zdGFudHMuVEFTS19MRVZFTF9UQVNLIHx8XHJcbiAgICAgICAgbGV2ZWwgPT09IENvbnN0YW50cy5UQVNLX0xFVkVMX1JFQ09SRClcclxuICAgICAgICB0aGlzLl9tYWluTGV2ZWwgPSBjQnJrTGV2ZWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBydW50aW1lIG1haW5sZXZlbCBvZiB0aGUgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TWFpbkxldmVsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFpbkxldmVsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgbGV2ZWwgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY0xldmVsXCI+J0MnID0gaW4gY29udHJvbCwgJ1InID0gaW4gcmVjb3JkIChvdXQgb2YgY29udHJvbCksICdUJyA9IGluIHRhc2sgKG91dCBvZiByZWNvcmQpICAgICAgLy8vIDwvcGFyYW0+XHJcbiAgc2V0TGV2ZWwoY0xldmVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2xldmVsID0gY0xldmVsO1xyXG5cclxuICAgIGlmICh0aGlzLl9sZXZlbCA9PT0gQ29uc3RhbnRzLlRBU0tfTEVWRUxfUkVDT1JEKVxyXG4gICAgICB0aGlzLl9lbnRlcmVkUmVjTGV2ZWwgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgbGV2ZWwgb2YgdGhlIHRhc2s6ICdDJyA9IGluIGNvbnRyb2wsICdSJyA9IGluIHJlY29yZCAob3V0IG9mIGNvbnRyb2wpLCAnVCcgPSBpbiB0YXNrIChvdXQgb2YgcmVjb3JkKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TGV2ZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9sZXZlbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIERhdGFTeW5jZWQgcHJvcGVydHkgb2YgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0RGF0YVN5bmNlZChzeW5jZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHNjaGVtZSBmb3IgbnVsbCBhcml0aG1ldGljXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXROdWxsQXJpdGhtZXRpYygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX251bGxBcml0aG1ldGljO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgbGFzdCBwYXJrZWQgY29udHJvbCBpbiB0aGlzIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFwiPmxhc3QgZm9jdXNlZCBjb250cm9sPC9wYXJhbT5cclxuICBzZXRMYXN0UGFya2VkQ3RybChjdHJsOiBNZ0NvbnRyb2xCYXNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9sYXN0UGFya2VkQ3RybCA9IGN0cmw7XHJcbiAgICB0aGlzLl9jdXJyUGFya2VkRmxkID0gKCh0aGlzLl9sYXN0UGFya2VkQ3RybCAhPT0gbnVsbClcclxuICAgICAgPyB0aGlzLl9sYXN0UGFya2VkQ3RybC5nZXRGaWVsZCgpXHJcbiAgICAgIDogbnVsbCk7XHJcbiAgICB0aGlzLkN1cnJlbnRFZGl0aW5nQ29udHJvbCA9IGN0cmw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGN1cnJlbnQgZmllbGQgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEN1cnJGaWVsZCgpOiBHdWlGaWVsZEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJQYXJrZWRGbGQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGN1cnJlbnQgZmllbGQgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldEN1cnJGaWVsZChjdXJyRmllbGQ6IEd1aUZpZWxkQmFzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fY3VyclBhcmtlZEZsZCA9IGN1cnJGaWVsZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZmllbGQgb2YgdGhlIGN1cnJlbnQgcGFya2VkIGNvbnRyb2wgb3IgLTEgaWYgdGhlcmUgaXMgbm8gc3VjaCBmaWVsZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Q3VyckZpZWxkSWR4KCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5fY3VyclBhcmtlZEZsZCAhPT0gbnVsbClcclxuICAgICAgcmV0dXJuIHRoaXMuX2N1cnJQYXJrZWRGbGQuZ2V0SWQoKTtcclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcblxyXG4gIGdldEZpZWxkQnlWYWx1ZVN0cih2YWx1ZVN0cjogc3RyaW5nKTogRmllbGREZWY7XHJcbiAgZ2V0RmllbGRCeVZhbHVlU3RyKHZhbHVlU3RyOiBzdHJpbmcsIHBhcmVudDogUmVmUGFyYW08bnVtYmVyPiwgdmVlOiBSZWZQYXJhbTxudW1iZXI+KTogRmllbGREZWY7XHJcbiAgZ2V0RmllbGRCeVZhbHVlU3RyKHZhbHVlU3RyOiBzdHJpbmcsIHBhcmVudD86IFJlZlBhcmFtPG51bWJlcj4sIHZlZT86IFJlZlBhcmFtPG51bWJlcj4pOiBGaWVsZERlZiB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSlcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRCeVZhbHVlU3RyXzAodmFsdWVTdHIpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZEJ5VmFsdWVTdHJfMSh2YWx1ZVN0ciwgcGFyZW50LCB2ZWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWVsZEJ5VmFsdWVTdHJfMCh2YWx1ZVN0cjogc3RyaW5nKTogRmllbGREZWYge1xyXG4gICAgbGV0IHBhcmVudDogbnVtYmVyO1xyXG4gICAgbGV0IHZlZTogbnVtYmVyO1xyXG4gICAgbGV0IHJlZlBhcmVudDogUmVmUGFyYW08bnVtYmVyPiA9IG5ldyBSZWZQYXJhbShwYXJlbnQpO1xyXG4gICAgbGV0IHJlZlZlZTogUmVmUGFyYW08bnVtYmVyPiA9IG5ldyBSZWZQYXJhbSh2ZWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRCeVZhbHVlU3RyXzEodmFsdWVTdHIsIHJlZlBhcmVudCwgcmVmVmVlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2V0IHRoZSBmaWVsZCBieSAndmFsdWVTdHInXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVN0clwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldEZpZWxkQnlWYWx1ZVN0cl8xKHZhbHVlU3RyOiBzdHJpbmcsIHBhcmVudDogUmVmUGFyYW08bnVtYmVyPiwgdmVlOiBSZWZQYXJhbTxudW1iZXI+KTogRmllbGREZWYge1xyXG4gICAgcGFyZW50LnZhbHVlID0gdmVlLnZhbHVlID0gMDtcclxuICAgIGxldCB0ZW1wRmllbGQ6IEZpZWxkRGVmID0gbnVsbDtcclxuICAgIGxldCBjb21tYTogbnVtYmVyID0gdmFsdWVTdHIuaW5kZXhPZihcIixcIik7XHJcbiAgICBpZiAoY29tbWEgPiAwKSB7XHJcbiAgICAgIGxldCBwYXJlbnRJZDogbnVtYmVyID0gTk51bWJlci5QYXJzZSh2YWx1ZVN0ci5zdWJzdHIoMCwgY29tbWEpKTtcclxuICAgICAgbGV0IGZsZElkeDogbnVtYmVyID0gTk51bWJlci5QYXJzZSh2YWx1ZVN0ci5zdWJzdHIoY29tbWEgKyAxKSk7XHJcbiAgICAgIHRlbXBGaWVsZCA9ICgocGFyZW50SWQgIT09IDApXHJcbiAgICAgICAgPyB0aGlzLmdldEZpZWxkRGVmKHBhcmVudElkLCBmbGRJZHgpXHJcbiAgICAgICAgOiB0aGlzLmdldEZpZWxkRGVmKGZsZElkeCkpO1xyXG4gICAgICBwYXJlbnQudmFsdWUgPSBwYXJlbnRJZDtcclxuICAgICAgdmVlLnZhbHVlID0gZmxkSWR4O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRlbXBGaWVsZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2V0IHRoZSBmaWVsZCBmcm9tIGEgMS1iYXNlZCBtYWluIHByb2cgYXJndW1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbHVlU3RyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldE1haW5Qcm9nRmllbGRCeVZhbHVlU3RyKHZhbHVlU3RyOiBzdHJpbmcpOiBGaWVsZERlZiB7XHJcbiAgICAvLyBzdHJpbmcgaXMgMS1iYXNlZCAtIG5lZWQgdG8gc3VidHJhY3QgMSB0byBnZXQgdG8gMC1iYXNlZCB2YWx1ZVxyXG4gICAgbGV0IGZsZElkeDogbnVtYmVyID0gTk51bWJlci5QYXJzZSh2YWx1ZVN0cikgLSAxO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmllbGREZWYoZmxkSWR4KTtcclxuICB9XHJcblxyXG4gIGdldEZpZWxkRGVmKGZsZElkOiBudW1iZXIpOiBGaWVsZERlZjtcclxuICBnZXRGaWVsZERlZihwYXJlbnQ6IG51bWJlciwgZmxkSWR4OiBudW1iZXIpOiBGaWVsZERlZjtcclxuICBnZXRGaWVsZERlZihmbGRJZE9yUGFyZW50OiBudW1iZXIsIGZsZElkeD86IG51bWJlcik6IEZpZWxkRGVmIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZF8wKGZsZElkT3JQYXJlbnQpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZF8xKGZsZElkT3JQYXJlbnQsIGZsZElkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGEgZmllbGQgYnkgaXRzIGlkeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmbGRJZFwiPmlkIG9mIHRoZSBmaWVsZCA8L3BhcmFtPlxyXG4gIHByaXZhdGUgZ2V0RmllbGRfMChmbGRJZDogbnVtYmVyKTogRmllbGREZWYge1xyXG4gICAgcmV0dXJuIHRoaXMuRGF0YVZpZXcuZ2V0RmllbGQoZmxkSWQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpbml0aWFsaXplIHRoZSBjdXJyZW50IHRhc2sncyBmb3JtLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgSW5pdEZvcm0oKSB7XHJcbiAgICBpZiAodGhpcy5Gb3JtICE9PSBudWxsICYmIHRoaXMuaXNPcGVuV2luKCkpIHtcclxuICAgICAgdGhpcy5Gb3JtLkluSW5pdEZvcm0gPSB0cnVlO1xyXG4gICAgICB0aGlzLkZvcm0uaW5pdCgpO1xyXG5cclxuXHJcbiAgICAgIHRoaXMuU2V0UmVmcmVzaFR5cGUoQ29uc3RhbnRzLlRBU0tfUkVGUkVTSF9GT1JNKTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuUmVmcmVzaERpc3BsYXkoKTtcclxuXHJcbiAgICAgIENvbW1hbmRzLmJlZ2luSW52b2tlKCk7XHJcbiAgICAgIHRoaXMuRm9ybS5JbkluaXRGb3JtID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJlc3VtZSBzdWJmb3JtIGxheW91dFxyXG4gIC8vLyA8L3N1bW1hcnlcclxuICBSZXN1bWVTdWJmb3JtTGF5b3V0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRm9ybSAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgc3ViRm9ybUN0cmw6IE1nQ29udHJvbEJhc2UgPSA8TWdDb250cm9sQmFzZT50aGlzLkZvcm0uZ2V0U3ViRm9ybUN0cmwoKTtcclxuICAgICAgaWYgKHN1YkZvcm1DdHJsICE9PSBudWxsICYmIHRoaXMuc2hvdWxkUmVzdW1lU3ViZm9ybUxheW91dCkge1xyXG4gICAgICAgIC8vIHJlZnJlc2ggdGhlIHZpc2libGUgcHJvcGVydHlcclxuICAgICAgICBDb21tYW5kcy5hZGRPcGVyYXRpb25XaXRoTGluZShDb21tYW5kVHlwZS5TRVRfUFJPUEVSVFksIHN1YkZvcm1DdHJsLCAwLFxyXG4gICAgICAgICAgIEh0bWxQcm9wZXJ0aWVzLlZpc2libGUgLCBzdWJGb3JtQ3RybC5pc1Zpc2libGUoKSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2hvdWxkUmVzdW1lU3ViZm9ybUxheW91dCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY29udHJvbCB3aGljaCB3YXMgbGFzdCBwYXJrZWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGVwdGhcIj50aGUgZ2VuZXJhdGlvbjwvcGFyYW0+XHJcbiAgR2V0TGFzdFBhcmtlZEN0cmxOYW1lKGRlcHRoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGFuY2VzdG9yOiBHdWlUYXNrQmFzZSA9IDxHdWlUYXNrQmFzZT50aGlzLkdldFRhc2tBbmNlc3RvcihkZXB0aCk7XHJcbiAgICBpZiAoYW5jZXN0b3IgPT09IG51bGwgfHwgYW5jZXN0b3IuX2xhc3RQYXJrZWRDdHJsID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIHJldHVybiBhbmNlc3Rvci5fbGFzdFBhcmtlZEN0cmwuTmFtZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGZvcm0gb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gRm9ybSBpcyB0aGUgZm9ybSBvZiB0aGUgdGFzazwvcmV0dXJucz5cclxuICBnZXRGb3JtKCk6IE1nRm9ybUJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuRm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2V0IHRhc2sncyBmb3JtLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBGb3JtIGlzIHRoZSBmb3JtIG9mIHRoZSB0YXNrPC9yZXR1cm5zPlxyXG4gIFNldEZvcm0odmFsdWU6IE1nRm9ybUJhc2UpOiBNZ0Zvcm1CYXNlIHtcclxuICAgIHRoaXMuRm9ybSA9IHZhbHVlO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJZkV4aXN0UHJvcChwcm9wSWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGV4aXN0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuX3Byb3BUYWIgIT09IG51bGwpIHtcclxuICAgICAgbGV0IHByb3A6IFByb3BlcnR5ID0gdGhpcy5fcHJvcFRhYi5nZXRQcm9wQnlJZChwcm9wSWQpO1xyXG4gICAgICBleGlzdCA9IChwcm9wICE9PSBudWxsKTtcclxuICAgIH1cclxuICAgIHJldHVybiBleGlzdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgYSB0YXNrIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInByb3BJZFwiPklkIG9mIHRoZSByZXF1ZXN0ZWQgcHJvcGVydHlcclxuICAvLy8gPC9wYXJhbT5cclxuICBnZXRQcm9wKHByb3BJZDogbnVtYmVyKTogUHJvcGVydHkge1xyXG4gICAgbGV0IHByb3A6IFByb3BlcnR5ID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5fcHJvcFRhYiAhPT0gbnVsbCkge1xyXG4gICAgICBwcm9wID0gdGhpcy5fcHJvcFRhYi5nZXRQcm9wQnlJZChwcm9wSWQpO1xyXG5cclxuICAgICAgLy8gaWYgdGhlIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QgdGhlbiBjcmVhdGUgYSBuZXcgcHJvcGVydHkgYW5kIGdpdmUgaXQgdGhlIGRlZmF1bHQgdmFsdWVcclxuICAgICAgLy8gaW4gYWRkaXRpb24gYWRkIHRoaXMgcHJvcGVydHkgdG8gdGhlIHByb3BlcnRpZXMgdGFibGVcclxuICAgICAgaWYgKHByb3AgPT09IG51bGwpIHtcclxuICAgICAgICBwcm9wID0gUHJvcGVydHkuZ2V0RGVmYXVsdFByb3AocHJvcElkLCBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfVEFTSywgdGhpcyk7XHJcbiAgICAgICAgaWYgKHByb3AgIT09IG51bGwpIHtcclxuICAgICAgICAgIHByb3AuU3R1ZGlvVmFsdWUgPSBwcm9wLmdldE9yZ1ZhbHVlKCk7XHJcbiAgICAgICAgICB0aGlzLl9wcm9wVGFiLmFkZFByb3AocHJvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvcDtcclxuICB9XHJcblxyXG4gIEdldENvbXB1dGVkUHJvcGVydHkocHJvcElkOiBudW1iZXIpOiBQcm9wZXJ0eSB7XHJcbiAgICBsZXQgcHJvcDogUHJvcGVydHkgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLl9wcm9wVGFiICE9PSBudWxsKVxyXG4gICAgICBwcm9wID0gdGhpcy5fcHJvcFRhYi5nZXRQcm9wQnlJZChwcm9wSWQpO1xyXG4gICAgcmV0dXJuIHByb3A7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBjb21wb25lbnQgaWR4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRDb21wSWR4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tcElkeDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIGZpcnN0IHJlZnJlc2hcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgSXNGaXJzdFJlZnJlc2hPZlByb3BzKCk6IGJvb2xlYW4ge1xyXG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXNzZWQgSUQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJleHBJZFwiPkV4cCBJRDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVHlwZVwiPmV4cGVjdGVkIHJldHVybiB0eXBlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsZW5ndGhcIj5FeHBlY3RlZCBsZW4gLSBpcyBub3QgdXNlZCwgaXQgbXVzdCBiZSBoZXJlIGJlY2F1c2Ugb2YgY29tcHV0YWJpbGl0eSB3aXRoIFJpY2ggQ2xpZW50PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250ZW50VHlwZVVuaWNvZGVcIj5zaG91bGQgdGhlIHJlc3VsdCBiZSB1bmljb2RlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNDZWxsVHlwZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiYWx3YXlzRXZhbHVhdGVcIj5mb3IgZm9ybSBwcm9wZXJ0aWVzIGFuZCBzb21lIGNvbnRyb2wgcHJvcGVydGllcyB3ZSBhbHdheXMgZXZhbHVhdGUgZXhwcmVzc2lvbnM8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIndhc0V2YWx1YXRlZFwiPmluZGljYXRlcyB3aGV0aGVyIHRoZSBleHByZXNzaW9uIHdhcyBldmFsdWF0ZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5ldmFsdWF0ZWQgdmFsdWU8L3JldHVybnM+XHJcbiAgYXN5bmMgRXZhbHVhdGVFeHByZXNzaW9uKGV4cElkOiBudW1iZXIsIHJlc1R5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIGxlbmd0aDogbnVtYmVyLCBjb250ZW50VHlwZVVuaWNvZGU6IGJvb2xlYW4sIHJlc0NlbGxUeXBlOiBTdG9yYWdlQXR0cmlidXRlLCBhbHdheXNFdmFsdWF0ZTogYm9vbGVhbiwgd2FzRXZhbHVhdGVkOiBSZWZQYXJhbTxib29sZWFuPik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgPSBudWxsO1xyXG4gICAgd2FzRXZhbHVhdGVkLnZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKGFsd2F5c0V2YWx1YXRlIHx8IHRoaXMuRGF0YVZpZXdXYXNSZXRyaWV2ZWQpIHtcclxuICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5DYWxjdWxhdGVFeHByZXNzaW9uKGV4cElkLCByZXNUeXBlLCBsZW5ndGgpO1xyXG4gICAgICB3YXNFdmFsdWF0ZWQudmFsdWUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIEdldEV4cHJlc3Npb25TdG9yYWdlKGV4cElkOiBudW1iZXIpOiBTdG9yYWdlQXR0cmlidXRlIHtcclxuICAgIHJldHVybiB0aGlzLkdldEV4cHJlc3Npb25TdG9yYWdlKGV4cElkKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ2FsY3VsYXRlIGV4cHJlc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZXhwSWRcIj5UaGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVHlwZVwiPlRoZSBleHBlY3RlZCByZXN1bHQgdHlwZS48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxlbmd0aFwiPlRoZSBleHBlY3RlZCBsZW5ndGggb2YgdGhlIHJlc3VsdC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRlbnRUeXBlVW5pY29kZVwiPkRlbm90ZXMgd2hldGhlciB0aGUgcmVzdWx0IGlzIGV4cGVjdGVkIHRvIGJlIGEgdW5pY29kZSBzdHJpbmcuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNDZWxsVHlwZVwiPk5vdCB1c2VkLjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBhc3luYyBDYWxjdWxhdGVFeHByZXNzaW9uKGV4cElkOiBudW1iZXIsIHJlc1R5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIGxlbmd0aDogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+e1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY3JlYXRlcyBhIG1nZm9ybSBvYmplY3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgYWJzdHJhY3QgQ29uc3RydWN0TWdGb3JtKGFscmVhZHlTZXRQYXJlbnRGb3JtOiBSZWZQYXJhbTxib29sZWFuPik6IE1nRm9ybUJhc2UgO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIHRoZSB0YXNrIGlzIHN0YXJ0ZWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzU3RhcnRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRlbGxzIHdoZXRoZXIgdGhlIHRhc2sgaXMgYWJvcnRpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzQWJvcnRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBhbmNlc3RvciBvZiB0aGUgR3VpVGFza0Jhc2VcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZ2VuZXJhdGlvblwiPm9mIHRoZSBhbmNlc3RvciB0YXNrPC9wYXJhbT5cclxuICBhYnN0cmFjdCBHZXRUYXNrQW5jZXN0b3IoZ2VuZXJhdGlvbjogbnVtYmVyKTogSVRhc2s7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2V0IHRoZSBjb250ZXh0IHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgYWJzdHJhY3QgR2V0Q29udGV4dFRhc2soKTogSVRhc2s7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJucyB0YXNrIGRlcHRoXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGFic3RyYWN0IEdldFRhc2tEZXB0aCgpOiBudW1iZXI7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmVmcmVzaCB0aGUgZGlzcGxheSwgcGFpbnQgdGhlIGNvbnRyb2xzIGFuZCB0aGVpciBwcm9wZXJ0aWVzIGFnYWluIDwvc3VtbWFyeT5cclxuICBhYnN0cmFjdCBSZWZyZXNoRGlzcGxheSgpOiB2b2lkIDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBnZXQgdGhlIHZhbHVlIG9mIGEgZmllbGQuIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmaWVsZERlZlwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlzTnVsbFwiPjwvcGFyYW0+XHJcbiAgLy8gVE9ETyBzYWRoYW4gcmVtb3ZlIHVudXNlZFxyXG4gIC8vIGFic3RyYWN0IGFzeW5jIGdldEZpZWxkVmFsdWUoZmllbGREZWY6IEZpZWxkRGVmLCB2YWx1ZTogUmVmUGFyYW08c3RyaW5nPiwgaXNOdWxsOiBSZWZQYXJhbTxib29sZWFuPik6IFByb21pc2U8dm9pZD4gO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+IGdldCB0aGUgZGlzcGxheSB2YWx1ZSBvZiBhIGZpZWxkLiA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZmllbGREZWZcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbHVlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc051bGxcIj48L3BhcmFtPlxyXG4gIGFic3RyYWN0IGdldEZpZWxkRGlzcGxheVZhbHVlKGZpZWxkRGVmOiBGaWVsZERlZiwgdmFsdWU6IFJlZlBhcmFtPHN0cmluZz4sIGlzTnVsbDogUmVmUGFyYW08Ym9vbGVhbj4pOiB2b2lkIDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiB1cGRhdGVzIHRoZSBmaWVsZCdzIHZhbHVlIGFuZCBzdGFydHMgcmVjb21wdXRlLiA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZmllbGREZWZcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbHVlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc051bGxcIj48L3BhcmFtPlxyXG4gIGFic3RyYWN0IFVwZGF0ZUZpZWxkVmFsdWVBbmRTdGFydFJlY29tcHV0ZShmaWVsZERlZjogRmllbGREZWYsIHZhbHVlOiBzdHJpbmcsIGlzTnVsbDogYm9vbGVhbik6IHZvaWQgO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+Z2V0IGEgZmllbGQgZnJvbSB0aGUgdGFzay50cmF2ZWwgYnkgcGFyZW50cyAoaS5lLiBOT1QgYnkgdHJpZ2dlcmluZyB0YXNrcykuPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGFyZW50XCI+Z2VuZXJhdGlvbiBudW1iZXIgKDAgaXMgY3VycmVudCB0YXNrKTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmbGRJZHhcIj50aGUgZmllbGQgaW5kZXggd2l0aGluIGl0cyB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBpZCBvZiB0aGUgZmllbGQgZGVzY3JpYmVkIGJ5IHBhcmVudCArIGlkeDwvcmV0dXJucz5cclxuICBwcml2YXRlIGdldEZpZWxkXzEocGFyZW50OiBudW1iZXIsIGZsZElkeDogbnVtYmVyKTogRmllbGREZWYge1xyXG5cclxuICAgIHN3aXRjaCAocGFyZW50KSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZERlZihmbGRJZHgpO1xyXG5cclxuICAgICAgY2FzZSBHdWlUYXNrQmFzZS5NQUlOX1BSR19QQVJFTlRfSUQ6XHJcbiAgICAgICAgLy8gZmluZCB0aGUgbWFpbiBwcm9ncmFtIHVzaW5nIHRoZSBjb21wb25lbnQgaWQgKGN0bCBpZHgpXHJcbiAgICAgICAgbGV0IGNvbXBNYWluUHJvZzogR3VpVGFza0Jhc2UgPSA8R3VpVGFza0Jhc2U+IEd1aURhdGFDb2xsZWN0aW9uLk1HRGF0YVRhYmxlLkdldE1haW5Qcm9nQnlDdGxJZHgodGhpcy5Db250ZXh0SUQsIHRoaXMuX2N0bElkeCk7XHJcbiAgICAgICAgcmV0dXJuIGNvbXBNYWluUHJvZy5nZXRGaWVsZERlZihmbGRJZHgpO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBwYXJlbnQtLTtcclxuICAgICAgICBpZiAodGhpcy5TdHVkaW9QYXJlbnRUYXNrICE9IG51bGwpXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5TdHVkaW9QYXJlbnRUYXNrLmdldEZpZWxkRGVmKHBhcmVudCwgZmxkSWR4KTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIHRhc2sgYXR0cmlidXRlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZmlsbEF0dHJpYnV0ZXMocGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgLy8gbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IHN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKFhNTENvbnN0YW50cy5NR19UQUdfVEFTSykgKyBYTUxDb25zdGFudHMuTUdfVEFHX1RBU0subGVuZ3RoKTtcclxuXHJcbiAgICAgIGxldCB0b2tlbnM6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KSwgWE1MQ29uc3RhbnRzLlhNTF9BVFRSX0RFTElNKTtcclxuXHJcbiAgICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnMubGVuZ3RoOyBqID0gaiArIDIpIHtcclxuICAgICAgICBsZXQgYXR0cmlidXRlOiBzdHJpbmcgPSB0b2tlbnMuZ2V0X0l0ZW0oaik7XHJcbiAgICAgICAgbGV0IHZhbHVlU3RyOiBzdHJpbmcgPSB0b2tlbnMuZ2V0X0l0ZW0oaiArIDEpO1xyXG4gICAgICAgIGlmICghdGhpcy5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZVN0cikgJiYgRXZlbnRzLlNob3VsZExvZyhMb2dnZXJfTG9nTGV2ZWxzLkRldmVsb3BtZW50KSlcclxuICAgICAgICAgIEV2ZW50cy5Xcml0ZURldlRvTG9nKE5TdHJpbmcuRm9ybWF0KFwiSW4gVGFza0Jhc2UuZmlsbEF0dHJpYnV0ZXMoKTogVW5wcm9jZXNzZWQoISkgYXR0cmlidXRlOiAnezB9JyA9ICd7MX0nXCIsIGF0dHJpYnV0ZSwgdmFsdWVTdHIpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpOyAvLyB0byBkZWxldGUgXCI+XCIgdG9vXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSB0YXNrIGF0dHJpYnV0ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldEF0dHJpYnV0ZShhdHRyaWJ1dGU6IHN0cmluZywgdmFsdWVTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzVGFnUHJvY2Vzc2VkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkge1xyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0FQUExfR1VJRDpcclxuICAgICAgICB0aGlzLkFwcGxpY2F0aW9uR3VpZCA9IHZhbHVlU3RyO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9QUk9HUkFNX0lTTjpcclxuICAgICAgICB0aGlzLlByb2dyYW1Jc24gPSBOTnVtYmVyLlBhcnNlKHZhbHVlU3RyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfVEFTS19JU046XHJcbiAgICAgICAgdGhpcy5UYXNrSXNuID0gTk51bWJlci5QYXJzZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX1RPT0xLSVRfUEFSRU5UX1RBU0s6XHJcbiAgICAgICAgaWYgKE5OdW1iZXIuUGFyc2UodmFsdWVTdHIpICE9PSAwKVxyXG4gICAgICAgICAgdGhpcy5TdHVkaW9QYXJlbnRUYXNrID0gPEd1aVRhc2tCYXNlPkd1aURhdGFDb2xsZWN0aW9uLk1HRGF0YVRhYmxlLkdldFRhc2tCeUlEKHZhbHVlU3RyKTtcclxuXHJcbiAgICAgICAgdGhpcy5Jc1N1YnRhc2sgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9UQVNLSUQ6XHJcbiAgICAgICAgdGhpcy5zZXRUYXNrSWQodmFsdWVTdHIpO1xyXG4gICAgICAgIGlmIChFdmVudHMuU2hvdWxkTG9nKExvZ2dlcl9Mb2dMZXZlbHMuRGV2ZWxvcG1lbnQpKVxyXG4gICAgICAgICAgRXZlbnRzLldyaXRlRGV2VG9Mb2coXCJUQVNLOiBcIiArIHRoaXMuX3Rhc2tUYWcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9DVExfSURYOlxyXG4gICAgICAgIHRoaXMuc2V0Q3RsQW5kQ29tcElkeCh2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX01BSU5QUkc6XHJcbiAgICAgICAgdGhpcy5zZXRNYWluUHJnKHZhbHVlU3RyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfTlVMTF9BUklUSE1FVElDOlxyXG4gICAgICAgIHRoaXMuc2V0TnVsbEFyaXRobWV0aWModmFsdWVTdHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9JTlRFUkFDVElWRTpcclxuICAgICAgICB0aGlzLnNldElzSW50ZXJhY2l2ZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX09QRU5fV0lOOlxyXG4gICAgICAgIHRoaXMuc2V0T3Blbldpbih2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0FMTE9XX0VWRU5UUzpcclxuICAgICAgICB0aGlzLlNldEFsbG93RXZlbnRzKHZhbHVlU3RyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfSVNQUkc6XHJcbiAgICAgICAgdGhpcy5zZXRJc1ByZyh2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0lDT05fRklMRV9OQU1FOlxyXG4gICAgICAgIHRoaXMuSWNvbkZpbGVOYW1lID0gdmFsdWVTdHI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9QQVJBTExFTDpcclxuICAgICAgICB0aGlzLklzUGFyYWxsZWwgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX1JPVVRFUl9QQVRIOlxyXG4gICAgICAgIGlmICh2YWx1ZVN0ci50cmltKCkgIT0gXCJcIilcclxuICAgICAgICAgIHRoaXMucm91dGVyUGF0aCA9IHZhbHVlU3RyO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9JTl9ERUZBVUxUX1JPVVRFUl9PVVRMRVQ6XHJcbiAgICAgICAgdGhpcy5pbkRlZmF1bHRSb3V0ZXJPdXRsZXQgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGlzVGFnUHJvY2Vzc2VkID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGlzVGFnUHJvY2Vzc2VkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpbml0IGRhdGEgZm9yIGZvcm0gYW5kIHJldHVybiB0aGUgZm9ybVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZm91bmRUYWdOYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwYXJlbnRGb3JtXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEZvcm1Jbml0RGF0YShwYXJlbnRGb3JtOiBNZ0Zvcm1CYXNlKTogTWdGb3JtQmFzZSB7XHJcbiAgICBsZXQgYWxyZWFkeVNldFBhcmVudEZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCByZWZBbHJlYWR5U2V0UGFyZW50Rm9ybTogUmVmUGFyYW08Ym9vbGVhbj4gPSBuZXcgUmVmUGFyYW0oYWxyZWFkeVNldFBhcmVudEZvcm0pO1xyXG5cclxuICAgIGlmICh0aGlzLkZvcm0gPT09IG51bGwpXHJcbiAgICAgIHRoaXMuRm9ybSA9IHRoaXMuQ29uc3RydWN0TWdGb3JtKHJlZkFscmVhZHlTZXRQYXJlbnRGb3JtKTtcclxuXHJcbiAgICBpZiAoIWFscmVhZHlTZXRQYXJlbnRGb3JtKVxyXG4gICAgICB0aGlzLkZvcm0uUGFyZW50Rm9ybSA9IHBhcmVudEZvcm07XHJcblxyXG4gICAgaWYgKEV2ZW50cy5TaG91bGRMb2coTG9nZ2VyX0xvZ0xldmVscy5EZXZlbG9wbWVudCkpXHJcbiAgICAgIEV2ZW50cy5Xcml0ZURldlRvTG9nKFwiZm9ybVwiKTtcclxuXHJcbiAgICB0aGlzLkZvcm0uZmlsbERhdGEodGhpcyk7XHJcbiAgICByZXR1cm4gdGhpcy5Gb3JtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0YXNrIGlkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRUYXNrSWQodmFsdWVTdHI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGFza1RhZyA9IHZhbHVlU3RyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBjdGxJZHggJiBjb21wSWR4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHNldEN0bEFuZENvbXBJZHgodmFsdWVTdHI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGk6IG51bWJlciA9IHZhbHVlU3RyLmluZGV4T2YoXCIsXCIpO1xyXG4gICAgaWYgKGkgPiAtMSkge1xyXG4gICAgICB0aGlzLl9jdGxJZHggPSBOTnVtYmVyLlBhcnNlKHZhbHVlU3RyLnN1YnN0cigwLCBpKSk7XHJcbiAgICAgIHRoaXMuX2NvbXBJZHggPSBOTnVtYmVyLlBhcnNlKHZhbHVlU3RyLnN1YnN0cihpICsgMSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgYW5jZXN0b3IgdGFzayBjb250YWluaW5nIGZvcm1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz5HdWlUYXNrQmFzZTwvcmV0dXJucz5cclxuICBHZXRBbmNlc3RvclRhc2tDb250YWluaW5nRm9ybSgpOiBHdWlUYXNrQmFzZSB7XHJcbiAgICBsZXQgcGFyZW50VGFzazogR3VpVGFza0Jhc2UgPSA8R3VpVGFza0Jhc2U+dGhpcy5HZXRUYXNrQW5jZXN0b3IoMSk7XHJcbiAgICB3aGlsZSAocGFyZW50VGFzayAhPT0gbnVsbCAmJiBwYXJlbnRUYXNrLmdldEZvcm0oKSA9PT0gbnVsbCkge1xyXG4gICAgICBwYXJlbnRUYXNrID0gPEd1aVRhc2tCYXNlPnBhcmVudFRhc2suR2V0VGFza0FuY2VzdG9yKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXJlbnRUYXNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzZXQgaXNNYWluUHJnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVN0clwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzZXRNYWluUHJnKHZhbHVlU3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2lzTWFpblByZyA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gc2V0IG51bGxBcml0aG1ldGljXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVN0clwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzZXROdWxsQXJpdGhtZXRpYyh2YWx1ZVN0cjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9udWxsQXJpdGhtZXRpYyA9IHZhbHVlU3RyLmNoYXJBdCgwKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gc2V0IGlzSW50ZXJhY3RpdmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbHVlU3RyXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIHNldElzSW50ZXJhY2l2ZSh2YWx1ZVN0cjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLklzSW50ZXJhY3RpdmUgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNldCBvcGVuV2luXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVN0clwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBzZXRPcGVuV2luKHZhbHVlU3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX29wZW5XaW4gPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNldCBvcGVuV2luXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVN0clwiPjwvcGFyYW0+XHJcbiAgU2V0T3Blbldpbih2YWx1ZWJvb2w6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX29wZW5XaW4gPSB2YWx1ZWJvb2w7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNldCBBbGxvd0V2ZW50c1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVTdHJcIj48L3BhcmFtPlxyXG4gIFNldEFsbG93RXZlbnRzKHZhbHVlU3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FsbG93RXZlbnRzID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzZXQgaXNQcmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbHVlU3RyXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIHNldElzUHJnKHZhbHVlU3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2lzUHJnID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gIH1cclxuXHJcbiAgU2hvdWxkRXZhbHVhdGVQcm9wZXJ0eUxvY2FsbHkocHJvcElkOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFic3RyYWN0IEdldFRhc2tEZXRhaWxzKCk6IHN0cmluZztcclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gU2V0cyB0aGUgbWVzc2FnZSBvbiB0aGUgbWVzc2FnZSBwYW5lIG9mIHN0YXR1cyBiYXIuPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1zZ1wiPm1lc3NhZ2UgdG8gYmUgc2hvd248L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNvdW5kQmVlcFwiPnRvIGJlZXAgb3Igbm90PC9wYXJhbT5cclxuICBXcml0ZVRvTWVzc2FnZVBhbmUobXNnOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIC8vIFN0b3J5IDE0OTMxNiA6IHNlbmQgbWVzc2FnZSB0byBjb25zb2xlXHJcbiAgICBpZiAobXNnICE9IG51bGwpXHJcbiAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHdyaXRlIGEgbWVzc2FnZSB0byBzdGF0dXMgYmFyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1zZ0lkXCI+aWQgb2YgbWVzc2FnZSB0byBiZSB3cml0dGVuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzb3VuZEJlZXBcIj48L3BhcmFtPlxyXG4gIFdyaXRlVG9NZXNzYWdlUGFuZWJ5TXNnSWQobXNnSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IG1zZzogc3RyaW5nID0gRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcobXNnSWQpO1xyXG4gICAgdGhpcy5Xcml0ZVRvTWVzc2FnZVBhbmUobXNnKTtcclxuICB9XHJcbn1cclxuIl19