barsa-calendar 0.0.2 → 0.0.4

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.
@@ -539,7 +539,7 @@ export class CalendarService extends BaseComponent {
539
539
  const startOfMonth = this._dateService.startOfMonth(activeDate);
540
540
  const endOfMonth = this._dateService.endOfMonth(activeDate);
541
541
  const dateInfo = this._dateService.getDateInfo(activeDate);
542
- const dayInWeek = this._dateService.day(startOfMonth) + 1; // we add 1 to the dayInWeek because it's starts with zero
542
+ const dayInWeek = this._dateService.day(startOfMonth); // we add 1 to the dayInWeek because it's starts with zero
543
543
  let weekCounter = 0;
544
544
  let dayCounter = 0;
545
545
  for (let i = 0; i < 42; i++) {
@@ -607,4 +607,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
607
607
  type: Inject,
608
608
  args: ['Date_Culture']
609
609
  }] }]; } });
610
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWNhbGVuZGFyL3NyYy9saWIvc2VydmljZXMvY2FsZW5kYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUVILGFBQWEsRUFDYixXQUFXLEVBQ1gsY0FBYyxFQUtqQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQU8sU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7QUFHNUUsTUFBTSxPQUFPLGVBQWdCLFNBQVEsYUFBYTtJQW1COUMsWUFBb0IsV0FBdUIsRUFBc0MsT0FBZ0I7UUFDN0YsS0FBSyxFQUFFLENBQUM7UUFEUSxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQVBuQyxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBc0IsRUFBRSxDQUFDLENBQUM7UUFFaEUsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBZSxPQUFPLENBQUMsQ0FBQztRQUN6RCw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7UUFJakQsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZ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Q0FBQztZQUNSLElBQUk7WUFDSixTQUFTO1lBQ1QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3RCLFVBQVU7WUFDVixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDdkMsT0FBTztZQUNQLFNBQVM7WUFDVCxZQUFZO1lBQ1osY0FBYztZQUNkLFlBQVk7WUFDWixLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUs7WUFDMUIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJO1lBQ3hCLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUztZQUNsQyxPQUFPLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDcEMsS0FBSyxFQUFFLEVBQUU7WUFDVCxhQUFhO1lBQ2IsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbkIsQ0FBQztRQUNGLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDOUIsQ0FBQzs7NEdBdnFCUSxlQUFlLDRDQW1CeUMsY0FBYztnSEFuQnRFLGVBQWU7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVTs7MEJBb0J1QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBEYXRlU2VydmljZSxcbiAgICBCYXNlQ29tcG9uZW50LFxuICAgIGdldFVuaXF1ZUlkLFxuICAgIGdldERhdGVTZXJ2aWNlLFxuICAgIExvZ1NlcnZpY2UsXG4gICAgRGF0ZUluZm8sXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBDYWxlbmRhckZpZWxkc1xufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5pbXBvcnQgeyBDYWxlbmRhck1vZGUsIENhbGVuZGFyTW9udGhJbmZvLCBEYXksIERheVN0YXR1cyB9IGZyb20gJy4uL21vZGVscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYWxlbmRhclNlcnZpY2UgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgICBzZWxlY3RlZCQ6IE9ic2VydmFibGU8Q2FsZW5kYXJNb250aEluZm8+O1xuICAgIGRheXMkOiBPYnNlcnZhYmxlPERheVtdPjtcbiAgICBtb2RlJDogT2JzZXJ2YWJsZTxDYWxlbmRhck1vZGU+O1xuICAgIHdlZWtNb2RlRGF5cyQ6IE9ic2VydmFibGU8RGF5W10+O1xuICAgIGNhbGVuZGFycyQ6IE9ic2VydmFibGU8Q2FsZW5kYXJNb250aEluZm9bXT47XG4gICAgY3VycmVudE1vbnRoSW5kZXgkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgdG9kYXk6IERhdGU7XG4gICAgdG9kYXlEYXk6IERheSB8IHVuZGVmaW5lZDtcbiAgICBfZGF0ZVNlcnZpY2U6IERhdGVTZXJ2aWNlO1xuXG4gICAgcHJpdmF0ZSBfdG9kYXlNb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvO1xuICAgIHByaXZhdGUgX2NhbGVuZGFyc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FsZW5kYXJNb250aEluZm9bXT4oW10pO1xuICAgIHByaXZhdGUgX3NlbGVjdGVkU291cmNlOiBCZWhhdmlvclN1YmplY3Q8Q2FsZW5kYXJNb250aEluZm8+O1xuICAgIHByaXZhdGUgX21vZGVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhbGVuZGFyTW9kZT4oJ21vbnRoJyk7XG4gICAgcHJpdmF0ZSBfY3VycmVudE1vbnRoSW5kZXhTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oLTEpO1xuICAgIHByaXZhdGUgX3dlZWtNb2RlRGF5c1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF5W10+KFtdKTtcbiAgICBwcml2YXRlIF9kYXlzU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXlbXT4oW10pO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfbG9nU2VydmljZTogTG9nU2VydmljZSwgQE9wdGlvbmFsKCkgQEluamVjdCgnRGF0ZV9DdWx0dXJlJykgY3VsdHVyZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9kYXRlU2VydmljZSA9IGdldERhdGVTZXJ2aWNlKF9sb2dTZXJ2aWNlLCBjdWx0dXJlKTtcbiAgICAgICAgdGhpcy5kYXlzJCA9IHRoaXMuX2RheXNTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMubW9kZSQgPSB0aGlzLl9tb2RlU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLndlZWtNb2RlRGF5cyQgPSB0aGlzLl93ZWVrTW9kZURheXNTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJzJCA9IHRoaXMuX2NhbGVuZGFyc1NvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TW9udGhJbmRleCQgPSB0aGlzLl9jdXJyZW50TW9udGhJbmRleFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5faW5pdGlsaXplKCk7XG4gICAgfVxuICAgIGdldCB0b2RheU1vbnRoSW5mbygpOiBDYWxlbmRhck1vbnRoSW5mbyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90b2RheU1vbnRoSW5mbztcbiAgICB9XG4gICAgZ2V0IHNlbGVjdGVkTW9udGgoKTogQ2FsZW5kYXJNb250aEluZm8ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IGNhbGVuZGFycygpOiBBcnJheTxDYWxlbmRhck1vbnRoSW5mbz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJzU291cmNlLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGdldCB3ZWVrc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXlzU291cmNlLmdldFZhbHVlKCkubGVuZ3RoIC8gNztcbiAgICB9XG4gICAgZ2V0IGRheXMoKTogQXJyYXk8RGF5PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXlzU291cmNlLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBNb250aHMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVNlcnZpY2UubW9udGhOYW1lcygpO1xuICAgIH1cblxuICAgIGxvYWRNb250aEJ5RGF0ZSh2YWx1ZTogRGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb250aEluZm8gPSB0aGlzLl9kYXRlU2VydmljZS5nZXREYXRlSW5mbyh2YWx1ZSk7XG4gICAgICAgIHRoaXMubG9hZE1vbnRoKG1vbnRoSW5mbyk7XG4gICAgfVxuICAgIHNldERhdGVTZXJ2aWNlKHByaW1hcnlDYWxlbmRhclR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBsZXQgZGF0ZVNlcnZpY2UgPSB0aGlzLl9kYXRlU2VydmljZTtcbiAgICAgICAgc3dpdGNoIChwcmltYXJ5Q2FsZW5kYXJUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdQZXJzaWFuJzpcbiAgICAgICAgICAgICAgICBkYXRlU2VydmljZSA9IGdldERhdGVTZXJ2aWNlKHRoaXMuX2xvZ1NlcnZpY2UsICdmYS1JUicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnR3JlZ29yaWFuJzpcbiAgICAgICAgICAgICAgICBkYXRlU2VydmljZSA9IGdldERhdGVTZXJ2aWNlKHRoaXMuX2xvZ1NlcnZpY2UsICdlbi1VUycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQXJhYmljJzpcbiAgICAgICAgICAgICAgICBkYXRlU2VydmljZSA9IGdldERhdGVTZXJ2aWNlKHRoaXMuX2xvZ1NlcnZpY2UsICdhci1BRScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGVTZXJ2aWNlID0gZGF0ZVNlcnZpY2U7XG4gICAgICAgIHRoaXMuX2luaXRpbGl6ZSgpO1xuICAgIH1cbiAgICBzZXREYXlzKGRheXM6IERheVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RheXNTb3VyY2UubmV4dChkYXlzKTtcbiAgICB9XG5cbiAgICBwcmVwYXJlV2Vlayhtb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvLCBzdGFydEluZGV4OiBudW1iZXIsIGRheXNDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF5cyA9IG1vbnRoSW5mby5kYXlzLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyBkYXlzQ291bnQpO1xuICAgICAgICB0aGlzLl93ZWVrTW9kZURheXNTb3VyY2UubmV4dChzdGFydERheXMpO1xuICAgIH1cbiAgICBzZXRTZWxlY3RlZChzZWxlY3RlZDogQ2FsZW5kYXJNb250aEluZm8pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTb3VyY2UubmV4dChzZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgd2Vla0RheXNNaW4oKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlU2VydmljZS53ZWVrZGF5c01pbigpO1xuICAgIH1cbiAgICB3ZWVrRGF5cygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVTZXJ2aWNlLndlZWtEYXlzKCk7XG4gICAgfVxuICAgIGdvdG9Ub2RheSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkTW9udGgodGhpcy5fdG9kYXlNb250aEluZm8uZGF0ZUluZm8sIDApO1xuICAgICAgICB0aGlzLnNldE1vZGUoXG4gICAgICAgICAgICB0aGlzLl9tb2RlU291cmNlLmdldFZhbHVlKCksXG4gICAgICAgICAgICB0aGlzLl90b2RheU1vbnRoSW5mby5kYXlzLmZpbmQoKGMpID0+IGMuaXNUb2RheSksXG4gICAgICAgICAgICB0aGlzLl93ZWVrTW9kZURheXNTb3VyY2UuZ2V0VmFsdWUoKS5sZW5ndGhcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmFuZ2VTZWxlY3Qoc3RhcnREYXk6IERheSwgZW5kRGF5OiBEYXksIG1vbnRoSW5mbzogQ2FsZW5kYXJNb250aEluZm8pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlmZiA9IGVuZERheS5pbmRleCAtIHN0YXJ0RGF5LmluZGV4O1xuICAgICAgICBpZiAoZGlmZiA8IDcpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnd2VlaycsIHN0YXJ0RGF5LCBkaWZmICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkaWZmMiA9IGRpZmYgKyAxO1xuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdjdXN0b21Nb250aCcpO1xuICAgICAgICAgICAgdGhpcy5zZXRNb250aChtb250aEluZm8sIHN0YXJ0RGF5LCBkaWZmMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0TW9udGgobW9udGhJbmZvOiBDYWxlbmRhck1vbnRoSW5mbywgc3RhcnREYXk/OiBEYXksIGRpZmY6IG51bWJlciA9IDApOiB2b2lkIHtcbiAgICAgICAgaWYgKHN0YXJ0RGF5ICYmIGRpZmYgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gc3RhcnREYXkuaW5kZXg7XG4gICAgICAgICAgICB0aGlzLmxvYWRDYWxlbmRhck1vbnRoSW5mbyhtb250aEluZm8pO1xuICAgICAgICAgICAgdGhpcy5zZXREYXlzKG1vbnRoSW5mby5kYXlzLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyBkaWZmKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRDYWxlbmRhck1vbnRoSW5mbyhtb250aEluZm8pO1xuICAgICAgICAgICAgdGhpcy5zZXREYXlzKG1vbnRoSW5mby5kYXlzKTtcbiAgICAgICAgICAgIC8vIGVsc2UgaWYgKG1vZGUgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIC8vICAgc3RhcnREYXkgPSBkYXlzTG9hZGVkWzBdO1xuICAgICAgICAgICAgLy8gaWYgKHN0YXJ0RGF5KSB0aGlzLmxvYWRNb250aChzdGFydERheS5tb250aERhdGVJbmZvKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRNb2RlKG1vZGU6IENhbGVuZGFyTW9kZSwgc3RhcnREYXk/OiBEYXksIGRheXNDb3VudD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBvbGRNb2RlID0gdGhpcy5fbW9kZVNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICB0aGlzLl9tb2RlU291cmNlLm5leHQobW9kZSk7XG4gICAgICAgIGlmIChtb2RlID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1vbnRoKHRoaXMuc2VsZWN0ZWRNb250aCwgc3RhcnREYXkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdjdXN0b21Nb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TW9udGgodGhpcy5zZWxlY3RlZE1vbnRoLCBzdGFydERheSwgdGhpcy5kYXlzLmxlbmd0aCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF5c0xvYWRlZCA9IHRoaXMuX3dlZWtNb2RlRGF5c1NvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICBkYXlzQ291bnQgPSBkYXlzQ291bnQgPz8gKG1vZGUgPT09ICd3ZWVrJyA/IDcgOiAxKTtcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSAwO1xuICAgICAgICBpZiAoIXN0YXJ0RGF5KSB7XG4gICAgICAgICAgICBpZiAobW9kZSA9PT0gJ3dlZWsnIHx8IG1vZGUgPT09ICdkYXknKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9sZE1vZGUgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXkgPSB0aGlzLnNlbGVjdGVkTW9udGguZGF5cy5maW5kKChjKSA9PiBjLmlzU3RhcnRPZk1vbnRoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9sZE1vZGUgPT09ICdjdXN0b21Nb250aCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXkgPSB0aGlzLmRheXNbMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXkgPSBkYXlzTG9hZGVkWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGFydERheSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0YXJ0RGF5Lm1vbnRoRGF0ZUluZm8ubW9udGggIT09IHRoaXMuc2VsZWN0ZWRNb250aC5kYXRlSW5mby5tb250aCB8fFxuICAgICAgICAgICAgICAgIHN0YXJ0RGF5Lm1vbnRoRGF0ZUluZm8ueWVhciAhPT0gdGhpcy5zZWxlY3RlZE1vbnRoLmRhdGVJbmZvLnllYXJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vbnRoKHN0YXJ0RGF5Lm1vbnRoRGF0ZUluZm8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhcnRJbmRleCA9IHRoaXMuc2VsZWN0ZWRNb250aC5kYXlzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAoYykgPT4gYy5tb250aCA9PT0gc3RhcnREYXk/Lm1vbnRoICYmIGMuZGF5SW5Nb250aCA9PT0gc3RhcnREYXkuZGF5SW5Nb250aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXBhcmVXZWVrKHRoaXMuX3NlbGVjdGVkU291cmNlLmdldFZhbHVlKCksIHN0YXJ0SW5kZXgsIGRheXNDb3VudCk7XG4gICAgfVxuXG4gICAgZmlsbFdlZWsod2VlazogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9LCBkYXlzQ291bnQgPSA3KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFycjogYW55W10gPSBPYmplY3QudmFsdWVzKHdlZWspO1xuICAgICAgICBhcnIuZm9yRWFjaChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ/OiBNZXRhb2JqZWN0RGF0YU1vZGVsO1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5PzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBzdGFydD86IERhdGU7XG4gICAgICAgICAgICAgICAgICAgIGVuZD86IERhdGU7XG4gICAgICAgICAgICAgICAgfVtdXG4gICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVsIG9mIGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRlID0gZWwuZW5kO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVEYXRlICYmIHRoaXMuX2RhdGVTZXJ2aWNlLmdldE1vbWVudCh2YWx1ZURhdGUpLmlzQmVmb3JlKHRoaXMudG9kYXksICdkYXknKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWwub3BhY2l0eSA9IDAuNTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gZWxlbWVudC5sZW5ndGg7IGkgPCBkYXlzQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnB1c2goeyBjb2xTcGFuOiAxIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG4gICAgc29ydFRhc2tzKGNhbGVuZGFyVGFza3M6IE1ldGFvYmplY3REYXRhTW9kZWxbXSwgY2FsZW5kYXJGaWVsZHM6IENhbGVuZGFyRmllbGRzKTogQXJyYXk8TWV0YW9iamVjdERhdGFNb2RlbD4ge1xuICAgICAgICBjb25zdCBzdGFydERhdGVGaWVsZCA9IGNhbGVuZGFyRmllbGRzLlN0YXJ0RGF0ZTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZUZpZWxkID0gY2FsZW5kYXJGaWVsZHMuRW5kRGF0ZTtcbiAgICAgICAgY2FsZW5kYXJUYXNrcy5zb3J0KCh0YXNrQSwgdGFza0IpID0+ICh0YXNrQVtzdGFydERhdGVGaWVsZF0gPCB0YXNrQltzdGFydERhdGVGaWVsZF0gPyAtMSA6IDEpKTtcbiAgICAgICAgY2FsZW5kYXJUYXNrcy5zb3J0KCh0YXNrQSwgdGFza0IpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2tBU3RhcnREYXRlID0gdGFza0Fbc3RhcnREYXRlRmllbGRdO1xuICAgICAgICAgICAgY29uc3QgdGFza0JTdGFydERhdGUgPSB0YXNrQltzdGFydERhdGVGaWVsZF07XG5cbiAgICAgICAgICAgIGNvbnN0IG1vbWVudFRhc2tBU3RhcnREYXRlID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KHRhc2tBU3RhcnREYXRlKTtcbiAgICAgICAgICAgIGNvbnN0IG1vbWVudFRhc2tCU3RhcnREYXRlID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KHRhc2tCU3RhcnREYXRlKTtcbiAgICAgICAgICAgIGlmIChtb21lbnRUYXNrQVN0YXJ0RGF0ZS5pc1NhbWUobW9tZW50VGFza0JTdGFydERhdGUsICdkYXknKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tBRW5kRGF0ZSA9IHRhc2tBW2VuZERhdGVGaWVsZF07XG4gICAgICAgICAgICAgICAgY29uc3QgdGFza0JFbmREYXRlID0gdGFza0JbZW5kRGF0ZUZpZWxkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXlBRGlmZiA9IG1vbWVudFRhc2tBU3RhcnREYXRlLmRpZmYodGFza0FFbmREYXRlLCAnZGF5Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF5QkRpZmYgPSBtb21lbnRUYXNrQlN0YXJ0RGF0ZS5kaWZmKHRhc2tCRW5kRGF0ZSwgJ2RheScpO1xuICAgICAgICAgICAgICAgIGlmIChkYXlBRGlmZiA+IGRheUJEaWZmKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGF5QURpZmYgPCBkYXlCRGlmZikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNhbGVuZGFyVGFza3M7XG4gICAgfVxuICAgIGNyZWF0ZVdlZWtUYXNrKFxuICAgICAgICBkYXlzOiBEYXlbXSxcbiAgICAgICAgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLFxuICAgICAgICBjYWxlbmRhckZpZWxkczogQ2FsZW5kYXJGaWVsZHMsXG4gICAgICAgIHRhc2tIZWlnaHQ6IG51bWJlclxuICAgICk6IHsgW2tleTogc3RyaW5nXTogYW55W10gfSB7XG4gICAgICAgIGNvbnN0IHdlZWs6IHsgW2tleTogc3RyaW5nXTogYW55W10gfSA9IHt9O1xuICAgICAgICBkYXlzLmZvckVhY2goKGRheSwgZGF5SW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgICAgIG1vRGF0YUxpc3QuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb3VudGVySW5kZXggPSBjb3VudGVyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF3ZWVrW2NvdW50ZXJJbmRleF0pIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla1tjb3VudGVySW5kZXhdID0gW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3ZWVrW2NvdW50ZXJJbmRleF0ubGVuZ3RoID4gZGF5SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSB3ZWVrW2NvdW50ZXJJbmRleF0ubGVuZ3RoOyBtIDwgZGF5SW5kZXg7IG0rKykge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrW2NvdW50ZXJJbmRleF0ucHVzaCh7IGNvbFNwYW46IDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gYWdhciB3ZWVrW2NvdW50ZXJdIGNvbHNwYW4gamEgZGFzaHQgYW5qYW0gZ2FyZGFkLlxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Rhc2s6IGFueSA9IHsgY29sU3BhbjogMSB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vbWVudERheSA9IHRoaXMuX2RhdGVTZXJ2aWNlLmdldE1vbWVudChkYXkuZGF0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9tZW50T2ZTdGFydEV2ZW50ID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KGV2ZW50W2NhbGVuZGFyRmllbGRzLlN0YXJ0RGF0ZV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBldmVudFtjYWxlbmRhckZpZWxkcy5FbmREYXRlXTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb21lbnRPZkVuZEV2ZW50ID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KGVuZERhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhtb21lbnRPZlN0YXJ0RXZlbnQuZGlmZihtb21lbnRPZkVuZEV2ZW50LCAnZGF5JykpO1xuICAgICAgICAgICAgICAgIGlmIChkaWZmID09PSAwICYmIG1vbWVudERheS5pc1NhbWUobW9tZW50T2ZTdGFydEV2ZW50LCAnZGF5JykpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5jb2xTcGFuID0gMTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRNaW51dGVUb3AgPSAoZXZlbnQuJFN0YXJ0RGF0ZUluZm8ubWludXRlcyAqIHRhc2tIZWlnaHQpIC8gNjA7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Rhc2sudG9wID0gZXZlbnQuJFN0YXJ0RGF0ZUluZm8uaG91ciAqIHRhc2tIZWlnaHQgKyBzdGFydE1pbnV0ZVRvcDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kTWludXRlVG9wID0gKGV2ZW50LiRFbmREYXRlSW5mby5taW51dGVzICogdGFza0hlaWdodCkgLyA2MDtcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5oZWlnaHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50LiRFbmREYXRlSW5mby5ob3VyIC0gZXZlbnQuJFN0YXJ0RGF0ZUluZm8uaG91cikgKiB0YXNrSGVpZ2h0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZE1pbnV0ZVRvcCAtXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydE1pbnV0ZVRvcDtcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5ldmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmVuZGRheUlzSW5Sb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLnN0YXJ0ZGF5SXNJblJvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suaXNTdGFydERheSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suaXNFbmREYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLnN0YXJ0ID0gbmV3VGFzay5lbmQgPSBkYXkuZGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5pbkRheSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC4kU3RhcnREYXRlSW5mby5ob3VyID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuJFN0YXJ0RGF0ZUluZm8ubWludXRlcyA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LiRFbmREYXRlSW5mby5ob3VyID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuJEVuZERhdGVJbmZvLm1pbnV0ZXMgPiAwO1xuICAgICAgICAgICAgICAgICAgICB3ZWVrW2NvdW50ZXJJbmRleF0uc3BsaWNlKGRheUluZGV4LCAwLCBuZXdUYXNrKTtcbiAgICAgICAgICAgICAgICAgICAgZGF5LnRhc2tzLnB1c2gobmV3VGFzayk7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGlmZkZyb21FbmRPZkV2ZW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRpZmZGcm9tU3RhcnRPZkV2ZW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNCZXR3ZWVuID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudERheS5pc1NhbWVPckFmdGVyKG1vbWVudE9mU3RhcnRFdmVudCwgJ2RheScpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtb21lbnREYXkuaXNTYW1lT3JCZWZvcmUobW9tZW50T2ZFbmRFdmVudCwgJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNCZXR3ZWVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWZmRnJvbUVuZE9mRXZlbnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpZmYgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmNvbFNwYW4gPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suZXZlbnQgPSBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZkZyb21FbmRPZkV2ZW50ID0gTWF0aC5hYnMobW9tZW50RGF5LmRpZmYobW9tZW50T2ZFbmRFdmVudCwgJ2RheScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmRnJvbVN0YXJ0T2ZFdmVudCA9IE1hdGguYWJzKG1vbWVudERheS5kaWZmKG1vbWVudE9mU3RhcnRFdmVudCwgJ2RheScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1N0YXJ0RGF5ID0gbW9tZW50RGF5LmlzU2FtZShtb21lbnRPZlN0YXJ0RXZlbnQsICdkYXknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0VuZERheSA9IG1vbWVudERheS5pc1NhbWUobW9tZW50T2ZFbmRFdmVudCwgJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xTcGFuID0gZGlmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3RhcnREYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbiA9IGRpZmZGcm9tRW5kT2ZFdmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xTcGFuID0gZGlmZiArIDE7IC8vIGluY2x1ZGUgdGhlIHN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suY29sU3BhbiA9IHRoaXMuX2NhbGNDb2xTcGFuKGNvbFNwYW4sIGRheUluZGV4LCBkYXlzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5pc1N0YXJ0RGF5ID0gaXNTdGFydERheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmlzRW5kRGF5ID0gaXNFbmREYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5pc01pZGRsZSA9ICFpc1N0YXJ0RGF5ICYmICFpc0VuZERheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3VGFzay5pc1N0YXJ0RGF5IHx8IGRheUluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc3BhbiA9IDA7IHNwYW4gPCBuZXdUYXNrLmNvbFNwYW47IHNwYW4rKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXNrSW5kZXggPSBkYXlJbmRleCArIHNwYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrSW5kZXggPiBkYXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tEYXlJbmZvID0gZGF5c1t0YXNrSW5kZXhdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tJbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubmV3VGFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0YXNrRGF5SW5mby5kYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBlbmREYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTdGFydERheTogc3BhbiA9PT0gMCA/IG5ld1Rhc2suaXNTdGFydERheSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFRhc2s6IGV2ZW50LiRTdGFydERheUluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRUYXNrOiBldmVudC4kRW5kRGF5SW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZGF5SXNJblJvdzogZGF5SW5kZXggLSBkaWZmRnJvbVN0YXJ0T2ZFdmVudCA+IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kZGF5SXNJblJvdzogISFkYXlzW2RpZmZGcm9tRW5kT2ZFdmVudF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc01pZGRsZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuID09PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3VGFzay5pc01pZGRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2RhdGVTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRNb21lbnQodGFza0RheUluZm8uZGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmlzQmV0d2Vlbihtb21lbnRPZlN0YXJ0RXZlbnQsIG1vbWVudE9mRW5kRXZlbnQsICdkYXknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRW5kRGF5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4gPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXdUYXNrLmlzRW5kRGF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTWF0aC5hYnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0TW9tZW50KHRhc2tEYXlJbmZvLmRhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlmZihtb21lbnRPZkVuZEV2ZW50LCAnZGF5JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDw9IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiBzcGFuID09PSAwID8gbmV3VGFzay5jb2xTcGFuIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWVrW2NvdW50ZXIudG9TdHJpbmcoKV0uc3BsaWNlKHRhc2tJbmRleCwgMCwgdGFza0luZm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrRGF5SW5mby50YXNrcy5wdXNoKHRhc2tJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gd2VlaztcbiAgICB9XG5cbiAgICBsb2FkTmV4dCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMuX21vZGVTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRNb250aCA9IHRoaXMuX3NlbGVjdGVkU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgICAgY2FzZSAnY3VzdG9tTW9udGgnOlxuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5cyA9IHRoaXMuZGF5cztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RGF5cyA9IHRoaXMuX2xvYWROZXh0TW9udGgoZGF5cywgc2VsZWN0ZWRNb250aCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF5cyhuZXdEYXlzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheXMgPSB0aGlzLl93ZWVrTW9kZURheXNTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RGF5cyA9IHRoaXMuX2xvYWROZXh0V2VlayhkYXlzLCBzZWxlY3RlZE1vbnRoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2Vla01vZGVEYXlzU291cmNlLm5leHQobmV3RGF5cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGlzdCc6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ290b01vbnRoKG1vbnRoTmFtZTogc3RyaW5nLCBtb250aEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRNb250aCA9IHRoaXMuc2VsZWN0ZWRNb250aC5kYXRlSW5mby5tb250aDtcbiAgICAgICAgY29uc3QgdmFsID0gbW9udGhJbmRleCAtIHNlbGVjdGVkTW9udGg7XG4gICAgICAgIHRoaXMubG9hZE1vbnRoKHRoaXMuc2VsZWN0ZWRNb250aC5kYXRlSW5mbywgdmFsKTtcbiAgICB9XG4gICAgZ290b1llYXIoeWVhcjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWRNb250aC5kYXRlSW5mby55ZWFyO1xuICAgICAgICBjb25zdCB2YWwgPSB5ZWFyIC0gc2VsZWN0ZWRZZWFyO1xuICAgICAgICB0aGlzLmluY3JlYXNlWWVhcih2YWwpO1xuICAgIH1cbiAgICBsb2FkTmV4dFllYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5jcmVhc2VZZWFyKDEpO1xuICAgIH1cbiAgICBsb2FkUHJldlllYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5jcmVhc2VZZWFyKC0xKTtcbiAgICB9XG4gICAgaW5jcmVhc2VZZWFyKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyID0gdGhpcy5zZWxlY3RlZE1vbnRoLmRhdGVJbmZvLm1vbWVudC50b0RhdGUoKTtcbiAgICAgICAgc2VsZWN0ZWRZZWFyLnNldEZ1bGxZZWFyKHNlbGVjdGVkWWVhci5nZXRGdWxsWWVhcigpICsgdmFsdWUpOyAvLyBuZXh0IHllYXJcbiAgICAgICAgdGhpcy5sb2FkTW9udGhCeURhdGUoc2VsZWN0ZWRZZWFyKTtcbiAgICB9XG4gICAgbG9hZFByZXZpb3VzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb2RlID0gdGhpcy5fbW9kZVNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZE1vbnRoID0gdGhpcy5fc2VsZWN0ZWRTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdjdXN0b21Nb250aCc6XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXlzID0gdGhpcy5kYXlzO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdEYXlzID0gdGhpcy5fbG9hZFByZXZNb250aChkYXlzLCBzZWxlY3RlZE1vbnRoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXlzKG5ld0RheXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheXMgPSB0aGlzLl93ZWVrTW9kZURheXNTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RGF5cyA9IHRoaXMuX2xvYWRQcmV2V2VlayhkYXlzLCBzZWxlY3RlZE1vbnRoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2Vla01vZGVEYXlzU291cmNlLm5leHQobmV3RGF5cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGlzdCc6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbG9hZE1vbnRoKGRhdGVJbmZvOiBEYXRlSW5mbywgYWRkTW9udGg6IG51bWJlciA9IDApOiBDYWxlbmRhck1vbnRoSW5mbyB7XG4gICAgICAgIGxldCBsb2FkZWRNb250aERhdGUgPSB0aGlzLl9kYXRlU2VydmljZS5nZXRNb21lbnQoZGF0ZUluZm8uZGF0ZSk7XG4gICAgICAgIGlmIChhZGRNb250aCA+IDApIHtcbiAgICAgICAgICAgIGxvYWRlZE1vbnRoRGF0ZSA9IHRoaXMuX2RhdGVTZXJ2aWNlLmFkZE1vbnRoKGxvYWRlZE1vbnRoRGF0ZSwgYWRkTW9udGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhZGRNb250aCA8IDApIHtcbiAgICAgICAgICAgIGxvYWRlZE1vbnRoRGF0ZSA9IHRoaXMuX2RhdGVTZXJ2aWNlLnN1YnRyYWN0TW9udGgobG9hZGVkTW9udGhEYXRlLCBNYXRoLmFicyhhZGRNb250aCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsb2FkZWRDYWxlbmRhck1vbnRoSW5mbyA9IHRoaXMuY2FsZW5kYXJzLmZpbmQoKGMpID0+IGMuZGF0ZUluZm8ubW9tZW50LmlzU2FtZShsb2FkZWRNb250aERhdGUsICdkYXknKSk7XG4gICAgICAgIGlmICghbG9hZGVkQ2FsZW5kYXJNb250aEluZm8pIHtcbiAgICAgICAgICAgIGxvYWRlZENhbGVuZGFyTW9udGhJbmZvID0gdGhpcy5nZXRNb250aEluZm8obG9hZGVkTW9udGhEYXRlLCB0aGlzLnRvZGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRDYWxlbmRhck1vbnRoSW5mbyhsb2FkZWRDYWxlbmRhck1vbnRoSW5mbyk7XG4gICAgICAgIHJldHVybiBsb2FkZWRDYWxlbmRhck1vbnRoSW5mbztcbiAgICB9XG5cbiAgICBsb2FkQ2FsZW5kYXJNb250aEluZm8obG9hZGVkQ2FsZW5kYXJNb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyc0luZm8gPSBbLi4udGhpcy5jYWxlbmRhcnNdO1xuICAgICAgICBjb25zdCBleGlzdHMgPSBjYWxlbmRhcnNJbmZvLmZpbmQoXG4gICAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICAgICBjLmRhdGVJbmZvLnllYXIgPT09IGxvYWRlZENhbGVuZGFyTW9udGhJbmZvLmRhdGVJbmZvLnllYXIgJiZcbiAgICAgICAgICAgICAgICBjLmRhdGVJbmZvLm1vbnRoID09PSBsb2FkZWRDYWxlbmRhck1vbnRoSW5mby5kYXRlSW5mby5tb250aFxuICAgICAgICApO1xuICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgY2FsZW5kYXJzSW5mby5wdXNoKGxvYWRlZENhbGVuZGFyTW9udGhJbmZvKTtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyc1NvdXJjZS5uZXh0KGNhbGVuZGFyc0luZm8pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQobG9hZGVkQ2FsZW5kYXJNb250aEluZm8pO1xuICAgIH1cblxuICAgIGFkZENhbGVuZGFyTW9udGhJbmZvKGNhbGVuZGFyTW9udGhJbmZvOiBDYWxlbmRhck1vbnRoSW5mbyk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdMaXN0ID0gdGhpcy5jYWxlbmRhcnM7XG4gICAgICAgIG5ld0xpc3QucHVzaChjYWxlbmRhck1vbnRoSW5mbyk7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyc1NvdXJjZS5uZXh0KG5ld0xpc3QpO1xuICAgIH1cblxuICAgIGdldE51bWJlcih2YWx1ZSk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGZpbmQgPSBbJ9uwJywgJ9uxJywgJ9uyJywgJ9uzJywgJ9u0JywgJ9u1JywgJ9u2JywgJ9u3JywgJ9u4JywgJ9u5J107XG4gICAgICAgIGNvbnN0IHJlcGxhY2UgPSBbJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknXTtcbiAgICAgICAgbGV0IHJlcGxhY2VTdHJpbmcgPSB2YWx1ZTtcbiAgICAgICAgbGV0IHJlZ2V4O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbmQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChmaW5kW2ldLCAnZycpO1xuICAgICAgICAgICAgcmVwbGFjZVN0cmluZyA9IHJlcGxhY2VTdHJpbmcucmVwbGFjZShyZWdleCwgcmVwbGFjZVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE51bWJlcihyZXBsYWNlU3RyaW5nKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5pdGlsaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRvZGF5ID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KG5ldyBEYXRlKCkpO1xuICAgICAgICBjb25zdCB0b2RheU1vbnRoSW5mbyA9IHRoaXMuZ2V0Q2FsZW5kYXJNb250aEluZm8obmV3IERhdGUoKSk7XG4gICAgICAgIHRoaXMudG9kYXlEYXkgPSB0b2RheU1vbnRoSW5mby5kYXlzLmZpbmQoKGMpID0+IGMuaXNUb2RheSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYWxlbmRhck1vbnRoSW5mbz4odG9kYXlNb250aEluZm8pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkJCA9IHRoaXMuX3NlbGVjdGVkU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLl9jYWxlbmRhcnNTb3VyY2UubmV4dChbdG9kYXlNb250aEluZm9dKTtcbiAgICAgICAgdGhpcy5zZXREYXlzKHRvZGF5TW9udGhJbmZvLmRheXMpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkKHRvZGF5TW9udGhJbmZvKTtcbiAgICAgICAgdGhpcy5fY3VycmVudE1vbnRoSW5kZXhTb3VyY2UubmV4dCh0b2RheU1vbnRoSW5mby5kYXRlSW5mby5tb250aCk7XG4gICAgICAgIHRoaXMuX3RvZGF5TW9udGhJbmZvID0gdG9kYXlNb250aEluZm87XG4gICAgICAgIHRoaXMuY2FsZW5kYXJzJC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2NhbGNDb2xTcGFuKGRpZmY6IG51bWJlciwgZGF5SW5kZXg6IG51bWJlciwgbWF4Q29sU3BhbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGRpZmYgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChNYXRoLmZsb29yKGRpZmYgLyBtYXhDb2xTcGFuKSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBtYXhDb2xTcGFuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRheUluZGV4ICsgZGlmZiA+IG1heENvbFNwYW4pIHtcbiAgICAgICAgICAgIHJldHVybiBtYXhDb2xTcGFuIC0gZGF5SW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmY7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbG9hZE5leHRNb250aChkYXlzOiBEYXlbXSwgbW9udGhJbmZvOiBDYWxlbmRhck1vbnRoSW5mbyk6IEFycmF5PERheT4ge1xuICAgICAgICBjb25zdCBkYXlzQ291bnQgPSBkYXlzLmxlbmd0aDtcbiAgICAgICAgbGV0IGxhc3REYXkgPSBkYXlzW2RheXNDb3VudCAtIDFdO1xuICAgICAgICBjb25zdCBsYXN0RGF5SW5kZXggPSBtb250aEluZm8uZGF5cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoYykgPT4gYy5kYXlJbk1vbnRoID09PSBsYXN0RGF5LmRheUluTW9udGggJiYgYy5tb250aCA9PT0gbGFzdERheS5tb250aFxuICAgICAgICApO1xuICAgICAgICBsZXQgbmV3RGF5cyA9IGxhc3REYXlJbmRleCA+IC0xID8gbW9udGhJbmZvLmRheXMuc2xpY2UobGFzdERheUluZGV4ICsgMSwgbGFzdERheUluZGV4ICsgMSArIGRheXNDb3VudCkgOiBbXTtcbiAgICAgICAgaWYgKG5ld0RheXMubGVuZ3RoIDwgZGF5c0NvdW50KSB7XG4gICAgICAgICAgICAvLyB3ZSBtb3ZlIHRvIG5leHQgbW9udGhcbiAgICAgICAgICAgIGlmIChuZXdEYXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBsYXN0RGF5ID0gbmV3RGF5c1tuZXdEYXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmVlZENvdW50RGF5ID0gZGF5c0NvdW50IC0gbmV3RGF5cy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmxvYWRNb250aChtb250aEluZm8uZGF0ZUluZm8sIDEpO1xuICAgICAgICAgICAgbGV0IHN0YXJ0UG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgaWYgKG5lZWRDb3VudERheSA8IDQyKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IG5leHRNb250aC5kYXlzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgKGMpID0+IGMuZGF5SW5Nb250aCA9PT0gbGFzdERheS5kYXlJbk1vbnRoICYmIGMubW9udGggPT09IGxhc3REYXkubW9udGhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydFBvc2l0aW9uID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV4dERheXMgPSBuZXh0TW9udGguZGF5cy5zbGljZShzdGFydFBvc2l0aW9uLCBzdGFydFBvc2l0aW9uICsgbmVlZENvdW50RGF5KTtcbiAgICAgICAgICAgIG5ld0RheXMgPSBbLi4ubmV3RGF5cywgLi4ubmV4dERheXNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdEYXlzO1xuICAgIH1cbiAgICBwcml2YXRlIF9sb2FkTmV4dFdlZWsoZGF5czogRGF5W10sIG1vbnRoSW5mbzogQ2FsZW5kYXJNb250aEluZm8pOiBBcnJheTxEYXk+IHtcbiAgICAgICAgY29uc3QgZGF5c0NvdW50ID0gZGF5cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGxhc3REYXkgPSBkYXlzW2RheXNDb3VudCAtIDFdO1xuICAgICAgICBjb25zdCBsYXN0RGF5SW5kZXggPSBtb250aEluZm8uZGF5cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoYykgPT4gYy5kYXlJbk1vbnRoID09PSBsYXN0RGF5LmRheUluTW9udGggJiYgYy5tb250aCA9PT0gbGFzdERheS5tb250aFxuICAgICAgICApO1xuICAgICAgICBsZXQgbmV3RGF5cyA9IG1vbnRoSW5mby5kYXlzLnNsaWNlKGxhc3REYXlJbmRleCArIDEsIGxhc3REYXlJbmRleCArIDEgKyBkYXlzQ291bnQpO1xuICAgICAgICBpZiAobmV3RGF5cy5sZW5ndGggPCBkYXlzQ291bnQpIHtcbiAgICAgICAgICAgIC8vIHdlIG1vdmUgdG8gbmV4dCBtb250aFxuICAgICAgICAgICAgbGV0IGxhc3ROZXdEYXkgPSBuZXdEYXlzW25ld0RheXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAoIWxhc3ROZXdEYXkpIHtcbiAgICAgICAgICAgICAgICBsYXN0TmV3RGF5ID0gbGFzdERheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMubG9hZE1vbnRoKG1vbnRoSW5mby5kYXRlSW5mbywgMSk7XG4gICAgICAgICAgICBjb25zdCBsYXN0RGF5SW5kZXgyID0gbmV4dE1vbnRoLmRheXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgIChjKSA9PiBjLmRheUluTW9udGggPT09IGxhc3ROZXdEYXkuZGF5SW5Nb250aCAmJiBjLm1vbnRoID09PSBsYXN0TmV3RGF5Lm1vbnRoXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbmV3RGF5cyA9IG5ld0RheXMuY29uY2F0KFxuICAgICAgICAgICAgICAgIG5leHRNb250aC5kYXlzLnNsaWNlKGxhc3REYXlJbmRleDIgKyAxLCBsYXN0RGF5SW5kZXgyICsgMSArIChkYXlzQ291bnQgLSBuZXdEYXlzLmxlbmd0aCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdEYXlzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2xvYWRQcmV2TW9udGgoZGF5czogRGF5W10sIG1vbnRoSW5mbzogQ2FsZW5kYXJNb250aEluZm8pOiBBcnJheTxEYXk+IHtcbiAgICAgICAgY29uc3QgZGF5c0NvdW50ID0gZGF5cy5sZW5ndGg7XG4gICAgICAgIGxldCBmaXJzdERheSA9IGRheXNbMF07XG4gICAgICAgIGNvbnN0IGZpcnN0RGF5SW5kZXggPSBtb250aEluZm8uZGF5cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoYykgPT4gYy5kYXlJbk1vbnRoID09PSBmaXJzdERheS5kYXlJbk1vbnRoICYmIGMubW9udGggPT09IGZpcnN0RGF5Lm1vbnRoXG4gICAgICAgICk7XG4gICAgICAgIGxldCBuZXdEYXlzOiBEYXlbXSA9IG1vbnRoSW5mby5kYXlzLnNsaWNlKFxuICAgICAgICAgICAgZmlyc3REYXlJbmRleCAtIGRheXNDb3VudCA+IDAgPyBmaXJzdERheUluZGV4IC0gZGF5c0NvdW50IDogMCxcbiAgICAgICAgICAgIGZpcnN0RGF5SW5kZXhcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG5ld0RheXMubGVuZ3RoIDwgZGF5c0NvdW50KSB7XG4gICAgICAgICAgICAvLyB3ZSBtb3ZlIHRvIHByZXYgbW9udGhcbiAgICAgICAgICAgIGlmIChuZXdEYXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmaXJzdERheSA9IG5ld0RheXNbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZWVkQ291bnREYXkgPSBkYXlzQ291bnQgLSBuZXdEYXlzLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMubG9hZE1vbnRoKG1vbnRoSW5mby5kYXRlSW5mbywgLTEpO1xuICAgICAgICAgICAgbGV0IGVuZFBvc2l0aW9uID0gcHJldk1vbnRoLmRheXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKG5lZWRDb3VudERheSA8IDQyKSB7XG4gICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBwcmV2TW9udGguZGF5cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIChjKSA9PiBjLmRheUluTW9udGggPT09IGZpcnN0RGF5LmRheUluTW9udGggJiYgYy5tb250aCA9PT0gZmlyc3REYXkubW9udGhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChlbmRQb3NpdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBwcmV2TW9udGguZGF5cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJldkRheXMgPSBwcmV2TW9udGguZGF5cy5zbGljZShlbmRQb3NpdGlvbiAtIG5lZWRDb3VudERheSwgZW5kUG9zaXRpb24pO1xuICAgICAgICAgICAgbmV3RGF5cyA9IFsuLi5wcmV2RGF5cywgLi4ubmV3RGF5c107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0RheXM7XG4gICAgfVxuICAgIHByaXZhdGUgX2xvYWRQcmV2V2VlayhkYXlzOiBEYXlbXSwgbW9udGhJbmZvOiBDYWxlbmRhck1vbnRoSW5mbyk6IEFycmF5PERheT4ge1xuICAgICAgICBjb25zdCBkYXlzQ291bnQgPSBkYXlzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZmlyc3REYXkgPSBkYXlzWzBdO1xuICAgICAgICBjb25zdCBmaXJzdERheUluZGV4ID0gbW9udGhJbmZvLmRheXMuZmluZEluZGV4KFxuICAgICAgICAgICAgKGMpID0+IGMuZGF5SW5Nb250aCA9PT0gZmlyc3REYXkuZGF5SW5Nb250aCAmJiBjLm1vbnRoID09PSBmaXJzdERheS5tb250aFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBwYXJ0SW5kZXhQcmV2ID0gZmlyc3REYXlJbmRleCAtIGRheXNDb3VudDtcbiAgICAgICAgbGV0IG5ld0RheXM6IERheVtdID0gW107XG4gICAgICAgIGlmIChwYXJ0SW5kZXhQcmV2IDwgMCkge1xuICAgICAgICAgICAgbmV3RGF5cyA9IGZpcnN0RGF5SW5kZXggLSAxID49IDAgPyBtb250aEluZm8uZGF5cy5zbGljZSgwLCBmaXJzdERheUluZGV4IC0gMSkgOiBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0RheXMgPSBtb250aEluZm8uZGF5cy5zbGljZShmaXJzdERheUluZGV4IC0gZGF5c0NvdW50LCBmaXJzdERheUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3RGF5cy5sZW5ndGggPCBkYXlzQ291bnQpIHtcbiAgICAgICAgICAgIC8vIHdlIG1vdmUgdG8gcHJldiBtb250aFxuICAgICAgICAgICAgbGV0IGZpcnN0TmV3RGF5ID0gbmV3RGF5c1swXTtcbiAgICAgICAgICAgIGlmICghZmlyc3ROZXdEYXkpIHtcbiAgICAgICAgICAgICAgICBmaXJzdE5ld0RheSA9IGZpcnN0RGF5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJldk1vbnRoID0gdGhpcy5sb2FkTW9udGgobW9udGhJbmZvLmRhdGVJbmZvLCAtMSk7XG4gICAgICAgICAgICBjb25zdCBmaXJzdERheUluZGV4MiA9IHByZXZNb250aC5kYXlzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAoYykgPT4gYy5kYXlJbk1vbnRoID09PSBmaXJzdE5ld0RheS5kYXlJbk1vbnRoICYmIGMubW9udGggPT09IGZpcnN0TmV3RGF5Lm1vbnRoXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbmV3RGF5cyA9IG5ld0RheXMuY29uY2F0KFxuICAgICAgICAgICAgICAgIHByZXZNb250aC5kYXlzLnNsaWNlKGZpcnN0RGF5SW5kZXgyIC0gKGRheXNDb3VudCAtIG5ld0RheXMubGVuZ3RoKSwgZmlyc3REYXlJbmRleDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdEYXlzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2FsZW5kYXJNb250aEluZm8oZGF0ZSk6IENhbGVuZGFyTW9udGhJbmZvIHtcbiAgICAgICAgY29uc3Qgc3RhcnRPZk1vbnRoID0gdGhpcy5fZGF0ZVNlcnZpY2Uuc3RhcnRPZk1vbnRoKGRhdGUpO1xuICAgICAgICBjb25zdCBtb21lbnREYXRlID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KGRhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb250aEluZm8oc3RhcnRPZk1vbnRoLCBtb21lbnREYXRlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBnZXRNb250aEluZm8oZGF0ZSwgdG9kYXkpOiBDYWxlbmRhck1vbnRoSW5mbyB7XG4gICAgICAgIGNvbnN0IGRheXM6IERheVtdID0gW107XG4gICAgICAgIGNvbnN0IGFjdGl2ZURhdGUgPSB0aGlzLl9kYXRlU2VydmljZS5nZXRNb21lbnQoZGF0ZSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0T2ZNb250aDogRGF0ZSA9IHRoaXMuX2RhdGVTZXJ2aWNlLnN0YXJ0T2ZNb250aChhY3RpdmVEYXRlKTtcbiAgICAgICAgY29uc3QgZW5kT2ZNb250aDogRGF0ZSA9IHRoaXMuX2RhdGVTZXJ2aWNlLmVuZE9mTW9udGgoYWN0aXZlRGF0ZSk7XG4gICAgICAgIGNvbnN0IGRhdGVJbmZvID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0RGF0ZUluZm8oYWN0aXZlRGF0ZSk7XG4gICAgICAgIGNvbnN0IGRheUluV2VlayA9IHRoaXMuX2RhdGVTZXJ2aWNlLmRheShzdGFydE9mTW9udGgpICsgMTsgLy8gd2UgYWRkIDEgdG8gdGhlIGRheUluV2VlayBiZWNhdXNlIGl0J3Mgc3RhcnRzIHdpdGggemVyb1xuXG4gICAgICAgIGxldCB3ZWVrQ291bnRlciA9IDA7XG4gICAgICAgIGxldCBkYXlDb3VudGVyID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlT2ZTdGFydE9mTW9udGg6IERhdGUgPSBuZXcgRGF0ZShzdGFydE9mTW9udGgpO1xuICAgICAgICAgICAgZGF0ZU9mU3RhcnRPZk1vbnRoLnNldERhdGUoZGF0ZU9mU3RhcnRPZk1vbnRoLmdldERhdGUoKSArIGkgLSBkYXlJbldlZWspO1xuICAgICAgICAgICAgY29uc3QgeyBkYXksIGlzSW5Nb250aCB9OiB7IGRheTogRGF5OyBpc0luTW9udGg6IGFueSB9ID0gdGhpcy5fZ2V0RGF5KFxuICAgICAgICAgICAgICAgIGRhdGVPZlN0YXJ0T2ZNb250aCxcbiAgICAgICAgICAgICAgICBhY3RpdmVEYXRlLFxuICAgICAgICAgICAgICAgIHRvZGF5LFxuICAgICAgICAgICAgICAgIGVuZE9mTW9udGgsXG4gICAgICAgICAgICAgICAgc3RhcnRPZk1vbnRoLFxuICAgICAgICAgICAgICAgIGRhdGVJbmZvLFxuICAgICAgICAgICAgICAgIGlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkYXlzLnB1c2goZGF5KTtcbiAgICAgICAgICAgIGRheUNvdW50ZXIrKztcbiAgICAgICAgICAgIGlmIChpc0luTW9udGggJiYgZGF5Q291bnRlciA+IHdlZWtDb3VudGVyICogNykge1xuICAgICAgICAgICAgICAgIHdlZWtDb3VudGVyKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgZW5kT2ZNb250aEluZGV4ID0gZGF5cy5maW5kSW5kZXgoKGMpID0+IGMuaXNFbmRPZk1vbnRoKTtcbiAgICAgICAgLy8gaWYgKGVuZE9mTW9udGhJbmRleCA+IC0xICYmIGRheXMubGVuZ3RoIC0gZW5kT2ZNb250aEluZGV4ID4gNykge1xuICAgICAgICAvLyAgICAgLy8gZGF5cy5zcGxpY2UoZGF5cy5sZW5ndGggLSA3LCA3KTtcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zdCBjYWxlbmRhckluZm8gPSBuZXcgQ2FsZW5kYXJNb250aEluZm8oKTtcbiAgICAgICAgY2FsZW5kYXJJbmZvLmlkID0gZ2V0VW5pcXVlSWQoMyk7XG4gICAgICAgIGNhbGVuZGFySW5mby5kYXRlSW5mbyA9IGRhdGVJbmZvO1xuICAgICAgICBjYWxlbmRhckluZm8uZGF5cyA9IGRheXM7XG4gICAgICAgIGNhbGVuZGFySW5mby53ZWVrc0NvdW50ID0gd2Vla0NvdW50ZXI7XG4gICAgICAgIC8vIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgcmV0dXJuIGNhbGVuZGFySW5mbztcbiAgICB9XG4gICAgcHJpdmF0ZSBfZ2V0RGF5KFxuICAgICAgICBkYXRlOiBEYXRlLFxuICAgICAgICBhY3RpdmVEYXRlOiBhbnksXG4gICAgICAgIHRvZGF5OiBhbnksXG4gICAgICAgIGVuZE9mTW9udGg6IERhdGUsXG4gICAgICAgIHN0YXJ0T2ZNb250aDogRGF0ZSxcbiAgICAgICAgZGF0ZUluZm86IERhdGVJbmZvLFxuICAgICAgICBpOiBudW1iZXJcbiAgICApOiB7IGRheTogRGF5OyBpc0luTW9udGg6IGJvb2xlYW4gfSB7XG4gICAgICAgIGNvbnN0IGlzSW5Nb250aCA9IHRoaXMuX2RhdGVTZXJ2aWNlLmlzU2FtZShkYXRlLCBhY3RpdmVEYXRlLCAnbW9udGgnKTtcbiAgICAgICAgY29uc3QgbW9tZW50T2ZEYXRlID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KGRhdGUpO1xuICAgICAgICBjb25zdCBpc1RvZGF5ID0gbW9tZW50T2ZEYXRlLmlzU2FtZSh0b2RheSwgJ2RheScpO1xuICAgICAgICBjb25zdCBkYXlJbk1vbnRoID0gdGhpcy5fZGF0ZVNlcnZpY2Uuc3RyRGF0ZShkYXRlKTtcbiAgICAgICAgY29uc3QgZGF5SW5XZWVrID0gdGhpcy5fZGF0ZVNlcnZpY2UuZGF5KGRhdGUpO1xuICAgICAgICBjb25zdCBpc0VuZE9mTW9udGggPSBtb21lbnRPZkRhdGUuaXNTYW1lKGVuZE9mTW9udGgsICdkYXknKTtcbiAgICAgICAgY29uc3QgaXNTdGFydE9mTW9udGggPSBtb21lbnRPZkRhdGUuaXNTYW1lKHN0YXJ0T2ZNb250aCwgJ2RheScpO1xuICAgICAgICBjb25zdCBtb250aERhdGVJbmZvID0gaXNJbk1vbnRoID8gZGF0ZUluZm8gOiB0aGlzLl9kYXRlU2VydmljZS5nZXREYXRlSW5mbyhkYXRlKTtcbiAgICAgICAgY29uc3QgZGF5OiBEYXkgPSB7XG4gICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBkYXlJbldlZWssXG4gICAgICAgICAgICBzdGF0dXM6IERheVN0YXR1cy5PcGVuLFxuICAgICAgICAgICAgZGF5SW5Nb250aCxcbiAgICAgICAgICAgIGRheUluTW9udGhOOiB0aGlzLmdldE51bWJlcihkYXlJbk1vbnRoKSxcbiAgICAgICAgICAgIGlzVG9kYXksXG4gICAgICAgICAgICBpc0luTW9udGgsXG4gICAgICAgICAgICBpc0VuZE9mTW9udGgsXG4gICAgICAgICAgICBpc1N0YXJ0T2ZNb250aCxcbiAgICAgICAgICAgIG1vbWVudE9mRGF0ZSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aERhdGVJbmZvLm1vbnRoLFxuICAgICAgICAgICAgeWVhcjogbW9udGhEYXRlSW5mby55ZWFyLFxuICAgICAgICAgICAgbW9udGhOYW1lOiBtb250aERhdGVJbmZvLm1vbnRoTmFtZSxcbiAgICAgICAgICAgIGRheU5hbWU6IG1vbWVudE9mRGF0ZS5mb3JtYXQoJ2RkZGQnKSxcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIG1vbnRoRGF0ZUluZm8sXG4gICAgICAgICAgICByb3c6IE1hdGguZmxvb3IoaSAvIDcgKyAxKSxcbiAgICAgICAgICAgIGNvbDogNiAtIChpICUgNylcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgZGF5LCBpc0luTW9udGggfTtcbiAgICB9XG59XG4iXX0=
610
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWNhbGVuZGFyL3NyYy9saWIvc2VydmljZXMvY2FsZW5kYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUVILGFBQWEsRUFDYixXQUFXLEVBQ1gsY0FBYyxFQUtqQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQU8sU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7QUFHNUUsTUFBTSxPQUFPLGVBQWdCLFNBQVEsYUFBYTtJQW1COUMsWUFBb0IsV0FBdUIsRUFBc0MsT0FBZ0I7UUFDN0YsS0FBSyxFQUFFLENBQUM7UUFEUSxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQVBuQyxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBc0IsRUFBRSxDQUFDLENBQUM7UUFFaEUsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBZSxPQUFPLENBQUMsQ0FBQztRQUN6RCw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7UUFJakQsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZ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SUFBSTtZQUNKLFNBQVM7WUFDVCxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUk7WUFDdEIsVUFBVTtZQUNWLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUN2QyxPQUFPO1lBQ1AsU0FBUztZQUNULFlBQVk7WUFDWixjQUFjO1lBQ2QsWUFBWTtZQUNaLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSztZQUMxQixJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUk7WUFDeEIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTO1lBQ2xDLE9BQU8sRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNwQyxLQUFLLEVBQUUsRUFBRTtZQUNULGFBQWE7WUFDYixHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQixDQUFDO1FBQ0YsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUM5QixDQUFDOzs0R0F2cUJRLGVBQWUsNENBbUJ5QyxjQUFjO2dIQW5CdEUsZUFBZTsyRkFBZixlQUFlO2tCQUQzQixVQUFVOzswQkFvQnVDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIERhdGVTZXJ2aWNlLFxuICAgIEJhc2VDb21wb25lbnQsXG4gICAgZ2V0VW5pcXVlSWQsXG4gICAgZ2V0RGF0ZVNlcnZpY2UsXG4gICAgTG9nU2VydmljZSxcbiAgICBEYXRlSW5mbyxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIENhbGVuZGFyRmllbGRzXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCB7IENhbGVuZGFyTW9kZSwgQ2FsZW5kYXJNb250aEluZm8sIERheSwgRGF5U3RhdHVzIH0gZnJvbSAnLi4vbW9kZWxzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyU2VydmljZSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAgIHNlbGVjdGVkJDogT2JzZXJ2YWJsZTxDYWxlbmRhck1vbnRoSW5mbz47XG4gICAgZGF5cyQ6IE9ic2VydmFibGU8RGF5W10+O1xuICAgIG1vZGUkOiBPYnNlcnZhYmxlPENhbGVuZGFyTW9kZT47XG4gICAgd2Vla01vZGVEYXlzJDogT2JzZXJ2YWJsZTxEYXlbXT47XG4gICAgY2FsZW5kYXJzJDogT2JzZXJ2YWJsZTxDYWxlbmRhck1vbnRoSW5mb1tdPjtcbiAgICBjdXJyZW50TW9udGhJbmRleCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgICB0b2RheTogRGF0ZTtcbiAgICB0b2RheURheTogRGF5IHwgdW5kZWZpbmVkO1xuICAgIF9kYXRlU2VydmljZTogRGF0ZVNlcnZpY2U7XG5cbiAgICBwcml2YXRlIF90b2RheU1vbnRoSW5mbzogQ2FsZW5kYXJNb250aEluZm87XG4gICAgcHJpdmF0ZSBfY2FsZW5kYXJzU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYWxlbmRhck1vbnRoSW5mb1tdPihbXSk7XG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRTb3VyY2U6IEJlaGF2aW9yU3ViamVjdDxDYWxlbmRhck1vbnRoSW5mbz47XG4gICAgcHJpdmF0ZSBfbW9kZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FsZW5kYXJNb2RlPignbW9udGgnKTtcbiAgICBwcml2YXRlIF9jdXJyZW50TW9udGhJbmRleFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigtMSk7XG4gICAgcHJpdmF0ZSBfd2Vla01vZGVEYXlzU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXlbXT4oW10pO1xuICAgIHByaXZhdGUgX2RheXNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERheVtdPihbXSk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9sb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLCBAT3B0aW9uYWwoKSBASW5qZWN0KCdEYXRlX0N1bHR1cmUnKSBjdWx0dXJlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX2RhdGVTZXJ2aWNlID0gZ2V0RGF0ZVNlcnZpY2UoX2xvZ1NlcnZpY2UsIGN1bHR1cmUpO1xuICAgICAgICB0aGlzLmRheXMkID0gdGhpcy5fZGF5c1NvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5tb2RlJCA9IHRoaXMuX21vZGVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMud2Vla01vZGVEYXlzJCA9IHRoaXMuX3dlZWtNb2RlRGF5c1NvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5jYWxlbmRhcnMkID0gdGhpcy5fY2FsZW5kYXJzU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLmN1cnJlbnRNb250aEluZGV4JCA9IHRoaXMuX2N1cnJlbnRNb250aEluZGV4U291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLl9pbml0aWxpemUoKTtcbiAgICB9XG4gICAgZ2V0IHRvZGF5TW9udGhJbmZvKCk6IENhbGVuZGFyTW9udGhJbmZvIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvZGF5TW9udGhJbmZvO1xuICAgIH1cbiAgICBnZXQgc2VsZWN0ZWRNb250aCgpOiBDYWxlbmRhck1vbnRoSW5mbyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgY2FsZW5kYXJzKCk6IEFycmF5PENhbGVuZGFyTW9udGhJbmZvPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxlbmRhcnNTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IHdlZWtzQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RheXNTb3VyY2UuZ2V0VmFsdWUoKS5sZW5ndGggLyA3O1xuICAgIH1cbiAgICBnZXQgZGF5cygpOiBBcnJheTxEYXk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RheXNTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IE1vbnRocygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlU2VydmljZS5tb250aE5hbWVzKCk7XG4gICAgfVxuXG4gICAgbG9hZE1vbnRoQnlEYXRlKHZhbHVlOiBEYXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vbnRoSW5mbyA9IHRoaXMuX2RhdGVTZXJ2aWNlLmdldERhdGVJbmZvKHZhbHVlKTtcbiAgICAgICAgdGhpcy5sb2FkTW9udGgobW9udGhJbmZvKTtcbiAgICB9XG4gICAgc2V0RGF0ZVNlcnZpY2UocHJpbWFyeUNhbGVuZGFyVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGxldCBkYXRlU2VydmljZSA9IHRoaXMuX2RhdGVTZXJ2aWNlO1xuICAgICAgICBzd2l0Y2ggKHByaW1hcnlDYWxlbmRhclR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ1BlcnNpYW4nOlxuICAgICAgICAgICAgICAgIGRhdGVTZXJ2aWNlID0gZ2V0RGF0ZVNlcnZpY2UodGhpcy5fbG9nU2VydmljZSwgJ2ZhLUlSJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdHcmVnb3JpYW4nOlxuICAgICAgICAgICAgICAgIGRhdGVTZXJ2aWNlID0gZ2V0RGF0ZVNlcnZpY2UodGhpcy5fbG9nU2VydmljZSwgJ2VuLVVTJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdBcmFiaWMnOlxuICAgICAgICAgICAgICAgIGRhdGVTZXJ2aWNlID0gZ2V0RGF0ZVNlcnZpY2UodGhpcy5fbG9nU2VydmljZSwgJ2FyLUFFJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0ZVNlcnZpY2UgPSBkYXRlU2VydmljZTtcbiAgICAgICAgdGhpcy5faW5pdGlsaXplKCk7XG4gICAgfVxuICAgIHNldERheXMoZGF5czogRGF5W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF5c1NvdXJjZS5uZXh0KGRheXMpO1xuICAgIH1cblxuICAgIHByZXBhcmVXZWVrKG1vbnRoSW5mbzogQ2FsZW5kYXJNb250aEluZm8sIHN0YXJ0SW5kZXg6IG51bWJlciwgZGF5c0NvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXlzID0gbW9udGhJbmZvLmRheXMuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIGRheXNDb3VudCk7XG4gICAgICAgIHRoaXMuX3dlZWtNb2RlRGF5c1NvdXJjZS5uZXh0KHN0YXJ0RGF5cyk7XG4gICAgfVxuICAgIHNldFNlbGVjdGVkKHNlbGVjdGVkOiBDYWxlbmRhck1vbnRoSW5mbyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZFNvdXJjZS5uZXh0KHNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICB3ZWVrRGF5c01pbigpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVTZXJ2aWNlLndlZWtkYXlzTWluKCk7XG4gICAgfVxuICAgIHdlZWtEYXlzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVNlcnZpY2Uud2Vla0RheXMoKTtcbiAgICB9XG4gICAgZ290b1RvZGF5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvYWRNb250aCh0aGlzLl90b2RheU1vbnRoSW5mby5kYXRlSW5mbywgMCk7XG4gICAgICAgIHRoaXMuc2V0TW9kZShcbiAgICAgICAgICAgIHRoaXMuX21vZGVTb3VyY2UuZ2V0VmFsdWUoKSxcbiAgICAgICAgICAgIHRoaXMuX3RvZGF5TW9udGhJbmZvLmRheXMuZmluZCgoYykgPT4gYy5pc1RvZGF5KSxcbiAgICAgICAgICAgIHRoaXMuX3dlZWtNb2RlRGF5c1NvdXJjZS5nZXRWYWx1ZSgpLmxlbmd0aFxuICAgICAgICApO1xuICAgIH1cbiAgICByYW5nZVNlbGVjdChzdGFydERheTogRGF5LCBlbmREYXk6IERheSwgbW9udGhJbmZvOiBDYWxlbmRhck1vbnRoSW5mbyk6IHZvaWQge1xuICAgICAgICBjb25zdCBkaWZmID0gZW5kRGF5LmluZGV4IC0gc3RhcnREYXkuaW5kZXg7XG4gICAgICAgIGlmIChkaWZmIDwgNykge1xuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCd3ZWVrJywgc3RhcnREYXksIGRpZmYgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYyID0gZGlmZiArIDE7XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ2N1c3RvbU1vbnRoJyk7XG4gICAgICAgICAgICB0aGlzLnNldE1vbnRoKG1vbnRoSW5mbywgc3RhcnREYXksIGRpZmYyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRNb250aChtb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvLCBzdGFydERheT86IERheSwgZGlmZjogbnVtYmVyID0gMCk6IHZvaWQge1xuICAgICAgICBpZiAoc3RhcnREYXkgJiYgZGlmZiA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBzdGFydERheS5pbmRleDtcbiAgICAgICAgICAgIHRoaXMubG9hZENhbGVuZGFyTW9udGhJbmZvKG1vbnRoSW5mbyk7XG4gICAgICAgICAgICB0aGlzLnNldERheXMobW9udGhJbmZvLmRheXMuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIGRpZmYpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9hZENhbGVuZGFyTW9udGhJbmZvKG1vbnRoSW5mbyk7XG4gICAgICAgICAgICB0aGlzLnNldERheXMobW9udGhJbmZvLmRheXMpO1xuICAgICAgICAgICAgLy8gZWxzZSBpZiAobW9kZSA9PT0gJ21vbnRoJykge1xuICAgICAgICAgICAgLy8gICBzdGFydERheSA9IGRheXNMb2FkZWRbMF07XG4gICAgICAgICAgICAvLyBpZiAoc3RhcnREYXkpIHRoaXMubG9hZE1vbnRoKHN0YXJ0RGF5Lm1vbnRoRGF0ZUluZm8pO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgfVxuICAgIHNldE1vZGUobW9kZTogQ2FsZW5kYXJNb2RlLCBzdGFydERheT86IERheSwgZGF5c0NvdW50PzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZE1vZGUgPSB0aGlzLl9tb2RlU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIHRoaXMuX21vZGVTb3VyY2UubmV4dChtb2RlKTtcbiAgICAgICAgaWYgKG1vZGUgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TW9udGgodGhpcy5zZWxlY3RlZE1vbnRoLCBzdGFydERheSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2N1c3RvbU1vbnRoJykge1xuICAgICAgICAgICAgdGhpcy5zZXRNb250aCh0aGlzLnNlbGVjdGVkTW9udGgsIHN0YXJ0RGF5LCB0aGlzLmRheXMubGVuZ3RoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXlzTG9hZGVkID0gdGhpcy5fd2Vla01vZGVEYXlzU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIGRheXNDb3VudCA9IGRheXNDb3VudCA/PyAobW9kZSA9PT0gJ3dlZWsnID8gNyA6IDEpO1xuICAgICAgICBsZXQgc3RhcnRJbmRleCA9IDA7XG4gICAgICAgIGlmICghc3RhcnREYXkpIHtcbiAgICAgICAgICAgIGlmIChtb2RlID09PSAnd2VlaycgfHwgbW9kZSA9PT0gJ2RheScpIHtcbiAgICAgICAgICAgICAgICBpZiAob2xkTW9kZSA9PT0gJ21vbnRoJykge1xuICAgICAgICAgICAgICAgICAgICBzdGFydERheSA9IHRoaXMuc2VsZWN0ZWRNb250aC5kYXlzLmZpbmQoKGMpID0+IGMuaXNTdGFydE9mTW9udGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2xkTW9kZSA9PT0gJ2N1c3RvbU1vbnRoJykge1xuICAgICAgICAgICAgICAgICAgICBzdGFydERheSA9IHRoaXMuZGF5c1swXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGFydERheSA9IGRheXNMb2FkZWRbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXJ0RGF5KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RhcnREYXkubW9udGhEYXRlSW5mby5tb250aCAhPT0gdGhpcy5zZWxlY3RlZE1vbnRoLmRhdGVJbmZvLm1vbnRoIHx8XG4gICAgICAgICAgICAgICAgc3RhcnREYXkubW9udGhEYXRlSW5mby55ZWFyICE9PSB0aGlzLnNlbGVjdGVkTW9udGguZGF0ZUluZm8ueWVhclxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTW9udGgoc3RhcnREYXkubW9udGhEYXRlSW5mbyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gdGhpcy5zZWxlY3RlZE1vbnRoLmRheXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgIChjKSA9PiBjLm1vbnRoID09PSBzdGFydERheT8ubW9udGggJiYgYy5kYXlJbk1vbnRoID09PSBzdGFydERheS5kYXlJbk1vbnRoXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlcGFyZVdlZWsodGhpcy5fc2VsZWN0ZWRTb3VyY2UuZ2V0VmFsdWUoKSwgc3RhcnRJbmRleCwgZGF5c0NvdW50KTtcbiAgICB9XG5cbiAgICBmaWxsV2Vlayh3ZWVrOiB7IFtrZXk6IHN0cmluZ106IGFueVtdIH0sIGRheXNDb3VudCA9IDcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXJyOiBhbnlbXSA9IE9iamVjdC52YWx1ZXMod2Vlayk7XG4gICAgICAgIGFyci5mb3JFYWNoKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBldmVudD86IE1ldGFvYmplY3REYXRhTW9kZWw7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0PzogRGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgZW5kPzogRGF0ZTtcbiAgICAgICAgICAgICAgICB9W11cbiAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZURhdGUgPSBlbC5lbmQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZURhdGUgJiYgdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KHZhbHVlRGF0ZSkuaXNCZWZvcmUodGhpcy50b2RheSwgJ2RheScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbC5vcGFjaXR5ID0gMC41O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBlbGVtZW50Lmxlbmd0aDsgaSA8IGRheXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucHVzaCh7IGNvbFNwYW46IDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgICBzb3J0VGFza3MoY2FsZW5kYXJUYXNrczogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBjYWxlbmRhckZpZWxkczogQ2FsZW5kYXJGaWVsZHMpOiBBcnJheTxNZXRhb2JqZWN0RGF0YU1vZGVsPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZUZpZWxkID0gY2FsZW5kYXJGaWVsZHMuU3RhcnREYXRlO1xuICAgICAgICBjb25zdCBlbmREYXRlRmllbGQgPSBjYWxlbmRhckZpZWxkcy5FbmREYXRlO1xuICAgICAgICBjYWxlbmRhclRhc2tzLnNvcnQoKHRhc2tBLCB0YXNrQikgPT4gKHRhc2tBW3N0YXJ0RGF0ZUZpZWxkXSA8IHRhc2tCW3N0YXJ0RGF0ZUZpZWxkXSA/IC0xIDogMSkpO1xuICAgICAgICBjYWxlbmRhclRhc2tzLnNvcnQoKHRhc2tBLCB0YXNrQikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFza0FTdGFydERhdGUgPSB0YXNrQVtzdGFydERhdGVGaWVsZF07XG4gICAgICAgICAgICBjb25zdCB0YXNrQlN0YXJ0RGF0ZSA9IHRhc2tCW3N0YXJ0RGF0ZUZpZWxkXTtcblxuICAgICAgICAgICAgY29uc3QgbW9tZW50VGFza0FTdGFydERhdGUgPSB0aGlzLl9kYXRlU2VydmljZS5nZXRNb21lbnQodGFza0FTdGFydERhdGUpO1xuICAgICAgICAgICAgY29uc3QgbW9tZW50VGFza0JTdGFydERhdGUgPSB0aGlzLl9kYXRlU2VydmljZS5nZXRNb21lbnQodGFza0JTdGFydERhdGUpO1xuICAgICAgICAgICAgaWYgKG1vbWVudFRhc2tBU3RhcnREYXRlLmlzU2FtZShtb21lbnRUYXNrQlN0YXJ0RGF0ZSwgJ2RheScpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFza0FFbmREYXRlID0gdGFza0FbZW5kRGF0ZUZpZWxkXTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXNrQkVuZERhdGUgPSB0YXNrQltlbmREYXRlRmllbGRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRheUFEaWZmID0gbW9tZW50VGFza0FTdGFydERhdGUuZGlmZih0YXNrQUVuZERhdGUsICdkYXknKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXlCRGlmZiA9IG1vbWVudFRhc2tCU3RhcnREYXRlLmRpZmYodGFza0JFbmREYXRlLCAnZGF5Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGRheUFEaWZmID4gZGF5QkRpZmYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkYXlBRGlmZiA8IGRheUJEaWZmKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2FsZW5kYXJUYXNrcztcbiAgICB9XG4gICAgY3JlYXRlV2Vla1Rhc2soXG4gICAgICAgIGRheXM6IERheVtdLFxuICAgICAgICBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXG4gICAgICAgIGNhbGVuZGFyRmllbGRzOiBDYWxlbmRhckZpZWxkcyxcbiAgICAgICAgdGFza0hlaWdodDogbnVtYmVyXG4gICAgKTogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9IHtcbiAgICAgICAgY29uc3Qgd2VlazogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9ID0ge307XG4gICAgICAgIGRheXMuZm9yRWFjaCgoZGF5LCBkYXlJbmRleCkgPT4ge1xuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgbW9EYXRhTGlzdC5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ZXJJbmRleCA9IGNvdW50ZXIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXdlZWtbY291bnRlckluZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrW2NvdW50ZXJJbmRleF0gPSBbXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdlZWtbY291bnRlckluZGV4XS5sZW5ndGggPiBkYXlJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9IHdlZWtbY291bnRlckluZGV4XS5sZW5ndGg7IG0gPCBkYXlJbmRleDsgbSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtbY291bnRlckluZGV4XS5wdXNoKHsgY29sU3BhbjogMSB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBhZ2FyIHdlZWtbY291bnRlcl0gY29sc3BhbiBqYSBkYXNodCBhbmphbSBnYXJkYWQuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VGFzazogYW55ID0geyBjb2xTcGFuOiAxIH07XG4gICAgICAgICAgICAgICAgY29uc3QgbW9tZW50RGF5ID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KGRheS5kYXRlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb21lbnRPZlN0YXJ0RXZlbnQgPSB0aGlzLl9kYXRlU2VydmljZS5nZXRNb21lbnQoZXZlbnRbY2FsZW5kYXJGaWVsZHMuU3RhcnREYXRlXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IGV2ZW50W2NhbGVuZGFyRmllbGRzLkVuZERhdGVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vbWVudE9mRW5kRXZlbnQgPSB0aGlzLl9kYXRlU2VydmljZS5nZXRNb21lbnQoZW5kRGF0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKG1vbWVudE9mU3RhcnRFdmVudC5kaWZmKG1vbWVudE9mRW5kRXZlbnQsICdkYXknKSk7XG4gICAgICAgICAgICAgICAgaWYgKGRpZmYgPT09IDAgJiYgbW9tZW50RGF5LmlzU2FtZShtb21lbnRPZlN0YXJ0RXZlbnQsICdkYXknKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmNvbFNwYW4gPSAxO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydE1pbnV0ZVRvcCA9IChldmVudC4kU3RhcnREYXRlSW5mby5taW51dGVzICogdGFza0hlaWdodCkgLyA2MDtcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFzay50b3AgPSBldmVudC4kU3RhcnREYXRlSW5mby5ob3VyICogdGFza0hlaWdodCArIHN0YXJ0TWludXRlVG9wO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRNaW51dGVUb3AgPSAoZXZlbnQuJEVuZERhdGVJbmZvLm1pbnV0ZXMgKiB0YXNrSGVpZ2h0KSAvIDYwO1xuICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmhlaWdodCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAoZXZlbnQuJEVuZERhdGVJbmZvLmhvdXIgLSBldmVudC4kU3RhcnREYXRlSW5mby5ob3VyKSAqIHRhc2tIZWlnaHQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kTWludXRlVG9wIC1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TWludXRlVG9wO1xuICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suZW5kZGF5SXNJblJvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suc3RhcnRkYXlJc0luUm93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5pc1N0YXJ0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5pc0VuZERheSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suc3RhcnQgPSBuZXdUYXNrLmVuZCA9IGRheS5kYXRlO1xuICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmluRGF5ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LiRTdGFydERhdGVJbmZvLmhvdXIgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC4kU3RhcnREYXRlSW5mby5taW51dGVzID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuJEVuZERhdGVJbmZvLmhvdXIgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC4kRW5kRGF0ZUluZm8ubWludXRlcyA+IDA7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtbY291bnRlckluZGV4XS5zcGxpY2UoZGF5SW5kZXgsIDAsIG5ld1Rhc2spO1xuICAgICAgICAgICAgICAgICAgICBkYXkudGFza3MucHVzaChuZXdUYXNrKTtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkaWZmRnJvbUVuZE9mRXZlbnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGlmZkZyb21TdGFydE9mRXZlbnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0JldHdlZW4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50RGF5LmlzU2FtZU9yQWZ0ZXIobW9tZW50T2ZTdGFydEV2ZW50LCAnZGF5JykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudERheS5pc1NhbWVPckJlZm9yZShtb21lbnRPZkVuZEV2ZW50LCAnZGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0JldHdlZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZGcm9tRW5kT2ZFdmVudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlmZiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suY29sU3BhbiA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5ldmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmRnJvbUVuZE9mRXZlbnQgPSBNYXRoLmFicyhtb21lbnREYXkuZGlmZihtb21lbnRPZkVuZEV2ZW50LCAnZGF5JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZGcm9tU3RhcnRPZkV2ZW50ID0gTWF0aC5hYnMobW9tZW50RGF5LmRpZmYobW9tZW50T2ZTdGFydEV2ZW50LCAnZGF5JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU3RhcnREYXkgPSBtb21lbnREYXkuaXNTYW1lKG1vbWVudE9mU3RhcnRFdmVudCwgJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRW5kRGF5ID0gbW9tZW50RGF5LmlzU2FtZShtb21lbnRPZkVuZEV2ZW50LCAnZGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFNwYW4gPSBkaWZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTdGFydERheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xTcGFuID0gZGlmZkZyb21FbmRPZkV2ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gPSBkaWZmICsgMTsgLy8gaW5jbHVkZSB0aGUgc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5jb2xTcGFuID0gdGhpcy5fY2FsY0NvbFNwYW4oY29sU3BhbiwgZGF5SW5kZXgsIGRheXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmlzU3RhcnREYXkgPSBpc1N0YXJ0RGF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suaXNFbmREYXkgPSBpc0VuZERheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmlzTWlkZGxlID0gIWlzU3RhcnREYXkgJiYgIWlzRW5kRGF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suZXZlbnQgPSBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdUYXNrLmlzU3RhcnREYXkgfHwgZGF5SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzcGFuID0gMDsgc3BhbiA8IG5ld1Rhc2suY29sU3Bhbjsgc3BhbisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tJbmRleCA9IGRheUluZGV4ICsgc3BhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2tJbmRleCA+IGRheXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFza0RheUluZm8gPSBkYXlzW3Rhc2tJbmRleF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFza0luZm8gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5uZXdUYXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRhc2tEYXlJbmZvLmRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGVuZERhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N0YXJ0RGF5OiBzcGFuID09PSAwID8gbmV3VGFzay5pc1N0YXJ0RGF5IDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0VGFzazogZXZlbnQuJFN0YXJ0RGF5SW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFRhc2s6IGV2ZW50LiRFbmREYXlJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRkYXlJc0luUm93OiBkYXlJbmRleCAtIGRpZmZGcm9tU3RhcnRPZkV2ZW50ID4gLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRkYXlJc0luUm93OiAhIWRheXNbZGlmZkZyb21FbmRPZkV2ZW50XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWlkZGxlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4gPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXdUYXNrLmlzTWlkZGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZGF0ZVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldE1vbWVudCh0YXNrRGF5SW5mby5kYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaXNCZXR3ZWVuKG1vbWVudE9mU3RhcnRFdmVudCwgbW9tZW50T2ZFbmRFdmVudCwgJ2RheScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFbmREYXk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbiA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5ld1Rhc2suaXNFbmREYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNYXRoLmFicyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRNb21lbnQodGFza0RheUluZm8uZGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kaWZmKG1vbWVudE9mRW5kRXZlbnQsICdkYXknKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPD0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IHNwYW4gPT09IDAgPyBuZXdUYXNrLmNvbFNwYW4gOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtbY291bnRlci50b1N0cmluZygpXS5zcGxpY2UodGFza0luZGV4LCAwLCB0YXNrSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tEYXlJbmZvLnRhc2tzLnB1c2godGFza0luZm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB3ZWVrO1xuICAgIH1cblxuICAgIGxvYWROZXh0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb2RlID0gdGhpcy5fbW9kZVNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZE1vbnRoID0gdGhpcy5fc2VsZWN0ZWRTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdjdXN0b21Nb250aCc6XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXlzID0gdGhpcy5kYXlzO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdEYXlzID0gdGhpcy5fbG9hZE5leHRNb250aChkYXlzLCBzZWxlY3RlZE1vbnRoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXlzKG5ld0RheXMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5cyA9IHRoaXMuX3dlZWtNb2RlRGF5c1NvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdEYXlzID0gdGhpcy5fbG9hZE5leHRXZWVrKGRheXMsIHNlbGVjdGVkTW9udGgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl93ZWVrTW9kZURheXNTb3VyY2UubmV4dChuZXdEYXlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBnb3RvTW9udGgobW9udGhOYW1lOiBzdHJpbmcsIG1vbnRoSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZE1vbnRoID0gdGhpcy5zZWxlY3RlZE1vbnRoLmRhdGVJbmZvLm1vbnRoO1xuICAgICAgICBjb25zdCB2YWwgPSBtb250aEluZGV4IC0gc2VsZWN0ZWRNb250aDtcbiAgICAgICAgdGhpcy5sb2FkTW9udGgodGhpcy5zZWxlY3RlZE1vbnRoLmRhdGVJbmZvLCB2YWwpO1xuICAgIH1cbiAgICBnb3RvWWVhcih5ZWFyOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyID0gdGhpcy5zZWxlY3RlZE1vbnRoLmRhdGVJbmZvLnllYXI7XG4gICAgICAgIGNvbnN0IHZhbCA9IHllYXIgLSBzZWxlY3RlZFllYXI7XG4gICAgICAgIHRoaXMuaW5jcmVhc2VZZWFyKHZhbCk7XG4gICAgfVxuICAgIGxvYWROZXh0WWVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbmNyZWFzZVllYXIoMSk7XG4gICAgfVxuICAgIGxvYWRQcmV2WWVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbmNyZWFzZVllYXIoLTEpO1xuICAgIH1cbiAgICBpbmNyZWFzZVllYXIodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFllYXIgPSB0aGlzLnNlbGVjdGVkTW9udGguZGF0ZUluZm8ubW9tZW50LnRvRGF0ZSgpO1xuICAgICAgICBzZWxlY3RlZFllYXIuc2V0RnVsbFllYXIoc2VsZWN0ZWRZZWFyLmdldEZ1bGxZZWFyKCkgKyB2YWx1ZSk7IC8vIG5leHQgeWVhclxuICAgICAgICB0aGlzLmxvYWRNb250aEJ5RGF0ZShzZWxlY3RlZFllYXIpO1xuICAgIH1cbiAgICBsb2FkUHJldmlvdXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLl9tb2RlU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSB0aGlzLl9zZWxlY3RlZFNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2N1c3RvbU1vbnRoJzpcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheXMgPSB0aGlzLmRheXM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RheXMgPSB0aGlzLl9sb2FkUHJldk1vbnRoKGRheXMsIHNlbGVjdGVkTW9udGgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERheXMobmV3RGF5cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5cyA9IHRoaXMuX3dlZWtNb2RlRGF5c1NvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdEYXlzID0gdGhpcy5fbG9hZFByZXZXZWVrKGRheXMsIHNlbGVjdGVkTW9udGgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl93ZWVrTW9kZURheXNTb3VyY2UubmV4dChuZXdEYXlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBsb2FkTW9udGgoZGF0ZUluZm86IERhdGVJbmZvLCBhZGRNb250aDogbnVtYmVyID0gMCk6IENhbGVuZGFyTW9udGhJbmZvIHtcbiAgICAgICAgbGV0IGxvYWRlZE1vbnRoRGF0ZSA9IHRoaXMuX2RhdGVTZXJ2aWNlLmdldE1vbWVudChkYXRlSW5mby5kYXRlKTtcbiAgICAgICAgaWYgKGFkZE1vbnRoID4gMCkge1xuICAgICAgICAgICAgbG9hZGVkTW9udGhEYXRlID0gdGhpcy5fZGF0ZVNlcnZpY2UuYWRkTW9udGgobG9hZGVkTW9udGhEYXRlLCBhZGRNb250aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFkZE1vbnRoIDwgMCkge1xuICAgICAgICAgICAgbG9hZGVkTW9udGhEYXRlID0gdGhpcy5fZGF0ZVNlcnZpY2Uuc3VidHJhY3RNb250aChsb2FkZWRNb250aERhdGUsIE1hdGguYWJzKGFkZE1vbnRoKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxvYWRlZENhbGVuZGFyTW9udGhJbmZvID0gdGhpcy5jYWxlbmRhcnMuZmluZCgoYykgPT4gYy5kYXRlSW5mby5tb21lbnQuaXNTYW1lKGxvYWRlZE1vbnRoRGF0ZSwgJ2RheScpKTtcbiAgICAgICAgaWYgKCFsb2FkZWRDYWxlbmRhck1vbnRoSW5mbykge1xuICAgICAgICAgICAgbG9hZGVkQ2FsZW5kYXJNb250aEluZm8gPSB0aGlzLmdldE1vbnRoSW5mbyhsb2FkZWRNb250aERhdGUsIHRoaXMudG9kYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZENhbGVuZGFyTW9udGhJbmZvKGxvYWRlZENhbGVuZGFyTW9udGhJbmZvKTtcbiAgICAgICAgcmV0dXJuIGxvYWRlZENhbGVuZGFyTW9udGhJbmZvO1xuICAgIH1cblxuICAgIGxvYWRDYWxlbmRhck1vbnRoSW5mbyhsb2FkZWRDYWxlbmRhck1vbnRoSW5mbzogQ2FsZW5kYXJNb250aEluZm8pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2FsZW5kYXJzSW5mbyA9IFsuLi50aGlzLmNhbGVuZGFyc107XG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IGNhbGVuZGFyc0luZm8uZmluZChcbiAgICAgICAgICAgIChjKSA9PlxuICAgICAgICAgICAgICAgIGMuZGF0ZUluZm8ueWVhciA9PT0gbG9hZGVkQ2FsZW5kYXJNb250aEluZm8uZGF0ZUluZm8ueWVhciAmJlxuICAgICAgICAgICAgICAgIGMuZGF0ZUluZm8ubW9udGggPT09IGxvYWRlZENhbGVuZGFyTW9udGhJbmZvLmRhdGVJbmZvLm1vbnRoXG4gICAgICAgICk7XG4gICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICBjYWxlbmRhcnNJbmZvLnB1c2gobG9hZGVkQ2FsZW5kYXJNb250aEluZm8pO1xuICAgICAgICAgICAgdGhpcy5fY2FsZW5kYXJzU291cmNlLm5leHQoY2FsZW5kYXJzSW5mbyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZChsb2FkZWRDYWxlbmRhck1vbnRoSW5mbyk7XG4gICAgfVxuXG4gICAgYWRkQ2FsZW5kYXJNb250aEluZm8oY2FsZW5kYXJNb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld0xpc3QgPSB0aGlzLmNhbGVuZGFycztcbiAgICAgICAgbmV3TGlzdC5wdXNoKGNhbGVuZGFyTW9udGhJbmZvKTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJzU291cmNlLm5leHQobmV3TGlzdCk7XG4gICAgfVxuXG4gICAgZ2V0TnVtYmVyKHZhbHVlKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZmluZCA9IFsn27AnLCAn27EnLCAn27InLCAn27MnLCAn27QnLCAn27UnLCAn27YnLCAn27cnLCAn27gnLCAn27knXTtcbiAgICAgICAgY29uc3QgcmVwbGFjZSA9IFsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOSddO1xuICAgICAgICBsZXQgcmVwbGFjZVN0cmluZyA9IHZhbHVlO1xuICAgICAgICBsZXQgcmVnZXg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmluZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGZpbmRbaV0sICdnJyk7XG4gICAgICAgICAgICByZXBsYWNlU3RyaW5nID0gcmVwbGFjZVN0cmluZy5yZXBsYWNlKHJlZ2V4LCByZXBsYWNlW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTnVtYmVyKHJlcGxhY2VTdHJpbmcpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbml0aWxpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9kYXkgPSB0aGlzLl9kYXRlU2VydmljZS5nZXRNb21lbnQobmV3IERhdGUoKSk7XG4gICAgICAgIGNvbnN0IHRvZGF5TW9udGhJbmZvID0gdGhpcy5nZXRDYWxlbmRhck1vbnRoSW5mbyhuZXcgRGF0ZSgpKTtcbiAgICAgICAgdGhpcy50b2RheURheSA9IHRvZGF5TW9udGhJbmZvLmRheXMuZmluZCgoYykgPT4gYy5pc1RvZGF5KTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhbGVuZGFyTW9udGhJbmZvPih0b2RheU1vbnRoSW5mbyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQkID0gdGhpcy5fc2VsZWN0ZWRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyc1NvdXJjZS5uZXh0KFt0b2RheU1vbnRoSW5mb10pO1xuICAgICAgICB0aGlzLnNldERheXModG9kYXlNb250aEluZm8uZGF5cyk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQodG9kYXlNb250aEluZm8pO1xuICAgICAgICB0aGlzLl9jdXJyZW50TW9udGhJbmRleFNvdXJjZS5uZXh0KHRvZGF5TW9udGhJbmZvLmRhdGVJbmZvLm1vbnRoKTtcbiAgICAgICAgdGhpcy5fdG9kYXlNb250aEluZm8gPSB0b2RheU1vbnRoSW5mbztcbiAgICAgICAgdGhpcy5jYWxlbmRhcnMkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY2FsY0NvbFNwYW4oZGlmZjogbnVtYmVyLCBkYXlJbmRleDogbnVtYmVyLCBtYXhDb2xTcGFuOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAoZGlmZiA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIDI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguZmxvb3IoZGlmZiAvIG1heENvbFNwYW4pID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG1heENvbFNwYW47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF5SW5kZXggKyBkaWZmID4gbWF4Q29sU3Bhbikge1xuICAgICAgICAgICAgcmV0dXJuIG1heENvbFNwYW4gLSBkYXlJbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlmZjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9sb2FkTmV4dE1vbnRoKGRheXM6IERheVtdLCBtb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvKTogQXJyYXk8RGF5PiB7XG4gICAgICAgIGNvbnN0IGRheXNDb3VudCA9IGRheXMubGVuZ3RoO1xuICAgICAgICBsZXQgbGFzdERheSA9IGRheXNbZGF5c0NvdW50IC0gMV07XG4gICAgICAgIGNvbnN0IGxhc3REYXlJbmRleCA9IG1vbnRoSW5mby5kYXlzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChjKSA9PiBjLmRheUluTW9udGggPT09IGxhc3REYXkuZGF5SW5Nb250aCAmJiBjLm1vbnRoID09PSBsYXN0RGF5Lm1vbnRoXG4gICAgICAgICk7XG4gICAgICAgIGxldCBuZXdEYXlzID0gbGFzdERheUluZGV4ID4gLTEgPyBtb250aEluZm8uZGF5cy5zbGljZShsYXN0RGF5SW5kZXggKyAxLCBsYXN0RGF5SW5kZXggKyAxICsgZGF5c0NvdW50KSA6IFtdO1xuICAgICAgICBpZiAobmV3RGF5cy5sZW5ndGggPCBkYXlzQ291bnQpIHtcbiAgICAgICAgICAgIC8vIHdlIG1vdmUgdG8gbmV4dCBtb250aFxuICAgICAgICAgICAgaWYgKG5ld0RheXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxhc3REYXkgPSBuZXdEYXlzW25ld0RheXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZWVkQ291bnREYXkgPSBkYXlzQ291bnQgLSBuZXdEYXlzLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMubG9hZE1vbnRoKG1vbnRoSW5mby5kYXRlSW5mbywgMSk7XG4gICAgICAgICAgICBsZXQgc3RhcnRQb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICBpZiAobmVlZENvdW50RGF5IDwgNDIpIHtcbiAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbmV4dE1vbnRoLmRheXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAoYykgPT4gYy5kYXlJbk1vbnRoID09PSBsYXN0RGF5LmRheUluTW9udGggJiYgYy5tb250aCA9PT0gbGFzdERheS5tb250aFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24rKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXh0RGF5cyA9IG5leHRNb250aC5kYXlzLnNsaWNlKHN0YXJ0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24gKyBuZWVkQ291bnREYXkpO1xuICAgICAgICAgICAgbmV3RGF5cyA9IFsuLi5uZXdEYXlzLCAuLi5uZXh0RGF5c107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0RheXM7XG4gICAgfVxuICAgIHByaXZhdGUgX2xvYWROZXh0V2VlayhkYXlzOiBEYXlbXSwgbW9udGhJbmZvOiBDYWxlbmRhck1vbnRoSW5mbyk6IEFycmF5PERheT4ge1xuICAgICAgICBjb25zdCBkYXlzQ291bnQgPSBkYXlzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbGFzdERheSA9IGRheXNbZGF5c0NvdW50IC0gMV07XG4gICAgICAgIGNvbnN0IGxhc3REYXlJbmRleCA9IG1vbnRoSW5mby5kYXlzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChjKSA9PiBjLmRheUluTW9udGggPT09IGxhc3REYXkuZGF5SW5Nb250aCAmJiBjLm1vbnRoID09PSBsYXN0RGF5Lm1vbnRoXG4gICAgICAgICk7XG4gICAgICAgIGxldCBuZXdEYXlzID0gbW9udGhJbmZvLmRheXMuc2xpY2UobGFzdERheUluZGV4ICsgMSwgbGFzdERheUluZGV4ICsgMSArIGRheXNDb3VudCk7XG4gICAgICAgIGlmIChuZXdEYXlzLmxlbmd0aCA8IGRheXNDb3VudCkge1xuICAgICAgICAgICAgLy8gd2UgbW92ZSB0byBuZXh0IG1vbnRoXG4gICAgICAgICAgICBsZXQgbGFzdE5ld0RheSA9IG5ld0RheXNbbmV3RGF5cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICghbGFzdE5ld0RheSkge1xuICAgICAgICAgICAgICAgIGxhc3ROZXdEYXkgPSBsYXN0RGF5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5sb2FkTW9udGgobW9udGhJbmZvLmRhdGVJbmZvLCAxKTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3REYXlJbmRleDIgPSBuZXh0TW9udGguZGF5cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgKGMpID0+IGMuZGF5SW5Nb250aCA9PT0gbGFzdE5ld0RheS5kYXlJbk1vbnRoICYmIGMubW9udGggPT09IGxhc3ROZXdEYXkubW9udGhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBuZXdEYXlzID0gbmV3RGF5cy5jb25jYXQoXG4gICAgICAgICAgICAgICAgbmV4dE1vbnRoLmRheXMuc2xpY2UobGFzdERheUluZGV4MiArIDEsIGxhc3REYXlJbmRleDIgKyAxICsgKGRheXNDb3VudCAtIG5ld0RheXMubGVuZ3RoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0RheXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbG9hZFByZXZNb250aChkYXlzOiBEYXlbXSwgbW9udGhJbmZvOiBDYWxlbmRhck1vbnRoSW5mbyk6IEFycmF5PERheT4ge1xuICAgICAgICBjb25zdCBkYXlzQ291bnQgPSBkYXlzLmxlbmd0aDtcbiAgICAgICAgbGV0IGZpcnN0RGF5ID0gZGF5c1swXTtcbiAgICAgICAgY29uc3QgZmlyc3REYXlJbmRleCA9IG1vbnRoSW5mby5kYXlzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChjKSA9PiBjLmRheUluTW9udGggPT09IGZpcnN0RGF5LmRheUluTW9udGggJiYgYy5tb250aCA9PT0gZmlyc3REYXkubW9udGhcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IG5ld0RheXM6IERheVtdID0gbW9udGhJbmZvLmRheXMuc2xpY2UoXG4gICAgICAgICAgICBmaXJzdERheUluZGV4IC0gZGF5c0NvdW50ID4gMCA/IGZpcnN0RGF5SW5kZXggLSBkYXlzQ291bnQgOiAwLFxuICAgICAgICAgICAgZmlyc3REYXlJbmRleFxuICAgICAgICApO1xuICAgICAgICBpZiAobmV3RGF5cy5sZW5ndGggPCBkYXlzQ291bnQpIHtcbiAgICAgICAgICAgIC8vIHdlIG1vdmUgdG8gcHJldiBtb250aFxuICAgICAgICAgICAgaWYgKG5ld0RheXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZpcnN0RGF5ID0gbmV3RGF5c1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5lZWRDb3VudERheSA9IGRheXNDb3VudCAtIG5ld0RheXMubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgcHJldk1vbnRoID0gdGhpcy5sb2FkTW9udGgobW9udGhJbmZvLmRhdGVJbmZvLCAtMSk7XG4gICAgICAgICAgICBsZXQgZW5kUG9zaXRpb24gPSBwcmV2TW9udGguZGF5cy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAobmVlZENvdW50RGF5IDwgNDIpIHtcbiAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHByZXZNb250aC5kYXlzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgKGMpID0+IGMuZGF5SW5Nb250aCA9PT0gZmlyc3REYXkuZGF5SW5Nb250aCAmJiBjLm1vbnRoID09PSBmaXJzdERheS5tb250aFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGVuZFBvc2l0aW9uID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHByZXZNb250aC5kYXlzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcmV2RGF5cyA9IHByZXZNb250aC5kYXlzLnNsaWNlKGVuZFBvc2l0aW9uIC0gbmVlZENvdW50RGF5LCBlbmRQb3NpdGlvbik7XG4gICAgICAgICAgICBuZXdEYXlzID0gWy4uLnByZXZEYXlzLCAuLi5uZXdEYXlzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3RGF5cztcbiAgICB9XG4gICAgcHJpdmF0ZSBfbG9hZFByZXZXZWVrKGRheXM6IERheVtdLCBtb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvKTogQXJyYXk8RGF5PiB7XG4gICAgICAgIGNvbnN0IGRheXNDb3VudCA9IGRheXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBmaXJzdERheSA9IGRheXNbMF07XG4gICAgICAgIGNvbnN0IGZpcnN0RGF5SW5kZXggPSBtb250aEluZm8uZGF5cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoYykgPT4gYy5kYXlJbk1vbnRoID09PSBmaXJzdERheS5kYXlJbk1vbnRoICYmIGMubW9udGggPT09IGZpcnN0RGF5Lm1vbnRoXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHBhcnRJbmRleFByZXYgPSBmaXJzdERheUluZGV4IC0gZGF5c0NvdW50O1xuICAgICAgICBsZXQgbmV3RGF5czogRGF5W10gPSBbXTtcbiAgICAgICAgaWYgKHBhcnRJbmRleFByZXYgPCAwKSB7XG4gICAgICAgICAgICBuZXdEYXlzID0gZmlyc3REYXlJbmRleCAtIDEgPj0gMCA/IG1vbnRoSW5mby5kYXlzLnNsaWNlKDAsIGZpcnN0RGF5SW5kZXggLSAxKSA6IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3RGF5cyA9IG1vbnRoSW5mby5kYXlzLnNsaWNlKGZpcnN0RGF5SW5kZXggLSBkYXlzQ291bnQsIGZpcnN0RGF5SW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdEYXlzLmxlbmd0aCA8IGRheXNDb3VudCkge1xuICAgICAgICAgICAgLy8gd2UgbW92ZSB0byBwcmV2IG1vbnRoXG4gICAgICAgICAgICBsZXQgZmlyc3ROZXdEYXkgPSBuZXdEYXlzWzBdO1xuICAgICAgICAgICAgaWYgKCFmaXJzdE5ld0RheSkge1xuICAgICAgICAgICAgICAgIGZpcnN0TmV3RGF5ID0gZmlyc3REYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmxvYWRNb250aChtb250aEluZm8uZGF0ZUluZm8sIC0xKTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0RGF5SW5kZXgyID0gcHJldk1vbnRoLmRheXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgIChjKSA9PiBjLmRheUluTW9udGggPT09IGZpcnN0TmV3RGF5LmRheUluTW9udGggJiYgYy5tb250aCA9PT0gZmlyc3ROZXdEYXkubW9udGhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBuZXdEYXlzID0gbmV3RGF5cy5jb25jYXQoXG4gICAgICAgICAgICAgICAgcHJldk1vbnRoLmRheXMuc2xpY2UoZmlyc3REYXlJbmRleDIgLSAoZGF5c0NvdW50IC0gbmV3RGF5cy5sZW5ndGgpLCBmaXJzdERheUluZGV4MilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0RheXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDYWxlbmRhck1vbnRoSW5mbyhkYXRlKTogQ2FsZW5kYXJNb250aEluZm8ge1xuICAgICAgICBjb25zdCBzdGFydE9mTW9udGggPSB0aGlzLl9kYXRlU2VydmljZS5zdGFydE9mTW9udGgoZGF0ZSk7XG4gICAgICAgIGNvbnN0IG1vbWVudERhdGUgPSB0aGlzLl9kYXRlU2VydmljZS5nZXRNb21lbnQoZGF0ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vbnRoSW5mbyhzdGFydE9mTW9udGgsIG1vbWVudERhdGUpO1xuICAgIH1cbiAgICBwcml2YXRlIGdldE1vbnRoSW5mbyhkYXRlLCB0b2RheSk6IENhbGVuZGFyTW9udGhJbmZvIHtcbiAgICAgICAgY29uc3QgZGF5czogRGF5W10gPSBbXTtcbiAgICAgICAgY29uc3QgYWN0aXZlRGF0ZSA9IHRoaXMuX2RhdGVTZXJ2aWNlLmdldE1vbWVudChkYXRlKTtcbiAgICAgICAgY29uc3Qgc3RhcnRPZk1vbnRoOiBEYXRlID0gdGhpcy5fZGF0ZVNlcnZpY2Uuc3RhcnRPZk1vbnRoKGFjdGl2ZURhdGUpO1xuICAgICAgICBjb25zdCBlbmRPZk1vbnRoOiBEYXRlID0gdGhpcy5fZGF0ZVNlcnZpY2UuZW5kT2ZNb250aChhY3RpdmVEYXRlKTtcbiAgICAgICAgY29uc3QgZGF0ZUluZm8gPSB0aGlzLl9kYXRlU2VydmljZS5nZXREYXRlSW5mbyhhY3RpdmVEYXRlKTtcbiAgICAgICAgY29uc3QgZGF5SW5XZWVrID0gdGhpcy5fZGF0ZVNlcnZpY2UuZGF5KHN0YXJ0T2ZNb250aCk7IC8vIHdlIGFkZCAxIHRvIHRoZSBkYXlJbldlZWsgYmVjYXVzZSBpdCdzIHN0YXJ0cyB3aXRoIHplcm9cblxuICAgICAgICBsZXQgd2Vla0NvdW50ZXIgPSAwO1xuICAgICAgICBsZXQgZGF5Q291bnRlciA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDI7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGF0ZU9mU3RhcnRPZk1vbnRoOiBEYXRlID0gbmV3IERhdGUoc3RhcnRPZk1vbnRoKTtcbiAgICAgICAgICAgIGRhdGVPZlN0YXJ0T2ZNb250aC5zZXREYXRlKGRhdGVPZlN0YXJ0T2ZNb250aC5nZXREYXRlKCkgKyBpIC0gZGF5SW5XZWVrKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF5LCBpc0luTW9udGggfTogeyBkYXk6IERheTsgaXNJbk1vbnRoOiBhbnkgfSA9IHRoaXMuX2dldERheShcbiAgICAgICAgICAgICAgICBkYXRlT2ZTdGFydE9mTW9udGgsXG4gICAgICAgICAgICAgICAgYWN0aXZlRGF0ZSxcbiAgICAgICAgICAgICAgICB0b2RheSxcbiAgICAgICAgICAgICAgICBlbmRPZk1vbnRoLFxuICAgICAgICAgICAgICAgIHN0YXJ0T2ZNb250aCxcbiAgICAgICAgICAgICAgICBkYXRlSW5mbyxcbiAgICAgICAgICAgICAgICBpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZGF5cy5wdXNoKGRheSk7XG4gICAgICAgICAgICBkYXlDb3VudGVyKys7XG4gICAgICAgICAgICBpZiAoaXNJbk1vbnRoICYmIGRheUNvdW50ZXIgPiB3ZWVrQ291bnRlciAqIDcpIHtcbiAgICAgICAgICAgICAgICB3ZWVrQ291bnRlcisrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnN0IGVuZE9mTW9udGhJbmRleCA9IGRheXMuZmluZEluZGV4KChjKSA9PiBjLmlzRW5kT2ZNb250aCk7XG4gICAgICAgIC8vIGlmIChlbmRPZk1vbnRoSW5kZXggPiAtMSAmJiBkYXlzLmxlbmd0aCAtIGVuZE9mTW9udGhJbmRleCA+IDcpIHtcbiAgICAgICAgLy8gICAgIC8vIGRheXMuc3BsaWNlKGRheXMubGVuZ3RoIC0gNywgNyk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgY29uc3QgY2FsZW5kYXJJbmZvID0gbmV3IENhbGVuZGFyTW9udGhJbmZvKCk7XG4gICAgICAgIGNhbGVuZGFySW5mby5pZCA9IGdldFVuaXF1ZUlkKDMpO1xuICAgICAgICBjYWxlbmRhckluZm8uZGF0ZUluZm8gPSBkYXRlSW5mbztcbiAgICAgICAgY2FsZW5kYXJJbmZvLmRheXMgPSBkYXlzO1xuICAgICAgICBjYWxlbmRhckluZm8ud2Vla3NDb3VudCA9IHdlZWtDb3VudGVyO1xuICAgICAgICAvLyB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHJldHVybiBjYWxlbmRhckluZm87XG4gICAgfVxuICAgIHByaXZhdGUgX2dldERheShcbiAgICAgICAgZGF0ZTogRGF0ZSxcbiAgICAgICAgYWN0aXZlRGF0ZTogYW55LFxuICAgICAgICB0b2RheTogYW55LFxuICAgICAgICBlbmRPZk1vbnRoOiBEYXRlLFxuICAgICAgICBzdGFydE9mTW9udGg6IERhdGUsXG4gICAgICAgIGRhdGVJbmZvOiBEYXRlSW5mbyxcbiAgICAgICAgaTogbnVtYmVyXG4gICAgKTogeyBkYXk6IERheTsgaXNJbk1vbnRoOiBib29sZWFuIH0ge1xuICAgICAgICBjb25zdCBpc0luTW9udGggPSB0aGlzLl9kYXRlU2VydmljZS5pc1NhbWUoZGF0ZSwgYWN0aXZlRGF0ZSwgJ21vbnRoJyk7XG4gICAgICAgIGNvbnN0IG1vbWVudE9mRGF0ZSA9IHRoaXMuX2RhdGVTZXJ2aWNlLmdldE1vbWVudChkYXRlKTtcbiAgICAgICAgY29uc3QgaXNUb2RheSA9IG1vbWVudE9mRGF0ZS5pc1NhbWUodG9kYXksICdkYXknKTtcbiAgICAgICAgY29uc3QgZGF5SW5Nb250aCA9IHRoaXMuX2RhdGVTZXJ2aWNlLnN0ckRhdGUoZGF0ZSk7XG4gICAgICAgIGNvbnN0IGRheUluV2VlayA9IHRoaXMuX2RhdGVTZXJ2aWNlLmRheShkYXRlKTtcbiAgICAgICAgY29uc3QgaXNFbmRPZk1vbnRoID0gbW9tZW50T2ZEYXRlLmlzU2FtZShlbmRPZk1vbnRoLCAnZGF5Jyk7XG4gICAgICAgIGNvbnN0IGlzU3RhcnRPZk1vbnRoID0gbW9tZW50T2ZEYXRlLmlzU2FtZShzdGFydE9mTW9udGgsICdkYXknKTtcbiAgICAgICAgY29uc3QgbW9udGhEYXRlSW5mbyA9IGlzSW5Nb250aCA/IGRhdGVJbmZvIDogdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0RGF0ZUluZm8oZGF0ZSk7XG4gICAgICAgIGNvbnN0IGRheTogRGF5ID0ge1xuICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgZGF5SW5XZWVrLFxuICAgICAgICAgICAgc3RhdHVzOiBEYXlTdGF0dXMuT3BlbixcbiAgICAgICAgICAgIGRheUluTW9udGgsXG4gICAgICAgICAgICBkYXlJbk1vbnRoTjogdGhpcy5nZXROdW1iZXIoZGF5SW5Nb250aCksXG4gICAgICAgICAgICBpc1RvZGF5LFxuICAgICAgICAgICAgaXNJbk1vbnRoLFxuICAgICAgICAgICAgaXNFbmRPZk1vbnRoLFxuICAgICAgICAgICAgaXNTdGFydE9mTW9udGgsXG4gICAgICAgICAgICBtb21lbnRPZkRhdGUsXG4gICAgICAgICAgICBtb250aDogbW9udGhEYXRlSW5mby5tb250aCxcbiAgICAgICAgICAgIHllYXI6IG1vbnRoRGF0ZUluZm8ueWVhcixcbiAgICAgICAgICAgIG1vbnRoTmFtZTogbW9udGhEYXRlSW5mby5tb250aE5hbWUsXG4gICAgICAgICAgICBkYXlOYW1lOiBtb21lbnRPZkRhdGUuZm9ybWF0KCdkZGRkJyksXG4gICAgICAgICAgICB0YXNrczogW10sXG4gICAgICAgICAgICBtb250aERhdGVJbmZvLFxuICAgICAgICAgICAgcm93OiBNYXRoLmZsb29yKGkgLyA3ICsgMSksXG4gICAgICAgICAgICBjb2w6IDYgLSAoaSAlIDcpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IGRheSwgaXNJbk1vbnRoIH07XG4gICAgfVxufVxuIl19