@magic-xpa/gui 4.900.0-dev490.31 → 4.900.0-dev490.34

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.
@@ -338,24 +338,15 @@ export class DisplayConvertor {
338
338
  case PICInterface.PIC_YY:
339
339
  {
340
340
  this.int_2_a(outVal, outIdx, 2, breakParams.year, '0');
341
- let yearStr = NString.FromChars(outVal);
342
- year = +yearStr.substr(outIdx);
343
- outIdx += 2;
344
- len -= 2;
345
- }
346
- break;
347
- case PICInterface.PIC_YY:
348
- {
349
- this.int_2_a(outVal, outIdx, 2, breakParams.year, '0');
350
- let yearStr = NString.FromChars(outVal);
341
+ let yearStr = NString.FromChars(outVal, outIdx, 2);
351
342
  year = +yearStr.substr(outIdx);
352
343
  outIdx += 2;
353
344
  len -= 2;
354
345
  }
355
346
  break;
356
347
  case PICInterface.PIC_YYYY:
357
- this.int_2_a(outVal, outIdx, 4, year, '0');
358
- let yearStr = NString.FromChars(outVal);
348
+ this.int_2_a(outVal, outIdx, 4, breakParams.year, '0');
349
+ let yearStr = NString.FromChars(outVal, outIdx, 4);
359
350
  year = +yearStr.substr(outIdx);
360
351
  outIdx += 4;
361
352
  len -= 4;
@@ -1662,4 +1653,4 @@ export class DateBreakParams {
1662
1653
  this.dow = dow_;
1663
1654
  }
1664
1655
  }
1665
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlzcGxheUNvbnZlcnRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9ndWkvRGlzcGxheUNvbnZlcnRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxRQUFRLEVBQVEsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RixPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFdBQVcsRUFDWCxlQUFlLEVBQ2hCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdqRCxNQUFNLE9BQU8sZ0JBQWdCO0lBWTNCO1FBWFEsaUJBQVksR0FBaUIsSUFBSSxDQUFDO1FBQ2xDLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFXM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDO0lBQ2pELENBQUM7SUFURCxNQUFNLEtBQUssUUFBUTtRQUNqQixJQUFJLGdCQUFnQixDQUFDLFNBQVMsS0FBSyxJ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LEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SUVudmlyb25tZW50fSBmcm9tICcuLi8uLi9lbnYvSUVudmlyb25tZW50JztcclxuaW1wb3J0IHtQSUN9IGZyb20gJy4vUElDJztcclxuaW1wb3J0IHtEYXRlVGltZSwgTGlzdCwgTlN0cmluZywgUmVmUGFyYW0sIFN0cmluZ0J1aWxkZXJ9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtcclxuICBEYXRlVXRpbCxcclxuICBIVE1MXzJfU1RSLFxyXG4gIE1zZ0ludGVyZmFjZSxcclxuICBQSUNJbnRlcmZhY2UsXHJcbiAgU0VRXzJfSFRNTCxcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0clV0aWwsXHJcbiAgVXRpbERhdGVKcG4sXHJcbiAgVXRpbFN0ckJ5dGVNb2RlXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7QmxvYlR5cGV9IGZyb20gJy4uL2RhdGEvQmxvYlR5cGUnO1xyXG5pbXBvcnQge1ZhbGlkYXRpb25EZXRhaWxzQmFzZX0gZnJvbSAnLi9WYWxpZGF0aW9uRGV0YWlsc0Jhc2UnO1xyXG5pbXBvcnQge05VTV9UWVBFfSBmcm9tICcuLi9kYXRhL05VTV9UWVBFJztcclxuaW1wb3J0IHtIZWJyZXdEYXRlfSBmcm9tICcuL0hlYnJld0RhdGUnO1xyXG5pbXBvcnQge0V2ZW50c30gZnJvbSAnLi4vLi4vRXZlbnRzJztcclxuaW1wb3J0IHtHdWlFbnZpcm9ubWVudH0gZnJvbSAnLi4vLi4vR3VpRW52aXJvbm1lbnQnO1xyXG5pbXBvcnQge01lbW9yeVV0aWx9IGZyb20gJy4uLy4uL3V0aWwvTWVtb3J5VXRpbCc7XHJcblxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgRGlzcGxheUNvbnZlcnRvciB7XHJcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IElFbnZpcm9ubWVudCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBEQVRFQ0hBUjogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IERpc3BsYXlDb252ZXJ0b3IgPSBudWxsO1xyXG5cclxuICBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IERpc3BsYXlDb252ZXJ0b3Ige1xyXG4gICAgaWYgKERpc3BsYXlDb252ZXJ0b3IuX2luc3RhbmNlID09PSBudWxsKSB7XHJcbiAgICAgIERpc3BsYXlDb252ZXJ0b3IuX2luc3RhbmNlID0gbmV3IERpc3BsYXlDb252ZXJ0b3IoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBEaXNwbGF5Q29udmVydG9yLl9pbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudDtcclxuICB9XHJcblxyXG4gIGdldE5ld0RhdGVCcmVha1BhcmFtcygpOiBEYXRlQnJlYWtQYXJhbXMge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlQnJlYWtQYXJhbXMoKTtcclxuICB9XHJcblxyXG4gIGdldE5ld1RpbWVCcmVha1BhcmFtcygpOiBUaW1lQnJlYWtQYXJhbXMge1xyXG4gICAgcmV0dXJuIG5ldyBUaW1lQnJlYWtQYXJhbXMoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIGRpc3BsYXkgc3RyaW5nIG9mIGEgdmFsdWUgZnJvbSBpdHMgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWdWYWx1ZVwiPiAgdGhlIGludGVybmFsIHZhbHVlIChhcyBzZW50IGluIHRoZSBYTUwpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyYW5nZVN0clwiPiB2YWx1ZSByYW5nZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICAgICAgdGhlIHBpY3R1cmUgZm9ybWF0XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdHJpbmcgdG8gZGlzcGxheVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgbWcyZGlzcChtZ1ZhbHVlOiBzdHJpbmcsIHJhbmdlU3RyOiBzdHJpbmcsIHBpYzogUElDLCB1c2VOYXRpdmU6IGJvb2xlYW4sIGNvbXBJZHg6IG51bWJlciwgdGltZV9kYXRlX3BpY19aX2VkdDogYm9vbGVhbik6IGFueTtcclxuICBtZzJkaXNwKG1nVmFsdWU6IHN0cmluZywgcmFuZ2VTdHI6IHN0cmluZywgcGljOiBQSUMsIHVzZU5hdGl2ZTogYm9vbGVhbiwgYWx3YXlzRmlsbDogYm9vbGVhbiwgY29tcElkeDogbnVtYmVyLCB0aW1lX2RhdGVfcGljX1pfZWR0OiBib29sZWFuKTogYW55O1xyXG4gIG1nMmRpc3AobWdWYWx1ZTogc3RyaW5nLCByYW5nZVN0cjogc3RyaW5nLCBwaWM6IFBJQywgdXNlTmF0aXZlOiBib29sZWFuLCBhbHdheXNGaWxsOiBib29sZWFuLCBjb21wSWR4OiBudW1iZXIsIGNvbnZlcnRDYXNlOiBib29sZWFuLCB0aW1lX2RhdGVfbnVtX3BpY19aX2VkdDogYm9vbGVhbik6IGFueTtcclxuICBtZzJkaXNwKG1nVmFsdWU6IHN0cmluZywgcmFuZ2VTdHI6IHN0cmluZywgcGljOiBQSUMsIHVzZU5hdGl2ZTogYm9vbGVhbiwgY29tcElkeE9yQWx3YXlzRmlsbDogYW55LCB0aW1lX2RhdGVfcGljX1pfZWR0T3JDb21wSWR4OiBhbnksIHRpbWVfZGF0ZV9waWNfWl9lZHRPckNvbnZlcnRDYXNlPzogYm9vbGVhbiwgdGltZV9kYXRlX251bV9waWNfWl9lZHQ/OiBib29sZWFuKTogYW55IHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA2KVxyXG4gICAgICByZXR1cm4gdGhpcy5tZzJkaXNwXzAobWdWYWx1ZSwgcmFuZ2VTdHIsIHBpYywgdXNlTmF0aXZlLCBjb21wSWR4T3JBbHdheXNGaWxsLCB0aW1lX2RhdGVfcGljX1pfZWR0T3JDb21wSWR4KTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA3KVxyXG4gICAgICByZXR1cm4gdGhpcy5tZzJkaXNwXzEobWdWYWx1ZSwgcmFuZ2VTdHIsIHBpYywgdXNlTmF0aXZlLCBjb21wSWR4T3JBbHdheXNGaWxsLCB0aW1lX2RhdGVfcGljX1pfZWR0T3JDb21wSWR4LCB0aW1lX2RhdGVfcGljX1pfZWR0T3JDb252ZXJ0Q2FzZSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gdGhpcy5tZzJkaXNwXzIobWdWYWx1ZSwgcmFuZ2VTdHIsIHBpYywgdXNlTmF0aXZlLCBjb21wSWR4T3JBbHdheXNGaWxsLCB0aW1lX2RhdGVfcGljX1pfZWR0T3JDb21wSWR4LCB0aW1lX2RhdGVfcGljX1pfZWR0T3JDb252ZXJ0Q2FzZSwgdGltZV9kYXRlX251bV9waWNfWl9lZHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZzJkaXNwXzAobWdWYWx1ZTogc3RyaW5nLCByYW5nZVN0cjogc3RyaW5nLCBwaWM6IFBJQywgdXNlTmF0aXZlOiBib29sZWFuLCBjb21wSWR4OiBudW1iZXIsIHRpbWVfZGF0ZV9waWNfWl9lZHQ6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMubWcyZGlzcChtZ1ZhbHVlLCByYW5nZVN0ciwgcGljLCB1c2VOYXRpdmUsIGZhbHNlLCBjb21wSWR4LCB0aW1lX2RhdGVfcGljX1pfZWR0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWcyZGlzcF8xKG1nVmFsdWU6IHN0cmluZywgcmFuZ2VTdHI6IHN0cmluZywgcGljOiBQSUMsIHVzZU5hdGl2ZTogYm9vbGVhbiwgYWx3YXlzRmlsbDogYm9vbGVhbiwgY29tcElkeDogbnVtYmVyLCB0aW1lX2RhdGVfcGljX1pfZWR0OiBib29sZWFuKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm1nMmRpc3AobWdWYWx1ZSwgcmFuZ2VTdHIsIHBpYywgdXNlTmF0aXZlLCBhbHdheXNGaWxsLCBjb21wSWR4LCBmYWxzZSwgdGltZV9kYXRlX3BpY19aX2VkdCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgb2YgYSB2YWx1ZSBmcm9tIGl0cyBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtZ1ZhbHVlXCI+dGhlIGludGVybmFsIHZhbHVlIChhcyBzZW50IGluIHRoZSBYTUwpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyYW5nZVN0clwiPnZhbHVlIHJhbmdlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj50aGUgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFsd2F5c0ZpbGxcIj5BbHdheXMgYXV0byBmaWxsIGFscGhhIG92ZXIgaXRzIHBpY3R1cmUgKHVzZWQgZm9yIHNlbGVjdCBjb250cm9scylcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHN0cmluZyB0byBkaXNwbGF5XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwdWJsaWMgbWcyZGlzcF8yKG1nVmFsdWU6IHN0cmluZywgcmFuZ2VTdHI6IHN0cmluZywgcGljOiBQSUMsIHVzZU5hdGl2ZTogYm9vbGVhbiwgYWx3YXlzRmlsbDogYm9vbGVhbiwgY29tcElkeDogbnVtYmVyLCBjb252ZXJ0Q2FzZTogYm9vbGVhbiwgdGltZV9kYXRlX251bV9waWNfWl9lZHQ6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgbGV0IHN0cjogc3RyaW5nID0gXCJcIjtcclxuICAgIGxldCB0bXBSYW5nZTogc3RyaW5nID0gKHJhbmdlU3RyID09PSBudWxsKSA/IFwiXCIgOiByYW5nZVN0cjtcclxuXHJcbiAgICBzd2l0Y2ggKHBpYy5nZXRBdHRyKCkpIHtcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgc3RyID0gdGhpcy5mcm9tQWxwaGEobWdWYWx1ZSwgcGljLCB0bXBSYW5nZSwgYWx3YXlzRmlsbCwgY29udmVydENhc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6IHtcclxuXHJcbiAgICAgICAgLy8gTm93LCBjdXJyZWN5IGRpcmVjdGl2ZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIHdpbGwgYmUgaGFuZGxlZCBieSBhbmd1bGFyIHBhY2thZ2VzIGxpa2UgbmctY3VycmVuY3lcclxuICAgICAgICAvLyBoZXJlIGl0IHNob3VsZCBzaW1wbHkgcGFzcyB0aGUgYWN0dWFsIG5hdGl2ZSB2YWx1ZSBvZiBudW1iZXIgYW5kIG1hc2tzIHNob3VsZCBub3QgYmUgYXBwbGllZFxyXG4gICAgICAgIC8vIFNvLCBwcmVwYXJlIHRlbXBvcmFyeSBwaWN0dXJlIHRvIGdlbmVyYXRlIG5hdGl2ZSB2YWx1ZS5cclxuICAgICAgICBsZXQgIG5ld1BpYyA9IHBpYy5nZXRVbmZvcm1hdHRlZE51bWVyaWNQaWMoKTtcclxuXHJcbiAgICAgICAgLy9zdG9yZSBhbmQgcmVzdG9yZSBkZWNpbWFsIHNlcCBhbmQgdGhvdS4gc2VwXHJcbiAgICAgICAgbGV0ICBkZWM6IHN0cmluZyA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERlY2ltYWwoKTtcclxuICAgICAgICBsZXQgdGhvdTpzdHJpbmcgID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0VGhvdXNhbmRzKCk7XHJcblxyXG4gICAgICAgIC8vc2V0IGRlZmF1bHQgdmFsdWVzXHJcbiAgICAgICAgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuc2V0RGVjaW1hbFNlcGFyYXRvcignLicpO1xyXG4gICAgICAgIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LnNldFRob3VzYW5kc1NlcGFyYXRvcignLCcpO1xyXG5cclxuICAgICAgICBzdHIgPSB0aGlzLmZyb21OdW0obWdWYWx1ZSwgbmV3UGljKTtcclxuICAgICAgICBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5zZXREZWNpbWFsU2VwYXJhdG9yKGRlYyk7XHJcbiAgICAgICAgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuc2V0VGhvdXNhbmRzU2VwYXJhdG9yKHRob3UpO1xyXG4gICAgICAgIC8vIFZhbHVlIHNob3VsZCBiZSB0cmltbWVkIHdoZW4gd2UgYXJlIGRpc3BsYXlpbmcgY29udHJvbCBpbiBvcmRlciB0byBkaXNwbGF5IGFsaWdubWVudCBwcm9wZXJseS4gQnV0IHdoaWxlIGVudGVyaW5nIGNvbnRyb2wsIGl0IHNob3VsZCBub3QgYmUgdHJpbW1lZFxyXG4gICAgICAgIC8vIGluIG9yZGVyIHRvIHJlYWQgaXQgcHJvcGVybHkuXHJcbiAgICAgICAgaWYgKG5ld1BpYy5nZXRNYXNrQ2hhcnMoKSA9PT0gMCB8fCAhdGltZV9kYXRlX251bV9waWNfWl9lZHQpXHJcbiAgICAgICAgICBzdHIgPSBTdHJVdGlsLmx0cmltKHN0cik7XHJcblxyXG4gICAgICAgIGlmICh1c2VOYXRpdmUpIHtcclxuICAgICAgICAgIGlmIChzdHIgPT0gXCJcIilcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgICAgbGV0IGRibDogbnVtYmVyID0gTnVtYmVyKHN0cik7XHJcbiAgICAgICAgICByZXR1cm4gZGJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOiB7XHJcbiAgICAgICAgaWYgKHVzZU5hdGl2ZSkge1xyXG4gICAgICAgICAgbGV0IGR0OiBEYXRlO1xyXG4gICAgICAgICAgZHQgPSB0aGlzLmZyb21NZ0RhdGVUb05hdGl2ZURhdGUobWdWYWx1ZSwgcGljLCBjb21wSWR4KTtcclxuICAgICAgICAgIHJldHVybiBkdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBzdHIgPSB0aGlzLmZyb21EYXRlKG1nVmFsdWUsIHBpYywgY29tcElkeCwgdGltZV9kYXRlX251bV9waWNfWl9lZHQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOiB7XHJcbiAgICAgICAgaWYgKHVzZU5hdGl2ZSkge1xyXG4gICAgICAgICAgbGV0IGR0OiBEYXRlO1xyXG4gICAgICAgICAgZHQgPSB0aGlzLmZyb21NZ1RpbWVUb05hdGl2ZVRpbWUobWdWYWx1ZSwgcGljKTtcclxuICAgICAgICAgIHJldHVybiBkdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBzdHIgPSB0aGlzLmZyb21UaW1lKG1nVmFsdWUsIHBpYywgdGltZV9kYXRlX251bV9waWNfWl9lZHQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOiB7XHJcbiAgICAgICAgbGV0IGxvZ1ZhbDogYm9vbGVhbjtcclxuICAgICAgICBsb2dWYWwgPSB0aGlzLmZyb21NZ0xvZ2ljYWxUb05hdGl2ZUxvZ2ljYWwobWdWYWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGxvZ1ZhbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgc3RyID0gQmxvYlR5cGUuZ2V0U3RyaW5nKG1nVmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgc3RyID0gbWdWYWx1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYW4gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBkaXNwbGF5IHZhbHVlIGZyb20gaXRzIHBpY3R1cmUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRpc3BWYWx1ZVwiPnRoZSB2YWx1ZSBhcyBlbnRlcmVkIGJ5IHVzZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJhbmdlU3RyXCI+dmFsdWUgcmFuZ2VcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1wiPnRoZSBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYmxvYkNvbnRlbnRUeXBlXCI+aWYgdGhlIGF0dHJpYnV0ZSBpcyBibG9iLCBpdHMgY29udGVudCB0eXBlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBpbnRlcm5hbCBmb3JtIG9mIGRhdGEgKGFzIHVzZWQgaW4gdGhlIFhNTClcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGRpc3AybWcoZGlzcFZhbHVlOiBhbnksIHBpYzogUElDLCBjb21wSWR4OiBudW1iZXIsIGJsb2JDb250ZW50VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBzdHI6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgc3dpdGNoIChwaWMuZ2V0QXR0cigpKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgc3RyID0gdGhpcy50b0FscGhhKGRpc3BWYWx1ZSwgcGljKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzoge1xyXG4gICAgICAgIGRpc3BWYWx1ZSA9IFN0cmluZyhkaXNwVmFsdWUpO1xyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgbWFzayBmcm9tIGRpc3BsYXkgdmFsdWUuXHJcbiAgICAgICAgbGV0IGxlbjogbnVtYmVyID0gZGlzcFZhbHVlLmxlbmd0aDtcclxuICAgICAgICB3aGlsZSAobGVuID4gMCkge1xyXG4gICAgICAgICAgaWYgKCFwaWMucGljSXNNYXNrKGxlbiAtIDEpICYmIGRpc3BWYWx1ZVtsZW4gLSAxXSAhPT0gKCcgJykpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXNwVmFsdWUubGVuZ3RoID4gbGVuKVxyXG4gICAgICAgICAgZGlzcFZhbHVlID0gTlN0cmluZy5SZW1vdmUoZGlzcFZhbHVlLCBsZW4sIChkaXNwVmFsdWUubGVuZ3RoIC0gbGVuKSk7XHJcblxyXG4gICAgICAgIGlmIChwaWMuaXNOZWdhdGl2ZSgpICYmIGRpc3BWYWx1ZS50cmltKCkuc3RhcnRzV2l0aChcIi1cIikpXHJcbiAgICAgICAgICBkaXNwVmFsdWUgPSBTdHJVdGlsLmx0cmltKGRpc3BWYWx1ZSk7XHJcblxyXG4gICAgICAgIC8vc3RvcmUgYW5kIHJlc3RvcmUgZGVjaW1hbCBzZXAgYW5kIHRob3UuIHNlcFxyXG4gICAgICAgIGxldCAgZGVjOiBzdHJpbmcgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREZWNpbWFsKCk7XHJcbiAgICAgICAgbGV0IHRob3U6c3RyaW5nICA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFRob3VzYW5kcygpO1xyXG5cclxuICAgICAgICAvL3NldCBkZWZhdWx0IHZhbHVlc1xyXG4gICAgICAgIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LnNldERlY2ltYWxTZXBhcmF0b3IoJy4nKTtcclxuICAgICAgICBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5zZXRUaG91c2FuZHNTZXBhcmF0b3IoJywnKTtcclxuXHJcbiAgICAgICAgLy8gTm93LCBjdXJyZWN5IGRpcmVjdGl2ZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIHdpbGwgYmUgaGFuZGxlZCBieSBhbmd1bGFyIHBhY2thZ2VzIGxpa2UgbmctY3VycmVuY3lcclxuICAgICAgICAvLyBoZXJlIGl0IHNob3VsZCBzaW1wbHkgcGFzcyB0aGUgYWN0dWFsIG5hdGl2ZSB2YWx1ZSBvZiBudW1iZXIgYW5kIG1hc2tzIHNob3VsZCBub3QgYmUgYXBwbGllZFxyXG4gICAgICAgIC8vIFNvLCBwcmVwYXJlIHRlbXBvcmFyeSBwaWN0dXJlIHRvIGdlbmVyYXRlIG5hdGl2ZSB2YWx1ZS5cclxuICAgICAgICBsZXQgIG5ld1BpYyA9IHBpYy5nZXRVbmZvcm1hdHRlZE51bWVyaWNQaWMoKTtcclxuXHJcbiAgICAgICAgc3RyID0gdGhpcy50b051bShkaXNwVmFsdWUsIG5ld1BpYywgY29tcElkeCk7XHJcblxyXG4gICAgICAgIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LnNldERlY2ltYWxTZXBhcmF0b3IoZGVjKTtcclxuICAgICAgICBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5zZXRUaG91c2FuZHNTZXBhcmF0b3IodGhvdSk7XHJcbiAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAge1xyXG4gICAgICAgIGxldCBkdDogRGF0ZTtcclxuICAgICAgICAvL3doZW4gZGF0ZSBpcyBpbiBpdGVtIGxpc3QgZm9yIGNob2ljZSBjdHJsLCBpdCB3aWxsIGNvbWUgaGVyZSBhcyBzdHJpbmcuIHNvIGNvbnZlcnQgaXQgdG8gRGF0ZS5cclxuICAgICAgICBpZiAodHlwZW9mIGRpc3BWYWx1ZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICBkdCA9IG5ldyBEYXRlIChkaXNwVmFsdWUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGR0ID0gZGlzcFZhbHVlO1xyXG4gICAgICAgIHN0ciA9IHRoaXMuZnJvbU5hdGl2ZURhdGVUb01nRGF0ZShkdCwgcGljKTtcclxuICAgICAgfVxyXG4gICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRToge1xyXG4gICAgICAgIGxldCBkdDogRGF0ZTtcclxuXHJcbiAgICAgICAgLy93aGVuIGRhdGUgaXMgaW4gaXRlbSBsaXN0IGZvciBjaG9pY2UgY3RybCwgaXQgd2lsbCBjb21lIGhlcmUgYXMgc3RyaW5nLiBzbyBjb252ZXJ0IGl0IHRvIERhdGUuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwVmFsdWUgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGR0ID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgIGlmIChkaXNwVmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgZHQuc2V0SG91cnMoK1N0cmluZyhkaXNwVmFsdWUpLnN1YnN0cigwLCAyKSk7XHJcbiAgICAgICAgICAgIGR0LnNldE1pbnV0ZXMoK1N0cmluZyhkaXNwVmFsdWUpLnN1YnN0cigwLCAyKSk7XHJcbiAgICAgICAgICAgIGlmIChTdHJpbmcoZGlzcFZhbHVlKS5sZW5ndGggPiA1KVxyXG4gICAgICAgICAgICAgIGR0LnNldFNlY29uZHMoK1N0cmluZyhkaXNwVmFsdWUpLnN1YnN0cigwLCAyKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBkdCA9IGRpc3BWYWx1ZTtcclxuXHJcbiAgICAgICAgc3RyID0gdGhpcy5mcm9tTmF0aXZlVGltZVRvTWdUaW1lKGR0KTtcclxuICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHN0ciA9IHRoaXMuZnJvbU5hdGl2ZUxvZ2ljYWxUb01nTG9naWNhbChkaXNwVmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgIHN0ciA9IEJsb2JUeXBlLmNyZWF0ZUZyb21TdHJpbmcoZGlzcFZhbHVlLCBibG9iQ29udGVudFR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIE1ldGhvZHMgZm9yIGNvdmVydGluZyBJTlRFUk5BTCAtLS0+IERJUExBWVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBIYW5kbGVzIG1hZ2ljIG51bWJlciB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtZ051bVwiPiAgIEEgTWFnaWMgTnVtYmVyPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPiAgVGhlIHBpY3R1cmUgdG8gdXNlPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkPC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBmcm9tTnVtKG1nVmFsdWU6IHN0cmluZywgcGljOiBQSUMpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1nTnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRShtZ1ZhbHVlKTtcclxuICAgIHJldHVybiBtZ051bS50b0Rpc3BsYXlWYWx1ZShwaWMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgZm9yIGFuIGFscGhhIHZhbHVlIGFjY29yZGluZyB0byB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhU3RyXCI+ICAgVGhlIHNvdXJjZSBkYXRhXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj4gICAgVGhlIHBpY3R1cmUgdG8gdXNlIGZvciB0aGUgdmFsdWUgdG8gZGlzcGxheVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmFuZ2VTdHJcIj4gIFRoZSByYW5nZSBvZiB2YWx1ZXMgdG8gY2hlY2tcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFsd2F5c0ZpbGxcIj5BbHdheXMgYXV0byBmaWxsIGFscGhhIG92ZXIgaXRzIHBpY3R1cmUgKHVzZWQgZm9yIHNlbGVjdCBjb250cm9scylcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGZyb21BbHBoYShkYXRhU3RyOiBzdHJpbmcsIHBpYzogUElDLCByYW5nZVN0cjogc3RyaW5nLCBhbHdheXNGaWxsOiBib29sZWFuLCBjb252ZXJ0Q2FzZTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgbGVuOiBudW1iZXIgPSBwaWMuZ2V0TWFza1NpemUoKTtcclxuICAgIGxldCBtaW5fbGVuOiBudW1iZXIgPSBsZW47XHJcbiAgICBsZXQgbWFza1N0cjogc3RyaW5nID0gcGljLmdldE1hc2soKTtcclxuICAgIGxldCByZXNTdHI6IHN0cmluZztcclxuXHJcbiAgICBpZiAocGljLmdldE1hc2tDaGFycygpID4gMCkge1xyXG4gICAgICByZXNTdHIgPSB0aGlzLndpbl9kYXRhX2NweShOU3RyaW5nLlRvQ2hhckFycmF5KG1hc2tTdHIpLCBsZW4sIE5TdHJpbmcuVG9DaGFyQXJyYXkoZGF0YVN0ciksIHBpYy5pc0F0dHJBbHBoYSgpLCBjb252ZXJ0Q2FzZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkgJiYgcGljLmlzQXR0ckFscGhhKCkpXHJcbiAgICAgIC8vIEpQTjogREJDUyBzdXBwb3J0XHJcbiAgICAgIHtcclxuICAgICAgICAvLyBzdWJzdHJpbmcgYnkgdGhlIG51bWJlciBvZiBieXRlc1xyXG4gICAgICAgIGxldCBpbnREYXRhU3RyTGVuQjogbnVtYmVyID0gVXRpbFN0ckJ5dGVNb2RlLmxlbkIoZGF0YVN0cik7XHJcbiAgICAgICAgaWYgKG1pbl9sZW4gPiBpbnREYXRhU3RyTGVuQikge1xyXG4gICAgICAgICAgbWluX2xlbiA9IGludERhdGFTdHJMZW5CO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNTdHIgPSBVdGlsU3RyQnl0ZU1vZGUubGVmdEIoZGF0YVN0ciwgbWluX2xlbik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZGF0YVN0ciAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChtaW5fbGVuID4gZGF0YVN0ci5sZW5ndGgpIHtcclxuICAgICAgICAgIG1pbl9sZW4gPSBkYXRhU3RyLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnZlcnRDYXNlKSB7XHJcbiAgICAgICAgICByZXNTdHIgPSB0aGlzLndpbl9kYXRhX2NweShOU3RyaW5nLlRvQ2hhckFycmF5KG1hc2tTdHIpLCBsZW4sIE5TdHJpbmcuVG9DaGFyQXJyYXkoZGF0YVN0ciksIHBpYy5pc0F0dHJBbHBoYSgpLCBjb252ZXJ0Q2FzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmVzU3RyID0gZGF0YVN0ci5zdWJzdHIoMCwgbWluX2xlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gV2UgZG8gbm90IGZpbGwgQWxwaGEgZmlsZWQgb3ZlciBjb250cm9sJ3MgcGljdHVyZSBsZW5ndGggUUNSICMgMjk1NDA4XHJcbiAgICBpZiAoYWx3YXlzRmlsbCB8fCAocmFuZ2VTdHIgIT09IG51bGwgJiYgcmFuZ2VTdHIubGVuZ3RoID4gMCAmJiByZXNTdHIubGVuZ3RoIDwgbGVuKSkge1xyXG4gICAgICBsZXQgdmQ6IFZhbGlkYXRpb25EZXRhaWxzQmFzZSA9IG5ldyBWYWxpZGF0aW9uRGV0YWlsc0Jhc2UocmFuZ2VTdHIpO1xyXG4gICAgICBsZXQgY29udGludW91c1JhbmdlVmFsdWVzOiBMaXN0PHN0cmluZz4gPSB2ZC5nZXRDb250aW51b3VzUmFuZ2VWYWx1ZXMoKTtcclxuICAgICAgbGV0IGRpc2NyZXRlUmFuZ2VWYWx1ZXM6IExpc3Q8c3RyaW5nPiA9IHZkLmdldERpc2NyZXRlUmFuZ2VWYWx1ZXMoKTtcclxuICAgICAgaWYgKGNvbnRpbnVvdXNSYW5nZVZhbHVlcyAhPT0gbnVsbCB8fCBkaXNjcmV0ZVJhbmdlVmFsdWVzICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmVzU3RyID0gdGhpcy5maWxsQWxwaGFCeVJhbmdlKGNvbnRpbnVvdXNSYW5nZVZhbHVlcywgZGlzY3JldGVSYW5nZVZhbHVlcywgcmVzU3RyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc1N0cjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FzZUNvbnZlcnRlZENoYXIoZGF0YTogc3RyaW5nLCBtYXNrOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cclxuICAgIGxldCBjaDogc3RyaW5nO1xyXG4gICAgaWYgKG1hc2suY2hhckNvZGVBdCgwKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19VKSB7XHJcbiAgICAgIGNoID0gZGF0YS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChtYXNrLmNoYXJDb2RlQXQoMCkgPT09IFBJQ0ludGVyZmFjZS5QSUNfTCkge1xyXG4gICAgICAgIGNoID0gZGF0YS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNoID0gZGF0YTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3aW5fZGF0YV9jcHkobWFza1N0cjogc3RyaW5nW10sIG1hc2tMZW46IG51bWJlciwgZGF0YVN0cjogc3RyaW5nW10sIGlzQXR0ckFscGhhOiBib29sZWFuKTogc3RyaW5nO1xyXG4gIHByaXZhdGUgd2luX2RhdGFfY3B5KG1hc2tTdHI6IHN0cmluZ1tdLCBtYXNrTGVuOiBudW1iZXIsIGRhdGFTdHI6IHN0cmluZ1tdLCBpc0F0dHJBbHBoYTogYm9vbGVhbiwgY29udmVydENhc2U6IGJvb2xlYW4pOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB3aW5fZGF0YV9jcHkobWFza1N0cjogYW55LCBtYXNrTGVuOiBudW1iZXIsIGRhdGFTdHI6IGFueSwgaXNBdHRyQWxwaGE6IGJvb2xlYW4sIGNvbnZlcnRDYXNlPzogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNClcclxuICAgICAgcmV0dXJuIHRoaXMud2luX2RhdGFfY3B5XzAobWFza1N0ciwgbWFza0xlbiwgZGF0YVN0ciwgaXNBdHRyQWxwaGEpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndpbl9kYXRhX2NweV8xKG1hc2tTdHIsIG1hc2tMZW4sIGRhdGFTdHIsIGlzQXR0ckFscGhhLCBjb252ZXJ0Q2FzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdpbl9kYXRhX2NweV8wKG1hc2tTdHI6IHN0cmluZ1tdLCBtYXNrTGVuOiBudW1iZXIsIGRhdGFTdHI6IHN0cmluZ1tdLCBpc0F0dHJBbHBoYTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy53aW5fZGF0YV9jcHkobWFza1N0ciwgbWFza0xlbiwgZGF0YVN0ciwgaXNBdHRyQWxwaGEsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBIYW5kbGVzIGFscGhhIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1hc2tTdHJcIj4gICBUaGUgbWFzayB0byBiZSB1c2VkIGluIG9yZGVyIHRvIGJ1aWxkIHRoZSBzdHJpbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPiAgICBUaGUgcGljdHVyZSB0byB1c2VcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHdpbl9kYXRhX2NweV8xKG1hc2tTdHI6IHN0cmluZ1tdLCBtYXNrTGVuOiBudW1iZXIsIGRhdGFTdHI6IHN0cmluZ1tdLCBpc0F0dHJBbHBoYTogYm9vbGVhbiwgY29udmVydENhc2U6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgbGV0IG1hc2tJZHg6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZGF0YUlkeDogbnVtYmVyID0gMDtcclxuICAgIGxldCByZXNTdHI6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4obWFza0xlbik7XHJcblxyXG4gICAgaWYgKGlzQXR0ckFscGhhICYmIFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpIHtcclxuICAgICAgbGV0IG51bTI6IG51bWJlciA9IDA7XHJcbiAgICAgIHdoaWxlIChtYXNrSWR4IDwgbWFza0xlbiAmJiBudW0yIDwgbWFza0xlbikge1xyXG4gICAgICAgIGlmIChtYXNrU3RyW21hc2tJZHhdLmNoYXJDb2RlQXQoMCkgPD0gUElDSW50ZXJmYWNlLlBJQ19NQVhfT1ApIHtcclxuICAgICAgICAgIGlmIChkYXRhSWR4IDwgZGF0YVN0ci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IHN0clZhbDogc3RyaW5nID0gTlN0cmluZy5Gcm9tQ2hhcnMoZGF0YVN0ciwgZGF0YUlkeCwgMSk7XHJcbiAgICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUubGVuQihzdHJWYWwpID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG1hc2tJZHggKyAxIDwgbWFza0xlbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hc2tTdHJbbWFza0lkeCArIDFdLmNoYXJDb2RlQXQoMCkgPD0gUElDSW50ZXJmYWNlLlBJQ19NQVhfT1ApIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRDYXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzU3RyW251bTIrK10gPSB0aGlzLmNhc2VDb252ZXJ0ZWRDaGFyKGRhdGFTdHJbZGF0YUlkeCsrXSwgbWFza1N0clttYXNrSWR4ICsgMV0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc1N0cltudW0yKytdID0gZGF0YVN0cltkYXRhSWR4KytdO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIG1hc2tJZHggPSBtYXNrSWR4ICsgMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICByZXNTdHJbbnVtMisrXSA9ICcgJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXNTdHJbbnVtMisrXSA9ICcgJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbnZlcnRDYXNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXNTdHJbbnVtMisrXSA9IHRoaXMuY2FzZUNvbnZlcnRlZENoYXIoZGF0YVN0cltkYXRhSWR4KytdLCBtYXNrU3RyW21hc2tJZHggKyAxXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzU3RyW251bTIrK10gPSBkYXRhU3RyW2RhdGFJZHgrK107XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVzU3RyW251bTIrK10gPSAnICcvKicgJyovO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1N0cltudW0yKytdID0gbWFza1N0clttYXNrSWR4XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWFza0lkeCA9IG1hc2tJZHggKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyhyZXNTdHIpLnN1YnN0cigwLCBudW0yKTtcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSAobWFza0lkeCA8IG1hc2tMZW4pIHtcclxuICAgICAgaWYgKG1hc2tTdHJbbWFza0lkeF0uY2hhckNvZGVBdCgwKSA8PSBQSUNJbnRlcmZhY2UuUElDX01BWF9PUCkge1xyXG4gICAgICAgIGlmIChkYXRhSWR4IDwgZGF0YVN0ci5sZW5ndGgpIHtcclxuICAgICAgICAgIHJlc1N0clttYXNrSWR4XSA9IGRhdGFTdHJbZGF0YUlkeF07XHJcbiAgICAgICAgICBpZiAoY29udmVydENhc2UpIHtcclxuICAgICAgICAgICAgcmVzU3RyW21hc2tJZHhdID0gdGhpcy5jYXNlQ29udmVydGVkQ2hhcihkYXRhU3RyW2RhdGFJZHhdLCBtYXNrU3RyW21hc2tJZHhdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXNTdHJbbWFza0lkeF0gPSBkYXRhU3RyW2RhdGFJZHhdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGF0YUlkeCA9IGRhdGFJZHggKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1N0clttYXNrSWR4XSA9ICcgJy8qJyAnKi87XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJlc1N0clttYXNrSWR4XSA9IG1hc2tTdHJbbWFza0lkeF07XHJcbiAgICAgIH1cclxuICAgICAgbWFza0lkeCA9IG1hc2tJZHggKyAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKHJlc1N0cik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYSBkaXNwbGF5IHN0cmluZyBmb3IgYW4gZGF0ZSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0YVN0clwiPiAgIFRoZSBzb3VyY2UgZGF0YTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj4gICAgVGhlIHBpY3R1cmUgdG8gdXNlIGZvciB0aGUgdmFsdWUgdG8gZGlzcGxheTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZDwvcmV0dXJucz5cclxuICBmcm9tRGF0ZShkYXRhU3RyOiBzdHJpbmcsIHBpYzogUElDLCBjb21wSWR4OiBudW1iZXIsIHRpbWVfZGF0ZV9waWNfWl9lZHQ6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgbGV0IG1hc2s6IHN0cmluZyA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgICBsZXQgbWFza1NpemU6IG51bWJlciA9IHBpYy5nZXRNYXNrU2l6ZSgpO1xyXG4gICAgbGV0IGRhdGU6IG51bWJlciA9IG5ldyBOVU1fVFlQRShkYXRhU3RyKS5OVU1fMl9VTE9ORygpO1xyXG4gICAgcmV0dXJuIHRoaXMudG9fYV9waWNfZGF0ZW1vZGUobWFzaywgbWFza1NpemUsIGRhdGUsIHBpYywgdGltZV9kYXRlX3BpY19aX2VkdCwgZmFsc2UsIGNvbXBJZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgZm9yIGFuIHRpbWUgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFTdHJcIj4gICBUaGUgc291cmNlIGRhdGE8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgIFRoZSBwaWN0dXJlIHRvIHVzZSBmb3IgdGhlIHZhbHVlIHRvIGRpc3BsYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQ8L3JldHVybnM+XHJcbiAgZnJvbVRpbWUoZGF0YVN0cjogc3RyaW5nLCBwaWM6IFBJQywgdGltZV9kYXRlX3BpY19aX2VkdDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgbWFzazogc3RyaW5nID0gcGljLmdldE1hc2soKTtcclxuICAgIGxldCBtYXNrU2l6ZTogbnVtYmVyID0gcGljLmdldE1hc2tTaXplKCk7XHJcbiAgICBsZXQgdGltZTogbnVtYmVyID0gbmV3IE5VTV9UWVBFKGRhdGFTdHIpLk5VTV8yX1VMT05HKCk7XHJcbiAgICByZXR1cm4gdGhpcy50aW1lXzJfYV9waWMobWFzaywgbWFza1NpemUsIHRpbWUsIHBpYywgdGltZV9kYXRlX3BpY19aX2VkdCwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgZm9yIGFuIGRhdGUgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFTdHJcIj4gICBUaGUgc291cmNlIGRhdGE8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgIFRoZSBwaWN0dXJlIHRvIHVzZSBmb3IgdGhlIHZhbHVlIHRvIGRpc3BsYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQ8L3JldHVybnM+XHJcbiAgZnJvbU1nRGF0ZVRvTmF0aXZlRGF0ZShkYXRhU3RyOiBzdHJpbmcsIHBpYzogUElDLCBjb21wSWR4OiBudW1iZXIpOiBEYXRlIHtcclxuXHJcbiAgICBsZXQgZGF0ZTogbnVtYmVyID0gbmV3IE5VTV9UWVBFKGRhdGFTdHIpLk5VTV8yX1VMT05HKCk7XHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcztcclxuLy8gQnJlYWsgZGF0YSBpbnRvIGl0cyBjb21wb25lbnRzXHJcbiAgICBicmVha1BhcmFtcyA9IG5ldyBEYXRlQnJlYWtQYXJhbXMoKTtcclxuICAgIHRoaXMuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZGF0ZSwgZmFsc2UsIGNvbXBJZHgpO1xyXG4gICAgaWYgKGJyZWFrUGFyYW1zLm1vbnRoID4gMClcclxuICAgICAgYnJlYWtQYXJhbXMubW9udGggPSBicmVha1BhcmFtcy5tb250aCAtIDE7IC8vbW9udGggaXMgMCBiYXNlZCBpbiBEYXRlIGNsYXNzXHJcblxyXG4gICAgaWYgKGJyZWFrUGFyYW1zLnllYXIgPT0gMCAmJiBicmVha1BhcmFtcy5tb250aCA9PSAwICYmIGJyZWFrUGFyYW1zLmRheSA9PSAwKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBsZXQgbWFza1N0ciA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgICBsZXQgb3V0VmFsOiBzdHJpbmdbXSA9IE5TdHJpbmcuVG9DaGFyQXJyYXkobWFza1N0cik7XHJcblxyXG4gICAgbGV0IGxlbiA9IHBpYy5nZXRNYXNrU2l6ZSgpO1xyXG4gICBcclxuICAgIGxldCB5ZWFyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgIGxldCAgb3V0SWR4ID0gMDtcclxuICAgIHdoaWxlIChsZW4gPiAwKSB7XHJcblxyXG4gICAgICBzd2l0Y2ggKG91dFZhbFtvdXRJZHhdLmNoYXJDb2RlQXQoMCkpIHtcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWVk6IHtcclxuICAgICAgICAgIHRoaXMuaW50XzJfYShvdXRWYWwsIG91dElkeCwgMiwgYnJlYWtQYXJhbXMueWVhciwgJzAnKTtcclxuICAgICAgICAgIGxldCB5ZWFyU3RyID0gTlN0cmluZy5Gcm9tQ2hhcnMob3V0VmFsKTtcclxuICAgICAgICAgIHllYXIgPSAreWVhclN0ci5zdWJzdHIob3V0SWR4KTtcclxuICAgICAgICAgIG91dElkeCArPSAyO1xyXG4gICAgICAgICAgbGVuIC09IDI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWVk6IHtcclxuICAgICAgICAgIHRoaXMuaW50XzJfYShvdXRWYWwsIG91dElkeCwgMiwgYnJlYWtQYXJhbXMueWVhciwgJzAnKTtcclxuICAgICAgICAgIGxldCB5ZWFyU3RyID0gTlN0cmluZy5Gcm9tQ2hhcnMob3V0VmFsKTtcclxuICAgICAgICAgIHllYXIgPSAreWVhclN0ci5zdWJzdHIob3V0SWR4KTtcclxuICAgICAgICAgIG91dElkeCArPSAyO1xyXG4gICAgICAgICAgbGVuIC09IDI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ZWVlZOlxyXG4gICAgICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCA0LCB5ZWFyLCAnMCcpO1xyXG4gICAgICAgICAgbGV0IHllYXJTdHIgPSBOU3RyaW5nLkZyb21DaGFycyhvdXRWYWwpO1xyXG4gICAgICAgICAgeWVhciA9ICt5ZWFyU3RyLnN1YnN0cihvdXRJZHgpO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IDQ7XHJcbiAgICAgICAgICBsZW4gLT0gNDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBvdXRJZHgrKztcclxuICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBuYXRpdmVEdDogRGF0ZSA9IG5ldyBEYXRlKHllYXIsIGJyZWFrUGFyYW1zLm1vbnRoLCBicmVha1BhcmFtcy5kYXkpO1xyXG5cclxuICAgIHJldHVybiBuYXRpdmVEdDtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYSBkaXNwbGF5IHN0cmluZyBmb3IgYW4gZGF0ZSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0YVN0clwiPiAgIFRoZSBzb3VyY2UgZGF0YTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj4gICAgVGhlIHBpY3R1cmUgdG8gdXNlIGZvciB0aGUgdmFsdWUgdG8gZGlzcGxheTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZDwvcmV0dXJucz5cclxuICBmcm9tTmF0aXZlRGF0ZVRvTWdEYXRlTnVtYmVyKG5hdGl2ZURhdGU6IERhdGUsIHBpYzogUElDKTogbnVtYmVyIHtcclxuICAgIGxldCBudW1WYWw6IG51bWJlcjtcclxuICAgIGxldCBkYXRlUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXM7XHJcbiAgICBsZXQgbWlsbGVuaXVtOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHllYXI6IG51bWJlciA9IG5hdGl2ZURhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIGxldCBkYXk6IG51bWJlciA9IG5hdGl2ZURhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgbGV0IG1vbnRoOiBudW1iZXIgPSBuYXRpdmVEYXRlLmdldE1vbnRoKCkgKyAxO1xyXG5cclxuICAgIC8vIEhlYnJldyBZZWFyXHJcbiAgICBpZiAocGljLmlzSGVicmV3KCkpIHtcclxuICAgICAgaWYgKHllYXIgPiAwKSB7XHJcbiAgICAgICAgaWYgKG1pbGxlbml1bSA9PT0gMClcclxuICAgICAgICAgIG1pbGxlbml1bSA9IDU7XHJcbiAgICAgICAgeWVhciArPSBtaWxsZW5pdW0gKiAxMDAwO1xyXG4gICAgICB9XHJcbiAgICAgIG51bVZhbCA9IChIZWJyZXdEYXRlLmRhdGVoZWJfMl9kKHllYXIsIG1vbnRoLCBkYXkpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyB0aGUgbmV4dCAyIGxpbmVzIHN1cHBvcnQgNC54eCBERC9NTSBwaWN0dXJlc1xyXG4gICAgICBpZiAoeWVhciA9PT0gMCkge1xyXG4gICAgICAgIGRhdGVQYXJhbXMgPSB0aGlzLmRhdGVfc3lzKCk7XHJcbiAgICAgICAgeWVhciA9IGRhdGVQYXJhbXMueWVhcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgbnVtVmFsID0gdGhpcy5kYXRlXzRfY2FsZW5kZXIoeWVhciwgbW9udGgsIGRheSwgMCwgZmFsc2UpOyAgICAvLyB3ZSBhcmUgYWRkaW5nIGEgbGl0dGxlIGVtcHR5IHNwYWNlIHRvIHRoZSB2YXJpYWJsZSwgYmVjYXVzZSB3ZSBtaWdodCBsYXRlclxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bVZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIGRpc3BsYXkgc3RyaW5nIGZvciBhbiBkYXRlIHZhbHVlIGFjY29yZGluZyB0byB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhU3RyXCI+ICAgVGhlIHNvdXJjZSBkYXRhPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPiAgICBUaGUgcGljdHVyZSB0byB1c2UgZm9yIHRoZSB2YWx1ZSB0byBkaXNwbGF5PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkPC9yZXR1cm5zPlxyXG4gIGZyb21OYXRpdmVEYXRlVG9NZ0RhdGUobmF0aXZlRGF0ZTogRGF0ZSwgcGljOiBQSUMpOiBzdHJpbmcge1xyXG5cclxuICAgIGxldCBtZ051bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBudW1WYWw6IG51bWJlciA9IG5hdGl2ZURhdGUgPT0gbnVsbCA/IDAgOiB0aGlzLmZyb21OYXRpdmVEYXRlVG9NZ0RhdGVOdW1iZXIobmF0aXZlRGF0ZSwgcGljKTtcclxuICAgIG1nTnVtLk5VTV80X0xPTkcobnVtVmFsKTtcclxuXHJcbiAgICByZXR1cm4gbWdOdW0udG9YTUxyZWNvcmQoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBIYW5kbGUgZGF0ZSB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJvdXRTdHJcIj4gICAgICAgICAgVGhlIG1hc2sgdG8gYmUgdXNlZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib3V0X2xlblwiPiAgICAgICAgIE1hc2sgbGVuZ3RoXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj4gICAgICAgICAgICAgVGhlIHBpY3VyZSBpbmZvcm1hdGlvblxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0ZV9waWNfWl9lZHRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlnbm9yZV9kdF9mbXRcIj5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICB0b19hX3BpY19kYXRlbW9kZShvdXRTdHI6IHN0cmluZywgb3V0X2xlbjogbnVtYmVyLCBkYXRlOiBudW1iZXIsIHBpYzogUElDLCBkYXRlX3BpY19aX2VkdDogYm9vbGVhbiwgaWdub3JlX2R0X2ZtdDogYm9vbGVhbiwgY29tcElkeDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBsZW46IG51bWJlcjtcclxuICAgIGxldCBkYXk6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZG95OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGRvdzogbnVtYmVyID0gMDtcclxuICAgIGxldCB5ZWFyOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IG1vbnRoOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGhkYXk6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgaHllYXI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgaG1vbnRoOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGxlYXA6IEJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgcDogc3RyaW5nW107XHJcbiAgICBsZXQgb3V0VmFsOiBzdHJpbmdbXSA9IE5TdHJpbmcuVG9DaGFyQXJyYXkob3V0U3RyKTtcclxuICAgIGxldCBicmVha1BhcmFtczogRGF0ZUJyZWFrUGFyYW1zO1xyXG4gICAgbGV0IGRhdGVOYW1lUGFyYW1zOiBEYXRlTmFtZVBhcmFtcztcclxuICAgIGxldCBvdXRJZHg6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgc3RyT3V0OiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAgIC8vIElmIHJlc3VsdCBvdmVyZmxvd3MgcmV0dXJuIGJ1ZmZlciwgZmlsbCB3aXRoIGFzdGVyaXhzIGFuZCBiYWlsIG91dFxyXG4gICAgaWYgKHBpYy5nZXRNYXNrU2l6ZSgpID4gb3V0X2xlbikge1xyXG4gICAgICBmb3IgKDsgaSA8IG91dF9sZW47IGkrKylcclxuICAgICAgICBvdXRWYWxbaV0gPSAnKic7XHJcbiAgICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyhvdXRWYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHplcm8gZmlsbCByZXF1ZXN0ZWQgYW5kIGRhdGUgdmFsdWUgaXMgemVybywgZmlsbCBpdCBhbmQgYmFpbCBvdXRcclxuICAgIG91dF9sZW4gPSBsZW4gPSBwaWMuZ2V0TWFza1NpemUoKTtcclxuICAgIGlmIChwaWMuemVyb0ZpbGwoKSAmJiBkYXRlID09PSAwICYmICFkYXRlX3BpY19aX2VkdCkge1xyXG4gICAgICBmb3IgKDsgaSA8IG91dF9sZW47IGkrKylcclxuICAgICAgICBvdXRWYWxbaV0gPSBwaWMuZ2V0WmVyb1BhZCgpO1xyXG4gICAgICByZXR1cm4gTlN0cmluZy5Gcm9tQ2hhcnMob3V0VmFsKTtcclxuICAgIH1cclxuICAgIGlmIChwaWMuaXNIZWJyZXcoKSAmJiAoZGF0ZSA9PT0gMCB8fCBkYXRlID09PSAxMDAwMDAwMDAwKSkge1xyXG4gICAgICBmb3IgKDsgaSA8IG91dF9sZW47IGkrKylcclxuICAgICAgICBvdXRWYWxbaV0gPSAnICc7XHJcbiAgICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyhvdXRWYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEJyZWFrIGRhdGEgaW50byBpdHMgY29tcG9uZW50c1xyXG4gICAgYnJlYWtQYXJhbXMgPSBuZXcgRGF0ZUJyZWFrUGFyYW1zKHllYXIsIG1vbnRoLCBkYXksIGRveSwgZG93KTtcclxuICAgIHRoaXMuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZGF0ZSwgaWdub3JlX2R0X2ZtdCwgY29tcElkeCk7XHJcbiAgICBpZiAocGljLmlzSGVicmV3KCkpIHtcclxuICAgICAgbGV0IHJlZmhkYXk6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW08bnVtYmVyPihoZGF5KTtcclxuICAgICAgbGV0IHJlZmhtb250aDogUmVmUGFyYW08bnVtYmVyPiA9IG5ldyBSZWZQYXJhbTxudW1iZXI+KGhtb250aCk7XHJcbiAgICAgIGxldCByZWZoeWVhcjogUmVmUGFyYW08bnVtYmVyPiA9IG5ldyBSZWZQYXJhbTxudW1iZXI+KGh5ZWFyKTtcclxuICAgICAgbGVhcCA9IEhlYnJld0RhdGUuZGF0ZWhlYl80X2QoZGF0ZSwgcmVmaGRheSwgcmVmaG1vbnRoLCByZWZoeWVhcik7XHJcblxyXG4gICAgICBoZGF5ID0gcmVmaGRheS52YWx1ZTtcclxuICAgICAgaG1vbnRoID0gcmVmaG1vbnRoLnZhbHVlO1xyXG4gICAgICBoeWVhciA9IHJlZmh5ZWFyLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHllYXIgPSBicmVha1BhcmFtcy55ZWFyO1xyXG4gICAgbW9udGggPSBicmVha1BhcmFtcy5tb250aDtcclxuICAgIGRheSA9IGJyZWFrUGFyYW1zLmRheTtcclxuICAgIGRveSA9IGJyZWFrUGFyYW1zLmRveTtcclxuICAgIGRvdyA9IGJyZWFrUGFyYW1zLmRvdztcclxuICAgIGJyZWFrUGFyYW1zID0gbnVsbDtcclxuICAgIHdoaWxlIChsZW4gPiAwKSB7XHJcbiAgICAgIGxldCByZWZPdXRMZW46IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW08bnVtYmVyPihvdXRfbGVuKTtcclxuICAgICAgc3dpdGNoIChvdXRWYWxbb3V0SWR4XS5jaGFyQ29kZUF0KDApKSB7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1lZOlxyXG4gICAgICAgICAgaWYgKHBpYy56ZXJvRmlsbCgpICYmIGRhdGUgPT09IDAgJiYgZGF0ZV9waWNfWl9lZHQpXHJcbiAgICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQob3V0VmFsLCBvdXRJZHgsIHBpYy5nZXRaZXJvUGFkKCksIDIpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmludF8yX2Eob3V0VmFsLCBvdXRJZHgsIDIsIHllYXIsICcwJyk7XHJcbiAgICAgICAgICBvdXRJZHggKz0gMjtcclxuICAgICAgICAgIGxlbiAtPSAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0hZWVlZWTpcclxuICAgICAgICAgIGkgPSBIZWJyZXdEYXRlLmRhdGVoZWJfMl9zdHIob3V0VmFsLCBvdXRJZHgsIGxlbiwgcmVmT3V0TGVuLCA1LCBoeWVhciwgcGljLmlzVHJpbWVkKCksIHRydWUpO1xyXG4gICAgICAgICAgb3V0X2xlbiA9IHJlZk91dExlbi52YWx1ZTtcclxuICAgICAgICAgIG91dElkeCArPSBpO1xyXG4gICAgICAgICAgbGVuIC09IGk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSEw6XHJcbiAgICAgICAgICBpID0gSGVicmV3RGF0ZS5kYXRlaGViX2lfMl9oKChoeWVhciAvIDEwMDApICUgMTAsIG91dFZhbCwgb3V0SWR4LCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgICAgb3V0SWR4Kys7XHJcbiAgICAgICAgICBsZW4tLTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19IREQ6XHJcbiAgICAgICAgICBpID0gSGVicmV3RGF0ZS5kYXRlaGViXzJfc3RyKG91dFZhbCwgb3V0SWR4LCBsZW4sIHJlZk91dExlbiwgMiwgaGRheSwgcGljLmlzVHJpbWVkKCksIGZhbHNlKTtcclxuICAgICAgICAgIG91dF9sZW4gPSByZWZPdXRMZW4udmFsdWU7XHJcbiAgICAgICAgICBvdXRJZHggKz0gaTtcclxuICAgICAgICAgIGxlbiAtPSBpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1lZWVk6XHJcbiAgICAgICAgICBpZiAocGljLnplcm9GaWxsKCkgJiYgZGF0ZSA9PT0gMCAmJiBkYXRlX3BpY19aX2VkdClcclxuICAgICAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChvdXRWYWwsIG91dElkeCwgcGljLmdldFplcm9QYWQoKSwgNCk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaW50XzJfYShvdXRWYWwsIG91dElkeCwgNCwgeWVhciwgJzAnKTtcclxuICAgICAgICAgIG91dElkeCArPSA0O1xyXG4gICAgICAgICAgbGVuIC09IDQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTU1EOlxyXG4gICAgICAgICAgaWYgKHBpYy56ZXJvRmlsbCgpICYmIGRhdGUgPT09IDAgJiYgZGF0ZV9waWNfWl9lZHQpXHJcbiAgICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQob3V0VmFsLCBvdXRJZHgsIHBpYy5nZXRaZXJvUGFkKCksIDIpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmludF8yX2Eob3V0VmFsLCBvdXRJZHgsIDIsIG1vbnRoLCAnMCcpO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IDI7XHJcbiAgICAgICAgICBsZW4gLT0gMjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19NTU06XHJcbiAgICAgICAgICBpZiAocGljLmlzSGVicmV3KCkpIHtcclxuICAgICAgICAgICAgaWYgKGxlYXAgJiYgaG1vbnRoID09PSA2KVxyXG4gICAgICAgICAgICAgIGhtb250aCA9IDE0O1xyXG4gICAgICAgICAgICBsZXQgbW9udGhOYW1lczogc3RyaW5nW10gPSBIZWJyZXdEYXRlLkdldExvY2FsTW9udGhzKCk7XHJcbiAgICAgICAgICAgIHAgPSBOU3RyaW5nLlRvQ2hhckFycmF5KG1vbnRoTmFtZXNbaG1vbnRoXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IG1vbnRoU3RyOiBzdHJpbmcgPSBFdmVudHMuR2V0TWVzc2FnZVN0cmluZyhNc2dJbnRlcmZhY2UuTU9OVEhTX1BUUik7XHJcbiAgICAgICAgICAgIGxldCBtb250aE5hbWVzOiBzdHJpbmdbXSA9IERhdGVVdGlsLmdldExvY2FsTW9udGhzKG1vbnRoU3RyKTtcclxuICAgICAgICAgICAgcCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkobW9udGhOYW1lc1ttb250aF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGF0ZU5hbWVQYXJhbXMgPSBuZXcgRGF0ZU5hbWVQYXJhbXMob3V0VmFsLCBvdXRJZHgsIGxlbik7XHJcbiAgICAgICAgICBvdXRfbGVuIC09IHRoaXMuZGF0ZV9pXzJfbm0oZGF0ZU5hbWVQYXJhbXMsIHAsIHBpYy5pc1RyaW1lZCgpKTtcclxuICAgICAgICAgIG91dElkeCA9IGRhdGVOYW1lUGFyYW1zLm91dElkeDtcclxuICAgICAgICAgIGxlbiA9IGRhdGVOYW1lUGFyYW1zLmxlbjtcclxuICAgICAgICAgIGRhdGVOYW1lUGFyYW1zID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ERDpcclxuICAgICAgICAgIGxldCBpc1plcm86IGJvb2xlYW4gPSBwaWMuemVyb0ZpbGwoKTtcclxuICAgICAgICAgIGlmIChpc1plcm8gJiYgZGF0ZSA9PT0gMCAmJiBkYXRlX3BpY19aX2VkdClcclxuICAgICAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChvdXRWYWwsIG91dElkeCwgcGljLmdldFplcm9QYWQoKSwgMik7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaW50XzJfYShvdXRWYWwsIG91dElkeCwgMiwgZGF5LCAnMCcpO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IDI7XHJcbiAgICAgICAgICBsZW4gLT0gMjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19EREQ6XHJcbiAgICAgICAgICBpZiAocGljLnplcm9GaWxsKCkgJiYgZGF0ZSA9PT0gMCAmJiBkYXRlX3BpY19aX2VkdClcclxuICAgICAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChvdXRWYWwsIG91dElkeCwgcGljLmdldFplcm9QYWQoKSwgMyk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaW50XzJfYShvdXRWYWwsIG91dElkeCwgMywgZG95LCAnMCcpO1xyXG4gICAgICAgICAgbGVuIC09IDM7XHJcbiAgICAgICAgICBvdXRJZHggKz0gMztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19EREREOlxyXG4gICAgICAgICAgaSA9IHRoaXMuZGF0ZV8yX0REREQoZGF5LCBvdXRWYWwsIG91dElkeCwgbGVuLCBwaWMuaXNUcmltZWQoKSk7XHJcbiAgICAgICAgICBvdXRJZHggKz0gaTtcclxuICAgICAgICAgIG91dF9sZW4gKz0gaSAtIDQ7XHJcbiAgICAgICAgICBsZW4gLT0gNDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19XOlxyXG4gICAgICAgICAgaWYgKHBpYy56ZXJvRmlsbCgpICYmIGRhdGUgPT09IDAgJiYgZGF0ZV9waWNfWl9lZHQpXHJcbiAgICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQob3V0VmFsLCBvdXRJZHgsIHBpYy5nZXRaZXJvUGFkKCksIDEpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmludF8yX2Eob3V0VmFsLCBvdXRJZHgsIDEsIGRvdywgJzAnKTtcclxuICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgb3V0SWR4Kys7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfV1dXOlxyXG4gICAgICAgICAgaWYgKHBpYy5pc0hlYnJldygpKSB7XHJcbiAgICAgICAgICAgIGxldCBkb3dzTmFtZXM6IHN0cmluZ1tdID0gSGVicmV3RGF0ZS5HZXRMb2NhbERvd3MoKTtcclxuICAgICAgICAgICAgcCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkoZG93c05hbWVzW2Rvd10pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBkYXlTdHI6IHN0cmluZyA9IEV2ZW50cy5HZXRNZXNzYWdlU3RyaW5nKE1zZ0ludGVyZmFjZS5EQVlTX1BUUik7XHJcbiAgICAgICAgICAgIGxldCBkYXlOYW1lczogc3RyaW5nW10gPSBEYXRlVXRpbC5nZXRMb2NhbERheXMoZGF5U3RyKTtcclxuICAgICAgICAgICAgcCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkoZGF5TmFtZXNbZG93XSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkYXRlTmFtZVBhcmFtcyA9IG5ldyBEYXRlTmFtZVBhcmFtcyhvdXRWYWwsIG91dElkeCwgbGVuKTtcclxuICAgICAgICAgIG91dF9sZW4gLT0gdGhpcy5kYXRlX2lfMl9ubShkYXRlTmFtZVBhcmFtcywgcCwgcGljLmlzVHJpbWVkKCkpO1xyXG4gICAgICAgICAgb3V0SWR4ID0gZGF0ZU5hbWVQYXJhbXMub3V0SWR4O1xyXG4gICAgICAgICAgbGVuID0gZGF0ZU5hbWVQYXJhbXMubGVuO1xyXG4gICAgICAgICAgZGF0ZU5hbWVQYXJhbXMgPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0JCOiAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICAgICAgICAvLyBKYXBhbmVzZSBkYXkgb2YgdGhlIHdlZWtcclxuICAgICAgICAgIHAgPSBOU3RyaW5nLlRvQ2hhckFycmF5KFV0aWxEYXRlSnBuLmdldFN0ckRvdyhkb3cpKTtcclxuICAgICAgICAgIHN0ck91dCA9IG51bGw7XHJcbiAgICAgICAgICBkYXRlTmFtZVBhcmFtcyA9IG5ldyBEYXRlTmFtZVBhcmFtcyhvdXRWYWwsIG91dElkeCwgbGVuKTtcclxuICAgICAgICAgIHN0ck91dCA9IHRoaXMuZGF0ZV9pXzJfbm1fYnl0ZW1vZGUoc3RyT3V0LCBkYXRlTmFtZVBhcmFtcywgTlN0cmluZy5Gcm9tQ2hhcnMocCksIG91dF9sZW4pO1xyXG4gICAgICAgICAgb3V0VmFsID0gbmV3IEFycmF5KHN0ck91dC5sZW5ndGgpO1xyXG4gICAgICAgICAgTlN0cmluZy5Db3B5VG8oc3RyT3V0LCAwLCBvdXRWYWwsIDAsIHN0ck91dC5sZW5ndGgpO1xyXG5cclxuICAgICAgICAgIG91dElkeCA9IGRhdGVOYW1lUGFyYW1zLm91dElkeDtcclxuICAgICAgICAgIGxlbiA9IGRhdGVOYW1lUGFyYW1zLmxlbjtcclxuICAgICAgICAgIHN0ck91dCA9IG51bGw7XHJcbiAgICAgICAgICBkYXRlTmFtZVBhcmFtcyA9IG51bGw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSlkxOlxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19KWTI6XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0pZNDpcclxuICAgICAgICAgIC8vIEphcGFuZXNlIHRoZSBuYW1lIG9mIGFuIGVyYVxyXG4gICAgICAgICAgbGV0IHN0ck51bTogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICAgIGlmIChvdXRWYWxbb3V0SWR4XS5jaGFyQ29kZUF0KDApID09PSBQSUNJbnRlcmZhY2UuUElDX0pZMSlcclxuICAgICAgICAgICAgc3RyTnVtID0gVXRpbERhdGVKcG4uZ2V0SW5zdGFuY2UoKS5kYXRlX2pwbl95cl8yX2EoeWVhciwgZG95LCBmYWxzZSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHN0ck51bSA9IFV0aWxEYXRlSnBuLmdldEluc3RhbmNlKCkuZGF0ZV9qcG5feXJfMl9hKHllYXIsIGRveSwgdHJ1ZSk7XHJcbiAgICAgICAgICBzdHJPdXQgPSBudWxsO1xyXG4gICAgICAgICAgZGF0ZU5hbWVQYXJhbXMgPSBuZXcgRGF0ZU5hbWVQYXJhbXMob3V0VmFsLCBvdXRJZHgsIGxlbik7XHJcbiAgICAgICAgICBzdHJPdXQgPSB0aGlzLmRhdGVfaV8yX25tX2J5dGVtb2RlKHN0ck91dCwgZGF0ZU5hbWVQYXJhbXMsIHN0ck51bSwgb3V0X2xlbik7XHJcbiAgICAgICAgICBvdXRWYWwgPSBudWxsO1xyXG4gICAgICAgICAgb3V0VmFsID0gbmV3IEFycmF5KHN0ck91dC5sZW5ndGgpO1xyXG4gICAgICAgICAgTlN0cmluZy5Db3B5VG8oc3RyT3V0LCAwLCBvdXRWYWwsIDAsIHN0ck91dC5sZW5ndGgpO1xyXG4gICAgICAgICAgb3V0SWR4ID0gZGF0ZU5hbWVQYXJhbXMub3V0SWR4O1xyXG4gICAgICAgICAgbGVuID0gZGF0ZU5hbWVQYXJhbXMubGVuO1xyXG4gICAgICAgICAgc3RyT3V0ID0gbnVsbDtcclxuICAgICAgICAgIGRhdGVOYW1lUGFyYW1zID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ZSjpcclxuICAgICAgICAgIGlmIChwaWMuemVyb0ZpbGwoKSAmJiBkYXRlID09PSAwICYmIGRhdGVfcGljX1pfZWR0KVxyXG4gICAgICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KG91dFZhbCwgb3V0SWR4LCBwaWMuZ2V0WmVyb1BhZCgpLCAyKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCAyLCBVdGlsRGF0ZUpwbi5nZXRJbnN0YW5jZSgpLmRhdGVfanBuX3llYXJfb2ZzKHllYXIsIGRveSksICcwJyk7XHJcbiAgICAgICAgICBvdXRJZHggKz0gMjtcclxuICAgICAgICAgIGxlbiAtPSAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIG91dElkeCsrO1xyXG4gICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG91dF9sZW4gPCBvdXRWYWwubGVuZ3RoKVxyXG4gICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KG91dFZhbCwgb3V0X2xlbiwgJyAnLCBvdXRWYWwubGVuZ3RoIC0gb3V0X2xlbik7XHJcblxyXG4gICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKG91dFZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnJlYWsgYSBkYXRlIGludG8gWWVhciwgTW9udGgsIERheSBpbiBtb250aCwgRGF5IGluIHllYXIgYW5kIERheSBpbiB3ZWVrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBkYXRlX2JyZWFrX2RhdGVtb2RlKGJyZWFrUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXMsIGRhdGU6IG51bWJlciwgaWdub3JlX2R0X2ZtdDogYm9vbGVhbiwgY29tcElkeDogbnVtYmVyKTogdm9pZCB7XHJcblxyXG4gICAgbGV0IHllYXI6IG51bWJlciA9IGJyZWFrUGFyYW1zLnllYXI7XHJcbiAgICBsZXQgbW9udGg6IG51bWJlciA9IGJyZWFrUGFyYW1zLm1vbnRoO1xyXG4gICAgbGV0IGRheTogbnVtYmVyID0gYnJlYWtQYXJhbXMuZGF5O1xyXG4gICAgbGV0IGRveTogbnVtYmVyID0gYnJlYWtQYXJhbXMuZG95O1xyXG4gICAgbGV0IGRvdzogbnVtYmVyID0gYnJlYWtQYXJhbXMuZG93O1xyXG5cclxuICAgIGlmIChkYXRlIDw9IDApIHtcclxuICAgICAgYnJlYWtQYXJhbXMuZGF5ID0gMDtcclxuICAgICAgYnJlYWtQYXJhbXMuZG95ID0gMDtcclxuICAgICAgYnJlYWtQYXJhbXMuZG93ID0gMDtcclxuICAgICAgYnJlYWtQYXJhbXMueWVhciA9IDA7XHJcbiAgICAgIGJyZWFrUGFyYW1zLm1vbnRoID0gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBkb3cgPSBkYXRlICUgNyArIDE7XHJcbiAgICAgIGRhdGUgPSBkYXRlIC0gMTtcclxuICAgICAgbGV0IGNlbnQ0OiBudW1iZXIgPSBNYXRoLmZsb29yKGRhdGUgLyBQSUNJbnRlcmZhY2UuREFZU0lORk9VUkNFTlQpO1xyXG4gICAgICBkYXRlID0gZGF0ZSAtIGNlbnQ0ICogUElDSW50ZXJmYWNlLkRBWVNJTkZPVVJDRU5UO1xyXG4gICAgICBsZXQgY2VudDogbnVtYmVyID0gTWF0aC5mbG9vcihkYXRlIC8gUElDSW50ZXJmYWNlLkRBWVNJTkNFTlRVUlkpO1xyXG4gICAgICBpZiAoY2VudCA+IDMpIHtcclxuICAgICAgICBjZW50ID0gMztcclxuICAgICAgfVxyXG4gICAgICBkYXRlID0gZGF0ZSAtIGNlbnQgKiBQSUNJbnRlcmZhY2UuREFZU0lOQ0VOVFVSWTtcclxuICAgICAgbGV0IHllYXI0OiBudW1iZXIgPSBNYXRoLmZsb29yKGRhdGUgLyBQSUNJbnRlcmZhY2UuREFZU0lORk9VUllFQVIpO1xyXG4gICAgICBkYXRlID0gZGF0ZSAtIHllYXI0ICogUElDSW50ZXJmYWNlLkRBWVNJTkZPVVJZRUFSO1xyXG4gICAgICB5ZWFyID0gTWF0aC5mbG9vcihkYXRlIC8gUElDSW50ZXJmYWNlLkRBWVNJTllFQVIpO1xyXG4gICAgICBpZiAoeWVhciA+IDMpIHtcclxuICAgICAgICB5ZWFyID0gMztcclxuICAgICAgfVxyXG4gICAgICBkYXRlID0gZGF0ZSAtIHllYXIgKiBQSUNJbnRlcmZhY2UuREFZU0lOWUVBUjtcclxuICAgICAgeWVhciA9IGNlbnQ0ICogNDAwICsgY2VudCAqIDEwMCArIHllYXI0ICogNCArIHllYXIgKyAxO1xyXG4gICAgICBsZXQgbGVhcHllYXI6IG51bWJlciA9IDA7XHJcbiAgICAgIGlmICh5ZWFyICUgNCA9PT0gMCkge1xyXG4gICAgICAgIGlmICh5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDApIHtcclxuICAgICAgICAgIGxlYXB5ZWFyID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaWdub3JlX2R0X2ZtdCAmJiB0aGlzLl9lbnZpcm9ubWVudC5HZXREYXRlTW9kZShjb21wSWR4KSA9PT0gJ0InKSB7XHJcbiAgICAgICAgeWVhciA9IHllYXIgKyBQSUNJbnRlcmZhY2UuREFURV9CVURESElTVF9HQVA7XHJcbiAgICAgIH1cclxuICAgICAgbW9udGggPSAoTWF0aC5mbG9vcihkYXRlIC8gUElDSW50ZXJmYWNlLkRBWVNJTk1PTlRIKSArIDEpO1xyXG4gICAgICBkYXkgPSBQSUNJbnRlcmZhY2UuZGF0ZV9kYXlfdGFiW21vbnRoXTtcclxuICAgICAgaWYgKGxlYXB5ZWFyID4gMCkge1xyXG4gICAgICAgIGlmIChtb250aCA+IDEpIHtcclxuICAgICAgICAgIGRheSA9IGRheSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZGF0ZSA+PSBkYXkpIHtcclxuICAgICAgICBtb250aCA9IG1vbnRoICsgMTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkYXkgPSBQSUNJbnRlcmZhY2UuZGF0ZV9kYXlfdGFiW21vbnRoIC0gMV07XHJcbiAgICAgICAgaWYgKGxlYXB5ZWFyID4gMCkge1xyXG4gICAgICAgICAgaWYgKG1vbnRoID4gMikge1xyXG4gICAgICAgICAgICBkYXkgPSBkYXkgKyAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBkYXkgPSBkYXRlIC0gZGF5ICsgMTtcclxuICAgICAgZG95ID0gZGF0ZSArIDE7XHJcbiAgICAgIGJyZWFrUGFyYW1zLnllYXIgPSB5ZWFyO1xyXG4gICAgICBicmVha1BhcmFtcy5tb250aCA9IG1vbnRoO1xyXG4gICAgICBicmVha1BhcmFtcy5kYXkgPSBkYXk7XHJcbiAgICAgIGJyZWFrUGFyYW1zLmRveSA9IGRveTtcclxuICAgICAgYnJlYWtQYXJhbXMuZG93ID0gZG93O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBhbHBoYSBzdHJpbmcgZnJvbSBpbnQgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyXCI+ICAgICB0aGUgb3V0cHV0IHN0cmluZyAoYXMgYW4gY2hhciBhcnJheSlcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clBvc1wiPiAgc3RhcnRpbmcgcG9zaXRpb25cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxlblwiPiAgICAgc3RyaW5nIGxlbmd0aFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiblwiPiAgICAgICB0aGUgbnVtYmVyIHRvIGNvbnZlcnRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxlYWRcIj4gICAgbGVhZGluZyBjaGFyYWN0ZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSByZXN1bHQgc3RyaW5nIGxlbmd0aFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBpbnRfMl9hKHN0cjogc3RyaW5nW10sIHN0clBvczogbnVtYmVyLCBsZW46IG51bWJlciwgbjogbnVtYmVyLCBsZWFkOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgbGV0IG5lZzogYm9vbGVhbiA9IG4gPCAwO1xyXG5cclxuICAgIGlmIChsZW4gPD0gMClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIG4gPSBNYXRoLmFicyhuKTtcclxuICAgIGxldCBwb3M6IG51bWJlciA9IGxlbjtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgIHN0cltzdHJQb3MgKyAocG9zID0gcG9zIC0gMSldID0gU3RyaW5nLmZyb21DaGFyQ29kZSg0OCArIG4gJSAxMCk7XHJcbiAgICAgIG4gPSBNYXRoLmZsb29yKG4gLyAxMCk7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAocG9zID4gMCAmJiBuID4gMCk7XHJcblxyXG4gICAgaWYgKG5lZyAmJiBwb3MgPiAwKSB7XHJcbiAgICAgIHN0cltzdHJQb3MgKyAocG9zID0gcG9zIC0gMSldID0gJy0nLyonLScqLztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmxpYl9hX2ZpbGwoc3RyLCBzdHJQb3MsIGxlbiwgcG9zLCBsZWFkLmNoYXJDb2RlQXQoMCkpO1xyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGaWxsIHRoZSBjaGFyIGFycmF5IGZvciB0aGUgY29udmVydGluZyBvZiBpbnQtPnN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj4gICAgIHRoZSBvdXRwdXQgc3RyaW5nIChhcyBhbiBjaGFyIGFycmF5KVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyUG9zXCI+ICBzdGFydGluZyBwb3NpdGlvblxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibGVuXCI+ICAgICBzdHJpbmcgbGVuZ3RoXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsZWFkXCI+ICAgIGxlYWRpbmcgY2hhcmFjdGVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcmVzdWx0IHN0cmluZyBsZW5ndGhcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgbGliX2FfZmlsbChzdHI6IHN0cmluZ1tdLCBzdHJQb3M6IG51bWJlciwgbGVuOiBudW1iZXIsIHBvczogbnVtYmVyLCBsZWFkOiBudW1iZXIpOiBudW1iZXIge1xyXG5cclxuICAgIGlmIChsZWFkID09PSAwKSB7XHJcbiAgICAgIGxlbiA9IGxlbiAtIHBvcztcclxuXHJcbiAgICAgIGlmIChsZW4gPiAwICYmIHBvcyA+IDApIHtcclxuICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtY3B5KHN0ciwgc3RyUG9zLCBzdHIsIHBvcywgbGVuKTtcclxuICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KHN0ciwgc3RyUG9zICsgbGVuLCAnICcsIC8qJyAnKi9wb3MpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHBvcyA+IDApIHtcclxuICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KHN0ciwgc3RyUG9zLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGxlYWQpLCBwb3MpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVuO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbnZlcnQgaW5kZXggdG8gTmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRlTmFtZVBhcmFtc1wiPiAgb3V0cHV0IHN0aW5nIGRldGFpbHNcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5tXCI+ICAgICAgICAgICAgICBuYW1lXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0cmltXCI+ICAgICAgICAgICAgb3V0cHV0IHN0cmluZyBzaG91bGQgYmUgdHJpbWVkXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmdcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZGF0ZV9pXzJfbm0oZGF0ZU5hbWVQYXJhbXM6IERhdGVOYW1lUGFyYW1zLCBubTogc3RyaW5nW10sIHRyaW06IGJvb2xlYW4pOiBudW1iZXIge1xyXG5cclxuICAgIGxldCBuOiBudW1iZXIgPSB0aGlzLmRhdGVfbXNrX2NudChkYXRlTmFtZVBhcmFtcy5vdXRWYWwsIGRhdGVOYW1lUGFyYW1zLm91dElkeCwgPG51bWJlcj5kYXRlTmFtZVBhcmFtcy5sZW4pO1xyXG4gICAgbGV0IGw6IG51bWJlcjtcclxuICAgIGlmICh0cmltKSB7XHJcbiAgICAgIGwgPSBNZW1vcnlVdGlsLm1lbV90cmltKG5tLCAwLCBuKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsID0gbjtcclxuICAgIH1cclxuICAgIGwgPSBNYXRoLm1pbihsLCBkYXRlTmFtZVBhcmFtcy5sZW4pO1xyXG4gICAgTWVtb3J5VXRpbC5jaGFyX21lbWNweShkYXRlTmFtZVBhcmFtcy5vdXRWYWwsIGRhdGVOYW1lUGFyYW1zLm91dElkeCwgbm0sIDAsIGwpO1xyXG4gICAgZGF0ZU5hbWVQYXJhbXMub3V0SWR4ID0gZGF0ZU5hbWVQYXJhbXMub3V0SWR4ICsgbDtcclxuICAgIGRhdGVOYW1lUGFyYW1zLmxlbiA9IGRhdGVOYW1lUGFyYW1zLmxlbiAtIG47XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIFRyaW1lZCA/IEp1bXAgb3RoZXIgdHJpbWVkIG1hc2sgOiBub3RoaW5nXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIG4gPSBuIC0gbDtcclxuXHJcbiAgICBpZiAobiA+IDApIHtcclxuICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbWNweShkYXRlTmFtZVBhcmFtcy5vdXRWYWwsIGRhdGVOYW1lUGFyYW1zLm91dElkeCwgZGF0ZU5hbWVQYXJhbXMub3V0VmFsLCBkYXRlTmFtZVBhcmFtcy5vdXRJZHggKyBuLCBkYXRlTmFtZVBhcmFtcy5sZW4pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDxudW1iZXI+bjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgLy8vICAgQ29udmVydCBpbmRleCB0byBOYW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0ck91dFwiPiAgICAgICAgICBvdXRwdXQgc3RpbmcgKG9yaWdpbmFsKVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0ZU5hbWVQYXJhbXNcIj4gIG91dHB1dCBzdGluZyBkZXRhaWxzXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJObVwiPiAgICAgICAgICAgbmFtZSB3aGljaCB3aWxsIGJlIGVtYmVkZGVkIGluIG91dHB1dCBzdHJpbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImludE91dExlblwiPiAgICAgICB0aGUgcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgb3V0cHV0IHN0cmluZ1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gICAgICAgICAgICAgICAgIG91dHB1dCBzdGluZyAocHJvY2Vzc2VkKVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBkYXRlX2lfMl9ubV9ieXRlbW9kZShzdHJPdXQ6IHN0cmluZywgZGF0ZU5hbWVQYXJhbXM6IERhdGVOYW1lUGFyYW1zLCBzdHJObTogc3RyaW5nLCBpbnRPdXRMZW46IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgaW50TXNrQ250OiBudW1iZXIgPSB0aGlzLmRhdGVfbXNrX2NudChkYXRlTmFtZVBhcmFtcy5vdXRWYWwsIGRhdGVOYW1lUGFyYW1zLm91dElkeCwgPG51bWJlcj5kYXRlTmFtZVBhcmFtcy5sZW4pO1xyXG4gICAgbGV0IHN0cldvcms6IHN0cmluZyA9IE5TdHJpbmcuRnJvbUNoYXJzKGRhdGVOYW1lUGFyYW1zLm91dFZhbCk7XHJcblxyXG4gICAgc3RyV29yayA9IHN0cldvcmsuc3Vic3RyKDAsIGRhdGVOYW1lUGFyYW1zLm91dElkeCk7XHJcblxyXG4gICAgbGV0IGludE9mczogbnVtYmVyID0gVXRpbFN0ckJ5dGVNb2RlLmxlbkIoc3RyV29yayk7XHJcbiAgICBzdHJObSA9IFV0aWxTdHJCeXRlTW9kZS5sZWZ0QihzdHJObSwgaW50TXNrQ250KTtcclxuICAgIHN0ck91dCA9IFV0aWxTdHJCeXRlTW9kZS5yZXBCKE5TdHJpbmcuRnJvbUNoYXJzKGRhdGVOYW1lUGFyYW1zLm91dFZhbCksIHN0ck5tLCBpbnRPZnMgKyAxLCBpbnRNc2tDbnQpO1xyXG5cclxuICAgIGRhdGVOYW1lUGFyYW1zLm91dElkeCA9IGRhdGVOYW1lUGFyYW1zLm91dElkeCArIHN0ck5tLmxlbmd0aDtcclxuICAgIGRhdGVOYW1lUGFyYW1zLmxlbiA9IGRhdGVOYW1lUGFyYW1zLmxlbiAtIGludE1za0NudDtcclxuICAgIGludE91dExlbiA9IGludE91dExlbiAtIGludE1za0NudDtcclxuICAgIHJldHVybiBzdHJPdXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgUmV0dXJuIE4gb2YgY29uc2VjdXRpdmUgTWFzayBjaGFyYWN0ZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1za1wiPiAgICAgdGhlIG1hc2sgdG8gY2hlY2tcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1za1Bvc1wiPiAgaW5kZXggb2YgZmlyc3QgY2hhciB0byBjaGVja1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibGVuXCI+ICAgICBsZW5ndGggb2YgdGhlIG1hc2tcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IG51bWJlciBvZiBjb25zZWN1dGl2ZSBNYXNrIGNoYXJhY3RlcnNcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZGF0ZV9tc2tfY250KG1zazogc3RyaW5nW10sIG1za1BvczogbnVtYmVyLCBsZW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgYzogc3RyaW5nID0gbXNrW21za1BvcysrXTtcclxuICAgIGxldCBpOiBudW1iZXIgPSAxO1xyXG4gICAgd2hpbGUgKDxudW1iZXI+aSA8IGxlbikge1xyXG4gICAgICBpZiAobXNrW21za1Bvc10gIT09IGMpIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBtc2tQb3MgPSBtc2tQb3MgKyAxO1xyXG4gICAgICBpID0gaSArIDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb21wdXRlIERheSBuYW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGRhdGVfMl9EREREKGRheTogbnVtYmVyLCBvdXRWYWw6IHN0cmluZ1tdLCBvdXRJZHg6IG51bWJlciwgbGVuOiBudW1iZXIsIHRyaW06IGJvb2xlYW4pOiBudW1iZXIge1xyXG5cclxuXHJcbiAgICBsZXQgcmV0OiBudW1iZXIgPSA0O1xyXG4gICAgbGV0IGV4dDogc3RyaW5nW107XHJcblxyXG4gICAgaWYgKGRheSA+IDkpIHtcclxuICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCAyLCBkYXksICg8bnVtYmVyPjApLnRvU3RyaW5nKCkpO1xyXG4gICAgICBvdXRJZHggKz0gMjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodHJpbSkge1xyXG4gICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1jcHkob3V0VmFsLCBvdXRJZHgsIG91dFZhbCwgb3V0SWR4ICsgMSwgbGVuIC0gMSk7XHJcbiAgICAgICAgLyoxNy1NYXktOTAqL1xyXG4gICAgICAgIHJldC0tO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vICoob3V0KyspID0gJyAnOyAvLyBPcmlnaW5hbCBMaW5lXHJcbiAgICAgICAgb3V0VmFsW291dElkeCsrXSA9ICcgJztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmludF8yX2Eob3V0VmFsLCBvdXRJZHgsIDEsIGRheSwgKDxudW1iZXI+MCkudG9TdHJpbmcoKSk7XHJcbiAgICAgIG91dElkeCsrO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChkYXkpIHtcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICBjYXNlIDIxOlxyXG4gICAgICBjYXNlIDMxOlxyXG4gICAgICAgIGV4dCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkoXCJzdFwiKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgY2FzZSAyMjpcclxuICAgICAgICBleHQgPSBOU3RyaW5nLlRvQ2hhckFycmF5KFwibmRcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgIGNhc2UgMjM6XHJcbiAgICAgICAgZXh0ID0gTlN0cmluZy5Ub0NoYXJBcnJheShcInJkXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBleHQgPSBOU3RyaW5nLlRvQ2hhckFycmF5KFwidGhcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICBvdXRWYWxbb3V0SWR4KytdID0gZXh0WzBdO1xyXG4gICAgb3V0VmFsW291dElkeF0gPSBleHRbMV07XHJcblxyXG4gICAgcmV0dXJuIChyZXQpO1xyXG5cclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYSBkaXNwbGF5IHN0cmluZyBmb3IgYW4gdGltZSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0YVN0clwiPiAgIFRoZSBzb3VyY2UgZGF0YTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj4gICAgVGhlIHBpY3R1cmUgdG8gdXNlIGZvciB0aGUgdmFsdWUgdG8gZGlzcGxheTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZDwvcmV0dXJucz5cclxuICBmcm9tTWdUaW1lVG9OYXRpdmVUaW1lKGRhdGFTdHI6IHN0cmluZywgcGljOiBQSUMpOiBEYXRlIHtcclxuICAgIGxldCB0aW1lOiBudW1iZXIgPSBuZXcgTlVNX1RZUEUoZGF0YVN0cikuTlVNXzJfVUxPTkcoKTtcclxuXHJcblxyXG4gICAgICBsZXQgYnJlYWtQYXJhbXM6IFRpbWVCcmVha1BhcmFtcyA9IG5ldyBUaW1lQnJlYWtQYXJhbXMoKTtcclxuXHJcbiAgICAgIERpc3BsYXlDb252ZXJ0b3IudGltZV9icmVhayhicmVha1BhcmFtcywgdGltZSk7XHJcblxyXG4gICAgICBsZXQgbmF0aXZlRHQ6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgbmF0aXZlRHQuc2V0SG91cnMoYnJlYWtQYXJhbXMuaG91cik7XHJcbiAgICAgIG5hdGl2ZUR0LnNldE1pbnV0ZXMoYnJlYWtQYXJhbXMubWludXRlKTtcclxuICAgICAgbmF0aXZlRHQuc2V0U2Vjb25kcyhicmVha1BhcmFtcy5zZWNvbmQpO1xyXG4gICAgICByZXR1cm4gbmF0aXZlRHQ7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBIYW5kbGUgdGltZSB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJBc2NpaVN0clwiPiAgICAgICAgVGhlIG1hc2sgdG8gYmUgdXNlZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJBc2NpaUxcIj4gICAgICAgICAgTWFzayBsZW5ndGg8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICAgICAgICAgICAgIFRoZSBwaWN1cmUgaW5mb3JtYXRpb248L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGltZV9waWNfWl9lZHRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic2Vjb25kc1wiPi8gbWlsbGlTZWNvbmRzIGZsYWc8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgdGltZV8yX2FfcGljKEFzY2lpU3RyOiBzdHJpbmcsIEFzY2lpTDogbnVtYmVyLCB0aW1lOiBudW1iZXIsIHBpYzogUElDLCB0aW1lX3BpY19aX2VkdDogYm9vbGVhbiwgbWlsbGlTZWNvbmRzOiBib29sZWFuKTogc3RyaW5nIHtcclxuXHJcbiAgICAvLyBPcmlnaW5hbCB2YXJzXHJcbiAgICBsZXQgaG91cjogbnVtYmVyID0gMDtcclxuICAgIGxldCBtaW51dGU6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgc2Vjb25kOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IG1pbGxpc2VjOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGxldCBBc2NpaTogc3RyaW5nW10gPSBOU3RyaW5nLlRvQ2hhckFycmF5KEFzY2lpU3RyKTtcclxuICAgIGxldCBicmVha1BhcmFtczogVGltZUJyZWFrUGFyYW1zID0gbmV3IFRpbWVCcmVha1BhcmFtcyhob3VyLCBtaW51dGUsIHNlY29uZCk7XHJcbiAgICBsZXQgdGltZVNlYzogbnVtYmVyO1xyXG4gICAgaWYgKG1pbGxpU2Vjb25kcykge1xyXG4gICAgICB0aW1lU2VjID0gTWF0aC5mbG9vcih0aW1lIC8gMTAwMCk7XHJcbiAgICAgIG1pbGxpc2VjID0gdGltZSAtIHRpbWVTZWMgKiAxMDAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRpbWVTZWMgPSB0aW1lO1xyXG4gICAgfVxyXG5cclxuICAgIERpc3BsYXlDb252ZXJ0b3IudGltZV9icmVhayhicmVha1BhcmFtcywgdGltZVNlYyk7XHJcbiAgICBob3VyID0gYnJlYWtQYXJhbXMuaG91cjtcclxuICAgIG1pbnV0ZSA9IGJyZWFrUGFyYW1zLm1pbnV0ZTtcclxuICAgIHNlY29uZCA9IGJyZWFrUGFyYW1zLnNlY29uZDtcclxuXHJcbiAgICAvLyBJZiBhc2NpaSByZXByZXNlbnRhdGlvbiBvdmVyZmxvd3Mgb3V0cHV0IGJ1ZmZlclxyXG4gICAgLy8gZmlsbCB3aXRoICcqJyBhbmQgYmFpbCBvdXRcclxuXHJcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmc7XHJcbiAgICBpZiAocGljLmdldE1hc2tTaXplKCkgPiBBc2NpaUwpIHtcclxuICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChBc2NpaSwgMCwgJyonLCAvKicqJyovQXNjaWlMKTtcclxuICAgICAgcmVzdWx0ID0gTlN0cmluZy5Gcm9tQ2hhcnMoQXNjaWkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChwaWMuemVyb0ZpbGwoKSkge1xyXG4gICAgICAgIGlmICh0aW1lU2VjID09PSAwICYmICghbWlsbGlTZWNvbmRzIHx8IG1pbGxpc2VjID09PSAwKSkge1xyXG4gICAgICAgICAgaWYgKHRpbWVfcGljX1pfZWR0KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGludHg6IG51bWJlciA9IDA7IGludHggPCBwaWMuZ2V0TWFza1NpemUoKTsgaW50eCA9IGludHggKyAxKSB7XHJcbiAgICAgICAgICAgICAgaWYgKEFzY2lpW2ludHhdIDw9ICdcXHUwMDFmJykge1xyXG4gICAgICAgICAgICAgICAgQXNjaWlbaW50eF0gPSBwaWMuZ2V0WmVyb1BhZCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXN1bHQgPSBOU3RyaW5nLkZyb21DaGFycyhBc2NpaSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KEFzY2lpLCAwLCBwaWMuZ2V0WmVyb1BhZCgpLCBwaWMuZ2V0TWFza1NpemUoKSk7XHJcbiAgICAgICAgICByZXN1bHQgPSBOU3RyaW5nLkZyb21DaGFycyhBc2NpaSk7XHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgSTogbnVtYmVyID0gMDtcclxuICAgICAgbGV0IGFtOiBudW1iZXIgPSAwO1xyXG4gICAgICBsZXQgbGVuOiBudW1iZXIgPSBwaWMuZ2V0TWFza1NpemUoKTtcclxuICAgICAgbGV0IEhvdXJJOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgICAgIHdoaWxlIChJIDwgbGVuKSB7XHJcbiAgICAgICAgc3dpdGNoIChBc2NpaVtJXS5jaGFyQ29kZUF0KDApKSB7XHJcbiAgICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX0hIKTpcclxuICAgICAgICAgICAgSG91ckkgPSBJO1xyXG4gICAgICAgICAgICBJICs9IDI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX01NVCk6XHJcbiAgICAgICAgICAgIHRoaXMuaW50XzJfYShBc2NpaSwgSSwgMiwgbWludXRlLCAnMCcpO1xyXG4gICAgICAgICAgICBJICs9IDI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfU1MpOlxyXG4gICAgICAgICAgICB0aGlzLmludF8yX2EoQXNjaWksIEksIDIsIHNlY29uZCwgJzAnKTtcclxuICAgICAgICAgICAgSSArPSAyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX01TKTpcclxuICAgICAgICAgICAgdGhpcy5pbnRfMl9hKEFzY2lpLCBJLCAzLCBtaWxsaXNlYywgJzAnKTtcclxuICAgICAgICAgICAgSSArPSAzO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX1BNKTpcclxuICAgICAgICAgICAgYW0gPSAxO1xyXG4gICAgICAgICAgICBsZXQgdG1wSG91cjogbnVtYmVyID0gaG91ciAlIDI0O1xyXG4gICAgICAgICAgICBpZiAodG1wSG91ciA8IDEyIHx8IHRtcEhvdXIgPT09IDApXHJcbiAgICAgICAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbWNweShBc2NpaSwgSSwgTlN0cmluZy5Ub0NoYXJBcnJheShcImFtXCIpLCAwLCAyKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1jcHkoQXNjaWksIEksIE5TdHJpbmcuVG9DaGFyQXJyYXkoXCJwbVwiKSwgMCwgMik7XHJcbiAgICAgICAgICAgIEkgKz0gMjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgSSsrO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKEhvdXJJID49IDApIHtcclxuICAgICAgICBpZiAoYW0gPiAwKSB7XHJcbiAgICAgICAgICBob3VyID0gaG91ciAlIDI0O1xyXG4gICAgICAgICAgaWYgKGhvdXIgPT09IDApIHtcclxuICAgICAgICAgICAgaG91ciA9IDEyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGhvdXIgPSBob3VyICUgMTI7XHJcbiAgICAgICAgICAgIGlmIChob3VyID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgaG91ciA9IDEyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW50XzJfYShBc2NpaSwgSG91ckksIDIsIGhvdXIsIChhbSAhPT0gMCAmJiBob3VyIDwgMTApID8gJyAnIDogLyonICcqLycwJy8qJzAnKi8pO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdCA9IE5TdHJpbmcuRnJvbUNoYXJzKEFzY2lpKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnJlYWsgdGltZSBpbnRvIGl0cyBjb21wb25lbnRzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzdGF0aWMgdGltZV9icmVhayhicmVha1BhcmFtczogVGltZUJyZWFrUGFyYW1zLCB0aW1lOiBudW1iZXIpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodGltZSA8PSAwKSB7XHJcbiAgICAgIGJyZWFrUGFyYW1zLnNlY29uZCA9IDA7XHJcbiAgICAgIGJyZWFrUGFyYW1zLm1pbnV0ZSA9IDA7XHJcbiAgICAgIGJyZWFrUGFyYW1zLmhvdXIgPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGJyZWFrUGFyYW1zLmhvdXIgPSBNYXRoLmZsb29yKHRpbWUgLyAzNjAwKTtcclxuICAgICAgdGltZSA9IHRpbWUgLSBicmVha1BhcmFtcy5ob3VyICogMzYwMDtcclxuICAgICAgYnJlYWtQYXJhbXMubWludXRlID0gTWF0aC5mbG9vcih0aW1lIC8gNjApO1xyXG4gICAgICBicmVha1BhcmFtcy5zZWNvbmQgPSB0aW1lIC0gYnJlYWtQYXJhbXMubWludXRlICogNjA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYSBkaXNwbGF5IHN0cmluZyBmb3IgYSBsb2dpY2FsIHZhbHVlIGFjY29yZGluZyB0byB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhU3RyXCI+ICAgXCIwXCIgZm9yIGZhbHNlIG9yIFwiMVwiIGZvciB0cnVlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBib29sZWFuXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGZyb21NZ0xvZ2ljYWxUb05hdGl2ZUxvZ2ljYWwoZGF0YVN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcblxyXG4gICAgbGV0IG5hdGl2ZVZhbDogYm9vbGVhbjtcclxuICAgIG5hdGl2ZVZhbCA9IChkYXRhU3RyLmNoYXJBdCgwKSA9PT0gJzEnKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIHJldHVybiBuYXRpdmVWYWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgbWcgc3RyaW5nIGZvciBhIGxvZ2ljYWwgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBib29sZWFuIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRpc3BWYWxcIj4gIGJvb2xlYW5cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHN0cmluZ1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBmcm9tTmF0aXZlTG9naWNhbFRvTWdMb2dpY2FsKGRpc3BWYWw6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG5cclxuICAgIGxldCBtZ1ZhbDogc3RyaW5nO1xyXG4gICAgbWdWYWwgPSAoZGlzcFZhbCA9PT0gdHJ1ZSkgPyBcIjFcIiA6IFwiMFwiO1xyXG5cclxuICAgIHJldHVybiBtZ1ZhbDtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgZGVmYXVsdCByYW5nZSBmb3IgbG9naWNhbCB2YWx1ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicm5nXCI+ICBjdXJyZW50IHJhbmdlPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBkZWZhdWx0IHJhbmdlIGlmIHRoZSBpbnB1dCByYW5nZSBpcyBlbXB0eTwvcmV0dXJucz5cclxuICBwcml2YXRlIHdpbl9ybmdfYm9vbChybmc6IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG4gICAgaWYgKHJuZyA9PT0gbnVsbCB8fCBybmcubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJuZyA9IFwiVHJ1ZSwgRmFsc2VcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBybmc7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAvLyBNZXRob2RzIGZvciBjb3ZlcnRpbmcgRElQTEFZIC0tLT4gSU5URVJOQUxcclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVHJhbnNsYXRlcyBhIHN0cmluZyBudW1iZXIgdG8gbWFnaWMgbnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRpc3BWYWx1ZVwiPiAgIEEgc3RyaW5nIG51bWJlcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj4gICAgICBUaGUgcGljdHVyZSB0byB1c2U8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIG1hZ2ljIG51bWJlcjwvcmV0dXJucz5cclxuICB0b051bShkaXNwVmFsdWU6IHN0cmluZywgcGljOiBQSUMsIGNvbXBJZHg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgbWdOdW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKGRpc3BWYWx1ZSwgcGljLCBjb21wSWR4KTtcclxuICAgIHJldHVybiBtZ051bS50b1hNTHJlY29yZCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBidWlsZHMgdGhlIGRhdGUgbWFnaWMgbnVtYmVyIGZyb20gdGhlIHN0cmluZyB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj4gICAgICAgICAgICB0aGUgZGF0ZSBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyX2xlblwiPiAgICAgICAgbGVuZ3RoIG9mIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj4gICAgICAgICAgICB0aGUgcGljdHVyZSBpbmZvPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1hc2tcIj4gICAgICAgICAgIHRoZSBtYXNrIG9mIHRoZSBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWdub3JlX2R0X2ZtdFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbWFnaWMgbnVtYmVyPC9yZXR1cm5zPlxyXG4gIGFfMl9kYXRlX3BpY19kYXRlbW9kZShzdHI6IHN0cmluZ1tdLCBzdHJfbGVuOiBudW1iZXIsIHBpYzogUElDLCBtYXNrOiBzdHJpbmdbXSwgY29tcElkeDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBwb3M6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgeWVhcl9pbl9waWM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBtb250aF9pbl9waWM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBkYXlfaW5fcGljOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgaW5wOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgYlllYXJJc1plcm86IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBlcmFfeWVhcjogbnVtYmVyID0gMDtcclxuICAgIGxldCBpbnRSZWY6IEludFJlZiA9IG5ldyBJbnRSZWYoMCk7XHJcbiAgICBsZXQgaW50UGljSWR4T2ZzOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IG1pbGxlbml1bTogbnVtYmVyID0gMDtcclxuICAgIGxldCBkYXRlUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXM7XHJcblxyXG4gICAgbGV0IGxlbjogbnVtYmVyID0gTWF0aC5taW4oc3RyLmxlbmd0aCwgcGljLmdldE1hc2tTaXplKCkpO1xyXG5cclxuICAgIGlmIChzdHIubGVuZ3RoIDwgbWFzay5sZW5ndGgpXHJcbiAgICAgIHN0ci5sZW5ndGggPSBtYXNrLmxlbmd0aDtcclxuXHJcbiAgICBsZXQgeWVhcjogbnVtYmVyID0gMDtcclxuICAgIGxldCBtb250aDogbnVtYmVyID0gMTtcclxuICAgIGxldCBkYXk6IG51bWJlciA9IDE7XHJcbiAgICBsZXQgZG95OiBudW1iZXIgPSAxO1xyXG4gICAgbGV0IHVzZWRveTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RyX2xlbjsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGlmIChzdHJbaV0gIT09ICcwJyAmJiBzdHJbaV0gIT09ICcgJykge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGkgPT09IHN0cl9sZW4pXHJcbiAgICAgIHJldHVybiAwO1xyXG5cclxuICAgIHdoaWxlIChwb3MgPCBzdHJfbGVuICYmIHBvcyArIGludFBpY0lkeE9mcyA8IGxlbikge1xyXG5cclxuICAgICAgc3dpdGNoIChtYXNrW3BvcyArIGludFBpY0lkeE9mc10uY2hhckNvZGVBdCgwKSkge1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ZWTpcclxuICAgICAgICAgIHllYXJfaW5fcGljID0gdHJ1ZTtcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICB5ZWFyID0gdGhpcy5kYXRlX2FfMl9pKHN0ciwgMiwgcG9zKTtcclxuICAgICAgICAgIHBvcyArPSAyO1xyXG4gICAgICAgICAgLy8gSGVuIDE2LzExLzk3IDogRml4ICM3Njg0NDJcclxuICAgICAgICAgIGlmICh5ZWFyID09PSAwKVxyXG4gICAgICAgICAgICBiWWVhcklzWmVybyA9IHRydWU7XHJcbiAgICAgICAgICBsZXQgY2VudHVyeV95ZWFyOiBudW1iZXIgPSB0aGlzLl9lbnZpcm9ubWVudC5HZXRDZW50dXJ5KGNvbXBJZHgpICUgMTAwOyAvLyBERUZfY2VudHVyeVxyXG4gICAgICAgICAgaWYgKHllYXIgPCBjZW50dXJ5X3llYXIpXHJcbiAgICAgICAgICAgIHllYXIgKz0gMTAwO1xyXG4gICAgICAgICAgeWVhciArPSB0aGlzLl9lbnZpcm9ubWVudC5HZXRDZW50dXJ5KGNvbXBJZHgpIC0gY2VudHVyeV95ZWFyOyAvLyBERUZfY2VudHVyeVxyXG4gICAgICAgICAgaWYgKHRoaXMuX2Vudmlyb25tZW50LkdldERhdGVNb2RlKGNvbXBJZHgpID09PSAnQicpXHJcbiAgICAgICAgICAvLyBERUZfZGF0ZV9tb2RlXHJcbiAgICAgICAgICAgIHllYXIgLT0gUElDSW50ZXJmYWNlLkRBVEVfQlVEREhJU1RfR0FQO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX1lZWVkpOlxyXG4gICAgICAgICAgeWVhcl9pbl9waWMgPSB0cnVlO1xyXG4gICAgICAgICAgaW5wID0gdHJ1ZTtcclxuICAgICAgICAgIGxldCBZZWFyRGlnaXRzTm86IG51bWJlcjtcclxuICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSA0IHllYXIgZGlnaXQuIElmIG5vdCwgYWRqdXN0IGl0XHJcbiAgICAgICAgICAvLyBhY2NvcmRpbmcgdG8gdGhlICdjZW50dXJ5IHllYXInXHJcbiAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKSkge1xyXG4gICAgICAgICAgICBmb3IgKFllYXJEaWdpdHNObyA9IDA7IFllYXJEaWdpdHNObyA8IDQgJiYgcG9zICsgWWVhckRpZ2l0c05vIDwgc3RyLmxlbmd0aCAmJiBVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChzdHJbcG9zICsgWWVhckRpZ2l0c05vXSk7IFllYXJEaWdpdHNObysrKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSA9IFllYXJEaWdpdHNObztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBwb3MgKyBpIDwgc3RyLmxlbmd0aCAmJiBzdHJbcG9zICsgaV0gIT09IHRoaXMuREFURUNIQVIudG9TdHJpbmcoKSAmJiBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAoWWVhckRpZ2l0c05vID0gMDtcclxuICAgICAgICAgICAgICAgICBwb3MgKyBZZWFyRGlnaXRzTm8gPCBzdHIubGVuZ3RoICYmIFV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHN0cltwb3MgKyBZZWFyRGlnaXRzTm9dKSAmJlxyXG4gICAgICAgICAgICAgICAgIFllYXJEaWdpdHNObyA8IDQ7XHJcbiAgICAgICAgICAgICAgICAgWWVhckRpZ2l0c05vKyspIHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpIHtcclxuICAgICAgICAgICAgaWYgKGkgPCA0ICYmIHN0ci5sZW5ndGggPCBtYXNrLmxlbmd0aClcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVfZGF0ZShzdHIsIHBvcywgNCAtIGksIHN0ci5sZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpIDwgNCAmJiBsZW4gPCBtYXNrLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZV9kYXRlKHN0ciwgcG9zLCA0IC0gaSwgbGVuKTtcclxuICAgICAgICAgICAgICBsZW4gPSBsZW4gKyA0IC0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHllYXIgPSB0aGlzLmRhdGVfYV8yX2koc3RyLCA0LCBwb3MpO1xyXG4gICAgICAgICAgcG9zICs9IDQ7XHJcblxyXG4gICAgICAgICAgLy8gSGVuIDE2LzExLzk3IDogRml4ICM3Njg0NDJcclxuICAgICAgICAgIGlmICh5ZWFyID09PSAwKVxyXG4gICAgICAgICAgICBiWWVhcklzWmVybyA9IHRydWU7XHJcblxyXG4gICAgICAgICAgaWYgKFllYXJEaWdpdHNObyA8PSAyKSB7XHJcbiAgICAgICAgICAgIGNlbnR1cnlfeWVhciA9IHRoaXMuX2Vudmlyb25tZW50LkdldENlbnR1cnkoY29tcElkeCkgJSAxMDA7IC8vIERFRl9jZW50dXJ5XHJcbiAgICAgICAgICAgIGlmICh5ZWFyIDwgY2VudHVyeV95ZWFyKVxyXG4gICAgICAgICAgICAgIHllYXIgKz0gMTAwO1xyXG4gICAgICAgICAgICB5ZWFyICs9IHRoaXMuX2Vudmlyb25tZW50LkdldENlbnR1cnkoY29tcElkeCkgLSBjZW50dXJ5X3llYXI7IC8vIERFRl9jZW50dXJ5XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX2Vudmlyb25tZW50LkdldERhdGVNb2RlKGNvbXBJZHgpID09PSAnQicpXHJcbiAgICAgICAgICAvLyBERUZfZGF0ZV9tb2RlXHJcbiAgICAgICAgICAgIHllYXIgLT0gUElDSW50ZXJmYWNlLkRBVEVfQlVEREhJU1RfR0FQO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSFlZWVlZOlxyXG4gICAgICAgICAgaW5wID0gdHJ1ZTtcclxuICAgICAgICAgIGxldCBxdW90ZXM6IG51bWJlciA9IDA7XHJcbiAgICAgICAgICBpZiAobGVuID4gcG9zICsgNSAmJiBtYXNrW3BvcyArIDVdLmNoYXJDb2RlQXQoMCkgPT09IChQSUNJbnRlcmZhY2UuUElDX0hZWVlZWSkpXHJcbiAgICAgICAgICAgIHF1b3RlcyA9IDE7XHJcbiAgICAgICAgICB5ZWFyID0gSGVicmV3RGF0ZS5kYXRlaGViX2hfMl9pKHN0ciwgNSArIHF1b3RlcywgcG9zKTtcclxuICAgICAgICAgIHBvcyArPSA1ICsgcXVvdGVzO1xyXG4gICAgICAgICAgaWYgKHllYXIgPT09IDApXHJcbiAgICAgICAgICAgIGJZZWFySXNaZXJvID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSEw6XHJcbiAgICAgICAgICBpbnRQaWNJZHhPZnMgPSBIZWJyZXdEYXRlLmRhdGVoZWJfaF8yX2koc3RyLCAxLCBwb3MpO1xyXG4gICAgICAgICAgcG9zKys7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0hERDpcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICBxdW90ZXMgPSAwO1xyXG4gICAgICAgICAgaWYgKGxlbiA+IHBvcyArIDIgJiYgbWFza1twb3MgKyAyXS5jaGFyQ29kZUF0KDApID09PSBQSUNJbnRlcmZhY2UuUElDX0hERClcclxuICAgICAgICAgICAgcXVvdGVzID0gMTtcclxuICAgICAgICAgIGRheSA9IEhlYnJld0RhdGUuZGF0ZWhlYl9oXzJfaShzdHIsIDIgKyBxdW90ZXMsIHBvcyk7XHJcbiAgICAgICAgICBwb3MgKz0gMiArIHF1b3RlcztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTU1EOlxyXG4gICAgICAgICAgaW5wID0gdHJ1ZTtcclxuICAgICAgICAgIG1vbnRoX2luX3BpYyA9IHRydWU7XHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpKSB7XHJcbiAgICAgICAgICAgIGlmICgoc3RyLmxlbmd0aCA9PT0gcG9zICsgMSB8fCBzdHJbcG9zICsgMV0uY2hhckNvZGVBdCgwKSA9PT0gdGhpcy5EQVRFQ0hBUiB8fCAhVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoc3RyW3BvcyArIDFdKSkgJiYgc3RyLmxlbmd0aCA8IG1hc2subGVuZ3RoKVxyXG4gICAgICAgICAgICAgIHRoaXMubW92ZV9kYXRlKHN0ciwgcG9zLCAxLCBzdHIubGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc3RyW3BvcyArIDFdLmNoYXJDb2RlQXQoMCkgPT09IHRoaXMuREFURUNIQVIgJiYgbGVuIDwgbWFzay5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVfZGF0ZShzdHIsIHBvcywgMSwgbGVuKTtcclxuICAgICAgICAgICAgICBsZW4gKz0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbW9udGggPSB0aGlzLmRhdGVfYV8yX2koc3RyLCAyLCBwb3MpO1xyXG4gICAgICAgICAgcG9zICs9IDI7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19NTU06XHJcbiAgICAgICAgICBpbnAgPSB0cnVlO1xyXG4gICAgICAgICAgbW9udGhfaW5fcGljID0gdHJ1ZTtcclxuICAgICAgICAgIGludFJlZi52YWwgPSBwb3M7XHJcbiAgICAgICAgICBtb250aCA9IHRoaXMuZGF0ZV9NTU1fMl9tKHN0ciwgbWFzaywgaW50UmVmLCBsZW4sIHBpYy5pc0hlYnJldygpKTtcclxuICAgICAgICAgIHBvcyA9IGludFJlZi52YWw7XHJcbiAgICAgICAgICBpZiAocGljLmlzSGVicmV3KCkgJiYgbW9udGggPT09IDE0KVxyXG4gICAgICAgICAgICBtb250aCA9IDY7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfREQpOlxyXG4gICAgICAgICAgaW5wID0gdHJ1ZTtcclxuICAgICAgICAgIGRheV9pbl9waWMgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKSkge1xyXG4gICAgICAgICAgICBpZiAoKHN0ci5sZW5ndGggPT09IHBvcyArIDEgfHwgc3RyW3BvcyArIDFdLmNoYXJDb2RlQXQoMCkgPT09IHRoaXMuREFURUNIQVIgfHwgIVV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHN0cltwb3MgKyAxXSkpICYmIHN0ci5sZW5ndGggPCBtYXNrLmxlbmd0aClcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVfZGF0ZShzdHIsIHBvcywgMSwgc3RyLmxlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHN0cltwb3MgKyAxXS5jaGFyQ29kZUF0KDApID09PSB0aGlzLkRBVEVDSEFSICYmIGxlbiA8IG1hc2subGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlX2RhdGUoc3RyLCBwb3MsIDEsIGxlbik7XHJcbiAgICAgICAgICAgICAgbGVuICs9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRheSA9IHRoaXMuZGF0ZV9hXzJfaShzdHIsIDIsIHBvcyk7XHJcbiAgICAgICAgICBwb3MgKz0gMjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19EREQpOlxyXG4gICAgICAgICAgaW5wID0gdHJ1ZTtcclxuICAgICAgICAgIHVzZWRveSA9IHRydWU7XHJcbiAgICAgICAgICBkYXlfaW5fcGljID0gdHJ1ZTtcclxuICAgICAgICAgIGRveSA9IHRoaXMuZGF0ZV9hXzJfaShzdHIsIDMsIHBvcyk7XHJcbiAgICAgICAgICBwb3MgKz0gMztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19EREREKTpcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICBkYXlfaW5fcGljID0gdHJ1ZTtcclxuICAgICAgICAgIGRheSA9IHRoaXMuZGF0ZV9hXzJfaShzdHIsIDIsIHBvcyk7XHJcbiAgICAgICAgICBwb3MgKz0gMiArIDI7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfWUopOiAvLyBKUE46IEphcGFuZXNlIGRhdGUgcGljdHVyZSBzdXBwb3J0XHJcbiAgICAgICAgICB5ZWFyX2luX3BpYyA9IHRydWU7XHJcbiAgICAgICAgICBpbnAgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKSkge1xyXG4gICAgICAgICAgICBpZiAoKHN0ci5sZW5ndGggPT09IHBvcyArIDEgfHwgc3RyW3BvcyArIDFdLmNoYXJDb2RlQXQoMCkgPT09IHRoaXMuREFURUNIQVIgfHwgIVV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHN0cltwb3MgKyAxXSkpICYmIHN0ci5sZW5ndGggPCBtYXNrLmxlbmd0aClcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVfZGF0ZShzdHIsIHBvcywgMSwgc3RyLmxlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB5ZWFyID0gdGhpcy5kYXRlX2FfMl9pKHN0ciwgMiwgcG9zKTtcclxuICAgICAgICAgIHBvcyArPSAyO1xyXG5cclxuICAgICAgICAgIGxldCBzdHIxOiBzdHJpbmcgPSBOU3RyaW5nLkZyb21DaGFycyhzdHIpO1xyXG4gICAgICAgICAgZXJhX3llYXIgPSBVdGlsRGF0ZUpwbi5nZXRJbnN0YW5jZSgpLmdldFN0YXJ0WWVhck9mRXJhKHN0cjEsIHBpYy5nZXRNYXNrKCkpO1xyXG5cclxuICAgICAgICAgIGlmIChlcmFfeWVhciA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICB5ZWFyICs9IGVyYV95ZWFyIC0gMTtcclxuXHJcbiAgICAgICAgICBpZiAoeWVhciA9PT0gMClcclxuICAgICAgICAgICAgYlllYXJJc1plcm8gPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpIHtcclxuICAgICAgICAgICAgLy8gaWYgXCJzdHJbcG9zXVwiIGNvbnRhaW5zIERCQ1MsIHRoZSBuZXh0IGluZGV4IG9mIFwibWFza1wiIGhhcyB0byBiZSBza2lwcGVkLlxyXG4gICAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKHN0cltwb3NdKSA9PT0gZmFsc2UgJiZcclxuICAgICAgICAgICAgICBVdGlsU3RyQnl0ZU1vZGUuaXNIYWxmV2lkdGgobWFza1twb3MgKyBpbnRQaWNJZHhPZnNdKSlcclxuICAgICAgICAgICAgICBpbnRQaWNJZHhPZnMrKztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBwb3MgKz0gMTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJZZWFySXNaZXJvKSB7XHJcbiAgICAgIGlmICghbW9udGhfaW5fcGljKVxyXG4gICAgICAgIG1vbnRoID0gMDtcclxuICAgICAgaWYgKCFkYXlfaW5fcGljICYmIG1vbnRoID09PSAwKVxyXG4gICAgICAgIGRheSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGVuIDE2LzExLzk3IDogRml4ICM3Njg0NDJcclxuICAgIC8vIFplcm8gZGF0ZSBpcyB2YWxpZCBhbmQgc2hvdWxkIHJldHVybiAwTC4gVGhpcyBjaGVjayBtdXN0IGJlIGhlcmVcclxuICAgIC8vIGJlY2F1c2UgdGhlIHllYXIgdmFsdWUgbWF5IGJlIGNoYW5nZWQgYmVjYXVzZSBvZiBjZW50dXJ5IHllYXIuXHJcbiAgICBpZiAoZGF5ID09PSAwICYmIG1vbnRoID09PSAwICYmIChiWWVhcklzWmVybyB8fCB5ZWFyID09PSAwKSlcclxuICAgICAgcmV0dXJuICgwKTtcclxuXHJcbiAgICBpZiAoIWlucClcclxuICAgICAgcmV0dXJuICgwKTtcclxuXHJcbiAgICAvLyBIZWJyZXcgWWVhclxyXG4gICAgaWYgKHBpYy5pc0hlYnJldygpKSB7XHJcbiAgICAgIGlmICh5ZWFyID4gMCkge1xyXG4gICAgICAgIGlmIChtaWxsZW5pdW0gPT09IDApXHJcbiAgICAgICAgICBtaWxsZW5pdW0gPSA1O1xyXG4gICAgICAgIHllYXIgKz0gbWlsbGVuaXVtICogMTAwMDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKEhlYnJld0RhdGUuZGF0ZWhlYl8yX2QoeWVhciwgbW9udGgsIGRheSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRoZSBuZXh0IDIgbGluZXMgc3VwcG9ydCA0Lnh4IEREL01NIHBpY3R1cmVzXHJcbiAgICBpZiAoKHllYXIgPT09IDApICYmICF5ZWFyX2luX3BpYykge1xyXG4gICAgICBkYXRlUGFyYW1zID0gdGhpcy5kYXRlX3N5cygpO1xyXG4gICAgICB5ZWFyID0gZGF0ZVBhcmFtcy55ZWFyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICh0aGlzLmRhdGVfNF9jYWxlbmRlcih5ZWFyLCBtb250aCwgZGF5LCBkb3ksIHVzZWRveSkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIERlY29kZSBkaWdpdHMgZnJvbSBhIGRhdGUgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGRhdGVfYV8yX2koczogc3RyaW5nW10sIGxlbjogbnVtYmVyLCBwb3M6IG51bWJlcik6IG51bWJlcjtcclxuICBwcml2YXRlIGRhdGVfYV8yX2koczogc3RyaW5nLCBsZW46IG51bWJlciwgcG9zOiBudW1iZXIpOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBkYXRlX2FfMl9pKHM6IGFueSwgbGVuOiBudW1iZXIsIHBvczogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIChzID09PSBudWxsIHx8IHMgaW5zdGFuY2VvZiBBcnJheSkgJiYgKGxlbiA9PT0gbnVsbCB8fCBsZW4uY29uc3RydWN0b3IgPT09IE51bWJlcikgJiYgKHBvcyA9PT0gbnVsbCB8fCBwb3MuY29uc3RydWN0b3IgPT09IE51bWJlcikpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0ZV9hXzJfaV8wKHMsIGxlbiwgcG9zKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmRhdGVfYV8yX2lfMShzLCBsZW4sIHBvcyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRGVjb2RlIGRpZ2l0cyBmcm9tIGEgZGF0ZSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZGF0ZV9hXzJfaV8wKHM6IHN0cmluZ1tdLCBsZW46IG51bWJlciwgcG9zOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IGFycmF5OiBzdHJpbmdbXSA9IG5ldyBBcnJheTxzdHJpbmc+KGxlbik7XHJcbiAgICBsZXQgbWdOdW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpID0gaSArIDEpIHtcclxuICAgICAgYXJyYXlbaV0gPSBzW3BvcyArIGldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1nTnVtLmFfMl9sb25nKE5TdHJpbmcuRnJvbUNoYXJzKGFycmF5KSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgbW92aW5nIHBhcnQgb2YgdGhlIGRhdGUgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG1vdmVfZGF0ZShzdHI6IHN0cmluZ1tdLCBwb3M6IG51bWJlciwgbW92ZWJ5OiBudW1iZXIsIGxlbjogbnVtYmVyKTogdm9pZDtcclxuICBwcml2YXRlIG1vdmVfZGF0ZShzdHI6IHN0cmluZywgcG9zOiBudW1iZXIsIG1vdmVieTogbnVtYmVyLCBsZW46IG51bWJlcik6IHZvaWQ7XHJcbiAgcHJpdmF0ZSBtb3ZlX2RhdGUoc3RyOiBhbnksIHBvczogbnVtYmVyLCBtb3ZlYnk6IG51bWJlciwgbGVuOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIChzdHIgPT09IG51bGwgfHwgc3RyIGluc3RhbmNlb2YgQXJyYXkpICYmIChwb3MgPT09IG51bGwgfHwgcG9zLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpICYmIChtb3ZlYnkgPT09IG51bGwgfHwgbW92ZWJ5LmNvbnN0cnVjdG9yID09PSBOdW1iZXIpICYmIChsZW4gPT09IG51bGwgfHwgbGVuLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKSB7XHJcbiAgICAgIHRoaXMubW92ZV9kYXRlXzAoc3RyLCBwb3MsIG1vdmVieSwgbGVuKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tb3ZlX2RhdGVfMShzdHIsIHBvcywgbW92ZWJ5LCBsZW4pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIG1vdmluZyBwYXJ0IG9mIHRoZSBkYXRlIHN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBtb3ZlX2RhdGVfMChzdHI6IHN0cmluZ1tdLCBwb3M6IG51bWJlciwgbW92ZWJ5OiBudW1iZXIsIGxlbjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBNZW1vcnlVdGlsLmNoYXJfbWVtbW92ZShzdHIsIHBvcyArIG1vdmVieSwgc3RyLCBwb3MsIGxlbiAtIChwb3MgKyBtb3ZlYnkpICsgMSk7XHJcbiAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KHN0ciwgcG9zLCAnMCcsIC8qJzAnKi9tb3ZlYnkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyYW5zbGF0ZSBhIG1vbnRoIG5hbWUgLT4gbW9udGggaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyaW5nXCI+dG8gZXZhbHVhdGVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY3R1cmVcIj5tYXNrXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwb3NcIj5jdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzdHJpbmcgdGhlIGludFJlZiBub3QgZXhhY3RseSB0aGUgc2FtZSByZWZlcmVuY2UgdG8gaW50ZWdlciAsIGxpa2UgaW4gQysrLFxyXG4gIC8vLyAgIHNvIHRoZSBnbG9iYWwgcG9zIE1VU1QgYmUgdXBkYXRlZCBieSB0aGUgcG9zLnZhbHVlIGFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zLlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgZGF0ZV9NTU1fMl9tKHN0cjogc3RyaW5nW10sIG1hc2s6IHN0cmluZ1tdLCBwb3M6IEludFJlZiwgbGVuOiBudW1iZXIsIGlzSGVicmV3OiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGxldCBsOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKSkge1xyXG4gICAgICBsZXQgbWFza1BvczogbnVtYmVyID0gVXRpbFN0ckJ5dGVNb2RlLmNvbnZQb3MoTlN0cmluZy5Gcm9tQ2hhcnMoc3RyKSwgTlN0cmluZy5Gcm9tQ2hhcnMobWFzayksIHBvcy52YWwsIGZhbHNlKTtcclxuICAgICAgbCA9IHRoaXMuZGF0ZV9tc2tfY250KG1hc2ssIG1hc2tQb3MsIDxudW1iZXI+KGxlbiAtIG1hc2tQb3MpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsID0gdGhpcy5kYXRlX21za19jbnQobWFzaywgcG9zLnZhbCwgPG51bWJlcj4obGVuIC0gcG9zLnZhbCkpO1xyXG4gICAgfVxyXG4gICAgbGV0IHN0clBvczogbnVtYmVyID0gcG9zLnZhbDtcclxuICAgIHBvcy52YWwgPSBwb3MudmFsICsgbDtcclxuICAgIGxlbiA9IE1lbW9yeVV0aWwubWVtX3RyaW0oc3RyLCBzdHJQb3MsIGwpO1xyXG5cclxuICAgIGlmIChsZW4gPT09IDApIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHN0ckI6IHN0cmluZyA9IE5TdHJpbmcuRnJvbUNoYXJzKHN0ciwgc3RyUG9zLCBsZW4pO1xyXG4gICAgICBsZXQgbW9udGhOYW1lczogc3RyaW5nW107XHJcbiAgICAgIGlmIChpc0hlYnJldykge1xyXG4gICAgICAgIG1vbnRoTmFtZXMgPSBIZWJyZXdEYXRlLkdldExvY2FsTW9udGhzKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IG1vbnRoczogc3RyaW5nID0gRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcoTXNnSW50ZXJmYWNlLk1PTlRIU19QVFIpO1xyXG4gICAgICAgIG1vbnRoTmFtZXMgPSBEYXRlVXRpbC5nZXRMb2NhbE1vbnRocyhtb250aHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAxOyBpIDwgbW9udGhOYW1lcy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICAgIGlmIChOU3RyaW5nLkNvbXBhcmUobW9udGhOYW1lc1tpXS5zdWJzdHIoMCwgbGVuKSwgc3RyQiwgdHJ1ZSkgPT09IDApXHJcbiAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IHRoZSBjdXJyZXQgZGF5ZSBzZXBlcmF0ZWQgdG8geWVhciwgbW9udGgsIGRheVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZGF0ZV9zeXMoKTogRGF0ZUJyZWFrUGFyYW1zIHtcclxuICAgIGxldCBkYXRlOiBEYXRlQnJlYWtQYXJhbXMgPSBuZXcgRGF0ZUJyZWFrUGFyYW1zKCk7XHJcbiAgICBsZXQgQ3VyckRhdGU6IERhdGVUaW1lID0gRGF0ZVRpbWUuTm93O1xyXG5cclxuICAgIGRhdGUueWVhciA9IEN1cnJEYXRlLlllYXI7XHJcbiAgICBkYXRlLm1vbnRoID0gQ3VyckRhdGUuTW9udGg7XHJcbiAgICBkYXRlLmRheSA9IEN1cnJEYXRlLkRheTtcclxuXHJcbiAgICByZXR1cm4gZGF0ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0byBnZXQgY3VycmVudCBkYXRlIGluIG1hZ2ljIHJlcHJlc2VudGF0aW9uIFF1ZXJ5IE1hZ2ljJ3MgRGF0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgJ01hZ2ljJyBjdXJyZW50IGRhdGVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGRhdGVfbWFnaWModXRjRGF0ZTogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBsZXQgZGF0ZVRpbWU6IERhdGVUaW1lO1xyXG4gICAgaWYgKHV0Y0RhdGUpIHtcclxuICAgICAgZGF0ZVRpbWUgPSBEYXRlVGltZS5VdGNOb3c7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZGF0ZVRpbWUgPSBEYXRlVGltZS5Ob3c7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHllYXI6IG51bWJlciA9IGRhdGVUaW1lLlllYXI7XHJcbiAgICBsZXQgbW9udGg6IG51bWJlciA9IGRhdGVUaW1lLk1vbnRoO1xyXG4gICAgbGV0IGRheTogbnVtYmVyID0gZGF0ZVRpbWUuRGF5O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmRhdGVfNF9jYWxlbmRlcih5ZWFyLCBtb250aCwgZGF5LCAxLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdG8gZ2V0ICB0aGUgc3lzdGVtIHRpbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlICdNYWdpYycgY3VycmVudCB0aW1lXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICB0aW1lX21hZ2ljKHV0Y1RpbWU6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIERhdGVUaW1lLkdldFRvdGFsU2Vjb25kc0Zyb21NaWRuaWdodCh1dGNUaW1lLCBuZXcgRGF0ZSgpKTtcclxuICB9XHJcblxyXG4gIG10aW1lX21hZ2ljKHV0Y1RpbWU6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIERhdGVUaW1lLkdldFRvdGFsTWlsbGlTZWNvbmRzRnJvbU1pZG5pZ2h0KHV0Y1RpbWUsIG5ldyBEYXRlKCkpIDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb21wdXRlIE1BR0lDIGRhdGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGRhdGVfNF9jYWxlbmRlcih5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRheTogbnVtYmVyLCBkb3k6IG51bWJlciwgdXNlZG95OiBib29sZWFuKTogbnVtYmVyIHtcclxuXHJcbiAgICBsZXQgTGVhcFllYXI6IGJvb2xlYW4gPSB5ZWFyICUgNCA9PT0gMCAmJiAoeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwKTtcclxuXHJcbiAgICAvLyAzLjExLjk3IC0gSGVuIChGaXhlZCBidWcgIzc2NDI2NSBhbmQgIzgxODYpIDpcclxuICAgIC8vIElmIHRoZSBkYXRlIGlzIDAgdGhlbiByZXR1cm4gMEwgKHplcm8gdmFsdWUgaXMgdmFsaWQpLCBlbHNlIGlmIHRoZSBkYXRlXHJcbiAgICAvLyBpcyBpbGxlZ2FsIHRoZW4gcmV0dXJuIDEwMDAwMDAwMDBMICh3cm9uZyBkYXRlKS5cclxuICAgIGlmICh1c2Vkb3kpIHtcclxuICAgICAgaWYgKGRveSA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkb3kgPiAzNjYgfHwgKCFMZWFwWWVhciAmJiBkb3kgPiAzNjUpKSB7XHJcbiAgICAgICAgcmV0dXJuICgxMDAwMDAwMDAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChkYXkgPT09IDAgJiYgbW9udGggPT09IDAgJiYgeWVhciA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkYXkgPT09IDAgfHwgbW9udGggPT09IDAgfHwgeWVhciA9PT0gMCB8fCBtb250aCA+IDEyKSB7XHJcbiAgICAgICAgcmV0dXJuIDEwMDAwMDAwMDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHllYXIgPSB5ZWFyIC0gMTtcclxuICAgIGxldCBudW06IG51bWJlciA9IE1hdGguZmxvb3IoeWVhciAvIDQwMCk7XHJcbiAgICB5ZWFyID0geWVhciAtIG51bSAqIDQwMDtcclxuICAgIGxldCBudW0yOiBudW1iZXIgPSBNYXRoLmZsb29yKHllYXIgLyAxMDApO1xyXG4gICAgeWVhciA9IHllYXIgLSBudW0yICogMTAwO1xyXG4gICAgbGV0IG51bTM6IG51bWJlciA9IE1hdGguZmxvb3IoeWVhciAvIDQpO1xyXG4gICAgeWVhciA9IHllYXIgLSBudW0zICogNDtcclxuXHJcbiAgICBpZiAoIXVzZWRveSkge1xyXG4gICAgICBsZXQgbnVtNDogbnVtYmVyID0gUElDSW50ZXJmYWNlLmRhdGVfZGF5X3RhYlttb250aCAtIDFdO1xyXG4gICAgICBsZXQgbnVtNTogbnVtYmVyID0gUElDSW50ZXJmYWNlLmRhdGVfZGF5X3RhYlttb250aF07XHJcblxyXG4gICAgICBpZiAoTGVhcFllYXIpIHtcclxuICAgICAgICBpZiAobW9udGggPiAxKSB7XHJcbiAgICAgICAgICBudW01ID0gbnVtNSArIDE7XHJcbiAgICAgICAgICBpZiAobW9udGggPiAyKSB7XHJcbiAgICAgICAgICAgIG51bTQgPSBudW00ICsgMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkYXkgPiBudW01IC0gbnVtNCkge1xyXG4gICAgICAgIHJldHVybiAxMDAwMDAwMDAwO1xyXG4gICAgICB9XHJcbiAgICAgIGRveSA9IG51bTQgKyBkYXk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVtICogMTQ2MDk3ICsgbnVtMiAqIDM2NTI0ICsgbnVtMyAqIDE0NjEgKyB5ZWFyICogMzY1ICsgZG95O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyYW5zbGF0ZXMgYSBzdHJpbmcgdGltZSB0byBtYWdpYyBudW1iZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGlzcFZhbHVlXCI+ICAgQSBzdHJpbmcgdmFsdWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgICAgVGhlIHBpY3R1cmUgdG8gdXNlPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBtYWdpYyBudW1iZXI8L3JldHVybnM+XHJcbiAgZnJvbU5hdGl2ZVRpbWVUb01nVGltZShkaXNwVmFsdWU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1nTnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG51bVZhbDogbnVtYmVyID0gdGhpcy5mcm9tTmF0aXZlVGltZVRvTWdUaW1lTnVtYmVyKGRpc3BWYWx1ZSk7XHJcbiAgICBtZ051bS5OVU1fNF9MT05HKG51bVZhbCk7XHJcbiAgICByZXR1cm4gbWdOdW0udG9YTUxyZWNvcmQoKTtcclxuICB9XHJcblxyXG4gIGZyb21OYXRpdmVUaW1lVG9NZ1RpbWVOdW1iZXIoZGlzcFZhbHVlOiBEYXRlKTogbnVtYmVyIHtcclxuICAgIGxldCBudW1WYWw6IG51bWJlciA9IHRoaXMudGltZV8yX2ludChkaXNwVmFsdWUuZ2V0SG91cnMoKSwgZGlzcFZhbHVlLmdldE1pbnV0ZXMoKSwgZGlzcFZhbHVlLmdldFNlY29uZHMoKSk7XHJcbiAgICByZXR1cm4gbnVtVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbnZlcnQgQWxwaGEgaW50byBhIFRpbWUgYWNjb3JkaW5nIHRvIGEgZ2l2ZW4gcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYV8yX3RpbWUoQXNjaWk6IHN0cmluZywgcGljOiBQSUMsIG1pbGxpU2Vjb25kczogYm9vbGVhbik6IG51bWJlcjtcclxuICBhXzJfdGltZShBc2NpaTogc3RyaW5nLCBBc2NpaUw6IG51bWJlciwgbWFzazogc3RyaW5nW10sIG1pbGxpU2Vjb25kczogYm9vbGVhbik6IG51bWJlcjtcclxuICBhXzJfdGltZShBc2NpaTogYW55LCBwaWNPckFzY2lpTDogYW55LCBtaWxsaVNlY29uZHNPck1hc2s6IGFueSwgbWlsbGlTZWNvbmRzPzogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMylcclxuICAgICAgcmV0dXJuIHRoaXMuYV8yX3RpbWVfMChBc2NpaSwgcGljT3JBc2NpaUwsIG1pbGxpU2Vjb25kc09yTWFzayk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuYV8yX3RpbWVfMShBc2NpaSwgcGljT3JBc2NpaUwsIG1pbGxpU2Vjb25kc09yTWFzaywgbWlsbGlTZWNvbmRzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0IEFscGhhIGludG8gYSBUaW1lIGFjY29yZGluZyB0byBhIGdpdmVuIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYV8yX3RpbWVfMChBc2NpaTogc3RyaW5nLCBwaWM6IFBJQywgbWlsbGlTZWNvbmRzOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmFfMl90aW1lKEFzY2lpLCBBc2NpaS5sZW5ndGgsIE5TdHJpbmcuVG9DaGFyQXJyYXkocGljLmdldE1hc2soKSksIG1pbGxpU2Vjb25kcyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29udmVydCBBbHBoYSBpbnRvIGEgVGltZSBhY2NvcmRpbmcgdG8gYSBnaXZlbiBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFfMl90aW1lXzEoQXNjaWk6IHN0cmluZywgQXNjaWlMOiBudW1iZXIsIG1hc2s6IHN0cmluZ1tdLCBtaWxsaVNlY29uZHM6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgbGV0IG1nTnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IEk6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbGVuOiBudW1iZXIgPSBtYXNrLmxlbmd0aDsgLy8gTGVuZ3RoIG9mIG1hc2sgb3Igc3RyaW5nIHRvIHNjYW5cclxuXHJcbiAgICAvLyBJbml0aWFsaXplIGNvdW50ZXJzIGFuZCBmbGFnc1xyXG4gICAgaWYgKGxlbiA+IEFzY2lpTCkge1xyXG4gICAgICBsZW4gPSBBc2NpaUw7XHJcbiAgICB9XHJcbiAgICBsZXQgYW1wbTogbnVtYmVyID0gMDsgLy8gQU0vUE0gaW5kaWNhdG9yXHJcbiAgICBsZXQgaG91cjogbnVtYmVyID0gMDtcclxuICAgIGxldCBtaW51dGU6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgc2Vjb25kOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IG1pbGxpc2Vjb25kOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHdoaWxlIChJIDwgbGVuKSB7XHJcbiAgICAgIGxldCBtYXNrTGVuZ3RoOiBudW1iZXI7XHJcbiAgICAgIGxldCBtYXhNYXNrTGVuOiBudW1iZXI7XHJcblxyXG4gICAgICAvLyBUbyBnZXQgdGhlIG1heGltdW0gcG9zc2libGUgbGVuZ3RoIG9mIHRoZSBjb25zdGFudHMgaW4gdGhlIG1hc2tcclxuICAgICAgc3dpdGNoIChtYXNrW0ldLmNoYXJDb2RlQXQoMCkpIHtcclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX0hIKTpcclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX01NVCk6XHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19TUyk6XHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19QTSk6XHJcbiAgICAgICAgICBtYXhNYXNrTGVuID0gMjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX01TKTpcclxuICAgICAgICAgIG1heE1hc2tMZW4gPSAzO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBtYXhNYXNrTGVuID0gMTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiBUbyBnZXQgdGhlIG1pbmltdW0gb2YgbWF4TWFza0xlbiAmIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlbWFpbmVkIGluIHN0cmluZ1xyXG4gICAgICBiZWNhdXNlIGlmIHRoZSBBc2NpaSBpcyBzaG9ydGVyKGhhcyBsZXNzIGNoYXJhY3RlcnMpdGhlbiBjcmVhdGUgU3RyaW5nIG9ubHlcclxuICAgICAgb2YgdGhhdCBuby4gb2YgY2hhcmFjdGVycyAobWFza0xlbmd0aCksIG5vdCBvZiBtYXhNYXNrTGVuZ3RoICovXHJcbiAgICAgIG1hc2tMZW5ndGggPSBNYXRoLm1pbihtYXhNYXNrTGVuLCBsZW4gLSBJKTtcclxuXHJcbiAgICAgIHN3aXRjaCAobWFza1tJXS5jaGFyQ29kZUF0KDApKSB7XHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19ISCk6IHtcclxuICAgICAgICAgIGhvdXIgPSBtZ051bS5hXzJfbG9uZyhBc2NpaS5zdWJzdHIoSSwgbWFza0xlbmd0aCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX01NVCk6IHtcclxuICAgICAgICAgIG1pbnV0ZSA9IG1nTnVtLmFfMl9sb25nKEFzY2lpLnN1YnN0cihJLCBtYXNrTGVuZ3RoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfU1MpOiB7XHJcbiAgICAgICAgICBzZWNvbmQgPSBtZ051bS5hXzJfbG9uZyhBc2NpaS5zdWJzdHIoSSwgbWFza0xlbmd0aCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX01TKToge1xyXG4gICAgICAgICAgbWlsbGlzZWNvbmQgPSBtZ051bS5hXzJfbG9uZyhBc2NpaS5zdWJzdHIoSSwgbWFza0xlbmd0aCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX1BNKTpcclxuICAgICAgICAgIGFtcG0gPSAwO1xyXG4gICAgICAgICAgbGV0IGMwOiBzdHJpbmcgPSBBc2NpaVtJXTtcclxuICAgICAgICAgIGxldCBjMTogc3RyaW5nO1xyXG4gICAgICAgICAgYzAgPSBjMC50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgaWYgKEkgKyAxIDwgbGVuKSB7XHJcbiAgICAgICAgICAgIGMxID0gQXNjaWlbSSArIDFdO1xyXG4gICAgICAgICAgICBjMSA9IGMxLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYzEgPT09ICdNJykge1xyXG4gICAgICAgICAgICAgIGlmIChjMCA9PT0gJ0EnKVxyXG4gICAgICAgICAgICAgICAgYW1wbSA9IC0xO1xyXG4gICAgICAgICAgICAgIGlmIChjMCA9PT0gJ1AnKVxyXG4gICAgICAgICAgICAgICAgYW1wbSA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgSSArPSBtYXNrTGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIHZhbGlkaXR5IG9mIG1pbnV0ZXMgYW5kIHNlY29uZHNcclxuICAgIGlmIChzZWNvbmQgPiA1OSB8fCBtaW51dGUgPiA1OSlcclxuICAgICAgcmV0dXJuICgwKTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IGhvdXIgdG8gUE0gaWYgc3BlY2lmaWVkIGFzIEFNXHJcbiAgICBpZiAoYW1wbSAhPT0gMClcclxuICAgICAgaWYgKGFtcG0gPT09IC0xKVxyXG4gICAgICAvLyBBTVxyXG4gICAgICB7XHJcbiAgICAgICAgaWYgKGhvdXIgPT09IDEyKVxyXG4gICAgICAgICAgaG91ciA9IDA7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoaG91ciA8IDEyKVxyXG4gICAgICAvLyBQTVxyXG4gICAgICAgIGhvdXIgKz0gMTI7XHJcbiAgICBpZiAobWlsbGlTZWNvbmRzKVxyXG4gICAgICByZXR1cm4gdGhpcy50aW1lXzJfaW50KGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSAqIDEwMDAgKyBtaWxsaXNlY29uZDtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRoaXMudGltZV8yX2ludChob3VyLCBtaW51dGUsIHNlY29uZCk7XHJcbiAgfVxyXG5cclxuICB0aW1lXzJfaW50KGhvdXI6IG51bWJlciwgbWludXRlOiBudW1iZXIsIHNlY29uZDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBob3VyICogMzYwMCArIG1pbnV0ZSAqIDYwICsgc2Vjb25kO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbnZlcnQgXCIwXCIvXCIxXCIgdG8gZmFsc2UvdHJ1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJib29sU3RyXCI+ICBcIjBcIi9cIjFcIlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBpZiBcIjFcIiBvciBmYWxzZSBpZiBvdGhlcnNcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyB0b0Jvb2xlYW4oYm9vbFN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gYm9vbFN0ciAhPT0gbnVsbCAmJiBib29sU3RyID09PSBcIjFcIjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTdHJpbmcgdG8gRGF0ZSBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYV8yX2RhdGUoc3RyOiBzdHJpbmcsIEZvcm1hdDogc3RyaW5nLCBjb21wSWR4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuYV8yX2RhdGVfZGF0ZW1vZGUoc3RyLCBGb3JtYXQsIGNvbXBJZHgpO1xyXG4gIH1cclxuXHJcbiAgYV8yX2RhdGVfcGljKHN0cjogc3RyaW5nLCBwaWM6IFBJQywgbWFzazogc3RyaW5nLCBjb21wSWR4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKHN0ciA9PT0gbnVsbCkge1xyXG4gICAgICBzdHIgPSBcIlwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuYV8yX2RhdGVfcGljX2RhdGVtb2RlKE5TdHJpbmcuVG9DaGFyQXJyYXkoc3RyKSwgc3RyLmxlbmd0aCwgcGljLCBOU3RyaW5nLlRvQ2hhckFycmF5KG1hc2spLCBjb21wSWR4KTtcclxuICB9XHJcblxyXG4gIHRvX2Eob3V0VmFsOiBzdHJpbmcsIG91dF9sZW46IG51bWJlciwgZGF0ZTogbnVtYmVyLCBGb3JtYXQ6IHN0cmluZywgY29tcElkeDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRvX2FfZGF0ZW1vZGUob3V0VmFsLCBvdXRfbGVuLCBkYXRlLCBGb3JtYXQsIGZhbHNlLCBjb21wSWR4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0IHN0cmluZyAtPiBkYXRlIHVzaW5nIGEgZm9ybWF0IHN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhXzJfZGF0ZV9kYXRlbW9kZShzdHI6IHN0cmluZywgRm9ybWF0OiBzdHJpbmcsIGNvbXBJZHg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgcElDOiBQSUMgPSBuZXcgUElDKEZvcm1hdCwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFLCBjb21wSWR4KTtcclxuICAgIGlmIChzdHIgPT09IG51bGwpIHtcclxuICAgICAgc3RyID0gXCJcIjtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmFfMl9kYXRlX3BpY19kYXRlbW9kZShOU3RyaW5nLlRvQ2hhckFycmF5KHN0ciksIHN0ci5sZW5ndGgsIHBJQywgTlN0cmluZy5Ub0NoYXJBcnJheShwSUMuZ2V0TWFzaygpKSwgY29tcElkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU3RyaW5nIHRvIGEgZGF0ZW1vZGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgdG9fYV9kYXRlbW9kZShvdXRWYWw6IHN0cmluZywgb3V0X2xlbjogbnVtYmVyLCBkYXRlOiBudW1iZXIsIEZvcm1hdDogc3RyaW5nLCBpZ25vcmVfZHRfZm10OiBib29sZWFuLCBjb21wSWR4OiBudW1iZXIpOiBzdHJpbmcge1xyXG5cclxuICAgIC8vIFBhcnNlIHRoZSBwaWN0dXJlXHJcbiAgICBsZXQgcGljOiBQSUMgPSBuZXcgUElDKEZvcm1hdCwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFLCBjb21wSWR4KTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHRoZSAgZGF0ZSAtPiBzdHJpbmdcclxuICAgIGlmIChvdXRWYWwgPT09IG51bGwpIHtcclxuICAgICAgb3V0VmFsID0gcGljLmdldE1hc2soKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnRvX2FfcGljX2RhdGVtb2RlKG91dFZhbCwgb3V0X2xlbiwgZGF0ZSwgcGljLCB0cnVlLCBpZ25vcmVfZHRfZm10LCBjb21wSWR4KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBEZWNvZGUgZGlnaXRzIGZyb20gYSBkYXRlIHN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBkYXRlX2FfMl9pXzEoczogc3RyaW5nLCBsZW46IG51bWJlciwgcG9zOiBudW1iZXIpOiBudW1iZXIge1xyXG5cclxuICAgIC8vIGRvbid0IGZvcmdldCB0byBpbmNsdWRlICdwb3MrPWxlbicgYWZ0ZXIgdGhlIHVzaW5nIG9mIHRoZSBmdW5jdGlvblxyXG4gICAgbGV0IG1nTnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IHN0cjogc3RyaW5nO1xyXG5cclxuICAgIHN0ciA9IHMuc3Vic3RyKHBvcywgbGVuKTtcclxuICAgIHJldHVybiBtZ051bS5hXzJfbG9uZyhzdHIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtb3ZlX2RhdGVfMShzdHI6IHN0cmluZywgcG9zOiBudW1iZXIsIG1vdmVieTogbnVtYmVyLCBsZW46IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBzdHIgPSBTdHJVdGlsLm1lbW1vdmUoc3RyLCBwb3MgKyBtb3ZlYnksIHN0ciwgcG9zLCBsZW4gLSBwb3MpO1xyXG5cclxuICAgIHN0ciA9IFN0clV0aWwubWVtc2V0KHN0ciwgcG9zLCAnMCcsIG1vdmVieSk7XHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH1cclxuXHJcbiAgdGltZV8yX2EoQXNjaWk6IHN0cmluZywgQXNjaWlMOiBudW1iZXIsIHRpbWU6IG51bWJlciwgRm9ybWF0OiBzdHJpbmcsIGNvbXBJZHg6IG51bWJlciwgbWlsbGlTZWNvbmRzOiBib29sZWFuKTogc3RyaW5nIHtcclxuXHJcbiAgICBpZiAoU3RyVXRpbC5ydHJpbShGb3JtYXQpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBGb3JtYXQgPSBcIkhIOk1NOlNTXCI7XHJcbiAgICB9XHJcbiAgICBsZXQgcGljOiBQSUMgPSBuZXcgUElDKEZvcm1hdCwgU3RvcmFnZUF0dHJpYnV0ZS5USU1FLCBjb21wSWR4KTtcclxuICAgIGlmIChBc2NpaSA9PT0gbnVsbCkge1xyXG4gICAgICBBc2NpaSA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy50aW1lXzJfYV9waWMoQXNjaWksIEFzY2lpTCwgdGltZSwgcGljLCBmYWxzZSwgbWlsbGlTZWNvbmRzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUcmFuc2xhdGVzIGEgc3RyaW5nIHRvIG1hZ2ljIGxvZ2ljYWxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGlzcFZhbHVlXCI+ICAgQSBzdHJpbmcgdmFsdWVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1wiPiAgICAgICAgIFRoZSBwaWN0dXJlIHRvIHVzZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmFuZ2VTdHJcIj4gICAgVGhlIHJhbmdlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbG9naWNhbCB2YWx1ZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgdG9Mb2dpY2FsKGRpc3BWYWx1ZTogc3RyaW5nLCBwaWM6IFBJQywgcmFuZ2VTdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBkaXNwVmFsdWUgPSBkaXNwVmFsdWUudHJpbSgpO1xyXG4gICAgaWYgKGRpc3BWYWx1ZSA9PT0gbnVsbCB8fCBkaXNwVmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGRpc3BWYWx1ZSA9IFwiRmFsc2VcIjtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmRpc3BfMl9sb2dpY2FsKGRpc3BWYWx1ZSwgcGljLmdldE1hc2soKSwgcmFuZ2VTdHIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRyYW5zbGF0ZSB0aGUgZGlzcGxheWVkIHZhbHVlIHRvIGEgbWFnaWMgbG9naWNhbCB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkaXNwVmFsdWVcIj50aGUgZGlzcGxheWVkIHZhbHVlIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtYXNrXCI+dGhlIG1hc2sgb2YgdGhlIGRpc3BsYXllZCB2YWx1ZSA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmFuZ2VTdHJcIj50aGUgcmFuZ2Ugc3RyaW5nIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBkaXNwXzJfbG9naWNhbChkaXNwVmFsdWU6IHN0cmluZywgbWFzazogc3RyaW5nLCByYW5nZVN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgc3RyaXBwZWRWYWx1ZTogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKGRpc3BWYWx1ZS5sZW5ndGgpO1xyXG5cclxuICAgIHJhbmdlU3RyID0gdGhpcy53aW5fcm5nX2Jvb2wocmFuZ2VTdHIpO1xyXG4gICAgcmFuZ2VTdHIgPSBTdHJVdGlsLm1ha2VQcmludGFibGVUb2tlbnMocmFuZ2VTdHIsIFNFUV8yX0hUTUwpO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IHJhbmdlU3RyLmluZGV4T2YoJywnKTtcclxuICAgIGxldCB0cnVlU3RyOiBzdHJpbmcgPSByYW5nZVN0ci5zdWJzdHIoMCwgaSk7XHJcbiAgICB0cnVlU3RyID0gU3RyVXRpbC5tYWtlUHJpbnRhYmxlVG9rZW5zKHRydWVTdHIsIEhUTUxfMl9TVFIpO1xyXG4gICAgaSA9IDA7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IGRpc3BWYWx1ZS5sZW5ndGggJiYgaSA8IG1hc2subGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKG1hc2suY2hhckNvZGVBdChpKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19YKSB7XHJcbiAgICAgICAgc3RyaXBwZWRWYWx1ZS5BcHBlbmQoZGlzcFZhbHVlLmNoYXJBdChpKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCB2YWw6IHN0cmluZyA9IHN0cmlwcGVkVmFsdWUuVG9TdHJpbmcoKTtcclxuICAgIGlmICh0cnVlU3RyLmxlbmd0aCA8IHZhbC5sZW5ndGgpIHtcclxuICAgICAgdmFsID0gdmFsLnN1YnN0cigwLCB0cnVlU3RyLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHZhbC5sZW5ndGggPCB0cnVlU3RyLmxlbmd0aCkge1xyXG4gICAgICAgIHRydWVTdHIgPSB0cnVlU3RyLnN1YnN0cigwLCB2YWwubGVuZ3RoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICh2YWwudG9VcHBlckNhc2UoKSA9PT0gdHJ1ZVN0ci50b1VwcGVyQ2FzZSgpKSA/IFwiMVwiIDogXCIwXCI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29udmVydGluZyB0aGUgZGlzcGxheWVkIHZhbHVlIG9mIGEgc3RyaW5nIHRvIGludGVybmFsXHJcbiAgLy8vICAgcmVwcmVzZW50YXRpb24gbXVzdCByZW1vdmUgdGhlIG1hc2tpbmcgY2hhcmFjdGVycyBmcm9tIGl0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHRvQWxwaGEoZGlzcFZhbHVlOiBzdHJpbmcsIHBpYzogUElDKTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgcGljdHVyZTogc3RyaW5nID0gcGljLmdldE1hc2soKTtcclxuICAgIGxldCBidWZmZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihwaWMuZ2V0TWFza1NpemUoKSk7XHJcbiAgICBsZXQgSXNBbHBoYURCQ1M6IGJvb2xlYW4gPSBVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpICYmIHBpYy5pc0F0dHJBbHBoYSgpO1xyXG4gICAgbGV0IGN1cnJQaWN0dXJlOiBudW1iZXI7XHJcbiAgICBsZXQgaTogbnVtYmVyID0gY3VyclBpY3R1cmUgPSAwO1xyXG5cclxuICAgIGZvciAoY3VyclBpY3R1cmUgPSBpID0gMDsgaSA8IGRpc3BWYWx1ZS5sZW5ndGggJiYgY3VyclBpY3R1cmUgPCBwaWN0dXJlLmxlbmd0aDsgaSsrLCBjdXJyUGljdHVyZSsrKSB7XHJcbiAgICAgIGlmIChEaXNwbGF5Q29udmVydG9yLmlzQWxwaGFQb3NpdGlvbmFsRGlyZWN0aXZlKHBpY3R1cmUuY2hhckF0KGN1cnJQaWN0dXJlKSkpIHtcclxuICAgICAgICBidWZmZXIuQXBwZW5kKGRpc3BWYWx1ZS5jaGFyQXQoaSkpO1xyXG5cclxuICAgICAgICBpZiAoSXNBbHBoYURCQ1MpIHtcclxuICAgICAgICAgIC8vIGEgREJDUyBjaGFyYWN0ZXIgaW4gXCJkaXNwVmFsdWVcIiBjb25zdW1lcyB0d28gY2hhcmFjdGVycyBpbiBcInBpY3R1cmVcIlxyXG4gICAgICAgICAgbGV0IHN0ckRzcFZhbE9uZUNoYXI6IHN0cmluZyA9IGRpc3BWYWx1ZS5zdWJzdHIoaSwgMSk7XHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmxlbkIoc3RyRHNwVmFsT25lQ2hhcikgPT09IDIpIHtcclxuICAgICAgICAgICAgY3VyclBpY3R1cmUgPSBjdXJyUGljdHVyZSArIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnVmZmVyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+aXMgY2hlY2tlZCBjaGFyIEFscGhhIFBvc2l0aW9uYWwgRGlyZWN0aXZlPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBpc0FscGhhUG9zaXRpb25hbERpcmVjdGl2ZSh0b0NoZWNrOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBhc2NpaTogbnVtYmVyID0gdG9DaGVjay5jaGFyQ29kZUF0KDApO1xyXG4gICAgcmV0dXJuIChhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19YIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX1UgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfTCB8fFxyXG4gICAgICBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19OIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0ogfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfRyB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19TIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX1QpO1xyXG5cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb21wYXJhdGl2ZSBuZXdWYWx1ZSB3aXRoIHBvc3NpYmxlIFJhbmdlIGluIENvbnRpbnVvdXNSYW5nZVZhbHVlcy9kaXNjcmV0ZVJhbmdlVmFsdWVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IG5ld1ZhbHVlIGlmIGl0IHBvc3NpYmxlLCBvbGQgdmFsdWUgb3dlcnZpc2VcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZmlsbEFscGhhQnlSYW5nZShDb250aW51b3VzUmFuZ2VWYWx1ZXM6IExpc3Q8c3RyaW5nPiwgZGlzY3JldGVSYW5nZVZhbHVlczogTGlzdDxzdHJpbmc+LCBuZXdWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgdG1wQnVmZmVyOiBzdHJpbmcgPSB0aGlzLmZpbGxBbHBoYUJ5RGlzY3JldGVSYW5nZVZhbHVlcyhkaXNjcmV0ZVJhbmdlVmFsdWVzLCBuZXdWYWx1ZSk7XHJcbiAgICBpZiAodG1wQnVmZmVyICE9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0bXBCdWZmZXI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdG1wQnVmZmVyID0gdGhpcy5maWxsQWxwaGFCeUNvbnRpbnVvdXNSYW5nZVZhbHVlcyhDb250aW51b3VzUmFuZ2VWYWx1ZXMsIG5ld1ZhbHVlKTtcclxuICAgICAgaWYgKHRtcEJ1ZmZlciAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiB0bXBCdWZmZXI7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKGRpc2NyZXRlUmFuZ2VWYWx1ZXMgIT09IG51bGwpIHtcclxuICAgICAgICAgIHRtcEJ1ZmZlciA9IHRoaXMuY29tcGxldGVBbHBoYUJ5UmFuZ2UoZGlzY3JldGVSYW5nZVZhbHVlcywgbmV3VmFsdWUpO1xyXG4gICAgICAgICAgaWYgKHRtcEJ1ZmZlciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdG1wQnVmZmVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gdW5wb3NzaWJsZSB0byBmaW5kIGl0IGluIHRoZSByYW5nZSByZXR1cm4gbm90IGNoYW5nZWQgb2xkdmFsdWVcclxuICAgIHJldHVybiBuZXdWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBmaWxsIEFscGhhIHN0cmluZyBieSBkaXNjcmV0ZSByYW5nZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkaXNjcmV0ZVJhbmdlVmFsdWVzXCI+dmVjdG9yIG9mIGRpc2NyZXRlIHJhbmdlIHZhbHVlc1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmV3VmFsdWVcIj52YWx1ZSwgdHJ5IGZvdW5kIGluIHRoZSB2ZWN0b3Igb2YgZGlzY3JldGUgcmFuZ2VzXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBmb3VuZCB2YWx1ZSBvciBudWxsKG5vdCBmb3VuZClcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGZpbGxBbHBoYUJ5RGlzY3JldGVSYW5nZVZhbHVlcyhkaXNjcmV0ZVJhbmdlVmFsdWVzOiBMaXN0PHN0cmluZz4sIG5ld1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKGRpc2NyZXRlUmFuZ2VWYWx1ZXMgIT09IG51bGwpIHtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGRpc2NyZXRlUmFuZ2VWYWx1ZXMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgICBsZXQgZGlzY3JldGVWYWx1ZTogc3RyaW5nID0gZGlzY3JldGVSYW5nZVZhbHVlcy5nZXRfSXRlbShpKTtcclxuICAgICAgICBsZXQgdHJ1bmNhdGVkVmFsdWU6IHN0cmluZyA9IGRpc2NyZXRlVmFsdWUuc3Vic3RyKDAsIE1hdGgubWluKG5ld1ZhbHVlLmxlbmd0aCwgZGlzY3JldGVWYWx1ZS5sZW5ndGgpKTtcclxuICAgICAgICBpZiAobmV3VmFsdWUudG9VcHBlckNhc2UoKSA9PT0gdHJ1bmNhdGVkVmFsdWUudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGRpc2NyZXRlVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBmaWxsIEFscGhhIHN0cmluZyBieSBjb250aW51b3VzIHJhbmdlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIkNvbnRpbnVvdXNSYW5nZVZhbHVlc1wiPnZlY3RvciBvZiBjb250aW51b3VzIHJhbmdlIHZhbHVlc1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmV3VmFsdWVcIj52YWx1ZSwgdHJ5IGZvdW5kIGluIHRoZSB2ZWN0b3Igb2YgY29udGludW91cyByYW5nZXNcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGZvdW5kIHZhbHVlIG9yIG51bGwobm90IGZvdW5kKVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgZmlsbEFscGhhQnlDb250aW51b3VzUmFuZ2VWYWx1ZXMoQ29udGludW91c1JhbmdlVmFsdWVzOiBMaXN0PHN0cmluZz4sIG5ld1ZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbmV3VmFsdWUgPSBTdHJVdGlsLnJ0cmltKG5ld1ZhbHVlKTtcclxuXHJcblxyXG4gICAgaWYgKENvbnRpbnVvdXNSYW5nZVZhbHVlcyAhPT0gbnVsbCkge1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgQ29udGludW91c1JhbmdlVmFsdWVzLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgbGV0IGZyb206IHN0cmluZyA9IENvbnRpbnVvdXNSYW5nZVZhbHVlcy5nZXRfSXRlbShpKTtcclxuICAgICAgICBsZXQgdG86IHN0cmluZyA9IENvbnRpbnVvdXNSYW5nZVZhbHVlcy5nZXRfSXRlbShpID0gaSArIDEpO1xyXG4gICAgICAgIGlmIChOU3RyaW5nLkNvbXBhcmVPcmRpbmFsKG5ld1ZhbHVlLCBmcm9tKSA+PSAwICYmIE5TdHJpbmcuQ29tcGFyZU9yZGluYWwobmV3VmFsdWUsIHRvKSA8PSAwKSB7XHJcbiAgICAgICAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVHJ5IHRvIGNvbXBsZXRlIHRoZSBuZXdWYWx1ZSB1c2luZyB0aGUgUmFuZ2VcclxuICAvLy8gICBmaXJzdCB0cnkgdG8gY29tbGV0ZSB0aGUgdmFsdWUgZm9yIGNhc2UgbWVhbmluZyBhbmQgYWZ0ZXIgdGhhdCBmb3IgaWdub3JlIGNhc2VcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmVjdG9yXCI+b2YgcmFuZ2VzXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjaGVja2VkXCI+dmFsdWVcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHZhbHVlIGNvbXBsZXRlZCBieSByYW5nZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgY29tcGxldGVBbHBoYUJ5UmFuZ2UoZGlzY3JldGVSYW5nZVZhbHVlczogTGlzdDxzdHJpbmc+LCBuZXdWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgbWF4Q29pbmNpZGU6IG51bWJlcltdID0gbmV3IEFycmF5PG51bWJlcj4oMik7XHJcbiAgICBmb3IgKGxldCBfYWk6IG51bWJlciA9IDA7IF9haSA8IG1heENvaW5jaWRlLmxlbmd0aDsgKytfYWkpXHJcbiAgICAgIG1heENvaW5jaWRlW19haV0gPSAwO1xyXG5cclxuICAgIGxldCBiZXN0SXRlbTogc3RyaW5nW10gPSBuZXcgQXJyYXk8c3RyaW5nPigyKTtcclxuICAgIGZvciAobGV0IF9haTogbnVtYmVyID0gMDsgX2FpIDwgYmVzdEl0ZW0ubGVuZ3RoOyArK19haSlcclxuICAgICAgYmVzdEl0ZW1bX2FpXSA9IG51bGw7XHJcblxyXG4gICAgbGV0IENIRUNLX0NBU0U6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgSUdOT1JFX0NBU0U6IG51bWJlciA9IDE7XHJcblxyXG4gICAgbGV0IGNhc2VMZXR0ZXJzOiBudW1iZXIgPSBDSEVDS19DQVNFO1xyXG5cclxuICAgIHdoaWxlIChjYXNlTGV0dGVycyA9PT0gQ0hFQ0tfQ0FTRSB8fCBjYXNlTGV0dGVycyA9PT0gSUdOT1JFX0NBU0UpIHtcclxuICAgICAgbGV0IGxvd2VyVmFsdWU6IHN0cmluZztcclxuICAgICAgaWYgKGNhc2VMZXR0ZXJzID09PSBDSEVDS19DQVNFKSB7XHJcbiAgICAgICAgbG93ZXJWYWx1ZSA9IG5ld1ZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxvd2VyVmFsdWUgPSBuZXdWYWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGxvd2VyVmFsdWUgPSBTdHJVdGlsLnJ0cmltKGxvd2VyVmFsdWUpO1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZGlzY3JldGVSYW5nZVZhbHVlcy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICAgIGxldCB3cm9uZ0xldHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBjdXJyQ29pbmNpZGU6IG51bWJlciA9IDA7XHJcbiAgICAgICAgbGV0IHJhbmdlSXRlbTogc3RyaW5nO1xyXG4gICAgICAgIGlmIChjYXNlTGV0dGVycyA9PT0gQ0hFQ0tfQ0FTRSkge1xyXG4gICAgICAgICAgcmFuZ2VJdGVtID0gZGlzY3JldGVSYW5nZVZhbHVlcy5nZXRfSXRlbShpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByYW5nZUl0ZW0gPSBkaXNjcmV0ZVJhbmdlVmFsdWVzLmdldF9JdGVtKGkpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBsb3dMZW5ndGg6IG51bWJlciA9IGxvd2VyVmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIGxldCByYW5nZUxlbmd0aDogbnVtYmVyID0gcmFuZ2VJdGVtLmxlbmd0aDtcclxuICAgICAgICBpZiAobG93TGVuZ3RoIDwgcmFuZ2VMZW5ndGgpIHtcclxuICAgICAgICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCBsb3dMZW5ndGg7IGogPSBqICsgMSkge1xyXG4gICAgICAgICAgICBpZiAoIShsb3dlclZhbHVlLmNoYXJBdChqKSA9PT0gcmFuZ2VJdGVtLmNoYXJBdChqKSkpIHtcclxuICAgICAgICAgICAgICB3cm9uZ0xldHRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3VyckNvaW5jaWRlID0gY3VyckNvaW5jaWRlICsgMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB3cm9uZ0xldHRlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3VyckNvaW5jaWRlID4gbWF4Q29pbmNpZGVbY2FzZUxldHRlcnNdICYmICF3cm9uZ0xldHRlcikge1xyXG4gICAgICAgICAgYmVzdEl0ZW1bY2FzZUxldHRlcnNdID0gZGlzY3JldGVSYW5nZVZhbHVlcy5nZXRfSXRlbShpKTtcclxuICAgICAgICAgIG1heENvaW5jaWRlW2Nhc2VMZXR0ZXJzXSA9IGN1cnJDb2luY2lkZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY2FzZUxldHRlcnMgPSBjYXNlTGV0dGVycyArIDE7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGlmIChiZXN0SXRlbVtDSEVDS19DQVNFXSAhPT0gbnVsbClcclxuICAgICAgcmV0dXJuIGJlc3RJdGVtW0NIRUNLX0NBU0VdO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChiZXN0SXRlbVtJR05PUkVfQ0FTRV0gIT09IG51bGwpXHJcbiAgICAgICAgcmV0dXJuIGJlc3RJdGVtW0lHTk9SRV9DQVNFXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHNldERhdGVDaGFyKGRhdGVDaGFyOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuREFURUNIQVIgPSBkYXRlQ2hhcjtcclxuICB9XHJcblxyXG4gIGdldERhdGVDaGFyKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5EQVRFQ0hBUjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbHVlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdG9yYWdlQXR0cmlidXRlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBTdHJpbmdWYWx1ZVRvTWdWYWx1ZSh2YWx1ZTogc3RyaW5nLCBzdG9yYWdlQXR0cmlidXRlOiBTdG9yYWdlQXR0cmlidXRlLCBmaWxsZXI6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIpOiBhbnkge1xyXG4gICAgc3dpdGNoIChzdG9yYWdlQXR0cmlidXRlKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6IHtcclxuICAgICAgICBsZXQgbmV3VmFsOiBzdHJpbmcgPSB2YWx1ZTtcclxuICAgICAgICBuZXdWYWwgPSBOU3RyaW5nLlBhZFJpZ2h0KG5ld1ZhbCwgbGVuZ3RoLCBmaWxsZXIpO1xyXG4gICAgICAgIHJldHVybiBuZXdWYWw7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICByZXR1cm4gbmV3IE5VTV9UWVBFKHZhbHVlKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIEJlaW5nIHVzZWQgdG8gc2VuZCBwYXJhbWV0ZXJzIHRvIHRoZSAndGltZV9icmVhaycgbWV0aG9kXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBUaW1lQnJlYWtQYXJhbXMge1xyXG4gIGhvdXI6IG51bWJlciA9IDA7XHJcbiAgbWludXRlOiBudW1iZXIgPSAwO1xyXG4gIHNlY29uZDogbnVtYmVyID0gMDtcclxuXHJcbiAgY29uc3RydWN0b3IoKTtcclxuICBjb25zdHJ1Y3Rvcihob3VyXzogbnVtYmVyLCBtaW51dGVfOiBudW1iZXIsIHNlY29uZF86IG51bWJlcik7XHJcbiAgY29uc3RydWN0b3IoaG91cl8/OiBudW1iZXIsIG1pbnV0ZV8/OiBudW1iZXIsIHNlY29uZF8/OiBudW1iZXIpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzEoaG91cl8sIG1pbnV0ZV8sIHNlY29uZF8pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8wKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xKGhvdXJfOiBudW1iZXIsIG1pbnV0ZV86IG51bWJlciwgc2Vjb25kXzogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmhvdXIgPSBob3VyXztcclxuICAgIHRoaXMubWludXRlID0gbWludXRlXztcclxuICAgIHRoaXMuc2Vjb25kID0gc2Vjb25kXztcclxuICB9XHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgQmVpbmcgdXNlZCB0byBzZW5kIGludCBieSBSZWZcclxuLy8vIDwvc3VtbWFyeT5cclxuY2xhc3MgSW50UmVmIHtcclxuICB2YWw6IG51bWJlciA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZhbF86IG51bWJlcikge1xyXG4gICAgdGhpcy52YWwgPSB2YWxfO1xyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBCZWluZyB1c2VkIHRvIHNlbmQgcGFyYW1ldGVycyB0byB0aGUgJ2RhdGVfaV8yX25tJyBtZXRob2RcclxuLy8vIDwvc3VtbWFyeT5cclxuY2xhc3MgRGF0ZU5hbWVQYXJhbXMge1xyXG4gIG91dFZhbDogc3RyaW5nW10gPSBudWxsO1xyXG4gIGxlbjogbnVtYmVyID0gMDtcclxuICBvdXRJZHg6IG51bWJlciA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKG91dF86IHN0cmluZ1tdLCBvdXRJZHhfOiBudW1iZXIsIGxlbl86IG51bWJlcikge1xyXG4gICAgdGhpcy5vdXRWYWwgPSBvdXRfO1xyXG4gICAgdGhpcy5vdXRJZHggPSBvdXRJZHhfO1xyXG4gICAgdGhpcy5sZW4gPSBsZW5fO1xyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBCZWluZyB1c2VkIHRvIHNlbmQgcGFyYW1ldGVycyB0byB0aGUgJ2RhdGVfYnJlYWtfZGF0ZW1vZGUnIG1ldGhvZFxyXG4vLy8gICBpdCdzIHN0cnVjdFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgRGF0ZUJyZWFrUGFyYW1zIHtcclxuICBkYXk6IG51bWJlciA9IDA7XHJcbiAgZG93OiBudW1iZXIgPSAwO1xyXG4gIGRveTogbnVtYmVyID0gMDtcclxuICBtb250aDogbnVtYmVyID0gMDtcclxuICB5ZWFyOiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKHllYXJfOiBudW1iZXIsIG1vbnRoXzogbnVtYmVyLCBkYXlfOiBudW1iZXIsIGRveV86IG51bWJlciwgZG93XzogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3Rvcih5ZWFyXz86IG51bWJlciwgbW9udGhfPzogbnVtYmVyLCBkYXlfPzogbnVtYmVyLCBkb3lfPzogbnVtYmVyLCBkb3dfPzogbnVtYmVyKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzAoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8xKHllYXJfLCBtb250aF8sIGRheV8sIGRveV8sIGRvd18pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8wKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xKHllYXJfOiBudW1iZXIsIG1vbnRoXzogbnVtYmVyLCBkYXlfOiBudW1iZXIsIGRveV86IG51bWJlciwgZG93XzogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnllYXIgPSB5ZWFyXztcclxuICAgIHRoaXMubW9udGggPSBtb250aF87XHJcbiAgICB0aGlzLmRheSA9IGRheV87XHJcbiAgICB0aGlzLmRveSA9IGRveV87XHJcbiAgICB0aGlzLmRvdyA9IGRvd187XHJcbiAgfVxyXG59XHJcbiJdfQ==
1656
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlzcGxheUNvbnZlcnRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9ndWkvRGlzcGxheUNvbnZlcnRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxRQUFRLEVBQVEsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RixPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFdBQVcsRUFDWCxlQUFlLEVBQ2hCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUdqRCxNQUFNLE9BQU8sZ0JBQWdCO0lBWTNCO1FBWFEsaUJBQVksR0FBaUIsSUFBSSxDQUFDO1FBQ2xDLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFXM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDO0lBQ2pELENBQUM7SUFURCxNQUFNLEtBQUssUUFBUTtRQUNqQixJQUFJLGdCQUFnQixDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFDdkMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztTQUNyRDtRQUNELE9BQU8sZ0JBQWdCLENBQUMsU0FBUyxDQUFDO0lBQ3BDLENBQUM7SUFNRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFnQkQsT0FBTyxDQUFDLE9BQWUsRUFBRSxRQUFnQixFQUFFLEdBQVEsRUFBRSxTQUFrQixFQUFFLG1CQUF3QixFQUFFLDRCQUFpQyxFQUFFLGdDQUEwQyxFQUFFLHVCQUFpQztRQUNqTixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLDRCQUE0QixDQUFDLENBQUM7YUFFekcsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSw0QkFBNEIsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDOztZQUc5SSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLDRCQUE0QixFQUFFLGdDQUFnQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDM0ssQ0FBQztJQUVPLFNBQVMsQ0FBQyxPQUFlLEVBQUUsUUFBZ0IsRUFBRSxHQUFRLEVBQUUsU0FBa0IsRUFBRSxPQUFlLEVBQUUsbUJBQTRCO1FBQzlILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFTyxTQUFTLENBQUMsT0FBZSxFQUFFLFFBQWdCLEVBQUUsR0FBUSxFQUFFLFNBQWtCLEVBQUUsVUFBbUIsRUFBRSxPQUFlLEVBQUUsbUJBQTRCO1FBQ25KLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUUxRyxDQUFDO0lBZU0sU0FBUyxDQUFDLE9BQWUsRUFBRSxRQUFnQixFQUFFLEdBQVEsRUFBRSxTQUFrQixFQUFFLFVBQW1CLEVBQUUsT0FBZSxFQUFFLFdBQW9CLEVBQUUsdUJBQWdDO1FBQzVLLElBQUksR0FBRyxHQUFXLEVBQUUsQ0FBQztRQUNyQixJQUFJLFFBQVEsR0FBVyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFFM0QsUUFBUSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFFckIsS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7WUFDNUIsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUMzQixHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ3RFLE1BQU07WUFFUixLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUs3QixJQUFLLE1BQU0sR0FBRyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFHN0MsSUFBSyxHQUFHLEdBQVcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDM0QsSUFBSSxJQUFJLEdBQVcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFHN0QsY0FBYyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDcEQsY0FBYyxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFdEQsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNwQyxjQUFjLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRCxjQUFjLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUd2RCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBdUI7b0JBQ3pELEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUUzQixJQUFJLFNBQVMsRUFBRTtvQkFDYixJQUFJLEdBQUcsSUFBSSxFQUFFO3dCQUNYLE9BQU8sSUFBSSxDQUFDO29CQUVkLElBQUksR0FBRyxHQUFXLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDOUIsT0FBTyxHQUFHLENBQUM7aUJBQ1o7O29CQUVDLE9BQU8sR0FBRyxDQUFDO2FBQ2Q7WUFDRCxLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxQixJQUFJLFNBQVMsRUFBRTtvQkFDYixJQUFJLEVBQVEsQ0FBQztvQkFDYixFQUFFLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ3hELE9BQU8sRUFBRSxDQUFDO2lCQUNYO3FCQUNJO29CQUNILEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixDQUFDLENBQUM7b0JBQ3BFLE1BQU07aUJBQ1A7YUFDRjtZQUNELEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFCLElBQUksU0FBUyxFQUFFO29CQUNiLElBQUksRUFBUSxDQUFDO29CQUNiLEVBQUUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUMvQyxPQUFPLEVBQUUsQ0FBQztpQkFDWDtxQkFDSTtvQkFDSCxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLHVCQUF1QixDQUFDLENBQUM7b0JBQzNELE1BQU07aUJBQ1A7YUFDRjtZQUNELEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzdCLElBQUksTUFBZSxDQUFDO2dCQUNwQixNQUFNLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNwRCxPQUFPLE1BQU0sQ0FBQzthQUNmO1lBRUQsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO2dCQUN4QixHQUFHLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEMsTUFBTTtZQUNSLEtBQUssZ0JBQWdCLENBQUMsV0FBVztnQkFDL0IsR0FBRyxHQUFHLE9BQU8sQ0FBQztnQkFDZCxNQUFNO1NBQ1Q7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFlRCxPQUFPLENBQUMsU0FBYyxFQUFFLEdBQVEsRUFBRSxPQUFlLEVBQUUsZUFBdUI7UUFDeEUsSUFBSSxHQUFHLEdBQVcsRUFBRSxDQUFDO1FBRXJCLFFBQVEsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JCLEtBQUssZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBQzVCLEtBQUssZ0JBQWdCLENBQUMsT0FBTztnQkFDM0IsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQyxNQUFNO1lBR1IsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUFFO29CQUM3QixTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUU5QixJQUFJLEdBQUcsR0FBVyxTQUFTLENBQUMsTUFBTSxDQUFDO29CQUNuQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7NEJBQ3pELE1BQU07d0JBQ1IsR0FBRyxFQUFFLENBQUM7cUJBQ1A7b0JBQ0QsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUc7d0JBQ3hCLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBRXZFLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO3dCQUN0RCxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFHdkMsSUFBSyxHQUFHLEdBQVcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDM0QsSUFBSSxJQUFJLEdBQVcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFHN0QsY0FBYyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDcEQsY0FBYyxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFLdEQsSUFBSyxNQUFNLEdBQUcsR0FBRyxDQUFDLHdCQUF3QixFQUFFLENBQUM7b0JBRTdDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBRTdDLGNBQWMsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3BELGNBQWMsQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3hEO2dCQUNDLE1BQU07WUFHUixLQUFLLGdCQUFnQixDQUFDLElBQUk7Z0JBQzFCO29CQUNFLElBQUksRUFBUSxDQUFDO29CQUViLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUTt3QkFDL0IsRUFBRSxHQUFHLElBQUksSUFBSSxDQUFFLFNBQVMsQ0FBQyxDQUFDOzt3QkFFMUIsRUFBRSxHQUFHLFNBQVMsQ0FBQztvQkFDakIsR0FBRyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQzVDO2dCQUNELE1BQU07WUFHTixLQUFLLGdCQUFnQixDQUFDLElBQUk7Z0JBQUU7b0JBQzFCLElBQUksRUFBUSxDQUFDO29CQUdiLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUNqQzt3QkFDRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQzt3QkFDaEIsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFOzRCQUN0QixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDN0MsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQy9DLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO2dDQUM5QixFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDbEQ7cUJBQ0Y7O3dCQUdDLEVBQUUsR0FBRyxTQUFTLENBQUM7b0JBRWpCLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3ZDO2dCQUNDLE1BQU07WUFHUixLQUFLLGdCQUFnQixDQUFDLE9BQU87Z0JBQzNCLEdBQUcsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ25ELE1BQU07WUFHUixLQUFLLGdCQUFnQixDQUFDLElBQUk7Z0JBQ3hCLEdBQUcsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUM1RCxNQUFNO1NBQ1Q7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFZTSxPQUFPLENBQUMsT0FBZSxFQUFFLEdBQVE7UUFDdEMsSUFBSSxLQUFLLEdBQWEsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFlTyxTQUFTLENBQUMsT0FBZSxFQUFFLEdBQVEsRUFBRSxRQUFnQixFQUFFLFVBQW1CLEVBQUUsV0FBb0I7UUFDdEcsSUFBSSxHQUFHLEdBQVcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BDLElBQUksT0FBTyxHQUFXLEdBQUcsQ0FBQztRQUMxQixJQUFJLE9BQU8sR0FBVyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEMsSUFBSSxNQUFjLENBQUM7UUFFbkIsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQzFCLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQzdIO2FBQ0k7WUFDSCxJQUFJLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFFOUQ7Z0JBRUUsSUFBSSxjQUFjLEdBQVcsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxPQUFPLEdBQUcsY0FBYyxFQUFFO29CQUM1QixPQUFPLEdBQUcsY0FBYyxDQUFDO2lCQUMxQjtnQkFDRCxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDbEQ7aUJBQ0ksSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO2dCQUN6QixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFO29CQUM1QixPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztpQkFDMUI7Z0JBQ0QsSUFBSSxXQUFXLEVBQUU7b0JBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQzdIO3FCQUNJO29CQUNILE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDckM7YUFDRjtTQUNGO1FBR0QsSUFBSSxVQUFVLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUU7WUFDbkYsSUFBSSxFQUFFLEdBQTBCLElBQUkscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEUsSUFBSSxxQkFBcUIsR0FBaUIsRUFBRSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDeEUsSUFBSSxtQkFBbUIsR0FBaUIsRUFBRSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDcEUsSUFBSSxxQkFBcUIsS0FBSyxJQUFJLElBQUksbUJBQW1CLEtBQUssSUFBSSxFQUFFO2dCQUNsRSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ3BGO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8saUJBQWlCLENBQUMsSUFBWSxFQUFFLElBQVk7UUFFbEQsSUFBSSxFQUFVLENBQUM7UUFDZixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLEtBQUssRUFBRTtZQUM3QyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3pCO2FBQ0k7WUFDSCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLEtBQUssRUFBRTtnQkFDN0MsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN6QjtpQkFDSTtnQkFDSCxFQUFFLEdBQUcsSUFBSSxDQUFDO2FBQ1g7U0FDRjtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUlPLFlBQVksQ0FBQyxPQUFZLEVBQUUsT0FBZSxFQUFFLE9BQVksRUFBRSxXQUFvQixFQUFFLFdBQXFCO1FBQzNHLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVyRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBaUIsRUFBRSxPQUFlLEVBQUUsT0FBaUIsRUFBRSxXQUFvQjtRQUNoRyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFXTyxjQUFjLENBQUMsT0FBaUIsRUFBRSxPQUFlLEVBQUUsT0FBaUIsRUFBRSxXQUFvQixFQUFFLFdBQW9CO1FBQ3RILElBQUksT0FBTyxHQUFXLENBQUMsQ0FBQztRQUN4QixJQUFJLE9BQU8sR0FBVyxDQUFDLENBQUM7UUFDeEIsSUFBSSxNQUFNLEdBQWEsSUFBSSxLQUFLLENBQVMsT0FBTyxDQUFDLENBQUM7UUFFbEQsSUFBSSxXQUFXLElBQUksZUFBZSxDQUFDLG1CQUFtQixFQUFFLEVBQUU7WUFDeEQsSUFBSSxJQUFJLEdBQVcsQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sT0FBTyxHQUFHLE9BQU8sSUFBSSxJQUFJLEdBQUcsT0FBTyxFQUFFO2dCQUMxQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLFVBQVUsRUFBRTtvQkFDN0QsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRTt3QkFDNUIsSUFBSSxNQUFNLEdBQVcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM1RCxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFOzRCQUN0QyxJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsT0FBTyxFQUFFO2dDQUN6QixJQUFJLE9BQU8sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUU7b0NBQ2pFLElBQUksV0FBVyxFQUFFO3dDQUNmLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7cUNBQ25GO3lDQUNJO3dDQUNILE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO3FDQUNyQztvQ0FDRCxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztpQ0FDdkI7cUNBQ0k7b0NBQ0gsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO2lDQUN0Qjs2QkFDRjtpQ0FDSTtnQ0FDSCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7NkJBQ3RCO3lCQUNGOzZCQUNJOzRCQUNILElBQUksV0FBVyxFQUFFO2dDQUNmLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7NkJBQ25GO2lDQUNJO2dDQUNILE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDOzZCQUNyQzt5QkFDRjtxQkFDRjt5QkFDSTt3QkFDSCxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQVE7cUJBQzdCO2lCQUNGO3FCQUNJO29CQUNILE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDbkM7Z0JBQ0QsT0FBTyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7YUFDdkI7WUFDRCxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNsRDtRQUVELE9BQU8sT0FBTyxHQUFHLE9BQU8sRUFBRTtZQUN4QixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLFVBQVUsRUFBRTtnQkFDN0QsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRTtvQkFDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxXQUFXLEVBQUU7d0JBQ2YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7cUJBQzlFO3lCQUNJO3dCQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQ3BDO29CQUNELE9BQU8sR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2lCQUN2QjtxQkFDSTtvQkFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFRO2lCQUM5QjthQUNGO2lCQUNJO2dCQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDcEM7WUFDRCxPQUFPLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztTQUN2QjtRQUNELE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBUUQsUUFBUSxDQUFDLE9BQWUsRUFBRSxHQUFRLEVBQUUsT0FBZSxFQUFFLG1CQUE0QjtRQUMvRSxJQUFJLElBQUksR0FBVyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakMsSUFBSSxRQUFRLEdBQVcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLElBQUksSUFBSSxHQUFXLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQVFELFFBQVEsQ0FBQyxPQUFlLEVBQUUsR0FBUSxFQUFFLG1CQUE0QjtRQUM5RCxJQUFJLElBQUksR0FBVyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakMsSUFBSSxRQUFRLEdBQVcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLElBQUksSUFBSSxHQUFXLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQVFELHNCQUFzQixDQUFDLE9BQWUsRUFBRSxHQUFRLEVBQUUsT0FBZTtRQUUvRCxJQUFJLElBQUksR0FBVyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2RCxJQUFJLFdBQTRCLENBQUM7UUFFakMsV0FBVyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVELElBQUksV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDO1lBQ3ZCLFdBQVcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFFNUMsSUFBSSxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDekUsT0FBTyxJQUFJLENBQUM7UUFFZCxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsSUFBSSxNQUFNLEdBQWEsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVwRCxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFNUIsSUFBSSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztRQUM1QixJQUFLLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFO1lBRWQsUUFBUSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNwQyxLQUFLLFlBQVksQ0FBQyxNQUFNO29CQUFFO3dCQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ3ZELElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDL0IsTUFBTSxJQUFJLENBQUMsQ0FBQzt3QkFDWixHQUFHLElBQUksQ0FBQyxDQUFDO3FCQUNWO29CQUNELE1BQU07Z0JBQ04sS0FBSyxZQUFZLENBQUMsUUFBUTtvQkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUN2RCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ25ELElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQy9CLE1BQU0sSUFBSSxDQUFDLENBQUM7b0JBQ1osR0FBRyxJQUFJLENBQUMsQ0FBQztvQkFDVCxNQUFNO2dCQUNSO29CQUNFLE1BQU0sRUFBRSxDQUFDO29CQUNULEdBQUcsRUFBRSxDQUFDO29CQUNOLE1BQU07YUFDVDtTQUNGO1FBQ0QsSUFBSSxRQUFRLEdBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhFLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFTRCw0QkFBNEIsQ0FBQyxVQUFnQixFQUFFLEdBQVE7UUFDckQsSUFBSSxNQUFjLENBQUM7UUFDbkIsSUFBSSxVQUEyQixDQUFDO1FBQ2hDLElBQUksU0FBUyxHQUFXLENBQUMsQ0FBQztRQUMxQixJQUFJLElBQUksR0FBVyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUMsSUFBSSxHQUFHLEdBQVcsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZDLElBQUksS0FBSyxHQUFXLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFHOUMsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO2dCQUNaLElBQUksU0FBUyxLQUFLLENBQUM7b0JBQ2pCLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLElBQUksSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQzFCO1lBQ0QsTUFBTSxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckQ7YUFDSTtZQUVILElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFDZCxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQzthQUN4QjtZQUVELE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMzRDtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFRRCxzQkFBc0IsQ0FBQyxVQUFnQixFQUFFLEdBQVE7UUFFL0MsSUFBSSxLQUFLLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE1BQU0sR0FBVyxVQUFVLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV6QixPQUFPLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBaUJELGlCQUFpQixDQUFDLE1BQWMsRUFBRSxPQUFlLEVBQUUsSUFBWSxFQUFFLEdBQVEsRUFBRSxjQUF1QixFQUFFLGFBQXNCLEVBQUUsT0FBZTtRQUN6SSxJQUFJLEdBQVcsQ0FBQztRQUNoQixJQUFJLEdBQUcsR0FBVyxDQUFDLENBQUM7UUFDcEIsSUFBSSxHQUFHLEdBQVcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksR0FBRyxHQUFXLENBQUMsQ0FBQztRQUNwQixJQUFJLElBQUksR0FBVyxDQUFDLENBQUM7UUFDckIsSUFBSSxLQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksSUFBSSxHQUFXLENBQUMsQ0FBQztRQUNyQixJQUFJLEtBQUssR0FBVyxDQUFDLENBQUM7UUFDdEIsSUFBSSxNQUFNLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQVMsQ0FBQztRQUNkLElBQUksQ0FBVyxDQUFDO1FBQ2hCLElBQUksTUFBTSxHQUFhLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsSUFBSSxXQUE0QixDQUFDO1FBQ2pDLElBQUksY0FBOEIsQ0FBQztRQUNuQyxJQUFJLE1BQU0sR0FBVyxDQUFDLENBQUM7UUFDdkIsSUFBSSxNQUFNLEdBQVcsSUFBSSxDQUFDO1FBRzFCLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLE9BQU8sRUFBRTtZQUMvQixPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFO2dCQUNyQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2xCLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNsQztRQUdELE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkQsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRTtnQkFDckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQixPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEM7UUFDRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxFQUFFO1lBQ3pELE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUU7Z0JBQ3JCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDbEIsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2xDO1FBR0QsV0FBVyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEUsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxPQUFPLEdBQXFCLElBQUksUUFBUSxDQUFTLElBQUksQ0FBQyxDQUFDO1lBQzNELElBQUksU0FBUyxHQUFxQixJQUFJLFFBQVEsQ0FBUyxNQUFNLENBQUMsQ0FBQztZQUMvRCxJQUFJLFFBQVEsR0FBcUIsSUFBSSxRQUFRLENBQVMsS0FBSyxDQUFDLENBQUM7WUFDN0QsSUFBSSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFbEUsSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDckIsTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDekIsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7U0FDeEI7UUFFRCxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztRQUN4QixLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUMxQixHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUN0QixHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUN0QixXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNkLElBQUksU0FBUyxHQUFxQixJQUFJLFFBQVEsQ0FBUyxPQUFPLENBQUMsQ0FBQztZQUNoRSxRQUFRLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BDLEtBQUssWUFBWSxDQUFDLE1BQU07b0JBQ3RCLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksY0FBYzt3QkFDaEQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs7d0JBRTVELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUM3QyxNQUFNLElBQUksQ0FBQyxDQUFDO29CQUNaLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQ1QsTUFBTTtnQkFDUixLQUFLLFlBQVksQ0FBQyxVQUFVO29CQUMxQixDQUFDLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQzdGLE9BQU8sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO29CQUMxQixNQUFNLElBQUksQ0FBQyxDQUFDO29CQUNaLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQ1QsTUFBTTtnQkFDUixLQUFLLFlBQVksQ0FBQyxNQUFNO29CQUN0QixDQUFDLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ2hGLE1BQU0sRUFBRSxDQUFDO29CQUNULEdBQUcsRUFBRSxDQUFDO29CQUNOLE1BQU07Z0JBQ1IsS0FBSyxZQUFZLENBQUMsT0FBTztvQkFDdkIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUM3RixPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztvQkFDMUIsTUFBTSxJQUFJLENBQUMsQ0FBQztvQkFDWixHQUFHLElBQUksQ0FBQyxDQUFDO29CQUNULE1BQU07Z0JBQ1IsS0FBSyxZQUFZLENBQUMsUUFBUTtvQkFDeEIsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxjQUFjO3dCQUNoRCxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDOzt3QkFFNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzdDLE1BQU0sSUFBSSxDQUFDLENBQUM7b0JBQ1osR0FBRyxJQUFJLENBQUMsQ0FBQztvQkFDVCxNQUFNO2dCQUNSLEtBQUssWUFBWSxDQUFDLE9BQU87b0JBQ3ZCLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksY0FBYzt3QkFDaEQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs7d0JBRTVELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUM5QyxNQUFNLElBQUksQ0FBQyxDQUFDO29CQUNaLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQ1QsTUFBTTtnQkFDUixLQUFLLFlBQVksQ0FBQyxPQUFPO29CQUN2QixJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTt3QkFDbEIsSUFBSSxJQUFJLElBQUksTUFBTSxLQUFLLENBQUM7NEJBQ3RCLE1BQU0sR0FBRyxFQUFFLENBQUM7d0JBQ2QsSUFBSSxVQUFVLEdBQWEsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2RCxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztxQkFDN0M7eUJBQ0k7d0JBQ0gsSUFBSSxRQUFRLEdBQVcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDeEUsSUFBSSxVQUFVLEdBQWEsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDN0QsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7cUJBQzVDO29CQUNELGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUN6RCxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUMvRCxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztvQkFDL0IsR0FBRyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUM7b0JBQ3pCLGNBQWMsR0FBRyxJQUFJLENBQUM7b0JBQ3RCLE1BQU07Z0JBQ1IsS0FBSyxZQUFZLENBQUMsTUFBTTtvQkFDdEIsSUFBSSxNQUFNLEdBQVksR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNyQyxJQUFJLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLGNBQWM7d0JBQ3hDLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7O3dCQUU1RCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDNUMsTUFBTSxJQUFJLENBQUMsQ0FBQztvQkFDWixHQUFHLElBQUksQ0FBQyxDQUFDO29CQUNULE1BQU07Z0JBQ1IsS0FBSyxZQUFZLENBQUMsT0FBTztvQkFDdkIsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxjQUFjO3dCQUNoRCxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDOzt3QkFFNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzVDLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQ1QsTUFBTSxJQUFJLENBQUMsQ0FBQztvQkFDWixNQUFNO2dCQUNSLEtBQUssWUFBWSxDQUFDLFFBQVE7b0JBQ3hCLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztvQkFDL0QsTUFBTSxJQUFJLENBQUMsQ0FBQztvQkFDWixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDakIsR0FBRyxJQUFJLENBQUMsQ0FBQztvQkFDVCxNQUFNO2dCQUNSLEtBQUssWUFBWSxDQUFDLEtBQUs7b0JBQ3JCLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksY0FBYzt3QkFDaEQsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs7d0JBRTVELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUM1QyxHQUFHLEVBQUUsQ0FBQztvQkFDTixNQUFNLEVBQUUsQ0FBQztvQkFDVCxNQUFNO2dCQUNSLEtBQUssWUFBWSxDQUFDLE9BQU87b0JBQ3ZCLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO3dCQUNsQixJQUFJLFNBQVMsR0FBYSxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ3BELENBQUMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUN6Qzt5QkFDSTt3QkFDSCxJQUFJLE1BQU0sR0FBVyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNwRSxJQUFJLFFBQVEsR0FBYSxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN2RCxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDeEM7b0JBQ0QsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3pELE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7b0JBQy9ELE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO29CQUMvQixHQUFHLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQztvQkFDekIsY0FBYyxHQUFHLElBQUksQ0FBQztvQkFDdEIsTUFBTTtnQkFDUixLQUFLLFlBQVksQ0FBQyxNQUFNO29CQUV0QixDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3BELE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ2QsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3pELE1BQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUMxRixNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNsQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBRXBELE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO29CQUMvQixHQUFHLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQztvQkFDekIsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDZCxjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUN0QixNQUFNO2dCQUNSLEtBQUssWUFBWSxDQUFDLE9BQU8sQ0FBQztnQkFDMUIsS0FBSyxZQUFZLENBQUMsT0FBTyxDQUFDO2dCQUMxQixLQUFLLFlBQVksQ0FBQyxPQUFPO29CQUV2QixJQUFJLE1BQU0sR0FBVyxJQUFJLENBQUM7b0JBQzFCLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsT0FBTzt3QkFDdkQsTUFBTSxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzs7d0JBRXJFLE1BQU0sR0FBRyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3RFLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ2QsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3pELE1BQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzVFLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ2QsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNwRCxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztvQkFDL0IsR0FBRyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUM7b0JBQ3pCLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ2QsY0FBYyxHQUFHLElBQUksQ0FBQztvQkFDdEIsTUFBTTtnQkFDUixLQUFLLFlBQVksQ0FBQyxNQUFNO29CQUN0QixJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLGNBQWM7d0JBQ2hELFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7O3dCQUU1RCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQy9GLE1BQU0sSUFBSSxDQUFDLENBQUM7b0JBQ1osR0FBRyxJQUFJLENBQUMsQ0FBQztvQkFDVCxNQUFNO2dCQUNSO29CQUNFLE1BQU0sRUFBRSxDQUFDO29CQUNULEdBQUcsRUFBRSxDQUFDO29CQUNOLE1BQU07YUFDVDtTQUNGO1FBQ0QsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU07WUFDekIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBRXhFLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBS0QsbUJBQW1CLENBQUMsV0FBNEIsRUFBRSxJQUFZLEVBQUUsYUFBc0IsRUFBRSxPQUFlO1FBRXJHLElBQUksSUFBSSxHQUFXLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDcEMsSUFBSSxLQUFLLEdBQVcsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUN0QyxJQUFJLEdBQUcsR0FBVyxXQUFXLENBQUMsR0FBRyxDQUFDO1FBQ2xDLElBQUksR0FBRyxHQUFXLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFDbEMsSUFBSSxHQUFHLEdBQVcsV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUVsQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUU7WUFDYixXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNwQixXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNwQixXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNwQixXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNyQixXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUN2QjthQUNJO1lBQ0gsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksS0FBSyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNuRSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDO1lBQ2xELElBQUksSUFBSSxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqRSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7Z0JBQ1osSUFBSSxHQUFHLENBQUMsQ0FBQzthQUNWO1lBQ0QsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQztZQUNoRCxJQUFJLEtBQUssR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbkUsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQztZQUNsRCxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtnQkFDWixJQUFJLEdBQUcsQ0FBQyxDQUFDO2FBQ1Y7WUFDRCxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO1lBQzdDLElBQUksR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZELElBQUksUUFBUSxHQUFXLENBQUMsQ0FBQztZQUN6QixJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNsQixJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxFQUFFO29CQUN4QyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2lCQUNkO2FBQ0Y7WUFFRCxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRTtnQkFDcEUsSUFBSSxHQUFHLElBQUksR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUM7YUFDOUM7WUFDRCxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUQsR0FBRyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO2dCQUNoQixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7b0JBQ2IsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7aUJBQ2Y7YUFDRjtZQUVELElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtnQkFDZixLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUNuQjtpQkFDSTtnQkFDSCxHQUFHLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTtvQkFDaEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO3dCQUNiLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO3FCQUNmO2lCQUNGO2FBQ0Y7WUFDRCxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDckIsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7WUFDZixXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUN4QixXQUFXLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUMxQixXQUFXLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUN0QixXQUFXLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUN0QixXQUFXLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFpQk8sT0FBTyxDQUFDLEdBQWEsRUFBRSxNQUFjLEVBQUUsR0FBVyxFQUFFLENBQVMsRUFBRSxJQUFZO1FBQ2pGLElBQUksR0FBRyxHQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekIsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNWLE9BQU87UUFFVCxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLEdBQUcsR0FBVyxHQUFHLENBQUM7UUFFdEIsR0FBRztZQUNELEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN4QixRQUNNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUV6QixJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFRO1NBQzVDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEUsQ0FBQztJQWVPLFVBQVUsQ0FBQyxHQUFhLEVBQUUsTUFBYyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQUUsSUFBWTtRQUV0RixJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDZCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUVoQixJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtnQkFDdEIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ25ELFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFTLEdBQUcsQ0FBQyxDQUFDO2FBQzVEO1NBQ0Y7YUFDSTtZQUNILElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtnQkFDWCxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNyRTtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBY08sV0FBVyxDQUFDLGNBQThCLEVBQUUsRUFBWSxFQUFFLElBQWE7UUFFN0UsSUFBSSxDQUFDLEdBQVcsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQVUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVHLElBQUksQ0FBUyxDQUFDO1FBQ2QsSUFBSSxJQUFJLEVBQUU7WUFDUixDQUFDLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ25DO2FBQ0k7WUFDSCxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1A7UUFDRCxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLFVBQVUsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0UsY0FBYyxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNsRCxjQUFjLENBQUMsR0FBRyxHQUFHLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBTTVDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRVYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1QsVUFBVSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUk7UUFDRCxPQUFlLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBZ0JPLG9CQUFvQixDQUFDLE1BQWMsRUFBRSxjQUE4QixFQUFFLEtBQWEsRUFBRSxTQUFpQjtRQUMzRyxJQUFJLFNBQVMsR0FBVyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBVSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEgsSUFBSSxPQUFPLEdBQVcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuRCxJQUFJLE1BQU0sR0FBVyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELEtBQUssR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRCxNQUFNLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUV0RyxjQUFjLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM3RCxjQUFjLENBQUMsR0FBRyxHQUFHLGNBQWMsQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDO1FBQ3BELFNBQVMsR0FBRyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ2xDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFhTyxZQUFZLENBQUMsR0FBYSxFQUFFLE1BQWMsRUFBRSxHQUFXO1FBQzdELElBQUksQ0FBQyxHQUFXLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxHQUFXLENBQUMsQ0FBQztRQUNsQixPQUFlLENBQUMsR0FBRyxHQUFHLEVBQUU7WUFDdEIsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNyQixNQUFNO2FBQ1A7WUFDRCxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNwQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNYO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBS08sV0FBVyxDQUFDLEdBQVcsRUFBRSxNQUFnQixFQUFFLE1BQWMsRUFBRSxHQUFXLEVBQUUsSUFBYTtRQUczRixJQUFJLEdBQUcsR0FBVyxDQUFDLENBQUM7UUFDcEIsSUFBSSxHQUFhLENBQUM7UUFFbEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1lBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQVcsQ0FBRSxFQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDN0QsTUFBTSxJQUFJLENBQUMsQ0FBQztTQUNiO2FBQ0k7WUFDSCxJQUFJLElBQUksRUFBRTtnQkFDUixVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUVwRSxHQUFHLEVBQUUsQ0FBQzthQUNQO2lCQUNJO2dCQUVILE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQzthQUN4QjtZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFXLENBQUUsRUFBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzdELE1BQU0sRUFBRSxDQUFDO1NBQ1Y7UUFDRCxRQUFRLEdBQUcsRUFBRTtZQUNYLEtBQUssQ0FBQyxDQUFDO1lBQ1AsS0FBSyxFQUFFLENBQUM7WUFDUixLQUFLLEVBQUU7Z0JBQ0wsR0FBRyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07WUFFUixLQUFLLENBQUMsQ0FBQztZQUNQLEtBQUssRUFBRTtnQkFDTCxHQUFHLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEMsTUFBTTtZQUVSLEtBQUssQ0FBQyxDQUFDO1lBQ1AsS0FBSyxFQUFFO2dCQUNMLEdBQUcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxNQUFNO1lBRVI7Z0JBQ0UsR0FBRyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hDLE1BQU07U0FDVDtRQUNELE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVmLENBQUM7SUFTRCxzQkFBc0IsQ0FBQyxPQUFlLEVBQUUsR0FBUTtRQUM5QyxJQUFJLElBQUksR0FBVyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUdyRCxJQUFJLFdBQVcsR0FBb0IsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUV6RCxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRS9DLElBQUksUUFBUSxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFFaEMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsT0FBTyxRQUFRLENBQUM7SUFHcEIsQ0FBQztJQVlPLFlBQVksQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxJQUFZLEVBQUUsR0FBUSxFQUFFLGNBQXVCLEVBQUUsWUFBcUI7UUFHM0gsSUFBSSxJQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksTUFBTSxHQUFXLENBQUMsQ0FBQztRQUN2QixJQUFJLE1BQU0sR0FBVyxDQUFDLENBQUM7UUFDdkIsSUFBSSxRQUFRLEdBQVcsQ0FBQyxDQUFDO1FBRXpCLElBQUksS0FBSyxHQUFhLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEQsSUFBSSxXQUFXLEdBQW9CLElBQUksZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0UsSUFBSSxPQUFlLENBQUM7UUFDcEIsSUFBSSxZQUFZLEVBQUU7WUFDaEIsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2xDLFFBQVEsR0FBRyxJQUFJLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQztTQUNsQzthQUNJO1lBQ0gsT0FBTyxHQUFHLElBQUksQ0FBQztTQUNoQjtRQUVELGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDeEIsTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDNUIsTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFLNUIsSUFBSSxNQUFjLENBQUM7UUFDbkIsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxFQUFFO1lBQzlCLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQVMsTUFBTSxDQUFDLENBQUM7WUFDckQsTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbkM7YUFDSTtZQUNILElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNsQixJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksSUFBSSxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQ3RELElBQUksY0FBYyxFQUFFO3dCQUNsQixLQUFLLElBQUksSUFBSSxHQUFXLENBQUMsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFOzRCQUNwRSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLEVBQUU7Z0NBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7NkJBQ2hDO3lCQUNGO3dCQUNELE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNsQyxPQUFPLE1BQU0sQ0FBQztxQkFDZjtvQkFDRCxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO29CQUN0RSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbEMsT0FBTyxNQUFNLENBQUM7aUJBQ2Y7YUFDRjtZQUNELElBQUksQ0FBQyxHQUFXLENBQUMsQ0FBQztZQUNsQixJQUFJLEVBQUUsR0FBVyxDQUFDLENBQUM7WUFDbkIsSUFBSSxHQUFHLEdBQVcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BDLElBQUksS0FBSyxHQUFXLENBQUMsQ0FBQyxDQUFDO1lBRXZCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRTtnQkFDZCxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzlCLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO3dCQUN4QixLQUFLLEdBQUcsQ0FBQyxDQUFDO3dCQUNWLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ1AsTUFBTTtvQkFHUixLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQzt3QkFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ3ZDLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ1AsTUFBTTtvQkFFUixLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ3ZDLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ1AsTUFBTTtvQkFFUixLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ3pDLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ1AsTUFBTTtvQkFFUixLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQzt3QkFDeEIsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDUCxJQUFJLE9BQU8sR0FBVyxJQUFJLEdBQUcsRUFBRSxDQUFDO3dCQUNoQyxJQUFJLE9BQU8sR0FBRyxFQUFFLElBQUksT0FBTyxLQUFLLENBQUM7NEJBQy9CLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs7NEJBRWxFLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDcEUsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDUCxNQUFNO29CQUVSO3dCQUNFLENBQUMsRUFBRSxDQUFDO3dCQUNKLE1BQU07aUJBQ1Q7YUFDRjtZQUNELElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtnQkFDZCxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1YsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ2pCLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTt3QkFDZCxJQUFJLEdBQUcsRUFBRSxDQUFDO3FCQUNYO3lCQUNJO3dCQUNILElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO3dCQUNqQixJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7NEJBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQzt5QkFDWDtxQkFDRjtpQkFDRjtnQkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFRLEdBQUcsQ0FBUSxDQUFDO2FBQ3hGO1lBQ0QsTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbkM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBS0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUE0QixFQUFFLElBQVk7UUFFMUQsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFO1lBQ2IsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDdkIsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDdkIsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7U0FDdEI7YUFDSTtZQUNILFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDM0MsSUFBSSxHQUFHLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUN0QyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQ3JEO0lBQ0gsQ0FBQztJQVNPLDRCQUE0QixDQUFDLE9BQWU7UUFFbEQsSUFBSSxTQUFrQixDQUFDO1FBQ3ZCLFNBQVMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3ZELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFVTyw0QkFBNEIsQ0FBQyxPQUFnQjtRQUVuRCxJQUFJLEtBQWEsQ0FBQztRQUNsQixLQUFLLEdBQUcsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBRXZDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQVNPLFlBQVksQ0FBQyxHQUFXO1FBRTlCLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNwQyxHQUFHLEdBQUcsYUFBYSxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBYUQsS0FBSyxDQUFDLFNBQWlCLEVBQUUsR0FBUSxFQUFFLE9BQWU7UUFDaEQsSUFBSSxLQUFLLEdBQWEsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1RCxPQUFPLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBWUQscUJBQXFCLENBQUMsR0FBYSxFQUFFLE9BQWUsRUFBRSxHQUFRLEVBQUUsSUFBYyxFQUFFLE9BQWU7UUFDN0YsSUFBSSxHQUFHLEdBQVcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQztRQUNqQyxJQUFJLFlBQVksR0FBWSxLQUFLLENBQUM7UUFDbEMsSUFBSSxVQUFVLEdBQVksS0FBSyxDQUFDO1FBQ2hDLElBQUksR0FBRyxHQUFZLEtBQUssQ0FBQztRQUN6QixJQUFJLFdBQVcsR0FBWSxLQUFLLENBQUM7UUFDakMsSUFBSSxRQUFRLEdBQVcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksTUFBTSxHQUFXLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksWUFBWSxHQUFXLENBQUMsQ0FBQztRQUM3QixJQUFJLFNBQVMsR0FBVyxDQUFDLENBQUM7UUFDMUIsSUFBSSxVQUEyQixDQUFDO1FBRWhDLElBQUksR0FBRyxHQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUUxRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDMUIsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTNCLElBQUksSUFBSSxHQUFXLENBQUMsQ0FBQztRQUNyQixJQUFJLEtBQUssR0FBVyxDQUFDLENBQUM7UUFDdEIsSUFBSSxHQUFHLEdBQVcsQ0FBQyxDQUFDO1FBQ3BCLElBQUksR0FBRyxHQUFXLENBQUMsQ0FBQztRQUNwQixJQUFJLE1BQU0sR0FBWSxLQUFLLENBQUM7UUFFNUIsSUFBSSxDQUFTLENBQUM7UUFDZCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNsQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtnQkFDcEMsTUFBTTthQUNQO1NBQ0Y7UUFFRCxJQUFJLENBQUMsS0FBSyxPQUFPO1lBQ2YsT0FBTyxDQUFDLENBQUM7UUFFWCxPQUFPLEdBQUcsR0FBRyxPQUFPLElBQUksR0FBRyxHQUFHLFlBQVksR0FBRyxHQUFHLEVBQUU7WUFFaEQsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDOUMsS0FBSyxZQUFZLENBQUMsTUFBTTtvQkFDdEIsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDbkIsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDWCxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNwQyxHQUFHLElBQUksQ0FBQyxDQUFDO29CQUVULElBQUksSUFBSSxLQUFLLENBQUM7d0JBQ1osV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDckIsSUFBSSxZQUFZLEdBQVcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUN2RSxJQUFJLElBQUksR0FBRyxZQUFZO3dCQUNyQixJQUFJLElBQUksR0FBRyxDQUFDO29CQUNkLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxZQUFZLENBQUM7b0JBQzdELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRzt3QkFFaEQsSUFBSSxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztvQkFDekMsTUFBTTtnQkFHUixLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztvQkFDMUIsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDbkIsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDWCxJQUFJLFlBQW9CLENBQUM7b0JBS3pCLElBQUksZUFBZSxDQUFDLGtCQUFrQixFQUFFLEVBQUU7d0JBQ3hDLEtBQUssWUFBWSxHQUFHLENBQUMsRUFBRSxZQUFZLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxZQUFZLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRTt5QkFDL0k7d0JBQ0QsQ0FBQyxHQUFHLFlBQVksQ0FBQztxQkFDbEI7eUJBQ0k7d0JBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTt5QkFDNUY7d0JBRUQsS0FBSyxZQUFZLEdBQUcsQ0FBQyxFQUNoQixHQUFHLEdBQUcsWUFBWSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxDQUFDOzRCQUNuRixZQUFZLEdBQUcsQ0FBQyxFQUNoQixZQUFZLEVBQUUsRUFBRTt5QkFDcEI7cUJBQ0Y7b0JBRUQsSUFBSSxlQUFlLENBQUMsa0JBQWtCLEVBQUUsRUFBRTt3QkFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU07NEJBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDL0M7eUJBQ0k7d0JBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFOzRCQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzs0QkFDckMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3lCQUNuQjtxQkFDRjtvQkFFRCxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNwQyxHQUFHLElBQUksQ0FBQyxDQUFDO29CQUdULElBQUksSUFBSSxLQUFLLENBQUM7d0JBQ1osV0FBVyxHQUFHLElBQUksQ0FBQztvQkFFckIsSUFBSSxZQUFZLElBQUksQ0FBQyxFQUFFO3dCQUNyQixZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO3dCQUMzRCxJQUFJLElBQUksR0FBRyxZQUFZOzRCQUNyQixJQUFJLElBQUksR0FBRyxDQUFDO3dCQUNkLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxZQUFZLENBQUM7cUJBQzlEO29CQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRzt3QkFFaEQsSUFBSSxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztvQkFDekMsTUFBTTtnQkFHUixLQUFLLFlBQVksQ0FBQyxVQUFVO29CQUMxQixHQUFHLEdBQUcsSUFBSSxDQUFDO29CQUNYLElBQUksTUFBTSxHQUFXLENBQUMsQ0FBQztvQkFDdkIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7d0JBQzVFLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQ2IsSUFBSSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3RELEdBQUcsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO29CQUNsQixJQUFJLElBQUksS0FBSyxDQUFDO3dCQUNaLFdBQVcsR0FBRyxJQUFJLENBQUM7b0JBQ3JCLE1BQU07Z0JBRVIsS0FBSyxZQUFZLENBQUMsTUFBTTtvQkFDdEIsWUFBWSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDckQsR0FBRyxFQUFFLENBQUM7b0JBQ04sTUFBTTtnQkFFUixLQUFLLFlBQVksQ0FBQyxPQUFPO29CQUN2QixHQUFHLEdBQUcsSUFBSSxDQUFDO29CQUNYLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQ1gsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsT0FBTzt3QkFDdkUsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFDYixHQUFHLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDckQsR0FBRyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7b0JBQ2xCLE1BQU07Z0JBRVIsS0FBSyxZQUFZLENBQUMsT0FBTztvQkFDdkIsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDWCxZQUFZLEdBQUcsSUFBSSxDQUFDO29CQUNwQixJQUFJLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO3dCQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU07NEJBQ2hKLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUMzQzt5QkFDSTt3QkFDSCxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUU7NEJBQ3JFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7NEJBQ2pDLEdBQUcsSUFBSSxDQUFDLENBQUM7eUJBQ1Y7cUJBQ0Y7b0JBQ0QsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDckMsR0FBRyxJQUFJLENBQUMsQ0FBQztvQkFDVCxNQUFNO2dCQUdSLEtBQUssWUFBWSxDQUFDLE9BQU87b0JBQ3ZCLEdBQUcsR0FBRyxJQUFJLENBQUM7b0JBQ1gsWUFBWSxHQUFHLElBQUksQ0FBQztvQkFDcEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7b0JBQ2pCLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztvQkFDbEUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7b0JBQ2pCLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLEtBQUssS0FBSyxFQUFFO3dCQUNoQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUNaLE1BQU07Z0JBR1IsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7b0JBQ3hCLEdBQUcsR0FBRyxJQUFJLENBQUM7b0JBQ1gsVUFBVSxHQUFHLElBQUksQ0FBQztvQkFDbEIsSUFBSSxlQUFlLENBQUMsa0JBQWtCLEVBQUUsRUFBRTt3QkFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNOzRCQUNoSixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDM0M7eUJBQ0k7d0JBQ0gsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFOzRCQUNyRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDOzRCQUNqQyxHQUFHLElBQUksQ0FBQyxDQUFDO3lCQUNWO3FCQUNGO29CQUNELEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ25DLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQ1QsTUFBTTtnQkFHUixLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztvQkFDekIsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDWCxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNkLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQ2xCLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ25DLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQ1QsTUFBTTtnQkFHUixLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztvQkFDMUIsR0FBRyxHQUFHLElBQUksQ0FBQztvQkFDWCxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUNsQixHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNuQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDYixNQUFNO2dCQUdSLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO29CQUN4QixXQUFXLEdBQUcsSUFBSSxDQUFDO29CQUNuQixHQUFHLEdBQUcsSUFBSSxDQUFDO29CQUNYLElBQUksZUFBZSxDQUFDLGtCQUFrQixFQUFFLEVBQUU7d0JBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTTs0QkFDaEosSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQzNDO29CQUNELElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3BDLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBRVQsSUFBSSxJQUFJLEdBQVcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDMUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBRTVFLElBQUksUUFBUSxLQUFLLENBQUM7d0JBQ2hCLE9BQU8sQ0FBQyxDQUFDO29CQUNYLElBQUksSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO29CQUVyQixJQUFJLElBQUksS0FBSyxDQUFDO3dCQUNaLFdBQVcsR0FBRyxJQUFJLENBQUM7b0JBQ3JCLE1BQU07Z0JBR1I7b0JBQ0UsSUFBSSxlQUFlLENBQUMsbUJBQW1CLEVBQUUsRUFBRTt3QkFFekMsSUFBSSxlQUFlLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUs7NEJBQ2pELGVBQWUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsQ0FBQzs0QkFDckQsWUFBWSxFQUFFLENBQUM7cUJBQ2xCO29CQUVELEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQ1QsTUFBTTthQUNUO1NBQ0Y7UUFFRCxJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxZQUFZO2dCQUNmLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDWixJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssS0FBSyxDQUFDO2dCQUM1QixHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ1g7UUFLRCxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDO1lBQ3pELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUViLElBQUksQ0FBQyxHQUFHO1lBQ04sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBR2IsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO2dCQUNaLElBQUksU0FBUyxLQUFLLENBQUM7b0JBQ2pCLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLElBQUksSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQzFCO1lBQ0QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ25EO1FBR0QsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdCLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQU9PLFVBQVUsQ0FBQyxDQUFNLEVBQUUsR0FBVyxFQUFFLEdBQVc7UUFDakQsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxFQUFFO1lBQ2hLLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUtPLFlBQVksQ0FBQyxDQUFXLEVBQUUsR0FBVyxFQUFFLEdBQVc7UUFDeEQsSUFBSSxLQUFLLEdBQWEsSUFBSSxLQUFLLENBQVMsR0FBRyxDQUFDLENBQUM7UUFDN0MsSUFBSSxLQUFLLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBT08sU0FBUyxDQUFDLEdBQVEsRUFBRSxHQUFXLEVBQUUsTUFBYyxFQUFFLEdBQVc7UUFDbEUsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxFQUFFO1lBQzFOLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDeEMsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBS08sV0FBVyxDQUFDLEdBQWEsRUFBRSxHQUFXLEVBQUUsTUFBYyxFQUFFLEdBQVc7UUFDekUsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRSxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFTLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFZTyxZQUFZLENBQUMsR0FBYSxFQUFFLElBQWMsRUFBRSxHQUFXLEVBQUUsR0FBVyxFQUFFLFFBQWlCO1FBQzdGLElBQUksQ0FBUyxDQUFDO1FBRWQsSUFBSSxlQUFlLENBQUMsa0JBQWtCLEVBQUUsRUFBRTtZQUN4QyxJQUFJLE9BQU8sR0FBVyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9HLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQVUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUMvRDthQUNJO1lBQ0gsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQVUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDL0Q7UUFDRCxJQUFJLE1BQU0sR0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDO1FBQzdCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUxQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7WUFDYixPQUFPLENBQUMsQ0FBQztTQUNWO2FBQ0k7WUFDSCxJQUFJLElBQUksR0FBVyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdkQsSUFBSSxVQUFvQixDQUFDO1lBQ3pCLElBQUksUUFBUSxFQUFFO2dCQUNaLFVBQVUsR0FBRyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDMUM7aUJBQ0k7Z0JBQ0gsSUFBSSxNQUFNLEdBQVcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEUsVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDOUM7WUFFRCxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDeEQsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUNqRSxPQUFPLENBQUMsQ0FBQzthQUNaO1NBQ0Y7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFLRCxRQUFRO1FBQ04sSUFBSSxJQUFJLEdBQW9CLElBQUksZUFBZSxFQUFFLENBQUM7UUFDbEQsSUFBSSxRQUFRLEdBQWEsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUV0QyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUV4QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFPRCxVQUFVLENBQUMsT0FBZ0I7UUFDekIsSUFBSSxRQUFrQixDQUFDO1FBQ3ZCLElBQUksT0FBTyxFQUFFO1lBQ1gsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7U0FDNUI7YUFDSTtZQUNILFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDO1NBQ3pCO1FBRUQsSUFBSSxJQUFJLEdBQVcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNqQyxJQUFJLEtBQUssR0FBVyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ25DLElBQUksR0FBRyxHQUFXLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFFL0IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBT0QsVUFBVSxDQUFDLE9BQWdCO1FBQ3pCLE9BQU8sUUFBUSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFnQjtRQUMxQixPQUFPLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFFO0lBQ3pFLENBQUM7SUFLRCxlQUFlLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxHQUFXLEVBQUUsR0FBVyxFQUFFLE1BQWU7UUFFcEYsSUFBSSxRQUFRLEdBQVksSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBS2pGLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO2dCQUNiLE9BQU8sQ0FBQyxDQUFDO2FBQ1Y7WUFDRCxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUU7Z0JBQ3pDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNyQjtTQUNGO2FBQ0k7WUFDSCxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO2dCQUMxQyxPQUFPLENBQUMsQ0FBQzthQUNWO1lBQ0QsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxFQUFFO2dCQUN4RCxPQUFPLFVBQVUsQ0FBQzthQUNuQjtTQUNGO1FBQ0QsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxHQUFHLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDekMsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLElBQUksSUFBSSxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUN6QixJQUFJLElBQUksR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFFdkIsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLElBQUksSUFBSSxHQUFXLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hELElBQUksSUFBSSxHQUFXLFlBQVksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFcEQsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO29CQUNiLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUNoQixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7d0JBQ2IsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7cUJBQ2pCO2lCQUNGO2FBQ0Y7WUFFRCxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFO2dCQUNyQixPQUFPLFVBQVUsQ0FBQzthQUNuQjtZQUNELEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxHQUFHLEdBQUcsTUFBTSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUN0RSxDQUFDO0lBUUQsc0JBQXNCLENBQUMsU0FBZTtRQUNwQyxJQUFJLEtBQUssR0FBYSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ3JDLElBQUksTUFBTSxHQUFXLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsRSxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxTQUFlO1FBQzFDLElBQUksTUFBTSxHQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMzRyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBT0QsUUFBUSxDQUFDLEtBQVUsRUFBRSxXQUFnQixFQUFFLGtCQUF1QixFQUFFLFlBQXNCO1FBQ3BGLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFakUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUtPLFVBQVUsQ0FBQyxLQUFhLEVBQUUsR0FBUSxFQUFFLFlBQXFCO1FBQy9ELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFLTyxVQUFVLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxJQUFjLEVBQUUsWUFBcUI7UUFDckYsSUFBSSxLQUFLLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsR0FBVyxDQUFDLENBQUM7UUFDbEIsSUFBSSxHQUFHLEdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUc5QixJQUFJLEdBQUcsR0FBRyxNQUFNLEVBQUU7WUFDaEIsR0FBRyxHQUFHLE1BQU0sQ0FBQztTQUNkO1FBQ0QsSUFBSSxJQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksSUFBSSxHQUFXLENBQUMsQ0FBQztRQUNyQixJQUFJLE1BQU0sR0FBVyxDQUFDLENBQUM7UUFDdkIsSUFBSSxNQUFNLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksV0FBVyxHQUFXLENBQUMsQ0FBQztRQUU1QixPQUFPLENBQUMsR0FBRyxHQUFHLEVBQUU7WUFDZCxJQUFJLFVBQWtCLENBQUM7WUFDdkIsSUFBSSxVQUFrQixDQUFDO1lBR3ZCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDN0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUIsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7b0JBQ3hCLFVBQVUsR0FBRyxDQUFDLENBQUM7b0JBQ2YsTUFBTTtnQkFFUixLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztvQkFDeEIsVUFBVSxHQUFHLENBQUMsQ0FBQztvQkFDZixNQUFNO2dCQUVSO29CQUNFLFVBQVUsR0FBRyxDQUFDLENBQUM7b0JBQ2YsTUFBTTthQUNUO1lBS0QsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUUzQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzdCLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO29CQUFFO3dCQUMxQixJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO3FCQUNwRDtvQkFDQyxNQUFNO2dCQUVSLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO29CQUFFO3dCQUMzQixNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO3FCQUN0RDtvQkFDQyxNQUFNO2dCQUVSLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO29CQUFFO3dCQUMxQixNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO3FCQUN0RDtvQkFDQyxNQUFNO2dCQUVSLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO29CQUFFO3dCQUMxQixXQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO3FCQUMzRDtvQkFDQyxNQUFNO2dCQUVSLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO29CQUN4QixJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUNULElBQUksRUFBRSxHQUFXLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxFQUFVLENBQUM7b0JBQ2YsRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRTt3QkFDZixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDbEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFFdEIsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFOzRCQUNkLElBQUksRUFBRSxLQUFLLEdBQUc7Z0NBQ1osSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUNaLElBQUksRUFBRSxLQUFLLEdBQUc7Z0NBQ1osSUFBSSxHQUFHLENBQUMsQ0FBQzt5QkFDWjtxQkFDRjtvQkFDRCxNQUFNO2dCQUVSO29CQUNFLE1BQU07YUFDVDtZQUNELENBQUMsSUFBSSxVQUFVLENBQUM7U0FDakI7UUFHRCxJQUFJLE1BQU0sR0FBRyxFQUFFLElBQUksTUFBTSxHQUFHLEVBQUU7WUFDNUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBR2IsSUFBSSxJQUFJLEtBQUssQ0FBQztZQUNaLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUVmO2dCQUNFLElBQUksSUFBSSxLQUFLLEVBQUU7b0JBQ2IsSUFBSSxHQUFHLENBQUMsQ0FBQzthQUNaO2lCQUNJLElBQUksSUFBSSxHQUFHLEVBQUU7Z0JBRWhCLElBQUksSUFBSSxFQUFFLENBQUM7UUFDZixJQUFJLFlBQVk7WUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsV0FBVyxDQUFDOztZQUVsRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVksRUFBRSxNQUFjLEVBQUUsTUFBYztRQUNyRCxPQUFPLElBQUksR0FBRyxJQUFJLEdBQUcsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDNUMsQ0FBQztJQVNELE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBZTtRQUM5QixPQUFPLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEdBQUcsQ0FBQztJQUM3QyxDQUFDO0lBS0QsUUFBUSxDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQUUsT0FBZTtRQUNuRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxZQUFZLENBQUMsR0FBVyxFQUFFLEdBQVEsRUFBRSxJQUFZLEVBQUUsT0FBZTtRQUMvRCxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDaEIsR0FBRyxHQUFHLEVBQUUsQ0FBQztTQUNWO1FBQ0QsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFFRCxJQUFJLENBQUMsTUFBYyxFQUFFLE9BQWUsRUFBRSxJQUFZLEVBQUUsTUFBYyxFQUFFLE9BQWU7UUFDakYsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUtPLGlCQUFpQixDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQUUsT0FBZTtRQUNwRSxJQUFJLEdBQUcsR0FBUSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9ELElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtZQUNoQixHQUFHLEdBQUcsRUFBRSxDQUFDO1NBQ1Y7UUFDRCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUgsQ0FBQztJQUtPLGFBQWEsQ0FBQyxNQUFjLEVBQUUsT0FBZSxFQUFFLElBQVksRUFBRSxNQUFjLEVBQUUsYUFBc0IsRUFBRSxPQUFlO1FBRzFILElBQUksR0FBRyxHQUFRLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFHL0QsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ25CLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDeEI7UUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBS08sWUFBWSxDQUFDLENBQVMsRUFBRSxHQUFXLEVBQUUsR0FBVztRQUd0RCxJQUFJLEtBQUssR0FBYSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ3JDLElBQUksR0FBVyxDQUFDO1FBRWhCLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLE1BQWMsRUFBRSxHQUFXO1FBQ3ZFLEdBQUcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBRTlELEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFFLElBQVksRUFBRSxNQUFjLEVBQUUsT0FBZSxFQUFFLFlBQXFCO1FBRTFHLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RDLE1BQU0sR0FBRyxVQUFVLENBQUM7U0FDckI7UUFDRCxJQUFJLEdBQUcsR0FBUSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9ELElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUNsQixLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQWFELFNBQVMsQ0FBQyxTQUFpQixFQUFFLEdBQVEsRUFBRSxRQUFnQjtRQUNyRCxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksU0FBUyxLQUFLLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNoRCxTQUFTLEdBQUcsT0FBTyxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQVFPLGNBQWMsQ0FBQyxTQUFpQixFQUFFLElBQVksRUFBRSxRQUFnQjtRQUV0RSxJQUFJLGFBQWEsR0FBa0IsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXZFLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLFFBQVEsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxHQUFXLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxPQUFPLEdBQVcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVOLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4RCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLEtBQUssRUFBRTtnQkFDN0MsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDM0M7U0FDRjtRQUNELElBQUksR0FBRyxHQUFXLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUMvQixHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDO2FBQ0k7WUFDSCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDL0IsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN6QztTQUNGO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDbkUsQ0FBQztJQU1PLE9BQU8sQ0FBQyxTQUFpQixFQUFFLEdBQVE7UUFFekMsSUFBSSxPQUFPLEdBQVcsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLElBQUksTUFBTSxHQUFrQixJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLFdBQVcsR0FBWSxlQUFlLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEYsSUFBSSxXQUFtQixDQUFDO1FBQ3hCLElBQUksQ0FBQyxHQUFXLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFaEMsS0FBSyxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRTtZQUNsRyxJQUFJLGdCQUFnQixDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtnQkFDNUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRW5DLElBQUksV0FBVyxFQUFFO29CQUVmLElBQUksZ0JBQWdCLEdBQVcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3RELElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDaEQsV0FBVyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7cUJBQy9CO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFHRCxNQUFNLENBQUMsMEJBQTBCLENBQUMsT0FBZTtRQUMvQyxJQUFJLEtBQUssR0FBVyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssWUFBWSxDQUFDLEtBQUs7WUFDbEcsS0FBSyxLQUFLLFlBQVksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVsSyxDQUFDO0lBT08sZ0JBQWdCLENBQUMscUJBQW1DLEVBQUUsbUJBQWlDLEVBQUUsUUFBZ0I7UUFFL0csSUFBSSxTQUFTLEdBQVcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNGLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtZQUN0QixPQUFPLFNBQVMsQ0FBQztTQUNsQjthQUNJO1lBQ0gsU0FBUyxHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNuRixJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7Z0JBQ3RCLE9BQU8sU0FBUyxDQUFDO2FBQ2xCO2lCQUNJO2dCQUNILElBQUksbUJBQW1CLEtBQUssSUFBSSxFQUFFO29CQUNoQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUNyRSxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUU7d0JBQ3RCLE9BQU8sU0FBUyxDQUFDO3FCQUNsQjtpQkFDRjthQUNGO1NBQ0Y7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBV0QsOEJBQThCLENBQUMsbUJBQWlDLEVBQUUsUUFBZ0I7UUFDaEYsSUFBSSxtQkFBbUIsS0FBSyxJQUFJLEVBQUU7WUFDaEMsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDakUsSUFBSSxhQUFhLEdBQVcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLGNBQWMsR0FBVyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ3RHLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLGNBQWMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDM0QsT0FBTyxhQUFhLENBQUM7aUJBQ3RCO2FBQ0Y7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQVdELGdDQUFnQyxDQUFDLHFCQUFtQyxFQUFFLFFBQWdCO1FBQ3BGLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBR25DLElBQUkscUJBQXFCLEtBQUssSUFBSSxFQUFFO1lBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ25FLElBQUksSUFBSSxHQUFXLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckQsSUFBSSxFQUFFLEdBQVcscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDNUYsT0FBTyxRQUFRLENBQUM7aUJBQ2pCO2FBQ0Y7U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQVlELG9CQUFvQixDQUFDLG1CQUFpQyxFQUFFLFFBQWdCO1FBRXRFLElBQUksV0FBVyxHQUFhLElBQUksS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2pELEtBQUssSUFBSSxHQUFHLEdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRztZQUN2RCxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZCLElBQUksUUFBUSxHQUFhLElBQUksS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzlDLEtBQUssSUFBSSxHQUFHLEdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRztZQUNwRCxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBRXZCLElBQUksVUFBVSxHQUFXLENBQUMsQ0FBQztRQUMzQixJQUFJLFdBQVcsR0FBVyxDQUFDLENBQUM7UUFFNUIsSUFBSSxXQUFXLEdBQVcsVUFBVSxDQUFDO1FBRXJDLE9BQU8sV0FBVyxLQUFLLFVBQVUsSUFBSSxXQUFXLEtBQUssV0FBVyxFQUFFO1lBQ2hFLElBQUksVUFBa0IsQ0FBQztZQUN2QixJQUFJLFdBQVcsS0FBSyxVQUFVLEVBQUU7Z0JBQzlCLFVBQVUsR0FBRyxRQUFRLENBQUM7YUFDdkI7aUJBQ0k7Z0JBQ0gsVUFBVSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUNyQztZQUNELFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pFLElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQztnQkFDakMsSUFBSSxZQUFZLEdBQVcsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLFNBQWlCLENBQUM7Z0JBQ3RCLElBQUksV0FBVyxLQUFLLFVBQVUsRUFBRTtvQkFDOUIsU0FBUyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDN0M7cUJBQ0k7b0JBQ0gsU0FBUyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDM0Q7Z0JBQ0QsSUFBSSxTQUFTLEdBQVcsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFDMUMsSUFBSSxXQUFXLEdBQVcsU0FBUyxDQUFDLE1BQU0sQ0FBQztnQkFDM0MsSUFBSSxTQUFTLEdBQUcsV0FBVyxFQUFFO29CQUMzQixLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUNoRCxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs0QkFDbkQsV0FBVyxHQUFHLElBQUksQ0FBQzs0QkFDbkIsTUFBTTt5QkFDUDt3QkFDRCxZQUFZLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztxQkFDakM7aUJBQ0Y7cUJBQ0k7b0JBQ0gsV0FBVyxHQUFHLElBQUksQ0FBQztpQkFDcEI7Z0JBRUQsSUFBSSxZQUFZLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUMzRCxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN4RCxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsWUFBWSxDQUFDO2lCQUN6QzthQUNGO1lBQ0QsV0FBVyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7U0FDL0I7UUFHRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJO1lBQy9CLE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3pCO1lBQ0gsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSTtnQkFDaEMsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDaEM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBZ0I7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQVFELE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxLQUFhLEVBQUUsZ0JBQWtDLEVBQUUsTUFBYyxFQUFFLE1BQWM7UUFDM0csUUFBUSxnQkFBZ0IsRUFBRTtZQUN4QixLQUFLLGdCQUFnQixDQUFDLEtBQUssQ0FBQztZQUM1QixLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM3QixJQUFJLE1BQU0sR0FBVyxLQUFLLENBQUM7Z0JBQzNCLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2xELE9BQU8sTUFBTSxDQUFDO2FBQ2Y7WUFDRCxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztZQUM5QixLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUMzQixLQUFLLGdCQUFnQixDQUFDLElBQUk7Z0JBQ3hCLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0I7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDSCxDQUFDOztBQXp3RWMsMEJBQVMsR0FBcUIsSUFBSSxDQUFDO0FBK3dFcEQsTUFBTSxPQUFPLGVBQWU7SUFPMUIsWUFBWSxLQUFjLEVBQUUsT0FBZ0IsRUFBRSxPQUFnQjtRQU45RCxTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ2pCLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFDbkIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUtqQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVPLGFBQWE7SUFDckIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFhLEVBQUUsT0FBZSxFQUFFLE9BQWU7UUFDbkUsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDeEIsQ0FBQztDQUNGO0FBS0QsTUFBTSxNQUFNO0lBR1YsWUFBWSxJQUFZO1FBRnhCLFFBQUcsR0FBVyxDQUFDLENBQUM7UUFHZCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUFLRCxNQUFNLGNBQWM7SUFLbEIsWUFBWSxJQUFjLEVBQUUsT0FBZSxFQUFFLElBQVk7UUFKekQsV0FBTSxHQUFhLElBQUksQ0FBQztRQUN4QixRQUFHLEdBQVcsQ0FBQyxDQUFDO1FBQ2hCLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFHakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7UUFDdEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQztDQUNGO0FBTUQsTUFBTSxPQUFPLGVBQWU7SUFTMUIsWUFBWSxLQUFjLEVBQUUsTUFBZSxFQUFFLElBQWEsRUFBRSxJQUFhLEVBQUUsSUFBYTtRQVJ4RixRQUFHLEdBQVcsQ0FBQyxDQUFDO1FBQ2hCLFFBQUcsR0FBVyxDQUFDLENBQUM7UUFDaEIsUUFBRyxHQUFXLENBQUMsQ0FBQztRQUNoQixVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLFNBQUksR0FBVyxDQUFDLENBQUM7UUFLZixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sYUFBYTtJQUNyQixDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQWEsRUFBRSxNQUFjLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBRSxJQUFZO1FBQzNGLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SUVudmlyb25tZW50fSBmcm9tICcuLi8uLi9lbnYvSUVudmlyb25tZW50JztcclxuaW1wb3J0IHtQSUN9IGZyb20gJy4vUElDJztcclxuaW1wb3J0IHtEYXRlVGltZSwgTGlzdCwgTlN0cmluZywgUmVmUGFyYW0sIFN0cmluZ0J1aWxkZXJ9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtcclxuICBEYXRlVXRpbCxcclxuICBIVE1MXzJfU1RSLFxyXG4gIE1zZ0ludGVyZmFjZSxcclxuICBQSUNJbnRlcmZhY2UsXHJcbiAgU0VRXzJfSFRNTCxcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0clV0aWwsXHJcbiAgVXRpbERhdGVKcG4sXHJcbiAgVXRpbFN0ckJ5dGVNb2RlXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7QmxvYlR5cGV9IGZyb20gJy4uL2RhdGEvQmxvYlR5cGUnO1xyXG5pbXBvcnQge1ZhbGlkYXRpb25EZXRhaWxzQmFzZX0gZnJvbSAnLi9WYWxpZGF0aW9uRGV0YWlsc0Jhc2UnO1xyXG5pbXBvcnQge05VTV9UWVBFfSBmcm9tICcuLi9kYXRhL05VTV9UWVBFJztcclxuaW1wb3J0IHtIZWJyZXdEYXRlfSBmcm9tICcuL0hlYnJld0RhdGUnO1xyXG5pbXBvcnQge0V2ZW50c30gZnJvbSAnLi4vLi4vRXZlbnRzJztcclxuaW1wb3J0IHtHdWlFbnZpcm9ubWVudH0gZnJvbSAnLi4vLi4vR3VpRW52aXJvbm1lbnQnO1xyXG5pbXBvcnQge01lbW9yeVV0aWx9IGZyb20gJy4uLy4uL3V0aWwvTWVtb3J5VXRpbCc7XHJcblxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgRGlzcGxheUNvbnZlcnRvciB7XHJcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnQ6IElFbnZpcm9ubWVudCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBEQVRFQ0hBUjogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IERpc3BsYXlDb252ZXJ0b3IgPSBudWxsO1xyXG5cclxuICBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IERpc3BsYXlDb252ZXJ0b3Ige1xyXG4gICAgaWYgKERpc3BsYXlDb252ZXJ0b3IuX2luc3RhbmNlID09PSBudWxsKSB7XHJcbiAgICAgIERpc3BsYXlDb252ZXJ0b3IuX2luc3RhbmNlID0gbmV3IERpc3BsYXlDb252ZXJ0b3IoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBEaXNwbGF5Q29udmVydG9yLl9pbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudDtcclxuICB9XHJcblxyXG4gIGdldE5ld0RhdGVCcmVha1BhcmFtcygpOiBEYXRlQnJlYWtQYXJhbXMge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlQnJlYWtQYXJhbXMoKTtcclxuICB9XHJcblxyXG4gIGdldE5ld1RpbWVCcmVha1BhcmFtcygpOiBUaW1lQnJlYWtQYXJhbXMge1xyXG4gICAgcmV0dXJuIG5ldyBUaW1lQnJlYWtQYXJhbXMoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIGRpc3BsYXkgc3RyaW5nIG9mIGEgdmFsdWUgZnJvbSBpdHMgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWdWYWx1ZVwiPiAgdGhlIGludGVybmFsIHZhbHVlIChhcyBzZW50IGluIHRoZSBYTUwpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyYW5nZVN0clwiPiB2YWx1ZSByYW5nZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICAgICAgdGhlIHBpY3R1cmUgZm9ybWF0XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdHJpbmcgdG8gZGlzcGxheVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgbWcyZGlzcChtZ1ZhbHVlOiBzdHJpbmcsIHJhbmdlU3RyOiBzdHJpbmcsIHBpYzogUElDLCB1c2VOYXRpdmU6IGJvb2xlYW4sIGNvbXBJZHg6IG51bWJlciwgdGltZV9kYXRlX3BpY19aX2VkdDogYm9vbGVhbik6IGFueTtcclxuICBtZzJkaXNwKG1nVmFsdWU6IHN0cmluZywgcmFuZ2VTdHI6IHN0cmluZywgcGljOiBQSUMsIHVzZU5hdGl2ZTogYm9vbGVhbiwgYWx3YXlzRmlsbDogYm9vbGVhbiwgY29tcElkeDogbnVtYmVyLCB0aW1lX2RhdGVfcGljX1pfZWR0OiBib29sZWFuKTogYW55O1xyXG4gIG1nMmRpc3AobWdWYWx1ZTogc3RyaW5nLCByYW5nZVN0cjogc3RyaW5nLCBwaWM6IFBJQywgdXNlTmF0aXZlOiBib29sZWFuLCBhbHdheXNGaWxsOiBib29sZWFuLCBjb21wSWR4OiBudW1iZXIsIGNvbnZlcnRDYXNlOiBib29sZWFuLCB0aW1lX2RhdGVfbnVtX3BpY19aX2VkdDogYm9vbGVhbik6IGFueTtcclxuICBtZzJkaXNwKG1nVmFsdWU6IHN0cmluZywgcmFuZ2VTdHI6IHN0cmluZywgcGljOiBQSUMsIHVzZU5hdGl2ZTogYm9vbGVhbiwgY29tcElkeE9yQWx3YXlzRmlsbDogYW55LCB0aW1lX2RhdGVfcGljX1pfZWR0T3JDb21wSWR4OiBhbnksIHRpbWVfZGF0ZV9waWNfWl9lZHRPckNvbnZlcnRDYXNlPzogYm9vbGVhbiwgdGltZV9kYXRlX251bV9waWNfWl9lZHQ/OiBib29sZWFuKTogYW55IHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA2KVxyXG4gICAgICByZXR1cm4gdGhpcy5tZzJkaXNwXzAobWdWYWx1ZSwgcmFuZ2VTdHIsIHBpYywgdXNlTmF0aXZlLCBjb21wSWR4T3JBbHdheXNGaWxsLCB0aW1lX2RhdGVfcGljX1pfZWR0T3JDb21wSWR4KTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA3KVxyXG4gICAgICByZXR1cm4gdGhpcy5tZzJkaXNwXzEobWdWYWx1ZSwgcmFuZ2VTdHIsIHBpYywgdXNlTmF0aXZlLCBjb21wSWR4T3JBbHdheXNGaWxsLCB0aW1lX2RhdGVfcGljX1pfZWR0T3JDb21wSWR4LCB0aW1lX2RhdGVfcGljX1pfZWR0T3JDb252ZXJ0Q2FzZSk7XHJcblxyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gdGhpcy5tZzJkaXNwXzIobWdWYWx1ZSwgcmFuZ2VTdHIsIHBpYywgdXNlTmF0aXZlLCBjb21wSWR4T3JBbHdheXNGaWxsLCB0aW1lX2RhdGVfcGljX1pfZWR0T3JDb21wSWR4LCB0aW1lX2RhdGVfcGljX1pfZWR0T3JDb252ZXJ0Q2FzZSwgdGltZV9kYXRlX251bV9waWNfWl9lZHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZzJkaXNwXzAobWdWYWx1ZTogc3RyaW5nLCByYW5nZVN0cjogc3RyaW5nLCBwaWM6IFBJQywgdXNlTmF0aXZlOiBib29sZWFuLCBjb21wSWR4OiBudW1iZXIsIHRpbWVfZGF0ZV9waWNfWl9lZHQ6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMubWcyZGlzcChtZ1ZhbHVlLCByYW5nZVN0ciwgcGljLCB1c2VOYXRpdmUsIGZhbHNlLCBjb21wSWR4LCB0aW1lX2RhdGVfcGljX1pfZWR0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWcyZGlzcF8xKG1nVmFsdWU6IHN0cmluZywgcmFuZ2VTdHI6IHN0cmluZywgcGljOiBQSUMsIHVzZU5hdGl2ZTogYm9vbGVhbiwgYWx3YXlzRmlsbDogYm9vbGVhbiwgY29tcElkeDogbnVtYmVyLCB0aW1lX2RhdGVfcGljX1pfZWR0OiBib29sZWFuKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm1nMmRpc3AobWdWYWx1ZSwgcmFuZ2VTdHIsIHBpYywgdXNlTmF0aXZlLCBhbHdheXNGaWxsLCBjb21wSWR4LCBmYWxzZSwgdGltZV9kYXRlX3BpY19aX2VkdCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgb2YgYSB2YWx1ZSBmcm9tIGl0cyBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtZ1ZhbHVlXCI+dGhlIGludGVybmFsIHZhbHVlIChhcyBzZW50IGluIHRoZSBYTUwpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyYW5nZVN0clwiPnZhbHVlIHJhbmdlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj50aGUgcGljdHVyZSBmb3JtYXRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFsd2F5c0ZpbGxcIj5BbHdheXMgYXV0byBmaWxsIGFscGhhIG92ZXIgaXRzIHBpY3R1cmUgKHVzZWQgZm9yIHNlbGVjdCBjb250cm9scylcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHN0cmluZyB0byBkaXNwbGF5XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwdWJsaWMgbWcyZGlzcF8yKG1nVmFsdWU6IHN0cmluZywgcmFuZ2VTdHI6IHN0cmluZywgcGljOiBQSUMsIHVzZU5hdGl2ZTogYm9vbGVhbiwgYWx3YXlzRmlsbDogYm9vbGVhbiwgY29tcElkeDogbnVtYmVyLCBjb252ZXJ0Q2FzZTogYm9vbGVhbiwgdGltZV9kYXRlX251bV9waWNfWl9lZHQ6IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgbGV0IHN0cjogc3RyaW5nID0gXCJcIjtcclxuICAgIGxldCB0bXBSYW5nZTogc3RyaW5nID0gKHJhbmdlU3RyID09PSBudWxsKSA/IFwiXCIgOiByYW5nZVN0cjtcclxuXHJcbiAgICBzd2l0Y2ggKHBpYy5nZXRBdHRyKCkpIHtcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgc3RyID0gdGhpcy5mcm9tQWxwaGEobWdWYWx1ZSwgcGljLCB0bXBSYW5nZSwgYWx3YXlzRmlsbCwgY29udmVydENhc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6IHtcclxuXHJcbiAgICAgICAgLy8gTm93LCBjdXJyZWN5IGRpcmVjdGl2ZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIHdpbGwgYmUgaGFuZGxlZCBieSBhbmd1bGFyIHBhY2thZ2VzIGxpa2UgbmctY3VycmVuY3lcclxuICAgICAgICAvLyBoZXJlIGl0IHNob3VsZCBzaW1wbHkgcGFzcyB0aGUgYWN0dWFsIG5hdGl2ZSB2YWx1ZSBvZiBudW1iZXIgYW5kIG1hc2tzIHNob3VsZCBub3QgYmUgYXBwbGllZFxyXG4gICAgICAgIC8vIFNvLCBwcmVwYXJlIHRlbXBvcmFyeSBwaWN0dXJlIHRvIGdlbmVyYXRlIG5hdGl2ZSB2YWx1ZS5cclxuICAgICAgICBsZXQgIG5ld1BpYyA9IHBpYy5nZXRVbmZvcm1hdHRlZE51bWVyaWNQaWMoKTtcclxuXHJcbiAgICAgICAgLy9zdG9yZSBhbmQgcmVzdG9yZSBkZWNpbWFsIHNlcCBhbmQgdGhvdS4gc2VwXHJcbiAgICAgICAgbGV0ICBkZWM6IHN0cmluZyA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldERlY2ltYWwoKTtcclxuICAgICAgICBsZXQgdGhvdTpzdHJpbmcgID0gR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuR2V0VGhvdXNhbmRzKCk7XHJcblxyXG4gICAgICAgIC8vc2V0IGRlZmF1bHQgdmFsdWVzXHJcbiAgICAgICAgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuc2V0RGVjaW1hbFNlcGFyYXRvcignLicpO1xyXG4gICAgICAgIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LnNldFRob3VzYW5kc1NlcGFyYXRvcignLCcpO1xyXG5cclxuICAgICAgICBzdHIgPSB0aGlzLmZyb21OdW0obWdWYWx1ZSwgbmV3UGljKTtcclxuICAgICAgICBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5zZXREZWNpbWFsU2VwYXJhdG9yKGRlYyk7XHJcbiAgICAgICAgR3VpRW52aXJvbm1lbnQuRW52aXJvbm1lbnQuc2V0VGhvdXNhbmRzU2VwYXJhdG9yKHRob3UpO1xyXG4gICAgICAgIC8vIFZhbHVlIHNob3VsZCBiZSB0cmltbWVkIHdoZW4gd2UgYXJlIGRpc3BsYXlpbmcgY29udHJvbCBpbiBvcmRlciB0byBkaXNwbGF5IGFsaWdubWVudCBwcm9wZXJseS4gQnV0IHdoaWxlIGVudGVyaW5nIGNvbnRyb2wsIGl0IHNob3VsZCBub3QgYmUgdHJpbW1lZFxyXG4gICAgICAgIC8vIGluIG9yZGVyIHRvIHJlYWQgaXQgcHJvcGVybHkuXHJcbiAgICAgICAgaWYgKG5ld1BpYy5nZXRNYXNrQ2hhcnMoKSA9PT0gMCB8fCAhdGltZV9kYXRlX251bV9waWNfWl9lZHQpXHJcbiAgICAgICAgICBzdHIgPSBTdHJVdGlsLmx0cmltKHN0cik7XHJcblxyXG4gICAgICAgIGlmICh1c2VOYXRpdmUpIHtcclxuICAgICAgICAgIGlmIChzdHIgPT0gXCJcIilcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgICAgbGV0IGRibDogbnVtYmVyID0gTnVtYmVyKHN0cik7XHJcbiAgICAgICAgICByZXR1cm4gZGJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOiB7XHJcbiAgICAgICAgaWYgKHVzZU5hdGl2ZSkge1xyXG4gICAgICAgICAgbGV0IGR0OiBEYXRlO1xyXG4gICAgICAgICAgZHQgPSB0aGlzLmZyb21NZ0RhdGVUb05hdGl2ZURhdGUobWdWYWx1ZSwgcGljLCBjb21wSWR4KTtcclxuICAgICAgICAgIHJldHVybiBkdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBzdHIgPSB0aGlzLmZyb21EYXRlKG1nVmFsdWUsIHBpYywgY29tcElkeCwgdGltZV9kYXRlX251bV9waWNfWl9lZHQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOiB7XHJcbiAgICAgICAgaWYgKHVzZU5hdGl2ZSkge1xyXG4gICAgICAgICAgbGV0IGR0OiBEYXRlO1xyXG4gICAgICAgICAgZHQgPSB0aGlzLmZyb21NZ1RpbWVUb05hdGl2ZVRpbWUobWdWYWx1ZSwgcGljKTtcclxuICAgICAgICAgIHJldHVybiBkdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBzdHIgPSB0aGlzLmZyb21UaW1lKG1nVmFsdWUsIHBpYywgdGltZV9kYXRlX251bV9waWNfWl9lZHQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOiB7XHJcbiAgICAgICAgbGV0IGxvZ1ZhbDogYm9vbGVhbjtcclxuICAgICAgICBsb2dWYWwgPSB0aGlzLmZyb21NZ0xvZ2ljYWxUb05hdGl2ZUxvZ2ljYWwobWdWYWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIGxvZ1ZhbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgc3RyID0gQmxvYlR5cGUuZ2V0U3RyaW5nKG1nVmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgc3RyID0gbWdWYWx1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYW4gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBkaXNwbGF5IHZhbHVlIGZyb20gaXRzIHBpY3R1cmUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRpc3BWYWx1ZVwiPnRoZSB2YWx1ZSBhcyBlbnRlcmVkIGJ5IHVzZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJhbmdlU3RyXCI+dmFsdWUgcmFuZ2VcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1wiPnRoZSBwaWN0dXJlIGZvcm1hdFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYmxvYkNvbnRlbnRUeXBlXCI+aWYgdGhlIGF0dHJpYnV0ZSBpcyBibG9iLCBpdHMgY29udGVudCB0eXBlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBpbnRlcm5hbCBmb3JtIG9mIGRhdGEgKGFzIHVzZWQgaW4gdGhlIFhNTClcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGRpc3AybWcoZGlzcFZhbHVlOiBhbnksIHBpYzogUElDLCBjb21wSWR4OiBudW1iZXIsIGJsb2JDb250ZW50VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBzdHI6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgc3dpdGNoIChwaWMuZ2V0QXR0cigpKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgc3RyID0gdGhpcy50b0FscGhhKGRpc3BWYWx1ZSwgcGljKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzoge1xyXG4gICAgICAgIGRpc3BWYWx1ZSA9IFN0cmluZyhkaXNwVmFsdWUpO1xyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgbWFzayBmcm9tIGRpc3BsYXkgdmFsdWUuXHJcbiAgICAgICAgbGV0IGxlbjogbnVtYmVyID0gZGlzcFZhbHVlLmxlbmd0aDtcclxuICAgICAgICB3aGlsZSAobGVuID4gMCkge1xyXG4gICAgICAgICAgaWYgKCFwaWMucGljSXNNYXNrKGxlbiAtIDEpICYmIGRpc3BWYWx1ZVtsZW4gLSAxXSAhPT0gKCcgJykpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXNwVmFsdWUubGVuZ3RoID4gbGVuKVxyXG4gICAgICAgICAgZGlzcFZhbHVlID0gTlN0cmluZy5SZW1vdmUoZGlzcFZhbHVlLCBsZW4sIChkaXNwVmFsdWUubGVuZ3RoIC0gbGVuKSk7XHJcblxyXG4gICAgICAgIGlmIChwaWMuaXNOZWdhdGl2ZSgpICYmIGRpc3BWYWx1ZS50cmltKCkuc3RhcnRzV2l0aChcIi1cIikpXHJcbiAgICAgICAgICBkaXNwVmFsdWUgPSBTdHJVdGlsLmx0cmltKGRpc3BWYWx1ZSk7XHJcblxyXG4gICAgICAgIC8vc3RvcmUgYW5kIHJlc3RvcmUgZGVjaW1hbCBzZXAgYW5kIHRob3UuIHNlcFxyXG4gICAgICAgIGxldCAgZGVjOiBzdHJpbmcgPSBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5HZXREZWNpbWFsKCk7XHJcbiAgICAgICAgbGV0IHRob3U6c3RyaW5nICA9IEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFRob3VzYW5kcygpO1xyXG5cclxuICAgICAgICAvL3NldCBkZWZhdWx0IHZhbHVlc1xyXG4gICAgICAgIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LnNldERlY2ltYWxTZXBhcmF0b3IoJy4nKTtcclxuICAgICAgICBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5zZXRUaG91c2FuZHNTZXBhcmF0b3IoJywnKTtcclxuXHJcbiAgICAgICAgLy8gTm93LCBjdXJyZWN5IGRpcmVjdGl2ZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIHdpbGwgYmUgaGFuZGxlZCBieSBhbmd1bGFyIHBhY2thZ2VzIGxpa2UgbmctY3VycmVuY3lcclxuICAgICAgICAvLyBoZXJlIGl0IHNob3VsZCBzaW1wbHkgcGFzcyB0aGUgYWN0dWFsIG5hdGl2ZSB2YWx1ZSBvZiBudW1iZXIgYW5kIG1hc2tzIHNob3VsZCBub3QgYmUgYXBwbGllZFxyXG4gICAgICAgIC8vIFNvLCBwcmVwYXJlIHRlbXBvcmFyeSBwaWN0dXJlIHRvIGdlbmVyYXRlIG5hdGl2ZSB2YWx1ZS5cclxuICAgICAgICBsZXQgIG5ld1BpYyA9IHBpYy5nZXRVbmZvcm1hdHRlZE51bWVyaWNQaWMoKTtcclxuXHJcbiAgICAgICAgc3RyID0gdGhpcy50b051bShkaXNwVmFsdWUsIG5ld1BpYywgY29tcElkeCk7XHJcblxyXG4gICAgICAgIEd1aUVudmlyb25tZW50LkVudmlyb25tZW50LnNldERlY2ltYWxTZXBhcmF0b3IoZGVjKTtcclxuICAgICAgICBHdWlFbnZpcm9ubWVudC5FbnZpcm9ubWVudC5zZXRUaG91c2FuZHNTZXBhcmF0b3IodGhvdSk7XHJcbiAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAge1xyXG4gICAgICAgIGxldCBkdDogRGF0ZTtcclxuICAgICAgICAvL3doZW4gZGF0ZSBpcyBpbiBpdGVtIGxpc3QgZm9yIGNob2ljZSBjdHJsLCBpdCB3aWxsIGNvbWUgaGVyZSBhcyBzdHJpbmcuIHNvIGNvbnZlcnQgaXQgdG8gRGF0ZS5cclxuICAgICAgICBpZiAodHlwZW9mIGRpc3BWYWx1ZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICBkdCA9IG5ldyBEYXRlIChkaXNwVmFsdWUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGR0ID0gZGlzcFZhbHVlO1xyXG4gICAgICAgIHN0ciA9IHRoaXMuZnJvbU5hdGl2ZURhdGVUb01nRGF0ZShkdCwgcGljKTtcclxuICAgICAgfVxyXG4gICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRToge1xyXG4gICAgICAgIGxldCBkdDogRGF0ZTtcclxuXHJcbiAgICAgICAgLy93aGVuIGRhdGUgaXMgaW4gaXRlbSBsaXN0IGZvciBjaG9pY2UgY3RybCwgaXQgd2lsbCBjb21lIGhlcmUgYXMgc3RyaW5nLiBzbyBjb252ZXJ0IGl0IHRvIERhdGUuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwVmFsdWUgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGR0ID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgIGlmIChkaXNwVmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgZHQuc2V0SG91cnMoK1N0cmluZyhkaXNwVmFsdWUpLnN1YnN0cigwLCAyKSk7XHJcbiAgICAgICAgICAgIGR0LnNldE1pbnV0ZXMoK1N0cmluZyhkaXNwVmFsdWUpLnN1YnN0cigwLCAyKSk7XHJcbiAgICAgICAgICAgIGlmIChTdHJpbmcoZGlzcFZhbHVlKS5sZW5ndGggPiA1KVxyXG4gICAgICAgICAgICAgIGR0LnNldFNlY29uZHMoK1N0cmluZyhkaXNwVmFsdWUpLnN1YnN0cigwLCAyKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBkdCA9IGRpc3BWYWx1ZTtcclxuXHJcbiAgICAgICAgc3RyID0gdGhpcy5mcm9tTmF0aXZlVGltZVRvTWdUaW1lKGR0KTtcclxuICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIHN0ciA9IHRoaXMuZnJvbU5hdGl2ZUxvZ2ljYWxUb01nTG9naWNhbChkaXNwVmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgIHN0ciA9IEJsb2JUeXBlLmNyZWF0ZUZyb21TdHJpbmcoZGlzcFZhbHVlLCBibG9iQ29udGVudFR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gIE1ldGhvZHMgZm9yIGNvdmVydGluZyBJTlRFUk5BTCAtLS0+IERJUExBWVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBIYW5kbGVzIG1hZ2ljIG51bWJlciB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtZ051bVwiPiAgIEEgTWFnaWMgTnVtYmVyPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPiAgVGhlIHBpY3R1cmUgdG8gdXNlPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkPC9yZXR1cm5zPlxyXG4gIHB1YmxpYyBmcm9tTnVtKG1nVmFsdWU6IHN0cmluZywgcGljOiBQSUMpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1nTnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRShtZ1ZhbHVlKTtcclxuICAgIHJldHVybiBtZ051bS50b0Rpc3BsYXlWYWx1ZShwaWMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgZm9yIGFuIGFscGhhIHZhbHVlIGFjY29yZGluZyB0byB0aGUgcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhU3RyXCI+ICAgVGhlIHNvdXJjZSBkYXRhXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj4gICAgVGhlIHBpY3R1cmUgdG8gdXNlIGZvciB0aGUgdmFsdWUgdG8gZGlzcGxheVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmFuZ2VTdHJcIj4gIFRoZSByYW5nZSBvZiB2YWx1ZXMgdG8gY2hlY2tcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFsd2F5c0ZpbGxcIj5BbHdheXMgYXV0byBmaWxsIGFscGhhIG92ZXIgaXRzIHBpY3R1cmUgKHVzZWQgZm9yIHNlbGVjdCBjb250cm9scylcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGZyb21BbHBoYShkYXRhU3RyOiBzdHJpbmcsIHBpYzogUElDLCByYW5nZVN0cjogc3RyaW5nLCBhbHdheXNGaWxsOiBib29sZWFuLCBjb252ZXJ0Q2FzZTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgbGVuOiBudW1iZXIgPSBwaWMuZ2V0TWFza1NpemUoKTtcclxuICAgIGxldCBtaW5fbGVuOiBudW1iZXIgPSBsZW47XHJcbiAgICBsZXQgbWFza1N0cjogc3RyaW5nID0gcGljLmdldE1hc2soKTtcclxuICAgIGxldCByZXNTdHI6IHN0cmluZztcclxuXHJcbiAgICBpZiAocGljLmdldE1hc2tDaGFycygpID4gMCkge1xyXG4gICAgICByZXNTdHIgPSB0aGlzLndpbl9kYXRhX2NweShOU3RyaW5nLlRvQ2hhckFycmF5KG1hc2tTdHIpLCBsZW4sIE5TdHJpbmcuVG9DaGFyQXJyYXkoZGF0YVN0ciksIHBpYy5pc0F0dHJBbHBoYSgpLCBjb252ZXJ0Q2FzZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkgJiYgcGljLmlzQXR0ckFscGhhKCkpXHJcbiAgICAgIC8vIEpQTjogREJDUyBzdXBwb3J0XHJcbiAgICAgIHtcclxuICAgICAgICAvLyBzdWJzdHJpbmcgYnkgdGhlIG51bWJlciBvZiBieXRlc1xyXG4gICAgICAgIGxldCBpbnREYXRhU3RyTGVuQjogbnVtYmVyID0gVXRpbFN0ckJ5dGVNb2RlLmxlbkIoZGF0YVN0cik7XHJcbiAgICAgICAgaWYgKG1pbl9sZW4gPiBpbnREYXRhU3RyTGVuQikge1xyXG4gICAgICAgICAgbWluX2xlbiA9IGludERhdGFTdHJMZW5CO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXNTdHIgPSBVdGlsU3RyQnl0ZU1vZGUubGVmdEIoZGF0YVN0ciwgbWluX2xlbik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZGF0YVN0ciAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChtaW5fbGVuID4gZGF0YVN0ci5sZW5ndGgpIHtcclxuICAgICAgICAgIG1pbl9sZW4gPSBkYXRhU3RyLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnZlcnRDYXNlKSB7XHJcbiAgICAgICAgICByZXNTdHIgPSB0aGlzLndpbl9kYXRhX2NweShOU3RyaW5nLlRvQ2hhckFycmF5KG1hc2tTdHIpLCBsZW4sIE5TdHJpbmcuVG9DaGFyQXJyYXkoZGF0YVN0ciksIHBpYy5pc0F0dHJBbHBoYSgpLCBjb252ZXJ0Q2FzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmVzU3RyID0gZGF0YVN0ci5zdWJzdHIoMCwgbWluX2xlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gV2UgZG8gbm90IGZpbGwgQWxwaGEgZmlsZWQgb3ZlciBjb250cm9sJ3MgcGljdHVyZSBsZW5ndGggUUNSICMgMjk1NDA4XHJcbiAgICBpZiAoYWx3YXlzRmlsbCB8fCAocmFuZ2VTdHIgIT09IG51bGwgJiYgcmFuZ2VTdHIubGVuZ3RoID4gMCAmJiByZXNTdHIubGVuZ3RoIDwgbGVuKSkge1xyXG4gICAgICBsZXQgdmQ6IFZhbGlkYXRpb25EZXRhaWxzQmFzZSA9IG5ldyBWYWxpZGF0aW9uRGV0YWlsc0Jhc2UocmFuZ2VTdHIpO1xyXG4gICAgICBsZXQgY29udGludW91c1JhbmdlVmFsdWVzOiBMaXN0PHN0cmluZz4gPSB2ZC5nZXRDb250aW51b3VzUmFuZ2VWYWx1ZXMoKTtcclxuICAgICAgbGV0IGRpc2NyZXRlUmFuZ2VWYWx1ZXM6IExpc3Q8c3RyaW5nPiA9IHZkLmdldERpc2NyZXRlUmFuZ2VWYWx1ZXMoKTtcclxuICAgICAgaWYgKGNvbnRpbnVvdXNSYW5nZVZhbHVlcyAhPT0gbnVsbCB8fCBkaXNjcmV0ZVJhbmdlVmFsdWVzICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmVzU3RyID0gdGhpcy5maWxsQWxwaGFCeVJhbmdlKGNvbnRpbnVvdXNSYW5nZVZhbHVlcywgZGlzY3JldGVSYW5nZVZhbHVlcywgcmVzU3RyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc1N0cjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FzZUNvbnZlcnRlZENoYXIoZGF0YTogc3RyaW5nLCBtYXNrOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cclxuICAgIGxldCBjaDogc3RyaW5nO1xyXG4gICAgaWYgKG1hc2suY2hhckNvZGVBdCgwKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19VKSB7XHJcbiAgICAgIGNoID0gZGF0YS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChtYXNrLmNoYXJDb2RlQXQoMCkgPT09IFBJQ0ludGVyZmFjZS5QSUNfTCkge1xyXG4gICAgICAgIGNoID0gZGF0YS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNoID0gZGF0YTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNoO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3aW5fZGF0YV9jcHkobWFza1N0cjogc3RyaW5nW10sIG1hc2tMZW46IG51bWJlciwgZGF0YVN0cjogc3RyaW5nW10sIGlzQXR0ckFscGhhOiBib29sZWFuKTogc3RyaW5nO1xyXG4gIHByaXZhdGUgd2luX2RhdGFfY3B5KG1hc2tTdHI6IHN0cmluZ1tdLCBtYXNrTGVuOiBudW1iZXIsIGRhdGFTdHI6IHN0cmluZ1tdLCBpc0F0dHJBbHBoYTogYm9vbGVhbiwgY29udmVydENhc2U6IGJvb2xlYW4pOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB3aW5fZGF0YV9jcHkobWFza1N0cjogYW55LCBtYXNrTGVuOiBudW1iZXIsIGRhdGFTdHI6IGFueSwgaXNBdHRyQWxwaGE6IGJvb2xlYW4sIGNvbnZlcnRDYXNlPzogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNClcclxuICAgICAgcmV0dXJuIHRoaXMud2luX2RhdGFfY3B5XzAobWFza1N0ciwgbWFza0xlbiwgZGF0YVN0ciwgaXNBdHRyQWxwaGEpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLndpbl9kYXRhX2NweV8xKG1hc2tTdHIsIG1hc2tMZW4sIGRhdGFTdHIsIGlzQXR0ckFscGhhLCBjb252ZXJ0Q2FzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdpbl9kYXRhX2NweV8wKG1hc2tTdHI6IHN0cmluZ1tdLCBtYXNrTGVuOiBudW1iZXIsIGRhdGFTdHI6IHN0cmluZ1tdLCBpc0F0dHJBbHBoYTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy53aW5fZGF0YV9jcHkobWFza1N0ciwgbWFza0xlbiwgZGF0YVN0ciwgaXNBdHRyQWxwaGEsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBIYW5kbGVzIGFscGhhIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1hc2tTdHJcIj4gICBUaGUgbWFzayB0byBiZSB1c2VkIGluIG9yZGVyIHRvIGJ1aWxkIHRoZSBzdHJpbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPiAgICBUaGUgcGljdHVyZSB0byB1c2VcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHdpbl9kYXRhX2NweV8xKG1hc2tTdHI6IHN0cmluZ1tdLCBtYXNrTGVuOiBudW1iZXIsIGRhdGFTdHI6IHN0cmluZ1tdLCBpc0F0dHJBbHBoYTogYm9vbGVhbiwgY29udmVydENhc2U6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgbGV0IG1hc2tJZHg6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZGF0YUlkeDogbnVtYmVyID0gMDtcclxuICAgIGxldCByZXNTdHI6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4obWFza0xlbik7XHJcblxyXG4gICAgaWYgKGlzQXR0ckFscGhhICYmIFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkpIHtcclxuICAgICAgbGV0IG51bTI6IG51bWJlciA9IDA7XHJcbiAgICAgIHdoaWxlIChtYXNrSWR4IDwgbWFza0xlbiAmJiBudW0yIDwgbWFza0xlbikge1xyXG4gICAgICAgIGlmIChtYXNrU3RyW21hc2tJZHhdLmNoYXJDb2RlQXQoMCkgPD0gUElDSW50ZXJmYWNlLlBJQ19NQVhfT1ApIHtcclxuICAgICAgICAgIGlmIChkYXRhSWR4IDwgZGF0YVN0ci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IHN0clZhbDogc3RyaW5nID0gTlN0cmluZy5Gcm9tQ2hhcnMoZGF0YVN0ciwgZGF0YUlkeCwgMSk7XHJcbiAgICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUubGVuQihzdHJWYWwpID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG1hc2tJZHggKyAxIDwgbWFza0xlbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hc2tTdHJbbWFza0lkeCArIDFdLmNoYXJDb2RlQXQoMCkgPD0gUElDSW50ZXJmYWNlLlBJQ19NQVhfT1ApIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRDYXNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzU3RyW251bTIrK10gPSB0aGlzLmNhc2VDb252ZXJ0ZWRDaGFyKGRhdGFTdHJbZGF0YUlkeCsrXSwgbWFza1N0clttYXNrSWR4ICsgMV0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc1N0cltudW0yKytdID0gZGF0YVN0cltkYXRhSWR4KytdO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIG1hc2tJZHggPSBtYXNrSWR4ICsgMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICByZXNTdHJbbnVtMisrXSA9ICcgJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXNTdHJbbnVtMisrXSA9ICcgJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbnZlcnRDYXNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXNTdHJbbnVtMisrXSA9IHRoaXMuY2FzZUNvbnZlcnRlZENoYXIoZGF0YVN0cltkYXRhSWR4KytdLCBtYXNrU3RyW21hc2tJZHggKyAxXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzU3RyW251bTIrK10gPSBkYXRhU3RyW2RhdGFJZHgrK107XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVzU3RyW251bTIrK10gPSAnICcvKicgJyovO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1N0cltudW0yKytdID0gbWFza1N0clttYXNrSWR4XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWFza0lkeCA9IG1hc2tJZHggKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyhyZXNTdHIpLnN1YnN0cigwLCBudW0yKTtcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSAobWFza0lkeCA8IG1hc2tMZW4pIHtcclxuICAgICAgaWYgKG1hc2tTdHJbbWFza0lkeF0uY2hhckNvZGVBdCgwKSA8PSBQSUNJbnRlcmZhY2UuUElDX01BWF9PUCkge1xyXG4gICAgICAgIGlmIChkYXRhSWR4IDwgZGF0YVN0ci5sZW5ndGgpIHtcclxuICAgICAgICAgIHJlc1N0clttYXNrSWR4XSA9IGRhdGFTdHJbZGF0YUlkeF07XHJcbiAgICAgICAgICBpZiAoY29udmVydENhc2UpIHtcclxuICAgICAgICAgICAgcmVzU3RyW21hc2tJZHhdID0gdGhpcy5jYXNlQ29udmVydGVkQ2hhcihkYXRhU3RyW2RhdGFJZHhdLCBtYXNrU3RyW21hc2tJZHhdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXNTdHJbbWFza0lkeF0gPSBkYXRhU3RyW2RhdGFJZHhdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGF0YUlkeCA9IGRhdGFJZHggKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1N0clttYXNrSWR4XSA9ICcgJy8qJyAnKi87XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJlc1N0clttYXNrSWR4XSA9IG1hc2tTdHJbbWFza0lkeF07XHJcbiAgICAgIH1cclxuICAgICAgbWFza0lkeCA9IG1hc2tJZHggKyAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKHJlc1N0cik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYSBkaXNwbGF5IHN0cmluZyBmb3IgYW4gZGF0ZSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0YVN0clwiPiAgIFRoZSBzb3VyY2UgZGF0YTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj4gICAgVGhlIHBpY3R1cmUgdG8gdXNlIGZvciB0aGUgdmFsdWUgdG8gZGlzcGxheTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZDwvcmV0dXJucz5cclxuICBmcm9tRGF0ZShkYXRhU3RyOiBzdHJpbmcsIHBpYzogUElDLCBjb21wSWR4OiBudW1iZXIsIHRpbWVfZGF0ZV9waWNfWl9lZHQ6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgbGV0IG1hc2s6IHN0cmluZyA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgICBsZXQgbWFza1NpemU6IG51bWJlciA9IHBpYy5nZXRNYXNrU2l6ZSgpO1xyXG4gICAgbGV0IGRhdGU6IG51bWJlciA9IG5ldyBOVU1fVFlQRShkYXRhU3RyKS5OVU1fMl9VTE9ORygpO1xyXG4gICAgcmV0dXJuIHRoaXMudG9fYV9waWNfZGF0ZW1vZGUobWFzaywgbWFza1NpemUsIGRhdGUsIHBpYywgdGltZV9kYXRlX3BpY19aX2VkdCwgZmFsc2UsIGNvbXBJZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgZm9yIGFuIHRpbWUgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFTdHJcIj4gICBUaGUgc291cmNlIGRhdGE8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgIFRoZSBwaWN0dXJlIHRvIHVzZSBmb3IgdGhlIHZhbHVlIHRvIGRpc3BsYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQ8L3JldHVybnM+XHJcbiAgZnJvbVRpbWUoZGF0YVN0cjogc3RyaW5nLCBwaWM6IFBJQywgdGltZV9kYXRlX3BpY19aX2VkdDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgbWFzazogc3RyaW5nID0gcGljLmdldE1hc2soKTtcclxuICAgIGxldCBtYXNrU2l6ZTogbnVtYmVyID0gcGljLmdldE1hc2tTaXplKCk7XHJcbiAgICBsZXQgdGltZTogbnVtYmVyID0gbmV3IE5VTV9UWVBFKGRhdGFTdHIpLk5VTV8yX1VMT05HKCk7XHJcbiAgICByZXR1cm4gdGhpcy50aW1lXzJfYV9waWMobWFzaywgbWFza1NpemUsIHRpbWUsIHBpYywgdGltZV9kYXRlX3BpY19aX2VkdCwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgZm9yIGFuIGRhdGUgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFTdHJcIj4gICBUaGUgc291cmNlIGRhdGE8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgIFRoZSBwaWN0dXJlIHRvIHVzZSBmb3IgdGhlIHZhbHVlIHRvIGRpc3BsYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQ8L3JldHVybnM+XHJcbiAgZnJvbU1nRGF0ZVRvTmF0aXZlRGF0ZShkYXRhU3RyOiBzdHJpbmcsIHBpYzogUElDLCBjb21wSWR4OiBudW1iZXIpOiBEYXRlIHtcclxuXHJcbiAgICBsZXQgZGF0ZTogbnVtYmVyID0gbmV3IE5VTV9UWVBFKGRhdGFTdHIpLk5VTV8yX1VMT05HKCk7XHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcztcclxuLy8gQnJlYWsgZGF0YSBpbnRvIGl0cyBjb21wb25lbnRzXHJcbiAgICBicmVha1BhcmFtcyA9IG5ldyBEYXRlQnJlYWtQYXJhbXMoKTtcclxuICAgIHRoaXMuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZGF0ZSwgZmFsc2UsIGNvbXBJZHgpO1xyXG4gICAgaWYgKGJyZWFrUGFyYW1zLm1vbnRoID4gMClcclxuICAgICAgYnJlYWtQYXJhbXMubW9udGggPSBicmVha1BhcmFtcy5tb250aCAtIDE7IC8vbW9udGggaXMgMCBiYXNlZCBpbiBEYXRlIGNsYXNzXHJcblxyXG4gICAgaWYgKGJyZWFrUGFyYW1zLnllYXIgPT0gMCAmJiBicmVha1BhcmFtcy5tb250aCA9PSAwICYmIGJyZWFrUGFyYW1zLmRheSA9PSAwKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBsZXQgbWFza1N0ciA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgICBsZXQgb3V0VmFsOiBzdHJpbmdbXSA9IE5TdHJpbmcuVG9DaGFyQXJyYXkobWFza1N0cik7XHJcblxyXG4gICAgbGV0IGxlbiA9IHBpYy5nZXRNYXNrU2l6ZSgpO1xyXG5cclxuICAgIGxldCB5ZWFyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgIGxldCAgb3V0SWR4ID0gMDtcclxuICAgIHdoaWxlIChsZW4gPiAwKSB7XHJcblxyXG4gICAgICBzd2l0Y2ggKG91dFZhbFtvdXRJZHhdLmNoYXJDb2RlQXQoMCkpIHtcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWVk6IHtcclxuICAgICAgICAgIHRoaXMuaW50XzJfYShvdXRWYWwsIG91dElkeCwgMiwgYnJlYWtQYXJhbXMueWVhciwgJzAnKTtcclxuICAgICAgICAgIGxldCB5ZWFyU3RyID0gTlN0cmluZy5Gcm9tQ2hhcnMob3V0VmFsLCBvdXRJZHgsIDIpO1xyXG4gICAgICAgICAgeWVhciA9ICt5ZWFyU3RyLnN1YnN0cihvdXRJZHgpO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IDI7XHJcbiAgICAgICAgICBsZW4gLT0gMjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1lZWVk6XHJcbiAgICAgICAgICB0aGlzLmludF8yX2Eob3V0VmFsLCBvdXRJZHgsIDQsIGJyZWFrUGFyYW1zLnllYXIsICcwJyk7XHJcbiAgICAgICAgICBsZXQgeWVhclN0ciA9IE5TdHJpbmcuRnJvbUNoYXJzKG91dFZhbCwgb3V0SWR4LCA0KTtcclxuICAgICAgICAgIHllYXIgPSAreWVhclN0ci5zdWJzdHIob3V0SWR4KTtcclxuICAgICAgICAgIG91dElkeCArPSA0O1xyXG4gICAgICAgICAgbGVuIC09IDQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgb3V0SWR4Kys7XHJcbiAgICAgICAgICBsZW4tLTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgbmF0aXZlRHQ6IERhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBicmVha1BhcmFtcy5tb250aCwgYnJlYWtQYXJhbXMuZGF5KTtcclxuXHJcbiAgICByZXR1cm4gbmF0aXZlRHQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgZm9yIGFuIGRhdGUgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFTdHJcIj4gICBUaGUgc291cmNlIGRhdGE8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgIFRoZSBwaWN0dXJlIHRvIHVzZSBmb3IgdGhlIHZhbHVlIHRvIGRpc3BsYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQ8L3JldHVybnM+XHJcbiAgZnJvbU5hdGl2ZURhdGVUb01nRGF0ZU51bWJlcihuYXRpdmVEYXRlOiBEYXRlLCBwaWM6IFBJQyk6IG51bWJlciB7XHJcbiAgICBsZXQgbnVtVmFsOiBudW1iZXI7XHJcbiAgICBsZXQgZGF0ZVBhcmFtczogRGF0ZUJyZWFrUGFyYW1zO1xyXG4gICAgbGV0IG1pbGxlbml1bTogbnVtYmVyID0gMDtcclxuICAgIGxldCB5ZWFyOiBudW1iZXIgPSBuYXRpdmVEYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICBsZXQgZGF5OiBudW1iZXIgPSBuYXRpdmVEYXRlLmdldERhdGUoKTtcclxuICAgIGxldCBtb250aDogbnVtYmVyID0gbmF0aXZlRGF0ZS5nZXRNb250aCgpICsgMTtcclxuXHJcbiAgICAvLyBIZWJyZXcgWWVhclxyXG4gICAgaWYgKHBpYy5pc0hlYnJldygpKSB7XHJcbiAgICAgIGlmICh5ZWFyID4gMCkge1xyXG4gICAgICAgIGlmIChtaWxsZW5pdW0gPT09IDApXHJcbiAgICAgICAgICBtaWxsZW5pdW0gPSA1O1xyXG4gICAgICAgIHllYXIgKz0gbWlsbGVuaXVtICogMTAwMDtcclxuICAgICAgfVxyXG4gICAgICBudW1WYWwgPSAoSGVicmV3RGF0ZS5kYXRlaGViXzJfZCh5ZWFyLCBtb250aCwgZGF5KSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gdGhlIG5leHQgMiBsaW5lcyBzdXBwb3J0IDQueHggREQvTU0gcGljdHVyZXNcclxuICAgICAgaWYgKHllYXIgPT09IDApIHtcclxuICAgICAgICBkYXRlUGFyYW1zID0gdGhpcy5kYXRlX3N5cygpO1xyXG4gICAgICAgIHllYXIgPSBkYXRlUGFyYW1zLnllYXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG51bVZhbCA9IHRoaXMuZGF0ZV80X2NhbGVuZGVyKHllYXIsIG1vbnRoLCBkYXksIDAsIGZhbHNlKTsgICAgLy8gd2UgYXJlIGFkZGluZyBhIGxpdHRsZSBlbXB0eSBzcGFjZSB0byB0aGUgdmFyaWFibGUsIGJlY2F1c2Ugd2UgbWlnaHQgbGF0ZXJcclxuICAgIH1cclxuICAgIHJldHVybiBudW1WYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQnVpbGQgYSBkaXNwbGF5IHN0cmluZyBmb3IgYW4gZGF0ZSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0YVN0clwiPiAgIFRoZSBzb3VyY2UgZGF0YTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNTdHJcIj4gICAgVGhlIHBpY3R1cmUgdG8gdXNlIGZvciB0aGUgdmFsdWUgdG8gZGlzcGxheTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZDwvcmV0dXJucz5cclxuICBmcm9tTmF0aXZlRGF0ZVRvTWdEYXRlKG5hdGl2ZURhdGU6IERhdGUsIHBpYzogUElDKTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgbWdOdW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICBsZXQgbnVtVmFsOiBudW1iZXIgPSBuYXRpdmVEYXRlID09IG51bGwgPyAwIDogdGhpcy5mcm9tTmF0aXZlRGF0ZVRvTWdEYXRlTnVtYmVyKG5hdGl2ZURhdGUsIHBpYyk7XHJcbiAgICBtZ051bS5OVU1fNF9MT05HKG51bVZhbCk7XHJcblxyXG4gICAgcmV0dXJuIG1nTnVtLnRvWE1McmVjb3JkKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSGFuZGxlIGRhdGUgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib3V0U3RyXCI+ICAgICAgICAgIFRoZSBtYXNrIHRvIGJlIHVzZWRcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm91dF9sZW5cIj4gICAgICAgICBNYXNrIGxlbmd0aFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICAgICAgICAgICAgIFRoZSBwaWN1cmUgaW5mb3JtYXRpb25cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGVfcGljX1pfZWR0XCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZ25vcmVfZHRfZm10XCI+XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3RyaW5nIHRvIGJlIGRpc3BsYXllZFxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgdG9fYV9waWNfZGF0ZW1vZGUob3V0U3RyOiBzdHJpbmcsIG91dF9sZW46IG51bWJlciwgZGF0ZTogbnVtYmVyLCBwaWM6IFBJQywgZGF0ZV9waWNfWl9lZHQ6IGJvb2xlYW4sIGlnbm9yZV9kdF9mbXQ6IGJvb2xlYW4sIGNvbXBJZHg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgbGVuOiBudW1iZXI7XHJcbiAgICBsZXQgZGF5OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGRveTogbnVtYmVyID0gMDtcclxuICAgIGxldCBkb3c6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgeWVhcjogbnVtYmVyID0gMDtcclxuICAgIGxldCBtb250aDogbnVtYmVyID0gMDtcclxuICAgIGxldCBoZGF5OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGh5ZWFyOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGhtb250aDogbnVtYmVyID0gMDtcclxuICAgIGxldCBsZWFwOiBCb29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IHA6IHN0cmluZ1tdO1xyXG4gICAgbGV0IG91dFZhbDogc3RyaW5nW10gPSBOU3RyaW5nLlRvQ2hhckFycmF5KG91dFN0cik7XHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcztcclxuICAgIGxldCBkYXRlTmFtZVBhcmFtczogRGF0ZU5hbWVQYXJhbXM7XHJcbiAgICBsZXQgb3V0SWR4OiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHN0ck91dDogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICAvLyBJZiByZXN1bHQgb3ZlcmZsb3dzIHJldHVybiBidWZmZXIsIGZpbGwgd2l0aCBhc3Rlcml4cyBhbmQgYmFpbCBvdXRcclxuICAgIGlmIChwaWMuZ2V0TWFza1NpemUoKSA+IG91dF9sZW4pIHtcclxuICAgICAgZm9yICg7IGkgPCBvdXRfbGVuOyBpKyspXHJcbiAgICAgICAgb3V0VmFsW2ldID0gJyonO1xyXG4gICAgICByZXR1cm4gTlN0cmluZy5Gcm9tQ2hhcnMob3V0VmFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB6ZXJvIGZpbGwgcmVxdWVzdGVkIGFuZCBkYXRlIHZhbHVlIGlzIHplcm8sIGZpbGwgaXQgYW5kIGJhaWwgb3V0XHJcbiAgICBvdXRfbGVuID0gbGVuID0gcGljLmdldE1hc2tTaXplKCk7XHJcbiAgICBpZiAocGljLnplcm9GaWxsKCkgJiYgZGF0ZSA9PT0gMCAmJiAhZGF0ZV9waWNfWl9lZHQpIHtcclxuICAgICAgZm9yICg7IGkgPCBvdXRfbGVuOyBpKyspXHJcbiAgICAgICAgb3V0VmFsW2ldID0gcGljLmdldFplcm9QYWQoKTtcclxuICAgICAgcmV0dXJuIE5TdHJpbmcuRnJvbUNoYXJzKG91dFZhbCk7XHJcbiAgICB9XHJcbiAgICBpZiAocGljLmlzSGVicmV3KCkgJiYgKGRhdGUgPT09IDAgfHwgZGF0ZSA9PT0gMTAwMDAwMDAwMCkpIHtcclxuICAgICAgZm9yICg7IGkgPCBvdXRfbGVuOyBpKyspXHJcbiAgICAgICAgb3V0VmFsW2ldID0gJyAnO1xyXG4gICAgICByZXR1cm4gTlN0cmluZy5Gcm9tQ2hhcnMob3V0VmFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBCcmVhayBkYXRhIGludG8gaXRzIGNvbXBvbmVudHNcclxuICAgIGJyZWFrUGFyYW1zID0gbmV3IERhdGVCcmVha1BhcmFtcyh5ZWFyLCBtb250aCwgZGF5LCBkb3ksIGRvdyk7XHJcbiAgICB0aGlzLmRhdGVfYnJlYWtfZGF0ZW1vZGUoYnJlYWtQYXJhbXMsIGRhdGUsIGlnbm9yZV9kdF9mbXQsIGNvbXBJZHgpO1xyXG4gICAgaWYgKHBpYy5pc0hlYnJldygpKSB7XHJcbiAgICAgIGxldCByZWZoZGF5OiBSZWZQYXJhbTxudW1iZXI+ID0gbmV3IFJlZlBhcmFtPG51bWJlcj4oaGRheSk7XHJcbiAgICAgIGxldCByZWZobW9udGg6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW08bnVtYmVyPihobW9udGgpO1xyXG4gICAgICBsZXQgcmVmaHllYXI6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW08bnVtYmVyPihoeWVhcik7XHJcbiAgICAgIGxlYXAgPSBIZWJyZXdEYXRlLmRhdGVoZWJfNF9kKGRhdGUsIHJlZmhkYXksIHJlZmhtb250aCwgcmVmaHllYXIpO1xyXG5cclxuICAgICAgaGRheSA9IHJlZmhkYXkudmFsdWU7XHJcbiAgICAgIGhtb250aCA9IHJlZmhtb250aC52YWx1ZTtcclxuICAgICAgaHllYXIgPSByZWZoeWVhci52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB5ZWFyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgIG1vbnRoID0gYnJlYWtQYXJhbXMubW9udGg7XHJcbiAgICBkYXkgPSBicmVha1BhcmFtcy5kYXk7XHJcbiAgICBkb3kgPSBicmVha1BhcmFtcy5kb3k7XHJcbiAgICBkb3cgPSBicmVha1BhcmFtcy5kb3c7XHJcbiAgICBicmVha1BhcmFtcyA9IG51bGw7XHJcbiAgICB3aGlsZSAobGVuID4gMCkge1xyXG4gICAgICBsZXQgcmVmT3V0TGVuOiBSZWZQYXJhbTxudW1iZXI+ID0gbmV3IFJlZlBhcmFtPG51bWJlcj4ob3V0X2xlbik7XHJcbiAgICAgIHN3aXRjaCAob3V0VmFsW291dElkeF0uY2hhckNvZGVBdCgwKSkge1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ZWTpcclxuICAgICAgICAgIGlmIChwaWMuemVyb0ZpbGwoKSAmJiBkYXRlID09PSAwICYmIGRhdGVfcGljX1pfZWR0KVxyXG4gICAgICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KG91dFZhbCwgb3V0SWR4LCBwaWMuZ2V0WmVyb1BhZCgpLCAyKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCAyLCB5ZWFyLCAnMCcpO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IDI7XHJcbiAgICAgICAgICBsZW4gLT0gMjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19IWVlZWVk6XHJcbiAgICAgICAgICBpID0gSGVicmV3RGF0ZS5kYXRlaGViXzJfc3RyKG91dFZhbCwgb3V0SWR4LCBsZW4sIHJlZk91dExlbiwgNSwgaHllYXIsIHBpYy5pc1RyaW1lZCgpLCB0cnVlKTtcclxuICAgICAgICAgIG91dF9sZW4gPSByZWZPdXRMZW4udmFsdWU7XHJcbiAgICAgICAgICBvdXRJZHggKz0gaTtcclxuICAgICAgICAgIGxlbiAtPSBpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0hMOlxyXG4gICAgICAgICAgaSA9IEhlYnJld0RhdGUuZGF0ZWhlYl9pXzJfaCgoaHllYXIgLyAxMDAwKSAlIDEwLCBvdXRWYWwsIG91dElkeCwgZmFsc2UsIGZhbHNlKTtcclxuICAgICAgICAgIG91dElkeCsrO1xyXG4gICAgICAgICAgbGVuLS07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSEREOlxyXG4gICAgICAgICAgaSA9IEhlYnJld0RhdGUuZGF0ZWhlYl8yX3N0cihvdXRWYWwsIG91dElkeCwgbGVuLCByZWZPdXRMZW4sIDIsIGhkYXksIHBpYy5pc1RyaW1lZCgpLCBmYWxzZSk7XHJcbiAgICAgICAgICBvdXRfbGVuID0gcmVmT3V0TGVuLnZhbHVlO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IGk7XHJcbiAgICAgICAgICBsZW4gLT0gaTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19ZWVlZOlxyXG4gICAgICAgICAgaWYgKHBpYy56ZXJvRmlsbCgpICYmIGRhdGUgPT09IDAgJiYgZGF0ZV9waWNfWl9lZHQpXHJcbiAgICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQob3V0VmFsLCBvdXRJZHgsIHBpYy5nZXRaZXJvUGFkKCksIDQpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmludF8yX2Eob3V0VmFsLCBvdXRJZHgsIDQsIHllYXIsICcwJyk7XHJcbiAgICAgICAgICBvdXRJZHggKz0gNDtcclxuICAgICAgICAgIGxlbiAtPSA0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX01NRDpcclxuICAgICAgICAgIGlmIChwaWMuemVyb0ZpbGwoKSAmJiBkYXRlID09PSAwICYmIGRhdGVfcGljX1pfZWR0KVxyXG4gICAgICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KG91dFZhbCwgb3V0SWR4LCBwaWMuZ2V0WmVyb1BhZCgpLCAyKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCAyLCBtb250aCwgJzAnKTtcclxuICAgICAgICAgIG91dElkeCArPSAyO1xyXG4gICAgICAgICAgbGVuIC09IDI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTU1NOlxyXG4gICAgICAgICAgaWYgKHBpYy5pc0hlYnJldygpKSB7XHJcbiAgICAgICAgICAgIGlmIChsZWFwICYmIGhtb250aCA9PT0gNilcclxuICAgICAgICAgICAgICBobW9udGggPSAxNDtcclxuICAgICAgICAgICAgbGV0IG1vbnRoTmFtZXM6IHN0cmluZ1tdID0gSGVicmV3RGF0ZS5HZXRMb2NhbE1vbnRocygpO1xyXG4gICAgICAgICAgICBwID0gTlN0cmluZy5Ub0NoYXJBcnJheShtb250aE5hbWVzW2htb250aF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBtb250aFN0cjogc3RyaW5nID0gRXZlbnRzLkdldE1lc3NhZ2VTdHJpbmcoTXNnSW50ZXJmYWNlLk1PTlRIU19QVFIpO1xyXG4gICAgICAgICAgICBsZXQgbW9udGhOYW1lczogc3RyaW5nW10gPSBEYXRlVXRpbC5nZXRMb2NhbE1vbnRocyhtb250aFN0cik7XHJcbiAgICAgICAgICAgIHAgPSBOU3RyaW5nLlRvQ2hhckFycmF5KG1vbnRoTmFtZXNbbW9udGhdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRhdGVOYW1lUGFyYW1zID0gbmV3IERhdGVOYW1lUGFyYW1zKG91dFZhbCwgb3V0SWR4LCBsZW4pO1xyXG4gICAgICAgICAgb3V0X2xlbiAtPSB0aGlzLmRhdGVfaV8yX25tKGRhdGVOYW1lUGFyYW1zLCBwLCBwaWMuaXNUcmltZWQoKSk7XHJcbiAgICAgICAgICBvdXRJZHggPSBkYXRlTmFtZVBhcmFtcy5vdXRJZHg7XHJcbiAgICAgICAgICBsZW4gPSBkYXRlTmFtZVBhcmFtcy5sZW47XHJcbiAgICAgICAgICBkYXRlTmFtZVBhcmFtcyA9IG51bGw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfREQ6XHJcbiAgICAgICAgICBsZXQgaXNaZXJvOiBib29sZWFuID0gcGljLnplcm9GaWxsKCk7XHJcbiAgICAgICAgICBpZiAoaXNaZXJvICYmIGRhdGUgPT09IDAgJiYgZGF0ZV9waWNfWl9lZHQpXHJcbiAgICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQob3V0VmFsLCBvdXRJZHgsIHBpYy5nZXRaZXJvUGFkKCksIDIpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmludF8yX2Eob3V0VmFsLCBvdXRJZHgsIDIsIGRheSwgJzAnKTtcclxuICAgICAgICAgIG91dElkeCArPSAyO1xyXG4gICAgICAgICAgbGVuIC09IDI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfREREOlxyXG4gICAgICAgICAgaWYgKHBpYy56ZXJvRmlsbCgpICYmIGRhdGUgPT09IDAgJiYgZGF0ZV9waWNfWl9lZHQpXHJcbiAgICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQob3V0VmFsLCBvdXRJZHgsIHBpYy5nZXRaZXJvUGFkKCksIDMpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLmludF8yX2Eob3V0VmFsLCBvdXRJZHgsIDMsIGRveSwgJzAnKTtcclxuICAgICAgICAgIGxlbiAtPSAzO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IDM7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfRERERDpcclxuICAgICAgICAgIGkgPSB0aGlzLmRhdGVfMl9EREREKGRheSwgb3V0VmFsLCBvdXRJZHgsIGxlbiwgcGljLmlzVHJpbWVkKCkpO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IGk7XHJcbiAgICAgICAgICBvdXRfbGVuICs9IGkgLSA0O1xyXG4gICAgICAgICAgbGVuIC09IDQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfVzpcclxuICAgICAgICAgIGlmIChwaWMuemVyb0ZpbGwoKSAmJiBkYXRlID09PSAwICYmIGRhdGVfcGljX1pfZWR0KVxyXG4gICAgICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtc2V0KG91dFZhbCwgb3V0SWR4LCBwaWMuZ2V0WmVyb1BhZCgpLCAxKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCAxLCBkb3csICcwJyk7XHJcbiAgICAgICAgICBsZW4tLTtcclxuICAgICAgICAgIG91dElkeCsrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX1dXVzpcclxuICAgICAgICAgIGlmIChwaWMuaXNIZWJyZXcoKSkge1xyXG4gICAgICAgICAgICBsZXQgZG93c05hbWVzOiBzdHJpbmdbXSA9IEhlYnJld0RhdGUuR2V0TG9jYWxEb3dzKCk7XHJcbiAgICAgICAgICAgIHAgPSBOU3RyaW5nLlRvQ2hhckFycmF5KGRvd3NOYW1lc1tkb3ddKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgZGF5U3RyOiBzdHJpbmcgPSBFdmVudHMuR2V0TWVzc2FnZVN0cmluZyhNc2dJbnRlcmZhY2UuREFZU19QVFIpO1xyXG4gICAgICAgICAgICBsZXQgZGF5TmFtZXM6IHN0cmluZ1tdID0gRGF0ZVV0aWwuZ2V0TG9jYWxEYXlzKGRheVN0cik7XHJcbiAgICAgICAgICAgIHAgPSBOU3RyaW5nLlRvQ2hhckFycmF5KGRheU5hbWVzW2Rvd10pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGF0ZU5hbWVQYXJhbXMgPSBuZXcgRGF0ZU5hbWVQYXJhbXMob3V0VmFsLCBvdXRJZHgsIGxlbik7XHJcbiAgICAgICAgICBvdXRfbGVuIC09IHRoaXMuZGF0ZV9pXzJfbm0oZGF0ZU5hbWVQYXJhbXMsIHAsIHBpYy5pc1RyaW1lZCgpKTtcclxuICAgICAgICAgIG91dElkeCA9IGRhdGVOYW1lUGFyYW1zLm91dElkeDtcclxuICAgICAgICAgIGxlbiA9IGRhdGVOYW1lUGFyYW1zLmxlbjtcclxuICAgICAgICAgIGRhdGVOYW1lUGFyYW1zID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19CQjogLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG4gICAgICAgICAgLy8gSmFwYW5lc2UgZGF5IG9mIHRoZSB3ZWVrXHJcbiAgICAgICAgICBwID0gTlN0cmluZy5Ub0NoYXJBcnJheShVdGlsRGF0ZUpwbi5nZXRTdHJEb3coZG93KSk7XHJcbiAgICAgICAgICBzdHJPdXQgPSBudWxsO1xyXG4gICAgICAgICAgZGF0ZU5hbWVQYXJhbXMgPSBuZXcgRGF0ZU5hbWVQYXJhbXMob3V0VmFsLCBvdXRJZHgsIGxlbik7XHJcbiAgICAgICAgICBzdHJPdXQgPSB0aGlzLmRhdGVfaV8yX25tX2J5dGVtb2RlKHN0ck91dCwgZGF0ZU5hbWVQYXJhbXMsIE5TdHJpbmcuRnJvbUNoYXJzKHApLCBvdXRfbGVuKTtcclxuICAgICAgICAgIG91dFZhbCA9IG5ldyBBcnJheShzdHJPdXQubGVuZ3RoKTtcclxuICAgICAgICAgIE5TdHJpbmcuQ29weVRvKHN0ck91dCwgMCwgb3V0VmFsLCAwLCBzdHJPdXQubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICBvdXRJZHggPSBkYXRlTmFtZVBhcmFtcy5vdXRJZHg7XHJcbiAgICAgICAgICBsZW4gPSBkYXRlTmFtZVBhcmFtcy5sZW47XHJcbiAgICAgICAgICBzdHJPdXQgPSBudWxsO1xyXG4gICAgICAgICAgZGF0ZU5hbWVQYXJhbXMgPSBudWxsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0pZMTpcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfSlkyOlxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19KWTQ6XHJcbiAgICAgICAgICAvLyBKYXBhbmVzZSB0aGUgbmFtZSBvZiBhbiBlcmFcclxuICAgICAgICAgIGxldCBzdHJOdW06IHN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgICBpZiAob3V0VmFsW291dElkeF0uY2hhckNvZGVBdCgwKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KWTEpXHJcbiAgICAgICAgICAgIHN0ck51bSA9IFV0aWxEYXRlSnBuLmdldEluc3RhbmNlKCkuZGF0ZV9qcG5feXJfMl9hKHllYXIsIGRveSwgZmFsc2UpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBzdHJOdW0gPSBVdGlsRGF0ZUpwbi5nZXRJbnN0YW5jZSgpLmRhdGVfanBuX3lyXzJfYSh5ZWFyLCBkb3ksIHRydWUpO1xyXG4gICAgICAgICAgc3RyT3V0ID0gbnVsbDtcclxuICAgICAgICAgIGRhdGVOYW1lUGFyYW1zID0gbmV3IERhdGVOYW1lUGFyYW1zKG91dFZhbCwgb3V0SWR4LCBsZW4pO1xyXG4gICAgICAgICAgc3RyT3V0ID0gdGhpcy5kYXRlX2lfMl9ubV9ieXRlbW9kZShzdHJPdXQsIGRhdGVOYW1lUGFyYW1zLCBzdHJOdW0sIG91dF9sZW4pO1xyXG4gICAgICAgICAgb3V0VmFsID0gbnVsbDtcclxuICAgICAgICAgIG91dFZhbCA9IG5ldyBBcnJheShzdHJPdXQubGVuZ3RoKTtcclxuICAgICAgICAgIE5TdHJpbmcuQ29weVRvKHN0ck91dCwgMCwgb3V0VmFsLCAwLCBzdHJPdXQubGVuZ3RoKTtcclxuICAgICAgICAgIG91dElkeCA9IGRhdGVOYW1lUGFyYW1zLm91dElkeDtcclxuICAgICAgICAgIGxlbiA9IGRhdGVOYW1lUGFyYW1zLmxlbjtcclxuICAgICAgICAgIHN0ck91dCA9IG51bGw7XHJcbiAgICAgICAgICBkYXRlTmFtZVBhcmFtcyA9IG51bGw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWUo6XHJcbiAgICAgICAgICBpZiAocGljLnplcm9GaWxsKCkgJiYgZGF0ZSA9PT0gMCAmJiBkYXRlX3BpY19aX2VkdClcclxuICAgICAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChvdXRWYWwsIG91dElkeCwgcGljLmdldFplcm9QYWQoKSwgMik7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuaW50XzJfYShvdXRWYWwsIG91dElkeCwgMiwgVXRpbERhdGVKcG4uZ2V0SW5zdGFuY2UoKS5kYXRlX2pwbl95ZWFyX29mcyh5ZWFyLCBkb3kpLCAnMCcpO1xyXG4gICAgICAgICAgb3V0SWR4ICs9IDI7XHJcbiAgICAgICAgICBsZW4gLT0gMjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBvdXRJZHgrKztcclxuICAgICAgICAgIGxlbi0tO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChvdXRfbGVuIDwgb3V0VmFsLmxlbmd0aClcclxuICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChvdXRWYWwsIG91dF9sZW4sICcgJywgb3V0VmFsLmxlbmd0aCAtIG91dF9sZW4pO1xyXG5cclxuICAgIHJldHVybiBOU3RyaW5nLkZyb21DaGFycyhvdXRWYWwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJyZWFrIGEgZGF0ZSBpbnRvIFllYXIsIE1vbnRoLCBEYXkgaW4gbW9udGgsIERheSBpbiB5ZWFyIGFuZCBEYXkgaW4gd2Vla1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtczogRGF0ZUJyZWFrUGFyYW1zLCBkYXRlOiBudW1iZXIsIGlnbm9yZV9kdF9mbXQ6IGJvb2xlYW4sIGNvbXBJZHg6IG51bWJlcik6IHZvaWQge1xyXG5cclxuICAgIGxldCB5ZWFyOiBudW1iZXIgPSBicmVha1BhcmFtcy55ZWFyO1xyXG4gICAgbGV0IG1vbnRoOiBudW1iZXIgPSBicmVha1BhcmFtcy5tb250aDtcclxuICAgIGxldCBkYXk6IG51bWJlciA9IGJyZWFrUGFyYW1zLmRheTtcclxuICAgIGxldCBkb3k6IG51bWJlciA9IGJyZWFrUGFyYW1zLmRveTtcclxuICAgIGxldCBkb3c6IG51bWJlciA9IGJyZWFrUGFyYW1zLmRvdztcclxuXHJcbiAgICBpZiAoZGF0ZSA8PSAwKSB7XHJcbiAgICAgIGJyZWFrUGFyYW1zLmRheSA9IDA7XHJcbiAgICAgIGJyZWFrUGFyYW1zLmRveSA9IDA7XHJcbiAgICAgIGJyZWFrUGFyYW1zLmRvdyA9IDA7XHJcbiAgICAgIGJyZWFrUGFyYW1zLnllYXIgPSAwO1xyXG4gICAgICBicmVha1BhcmFtcy5tb250aCA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZG93ID0gZGF0ZSAlIDcgKyAxO1xyXG4gICAgICBkYXRlID0gZGF0ZSAtIDE7XHJcbiAgICAgIGxldCBjZW50NDogbnVtYmVyID0gTWF0aC5mbG9vcihkYXRlIC8gUElDSW50ZXJmYWNlLkRBWVNJTkZPVVJDRU5UKTtcclxuICAgICAgZGF0ZSA9IGRhdGUgLSBjZW50NCAqIFBJQ0ludGVyZmFjZS5EQVlTSU5GT1VSQ0VOVDtcclxuICAgICAgbGV0IGNlbnQ6IG51bWJlciA9IE1hdGguZmxvb3IoZGF0ZSAvIFBJQ0ludGVyZmFjZS5EQVlTSU5DRU5UVVJZKTtcclxuICAgICAgaWYgKGNlbnQgPiAzKSB7XHJcbiAgICAgICAgY2VudCA9IDM7XHJcbiAgICAgIH1cclxuICAgICAgZGF0ZSA9IGRhdGUgLSBjZW50ICogUElDSW50ZXJmYWNlLkRBWVNJTkNFTlRVUlk7XHJcbiAgICAgIGxldCB5ZWFyNDogbnVtYmVyID0gTWF0aC5mbG9vcihkYXRlIC8gUElDSW50ZXJmYWNlLkRBWVNJTkZPVVJZRUFSKTtcclxuICAgICAgZGF0ZSA9IGRhdGUgLSB5ZWFyNCAqIFBJQ0ludGVyZmFjZS5EQVlTSU5GT1VSWUVBUjtcclxuICAgICAgeWVhciA9IE1hdGguZmxvb3IoZGF0ZSAvIFBJQ0ludGVyZmFjZS5EQVlTSU5ZRUFSKTtcclxuICAgICAgaWYgKHllYXIgPiAzKSB7XHJcbiAgICAgICAgeWVhciA9IDM7XHJcbiAgICAgIH1cclxuICAgICAgZGF0ZSA9IGRhdGUgLSB5ZWFyICogUElDSW50ZXJmYWNlLkRBWVNJTllFQVI7XHJcbiAgICAgIHllYXIgPSBjZW50NCAqIDQwMCArIGNlbnQgKiAxMDAgKyB5ZWFyNCAqIDQgKyB5ZWFyICsgMTtcclxuICAgICAgbGV0IGxlYXB5ZWFyOiBudW1iZXIgPSAwO1xyXG4gICAgICBpZiAoeWVhciAlIDQgPT09IDApIHtcclxuICAgICAgICBpZiAoeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwKSB7XHJcbiAgICAgICAgICBsZWFweWVhciA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWlnbm9yZV9kdF9mbXQgJiYgdGhpcy5fZW52aXJvbm1lbnQuR2V0RGF0ZU1vZGUoY29tcElkeCkgPT09ICdCJykge1xyXG4gICAgICAgIHllYXIgPSB5ZWFyICsgUElDSW50ZXJmYWNlLkRBVEVfQlVEREhJU1RfR0FQO1xyXG4gICAgICB9XHJcbiAgICAgIG1vbnRoID0gKE1hdGguZmxvb3IoZGF0ZSAvIFBJQ0ludGVyZmFjZS5EQVlTSU5NT05USCkgKyAxKTtcclxuICAgICAgZGF5ID0gUElDSW50ZXJmYWNlLmRhdGVfZGF5X3RhYlttb250aF07XHJcbiAgICAgIGlmIChsZWFweWVhciA+IDApIHtcclxuICAgICAgICBpZiAobW9udGggPiAxKSB7XHJcbiAgICAgICAgICBkYXkgPSBkYXkgKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRhdGUgPj0gZGF5KSB7XHJcbiAgICAgICAgbW9udGggPSBtb250aCArIDE7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZGF5ID0gUElDSW50ZXJmYWNlLmRhdGVfZGF5X3RhYlttb250aCAtIDFdO1xyXG4gICAgICAgIGlmIChsZWFweWVhciA+IDApIHtcclxuICAgICAgICAgIGlmIChtb250aCA+IDIpIHtcclxuICAgICAgICAgICAgZGF5ID0gZGF5ICsgMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZGF5ID0gZGF0ZSAtIGRheSArIDE7XHJcbiAgICAgIGRveSA9IGRhdGUgKyAxO1xyXG4gICAgICBicmVha1BhcmFtcy55ZWFyID0geWVhcjtcclxuICAgICAgYnJlYWtQYXJhbXMubW9udGggPSBtb250aDtcclxuICAgICAgYnJlYWtQYXJhbXMuZGF5ID0gZGF5O1xyXG4gICAgICBicmVha1BhcmFtcy5kb3kgPSBkb3k7XHJcbiAgICAgIGJyZWFrUGFyYW1zLmRvdyA9IGRvdztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgYWxwaGEgc3RyaW5nIGZyb20gaW50IHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clwiPiAgICAgdGhlIG91dHB1dCBzdHJpbmcgKGFzIGFuIGNoYXIgYXJyYXkpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJQb3NcIj4gIHN0YXJ0aW5nIHBvc2l0aW9uXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsZW5cIj4gICAgIHN0cmluZyBsZW5ndGhcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5cIj4gICAgICAgdGhlIG51bWJlciB0byBjb252ZXJ0XHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsZWFkXCI+ICAgIGxlYWRpbmcgY2hhcmFjdGVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcmVzdWx0IHN0cmluZyBsZW5ndGhcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgaW50XzJfYShzdHI6IHN0cmluZ1tdLCBzdHJQb3M6IG51bWJlciwgbGVuOiBudW1iZXIsIG46IG51bWJlciwgbGVhZDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGxldCBuZWc6IGJvb2xlYW4gPSBuIDwgMDtcclxuXHJcbiAgICBpZiAobGVuIDw9IDApXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBuID0gTWF0aC5hYnMobik7XHJcbiAgICBsZXQgcG9zOiBudW1iZXIgPSBsZW47XHJcblxyXG4gICAgZG8ge1xyXG4gICAgICBzdHJbc3RyUG9zICsgKHBvcyA9IHBvcyAtIDEpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoNDggKyBuICUgMTApO1xyXG4gICAgICBuID0gTWF0aC5mbG9vcihuIC8gMTApO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKHBvcyA+IDAgJiYgbiA+IDApO1xyXG5cclxuICAgIGlmIChuZWcgJiYgcG9zID4gMCkge1xyXG4gICAgICBzdHJbc3RyUG9zICsgKHBvcyA9IHBvcyAtIDEpXSA9ICctJy8qJy0nKi87XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5saWJfYV9maWxsKHN0ciwgc3RyUG9zLCBsZW4sIHBvcywgbGVhZC5jaGFyQ29kZUF0KDApKTtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRmlsbCB0aGUgY2hhciBhcnJheSBmb3IgdGhlIGNvbnZlcnRpbmcgb2YgaW50LT5zdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyXCI+ICAgICB0aGUgb3V0cHV0IHN0cmluZyAoYXMgYW4gY2hhciBhcnJheSlcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clBvc1wiPiAgc3RhcnRpbmcgcG9zaXRpb25cclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxlblwiPiAgICAgc3RyaW5nIGxlbmd0aFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibGVhZFwiPiAgICBsZWFkaW5nIGNoYXJhY3RlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHJlc3VsdCBzdHJpbmcgbGVuZ3RoXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGxpYl9hX2ZpbGwoc3RyOiBzdHJpbmdbXSwgc3RyUG9zOiBudW1iZXIsIGxlbjogbnVtYmVyLCBwb3M6IG51bWJlciwgbGVhZDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHJcbiAgICBpZiAobGVhZCA9PT0gMCkge1xyXG4gICAgICBsZW4gPSBsZW4gLSBwb3M7XHJcblxyXG4gICAgICBpZiAobGVuID4gMCAmJiBwb3MgPiAwKSB7XHJcbiAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbWNweShzdHIsIHN0clBvcywgc3RyLCBwb3MsIGxlbik7XHJcbiAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChzdHIsIHN0clBvcyArIGxlbiwgJyAnLCAvKicgJyovcG9zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChwb3MgPiAwKSB7XHJcbiAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChzdHIsIHN0clBvcywgU3RyaW5nLmZyb21DaGFyQ29kZShsZWFkKSwgcG9zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGxlbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0IGluZGV4IHRvIE5hbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0ZU5hbWVQYXJhbXNcIj4gIG91dHB1dCBzdGluZyBkZXRhaWxzXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJubVwiPiAgICAgICAgICAgICAgbmFtZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHJpbVwiPiAgICAgICAgICAgIG91dHB1dCBzdHJpbmcgc2hvdWxkIGJlIHRyaW1lZFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGRhdGVfaV8yX25tKGRhdGVOYW1lUGFyYW1zOiBEYXRlTmFtZVBhcmFtcywgbm06IHN0cmluZ1tdLCB0cmltOiBib29sZWFuKTogbnVtYmVyIHtcclxuXHJcbiAgICBsZXQgbjogbnVtYmVyID0gdGhpcy5kYXRlX21za19jbnQoZGF0ZU5hbWVQYXJhbXMub3V0VmFsLCBkYXRlTmFtZVBhcmFtcy5vdXRJZHgsIDxudW1iZXI+ZGF0ZU5hbWVQYXJhbXMubGVuKTtcclxuICAgIGxldCBsOiBudW1iZXI7XHJcbiAgICBpZiAodHJpbSkge1xyXG4gICAgICBsID0gTWVtb3J5VXRpbC5tZW1fdHJpbShubSwgMCwgbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbCA9IG47XHJcbiAgICB9XHJcbiAgICBsID0gTWF0aC5taW4obCwgZGF0ZU5hbWVQYXJhbXMubGVuKTtcclxuICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1jcHkoZGF0ZU5hbWVQYXJhbXMub3V0VmFsLCBkYXRlTmFtZVBhcmFtcy5vdXRJZHgsIG5tLCAwLCBsKTtcclxuICAgIGRhdGVOYW1lUGFyYW1zLm91dElkeCA9IGRhdGVOYW1lUGFyYW1zLm91dElkeCArIGw7XHJcbiAgICBkYXRlTmFtZVBhcmFtcy5sZW4gPSBkYXRlTmFtZVBhcmFtcy5sZW4gLSBuO1xyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBUcmltZWQgPyBKdW1wIG90aGVyIHRyaW1lZCBtYXNrIDogbm90aGluZ1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICBuID0gbiAtIGw7XHJcblxyXG4gICAgaWYgKG4gPiAwKSB7XHJcbiAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1jcHkoZGF0ZU5hbWVQYXJhbXMub3V0VmFsLCBkYXRlTmFtZVBhcmFtcy5vdXRJZHgsIGRhdGVOYW1lUGFyYW1zLm91dFZhbCwgZGF0ZU5hbWVQYXJhbXMub3V0SWR4ICsgbiwgZGF0ZU5hbWVQYXJhbXMubGVuKTtcclxuICAgIH1cclxuICAgIHJldHVybiA8bnVtYmVyPm47XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG4gIC8vLyAgIENvbnZlcnQgaW5kZXggdG8gTmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJPdXRcIj4gICAgICAgICAgb3V0cHV0IHN0aW5nIChvcmlnaW5hbClcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGVOYW1lUGFyYW1zXCI+ICBvdXRwdXQgc3RpbmcgZGV0YWlsc1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyTm1cIj4gICAgICAgICAgIG5hbWUgd2hpY2ggd2lsbCBiZSBlbWJlZGRlZCBpbiBvdXRwdXQgc3RyaW5nXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpbnRPdXRMZW5cIj4gICAgICAgdGhlIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIG91dHB1dCBzdHJpbmdcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+ICAgICAgICAgICAgICAgICBvdXRwdXQgc3RpbmcgKHByb2Nlc3NlZClcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZGF0ZV9pXzJfbm1fYnl0ZW1vZGUoc3RyT3V0OiBzdHJpbmcsIGRhdGVOYW1lUGFyYW1zOiBEYXRlTmFtZVBhcmFtcywgc3RyTm06IHN0cmluZywgaW50T3V0TGVuOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGludE1za0NudDogbnVtYmVyID0gdGhpcy5kYXRlX21za19jbnQoZGF0ZU5hbWVQYXJhbXMub3V0VmFsLCBkYXRlTmFtZVBhcmFtcy5vdXRJZHgsIDxudW1iZXI+ZGF0ZU5hbWVQYXJhbXMubGVuKTtcclxuICAgIGxldCBzdHJXb3JrOiBzdHJpbmcgPSBOU3RyaW5nLkZyb21DaGFycyhkYXRlTmFtZVBhcmFtcy5vdXRWYWwpO1xyXG5cclxuICAgIHN0cldvcmsgPSBzdHJXb3JrLnN1YnN0cigwLCBkYXRlTmFtZVBhcmFtcy5vdXRJZHgpO1xyXG5cclxuICAgIGxldCBpbnRPZnM6IG51bWJlciA9IFV0aWxTdHJCeXRlTW9kZS5sZW5CKHN0cldvcmspO1xyXG4gICAgc3RyTm0gPSBVdGlsU3RyQnl0ZU1vZGUubGVmdEIoc3RyTm0sIGludE1za0NudCk7XHJcbiAgICBzdHJPdXQgPSBVdGlsU3RyQnl0ZU1vZGUucmVwQihOU3RyaW5nLkZyb21DaGFycyhkYXRlTmFtZVBhcmFtcy5vdXRWYWwpLCBzdHJObSwgaW50T2ZzICsgMSwgaW50TXNrQ250KTtcclxuXHJcbiAgICBkYXRlTmFtZVBhcmFtcy5vdXRJZHggPSBkYXRlTmFtZVBhcmFtcy5vdXRJZHggKyBzdHJObS5sZW5ndGg7XHJcbiAgICBkYXRlTmFtZVBhcmFtcy5sZW4gPSBkYXRlTmFtZVBhcmFtcy5sZW4gLSBpbnRNc2tDbnQ7XHJcbiAgICBpbnRPdXRMZW4gPSBpbnRPdXRMZW4gLSBpbnRNc2tDbnQ7XHJcbiAgICByZXR1cm4gc3RyT3V0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJldHVybiBOIG9mIGNvbnNlY3V0aXZlIE1hc2sgY2hhcmFjdGVyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtc2tcIj4gICAgIHRoZSBtYXNrIHRvIGNoZWNrXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtc2tQb3NcIj4gIGluZGV4IG9mIGZpcnN0IGNoYXIgdG8gY2hlY2tcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxlblwiPiAgICAgbGVuZ3RoIG9mIHRoZSBtYXNrXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBudW1iZXIgb2YgY29uc2VjdXRpdmUgTWFzayBjaGFyYWN0ZXJzXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGRhdGVfbXNrX2NudChtc2s6IHN0cmluZ1tdLCBtc2tQb3M6IG51bWJlciwgbGVuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IGM6IHN0cmluZyA9IG1za1ttc2tQb3MrK107XHJcbiAgICBsZXQgaTogbnVtYmVyID0gMTtcclxuICAgIHdoaWxlICg8bnVtYmVyPmkgPCBsZW4pIHtcclxuICAgICAgaWYgKG1za1ttc2tQb3NdICE9PSBjKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgbXNrUG9zID0gbXNrUG9zICsgMTtcclxuICAgICAgaSA9IGkgKyAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29tcHV0ZSBEYXkgbmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBkYXRlXzJfRERERChkYXk6IG51bWJlciwgb3V0VmFsOiBzdHJpbmdbXSwgb3V0SWR4OiBudW1iZXIsIGxlbjogbnVtYmVyLCB0cmltOiBib29sZWFuKTogbnVtYmVyIHtcclxuXHJcblxyXG4gICAgbGV0IHJldDogbnVtYmVyID0gNDtcclxuICAgIGxldCBleHQ6IHN0cmluZ1tdO1xyXG5cclxuICAgIGlmIChkYXkgPiA5KSB7XHJcbiAgICAgIHRoaXMuaW50XzJfYShvdXRWYWwsIG91dElkeCwgMiwgZGF5LCAoPG51bWJlcj4wKS50b1N0cmluZygpKTtcclxuICAgICAgb3V0SWR4ICs9IDI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRyaW0pIHtcclxuICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtY3B5KG91dFZhbCwgb3V0SWR4LCBvdXRWYWwsIG91dElkeCArIDEsIGxlbiAtIDEpO1xyXG4gICAgICAgIC8qMTctTWF5LTkwKi9cclxuICAgICAgICByZXQtLTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvLyAqKG91dCsrKSA9ICcgJzsgLy8gT3JpZ2luYWwgTGluZVxyXG4gICAgICAgIG91dFZhbFtvdXRJZHgrK10gPSAnICc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnRfMl9hKG91dFZhbCwgb3V0SWR4LCAxLCBkYXksICg8bnVtYmVyPjApLnRvU3RyaW5nKCkpO1xyXG4gICAgICBvdXRJZHgrKztcclxuICAgIH1cclxuICAgIHN3aXRjaCAoZGF5KSB7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgY2FzZSAyMTpcclxuICAgICAgY2FzZSAzMTpcclxuICAgICAgICBleHQgPSBOU3RyaW5nLlRvQ2hhckFycmF5KFwic3RcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgIGNhc2UgMjI6XHJcbiAgICAgICAgZXh0ID0gTlN0cmluZy5Ub0NoYXJBcnJheShcIm5kXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAzOlxyXG4gICAgICBjYXNlIDIzOlxyXG4gICAgICAgIGV4dCA9IE5TdHJpbmcuVG9DaGFyQXJyYXkoXCJyZFwiKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgZXh0ID0gTlN0cmluZy5Ub0NoYXJBcnJheShcInRoXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgb3V0VmFsW291dElkeCsrXSA9IGV4dFswXTtcclxuICAgIG91dFZhbFtvdXRJZHhdID0gZXh0WzFdO1xyXG5cclxuICAgIHJldHVybiAocmV0KTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgZm9yIGFuIHRpbWUgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRhdGFTdHJcIj4gICBUaGUgc291cmNlIGRhdGE8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgIFRoZSBwaWN0dXJlIHRvIHVzZSBmb3IgdGhlIHZhbHVlIHRvIGRpc3BsYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHN0cmluZyB0byBiZSBkaXNwbGF5ZWQ8L3JldHVybnM+XHJcbiAgZnJvbU1nVGltZVRvTmF0aXZlVGltZShkYXRhU3RyOiBzdHJpbmcsIHBpYzogUElDKTogRGF0ZSB7XHJcbiAgICBsZXQgdGltZTogbnVtYmVyID0gbmV3IE5VTV9UWVBFKGRhdGFTdHIpLk5VTV8yX1VMT05HKCk7XHJcblxyXG5cclxuICAgICAgbGV0IGJyZWFrUGFyYW1zOiBUaW1lQnJlYWtQYXJhbXMgPSBuZXcgVGltZUJyZWFrUGFyYW1zKCk7XHJcblxyXG4gICAgICBEaXNwbGF5Q29udmVydG9yLnRpbWVfYnJlYWsoYnJlYWtQYXJhbXMsIHRpbWUpO1xyXG5cclxuICAgICAgbGV0IG5hdGl2ZUR0OiBEYXRlID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAgIG5hdGl2ZUR0LnNldEhvdXJzKGJyZWFrUGFyYW1zLmhvdXIpO1xyXG4gICAgICBuYXRpdmVEdC5zZXRNaW51dGVzKGJyZWFrUGFyYW1zLm1pbnV0ZSk7XHJcbiAgICAgIG5hdGl2ZUR0LnNldFNlY29uZHMoYnJlYWtQYXJhbXMuc2Vjb25kKTtcclxuICAgICAgcmV0dXJuIG5hdGl2ZUR0O1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSGFuZGxlIHRpbWUgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiQXNjaWlTdHJcIj4gICAgICAgIFRoZSBtYXNrIHRvIGJlIHVzZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiQXNjaWlMXCI+ICAgICAgICAgIE1hc2sgbGVuZ3RoPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1wiPiAgICAgICAgICAgICBUaGUgcGljdXJlIGluZm9ybWF0aW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRpbWVfcGljX1pfZWR0XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNlY29uZHNcIj4vIG1pbGxpU2Vjb25kcyBmbGFnPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzdHJpbmcgdG8gYmUgZGlzcGxheWVkXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHRpbWVfMl9hX3BpYyhBc2NpaVN0cjogc3RyaW5nLCBBc2NpaUw6IG51bWJlciwgdGltZTogbnVtYmVyLCBwaWM6IFBJQywgdGltZV9waWNfWl9lZHQ6IGJvb2xlYW4sIG1pbGxpU2Vjb25kczogYm9vbGVhbik6IHN0cmluZyB7XHJcblxyXG4gICAgLy8gT3JpZ2luYWwgdmFyc1xyXG4gICAgbGV0IGhvdXI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbWludXRlOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHNlY29uZDogbnVtYmVyID0gMDtcclxuICAgIGxldCBtaWxsaXNlYzogbnVtYmVyID0gMDtcclxuXHJcbiAgICBsZXQgQXNjaWk6IHN0cmluZ1tdID0gTlN0cmluZy5Ub0NoYXJBcnJheShBc2NpaVN0cik7XHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IFRpbWVCcmVha1BhcmFtcyA9IG5ldyBUaW1lQnJlYWtQYXJhbXMoaG91ciwgbWludXRlLCBzZWNvbmQpO1xyXG4gICAgbGV0IHRpbWVTZWM6IG51bWJlcjtcclxuICAgIGlmIChtaWxsaVNlY29uZHMpIHtcclxuICAgICAgdGltZVNlYyA9IE1hdGguZmxvb3IodGltZSAvIDEwMDApO1xyXG4gICAgICBtaWxsaXNlYyA9IHRpbWUgLSB0aW1lU2VjICogMTAwMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aW1lU2VjID0gdGltZTtcclxuICAgIH1cclxuXHJcbiAgICBEaXNwbGF5Q29udmVydG9yLnRpbWVfYnJlYWsoYnJlYWtQYXJhbXMsIHRpbWVTZWMpO1xyXG4gICAgaG91ciA9IGJyZWFrUGFyYW1zLmhvdXI7XHJcbiAgICBtaW51dGUgPSBicmVha1BhcmFtcy5taW51dGU7XHJcbiAgICBzZWNvbmQgPSBicmVha1BhcmFtcy5zZWNvbmQ7XHJcblxyXG4gICAgLy8gSWYgYXNjaWkgcmVwcmVzZW50YXRpb24gb3ZlcmZsb3dzIG91dHB1dCBidWZmZXJcclxuICAgIC8vIGZpbGwgd2l0aCAnKicgYW5kIGJhaWwgb3V0XHJcblxyXG4gICAgbGV0IHJlc3VsdDogc3RyaW5nO1xyXG4gICAgaWYgKHBpYy5nZXRNYXNrU2l6ZSgpID4gQXNjaWlMKSB7XHJcbiAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1zZXQoQXNjaWksIDAsICcqJywgLyonKicqL0FzY2lpTCk7XHJcbiAgICAgIHJlc3VsdCA9IE5TdHJpbmcuRnJvbUNoYXJzKEFzY2lpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAocGljLnplcm9GaWxsKCkpIHtcclxuICAgICAgICBpZiAodGltZVNlYyA9PT0gMCAmJiAoIW1pbGxpU2Vjb25kcyB8fCBtaWxsaXNlYyA9PT0gMCkpIHtcclxuICAgICAgICAgIGlmICh0aW1lX3BpY19aX2VkdCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbnR4OiBudW1iZXIgPSAwOyBpbnR4IDwgcGljLmdldE1hc2tTaXplKCk7IGludHggPSBpbnR4ICsgMSkge1xyXG4gICAgICAgICAgICAgIGlmIChBc2NpaVtpbnR4XSA8PSAnXFx1MDAxZicpIHtcclxuICAgICAgICAgICAgICAgIEFzY2lpW2ludHhdID0gcGljLmdldFplcm9QYWQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdWx0ID0gTlN0cmluZy5Gcm9tQ2hhcnMoQXNjaWkpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChBc2NpaSwgMCwgcGljLmdldFplcm9QYWQoKSwgcGljLmdldE1hc2tTaXplKCkpO1xyXG4gICAgICAgICAgcmVzdWx0ID0gTlN0cmluZy5Gcm9tQ2hhcnMoQXNjaWkpO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IEk6IG51bWJlciA9IDA7XHJcbiAgICAgIGxldCBhbTogbnVtYmVyID0gMDtcclxuICAgICAgbGV0IGxlbjogbnVtYmVyID0gcGljLmdldE1hc2tTaXplKCk7XHJcbiAgICAgIGxldCBIb3VySTogbnVtYmVyID0gLTE7XHJcblxyXG4gICAgICB3aGlsZSAoSSA8IGxlbikge1xyXG4gICAgICAgIHN3aXRjaCAoQXNjaWlbSV0uY2hhckNvZGVBdCgwKSkge1xyXG4gICAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19ISCk6XHJcbiAgICAgICAgICAgIEhvdXJJID0gSTtcclxuICAgICAgICAgICAgSSArPSAyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19NTVQpOlxyXG4gICAgICAgICAgICB0aGlzLmludF8yX2EoQXNjaWksIEksIDIsIG1pbnV0ZSwgJzAnKTtcclxuICAgICAgICAgICAgSSArPSAyO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX1NTKTpcclxuICAgICAgICAgICAgdGhpcy5pbnRfMl9hKEFzY2lpLCBJLCAyLCBzZWNvbmQsICcwJyk7XHJcbiAgICAgICAgICAgIEkgKz0gMjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19NUyk6XHJcbiAgICAgICAgICAgIHRoaXMuaW50XzJfYShBc2NpaSwgSSwgMywgbWlsbGlzZWMsICcwJyk7XHJcbiAgICAgICAgICAgIEkgKz0gMztcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19QTSk6XHJcbiAgICAgICAgICAgIGFtID0gMTtcclxuICAgICAgICAgICAgbGV0IHRtcEhvdXI6IG51bWJlciA9IGhvdXIgJSAyNDtcclxuICAgICAgICAgICAgaWYgKHRtcEhvdXIgPCAxMiB8fCB0bXBIb3VyID09PSAwKVxyXG4gICAgICAgICAgICAgIE1lbW9yeVV0aWwuY2hhcl9tZW1jcHkoQXNjaWksIEksIE5TdHJpbmcuVG9DaGFyQXJyYXkoXCJhbVwiKSwgMCwgMik7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICBNZW1vcnlVdGlsLmNoYXJfbWVtY3B5KEFzY2lpLCBJLCBOU3RyaW5nLlRvQ2hhckFycmF5KFwicG1cIiksIDAsIDIpO1xyXG4gICAgICAgICAgICBJICs9IDI7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIEkrKztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChIb3VySSA+PSAwKSB7XHJcbiAgICAgICAgaWYgKGFtID4gMCkge1xyXG4gICAgICAgICAgaG91ciA9IGhvdXIgJSAyNDtcclxuICAgICAgICAgIGlmIChob3VyID09PSAwKSB7XHJcbiAgICAgICAgICAgIGhvdXIgPSAxMjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBob3VyID0gaG91ciAlIDEyO1xyXG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIGhvdXIgPSAxMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmludF8yX2EoQXNjaWksIEhvdXJJLCAyLCBob3VyLCAoYW0gIT09IDAgJiYgaG91ciA8IDEwKSA/ICcgJyA6IC8qJyAnKi8nMCcvKicwJyovKTtcclxuICAgICAgfVxyXG4gICAgICByZXN1bHQgPSBOU3RyaW5nLkZyb21DaGFycyhBc2NpaSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJyZWFrIHRpbWUgaW50byBpdHMgY29tcG9uZW50c1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc3RhdGljIHRpbWVfYnJlYWsoYnJlYWtQYXJhbXM6IFRpbWVCcmVha1BhcmFtcywgdGltZTogbnVtYmVyKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRpbWUgPD0gMCkge1xyXG4gICAgICBicmVha1BhcmFtcy5zZWNvbmQgPSAwO1xyXG4gICAgICBicmVha1BhcmFtcy5taW51dGUgPSAwO1xyXG4gICAgICBicmVha1BhcmFtcy5ob3VyID0gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBicmVha1BhcmFtcy5ob3VyID0gTWF0aC5mbG9vcih0aW1lIC8gMzYwMCk7XHJcbiAgICAgIHRpbWUgPSB0aW1lIC0gYnJlYWtQYXJhbXMuaG91ciAqIDM2MDA7XHJcbiAgICAgIGJyZWFrUGFyYW1zLm1pbnV0ZSA9IE1hdGguZmxvb3IodGltZSAvIDYwKTtcclxuICAgICAgYnJlYWtQYXJhbXMuc2Vjb25kID0gdGltZSAtIGJyZWFrUGFyYW1zLm1pbnV0ZSAqIDYwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIGEgZGlzcGxheSBzdHJpbmcgZm9yIGEgbG9naWNhbCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGF0YVN0clwiPiAgIFwiMFwiIGZvciBmYWxzZSBvciBcIjFcIiBmb3IgdHJ1ZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gYm9vbGVhblxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBmcm9tTWdMb2dpY2FsVG9OYXRpdmVMb2dpY2FsKGRhdGFTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGxldCBuYXRpdmVWYWw6IGJvb2xlYW47XHJcbiAgICBuYXRpdmVWYWwgPSAoZGF0YVN0ci5jaGFyQXQoMCkgPT09ICcxJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICByZXR1cm4gbmF0aXZlVmFsO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBCdWlsZCBhIG1nIHN0cmluZyBmb3IgYSBsb2dpY2FsIHZhbHVlIGFjY29yZGluZyB0byB0aGUgYm9vbGVhbiB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkaXNwVmFsXCI+ICBib29sZWFuXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdHJpbmdcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZnJvbU5hdGl2ZUxvZ2ljYWxUb01nTG9naWNhbChkaXNwVmFsOiBib29sZWFuKTogc3RyaW5nIHtcclxuXHJcbiAgICBsZXQgbWdWYWw6IHN0cmluZztcclxuICAgIG1nVmFsID0gKGRpc3BWYWwgPT09IHRydWUpID8gXCIxXCIgOiBcIjBcIjtcclxuXHJcbiAgICByZXR1cm4gbWdWYWw7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgdGhlIGRlZmF1bHQgcmFuZ2UgZm9yIGxvZ2ljYWwgdmFsdWVzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJuZ1wiPiAgY3VycmVudCByYW5nZTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgZGVmYXVsdCByYW5nZSBpZiB0aGUgaW5wdXQgcmFuZ2UgaXMgZW1wdHk8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSB3aW5fcm5nX2Jvb2wocm5nOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cclxuICAgIGlmIChybmcgPT09IG51bGwgfHwgcm5nLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBybmcgPSBcIlRydWUsIEZhbHNlXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm5nO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gTWV0aG9kcyBmb3IgY292ZXJ0aW5nIERJUExBWSAtLS0+IElOVEVSTkFMXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyYW5zbGF0ZXMgYSBzdHJpbmcgbnVtYmVyIHRvIG1hZ2ljIG51bWJlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkaXNwVmFsdWVcIj4gICBBIHN0cmluZyBudW1iZXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljU3RyXCI+ICAgICAgVGhlIHBpY3R1cmUgdG8gdXNlPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBtYWdpYyBudW1iZXI8L3JldHVybnM+XHJcbiAgdG9OdW0oZGlzcFZhbHVlOiBzdHJpbmcsIHBpYzogUElDLCBjb21wSWR4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1nTnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRShkaXNwVmFsdWUsIHBpYywgY29tcElkeCk7XHJcbiAgICByZXR1cm4gbWdOdW0udG9YTUxyZWNvcmQoKTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYnVpbGRzIHRoZSBkYXRlIG1hZ2ljIG51bWJlciBmcm9tIHRoZSBzdHJpbmcgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RyXCI+ICAgICAgICAgICAgdGhlIGRhdGUgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0cl9sZW5cIj4gICAgICAgIGxlbmd0aCBvZiBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+ICAgICAgICAgICAgdGhlIHBpY3R1cmUgaW5mbzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJtYXNrXCI+ICAgICAgICAgICB0aGUgbWFzayBvZiB0aGUgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlnbm9yZV9kdF9mbXRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIG1hZ2ljIG51bWJlcjwvcmV0dXJucz5cclxuICBhXzJfZGF0ZV9waWNfZGF0ZW1vZGUoc3RyOiBzdHJpbmdbXSwgc3RyX2xlbjogbnVtYmVyLCBwaWM6IFBJQywgbWFzazogc3RyaW5nW10sIGNvbXBJZHg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgcG9zOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHllYXJfaW5fcGljOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgbW9udGhfaW5fcGljOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgZGF5X2luX3BpYzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGlucDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGJZZWFySXNaZXJvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgZXJhX3llYXI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgaW50UmVmOiBJbnRSZWYgPSBuZXcgSW50UmVmKDApO1xyXG4gICAgbGV0IGludFBpY0lkeE9mczogbnVtYmVyID0gMDtcclxuICAgIGxldCBtaWxsZW5pdW06IG51bWJlciA9IDA7XHJcbiAgICBsZXQgZGF0ZVBhcmFtczogRGF0ZUJyZWFrUGFyYW1zO1xyXG5cclxuICAgIGxldCBsZW46IG51bWJlciA9IE1hdGgubWluKHN0ci5sZW5ndGgsIHBpYy5nZXRNYXNrU2l6ZSgpKTtcclxuXHJcbiAgICBpZiAoc3RyLmxlbmd0aCA8IG1hc2subGVuZ3RoKVxyXG4gICAgICBzdHIubGVuZ3RoID0gbWFzay5sZW5ndGg7XHJcblxyXG4gICAgbGV0IHllYXI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbW9udGg6IG51bWJlciA9IDE7XHJcbiAgICBsZXQgZGF5OiBudW1iZXIgPSAxO1xyXG4gICAgbGV0IGRveTogbnVtYmVyID0gMTtcclxuICAgIGxldCB1c2Vkb3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IHN0cl9sZW47IGkgPSBpICsgMSkge1xyXG4gICAgICBpZiAoc3RyW2ldICE9PSAnMCcgJiYgc3RyW2ldICE9PSAnICcpIHtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpID09PSBzdHJfbGVuKVxyXG4gICAgICByZXR1cm4gMDtcclxuXHJcbiAgICB3aGlsZSAocG9zIDwgc3RyX2xlbiAmJiBwb3MgKyBpbnRQaWNJZHhPZnMgPCBsZW4pIHtcclxuXHJcbiAgICAgIHN3aXRjaCAobWFza1twb3MgKyBpbnRQaWNJZHhPZnNdLmNoYXJDb2RlQXQoMCkpIHtcclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfWVk6XHJcbiAgICAgICAgICB5ZWFyX2luX3BpYyA9IHRydWU7XHJcbiAgICAgICAgICBpbnAgPSB0cnVlO1xyXG4gICAgICAgICAgeWVhciA9IHRoaXMuZGF0ZV9hXzJfaShzdHIsIDIsIHBvcyk7XHJcbiAgICAgICAgICBwb3MgKz0gMjtcclxuICAgICAgICAgIC8vIEhlbiAxNi8xMS85NyA6IEZpeCAjNzY4NDQyXHJcbiAgICAgICAgICBpZiAoeWVhciA9PT0gMClcclxuICAgICAgICAgICAgYlllYXJJc1plcm8gPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IGNlbnR1cnlfeWVhcjogbnVtYmVyID0gdGhpcy5fZW52aXJvbm1lbnQuR2V0Q2VudHVyeShjb21wSWR4KSAlIDEwMDsgLy8gREVGX2NlbnR1cnlcclxuICAgICAgICAgIGlmICh5ZWFyIDwgY2VudHVyeV95ZWFyKVxyXG4gICAgICAgICAgICB5ZWFyICs9IDEwMDtcclxuICAgICAgICAgIHllYXIgKz0gdGhpcy5fZW52aXJvbm1lbnQuR2V0Q2VudHVyeShjb21wSWR4KSAtIGNlbnR1cnlfeWVhcjsgLy8gREVGX2NlbnR1cnlcclxuICAgICAgICAgIGlmICh0aGlzLl9lbnZpcm9ubWVudC5HZXREYXRlTW9kZShjb21wSWR4KSA9PT0gJ0InKVxyXG4gICAgICAgICAgLy8gREVGX2RhdGVfbW9kZVxyXG4gICAgICAgICAgICB5ZWFyIC09IFBJQ0ludGVyZmFjZS5EQVRFX0JVRERISVNUX0dBUDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19ZWVlZKTpcclxuICAgICAgICAgIHllYXJfaW5fcGljID0gdHJ1ZTtcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICBsZXQgWWVhckRpZ2l0c05vOiBudW1iZXI7XHJcbiAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgNCB5ZWFyIGRpZ2l0LiBJZiBub3QsIGFkanVzdCBpdFxyXG4gICAgICAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSAnY2VudHVyeSB5ZWFyJ1xyXG4gICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpIHtcclxuICAgICAgICAgICAgZm9yIChZZWFyRGlnaXRzTm8gPSAwOyBZZWFyRGlnaXRzTm8gPCA0ICYmIHBvcyArIFllYXJEaWdpdHNObyA8IHN0ci5sZW5ndGggJiYgVXRpbFN0ckJ5dGVNb2RlLmlzRGlnaXQoc3RyW3BvcyArIFllYXJEaWdpdHNOb10pOyBZZWFyRGlnaXRzTm8rKykge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkgPSBZZWFyRGlnaXRzTm87XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgcG9zICsgaSA8IHN0ci5sZW5ndGggJiYgc3RyW3BvcyArIGldICE9PSB0aGlzLkRBVEVDSEFSLnRvU3RyaW5nKCkgJiYgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKFllYXJEaWdpdHNObyA9IDA7XHJcbiAgICAgICAgICAgICAgICAgcG9zICsgWWVhckRpZ2l0c05vIDwgc3RyLmxlbmd0aCAmJiBVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChzdHJbcG9zICsgWWVhckRpZ2l0c05vXSkgJiZcclxuICAgICAgICAgICAgICAgICBZZWFyRGlnaXRzTm8gPCA0O1xyXG4gICAgICAgICAgICAgICAgIFllYXJEaWdpdHNObysrKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpKSB7XHJcbiAgICAgICAgICAgIGlmIChpIDwgNCAmJiBzdHIubGVuZ3RoIDwgbWFzay5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlX2RhdGUoc3RyLCBwb3MsIDQgLSBpLCBzdHIubGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaSA8IDQgJiYgbGVuIDwgbWFzay5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVfZGF0ZShzdHIsIHBvcywgNCAtIGksIGxlbik7XHJcbiAgICAgICAgICAgICAgbGVuID0gbGVuICsgNCAtIGk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB5ZWFyID0gdGhpcy5kYXRlX2FfMl9pKHN0ciwgNCwgcG9zKTtcclxuICAgICAgICAgIHBvcyArPSA0O1xyXG5cclxuICAgICAgICAgIC8vIEhlbiAxNi8xMS85NyA6IEZpeCAjNzY4NDQyXHJcbiAgICAgICAgICBpZiAoeWVhciA9PT0gMClcclxuICAgICAgICAgICAgYlllYXJJc1plcm8gPSB0cnVlO1xyXG5cclxuICAgICAgICAgIGlmIChZZWFyRGlnaXRzTm8gPD0gMikge1xyXG4gICAgICAgICAgICBjZW50dXJ5X3llYXIgPSB0aGlzLl9lbnZpcm9ubWVudC5HZXRDZW50dXJ5KGNvbXBJZHgpICUgMTAwOyAvLyBERUZfY2VudHVyeVxyXG4gICAgICAgICAgICBpZiAoeWVhciA8IGNlbnR1cnlfeWVhcilcclxuICAgICAgICAgICAgICB5ZWFyICs9IDEwMDtcclxuICAgICAgICAgICAgeWVhciArPSB0aGlzLl9lbnZpcm9ubWVudC5HZXRDZW50dXJ5KGNvbXBJZHgpIC0gY2VudHVyeV95ZWFyOyAvLyBERUZfY2VudHVyeVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLl9lbnZpcm9ubWVudC5HZXREYXRlTW9kZShjb21wSWR4KSA9PT0gJ0InKVxyXG4gICAgICAgICAgLy8gREVGX2RhdGVfbW9kZVxyXG4gICAgICAgICAgICB5ZWFyIC09IFBJQ0ludGVyZmFjZS5EQVRFX0JVRERISVNUX0dBUDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0hZWVlZWTpcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICBsZXQgcXVvdGVzOiBudW1iZXIgPSAwO1xyXG4gICAgICAgICAgaWYgKGxlbiA+IHBvcyArIDUgJiYgbWFza1twb3MgKyA1XS5jaGFyQ29kZUF0KDApID09PSAoUElDSW50ZXJmYWNlLlBJQ19IWVlZWVkpKVxyXG4gICAgICAgICAgICBxdW90ZXMgPSAxO1xyXG4gICAgICAgICAgeWVhciA9IEhlYnJld0RhdGUuZGF0ZWhlYl9oXzJfaShzdHIsIDUgKyBxdW90ZXMsIHBvcyk7XHJcbiAgICAgICAgICBwb3MgKz0gNSArIHF1b3RlcztcclxuICAgICAgICAgIGlmICh5ZWFyID09PSAwKVxyXG4gICAgICAgICAgICBiWWVhcklzWmVybyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX0hMOlxyXG4gICAgICAgICAgaW50UGljSWR4T2ZzID0gSGVicmV3RGF0ZS5kYXRlaGViX2hfMl9pKHN0ciwgMSwgcG9zKTtcclxuICAgICAgICAgIHBvcysrO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgUElDSW50ZXJmYWNlLlBJQ19IREQ6XHJcbiAgICAgICAgICBpbnAgPSB0cnVlO1xyXG4gICAgICAgICAgcXVvdGVzID0gMDtcclxuICAgICAgICAgIGlmIChsZW4gPiBwb3MgKyAyICYmIG1hc2tbcG9zICsgMl0uY2hhckNvZGVBdCgwKSA9PT0gUElDSW50ZXJmYWNlLlBJQ19IREQpXHJcbiAgICAgICAgICAgIHF1b3RlcyA9IDE7XHJcbiAgICAgICAgICBkYXkgPSBIZWJyZXdEYXRlLmRhdGVoZWJfaF8yX2koc3RyLCAyICsgcXVvdGVzLCBwb3MpO1xyXG4gICAgICAgICAgcG9zICs9IDIgKyBxdW90ZXM7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBQSUNJbnRlcmZhY2UuUElDX01NRDpcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICBtb250aF9pbl9waWMgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdKUE4oKSkge1xyXG4gICAgICAgICAgICBpZiAoKHN0ci5sZW5ndGggPT09IHBvcyArIDEgfHwgc3RyW3BvcyArIDFdLmNoYXJDb2RlQXQoMCkgPT09IHRoaXMuREFURUNIQVIgfHwgIVV0aWxTdHJCeXRlTW9kZS5pc0RpZ2l0KHN0cltwb3MgKyAxXSkpICYmIHN0ci5sZW5ndGggPCBtYXNrLmxlbmd0aClcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVfZGF0ZShzdHIsIHBvcywgMSwgc3RyLmxlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHN0cltwb3MgKyAxXS5jaGFyQ29kZUF0KDApID09PSB0aGlzLkRBVEVDSEFSICYmIGxlbiA8IG1hc2subGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlX2RhdGUoc3RyLCBwb3MsIDEsIGxlbik7XHJcbiAgICAgICAgICAgICAgbGVuICs9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG1vbnRoID0gdGhpcy5kYXRlX2FfMl9pKHN0ciwgMiwgcG9zKTtcclxuICAgICAgICAgIHBvcyArPSAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIFBJQ0ludGVyZmFjZS5QSUNfTU1NOlxyXG4gICAgICAgICAgaW5wID0gdHJ1ZTtcclxuICAgICAgICAgIG1vbnRoX2luX3BpYyA9IHRydWU7XHJcbiAgICAgICAgICBpbnRSZWYudmFsID0gcG9zO1xyXG4gICAgICAgICAgbW9udGggPSB0aGlzLmRhdGVfTU1NXzJfbShzdHIsIG1hc2ssIGludFJlZiwgbGVuLCBwaWMuaXNIZWJyZXcoKSk7XHJcbiAgICAgICAgICBwb3MgPSBpbnRSZWYudmFsO1xyXG4gICAgICAgICAgaWYgKHBpYy5pc0hlYnJldygpICYmIG1vbnRoID09PSAxNClcclxuICAgICAgICAgICAgbW9udGggPSA2O1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX0REKTpcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICBkYXlfaW5fcGljID0gdHJ1ZTtcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpIHtcclxuICAgICAgICAgICAgaWYgKChzdHIubGVuZ3RoID09PSBwb3MgKyAxIHx8IHN0cltwb3MgKyAxXS5jaGFyQ29kZUF0KDApID09PSB0aGlzLkRBVEVDSEFSIHx8ICFVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChzdHJbcG9zICsgMV0pKSAmJiBzdHIubGVuZ3RoIDwgbWFzay5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlX2RhdGUoc3RyLCBwb3MsIDEsIHN0ci5sZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChzdHJbcG9zICsgMV0uY2hhckNvZGVBdCgwKSA9PT0gdGhpcy5EQVRFQ0hBUiAmJiBsZW4gPCBtYXNrLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZV9kYXRlKHN0ciwgcG9zLCAxLCBsZW4pO1xyXG4gICAgICAgICAgICAgIGxlbiArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkYXkgPSB0aGlzLmRhdGVfYV8yX2koc3RyLCAyLCBwb3MpO1xyXG4gICAgICAgICAgcG9zICs9IDI7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfREREKTpcclxuICAgICAgICAgIGlucCA9IHRydWU7XHJcbiAgICAgICAgICB1c2Vkb3kgPSB0cnVlO1xyXG4gICAgICAgICAgZGF5X2luX3BpYyA9IHRydWU7XHJcbiAgICAgICAgICBkb3kgPSB0aGlzLmRhdGVfYV8yX2koc3RyLCAzLCBwb3MpO1xyXG4gICAgICAgICAgcG9zICs9IDM7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfRERERCk6XHJcbiAgICAgICAgICBpbnAgPSB0cnVlO1xyXG4gICAgICAgICAgZGF5X2luX3BpYyA9IHRydWU7XHJcbiAgICAgICAgICBkYXkgPSB0aGlzLmRhdGVfYV8yX2koc3RyLCAyLCBwb3MpO1xyXG4gICAgICAgICAgcG9zICs9IDIgKyAyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX1lKKTogLy8gSlBOOiBKYXBhbmVzZSBkYXRlIHBpY3R1cmUgc3VwcG9ydFxyXG4gICAgICAgICAgeWVhcl9pbl9waWMgPSB0cnVlO1xyXG4gICAgICAgICAgaW5wID0gdHJ1ZTtcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpIHtcclxuICAgICAgICAgICAgaWYgKChzdHIubGVuZ3RoID09PSBwb3MgKyAxIHx8IHN0cltwb3MgKyAxXS5jaGFyQ29kZUF0KDApID09PSB0aGlzLkRBVEVDSEFSIHx8ICFVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChzdHJbcG9zICsgMV0pKSAmJiBzdHIubGVuZ3RoIDwgbWFzay5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlX2RhdGUoc3RyLCBwb3MsIDEsIHN0ci5sZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgeWVhciA9IHRoaXMuZGF0ZV9hXzJfaShzdHIsIDIsIHBvcyk7XHJcbiAgICAgICAgICBwb3MgKz0gMjtcclxuXHJcbiAgICAgICAgICBsZXQgc3RyMTogc3RyaW5nID0gTlN0cmluZy5Gcm9tQ2hhcnMoc3RyKTtcclxuICAgICAgICAgIGVyYV95ZWFyID0gVXRpbERhdGVKcG4uZ2V0SW5zdGFuY2UoKS5nZXRTdGFydFllYXJPZkVyYShzdHIxLCBwaWMuZ2V0TWFzaygpKTtcclxuXHJcbiAgICAgICAgICBpZiAoZXJhX3llYXIgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgeWVhciArPSBlcmFfeWVhciAtIDE7XHJcblxyXG4gICAgICAgICAgaWYgKHllYXIgPT09IDApXHJcbiAgICAgICAgICAgIGJZZWFySXNaZXJvID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIFwic3RyW3Bvc11cIiBjb250YWlucyBEQkNTLCB0aGUgbmV4dCBpbmRleCBvZiBcIm1hc2tcIiBoYXMgdG8gYmUgc2tpcHBlZC5cclxuICAgICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5pc0hhbGZXaWR0aChzdHJbcG9zXSkgPT09IGZhbHNlICYmXHJcbiAgICAgICAgICAgICAgVXRpbFN0ckJ5dGVNb2RlLmlzSGFsZldpZHRoKG1hc2tbcG9zICsgaW50UGljSWR4T2ZzXSkpXHJcbiAgICAgICAgICAgICAgaW50UGljSWR4T2ZzKys7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcG9zICs9IDE7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChiWWVhcklzWmVybykge1xyXG4gICAgICBpZiAoIW1vbnRoX2luX3BpYylcclxuICAgICAgICBtb250aCA9IDA7XHJcbiAgICAgIGlmICghZGF5X2luX3BpYyAmJiBtb250aCA9PT0gMClcclxuICAgICAgICBkYXkgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhlbiAxNi8xMS85NyA6IEZpeCAjNzY4NDQyXHJcbiAgICAvLyBaZXJvIGRhdGUgaXMgdmFsaWQgYW5kIHNob3VsZCByZXR1cm4gMEwuIFRoaXMgY2hlY2sgbXVzdCBiZSBoZXJlXHJcbiAgICAvLyBiZWNhdXNlIHRoZSB5ZWFyIHZhbHVlIG1heSBiZSBjaGFuZ2VkIGJlY2F1c2Ugb2YgY2VudHVyeSB5ZWFyLlxyXG4gICAgaWYgKGRheSA9PT0gMCAmJiBtb250aCA9PT0gMCAmJiAoYlllYXJJc1plcm8gfHwgeWVhciA9PT0gMCkpXHJcbiAgICAgIHJldHVybiAoMCk7XHJcblxyXG4gICAgaWYgKCFpbnApXHJcbiAgICAgIHJldHVybiAoMCk7XHJcblxyXG4gICAgLy8gSGVicmV3IFllYXJcclxuICAgIGlmIChwaWMuaXNIZWJyZXcoKSkge1xyXG4gICAgICBpZiAoeWVhciA+IDApIHtcclxuICAgICAgICBpZiAobWlsbGVuaXVtID09PSAwKVxyXG4gICAgICAgICAgbWlsbGVuaXVtID0gNTtcclxuICAgICAgICB5ZWFyICs9IG1pbGxlbml1bSAqIDEwMDA7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIChIZWJyZXdEYXRlLmRhdGVoZWJfMl9kKHllYXIsIG1vbnRoLCBkYXkpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGUgbmV4dCAyIGxpbmVzIHN1cHBvcnQgNC54eCBERC9NTSBwaWN0dXJlc1xyXG4gICAgaWYgKCh5ZWFyID09PSAwKSAmJiAheWVhcl9pbl9waWMpIHtcclxuICAgICAgZGF0ZVBhcmFtcyA9IHRoaXMuZGF0ZV9zeXMoKTtcclxuICAgICAgeWVhciA9IGRhdGVQYXJhbXMueWVhcjtcclxuICAgIH1cclxuICAgIHJldHVybiAodGhpcy5kYXRlXzRfY2FsZW5kZXIoeWVhciwgbW9udGgsIGRheSwgZG95LCB1c2Vkb3kpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBEZWNvZGUgZGlnaXRzIGZyb20gYSBkYXRlIHN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBkYXRlX2FfMl9pKHM6IHN0cmluZ1tdLCBsZW46IG51bWJlciwgcG9zOiBudW1iZXIpOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBkYXRlX2FfMl9pKHM6IHN0cmluZywgbGVuOiBudW1iZXIsIHBvczogbnVtYmVyKTogbnVtYmVyO1xyXG4gIHByaXZhdGUgZGF0ZV9hXzJfaShzOiBhbnksIGxlbjogbnVtYmVyLCBwb3M6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAocyA9PT0gbnVsbCB8fCBzIGluc3RhbmNlb2YgQXJyYXkpICYmIChsZW4gPT09IG51bGwgfHwgbGVuLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpICYmIChwb3MgPT09IG51bGwgfHwgcG9zLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGVfYV8yX2lfMChzLCBsZW4sIHBvcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5kYXRlX2FfMl9pXzEocywgbGVuLCBwb3MpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIERlY29kZSBkaWdpdHMgZnJvbSBhIGRhdGUgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGRhdGVfYV8yX2lfMChzOiBzdHJpbmdbXSwgbGVuOiBudW1iZXIsIHBvczogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBuZXcgQXJyYXk8c3RyaW5nPihsZW4pO1xyXG4gICAgbGV0IG1nTnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSA9IGkgKyAxKSB7XHJcbiAgICAgIGFycmF5W2ldID0gc1twb3MgKyBpXTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZ051bS5hXzJfbG9uZyhOU3RyaW5nLkZyb21DaGFycyhhcnJheSkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIG1vdmluZyBwYXJ0IG9mIHRoZSBkYXRlIHN0cmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBtb3ZlX2RhdGUoc3RyOiBzdHJpbmdbXSwgcG9zOiBudW1iZXIsIG1vdmVieTogbnVtYmVyLCBsZW46IG51bWJlcik6IHZvaWQ7XHJcbiAgcHJpdmF0ZSBtb3ZlX2RhdGUoc3RyOiBzdHJpbmcsIHBvczogbnVtYmVyLCBtb3ZlYnk6IG51bWJlciwgbGVuOiBudW1iZXIpOiB2b2lkO1xyXG4gIHByaXZhdGUgbW92ZV9kYXRlKHN0cjogYW55LCBwb3M6IG51bWJlciwgbW92ZWJ5OiBudW1iZXIsIGxlbjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiAoc3RyID09PSBudWxsIHx8IHN0ciBpbnN0YW5jZW9mIEFycmF5KSAmJiAocG9zID09PSBudWxsIHx8IHBvcy5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAobW92ZWJ5ID09PSBudWxsIHx8IG1vdmVieS5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAobGVuID09PSBudWxsIHx8IGxlbi5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSkge1xyXG4gICAgICB0aGlzLm1vdmVfZGF0ZV8wKHN0ciwgcG9zLCBtb3ZlYnksIGxlbik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMubW92ZV9kYXRlXzEoc3RyLCBwb3MsIG1vdmVieSwgbGVuKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBtb3ZpbmcgcGFydCBvZiB0aGUgZGF0ZSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgbW92ZV9kYXRlXzAoc3RyOiBzdHJpbmdbXSwgcG9zOiBudW1iZXIsIG1vdmVieTogbnVtYmVyLCBsZW46IG51bWJlcik6IHZvaWQge1xyXG4gICAgTWVtb3J5VXRpbC5jaGFyX21lbW1vdmUoc3RyLCBwb3MgKyBtb3ZlYnksIHN0ciwgcG9zLCBsZW4gLSAocG9zICsgbW92ZWJ5KSArIDEpO1xyXG4gICAgTWVtb3J5VXRpbC5jaGFyX21lbXNldChzdHIsIHBvcywgJzAnLCAvKicwJyovbW92ZWJ5KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUcmFuc2xhdGUgYSBtb250aCBuYW1lIC0+IG1vbnRoIGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0cmluZ1wiPnRvIGV2YWx1YXRlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWN0dXJlXCI+bWFza1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+Y3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nIHRoZSBpbnRSZWYgbm90IGV4YWN0bHkgdGhlIHNhbWUgcmVmZXJlbmNlIHRvIGludGVnZXIgLCBsaWtlIGluIEMrKyxcclxuICAvLy8gICBzbyB0aGUgZ2xvYmFsIHBvcyBNVVNUIGJlIHVwZGF0ZWQgYnkgdGhlIHBvcy52YWx1ZSBhZnRlciB0aGUgZnVuY3Rpb24gcmV0dXJucy5cclxuICAvLy8gPC9wYXJhbT5cclxuICBwcml2YXRlIGRhdGVfTU1NXzJfbShzdHI6IHN0cmluZ1tdLCBtYXNrOiBzdHJpbmdbXSwgcG9zOiBJbnRSZWYsIGxlbjogbnVtYmVyLCBpc0hlYnJldzogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBsZXQgbDogbnVtYmVyO1xyXG5cclxuICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nSlBOKCkpIHtcclxuICAgICAgbGV0IG1hc2tQb3M6IG51bWJlciA9IFV0aWxTdHJCeXRlTW9kZS5jb252UG9zKE5TdHJpbmcuRnJvbUNoYXJzKHN0ciksIE5TdHJpbmcuRnJvbUNoYXJzKG1hc2spLCBwb3MudmFsLCBmYWxzZSk7XHJcbiAgICAgIGwgPSB0aGlzLmRhdGVfbXNrX2NudChtYXNrLCBtYXNrUG9zLCA8bnVtYmVyPihsZW4gLSBtYXNrUG9zKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbCA9IHRoaXMuZGF0ZV9tc2tfY250KG1hc2ssIHBvcy52YWwsIDxudW1iZXI+KGxlbiAtIHBvcy52YWwpKTtcclxuICAgIH1cclxuICAgIGxldCBzdHJQb3M6IG51bWJlciA9IHBvcy52YWw7XHJcbiAgICBwb3MudmFsID0gcG9zLnZhbCArIGw7XHJcbiAgICBsZW4gPSBNZW1vcnlVdGlsLm1lbV90cmltKHN0ciwgc3RyUG9zLCBsKTtcclxuXHJcbiAgICBpZiAobGVuID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBzdHJCOiBzdHJpbmcgPSBOU3RyaW5nLkZyb21DaGFycyhzdHIsIHN0clBvcywgbGVuKTtcclxuICAgICAgbGV0IG1vbnRoTmFtZXM6IHN0cmluZ1tdO1xyXG4gICAgICBpZiAoaXNIZWJyZXcpIHtcclxuICAgICAgICBtb250aE5hbWVzID0gSGVicmV3RGF0ZS5HZXRMb2NhbE1vbnRocygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBtb250aHM6IHN0cmluZyA9IEV2ZW50cy5HZXRNZXNzYWdlU3RyaW5nKE1zZ0ludGVyZmFjZS5NT05USFNfUFRSKTtcclxuICAgICAgICBtb250aE5hbWVzID0gRGF0ZVV0aWwuZ2V0TG9jYWxNb250aHMobW9udGhzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMTsgaSA8IG1vbnRoTmFtZXMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgICBpZiAoTlN0cmluZy5Db21wYXJlKG1vbnRoTmFtZXNbaV0uc3Vic3RyKDAsIGxlbiksIHN0ckIsIHRydWUpID09PSAwKVxyXG4gICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgY3VycmV0IGRheWUgc2VwZXJhdGVkIHRvIHllYXIsIG1vbnRoLCBkYXlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGRhdGVfc3lzKCk6IERhdGVCcmVha1BhcmFtcyB7XHJcbiAgICBsZXQgZGF0ZTogRGF0ZUJyZWFrUGFyYW1zID0gbmV3IERhdGVCcmVha1BhcmFtcygpO1xyXG4gICAgbGV0IEN1cnJEYXRlOiBEYXRlVGltZSA9IERhdGVUaW1lLk5vdztcclxuXHJcbiAgICBkYXRlLnllYXIgPSBDdXJyRGF0ZS5ZZWFyO1xyXG4gICAgZGF0ZS5tb250aCA9IEN1cnJEYXRlLk1vbnRoO1xyXG4gICAgZGF0ZS5kYXkgPSBDdXJyRGF0ZS5EYXk7XHJcblxyXG4gICAgcmV0dXJuIGRhdGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdG8gZ2V0IGN1cnJlbnQgZGF0ZSBpbiBtYWdpYyByZXByZXNlbnRhdGlvbiBRdWVyeSBNYWdpYydzIERhdGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlICdNYWdpYycgY3VycmVudCBkYXRlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBkYXRlX21hZ2ljKHV0Y0RhdGU6IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgbGV0IGRhdGVUaW1lOiBEYXRlVGltZTtcclxuICAgIGlmICh1dGNEYXRlKSB7XHJcbiAgICAgIGRhdGVUaW1lID0gRGF0ZVRpbWUuVXRjTm93O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGRhdGVUaW1lID0gRGF0ZVRpbWUuTm93O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB5ZWFyOiBudW1iZXIgPSBkYXRlVGltZS5ZZWFyO1xyXG4gICAgbGV0IG1vbnRoOiBudW1iZXIgPSBkYXRlVGltZS5Nb250aDtcclxuICAgIGxldCBkYXk6IG51bWJlciA9IGRhdGVUaW1lLkRheTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5kYXRlXzRfY2FsZW5kZXIoeWVhciwgbW9udGgsIGRheSwgMSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHRvIGdldCAgdGhlIHN5c3RlbSB0aW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSAnTWFnaWMnIGN1cnJlbnQgdGltZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgdGltZV9tYWdpYyh1dGNUaW1lOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBEYXRlVGltZS5HZXRUb3RhbFNlY29uZHNGcm9tTWlkbmlnaHQodXRjVGltZSwgbmV3IERhdGUoKSk7XHJcbiAgfVxyXG5cclxuICBtdGltZV9tYWdpYyh1dGNUaW1lOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBEYXRlVGltZS5HZXRUb3RhbE1pbGxpU2Vjb25kc0Zyb21NaWRuaWdodCh1dGNUaW1lLCBuZXcgRGF0ZSgpKSA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29tcHV0ZSBNQUdJQyBkYXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBkYXRlXzRfY2FsZW5kZXIoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXk6IG51bWJlciwgZG95OiBudW1iZXIsIHVzZWRveTogYm9vbGVhbik6IG51bWJlciB7XHJcblxyXG4gICAgbGV0IExlYXBZZWFyOiBib29sZWFuID0geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7XHJcblxyXG4gICAgLy8gMy4xMS45NyAtIEhlbiAoRml4ZWQgYnVnICM3NjQyNjUgYW5kICM4MTg2KSA6XHJcbiAgICAvLyBJZiB0aGUgZGF0ZSBpcyAwIHRoZW4gcmV0dXJuIDBMICh6ZXJvIHZhbHVlIGlzIHZhbGlkKSwgZWxzZSBpZiB0aGUgZGF0ZVxyXG4gICAgLy8gaXMgaWxsZWdhbCB0aGVuIHJldHVybiAxMDAwMDAwMDAwTCAod3JvbmcgZGF0ZSkuXHJcbiAgICBpZiAodXNlZG95KSB7XHJcbiAgICAgIGlmIChkb3kgPT09IDApIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZG95ID4gMzY2IHx8ICghTGVhcFllYXIgJiYgZG95ID4gMzY1KSkge1xyXG4gICAgICAgIHJldHVybiAoMTAwMDAwMDAwMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoZGF5ID09PSAwICYmIG1vbnRoID09PSAwICYmIHllYXIgPT09IDApIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGF5ID09PSAwIHx8IG1vbnRoID09PSAwIHx8IHllYXIgPT09IDAgfHwgbW9udGggPiAxMikge1xyXG4gICAgICAgIHJldHVybiAxMDAwMDAwMDAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB5ZWFyID0geWVhciAtIDE7XHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSBNYXRoLmZsb29yKHllYXIgLyA0MDApO1xyXG4gICAgeWVhciA9IHllYXIgLSBudW0gKiA0MDA7XHJcbiAgICBsZXQgbnVtMjogbnVtYmVyID0gTWF0aC5mbG9vcih5ZWFyIC8gMTAwKTtcclxuICAgIHllYXIgPSB5ZWFyIC0gbnVtMiAqIDEwMDtcclxuICAgIGxldCBudW0zOiBudW1iZXIgPSBNYXRoLmZsb29yKHllYXIgLyA0KTtcclxuICAgIHllYXIgPSB5ZWFyIC0gbnVtMyAqIDQ7XHJcblxyXG4gICAgaWYgKCF1c2Vkb3kpIHtcclxuICAgICAgbGV0IG51bTQ6IG51bWJlciA9IFBJQ0ludGVyZmFjZS5kYXRlX2RheV90YWJbbW9udGggLSAxXTtcclxuICAgICAgbGV0IG51bTU6IG51bWJlciA9IFBJQ0ludGVyZmFjZS5kYXRlX2RheV90YWJbbW9udGhdO1xyXG5cclxuICAgICAgaWYgKExlYXBZZWFyKSB7XHJcbiAgICAgICAgaWYgKG1vbnRoID4gMSkge1xyXG4gICAgICAgICAgbnVtNSA9IG51bTUgKyAxO1xyXG4gICAgICAgICAgaWYgKG1vbnRoID4gMikge1xyXG4gICAgICAgICAgICBudW00ID0gbnVtNCArIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZGF5ID4gbnVtNSAtIG51bTQpIHtcclxuICAgICAgICByZXR1cm4gMTAwMDAwMDAwMDtcclxuICAgICAgfVxyXG4gICAgICBkb3kgPSBudW00ICsgZGF5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bSAqIDE0NjA5NyArIG51bTIgKiAzNjUyNCArIG51bTMgKiAxNDYxICsgeWVhciAqIDM2NSArIGRveTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUcmFuc2xhdGVzIGEgc3RyaW5nIHRpbWUgdG8gbWFnaWMgbnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRpc3BWYWx1ZVwiPiAgIEEgc3RyaW5nIHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY1N0clwiPiAgICAgIFRoZSBwaWN0dXJlIHRvIHVzZTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbWFnaWMgbnVtYmVyPC9yZXR1cm5zPlxyXG4gIGZyb21OYXRpdmVUaW1lVG9NZ1RpbWUoZGlzcFZhbHVlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIGxldCBtZ051bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBudW1WYWw6IG51bWJlciA9IHRoaXMuZnJvbU5hdGl2ZVRpbWVUb01nVGltZU51bWJlcihkaXNwVmFsdWUpO1xyXG4gICAgbWdOdW0uTlVNXzRfTE9ORyhudW1WYWwpO1xyXG4gICAgcmV0dXJuIG1nTnVtLnRvWE1McmVjb3JkKCk7XHJcbiAgfVxyXG5cclxuICBmcm9tTmF0aXZlVGltZVRvTWdUaW1lTnVtYmVyKGRpc3BWYWx1ZTogRGF0ZSk6IG51bWJlciB7XHJcbiAgICBsZXQgbnVtVmFsOiBudW1iZXIgPSB0aGlzLnRpbWVfMl9pbnQoZGlzcFZhbHVlLmdldEhvdXJzKCksIGRpc3BWYWx1ZS5nZXRNaW51dGVzKCksIGRpc3BWYWx1ZS5nZXRTZWNvbmRzKCkpO1xyXG4gICAgcmV0dXJuIG51bVZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0IEFscGhhIGludG8gYSBUaW1lIGFjY29yZGluZyB0byBhIGdpdmVuIHBpY3R1cmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFfMl90aW1lKEFzY2lpOiBzdHJpbmcsIHBpYzogUElDLCBtaWxsaVNlY29uZHM6IGJvb2xlYW4pOiBudW1iZXI7XHJcbiAgYV8yX3RpbWUoQXNjaWk6IHN0cmluZywgQXNjaWlMOiBudW1iZXIsIG1hc2s6IHN0cmluZ1tdLCBtaWxsaVNlY29uZHM6IGJvb2xlYW4pOiBudW1iZXI7XHJcbiAgYV8yX3RpbWUoQXNjaWk6IGFueSwgcGljT3JBc2NpaUw6IGFueSwgbWlsbGlTZWNvbmRzT3JNYXNrOiBhbnksIG1pbGxpU2Vjb25kcz86IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpXHJcbiAgICAgIHJldHVybiB0aGlzLmFfMl90aW1lXzAoQXNjaWksIHBpY09yQXNjaWlMLCBtaWxsaVNlY29uZHNPck1hc2spO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmFfMl90aW1lXzEoQXNjaWksIHBpY09yQXNjaWlMLCBtaWxsaVNlY29uZHNPck1hc2ssIG1pbGxpU2Vjb25kcyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29udmVydCBBbHBoYSBpbnRvIGEgVGltZSBhY2NvcmRpbmcgdG8gYSBnaXZlbiBwaWN0dXJlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFfMl90aW1lXzAoQXNjaWk6IHN0cmluZywgcGljOiBQSUMsIG1pbGxpU2Vjb25kczogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5hXzJfdGltZShBc2NpaSwgQXNjaWkubGVuZ3RoLCBOU3RyaW5nLlRvQ2hhckFycmF5KHBpYy5nZXRNYXNrKCkpLCBtaWxsaVNlY29uZHMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENvbnZlcnQgQWxwaGEgaW50byBhIFRpbWUgYWNjb3JkaW5nIHRvIGEgZ2l2ZW4gcGljdHVyZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhXzJfdGltZV8xKEFzY2lpOiBzdHJpbmcsIEFzY2lpTDogbnVtYmVyLCBtYXNrOiBzdHJpbmdbXSwgbWlsbGlTZWNvbmRzOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGxldCBtZ051bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBJOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyID0gbWFzay5sZW5ndGg7IC8vIExlbmd0aCBvZiBtYXNrIG9yIHN0cmluZyB0byBzY2FuXHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBjb3VudGVycyBhbmQgZmxhZ3NcclxuICAgIGlmIChsZW4gPiBBc2NpaUwpIHtcclxuICAgICAgbGVuID0gQXNjaWlMO1xyXG4gICAgfVxyXG4gICAgbGV0IGFtcG06IG51bWJlciA9IDA7IC8vIEFNL1BNIGluZGljYXRvclxyXG4gICAgbGV0IGhvdXI6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgbWludXRlOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHNlY29uZDogbnVtYmVyID0gMDtcclxuICAgIGxldCBtaWxsaXNlY29uZDogbnVtYmVyID0gMDtcclxuXHJcbiAgICB3aGlsZSAoSSA8IGxlbikge1xyXG4gICAgICBsZXQgbWFza0xlbmd0aDogbnVtYmVyO1xyXG4gICAgICBsZXQgbWF4TWFza0xlbjogbnVtYmVyO1xyXG5cclxuICAgICAgLy8gVG8gZ2V0IHRoZSBtYXhpbXVtIHBvc3NpYmxlIGxlbmd0aCBvZiB0aGUgY29uc3RhbnRzIGluIHRoZSBtYXNrXHJcbiAgICAgIHN3aXRjaCAobWFza1tJXS5jaGFyQ29kZUF0KDApKSB7XHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19ISCk6XHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19NTVQpOlxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfU1MpOlxyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfUE0pOlxyXG4gICAgICAgICAgbWF4TWFza0xlbiA9IDI7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19NUyk6XHJcbiAgICAgICAgICBtYXhNYXNrTGVuID0gMztcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgbWF4TWFza0xlbiA9IDE7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgLyogVG8gZ2V0IHRoZSBtaW5pbXVtIG9mIG1heE1hc2tMZW4gJiBudW1iZXIgb2YgY2hhcmFjdGVycyByZW1haW5lZCBpbiBzdHJpbmdcclxuICAgICAgYmVjYXVzZSBpZiB0aGUgQXNjaWkgaXMgc2hvcnRlcihoYXMgbGVzcyBjaGFyYWN0ZXJzKXRoZW4gY3JlYXRlIFN0cmluZyBvbmx5XHJcbiAgICAgIG9mIHRoYXQgbm8uIG9mIGNoYXJhY3RlcnMgKG1hc2tMZW5ndGgpLCBub3Qgb2YgbWF4TWFza0xlbmd0aCAqL1xyXG4gICAgICBtYXNrTGVuZ3RoID0gTWF0aC5taW4obWF4TWFza0xlbiwgbGVuIC0gSSk7XHJcblxyXG4gICAgICBzd2l0Y2ggKG1hc2tbSV0uY2hhckNvZGVBdCgwKSkge1xyXG4gICAgICAgIGNhc2UgKFBJQ0ludGVyZmFjZS5QSUNfSEgpOiB7XHJcbiAgICAgICAgICBob3VyID0gbWdOdW0uYV8yX2xvbmcoQXNjaWkuc3Vic3RyKEksIG1hc2tMZW5ndGgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19NTVQpOiB7XHJcbiAgICAgICAgICBtaW51dGUgPSBtZ051bS5hXzJfbG9uZyhBc2NpaS5zdWJzdHIoSSwgbWFza0xlbmd0aCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIChQSUNJbnRlcmZhY2UuUElDX1NTKToge1xyXG4gICAgICAgICAgc2Vjb25kID0gbWdOdW0uYV8yX2xvbmcoQXNjaWkuc3Vic3RyKEksIG1hc2tMZW5ndGgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19NUyk6IHtcclxuICAgICAgICAgIG1pbGxpc2Vjb25kID0gbWdOdW0uYV8yX2xvbmcoQXNjaWkuc3Vic3RyKEksIG1hc2tMZW5ndGgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAoUElDSW50ZXJmYWNlLlBJQ19QTSk6XHJcbiAgICAgICAgICBhbXBtID0gMDtcclxuICAgICAgICAgIGxldCBjMDogc3RyaW5nID0gQXNjaWlbSV07XHJcbiAgICAgICAgICBsZXQgYzE6IHN0cmluZztcclxuICAgICAgICAgIGMwID0gYzAudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAgIGlmIChJICsgMSA8IGxlbikge1xyXG4gICAgICAgICAgICBjMSA9IEFzY2lpW0kgKyAxXTtcclxuICAgICAgICAgICAgYzEgPSBjMS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGMxID09PSAnTScpIHtcclxuICAgICAgICAgICAgICBpZiAoYzAgPT09ICdBJylcclxuICAgICAgICAgICAgICAgIGFtcG0gPSAtMTtcclxuICAgICAgICAgICAgICBpZiAoYzAgPT09ICdQJylcclxuICAgICAgICAgICAgICAgIGFtcG0gPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIEkgKz0gbWFza0xlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayB2YWxpZGl0eSBvZiBtaW51dGVzIGFuZCBzZWNvbmRzXHJcbiAgICBpZiAoc2Vjb25kID4gNTkgfHwgbWludXRlID4gNTkpXHJcbiAgICAgIHJldHVybiAoMCk7XHJcblxyXG4gICAgLy8gQ29udmVydCBob3VyIHRvIFBNIGlmIHNwZWNpZmllZCBhcyBBTVxyXG4gICAgaWYgKGFtcG0gIT09IDApXHJcbiAgICAgIGlmIChhbXBtID09PSAtMSlcclxuICAgICAgLy8gQU1cclxuICAgICAge1xyXG4gICAgICAgIGlmIChob3VyID09PSAxMilcclxuICAgICAgICAgIGhvdXIgPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGhvdXIgPCAxMilcclxuICAgICAgLy8gUE1cclxuICAgICAgICBob3VyICs9IDEyO1xyXG4gICAgaWYgKG1pbGxpU2Vjb25kcylcclxuICAgICAgcmV0dXJuIHRoaXMudGltZV8yX2ludChob3VyLCBtaW51dGUsIHNlY29uZCkgKiAxMDAwICsgbWlsbGlzZWNvbmQ7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJldHVybiB0aGlzLnRpbWVfMl9pbnQoaG91ciwgbWludXRlLCBzZWNvbmQpO1xyXG4gIH1cclxuXHJcbiAgdGltZV8yX2ludChob3VyOiBudW1iZXIsIG1pbnV0ZTogbnVtYmVyLCBzZWNvbmQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gaG91ciAqIDM2MDAgKyBtaW51dGUgKiA2MCArIHNlY29uZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0IFwiMFwiL1wiMVwiIHRvIGZhbHNlL3RydWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYm9vbFN0clwiPiAgXCIwXCIvXCIxXCJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgXCIxXCIgb3IgZmFsc2UgaWYgb3RoZXJzXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBzdGF0aWMgdG9Cb29sZWFuKGJvb2xTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGJvb2xTdHIgIT09IG51bGwgJiYgYm9vbFN0ciA9PT0gXCIxXCI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU3RyaW5nIHRvIERhdGUgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFfMl9kYXRlKHN0cjogc3RyaW5nLCBGb3JtYXQ6IHN0cmluZywgY29tcElkeDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmFfMl9kYXRlX2RhdGVtb2RlKHN0ciwgRm9ybWF0LCBjb21wSWR4KTtcclxuICB9XHJcblxyXG4gIGFfMl9kYXRlX3BpYyhzdHI6IHN0cmluZywgcGljOiBQSUMsIG1hc2s6IHN0cmluZywgY29tcElkeDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGlmIChzdHIgPT09IG51bGwpIHtcclxuICAgICAgc3RyID0gXCJcIjtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmFfMl9kYXRlX3BpY19kYXRlbW9kZShOU3RyaW5nLlRvQ2hhckFycmF5KHN0ciksIHN0ci5sZW5ndGgsIHBpYywgTlN0cmluZy5Ub0NoYXJBcnJheShtYXNrKSwgY29tcElkeCk7XHJcbiAgfVxyXG5cclxuICB0b19hKG91dFZhbDogc3RyaW5nLCBvdXRfbGVuOiBudW1iZXIsIGRhdGU6IG51bWJlciwgRm9ybWF0OiBzdHJpbmcsIGNvbXBJZHg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50b19hX2RhdGVtb2RlKG91dFZhbCwgb3V0X2xlbiwgZGF0ZSwgRm9ybWF0LCBmYWxzZSwgY29tcElkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29udmVydCBzdHJpbmcgLT4gZGF0ZSB1c2luZyBhIGZvcm1hdCBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYV8yX2RhdGVfZGF0ZW1vZGUoc3RyOiBzdHJpbmcsIEZvcm1hdDogc3RyaW5nLCBjb21wSWR4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgbGV0IHBJQzogUElDID0gbmV3IFBJQyhGb3JtYXQsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSwgY29tcElkeCk7XHJcbiAgICBpZiAoc3RyID09PSBudWxsKSB7XHJcbiAgICAgIHN0ciA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5hXzJfZGF0ZV9waWNfZGF0ZW1vZGUoTlN0cmluZy5Ub0NoYXJBcnJheShzdHIpLCBzdHIubGVuZ3RoLCBwSUMsIE5TdHJpbmcuVG9DaGFyQXJyYXkocElDLmdldE1hc2soKSksIGNvbXBJZHgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFN0cmluZyB0byBhIGRhdGVtb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHRvX2FfZGF0ZW1vZGUob3V0VmFsOiBzdHJpbmcsIG91dF9sZW46IG51bWJlciwgZGF0ZTogbnVtYmVyLCBGb3JtYXQ6IHN0cmluZywgaWdub3JlX2R0X2ZtdDogYm9vbGVhbiwgY29tcElkeDogbnVtYmVyKTogc3RyaW5nIHtcclxuXHJcbiAgICAvLyBQYXJzZSB0aGUgcGljdHVyZVxyXG4gICAgbGV0IHBpYzogUElDID0gbmV3IFBJQyhGb3JtYXQsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSwgY29tcElkeCk7XHJcblxyXG4gICAgLy8gQ29udmVydCB0aGUgIGRhdGUgLT4gc3RyaW5nXHJcbiAgICBpZiAob3V0VmFsID09PSBudWxsKSB7XHJcbiAgICAgIG91dFZhbCA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy50b19hX3BpY19kYXRlbW9kZShvdXRWYWwsIG91dF9sZW4sIGRhdGUsIHBpYywgdHJ1ZSwgaWdub3JlX2R0X2ZtdCwgY29tcElkeCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRGVjb2RlIGRpZ2l0cyBmcm9tIGEgZGF0ZSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZGF0ZV9hXzJfaV8xKHM6IHN0cmluZywgbGVuOiBudW1iZXIsIHBvczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHJcbiAgICAvLyBkb24ndCBmb3JnZXQgdG8gaW5jbHVkZSAncG9zKz1sZW4nIGFmdGVyIHRoZSB1c2luZyBvZiB0aGUgZnVuY3Rpb25cclxuICAgIGxldCBtZ051bTogTlVNX1RZUEUgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBzdHI6IHN0cmluZztcclxuXHJcbiAgICBzdHIgPSBzLnN1YnN0cihwb3MsIGxlbik7XHJcbiAgICByZXR1cm4gbWdOdW0uYV8yX2xvbmcoc3RyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbW92ZV9kYXRlXzEoc3RyOiBzdHJpbmcsIHBvczogbnVtYmVyLCBtb3ZlYnk6IG51bWJlciwgbGVuOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgc3RyID0gU3RyVXRpbC5tZW1tb3ZlKHN0ciwgcG9zICsgbW92ZWJ5LCBzdHIsIHBvcywgbGVuIC0gcG9zKTtcclxuXHJcbiAgICBzdHIgPSBTdHJVdGlsLm1lbXNldChzdHIsIHBvcywgJzAnLCBtb3ZlYnkpO1xyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gIHRpbWVfMl9hKEFzY2lpOiBzdHJpbmcsIEFzY2lpTDogbnVtYmVyLCB0aW1lOiBudW1iZXIsIEZvcm1hdDogc3RyaW5nLCBjb21wSWR4OiBudW1iZXIsIG1pbGxpU2Vjb25kczogYm9vbGVhbik6IHN0cmluZyB7XHJcblxyXG4gICAgaWYgKFN0clV0aWwucnRyaW0oRm9ybWF0KS5sZW5ndGggPT09IDApIHtcclxuICAgICAgRm9ybWF0ID0gXCJISDpNTTpTU1wiO1xyXG4gICAgfVxyXG4gICAgbGV0IHBpYzogUElDID0gbmV3IFBJQyhGb3JtYXQsIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSwgY29tcElkeCk7XHJcbiAgICBpZiAoQXNjaWkgPT09IG51bGwpIHtcclxuICAgICAgQXNjaWkgPSBwaWMuZ2V0TWFzaygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudGltZV8yX2FfcGljKEFzY2lpLCBBc2NpaUwsIHRpbWUsIHBpYywgZmFsc2UsIG1pbGxpU2Vjb25kcyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVHJhbnNsYXRlcyBhIHN0cmluZyB0byBtYWdpYyBsb2dpY2FsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRpc3BWYWx1ZVwiPiAgIEEgc3RyaW5nIHZhbHVlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwaWNcIj4gICAgICAgICBUaGUgcGljdHVyZSB0byB1c2VcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJhbmdlU3RyXCI+ICAgIFRoZSByYW5nZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxvZ2ljYWwgdmFsdWVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHRvTG9naWNhbChkaXNwVmFsdWU6IHN0cmluZywgcGljOiBQSUMsIHJhbmdlU3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgZGlzcFZhbHVlID0gZGlzcFZhbHVlLnRyaW0oKTtcclxuICAgIGlmIChkaXNwVmFsdWUgPT09IG51bGwgfHwgZGlzcFZhbHVlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBkaXNwVmFsdWUgPSBcIkZhbHNlXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5kaXNwXzJfbG9naWNhbChkaXNwVmFsdWUsIHBpYy5nZXRNYXNrKCksIHJhbmdlU3RyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0cmFuc2xhdGUgdGhlIGRpc3BsYXllZCB2YWx1ZSB0byBhIG1hZ2ljIGxvZ2ljYWwgdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGlzcFZhbHVlXCI+dGhlIGRpc3BsYXllZCB2YWx1ZSA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibWFza1wiPnRoZSBtYXNrIG9mIHRoZSBkaXNwbGF5ZWQgdmFsdWUgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJhbmdlU3RyXCI+dGhlIHJhbmdlIHN0cmluZyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgZGlzcF8yX2xvZ2ljYWwoZGlzcFZhbHVlOiBzdHJpbmcsIG1hc2s6IHN0cmluZywgcmFuZ2VTdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IHN0cmlwcGVkVmFsdWU6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihkaXNwVmFsdWUubGVuZ3RoKTtcclxuXHJcbiAgICByYW5nZVN0ciA9IHRoaXMud2luX3JuZ19ib29sKHJhbmdlU3RyKTtcclxuICAgIHJhbmdlU3RyID0gU3RyVXRpbC5tYWtlUHJpbnRhYmxlVG9rZW5zKHJhbmdlU3RyLCBTRVFfMl9IVE1MKTtcclxuICAgIGxldCBpOiBudW1iZXIgPSByYW5nZVN0ci5pbmRleE9mKCcsJyk7XHJcbiAgICBsZXQgdHJ1ZVN0cjogc3RyaW5nID0gcmFuZ2VTdHIuc3Vic3RyKDAsIGkpO1xyXG4gICAgdHJ1ZVN0ciA9IFN0clV0aWwubWFrZVByaW50YWJsZVRva2Vucyh0cnVlU3RyLCBIVE1MXzJfU1RSKTtcclxuICAgIGkgPSAwO1xyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBkaXNwVmFsdWUubGVuZ3RoICYmIGkgPCBtYXNrLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChtYXNrLmNoYXJDb2RlQXQoaSkgPT09IFBJQ0ludGVyZmFjZS5QSUNfWCkge1xyXG4gICAgICAgIHN0cmlwcGVkVmFsdWUuQXBwZW5kKGRpc3BWYWx1ZS5jaGFyQXQoaSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgdmFsOiBzdHJpbmcgPSBzdHJpcHBlZFZhbHVlLlRvU3RyaW5nKCk7XHJcbiAgICBpZiAodHJ1ZVN0ci5sZW5ndGggPCB2YWwubGVuZ3RoKSB7XHJcbiAgICAgIHZhbCA9IHZhbC5zdWJzdHIoMCwgdHJ1ZVN0ci5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh2YWwubGVuZ3RoIDwgdHJ1ZVN0ci5sZW5ndGgpIHtcclxuICAgICAgICB0cnVlU3RyID0gdHJ1ZVN0ci5zdWJzdHIoMCwgdmFsLmxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiAodmFsLnRvVXBwZXJDYXNlKCkgPT09IHRydWVTdHIudG9VcHBlckNhc2UoKSkgPyBcIjFcIiA6IFwiMFwiO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbnZlcnRpbmcgdGhlIGRpc3BsYXllZCB2YWx1ZSBvZiBhIHN0cmluZyB0byBpbnRlcm5hbFxyXG4gIC8vLyAgIHJlcHJlc2VudGF0aW9uIG11c3QgcmVtb3ZlIHRoZSBtYXNraW5nIGNoYXJhY3RlcnMgZnJvbSBpdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSB0b0FscGhhKGRpc3BWYWx1ZTogc3RyaW5nLCBwaWM6IFBJQyk6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IHBpY3R1cmU6IHN0cmluZyA9IHBpYy5nZXRNYXNrKCk7XHJcbiAgICBsZXQgYnVmZmVyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIocGljLmdldE1hc2tTaXplKCkpO1xyXG4gICAgbGV0IElzQWxwaGFEQkNTOiBib29sZWFuID0gVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0RCQ1MoKSAmJiBwaWMuaXNBdHRyQWxwaGEoKTtcclxuICAgIGxldCBjdXJyUGljdHVyZTogbnVtYmVyO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IGN1cnJQaWN0dXJlID0gMDtcclxuXHJcbiAgICBmb3IgKGN1cnJQaWN0dXJlID0gaSA9IDA7IGkgPCBkaXNwVmFsdWUubGVuZ3RoICYmIGN1cnJQaWN0dXJlIDwgcGljdHVyZS5sZW5ndGg7IGkrKywgY3VyclBpY3R1cmUrKykge1xyXG4gICAgICBpZiAoRGlzcGxheUNvbnZlcnRvci5pc0FscGhhUG9zaXRpb25hbERpcmVjdGl2ZShwaWN0dXJlLmNoYXJBdChjdXJyUGljdHVyZSkpKSB7XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZChkaXNwVmFsdWUuY2hhckF0KGkpKTtcclxuXHJcbiAgICAgICAgaWYgKElzQWxwaGFEQkNTKSB7XHJcbiAgICAgICAgICAvLyBhIERCQ1MgY2hhcmFjdGVyIGluIFwiZGlzcFZhbHVlXCIgY29uc3VtZXMgdHdvIGNoYXJhY3RlcnMgaW4gXCJwaWN0dXJlXCJcclxuICAgICAgICAgIGxldCBzdHJEc3BWYWxPbmVDaGFyOiBzdHJpbmcgPSBkaXNwVmFsdWUuc3Vic3RyKGksIDEpO1xyXG4gICAgICAgICAgaWYgKFV0aWxTdHJCeXRlTW9kZS5sZW5CKHN0ckRzcFZhbE9uZUNoYXIpID09PSAyKSB7XHJcbiAgICAgICAgICAgIGN1cnJQaWN0dXJlID0gY3VyclBpY3R1cmUgKyAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1ZmZlci5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmlzIGNoZWNrZWQgY2hhciBBbHBoYSBQb3NpdGlvbmFsIERpcmVjdGl2ZTwvc3VtbWFyeT5cclxuICBzdGF0aWMgaXNBbHBoYVBvc2l0aW9uYWxEaXJlY3RpdmUodG9DaGVjazogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgYXNjaWk6IG51bWJlciA9IHRvQ2hlY2suY2hhckNvZGVBdCgwKTtcclxuICAgIHJldHVybiAoYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfWCB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19VIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0wgfHxcclxuICAgICAgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfTiB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19KIHx8IGFzY2lpID09PSBQSUNJbnRlcmZhY2UuUElDX0cgfHwgYXNjaWkgPT09IFBJQ0ludGVyZmFjZS5QSUNfUyB8fCBhc2NpaSA9PT0gUElDSW50ZXJmYWNlLlBJQ19UKTtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ29tcGFyYXRpdmUgbmV3VmFsdWUgd2l0aCBwb3NzaWJsZSBSYW5nZSBpbiBDb250aW51b3VzUmFuZ2VWYWx1ZXMvZGlzY3JldGVSYW5nZVZhbHVlc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBuZXdWYWx1ZSBpZiBpdCBwb3NzaWJsZSwgb2xkIHZhbHVlIG93ZXJ2aXNlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwcml2YXRlIGZpbGxBbHBoYUJ5UmFuZ2UoQ29udGludW91c1JhbmdlVmFsdWVzOiBMaXN0PHN0cmluZz4sIGRpc2NyZXRlUmFuZ2VWYWx1ZXM6IExpc3Q8c3RyaW5nPiwgbmV3VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IHRtcEJ1ZmZlcjogc3RyaW5nID0gdGhpcy5maWxsQWxwaGFCeURpc2NyZXRlUmFuZ2VWYWx1ZXMoZGlzY3JldGVSYW5nZVZhbHVlcywgbmV3VmFsdWUpO1xyXG4gICAgaWYgKHRtcEJ1ZmZlciAhPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdG1wQnVmZmVyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRtcEJ1ZmZlciA9IHRoaXMuZmlsbEFscGhhQnlDb250aW51b3VzUmFuZ2VWYWx1ZXMoQ29udGludW91c1JhbmdlVmFsdWVzLCBuZXdWYWx1ZSk7XHJcbiAgICAgIGlmICh0bXBCdWZmZXIgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gdG1wQnVmZmVyO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChkaXNjcmV0ZVJhbmdlVmFsdWVzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICB0bXBCdWZmZXIgPSB0aGlzLmNvbXBsZXRlQWxwaGFCeVJhbmdlKGRpc2NyZXRlUmFuZ2VWYWx1ZXMsIG5ld1ZhbHVlKTtcclxuICAgICAgICAgIGlmICh0bXBCdWZmZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcEJ1ZmZlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHVucG9zc2libGUgdG8gZmluZCBpdCBpbiB0aGUgcmFuZ2UgcmV0dXJuIG5vdCBjaGFuZ2VkIG9sZHZhbHVlXHJcbiAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZmlsbCBBbHBoYSBzdHJpbmcgYnkgZGlzY3JldGUgcmFuZ2VcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZGlzY3JldGVSYW5nZVZhbHVlc1wiPnZlY3RvciBvZiBkaXNjcmV0ZSByYW5nZSB2YWx1ZXNcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5ld1ZhbHVlXCI+dmFsdWUsIHRyeSBmb3VuZCBpbiB0aGUgdmVjdG9yIG9mIGRpc2NyZXRlIHJhbmdlc1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gZm91bmQgdmFsdWUgb3IgbnVsbChub3QgZm91bmQpXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBmaWxsQWxwaGFCeURpc2NyZXRlUmFuZ2VWYWx1ZXMoZGlzY3JldGVSYW5nZVZhbHVlczogTGlzdDxzdHJpbmc+LCBuZXdWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChkaXNjcmV0ZVJhbmdlVmFsdWVzICE9PSBudWxsKSB7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBkaXNjcmV0ZVJhbmdlVmFsdWVzLmxlbmd0aDsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgbGV0IGRpc2NyZXRlVmFsdWU6IHN0cmluZyA9IGRpc2NyZXRlUmFuZ2VWYWx1ZXMuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgbGV0IHRydW5jYXRlZFZhbHVlOiBzdHJpbmcgPSBkaXNjcmV0ZVZhbHVlLnN1YnN0cigwLCBNYXRoLm1pbihuZXdWYWx1ZS5sZW5ndGgsIGRpc2NyZXRlVmFsdWUubGVuZ3RoKSk7XHJcbiAgICAgICAgaWYgKG5ld1ZhbHVlLnRvVXBwZXJDYXNlKCkgPT09IHRydW5jYXRlZFZhbHVlLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIHJldHVybiBkaXNjcmV0ZVZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZmlsbCBBbHBoYSBzdHJpbmcgYnkgY29udGludW91cyByYW5nZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJDb250aW51b3VzUmFuZ2VWYWx1ZXNcIj52ZWN0b3Igb2YgY29udGludW91cyByYW5nZSB2YWx1ZXNcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5ld1ZhbHVlXCI+dmFsdWUsIHRyeSBmb3VuZCBpbiB0aGUgdmVjdG9yIG9mIGNvbnRpbnVvdXMgcmFuZ2VzXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBmb3VuZCB2YWx1ZSBvciBudWxsKG5vdCBmb3VuZClcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGZpbGxBbHBoYUJ5Q29udGludW91c1JhbmdlVmFsdWVzKENvbnRpbnVvdXNSYW5nZVZhbHVlczogTGlzdDxzdHJpbmc+LCBuZXdWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIG5ld1ZhbHVlID0gU3RyVXRpbC5ydHJpbShuZXdWYWx1ZSk7XHJcblxyXG5cclxuICAgIGlmIChDb250aW51b3VzUmFuZ2VWYWx1ZXMgIT09IG51bGwpIHtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IENvbnRpbnVvdXNSYW5nZVZhbHVlcy5sZW5ndGg7IGkgPSBpICsgMSkge1xyXG4gICAgICAgIGxldCBmcm9tOiBzdHJpbmcgPSBDb250aW51b3VzUmFuZ2VWYWx1ZXMuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgbGV0IHRvOiBzdHJpbmcgPSBDb250aW51b3VzUmFuZ2VWYWx1ZXMuZ2V0X0l0ZW0oaSA9IGkgKyAxKTtcclxuICAgICAgICBpZiAoTlN0cmluZy5Db21wYXJlT3JkaW5hbChuZXdWYWx1ZSwgZnJvbSkgPj0gMCAmJiBOU3RyaW5nLkNvbXBhcmVPcmRpbmFsKG5ld1ZhbHVlLCB0bykgPD0gMCkge1xyXG4gICAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyeSB0byBjb21wbGV0ZSB0aGUgbmV3VmFsdWUgdXNpbmcgdGhlIFJhbmdlXHJcbiAgLy8vICAgZmlyc3QgdHJ5IHRvIGNvbWxldGUgdGhlIHZhbHVlIGZvciBjYXNlIG1lYW5pbmcgYW5kIGFmdGVyIHRoYXQgZm9yIGlnbm9yZSBjYXNlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZlY3RvclwiPm9mIHJhbmdlc1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2hlY2tlZFwiPnZhbHVlXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB2YWx1ZSBjb21wbGV0ZWQgYnkgcmFuZ2VcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGNvbXBsZXRlQWxwaGFCeVJhbmdlKGRpc2NyZXRlUmFuZ2VWYWx1ZXM6IExpc3Q8c3RyaW5nPiwgbmV3VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IG1heENvaW5jaWRlOiBudW1iZXJbXSA9IG5ldyBBcnJheTxudW1iZXI+KDIpO1xyXG4gICAgZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCBtYXhDb2luY2lkZS5sZW5ndGg7ICsrX2FpKVxyXG4gICAgICBtYXhDb2luY2lkZVtfYWldID0gMDtcclxuXHJcbiAgICBsZXQgYmVzdEl0ZW06IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4oMik7XHJcbiAgICBmb3IgKGxldCBfYWk6IG51bWJlciA9IDA7IF9haSA8IGJlc3RJdGVtLmxlbmd0aDsgKytfYWkpXHJcbiAgICAgIGJlc3RJdGVtW19haV0gPSBudWxsO1xyXG5cclxuICAgIGxldCBDSEVDS19DQVNFOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IElHTk9SRV9DQVNFOiBudW1iZXIgPSAxO1xyXG5cclxuICAgIGxldCBjYXNlTGV0dGVyczogbnVtYmVyID0gQ0hFQ0tfQ0FTRTtcclxuXHJcbiAgICB3aGlsZSAoY2FzZUxldHRlcnMgPT09IENIRUNLX0NBU0UgfHwgY2FzZUxldHRlcnMgPT09IElHTk9SRV9DQVNFKSB7XHJcbiAgICAgIGxldCBsb3dlclZhbHVlOiBzdHJpbmc7XHJcbiAgICAgIGlmIChjYXNlTGV0dGVycyA9PT0gQ0hFQ0tfQ0FTRSkge1xyXG4gICAgICAgIGxvd2VyVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsb3dlclZhbHVlID0gbmV3VmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfVxyXG4gICAgICBsb3dlclZhbHVlID0gU3RyVXRpbC5ydHJpbShsb3dlclZhbHVlKTtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGRpc2NyZXRlUmFuZ2VWYWx1ZXMubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgICBsZXQgd3JvbmdMZXR0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBsZXQgY3VyckNvaW5jaWRlOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIGxldCByYW5nZUl0ZW06IHN0cmluZztcclxuICAgICAgICBpZiAoY2FzZUxldHRlcnMgPT09IENIRUNLX0NBU0UpIHtcclxuICAgICAgICAgIHJhbmdlSXRlbSA9IGRpc2NyZXRlUmFuZ2VWYWx1ZXMuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmFuZ2VJdGVtID0gZGlzY3JldGVSYW5nZVZhbHVlcy5nZXRfSXRlbShpKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgbG93TGVuZ3RoOiBudW1iZXIgPSBsb3dlclZhbHVlLmxlbmd0aDtcclxuICAgICAgICBsZXQgcmFuZ2VMZW5ndGg6IG51bWJlciA9IHJhbmdlSXRlbS5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGxvd0xlbmd0aCA8IHJhbmdlTGVuZ3RoKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgbG93TGVuZ3RoOyBqID0gaiArIDEpIHtcclxuICAgICAgICAgICAgaWYgKCEobG93ZXJWYWx1ZS5jaGFyQXQoaikgPT09IHJhbmdlSXRlbS5jaGFyQXQoaikpKSB7XHJcbiAgICAgICAgICAgICAgd3JvbmdMZXR0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJDb2luY2lkZSA9IGN1cnJDb2luY2lkZSArIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd3JvbmdMZXR0ZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGN1cnJDb2luY2lkZSA+IG1heENvaW5jaWRlW2Nhc2VMZXR0ZXJzXSAmJiAhd3JvbmdMZXR0ZXIpIHtcclxuICAgICAgICAgIGJlc3RJdGVtW2Nhc2VMZXR0ZXJzXSA9IGRpc2NyZXRlUmFuZ2VWYWx1ZXMuZ2V0X0l0ZW0oaSk7XHJcbiAgICAgICAgICBtYXhDb2luY2lkZVtjYXNlTGV0dGVyc10gPSBjdXJyQ29pbmNpZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNhc2VMZXR0ZXJzID0gY2FzZUxldHRlcnMgKyAxO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAoYmVzdEl0ZW1bQ0hFQ0tfQ0FTRV0gIT09IG51bGwpXHJcbiAgICAgIHJldHVybiBiZXN0SXRlbVtDSEVDS19DQVNFXTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoYmVzdEl0ZW1bSUdOT1JFX0NBU0VdICE9PSBudWxsKVxyXG4gICAgICAgIHJldHVybiBiZXN0SXRlbVtJR05PUkVfQ0FTRV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXREYXRlQ2hhcihkYXRlQ2hhcjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLkRBVEVDSEFSID0gZGF0ZUNoYXI7XHJcbiAgfVxyXG5cclxuICBnZXREYXRlQ2hhcigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuREFURUNIQVI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RvcmFnZUF0dHJpYnV0ZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgU3RyaW5nVmFsdWVUb01nVmFsdWUodmFsdWU6IHN0cmluZywgc3RvcmFnZUF0dHJpYnV0ZTogU3RvcmFnZUF0dHJpYnV0ZSwgZmlsbGVyOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyKTogYW55IHtcclxuICAgIHN3aXRjaCAoc3RvcmFnZUF0dHJpYnV0ZSkge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOiB7XHJcbiAgICAgICAgbGV0IG5ld1ZhbDogc3RyaW5nID0gdmFsdWU7XHJcbiAgICAgICAgbmV3VmFsID0gTlN0cmluZy5QYWRSaWdodChuZXdWYWwsIGxlbmd0aCwgZmlsbGVyKTtcclxuICAgICAgICByZXR1cm4gbmV3VmFsO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgcmV0dXJuIG5ldyBOVU1fVFlQRSh2YWx1ZSk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBCZWluZyB1c2VkIHRvIHNlbmQgcGFyYW1ldGVycyB0byB0aGUgJ3RpbWVfYnJlYWsnIG1ldGhvZFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgVGltZUJyZWFrUGFyYW1zIHtcclxuICBob3VyOiBudW1iZXIgPSAwO1xyXG4gIG1pbnV0ZTogbnVtYmVyID0gMDtcclxuICBzZWNvbmQ6IG51bWJlciA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCk7XHJcbiAgY29uc3RydWN0b3IoaG91cl86IG51bWJlciwgbWludXRlXzogbnVtYmVyLCBzZWNvbmRfOiBudW1iZXIpO1xyXG4gIGNvbnN0cnVjdG9yKGhvdXJfPzogbnVtYmVyLCBtaW51dGVfPzogbnVtYmVyLCBzZWNvbmRfPzogbnVtYmVyKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzAoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8xKGhvdXJfLCBtaW51dGVfLCBzZWNvbmRfKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMShob3VyXzogbnVtYmVyLCBtaW51dGVfOiBudW1iZXIsIHNlY29uZF86IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5ob3VyID0gaG91cl87XHJcbiAgICB0aGlzLm1pbnV0ZSA9IG1pbnV0ZV87XHJcbiAgICB0aGlzLnNlY29uZCA9IHNlY29uZF87XHJcbiAgfVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIEJlaW5nIHVzZWQgdG8gc2VuZCBpbnQgYnkgUmVmXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmNsYXNzIEludFJlZiB7XHJcbiAgdmFsOiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3Rvcih2YWxfOiBudW1iZXIpIHtcclxuICAgIHRoaXMudmFsID0gdmFsXztcclxuICB9XHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgQmVpbmcgdXNlZCB0byBzZW5kIHBhcmFtZXRlcnMgdG8gdGhlICdkYXRlX2lfMl9ubScgbWV0aG9kXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmNsYXNzIERhdGVOYW1lUGFyYW1zIHtcclxuICBvdXRWYWw6IHN0cmluZ1tdID0gbnVsbDtcclxuICBsZW46IG51bWJlciA9IDA7XHJcbiAgb3V0SWR4OiBudW1iZXIgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihvdXRfOiBzdHJpbmdbXSwgb3V0SWR4XzogbnVtYmVyLCBsZW5fOiBudW1iZXIpIHtcclxuICAgIHRoaXMub3V0VmFsID0gb3V0XztcclxuICAgIHRoaXMub3V0SWR4ID0gb3V0SWR4XztcclxuICAgIHRoaXMubGVuID0gbGVuXztcclxuICB9XHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgQmVpbmcgdXNlZCB0byBzZW5kIHBhcmFtZXRlcnMgdG8gdGhlICdkYXRlX2JyZWFrX2RhdGVtb2RlJyBtZXRob2RcclxuLy8vICAgaXQncyBzdHJ1Y3RcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIERhdGVCcmVha1BhcmFtcyB7XHJcbiAgZGF5OiBudW1iZXIgPSAwO1xyXG4gIGRvdzogbnVtYmVyID0gMDtcclxuICBkb3k6IG51bWJlciA9IDA7XHJcbiAgbW9udGg6IG51bWJlciA9IDA7XHJcbiAgeWVhcjogbnVtYmVyID0gMDtcclxuXHJcbiAgY29uc3RydWN0b3IoKTtcclxuICBjb25zdHJ1Y3Rvcih5ZWFyXzogbnVtYmVyLCBtb250aF86IG51bWJlciwgZGF5XzogbnVtYmVyLCBkb3lfOiBudW1iZXIsIGRvd186IG51bWJlcik7XHJcbiAgY29uc3RydWN0b3IoeWVhcl8/OiBudW1iZXIsIG1vbnRoXz86IG51bWJlciwgZGF5Xz86IG51bWJlciwgZG95Xz86IG51bWJlciwgZG93Xz86IG51bWJlcikge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8wKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3RydWN0b3JfMSh5ZWFyXywgbW9udGhfLCBkYXlfLCBkb3lfLCBkb3dfKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMSh5ZWFyXzogbnVtYmVyLCBtb250aF86IG51bWJlciwgZGF5XzogbnVtYmVyLCBkb3lfOiBudW1iZXIsIGRvd186IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy55ZWFyID0geWVhcl87XHJcbiAgICB0aGlzLm1vbnRoID0gbW9udGhfO1xyXG4gICAgdGhpcy5kYXkgPSBkYXlfO1xyXG4gICAgdGhpcy5kb3kgPSBkb3lfO1xyXG4gICAgdGhpcy5kb3cgPSBkb3dfO1xyXG4gIH1cclxufVxyXG4iXX0=