barsa-calendar 1.0.342 → 1.0.344

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.
@@ -10,7 +10,7 @@ export class CalendarService extends BaseComponent {
10
10
  super();
11
11
  this._logService = _logService;
12
12
  this._calendarsSource = new BehaviorSubject([]);
13
- this._modeSource = new BehaviorSubject('month');
13
+ this._modeSource = new BehaviorSubject('day');
14
14
  this._currentMonthIndexSource = new BehaviorSubject(-1);
15
15
  this._weekModeDaysSource = new BehaviorSubject([]);
16
16
  this._daysSource = new BehaviorSubject([]);
@@ -612,4 +612,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
612
612
  type: Inject,
613
613
  args: ['Date_Culture']
614
614
  }] }]; } });
615
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWNhbGVuZGFyL3NyYy9saWIvc2VydmljZXMvY2FsZW5kYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUVILGFBQWEsRUFDYixXQUFXLEVBQ1gsY0FBYyxFQUtqQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQU8sU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7QUFHNUUsTUFBTSxPQUFPLGVBQWdCLFNBQVEsYUFBYTtJQW1COUMsWUFBb0IsV0FBdUIsRUFBc0MsT0FBZ0I7UUFDN0YsS0FBSyxFQUFFLENBQUM7UUFEUSxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQVBuQyxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBc0IsRUFBRSxDQUFDLENBQUM7UUFFaEUsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBZSxPQUFPLENBQUMsQ0FBQztRQUN6RCw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7UUFJakQsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZ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QUNoRSxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakYsTUFBTSxHQUFHLEdBQVE7WUFDYixLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUk7WUFDSixTQUFTO1lBQ1QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3RCLFVBQVU7WUFDVixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDdkMsT0FBTztZQUNQLFNBQVM7WUFDVCxZQUFZO1lBQ1osY0FBYztZQUNkLFlBQVk7WUFDWixLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUs7WUFDMUIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJO1lBQ3hCLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUztZQUNsQyxPQUFPLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDcEMsS0FBSyxFQUFFLEVBQUU7WUFDVCxhQUFhO1lBQ2IsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbkIsQ0FBQztRQUNGLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDOUIsQ0FBQzs7NEdBNXFCUSxlQUFlLDRDQW1CeUMsY0FBYztnSEFuQnRFLGVBQWU7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVTs7MEJBb0J1QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBEYXRlU2VydmljZSxcbiAgICBCYXNlQ29tcG9uZW50LFxuICAgIGdldFVuaXF1ZUlkLFxuICAgIGdldERhdGVTZXJ2aWNlLFxuICAgIExvZ1NlcnZpY2UsXG4gICAgRGF0ZUluZm8sXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBDYWxlbmRhckZpZWxkc1xufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5pbXBvcnQgeyBDYWxlbmRhck1vZGUsIENhbGVuZGFyTW9udGhJbmZvLCBEYXksIERheVN0YXR1cyB9IGZyb20gJy4uL21vZGVscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYWxlbmRhclNlcnZpY2UgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgICBzZWxlY3RlZCQ6IE9ic2VydmFibGU8Q2FsZW5kYXJNb250aEluZm8+O1xuICAgIGRheXMkOiBPYnNlcnZhYmxlPERheVtdPjtcbiAgICBtb2RlJDogT2JzZXJ2YWJsZTxDYWxlbmRhck1vZGU+O1xuICAgIHdlZWtNb2RlRGF5cyQ6IE9ic2VydmFibGU8RGF5W10+O1xuICAgIGNhbGVuZGFycyQ6IE9ic2VydmFibGU8Q2FsZW5kYXJNb250aEluZm9bXT47XG4gICAgY3VycmVudE1vbnRoSW5kZXgkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgdG9kYXk6IERhdGU7XG4gICAgdG9kYXlEYXk6IERheSB8IHVuZGVmaW5lZDtcbiAgICBfZGF0ZVNlcnZpY2U6IERhdGVTZXJ2aWNlO1xuXG4gICAgcHJpdmF0ZSBfdG9kYXlNb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvO1xuICAgIHByaXZhdGUgX2NhbGVuZGFyc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FsZW5kYXJNb250aEluZm9bXT4oW10pO1xuICAgIHByaXZhdGUgX3NlbGVjdGVkU291cmNlOiBCZWhhdmlvclN1YmplY3Q8Q2FsZW5kYXJNb250aEluZm8+O1xuICAgIHByaXZhdGUgX21vZGVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhbGVuZGFyTW9kZT4oJ21vbnRoJyk7XG4gICAgcHJpdmF0ZSBfY3VycmVudE1vbnRoSW5kZXhTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oLTEpO1xuICAgIHByaXZhdGUgX3dlZWtNb2RlRGF5c1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF5W10+KFtdKTtcbiAgICBwcml2YXRlIF9kYXlzU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXlbXT4oW10pO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfbG9nU2VydmljZTogTG9nU2VydmljZSwgQE9wdGlvbmFsKCkgQEluamVjdCgnRGF0ZV9DdWx0dXJlJykgY3VsdHVyZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9kYXRlU2VydmljZSA9IGdldERhdGVTZXJ2aWNlKF9sb2dTZXJ2aWNlLCBjdWx0dXJlKTtcbiAgICAgICAgdGhpcy5kYXlzJCA9IHRoaXMuX2RheXNTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMubW9kZSQgPSB0aGlzLl9tb2RlU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLndlZWtNb2RlRGF5cyQgPSB0aGlzLl93ZWVrTW9kZURheXNTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJzJCA9IHRoaXMuX2NhbGVuZGFyc1NvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TW9udGhJbmRleCQgPSB0aGlzLl9jdXJyZW50TW9udGhJbmRleFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5faW5pdGlsaXplKCk7XG4gICAgfVxuICAgIGdldCB0b2RheU1vbnRoSW5mbygpOiBDYWxlbmRhck1vbnRoSW5mbyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90b2RheU1vbnRoSW5mbztcbiAgICB9XG4gICAgZ2V0IHNlbGVjdGVkTW9udGgoKTogQ2FsZW5kYXJNb250aEluZm8ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICB9XG4gICAgZ2V0IGNhbGVuZGFycygpOiBBcnJheTxDYWxlbmRhck1vbnRoSW5mbz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJzU291cmNlLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGdldCB3ZWVrc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXlzU291cmNlLmdldFZhbHVlKCkubGVuZ3RoIC8gNztcbiAgICB9XG4gICAgZ2V0IGRheXMoKTogQXJyYXk8RGF5PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXlzU291cmNlLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBNb250aHMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVNlcnZpY2UubW9udGhOYW1lcygpO1xuICAgIH1cblxuICAgIGxvYWRNb250aEJ5RGF0ZSh2YWx1ZTogRGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb250aEluZm8gPSB0aGlzLl9kYXRlU2VydmljZS5nZXREYXRlSW5mbyh2YWx1ZSk7XG4gICAgICAgIHRoaXMubG9hZE1vbnRoKG1vbnRoSW5mbyk7XG4gICAgfVxuICAgIHNldERhdGVTZXJ2aWNlKHByaW1hcnlDYWxlbmRhclR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBsZXQgZGF0ZVNlcnZpY2UgPSB0aGlzLl9kYXRlU2VydmljZTtcbiAgICAgICAgc3dpdGNoIChwcmltYXJ5Q2FsZW5kYXJUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdQZXJzaWFuJzpcbiAgICAgICAgICAgICAgICBkYXRlU2VydmljZSA9IGdldERhdGVTZXJ2aWNlKHRoaXMuX2xvZ1NlcnZpY2UsICdmYS1JUicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnR3JlZ29yaWFuJzpcbiAgICAgICAgICAgICAgICBkYXRlU2VydmljZSA9IGdldERhdGVTZXJ2aWNlKHRoaXMuX2xvZ1NlcnZpY2UsICdlbi1VUycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQXJhYmljJzpcbiAgICAgICAgICAgICAgICBkYXRlU2VydmljZSA9IGdldERhdGVTZXJ2aWNlKHRoaXMuX2xvZ1NlcnZpY2UsICdhci1BRScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGVTZXJ2aWNlID0gZGF0ZVNlcnZpY2U7XG4gICAgICAgIHRoaXMuX2luaXRpbGl6ZSgpO1xuICAgIH1cbiAgICBzZXREYXlzKGRheXM6IERheVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RheXNTb3VyY2UubmV4dChkYXlzKTtcbiAgICB9XG5cbiAgICBwcmVwYXJlV2Vlayhtb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvLCBzdGFydEluZGV4OiBudW1iZXIsIGRheXNDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF5cyA9IG1vbnRoSW5mby5kYXlzLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyBkYXlzQ291bnQpO1xuICAgICAgICB0aGlzLl93ZWVrTW9kZURheXNTb3VyY2UubmV4dChzdGFydERheXMpO1xuICAgIH1cbiAgICBzZXRTZWxlY3RlZChzZWxlY3RlZDogQ2FsZW5kYXJNb250aEluZm8pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTb3VyY2UubmV4dChzZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgd2Vla0RheXNNaW4oKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlU2VydmljZS53ZWVrZGF5c01pbigpO1xuICAgIH1cbiAgICB3ZWVrRGF5cygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVTZXJ2aWNlLndlZWtEYXlzKCk7XG4gICAgfVxuICAgIGdvdG9Ub2RheSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkTW9udGgodGhpcy5fdG9kYXlNb250aEluZm8uZGF0ZUluZm8sIDApO1xuICAgICAgICB0aGlzLnNldE1vZGUoXG4gICAgICAgICAgICB0aGlzLl9tb2RlU291cmNlLmdldFZhbHVlKCksXG4gICAgICAgICAgICB0aGlzLl90b2RheU1vbnRoSW5mby5kYXlzLmZpbmQoKGMpID0+IGMuaXNUb2RheSksXG4gICAgICAgICAgICB0aGlzLl93ZWVrTW9kZURheXNTb3VyY2UuZ2V0VmFsdWUoKS5sZW5ndGhcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmFuZ2VTZWxlY3Qoc3RhcnREYXk6IERheSwgZW5kRGF5OiBEYXksIG1vbnRoSW5mbzogQ2FsZW5kYXJNb250aEluZm8pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlmZiA9IGVuZERheS5pbmRleCAtIHN0YXJ0RGF5LmluZGV4O1xuICAgICAgICBpZiAoZGlmZiA8IDcpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnd2VlaycsIHN0YXJ0RGF5LCBkaWZmICsgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkaWZmMiA9IGRpZmYgKyAxO1xuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCdjdXN0b21Nb250aCcpO1xuICAgICAgICAgICAgdGhpcy5zZXRNb250aChtb250aEluZm8sIHN0YXJ0RGF5LCBkaWZmMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0TW9udGgobW9udGhJbmZvOiBDYWxlbmRhck1vbnRoSW5mbywgc3RhcnREYXk/OiBEYXksIGRpZmY6IG51bWJlciA9IDApOiB2b2lkIHtcbiAgICAgICAgaWYgKHN0YXJ0RGF5ICYmIGRpZmYgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gc3RhcnREYXkuaW5kZXg7XG4gICAgICAgICAgICB0aGlzLmxvYWRDYWxlbmRhck1vbnRoSW5mbyhtb250aEluZm8pO1xuICAgICAgICAgICAgdGhpcy5zZXREYXlzKG1vbnRoSW5mby5kYXlzLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyBkaWZmKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRDYWxlbmRhck1vbnRoSW5mbyhtb250aEluZm8pO1xuICAgICAgICAgICAgdGhpcy5zZXREYXlzKG1vbnRoSW5mby5kYXlzKTtcbiAgICAgICAgICAgIC8vIGVsc2UgaWYgKG1vZGUgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIC8vICAgc3RhcnREYXkgPSBkYXlzTG9hZGVkWzBdO1xuICAgICAgICAgICAgLy8gaWYgKHN0YXJ0RGF5KSB0aGlzLmxvYWRNb250aChzdGFydERheS5tb250aERhdGVJbmZvKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRNb2RlKG1vZGU6IENhbGVuZGFyTW9kZSwgc3RhcnREYXk/OiBEYXksIGRheXNDb3VudD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBvbGRNb2RlID0gdGhpcy5fbW9kZVNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICB0aGlzLl9tb2RlU291cmNlLm5leHQobW9kZSk7XG4gICAgICAgIGlmIChtb2RlID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1vbnRoKHRoaXMuc2VsZWN0ZWRNb250aCwgc3RhcnREYXkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdjdXN0b21Nb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TW9udGgodGhpcy5zZWxlY3RlZE1vbnRoLCBzdGFydERheSwgdGhpcy5kYXlzLmxlbmd0aCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF5c0xvYWRlZCA9IHRoaXMuX3dlZWtNb2RlRGF5c1NvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICBkYXlzQ291bnQgPSBkYXlzQ291bnQgPz8gKG1vZGUgPT09ICd3ZWVrJyA/IDcgOiAxKTtcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSAwO1xuICAgICAgICBpZiAoIXN0YXJ0RGF5KSB7XG4gICAgICAgICAgICBpZiAobW9kZSA9PT0gJ3dlZWsnIHx8IG1vZGUgPT09ICdkYXknKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9sZE1vZGUgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnREYXkgPSB0aGlzLnNlbGVjdGVkTW9udGguZGF5cy5maW5kKChjKSA9PiBjLmlzVG9kYXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFydERheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF5ID0gdGhpcy5zZWxlY3RlZE1vbnRoLmRheXMuZmluZCgoYykgPT4gYy5pc1N0YXJ0T2ZNb250aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9sZE1vZGUgPT09ICdjdXN0b21Nb250aCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXkgPSB0aGlzLmRheXNbMF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnREYXkgPSBkYXlzTG9hZGVkWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGFydERheSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0YXJ0RGF5Lm1vbnRoRGF0ZUluZm8ubW9udGggIT09IHRoaXMuc2VsZWN0ZWRNb250aC5kYXRlSW5mby5tb250aCB8fFxuICAgICAgICAgICAgICAgIHN0YXJ0RGF5Lm1vbnRoRGF0ZUluZm8ueWVhciAhPT0gdGhpcy5zZWxlY3RlZE1vbnRoLmRhdGVJbmZvLnllYXJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vbnRoKHN0YXJ0RGF5Lm1vbnRoRGF0ZUluZm8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhcnRJbmRleCA9IHRoaXMuc2VsZWN0ZWRNb250aC5kYXlzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAoYykgPT4gYy5tb250aCA9PT0gc3RhcnREYXk/Lm1vbnRoICYmIGMuZGF5SW5Nb250aCA9PT0gc3RhcnREYXkuZGF5SW5Nb250aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXBhcmVXZWVrKHRoaXMuX3NlbGVjdGVkU291cmNlLmdldFZhbHVlKCksIHN0YXJ0SW5kZXgsIGRheXNDb3VudCk7XG4gICAgfVxuXG4gICAgZmlsbFdlZWsod2VlazogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9LCBkYXlzQ291bnQgPSA3KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFycjogYW55W10gPSBPYmplY3QudmFsdWVzKHdlZWspO1xuICAgICAgICBhcnIuZm9yRWFjaChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ/OiBNZXRhb2JqZWN0RGF0YU1vZGVsO1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5PzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBzdGFydD86IERhdGU7XG4gICAgICAgICAgICAgICAgICAgIGVuZD86IERhdGU7XG4gICAgICAgICAgICAgICAgfVtdXG4gICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVsIG9mIGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVEYXRlID0gZWwuZW5kO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVEYXRlICYmIHRoaXMuX2RhdGVTZXJ2aWNlLmdldE1vbWVudCh2YWx1ZURhdGUpLmlzQmVmb3JlKHRoaXMudG9kYXksICdkYXknKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWwub3BhY2l0eSA9IDAuNTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gZWxlbWVudC5sZW5ndGg7IGkgPCBkYXlzQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnB1c2goeyBjb2xTcGFuOiAxIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG4gICAgc29ydFRhc2tzKGNhbGVuZGFyVGFza3M6IE1ldGFvYmplY3REYXRhTW9kZWxbXSwgY2FsZW5kYXJGaWVsZHM6IENhbGVuZGFyRmllbGRzKTogQXJyYXk8TWV0YW9iamVjdERhdGFNb2RlbD4ge1xuICAgICAgICBjb25zdCBzdGFydERhdGVGaWVsZCA9IGNhbGVuZGFyRmllbGRzLlN0YXJ0RGF0ZTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZUZpZWxkID0gY2FsZW5kYXJGaWVsZHMuRW5kRGF0ZTtcbiAgICAgICAgY2FsZW5kYXJUYXNrcy5zb3J0KCh0YXNrQSwgdGFza0IpID0+ICh0YXNrQVtzdGFydERhdGVGaWVsZF0gPCB0YXNrQltzdGFydERhdGVGaWVsZF0gPyAtMSA6IDEpKTtcbiAgICAgICAgY2FsZW5kYXJUYXNrcy5zb3J0KCh0YXNrQSwgdGFza0IpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2tBU3RhcnREYXRlID0gdGFza0Fbc3RhcnREYXRlRmllbGRdO1xuICAgICAgICAgICAgY29uc3QgdGFza0JTdGFydERhdGUgPSB0YXNrQltzdGFydERhdGVGaWVsZF07XG5cbiAgICAgICAgICAgIGNvbnN0IG1vbWVudFRhc2tBU3RhcnREYXRlID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KHRhc2tBU3RhcnREYXRlKTtcbiAgICAgICAgICAgIGNvbnN0IG1vbWVudFRhc2tCU3RhcnREYXRlID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KHRhc2tCU3RhcnREYXRlKTtcbiAgICAgICAgICAgIGlmIChtb21lbnRUYXNrQVN0YXJ0RGF0ZS5pc1NhbWUobW9tZW50VGFza0JTdGFydERhdGUsICdkYXknKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tBRW5kRGF0ZSA9IHRhc2tBW2VuZERhdGVGaWVsZF07XG4gICAgICAgICAgICAgICAgY29uc3QgdGFza0JFbmREYXRlID0gdGFza0JbZW5kRGF0ZUZpZWxkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXlBRGlmZiA9IG1vbWVudFRhc2tBU3RhcnREYXRlLmRpZmYodGFza0FFbmREYXRlLCAnZGF5Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF5QkRpZmYgPSBtb21lbnRUYXNrQlN0YXJ0RGF0ZS5kaWZmKHRhc2tCRW5kRGF0ZSwgJ2RheScpO1xuICAgICAgICAgICAgICAgIGlmIChkYXlBRGlmZiA+IGRheUJEaWZmKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGF5QURpZmYgPCBkYXlCRGlmZikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNhbGVuZGFyVGFza3M7XG4gICAgfVxuICAgIGNyZWF0ZVdlZWtUYXNrKFxuICAgICAgICBkYXlzOiBEYXlbXSxcbiAgICAgICAgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLFxuICAgICAgICBjYWxlbmRhckZpZWxkczogQ2FsZW5kYXJGaWVsZHMsXG4gICAgICAgIHRhc2tIZWlnaHQ6IG51bWJlclxuICAgICk6IHsgW2tleTogc3RyaW5nXTogYW55W10gfSB7XG4gICAgICAgIGNvbnN0IHdlZWs6IHsgW2tleTogc3RyaW5nXTogYW55W10gfSA9IHt9O1xuICAgICAgICBkYXlzLmZvckVhY2goKGRheSwgZGF5SW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgICAgIG1vRGF0YUxpc3QuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb3VudGVySW5kZXggPSBjb3VudGVyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF3ZWVrW2NvdW50ZXJJbmRleF0pIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla1tjb3VudGVySW5kZXhdID0gW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3ZWVrW2NvdW50ZXJJbmRleF0ubGVuZ3RoID4gZGF5SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IG0gPSB3ZWVrW2NvdW50ZXJJbmRleF0ubGVuZ3RoOyBtIDwgZGF5SW5kZXg7IG0rKykge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrW2NvdW50ZXJJbmRleF0ucHVzaCh7IGNvbFNwYW46IDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gYWdhciB3ZWVrW2NvdW50ZXJdIGNvbHNwYW4gamEgZGFzaHQgYW5qYW0gZ2FyZGFkLlxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Rhc2s6IGFueSA9IHsgY29sU3BhbjogMSB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vbWVudERheSA9IHRoaXMuX2RhdGVTZXJ2aWNlLmdldE1vbWVudChkYXkuZGF0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9tZW50T2ZTdGFydEV2ZW50ID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KGV2ZW50W2NhbGVuZGFyRmllbGRzLlN0YXJ0RGF0ZV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBldmVudFtjYWxlbmRhckZpZWxkcy5FbmREYXRlXTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb21lbnRPZkVuZEV2ZW50ID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KGVuZERhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhtb21lbnRPZlN0YXJ0RXZlbnQuZGlmZihtb21lbnRPZkVuZEV2ZW50LCAnZGF5JykpO1xuICAgICAgICAgICAgICAgIGlmIChkaWZmID09PSAwICYmIG1vbWVudERheS5pc1NhbWUobW9tZW50T2ZTdGFydEV2ZW50LCAnZGF5JykpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5jb2xTcGFuID0gMTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRNaW51dGVUb3AgPSAoZXZlbnQuJFN0YXJ0RGF0ZUluZm8ubWludXRlcyAqIHRhc2tIZWlnaHQpIC8gNjA7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Rhc2sudG9wID0gZXZlbnQuJFN0YXJ0RGF0ZUluZm8uaG91ciAqIHRhc2tIZWlnaHQgKyBzdGFydE1pbnV0ZVRvcDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kTWludXRlVG9wID0gKGV2ZW50LiRFbmREYXRlSW5mby5taW51dGVzICogdGFza0hlaWdodCkgLyA2MDtcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5oZWlnaHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50LiRFbmREYXRlSW5mby5ob3VyIC0gZXZlbnQuJFN0YXJ0RGF0ZUluZm8uaG91cikgKiB0YXNrSGVpZ2h0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZE1pbnV0ZVRvcCAtXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydE1pbnV0ZVRvcDtcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5ldmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmVuZGRheUlzSW5Sb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLnN0YXJ0ZGF5SXNJblJvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suaXNTdGFydERheSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suaXNFbmREYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLnN0YXJ0ID0gbmV3VGFzay5lbmQgPSBkYXkuZGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5pbkRheSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC4kU3RhcnREYXRlSW5mby5ob3VyID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuJFN0YXJ0RGF0ZUluZm8ubWludXRlcyA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LiRFbmREYXRlSW5mby5ob3VyID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuJEVuZERhdGVJbmZvLm1pbnV0ZXMgPiAwO1xuICAgICAgICAgICAgICAgICAgICB3ZWVrW2NvdW50ZXJJbmRleF0uc3BsaWNlKGRheUluZGV4LCAwLCBuZXdUYXNrKTtcbiAgICAgICAgICAgICAgICAgICAgZGF5LnRhc2tzLnB1c2gobmV3VGFzayk7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGlmZkZyb21FbmRPZkV2ZW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRpZmZGcm9tU3RhcnRPZkV2ZW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNCZXR3ZWVuID1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudERheS5pc1NhbWVPckFmdGVyKG1vbWVudE9mU3RhcnRFdmVudCwgJ2RheScpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtb21lbnREYXkuaXNTYW1lT3JCZWZvcmUobW9tZW50T2ZFbmRFdmVudCwgJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNCZXR3ZWVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWZmRnJvbUVuZE9mRXZlbnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpZmYgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmNvbFNwYW4gPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suZXZlbnQgPSBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZkZyb21FbmRPZkV2ZW50ID0gTWF0aC5hYnMobW9tZW50RGF5LmRpZmYobW9tZW50T2ZFbmRFdmVudCwgJ2RheScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmRnJvbVN0YXJ0T2ZFdmVudCA9IE1hdGguYWJzKG1vbWVudERheS5kaWZmKG1vbWVudE9mU3RhcnRFdmVudCwgJ2RheScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1N0YXJ0RGF5ID0gbW9tZW50RGF5LmlzU2FtZShtb21lbnRPZlN0YXJ0RXZlbnQsICdkYXknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0VuZERheSA9IG1vbWVudERheS5pc1NhbWUobW9tZW50T2ZFbmRFdmVudCwgJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xTcGFuID0gZGlmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3RhcnREYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbiA9IGRpZmZGcm9tRW5kT2ZFdmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xTcGFuID0gZGlmZiArIDE7IC8vIGluY2x1ZGUgdGhlIHN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suY29sU3BhbiA9IHRoaXMuX2NhbGNDb2xTcGFuKGNvbFNwYW4sIGRheUluZGV4LCBkYXlzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5pc1N0YXJ0RGF5ID0gaXNTdGFydERheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmlzRW5kRGF5ID0gaXNFbmREYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5pc01pZGRsZSA9ICFpc1N0YXJ0RGF5ICYmICFpc0VuZERheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3VGFzay5pc1N0YXJ0RGF5IHx8IGRheUluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgc3BhbiA9IDA7IHNwYW4gPCBuZXdUYXNrLmNvbFNwYW47IHNwYW4rKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXNrSW5kZXggPSBkYXlJbmRleCArIHNwYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrSW5kZXggPiBkYXlzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tEYXlJbmZvID0gZGF5c1t0YXNrSW5kZXhdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tJbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubmV3VGFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB0YXNrRGF5SW5mby5kYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBlbmREYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTdGFydERheTogc3BhbiA9PT0gMCA/IG5ld1Rhc2suaXNTdGFydERheSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFRhc2s6IGV2ZW50LiRTdGFydERheUluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRUYXNrOiBldmVudC4kRW5kRGF5SW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ZGF5SXNJblJvdzogZGF5SW5kZXggLSBkaWZmRnJvbVN0YXJ0T2ZFdmVudCA+IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kZGF5SXNJblJvdzogISFkYXlzW2RpZmZGcm9tRW5kT2ZFdmVudF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc01pZGRsZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuID09PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3VGFzay5pc01pZGRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2RhdGVTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRNb21lbnQodGFza0RheUluZm8uZGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmlzQmV0d2Vlbihtb21lbnRPZlN0YXJ0RXZlbnQsIG1vbWVudE9mRW5kRXZlbnQsICdkYXknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRW5kRGF5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4gPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXdUYXNrLmlzRW5kRGF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTWF0aC5hYnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0TW9tZW50KHRhc2tEYXlJbmZvLmRhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlmZihtb21lbnRPZkVuZEV2ZW50LCAnZGF5JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDw9IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiBzcGFuID09PSAwID8gbmV3VGFzay5jb2xTcGFuIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWVrW2NvdW50ZXIudG9TdHJpbmcoKV0uc3BsaWNlKHRhc2tJbmRleCwgMCwgdGFza0luZm8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrRGF5SW5mby50YXNrcy5wdXNoKHRhc2tJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gd2VlaztcbiAgICB9XG5cbiAgICBsb2FkTmV4dCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMuX21vZGVTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRNb250aCA9IHRoaXMuX3NlbGVjdGVkU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgICAgY2FzZSAnY3VzdG9tTW9udGgnOlxuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5cyA9IHRoaXMuZGF5cztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RGF5cyA9IHRoaXMuX2xvYWROZXh0TW9udGgoZGF5cywgc2VsZWN0ZWRNb250aCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF5cyhuZXdEYXlzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheXMgPSB0aGlzLl93ZWVrTW9kZURheXNTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RGF5cyA9IHRoaXMuX2xvYWROZXh0V2VlayhkYXlzLCBzZWxlY3RlZE1vbnRoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2Vla01vZGVEYXlzU291cmNlLm5leHQobmV3RGF5cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGlzdCc6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ290b01vbnRoKG1vbnRoTmFtZTogc3RyaW5nLCBtb250aEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRNb250aCA9IHRoaXMuc2VsZWN0ZWRNb250aC5kYXRlSW5mby5tb250aDtcbiAgICAgICAgY29uc3QgdmFsID0gbW9udGhJbmRleCAtIHNlbGVjdGVkTW9udGg7XG4gICAgICAgIHRoaXMubG9hZE1vbnRoKHRoaXMuc2VsZWN0ZWRNb250aC5kYXRlSW5mbywgdmFsKTtcbiAgICB9XG4gICAgZ290b1llYXIoeWVhcjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWRNb250aC5kYXRlSW5mby55ZWFyO1xuICAgICAgICBjb25zdCB2YWwgPSB5ZWFyIC0gc2VsZWN0ZWRZZWFyO1xuICAgICAgICB0aGlzLmluY3JlYXNlWWVhcih2YWwpO1xuICAgIH1cbiAgICBsb2FkTmV4dFllYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5jcmVhc2VZZWFyKDEpO1xuICAgIH1cbiAgICBsb2FkUHJldlllYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5jcmVhc2VZZWFyKC0xKTtcbiAgICB9XG4gICAgaW5jcmVhc2VZZWFyKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyID0gdGhpcy5zZWxlY3RlZE1vbnRoLmRhdGVJbmZvLm1vbWVudC50b0RhdGUoKTtcbiAgICAgICAgc2VsZWN0ZWRZZWFyLnNldEZ1bGxZZWFyKHNlbGVjdGVkWWVhci5nZXRGdWxsWWVhcigpICsgdmFsdWUpOyAvLyBuZXh0IHllYXJcbiAgICAgICAgdGhpcy5sb2FkTW9udGhCeURhdGUoc2VsZWN0ZWRZZWFyKTtcbiAgICB9XG4gICAgbG9hZFByZXZpb3VzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb2RlID0gdGhpcy5fbW9kZVNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZE1vbnRoID0gdGhpcy5fc2VsZWN0ZWRTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdjdXN0b21Nb250aCc6XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXlzID0gdGhpcy5kYXlzO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdEYXlzID0gdGhpcy5fbG9hZFByZXZNb250aChkYXlzLCBzZWxlY3RlZE1vbnRoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXlzKG5ld0RheXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheXMgPSB0aGlzLl93ZWVrTW9kZURheXNTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RGF5cyA9IHRoaXMuX2xvYWRQcmV2V2VlayhkYXlzLCBzZWxlY3RlZE1vbnRoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2Vla01vZGVEYXlzU291cmNlLm5leHQobmV3RGF5cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGlzdCc6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbG9hZE1vbnRoKGRhdGVJbmZvOiBEYXRlSW5mbywgYWRkTW9udGg6IG51bWJlciA9IDApOiBDYWxlbmRhck1vbnRoSW5mbyB7XG4gICAgICAgIGxldCBsb2FkZWRNb250aERhdGUgPSB0aGlzLl9kYXRlU2VydmljZS5nZXRNb21lbnQoZGF0ZUluZm8uZGF0ZSk7XG4gICAgICAgIGlmIChhZGRNb250aCA+IDApIHtcbiAgICAgICAgICAgIGxvYWRlZE1vbnRoRGF0ZSA9IHRoaXMuX2RhdGVTZXJ2aWNlLmFkZE1vbnRoKGxvYWRlZE1vbnRoRGF0ZSwgYWRkTW9udGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhZGRNb250aCA8IDApIHtcbiAgICAgICAgICAgIGxvYWRlZE1vbnRoRGF0ZSA9IHRoaXMuX2RhdGVTZXJ2aWNlLnN1YnRyYWN0TW9udGgobG9hZGVkTW9udGhEYXRlLCBNYXRoLmFicyhhZGRNb250aCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsb2FkZWRDYWxlbmRhck1vbnRoSW5mbyA9IHRoaXMuY2FsZW5kYXJzLmZpbmQoKGMpID0+IGMuZGF0ZUluZm8ubW9tZW50LmlzU2FtZShsb2FkZWRNb250aERhdGUsICdkYXknKSk7XG4gICAgICAgIGlmICghbG9hZGVkQ2FsZW5kYXJNb250aEluZm8pIHtcbiAgICAgICAgICAgIGxvYWRlZENhbGVuZGFyTW9udGhJbmZvID0gdGhpcy5nZXRNb250aEluZm8obG9hZGVkTW9udGhEYXRlLCB0aGlzLnRvZGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRDYWxlbmRhck1vbnRoSW5mbyhsb2FkZWRDYWxlbmRhck1vbnRoSW5mbyk7XG4gICAgICAgIHJldHVybiBsb2FkZWRDYWxlbmRhck1vbnRoSW5mbztcbiAgICB9XG5cbiAgICBsb2FkQ2FsZW5kYXJNb250aEluZm8obG9hZGVkQ2FsZW5kYXJNb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyc0luZm8gPSBbLi4udGhpcy5jYWxlbmRhcnNdO1xuICAgICAgICBjb25zdCBleGlzdHMgPSBjYWxlbmRhcnNJbmZvLmZpbmQoXG4gICAgICAgICAgICAoYykgPT5cbiAgICAgICAgICAgICAgICBjLmRhdGVJbmZvLnllYXIgPT09IGxvYWRlZENhbGVuZGFyTW9udGhJbmZvLmRhdGVJbmZvLnllYXIgJiZcbiAgICAgICAgICAgICAgICBjLmRhdGVJbmZvLm1vbnRoID09PSBsb2FkZWRDYWxlbmRhck1vbnRoSW5mby5kYXRlSW5mby5tb250aFxuICAgICAgICApO1xuICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgY2FsZW5kYXJzSW5mby5wdXNoKGxvYWRlZENhbGVuZGFyTW9udGhJbmZvKTtcbiAgICAgICAgICAgIHRoaXMuX2NhbGVuZGFyc1NvdXJjZS5uZXh0KGNhbGVuZGFyc0luZm8pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQobG9hZGVkQ2FsZW5kYXJNb250aEluZm8pO1xuICAgIH1cblxuICAgIGFkZENhbGVuZGFyTW9udGhJbmZvKGNhbGVuZGFyTW9udGhJbmZvOiBDYWxlbmRhck1vbnRoSW5mbyk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdMaXN0ID0gdGhpcy5jYWxlbmRhcnM7XG4gICAgICAgIG5ld0xpc3QucHVzaChjYWxlbmRhck1vbnRoSW5mbyk7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyc1NvdXJjZS5uZXh0KG5ld0xpc3QpO1xuICAgIH1cblxuICAgIGdldE51bWJlcih2YWx1ZSk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGZpbmQgPSBbJ9uwJywgJ9uxJywgJ9uyJywgJ9uzJywgJ9u0JywgJ9u1JywgJ9u2JywgJ9u3JywgJ9u4JywgJ9u5J107XG4gICAgICAgIGNvbnN0IHJlcGxhY2UgPSBbJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknXTtcbiAgICAgICAgbGV0IHJlcGxhY2VTdHJpbmcgPSB2YWx1ZTtcbiAgICAgICAgbGV0IHJlZ2V4O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbmQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChmaW5kW2ldLCAnZycpO1xuICAgICAgICAgICAgcmVwbGFjZVN0cmluZyA9IHJlcGxhY2VTdHJpbmcucmVwbGFjZShyZWdleCwgcmVwbGFjZVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE51bWJlcihyZXBsYWNlU3RyaW5nKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5pdGlsaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRvZGF5ID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KG5ldyBEYXRlKCkpO1xuICAgICAgICBjb25zdCB0b2RheU1vbnRoSW5mbyA9IHRoaXMuZ2V0Q2FsZW5kYXJNb250aEluZm8obmV3IERhdGUoKSk7XG4gICAgICAgIHRoaXMudG9kYXlEYXkgPSB0b2RheU1vbnRoSW5mby5kYXlzLmZpbmQoKGMpID0+IGMuaXNUb2RheSk7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYWxlbmRhck1vbnRoSW5mbz4odG9kYXlNb250aEluZm8pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkJCA9IHRoaXMuX3NlbGVjdGVkU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLl9jYWxlbmRhcnNTb3VyY2UubmV4dChbdG9kYXlNb250aEluZm9dKTtcbiAgICAgICAgdGhpcy5zZXREYXlzKHRvZGF5TW9udGhJbmZvLmRheXMpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkKHRvZGF5TW9udGhJbmZvKTtcbiAgICAgICAgdGhpcy5fY3VycmVudE1vbnRoSW5kZXhTb3VyY2UubmV4dCh0b2RheU1vbnRoSW5mby5kYXRlSW5mby5tb250aCk7XG4gICAgICAgIHRoaXMuX3RvZGF5TW9udGhJbmZvID0gdG9kYXlNb250aEluZm87XG4gICAgICAgIHRoaXMuY2FsZW5kYXJzJC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2NhbGNDb2xTcGFuKGRpZmY6IG51bWJlciwgZGF5SW5kZXg6IG51bWJlciwgbWF4Q29sU3BhbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGRpZmYgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChNYXRoLmZsb29yKGRpZmYgLyBtYXhDb2xTcGFuKSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBtYXhDb2xTcGFuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRheUluZGV4ICsgZGlmZiA+IG1heENvbFNwYW4pIHtcbiAgICAgICAgICAgIHJldHVybiBtYXhDb2xTcGFuIC0gZGF5SW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmY7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbG9hZE5leHRNb250aChkYXlzOiBEYXlbXSwgbW9udGhJbmZvOiBDYWxlbmRhck1vbnRoSW5mbyk6IEFycmF5PERheT4ge1xuICAgICAgICBjb25zdCBkYXlzQ291bnQgPSBkYXlzLmxlbmd0aDtcbiAgICAgICAgbGV0IGxhc3REYXkgPSBkYXlzW2RheXNDb3VudCAtIDFdO1xuICAgICAgICBjb25zdCBsYXN0RGF5SW5kZXggPSBtb250aEluZm8uZGF5cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoYykgPT4gYy5kYXlJbk1vbnRoID09PSBsYXN0RGF5LmRheUluTW9udGggJiYgYy5tb250aCA9PT0gbGFzdERheS5tb250aFxuICAgICAgICApO1xuICAgICAgICBsZXQgbmV3RGF5cyA9IGxhc3REYXlJbmRleCA+IC0xID8gbW9udGhJbmZvLmRheXMuc2xpY2UobGFzdERheUluZGV4ICsgMSwgbGFzdERheUluZGV4ICsgMSArIGRheXNDb3VudCkgOiBbXTtcbiAgICAgICAgaWYgKG5ld0RheXMubGVuZ3RoIDwgZGF5c0NvdW50KSB7XG4gICAgICAgICAgICAvLyB3ZSBtb3ZlIHRvIG5leHQgbW9udGhcbiAgICAgICAgICAgIGlmIChuZXdEYXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBsYXN0RGF5ID0gbmV3RGF5c1tuZXdEYXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmVlZENvdW50RGF5ID0gZGF5c0NvdW50IC0gbmV3RGF5cy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmxvYWRNb250aChtb250aEluZm8uZGF0ZUluZm8sIDEpO1xuICAgICAgICAgICAgbGV0IHN0YXJ0UG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgaWYgKG5lZWRDb3VudERheSA8IDQyKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IG5leHRNb250aC5kYXlzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgKGMpID0+IGMuZGF5SW5Nb250aCA9PT0gbGFzdERheS5kYXlJbk1vbnRoICYmIGMubW9udGggPT09IGxhc3REYXkubW9udGhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydFBvc2l0aW9uID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV4dERheXMgPSBuZXh0TW9udGguZGF5cy5zbGljZShzdGFydFBvc2l0aW9uLCBzdGFydFBvc2l0aW9uICsgbmVlZENvdW50RGF5KTtcbiAgICAgICAgICAgIG5ld0RheXMgPSBbLi4ubmV3RGF5cywgLi4ubmV4dERheXNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdEYXlzO1xuICAgIH1cbiAgICBwcml2YXRlIF9sb2FkTmV4dFdlZWsoZGF5czogRGF5W10sIG1vbnRoSW5mbzogQ2FsZW5kYXJNb250aEluZm8pOiBBcnJheTxEYXk+IHtcbiAgICAgICAgY29uc3QgZGF5c0NvdW50ID0gZGF5cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGxhc3REYXkgPSBkYXlzW2RheXNDb3VudCAtIDFdO1xuICAgICAgICBjb25zdCBsYXN0RGF5SW5kZXggPSBtb250aEluZm8uZGF5cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoYykgPT4gYy5kYXlJbk1vbnRoID09PSBsYXN0RGF5LmRheUluTW9udGggJiYgYy5tb250aCA9PT0gbGFzdERheS5tb250aFxuICAgICAgICApO1xuICAgICAgICBsZXQgbmV3RGF5cyA9IG1vbnRoSW5mby5kYXlzLnNsaWNlKGxhc3REYXlJbmRleCArIDEsIGxhc3REYXlJbmRleCArIDEgKyBkYXlzQ291bnQpO1xuICAgICAgICBpZiAobmV3RGF5cy5sZW5ndGggPCBkYXlzQ291bnQpIHtcbiAgICAgICAgICAgIC8vIHdlIG1vdmUgdG8gbmV4dCBtb250aFxuICAgICAgICAgICAgbGV0IGxhc3ROZXdEYXkgPSBuZXdEYXlzW25ld0RheXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAoIWxhc3ROZXdEYXkpIHtcbiAgICAgICAgICAgICAgICBsYXN0TmV3RGF5ID0gbGFzdERheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMubG9hZE1vbnRoKG1vbnRoSW5mby5kYXRlSW5mbywgMSk7XG4gICAgICAgICAgICBjb25zdCBsYXN0RGF5SW5kZXgyID0gbmV4dE1vbnRoLmRheXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgIChjKSA9PiBjLmRheUluTW9udGggPT09IGxhc3ROZXdEYXkuZGF5SW5Nb250aCAmJiBjLm1vbnRoID09PSBsYXN0TmV3RGF5Lm1vbnRoXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbmV3RGF5cyA9IG5ld0RheXMuY29uY2F0KFxuICAgICAgICAgICAgICAgIG5leHRNb250aC5kYXlzLnNsaWNlKGxhc3REYXlJbmRleDIgKyAxLCBsYXN0RGF5SW5kZXgyICsgMSArIChkYXlzQ291bnQgLSBuZXdEYXlzLmxlbmd0aCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdEYXlzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2xvYWRQcmV2TW9udGgoZGF5czogRGF5W10sIG1vbnRoSW5mbzogQ2FsZW5kYXJNb250aEluZm8pOiBBcnJheTxEYXk+IHtcbiAgICAgICAgY29uc3QgZGF5c0NvdW50ID0gZGF5cy5sZW5ndGg7XG4gICAgICAgIGxldCBmaXJzdERheSA9IGRheXNbMF07XG4gICAgICAgIGNvbnN0IGZpcnN0RGF5SW5kZXggPSBtb250aEluZm8uZGF5cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoYykgPT4gYy5kYXlJbk1vbnRoID09PSBmaXJzdERheS5kYXlJbk1vbnRoICYmIGMubW9udGggPT09IGZpcnN0RGF5Lm1vbnRoXG4gICAgICAgICk7XG4gICAgICAgIGxldCBuZXdEYXlzOiBEYXlbXSA9IG1vbnRoSW5mby5kYXlzLnNsaWNlKFxuICAgICAgICAgICAgZmlyc3REYXlJbmRleCAtIGRheXNDb3VudCA+IDAgPyBmaXJzdERheUluZGV4IC0gZGF5c0NvdW50IDogMCxcbiAgICAgICAgICAgIGZpcnN0RGF5SW5kZXhcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG5ld0RheXMubGVuZ3RoIDwgZGF5c0NvdW50KSB7XG4gICAgICAgICAgICAvLyB3ZSBtb3ZlIHRvIHByZXYgbW9udGhcbiAgICAgICAgICAgIGlmIChuZXdEYXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmaXJzdERheSA9IG5ld0RheXNbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZWVkQ291bnREYXkgPSBkYXlzQ291bnQgLSBuZXdEYXlzLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMubG9hZE1vbnRoKG1vbnRoSW5mby5kYXRlSW5mbywgLTEpO1xuICAgICAgICAgICAgbGV0IGVuZFBvc2l0aW9uID0gcHJldk1vbnRoLmRheXMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKG5lZWRDb3VudERheSA8IDQyKSB7XG4gICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBwcmV2TW9udGguZGF5cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIChjKSA9PiBjLmRheUluTW9udGggPT09IGZpcnN0RGF5LmRheUluTW9udGggJiYgYy5tb250aCA9PT0gZmlyc3REYXkubW9udGhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChlbmRQb3NpdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBwcmV2TW9udGguZGF5cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJldkRheXMgPSBwcmV2TW9udGguZGF5cy5zbGljZShlbmRQb3NpdGlvbiAtIG5lZWRDb3VudERheSwgZW5kUG9zaXRpb24pO1xuICAgICAgICAgICAgbmV3RGF5cyA9IFsuLi5wcmV2RGF5cywgLi4ubmV3RGF5c107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0RheXM7XG4gICAgfVxuICAgIHByaXZhdGUgX2xvYWRQcmV2V2VlayhkYXlzOiBEYXlbXSwgbW9udGhJbmZvOiBDYWxlbmRhck1vbnRoSW5mbyk6IEFycmF5PERheT4ge1xuICAgICAgICBjb25zdCBkYXlzQ291bnQgPSBkYXlzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZmlyc3REYXkgPSBkYXlzWzBdO1xuICAgICAgICBjb25zdCBmaXJzdERheUluZGV4ID0gbW9udGhJbmZvLmRheXMuZmluZEluZGV4KFxuICAgICAgICAgICAgKGMpID0+IGMuZGF5SW5Nb250aCA9PT0gZmlyc3REYXkuZGF5SW5Nb250aCAmJiBjLm1vbnRoID09PSBmaXJzdERheS5tb250aFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBwYXJ0SW5kZXhQcmV2ID0gZmlyc3REYXlJbmRleCAtIGRheXNDb3VudDtcbiAgICAgICAgbGV0IG5ld0RheXM6IERheVtdID0gW107XG4gICAgICAgIGlmIChwYXJ0SW5kZXhQcmV2IDwgMCkge1xuICAgICAgICAgICAgbmV3RGF5cyA9IGZpcnN0RGF5SW5kZXggLSAxID49IDAgPyBtb250aEluZm8uZGF5cy5zbGljZSgwLCBmaXJzdERheUluZGV4IC0gMSkgOiBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0RheXMgPSBtb250aEluZm8uZGF5cy5zbGljZShmaXJzdERheUluZGV4IC0gZGF5c0NvdW50LCBmaXJzdERheUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3RGF5cy5sZW5ndGggPCBkYXlzQ291bnQpIHtcbiAgICAgICAgICAgIC8vIHdlIG1vdmUgdG8gcHJldiBtb250aFxuICAgICAgICAgICAgbGV0IGZpcnN0TmV3RGF5ID0gbmV3RGF5c1swXTtcbiAgICAgICAgICAgIGlmICghZmlyc3ROZXdEYXkpIHtcbiAgICAgICAgICAgICAgICBmaXJzdE5ld0RheSA9IGZpcnN0RGF5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJldk1vbnRoID0gdGhpcy5sb2FkTW9udGgobW9udGhJbmZvLmRhdGVJbmZvLCAtMSk7XG4gICAgICAgICAgICBjb25zdCBmaXJzdERheUluZGV4MiA9IHByZXZNb250aC5kYXlzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAoYykgPT4gYy5kYXlJbk1vbnRoID09PSBmaXJzdE5ld0RheS5kYXlJbk1vbnRoICYmIGMubW9udGggPT09IGZpcnN0TmV3RGF5Lm1vbnRoXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbmV3RGF5cyA9IG5ld0RheXMuY29uY2F0KFxuICAgICAgICAgICAgICAgIHByZXZNb250aC5kYXlzLnNsaWNlKGZpcnN0RGF5SW5kZXgyIC0gKGRheXNDb3VudCAtIG5ld0RheXMubGVuZ3RoKSwgZmlyc3REYXlJbmRleDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdEYXlzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2FsZW5kYXJNb250aEluZm8oZGF0ZSk6IENhbGVuZGFyTW9udGhJbmZvIHtcbiAgICAgICAgY29uc3Qgc3RhcnRPZk1vbnRoID0gdGhpcy5fZGF0ZVNlcnZpY2Uuc3RhcnRPZk1vbnRoKGRhdGUpO1xuICAgICAgICBjb25zdCBtb21lbnREYXRlID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KGRhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb250aEluZm8oc3RhcnRPZk1vbnRoLCBtb21lbnREYXRlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBnZXRNb250aEluZm8oZGF0ZSwgdG9kYXkpOiBDYWxlbmRhck1vbnRoSW5mbyB7XG4gICAgICAgIGNvbnN0IGRheXM6IERheVtdID0gW107XG4gICAgICAgIGNvbnN0IGFjdGl2ZURhdGUgPSB0aGlzLl9kYXRlU2VydmljZS5nZXRNb21lbnQoZGF0ZSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0T2ZNb250aDogRGF0ZSA9IHRoaXMuX2RhdGVTZXJ2aWNlLnN0YXJ0T2ZNb250aChhY3RpdmVEYXRlKTtcbiAgICAgICAgY29uc3QgZW5kT2ZNb250aDogRGF0ZSA9IHRoaXMuX2RhdGVTZXJ2aWNlLmVuZE9mTW9udGgoYWN0aXZlRGF0ZSk7XG4gICAgICAgIGNvbnN0IGRhdGVJbmZvID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0RGF0ZUluZm8oYWN0aXZlRGF0ZSk7XG4gICAgICAgIGNvbnN0IGRheUluV2VlayA9IHRoaXMuX2RhdGVTZXJ2aWNlLmRheShzdGFydE9mTW9udGgpOyAvLyB3ZSBhZGQgMSB0byB0aGUgZGF5SW5XZWVrIGJlY2F1c2UgaXQncyBzdGFydHMgd2l0aCB6ZXJvXG5cbiAgICAgICAgbGV0IHdlZWtDb3VudGVyID0gMDtcbiAgICAgICAgbGV0IGRheUNvdW50ZXIgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQyOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVPZlN0YXJ0T2ZNb250aDogRGF0ZSA9IG5ldyBEYXRlKHN0YXJ0T2ZNb250aCk7XG4gICAgICAgICAgICBkYXRlT2ZTdGFydE9mTW9udGguc2V0RGF0ZShkYXRlT2ZTdGFydE9mTW9udGguZ2V0RGF0ZSgpICsgaSAtIGRheUluV2Vlayk7XG4gICAgICAgICAgICBjb25zdCB7IGRheSwgaXNJbk1vbnRoIH06IHsgZGF5OiBEYXk7IGlzSW5Nb250aDogYW55IH0gPSB0aGlzLl9nZXREYXkoXG4gICAgICAgICAgICAgICAgZGF0ZU9mU3RhcnRPZk1vbnRoLFxuICAgICAgICAgICAgICAgIGFjdGl2ZURhdGUsXG4gICAgICAgICAgICAgICAgdG9kYXksXG4gICAgICAgICAgICAgICAgZW5kT2ZNb250aCxcbiAgICAgICAgICAgICAgICBzdGFydE9mTW9udGgsXG4gICAgICAgICAgICAgICAgZGF0ZUluZm8sXG4gICAgICAgICAgICAgICAgaVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRheXMucHVzaChkYXkpO1xuICAgICAgICAgICAgZGF5Q291bnRlcisrO1xuICAgICAgICAgICAgaWYgKGlzSW5Nb250aCAmJiBkYXlDb3VudGVyID4gd2Vla0NvdW50ZXIgKiA3KSB7XG4gICAgICAgICAgICAgICAgd2Vla0NvdW50ZXIrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zdCBlbmRPZk1vbnRoSW5kZXggPSBkYXlzLmZpbmRJbmRleCgoYykgPT4gYy5pc0VuZE9mTW9udGgpO1xuICAgICAgICAvLyBpZiAoZW5kT2ZNb250aEluZGV4ID4gLTEgJiYgZGF5cy5sZW5ndGggLSBlbmRPZk1vbnRoSW5kZXggPiA3KSB7XG4gICAgICAgIC8vICAgICAvLyBkYXlzLnNwbGljZShkYXlzLmxlbmd0aCAtIDcsIDcpO1xuICAgICAgICAvLyB9XG4gICAgICAgIGNvbnN0IGNhbGVuZGFySW5mbyA9IG5ldyBDYWxlbmRhck1vbnRoSW5mbygpO1xuICAgICAgICBjYWxlbmRhckluZm8uaWQgPSBnZXRVbmlxdWVJZCgzKTtcbiAgICAgICAgY2FsZW5kYXJJbmZvLmRhdGVJbmZvID0gZGF0ZUluZm87XG4gICAgICAgIGNhbGVuZGFySW5mby5kYXlzID0gZGF5cztcbiAgICAgICAgY2FsZW5kYXJJbmZvLndlZWtzQ291bnQgPSB3ZWVrQ291bnRlcjtcbiAgICAgICAgLy8gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICByZXR1cm4gY2FsZW5kYXJJbmZvO1xuICAgIH1cbiAgICBwcml2YXRlIF9nZXREYXkoXG4gICAgICAgIGRhdGU6IERhdGUsXG4gICAgICAgIGFjdGl2ZURhdGU6IGFueSxcbiAgICAgICAgdG9kYXk6IGFueSxcbiAgICAgICAgZW5kT2ZNb250aDogRGF0ZSxcbiAgICAgICAgc3RhcnRPZk1vbnRoOiBEYXRlLFxuICAgICAgICBkYXRlSW5mbzogRGF0ZUluZm8sXG4gICAgICAgIGk6IG51bWJlclxuICAgICk6IHsgZGF5OiBEYXk7IGlzSW5Nb250aDogYm9vbGVhbiB9IHtcbiAgICAgICAgY29uc3QgaXNJbk1vbnRoID0gdGhpcy5fZGF0ZVNlcnZpY2UuaXNTYW1lKGRhdGUsIGFjdGl2ZURhdGUsICdtb250aCcpO1xuICAgICAgICBjb25zdCBtb21lbnRPZkRhdGUgPSB0aGlzLl9kYXRlU2VydmljZS5nZXRNb21lbnQoZGF0ZSk7XG4gICAgICAgIGNvbnN0IGlzVG9kYXkgPSBtb21lbnRPZkRhdGUuaXNTYW1lKHRvZGF5LCAnZGF5Jyk7XG4gICAgICAgIGNvbnN0IGRheUluTW9udGggPSB0aGlzLl9kYXRlU2VydmljZS5zdHJEYXRlKGRhdGUpO1xuICAgICAgICBjb25zdCBkYXlJbldlZWsgPSB0aGlzLl9kYXRlU2VydmljZS5kYXkoZGF0ZSk7XG4gICAgICAgIGNvbnN0IGlzRW5kT2ZNb250aCA9IG1vbWVudE9mRGF0ZS5pc1NhbWUoZW5kT2ZNb250aCwgJ2RheScpO1xuICAgICAgICBjb25zdCBpc1N0YXJ0T2ZNb250aCA9IG1vbWVudE9mRGF0ZS5pc1NhbWUoc3RhcnRPZk1vbnRoLCAnZGF5Jyk7XG4gICAgICAgIGNvbnN0IG1vbnRoRGF0ZUluZm8gPSBpc0luTW9udGggPyBkYXRlSW5mbyA6IHRoaXMuX2RhdGVTZXJ2aWNlLmdldERhdGVJbmZvKGRhdGUpO1xuICAgICAgICBjb25zdCBkYXk6IERheSA9IHtcbiAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGRheUluV2VlayxcbiAgICAgICAgICAgIHN0YXR1czogRGF5U3RhdHVzLk9wZW4sXG4gICAgICAgICAgICBkYXlJbk1vbnRoLFxuICAgICAgICAgICAgZGF5SW5Nb250aE46IHRoaXMuZ2V0TnVtYmVyKGRheUluTW9udGgpLFxuICAgICAgICAgICAgaXNUb2RheSxcbiAgICAgICAgICAgIGlzSW5Nb250aCxcbiAgICAgICAgICAgIGlzRW5kT2ZNb250aCxcbiAgICAgICAgICAgIGlzU3RhcnRPZk1vbnRoLFxuICAgICAgICAgICAgbW9tZW50T2ZEYXRlLFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoRGF0ZUluZm8ubW9udGgsXG4gICAgICAgICAgICB5ZWFyOiBtb250aERhdGVJbmZvLnllYXIsXG4gICAgICAgICAgICBtb250aE5hbWU6IG1vbnRoRGF0ZUluZm8ubW9udGhOYW1lLFxuICAgICAgICAgICAgZGF5TmFtZTogbW9tZW50T2ZEYXRlLmZvcm1hdCgnZGRkZCcpLFxuICAgICAgICAgICAgdGFza3M6IFtdLFxuICAgICAgICAgICAgbW9udGhEYXRlSW5mbyxcbiAgICAgICAgICAgIHJvdzogTWF0aC5mbG9vcihpIC8gNyArIDEpLFxuICAgICAgICAgICAgY29sOiA2IC0gKGkgJSA3KVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4geyBkYXksIGlzSW5Nb250aCB9O1xuICAgIH1cbn1cbiJdfQ==
615
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWNhbGVuZGFyL3NyYy9saWIvc2VydmljZXMvY2FsZW5kYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUVILGFBQWEsRUFDYixXQUFXLEVBQ1gsY0FBYyxFQUtqQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQU8sU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7QUFHNUUsTUFBTSxPQUFPLGVBQWdCLFNBQVEsYUFBYTtJQW1COUMsWUFBb0IsV0FBdUIsRUFBc0MsT0FBZ0I7UUFDN0YsS0FBSyxFQUFFLENBQUM7UUFEUSxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQVBuQyxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBc0IsRUFBRSxDQUFDLENBQUM7UUFFaEUsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBZSxLQUFLLENBQUMsQ0FBQztRQUN2RCw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVEsRUFBRSxDQUFDLENBQUM7UUFJakQsSUFBSSxDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZ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QUNoRSxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakYsTUFBTSxHQUFHLEdBQVE7WUFDYixLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUk7WUFDSixTQUFTO1lBQ1QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3RCLFVBQVU7WUFDVixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDdkMsT0FBTztZQUNQLFNBQVM7WUFDVCxZQUFZO1lBQ1osY0FBYztZQUNkLFlBQVk7WUFDWixLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUs7WUFDMUIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJO1lBQ3hCLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUztZQUNsQyxPQUFPLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDcEMsS0FBSyxFQUFFLEVBQUU7WUFDVCxhQUFhO1lBQ2IsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbkIsQ0FBQztRQUNGLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDOUIsQ0FBQzs7NEdBNXFCUSxlQUFlLDRDQW1CeUMsY0FBYztnSEFuQnRFLGVBQWU7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVTs7MEJBb0J1QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBEYXRlU2VydmljZSxcbiAgICBCYXNlQ29tcG9uZW50LFxuICAgIGdldFVuaXF1ZUlkLFxuICAgIGdldERhdGVTZXJ2aWNlLFxuICAgIExvZ1NlcnZpY2UsXG4gICAgRGF0ZUluZm8sXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBDYWxlbmRhckZpZWxkc1xufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5pbXBvcnQgeyBDYWxlbmRhck1vZGUsIENhbGVuZGFyTW9udGhJbmZvLCBEYXksIERheVN0YXR1cyB9IGZyb20gJy4uL21vZGVscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYWxlbmRhclNlcnZpY2UgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgICBzZWxlY3RlZCQ6IE9ic2VydmFibGU8Q2FsZW5kYXJNb250aEluZm8+O1xuICAgIGRheXMkOiBPYnNlcnZhYmxlPERheVtdPjtcbiAgICBtb2RlJDogT2JzZXJ2YWJsZTxDYWxlbmRhck1vZGU+O1xuICAgIHdlZWtNb2RlRGF5cyQ6IE9ic2VydmFibGU8RGF5W10+O1xuICAgIGNhbGVuZGFycyQ6IE9ic2VydmFibGU8Q2FsZW5kYXJNb250aEluZm9bXT47XG4gICAgY3VycmVudE1vbnRoSW5kZXgkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgdG9kYXk6IERhdGU7XG4gICAgdG9kYXlEYXk6IERheSB8IHVuZGVmaW5lZDtcbiAgICBfZGF0ZVNlcnZpY2U6IERhdGVTZXJ2aWNlO1xuXG4gICAgcHJpdmF0ZSBfdG9kYXlNb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvO1xuICAgIHByaXZhdGUgX2NhbGVuZGFyc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FsZW5kYXJNb250aEluZm9bXT4oW10pO1xuICAgIHByaXZhdGUgX3NlbGVjdGVkU291cmNlOiBCZWhhdmlvclN1YmplY3Q8Q2FsZW5kYXJNb250aEluZm8+O1xuICAgIHByaXZhdGUgX21vZGVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhbGVuZGFyTW9kZT4oJ2RheScpO1xuICAgIHByaXZhdGUgX2N1cnJlbnRNb250aEluZGV4U291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KC0xKTtcbiAgICBwcml2YXRlIF93ZWVrTW9kZURheXNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERheVtdPihbXSk7XG4gICAgcHJpdmF0ZSBfZGF5c1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF5W10+KFtdKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsIEBPcHRpb25hbCgpIEBJbmplY3QoJ0RhdGVfQ3VsdHVyZScpIGN1bHR1cmU/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fZGF0ZVNlcnZpY2UgPSBnZXREYXRlU2VydmljZShfbG9nU2VydmljZSwgY3VsdHVyZSk7XG4gICAgICAgIHRoaXMuZGF5cyQgPSB0aGlzLl9kYXlzU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLm1vZGUkID0gdGhpcy5fbW9kZVNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy53ZWVrTW9kZURheXMkID0gdGhpcy5fd2Vla01vZGVEYXlzU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLmNhbGVuZGFycyQgPSB0aGlzLl9jYWxlbmRhcnNTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoSW5kZXgkID0gdGhpcy5fY3VycmVudE1vbnRoSW5kZXhTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMuX2luaXRpbGl6ZSgpO1xuICAgIH1cbiAgICBnZXQgdG9kYXlNb250aEluZm8oKTogQ2FsZW5kYXJNb250aEluZm8ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9kYXlNb250aEluZm87XG4gICAgfVxuICAgIGdldCBzZWxlY3RlZE1vbnRoKCk6IENhbGVuZGFyTW9udGhJbmZvIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkU291cmNlLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGdldCBjYWxlbmRhcnMoKTogQXJyYXk8Q2FsZW5kYXJNb250aEluZm8+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyc1NvdXJjZS5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgd2Vla3NDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF5c1NvdXJjZS5nZXRWYWx1ZSgpLmxlbmd0aCAvIDc7XG4gICAgfVxuICAgIGdldCBkYXlzKCk6IEFycmF5PERheT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF5c1NvdXJjZS5nZXRWYWx1ZSgpO1xuICAgIH1cbiAgICBnZXQgTW9udGhzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVTZXJ2aWNlLm1vbnRoTmFtZXMoKTtcbiAgICB9XG5cbiAgICBsb2FkTW9udGhCeURhdGUodmFsdWU6IERhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9udGhJbmZvID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0RGF0ZUluZm8odmFsdWUpO1xuICAgICAgICB0aGlzLmxvYWRNb250aChtb250aEluZm8pO1xuICAgIH1cbiAgICBzZXREYXRlU2VydmljZShwcmltYXJ5Q2FsZW5kYXJUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbGV0IGRhdGVTZXJ2aWNlID0gdGhpcy5fZGF0ZVNlcnZpY2U7XG4gICAgICAgIHN3aXRjaCAocHJpbWFyeUNhbGVuZGFyVHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnUGVyc2lhbic6XG4gICAgICAgICAgICAgICAgZGF0ZVNlcnZpY2UgPSBnZXREYXRlU2VydmljZSh0aGlzLl9sb2dTZXJ2aWNlLCAnZmEtSVInKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0dyZWdvcmlhbic6XG4gICAgICAgICAgICAgICAgZGF0ZVNlcnZpY2UgPSBnZXREYXRlU2VydmljZSh0aGlzLl9sb2dTZXJ2aWNlLCAnZW4tVVMnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0FyYWJpYyc6XG4gICAgICAgICAgICAgICAgZGF0ZVNlcnZpY2UgPSBnZXREYXRlU2VydmljZSh0aGlzLl9sb2dTZXJ2aWNlLCAnYXItQUUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRlU2VydmljZSA9IGRhdGVTZXJ2aWNlO1xuICAgICAgICB0aGlzLl9pbml0aWxpemUoKTtcbiAgICB9XG4gICAgc2V0RGF5cyhkYXlzOiBEYXlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kYXlzU291cmNlLm5leHQoZGF5cyk7XG4gICAgfVxuXG4gICAgcHJlcGFyZVdlZWsobW9udGhJbmZvOiBDYWxlbmRhck1vbnRoSW5mbywgc3RhcnRJbmRleDogbnVtYmVyLCBkYXlzQ291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydERheXMgPSBtb250aEluZm8uZGF5cy5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgZGF5c0NvdW50KTtcbiAgICAgICAgdGhpcy5fd2Vla01vZGVEYXlzU291cmNlLm5leHQoc3RhcnREYXlzKTtcbiAgICB9XG4gICAgc2V0U2VsZWN0ZWQoc2VsZWN0ZWQ6IENhbGVuZGFyTW9udGhJbmZvKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkU291cmNlLm5leHQoc2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIHdlZWtEYXlzTWluKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVNlcnZpY2Uud2Vla2RheXNNaW4oKTtcbiAgICB9XG4gICAgd2Vla0RheXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlU2VydmljZS53ZWVrRGF5cygpO1xuICAgIH1cbiAgICBnb3RvVG9kYXkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZE1vbnRoKHRoaXMuX3RvZGF5TW9udGhJbmZvLmRhdGVJbmZvLCAwKTtcbiAgICAgICAgdGhpcy5zZXRNb2RlKFxuICAgICAgICAgICAgdGhpcy5fbW9kZVNvdXJjZS5nZXRWYWx1ZSgpLFxuICAgICAgICAgICAgdGhpcy5fdG9kYXlNb250aEluZm8uZGF5cy5maW5kKChjKSA9PiBjLmlzVG9kYXkpLFxuICAgICAgICAgICAgdGhpcy5fd2Vla01vZGVEYXlzU291cmNlLmdldFZhbHVlKCkubGVuZ3RoXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJhbmdlU2VsZWN0KHN0YXJ0RGF5OiBEYXksIGVuZERheTogRGF5LCBtb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBlbmREYXkuaW5kZXggLSBzdGFydERheS5pbmRleDtcbiAgICAgICAgaWYgKGRpZmYgPCA3KSB7XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ3dlZWsnLCBzdGFydERheSwgZGlmZiArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGlmZjIgPSBkaWZmICsgMTtcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnY3VzdG9tTW9udGgnKTtcbiAgICAgICAgICAgIHRoaXMuc2V0TW9udGgobW9udGhJbmZvLCBzdGFydERheSwgZGlmZjIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldE1vbnRoKG1vbnRoSW5mbzogQ2FsZW5kYXJNb250aEluZm8sIHN0YXJ0RGF5PzogRGF5LCBkaWZmOiBudW1iZXIgPSAwKTogdm9pZCB7XG4gICAgICAgIGlmIChzdGFydERheSAmJiBkaWZmID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHN0YXJ0RGF5LmluZGV4O1xuICAgICAgICAgICAgdGhpcy5sb2FkQ2FsZW5kYXJNb250aEluZm8obW9udGhJbmZvKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF5cyhtb250aEluZm8uZGF5cy5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgZGlmZikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2FkQ2FsZW5kYXJNb250aEluZm8obW9udGhJbmZvKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF5cyhtb250aEluZm8uZGF5cyk7XG4gICAgICAgICAgICAvLyBlbHNlIGlmIChtb2RlID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICAvLyAgIHN0YXJ0RGF5ID0gZGF5c0xvYWRlZFswXTtcbiAgICAgICAgICAgIC8vIGlmIChzdGFydERheSkgdGhpcy5sb2FkTW9udGgoc3RhcnREYXkubW9udGhEYXRlSW5mbyk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0TW9kZShtb2RlOiBDYWxlbmRhck1vZGUsIHN0YXJ0RGF5PzogRGF5LCBkYXlzQ291bnQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkTW9kZSA9IHRoaXMuX21vZGVTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgdGhpcy5fbW9kZVNvdXJjZS5uZXh0KG1vZGUpO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ21vbnRoJykge1xuICAgICAgICAgICAgdGhpcy5zZXRNb250aCh0aGlzLnNlbGVjdGVkTW9udGgsIHN0YXJ0RGF5KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnY3VzdG9tTW9udGgnKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1vbnRoKHRoaXMuc2VsZWN0ZWRNb250aCwgc3RhcnREYXksIHRoaXMuZGF5cy5sZW5ndGgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRheXNMb2FkZWQgPSB0aGlzLl93ZWVrTW9kZURheXNTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgZGF5c0NvdW50ID0gZGF5c0NvdW50ID8/IChtb2RlID09PSAnd2VlaycgPyA3IDogMSk7XG4gICAgICAgIGxldCBzdGFydEluZGV4ID0gMDtcbiAgICAgICAgaWYgKCFzdGFydERheSkge1xuICAgICAgICAgICAgaWYgKG1vZGUgPT09ICd3ZWVrJyB8fCBtb2RlID09PSAnZGF5Jykge1xuICAgICAgICAgICAgICAgIGlmIChvbGRNb2RlID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF5ID0gdGhpcy5zZWxlY3RlZE1vbnRoLmRheXMuZmluZCgoYykgPT4gYy5pc1RvZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhcnREYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydERheSA9IHRoaXMuc2VsZWN0ZWRNb250aC5kYXlzLmZpbmQoKGMpID0+IGMuaXNTdGFydE9mTW9udGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvbGRNb2RlID09PSAnY3VzdG9tTW9udGgnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF5ID0gdGhpcy5kYXlzWzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF5ID0gZGF5c0xvYWRlZFswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhcnREYXkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdGFydERheS5tb250aERhdGVJbmZvLm1vbnRoICE9PSB0aGlzLnNlbGVjdGVkTW9udGguZGF0ZUluZm8ubW9udGggfHxcbiAgICAgICAgICAgICAgICBzdGFydERheS5tb250aERhdGVJbmZvLnllYXIgIT09IHRoaXMuc2VsZWN0ZWRNb250aC5kYXRlSW5mby55ZWFyXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb250aChzdGFydERheS5tb250aERhdGVJbmZvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSB0aGlzLnNlbGVjdGVkTW9udGguZGF5cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgKGMpID0+IGMubW9udGggPT09IHN0YXJ0RGF5Py5tb250aCAmJiBjLmRheUluTW9udGggPT09IHN0YXJ0RGF5LmRheUluTW9udGhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVwYXJlV2Vlayh0aGlzLl9zZWxlY3RlZFNvdXJjZS5nZXRWYWx1ZSgpLCBzdGFydEluZGV4LCBkYXlzQ291bnQpO1xuICAgIH1cblxuICAgIGZpbGxXZWVrKHdlZWs6IHsgW2tleTogc3RyaW5nXTogYW55W10gfSwgZGF5c0NvdW50ID0gNyk6IHZvaWQge1xuICAgICAgICBjb25zdCBhcnI6IGFueVtdID0gT2JqZWN0LnZhbHVlcyh3ZWVrKTtcbiAgICAgICAgYXJyLmZvckVhY2goXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50PzogTWV0YW9iamVjdERhdGFNb2RlbDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eT86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ/OiBEYXRlO1xuICAgICAgICAgICAgICAgICAgICBlbmQ/OiBEYXRlO1xuICAgICAgICAgICAgICAgIH1bXVxuICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRGF0ZSA9IGVsLmVuZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlRGF0ZSAmJiB0aGlzLl9kYXRlU2VydmljZS5nZXRNb21lbnQodmFsdWVEYXRlKS5pc0JlZm9yZSh0aGlzLnRvZGF5LCAnZGF5JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLm9wYWNpdHkgPSAwLjU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGVsZW1lbnQubGVuZ3RoOyBpIDwgZGF5c0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wdXNoKHsgY29sU3BhbjogMSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICAgIHNvcnRUYXNrcyhjYWxlbmRhclRhc2tzOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sIGNhbGVuZGFyRmllbGRzOiBDYWxlbmRhckZpZWxkcyk6IEFycmF5PE1ldGFvYmplY3REYXRhTW9kZWw+IHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlRmllbGQgPSBjYWxlbmRhckZpZWxkcy5TdGFydERhdGU7XG4gICAgICAgIGNvbnN0IGVuZERhdGVGaWVsZCA9IGNhbGVuZGFyRmllbGRzLkVuZERhdGU7XG4gICAgICAgIGNhbGVuZGFyVGFza3Muc29ydCgodGFza0EsIHRhc2tCKSA9PiAodGFza0Fbc3RhcnREYXRlRmllbGRdIDwgdGFza0Jbc3RhcnREYXRlRmllbGRdID8gLTEgOiAxKSk7XG4gICAgICAgIGNhbGVuZGFyVGFza3Muc29ydCgodGFza0EsIHRhc2tCKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXNrQVN0YXJ0RGF0ZSA9IHRhc2tBW3N0YXJ0RGF0ZUZpZWxkXTtcbiAgICAgICAgICAgIGNvbnN0IHRhc2tCU3RhcnREYXRlID0gdGFza0Jbc3RhcnREYXRlRmllbGRdO1xuXG4gICAgICAgICAgICBjb25zdCBtb21lbnRUYXNrQVN0YXJ0RGF0ZSA9IHRoaXMuX2RhdGVTZXJ2aWNlLmdldE1vbWVudCh0YXNrQVN0YXJ0RGF0ZSk7XG4gICAgICAgICAgICBjb25zdCBtb21lbnRUYXNrQlN0YXJ0RGF0ZSA9IHRoaXMuX2RhdGVTZXJ2aWNlLmdldE1vbWVudCh0YXNrQlN0YXJ0RGF0ZSk7XG4gICAgICAgICAgICBpZiAobW9tZW50VGFza0FTdGFydERhdGUuaXNTYW1lKG1vbWVudFRhc2tCU3RhcnREYXRlLCAnZGF5JykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXNrQUVuZERhdGUgPSB0YXNrQVtlbmREYXRlRmllbGRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tCRW5kRGF0ZSA9IHRhc2tCW2VuZERhdGVGaWVsZF07XG4gICAgICAgICAgICAgICAgY29uc3QgZGF5QURpZmYgPSBtb21lbnRUYXNrQVN0YXJ0RGF0ZS5kaWZmKHRhc2tBRW5kRGF0ZSwgJ2RheScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRheUJEaWZmID0gbW9tZW50VGFza0JTdGFydERhdGUuZGlmZih0YXNrQkVuZERhdGUsICdkYXknKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF5QURpZmYgPiBkYXlCRGlmZikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRheUFEaWZmIDwgZGF5QkRpZmYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjYWxlbmRhclRhc2tzO1xuICAgIH1cbiAgICBjcmVhdGVXZWVrVGFzayhcbiAgICAgICAgZGF5czogRGF5W10sXG4gICAgICAgIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSxcbiAgICAgICAgY2FsZW5kYXJGaWVsZHM6IENhbGVuZGFyRmllbGRzLFxuICAgICAgICB0YXNrSGVpZ2h0OiBudW1iZXJcbiAgICApOiB7IFtrZXk6IHN0cmluZ106IGFueVtdIH0ge1xuICAgICAgICBjb25zdCB3ZWVrOiB7IFtrZXk6IHN0cmluZ106IGFueVtdIH0gPSB7fTtcbiAgICAgICAgZGF5cy5mb3JFYWNoKChkYXksIGRheUluZGV4KSA9PiB7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBtb0RhdGFMaXN0LmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY291bnRlckluZGV4ID0gY291bnRlci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGlmICghd2Vla1tjb3VudGVySW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtbY291bnRlckluZGV4XSA9IFtdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2Vla1tjb3VudGVySW5kZXhdLmxlbmd0aCA+IGRheUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBtID0gd2Vla1tjb3VudGVySW5kZXhdLmxlbmd0aDsgbSA8IGRheUluZGV4OyBtKyspIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla1tjb3VudGVySW5kZXhdLnB1c2goeyBjb2xTcGFuOiAxIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGFnYXIgd2Vla1tjb3VudGVyXSBjb2xzcGFuIGphIGRhc2h0IGFuamFtIGdhcmRhZC5cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdUYXNrOiBhbnkgPSB7IGNvbFNwYW46IDEgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb21lbnREYXkgPSB0aGlzLl9kYXRlU2VydmljZS5nZXRNb21lbnQoZGF5LmRhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vbWVudE9mU3RhcnRFdmVudCA9IHRoaXMuX2RhdGVTZXJ2aWNlLmdldE1vbWVudChldmVudFtjYWxlbmRhckZpZWxkcy5TdGFydERhdGVdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmREYXRlID0gZXZlbnRbY2FsZW5kYXJGaWVsZHMuRW5kRGF0ZV07XG4gICAgICAgICAgICAgICAgY29uc3QgbW9tZW50T2ZFbmRFdmVudCA9IHRoaXMuX2RhdGVTZXJ2aWNlLmdldE1vbWVudChlbmREYXRlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gTWF0aC5hYnMobW9tZW50T2ZTdGFydEV2ZW50LmRpZmYobW9tZW50T2ZFbmRFdmVudCwgJ2RheScpKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlmZiA9PT0gMCAmJiBtb21lbnREYXkuaXNTYW1lKG1vbWVudE9mU3RhcnRFdmVudCwgJ2RheScpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suY29sU3BhbiA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0TWludXRlVG9wID0gKGV2ZW50LiRTdGFydERhdGVJbmZvLm1pbnV0ZXMgKiB0YXNrSGVpZ2h0KSAvIDYwO1xuICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLnRvcCA9IGV2ZW50LiRTdGFydERhdGVJbmZvLmhvdXIgKiB0YXNrSGVpZ2h0ICsgc3RhcnRNaW51dGVUb3A7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZE1pbnV0ZVRvcCA9IChldmVudC4kRW5kRGF0ZUluZm8ubWludXRlcyAqIHRhc2tIZWlnaHQpIC8gNjA7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suaGVpZ2h0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIChldmVudC4kRW5kRGF0ZUluZm8uaG91ciAtIGV2ZW50LiRTdGFydERhdGVJbmZvLmhvdXIpICogdGFza0hlaWdodCArXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRNaW51dGVUb3AgLVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRNaW51dGVUb3A7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suZXZlbnQgPSBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5lbmRkYXlJc0luUm93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5zdGFydGRheUlzSW5Sb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmlzU3RhcnREYXkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmlzRW5kRGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5zdGFydCA9IG5ld1Rhc2suZW5kID0gZGF5LmRhdGU7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suaW5EYXkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuJFN0YXJ0RGF0ZUluZm8uaG91ciA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LiRTdGFydERhdGVJbmZvLm1pbnV0ZXMgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC4kRW5kRGF0ZUluZm8uaG91ciA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LiRFbmREYXRlSW5mby5taW51dGVzID4gMDtcbiAgICAgICAgICAgICAgICAgICAgd2Vla1tjb3VudGVySW5kZXhdLnNwbGljZShkYXlJbmRleCwgMCwgbmV3VGFzayk7XG4gICAgICAgICAgICAgICAgICAgIGRheS50YXNrcy5wdXNoKG5ld1Rhc2spO1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRpZmZGcm9tRW5kT2ZFdmVudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkaWZmRnJvbVN0YXJ0T2ZFdmVudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQmV0d2VlbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICBtb21lbnREYXkuaXNTYW1lT3JBZnRlcihtb21lbnRPZlN0YXJ0RXZlbnQsICdkYXknKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50RGF5LmlzU2FtZU9yQmVmb3JlKG1vbWVudE9mRW5kRXZlbnQsICdkYXknKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQmV0d2Vlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlmZkZyb21FbmRPZkV2ZW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWZmID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5jb2xTcGFuID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZGcm9tRW5kT2ZFdmVudCA9IE1hdGguYWJzKG1vbWVudERheS5kaWZmKG1vbWVudE9mRW5kRXZlbnQsICdkYXknKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZkZyb21TdGFydE9mRXZlbnQgPSBNYXRoLmFicyhtb21lbnREYXkuZGlmZihtb21lbnRPZlN0YXJ0RXZlbnQsICdkYXknKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTdGFydERheSA9IG1vbWVudERheS5pc1NhbWUobW9tZW50T2ZTdGFydEV2ZW50LCAnZGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNFbmREYXkgPSBtb21lbnREYXkuaXNTYW1lKG1vbWVudE9mRW5kRXZlbnQsICdkYXknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sU3BhbiA9IGRpZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1N0YXJ0RGF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFNwYW4gPSBkaWZmRnJvbUVuZE9mRXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbiA9IGRpZmYgKyAxOyAvLyBpbmNsdWRlIHRoZSBzdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUYXNrLmNvbFNwYW4gPSB0aGlzLl9jYWxjQ29sU3Bhbihjb2xTcGFuLCBkYXlJbmRleCwgZGF5cy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suaXNTdGFydERheSA9IGlzU3RhcnREYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5pc0VuZERheSA9IGlzRW5kRGF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Rhc2suaXNNaWRkbGUgPSAhaXNTdGFydERheSAmJiAhaXNFbmREYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGFzay5ldmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1Rhc2suaXNTdGFydERheSB8fCBkYXlJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHNwYW4gPSAwOyBzcGFuIDwgbmV3VGFzay5jb2xTcGFuOyBzcGFuKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFza0luZGV4ID0gZGF5SW5kZXggKyBzcGFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFza0luZGV4ID4gZGF5cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXNrRGF5SW5mbyA9IGRheXNbdGFza0luZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXNrSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm5ld1Rhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogdGFza0RheUluZm8uZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogZW5kRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU3RhcnREYXk6IHNwYW4gPT09IDAgPyBuZXdUYXNrLmlzU3RhcnREYXkgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRUYXNrOiBldmVudC4kU3RhcnREYXlJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kVGFzazogZXZlbnQuJEVuZERheUluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydGRheUlzSW5Sb3c6IGRheUluZGV4IC0gZGlmZkZyb21TdGFydE9mRXZlbnQgPiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGRheUlzSW5Sb3c6ICEhZGF5c1tkaWZmRnJvbUVuZE9mRXZlbnRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNaWRkbGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbiA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5ld1Rhc2suaXNNaWRkbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9kYXRlU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0TW9tZW50KHRhc2tEYXlJbmZvLmRhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pc0JldHdlZW4obW9tZW50T2ZTdGFydEV2ZW50LCBtb21lbnRPZkVuZEV2ZW50LCAnZGF5JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VuZERheTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuID09PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3VGFzay5pc0VuZERheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE1hdGguYWJzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRlU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldE1vbWVudCh0YXNrRGF5SW5mby5kYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRpZmYobW9tZW50T2ZFbmRFdmVudCwgJ2RheScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA8PSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sU3Bhbjogc3BhbiA9PT0gMCA/IG5ld1Rhc2suY29sU3BhbiA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vla1tjb3VudGVyLnRvU3RyaW5nKCldLnNwbGljZSh0YXNrSW5kZXgsIDAsIHRhc2tJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza0RheUluZm8udGFza3MucHVzaCh0YXNrSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHdlZWs7XG4gICAgfVxuXG4gICAgbG9hZE5leHQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLl9tb2RlU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSB0aGlzLl9zZWxlY3RlZFNvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2N1c3RvbU1vbnRoJzpcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheXMgPSB0aGlzLmRheXM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RheXMgPSB0aGlzLl9sb2FkTmV4dE1vbnRoKGRheXMsIHNlbGVjdGVkTW9udGgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERheXMobmV3RGF5cyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXlzID0gdGhpcy5fd2Vla01vZGVEYXlzU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RheXMgPSB0aGlzLl9sb2FkTmV4dFdlZWsoZGF5cywgc2VsZWN0ZWRNb250aCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtNb2RlRGF5c1NvdXJjZS5uZXh0KG5ld0RheXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xpc3QnOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdvdG9Nb250aChtb250aE5hbWU6IHN0cmluZywgbW9udGhJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSB0aGlzLnNlbGVjdGVkTW9udGguZGF0ZUluZm8ubW9udGg7XG4gICAgICAgIGNvbnN0IHZhbCA9IG1vbnRoSW5kZXggLSBzZWxlY3RlZE1vbnRoO1xuICAgICAgICB0aGlzLmxvYWRNb250aCh0aGlzLnNlbGVjdGVkTW9udGguZGF0ZUluZm8sIHZhbCk7XG4gICAgfVxuICAgIGdvdG9ZZWFyKHllYXI6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFllYXIgPSB0aGlzLnNlbGVjdGVkTW9udGguZGF0ZUluZm8ueWVhcjtcbiAgICAgICAgY29uc3QgdmFsID0geWVhciAtIHNlbGVjdGVkWWVhcjtcbiAgICAgICAgdGhpcy5pbmNyZWFzZVllYXIodmFsKTtcbiAgICB9XG4gICAgbG9hZE5leHRZZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluY3JlYXNlWWVhcigxKTtcbiAgICB9XG4gICAgbG9hZFByZXZZZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluY3JlYXNlWWVhcigtMSk7XG4gICAgfVxuICAgIGluY3JlYXNlWWVhcih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWRNb250aC5kYXRlSW5mby5tb21lbnQudG9EYXRlKCk7XG4gICAgICAgIHNlbGVjdGVkWWVhci5zZXRGdWxsWWVhcihzZWxlY3RlZFllYXIuZ2V0RnVsbFllYXIoKSArIHZhbHVlKTsgLy8gbmV4dCB5ZWFyXG4gICAgICAgIHRoaXMubG9hZE1vbnRoQnlEYXRlKHNlbGVjdGVkWWVhcik7XG4gICAgfVxuICAgIGxvYWRQcmV2aW91cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMuX21vZGVTb3VyY2UuZ2V0VmFsdWUoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRNb250aCA9IHRoaXMuX3NlbGVjdGVkU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgICAgY2FzZSAnY3VzdG9tTW9udGgnOlxuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5cyA9IHRoaXMuZGF5cztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RGF5cyA9IHRoaXMuX2xvYWRQcmV2TW9udGgoZGF5cywgc2VsZWN0ZWRNb250aCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF5cyhuZXdEYXlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXlzID0gdGhpcy5fd2Vla01vZGVEYXlzU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RheXMgPSB0aGlzLl9sb2FkUHJldldlZWsoZGF5cywgc2VsZWN0ZWRNb250aCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtNb2RlRGF5c1NvdXJjZS5uZXh0KG5ld0RheXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xpc3QnOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxvYWRNb250aChkYXRlSW5mbzogRGF0ZUluZm8sIGFkZE1vbnRoOiBudW1iZXIgPSAwKTogQ2FsZW5kYXJNb250aEluZm8ge1xuICAgICAgICBsZXQgbG9hZGVkTW9udGhEYXRlID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KGRhdGVJbmZvLmRhdGUpO1xuICAgICAgICBpZiAoYWRkTW9udGggPiAwKSB7XG4gICAgICAgICAgICBsb2FkZWRNb250aERhdGUgPSB0aGlzLl9kYXRlU2VydmljZS5hZGRNb250aChsb2FkZWRNb250aERhdGUsIGFkZE1vbnRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWRkTW9udGggPCAwKSB7XG4gICAgICAgICAgICBsb2FkZWRNb250aERhdGUgPSB0aGlzLl9kYXRlU2VydmljZS5zdWJ0cmFjdE1vbnRoKGxvYWRlZE1vbnRoRGF0ZSwgTWF0aC5hYnMoYWRkTW9udGgpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9hZGVkQ2FsZW5kYXJNb250aEluZm8gPSB0aGlzLmNhbGVuZGFycy5maW5kKChjKSA9PiBjLmRhdGVJbmZvLm1vbWVudC5pc1NhbWUobG9hZGVkTW9udGhEYXRlLCAnZGF5JykpO1xuICAgICAgICBpZiAoIWxvYWRlZENhbGVuZGFyTW9udGhJbmZvKSB7XG4gICAgICAgICAgICBsb2FkZWRDYWxlbmRhck1vbnRoSW5mbyA9IHRoaXMuZ2V0TW9udGhJbmZvKGxvYWRlZE1vbnRoRGF0ZSwgdGhpcy50b2RheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkQ2FsZW5kYXJNb250aEluZm8obG9hZGVkQ2FsZW5kYXJNb250aEluZm8pO1xuICAgICAgICByZXR1cm4gbG9hZGVkQ2FsZW5kYXJNb250aEluZm87XG4gICAgfVxuXG4gICAgbG9hZENhbGVuZGFyTW9udGhJbmZvKGxvYWRlZENhbGVuZGFyTW9udGhJbmZvOiBDYWxlbmRhck1vbnRoSW5mbyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjYWxlbmRhcnNJbmZvID0gWy4uLnRoaXMuY2FsZW5kYXJzXTtcbiAgICAgICAgY29uc3QgZXhpc3RzID0gY2FsZW5kYXJzSW5mby5maW5kKFxuICAgICAgICAgICAgKGMpID0+XG4gICAgICAgICAgICAgICAgYy5kYXRlSW5mby55ZWFyID09PSBsb2FkZWRDYWxlbmRhck1vbnRoSW5mby5kYXRlSW5mby55ZWFyICYmXG4gICAgICAgICAgICAgICAgYy5kYXRlSW5mby5tb250aCA9PT0gbG9hZGVkQ2FsZW5kYXJNb250aEluZm8uZGF0ZUluZm8ubW9udGhcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICAgIGNhbGVuZGFyc0luZm8ucHVzaChsb2FkZWRDYWxlbmRhck1vbnRoSW5mbyk7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhcnNTb3VyY2UubmV4dChjYWxlbmRhcnNJbmZvKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkKGxvYWRlZENhbGVuZGFyTW9udGhJbmZvKTtcbiAgICB9XG5cbiAgICBhZGRDYWxlbmRhck1vbnRoSW5mbyhjYWxlbmRhck1vbnRoSW5mbzogQ2FsZW5kYXJNb250aEluZm8pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3TGlzdCA9IHRoaXMuY2FsZW5kYXJzO1xuICAgICAgICBuZXdMaXN0LnB1c2goY2FsZW5kYXJNb250aEluZm8pO1xuICAgICAgICB0aGlzLl9jYWxlbmRhcnNTb3VyY2UubmV4dChuZXdMaXN0KTtcbiAgICB9XG5cbiAgICBnZXROdW1iZXIodmFsdWUpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBmaW5kID0gWyfbsCcsICfbsScsICfbsicsICfbsycsICfbtCcsICfbtScsICfbticsICfbtycsICfbuCcsICfbuSddO1xuICAgICAgICBjb25zdCByZXBsYWNlID0gWycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5J107XG4gICAgICAgIGxldCByZXBsYWNlU3RyaW5nID0gdmFsdWU7XG4gICAgICAgIGxldCByZWdleDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaW5kLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAoZmluZFtpXSwgJ2cnKTtcbiAgICAgICAgICAgIHJlcGxhY2VTdHJpbmcgPSByZXBsYWNlU3RyaW5nLnJlcGxhY2UocmVnZXgsIHJlcGxhY2VbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOdW1iZXIocmVwbGFjZVN0cmluZyk7XG4gICAgfVxuICAgIHByaXZhdGUgX2luaXRpbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2RheSA9IHRoaXMuX2RhdGVTZXJ2aWNlLmdldE1vbWVudChuZXcgRGF0ZSgpKTtcbiAgICAgICAgY29uc3QgdG9kYXlNb250aEluZm8gPSB0aGlzLmdldENhbGVuZGFyTW9udGhJbmZvKG5ldyBEYXRlKCkpO1xuICAgICAgICB0aGlzLnRvZGF5RGF5ID0gdG9kYXlNb250aEluZm8uZGF5cy5maW5kKChjKSA9PiBjLmlzVG9kYXkpO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FsZW5kYXJNb250aEluZm8+KHRvZGF5TW9udGhJbmZvKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCQgPSB0aGlzLl9zZWxlY3RlZFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJzU291cmNlLm5leHQoW3RvZGF5TW9udGhJbmZvXSk7XG4gICAgICAgIHRoaXMuc2V0RGF5cyh0b2RheU1vbnRoSW5mby5kYXlzKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZCh0b2RheU1vbnRoSW5mbyk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRNb250aEluZGV4U291cmNlLm5leHQodG9kYXlNb250aEluZm8uZGF0ZUluZm8ubW9udGgpO1xuICAgICAgICB0aGlzLl90b2RheU1vbnRoSW5mbyA9IHRvZGF5TW9udGhJbmZvO1xuICAgICAgICB0aGlzLmNhbGVuZGFycyQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jYWxjQ29sU3BhbihkaWZmOiBudW1iZXIsIGRheUluZGV4OiBudW1iZXIsIG1heENvbFNwYW46IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmIChkaWZmID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTWF0aC5mbG9vcihkaWZmIC8gbWF4Q29sU3BhbikgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF4Q29sU3BhbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXlJbmRleCArIGRpZmYgPiBtYXhDb2xTcGFuKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF4Q29sU3BhbiAtIGRheUluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaWZmO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2xvYWROZXh0TW9udGgoZGF5czogRGF5W10sIG1vbnRoSW5mbzogQ2FsZW5kYXJNb250aEluZm8pOiBBcnJheTxEYXk+IHtcbiAgICAgICAgY29uc3QgZGF5c0NvdW50ID0gZGF5cy5sZW5ndGg7XG4gICAgICAgIGxldCBsYXN0RGF5ID0gZGF5c1tkYXlzQ291bnQgLSAxXTtcbiAgICAgICAgY29uc3QgbGFzdERheUluZGV4ID0gbW9udGhJbmZvLmRheXMuZmluZEluZGV4KFxuICAgICAgICAgICAgKGMpID0+IGMuZGF5SW5Nb250aCA9PT0gbGFzdERheS5kYXlJbk1vbnRoICYmIGMubW9udGggPT09IGxhc3REYXkubW9udGhcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IG5ld0RheXMgPSBsYXN0RGF5SW5kZXggPiAtMSA/IG1vbnRoSW5mby5kYXlzLnNsaWNlKGxhc3REYXlJbmRleCArIDEsIGxhc3REYXlJbmRleCArIDEgKyBkYXlzQ291bnQpIDogW107XG4gICAgICAgIGlmIChuZXdEYXlzLmxlbmd0aCA8IGRheXNDb3VudCkge1xuICAgICAgICAgICAgLy8gd2UgbW92ZSB0byBuZXh0IG1vbnRoXG4gICAgICAgICAgICBpZiAobmV3RGF5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGFzdERheSA9IG5ld0RheXNbbmV3RGF5cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5lZWRDb3VudERheSA9IGRheXNDb3VudCAtIG5ld0RheXMubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgbmV4dE1vbnRoID0gdGhpcy5sb2FkTW9udGgobW9udGhJbmZvLmRhdGVJbmZvLCAxKTtcbiAgICAgICAgICAgIGxldCBzdGFydFBvc2l0aW9uID0gMDtcbiAgICAgICAgICAgIGlmIChuZWVkQ291bnREYXkgPCA0Mikge1xuICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBuZXh0TW9udGguZGF5cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIChjKSA9PiBjLmRheUluTW9udGggPT09IGxhc3REYXkuZGF5SW5Nb250aCAmJiBjLm1vbnRoID09PSBsYXN0RGF5Lm1vbnRoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbisrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5leHREYXlzID0gbmV4dE1vbnRoLmRheXMuc2xpY2Uoc3RhcnRQb3NpdGlvbiwgc3RhcnRQb3NpdGlvbiArIG5lZWRDb3VudERheSk7XG4gICAgICAgICAgICBuZXdEYXlzID0gWy4uLm5ld0RheXMsIC4uLm5leHREYXlzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3RGF5cztcbiAgICB9XG4gICAgcHJpdmF0ZSBfbG9hZE5leHRXZWVrKGRheXM6IERheVtdLCBtb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvKTogQXJyYXk8RGF5PiB7XG4gICAgICAgIGNvbnN0IGRheXNDb3VudCA9IGRheXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBsYXN0RGF5ID0gZGF5c1tkYXlzQ291bnQgLSAxXTtcbiAgICAgICAgY29uc3QgbGFzdERheUluZGV4ID0gbW9udGhJbmZvLmRheXMuZmluZEluZGV4KFxuICAgICAgICAgICAgKGMpID0+IGMuZGF5SW5Nb250aCA9PT0gbGFzdERheS5kYXlJbk1vbnRoICYmIGMubW9udGggPT09IGxhc3REYXkubW9udGhcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IG5ld0RheXMgPSBtb250aEluZm8uZGF5cy5zbGljZShsYXN0RGF5SW5kZXggKyAxLCBsYXN0RGF5SW5kZXggKyAxICsgZGF5c0NvdW50KTtcbiAgICAgICAgaWYgKG5ld0RheXMubGVuZ3RoIDwgZGF5c0NvdW50KSB7XG4gICAgICAgICAgICAvLyB3ZSBtb3ZlIHRvIG5leHQgbW9udGhcbiAgICAgICAgICAgIGxldCBsYXN0TmV3RGF5ID0gbmV3RGF5c1tuZXdEYXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKCFsYXN0TmV3RGF5KSB7XG4gICAgICAgICAgICAgICAgbGFzdE5ld0RheSA9IGxhc3REYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmxvYWRNb250aChtb250aEluZm8uZGF0ZUluZm8sIDEpO1xuICAgICAgICAgICAgY29uc3QgbGFzdERheUluZGV4MiA9IG5leHRNb250aC5kYXlzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAoYykgPT4gYy5kYXlJbk1vbnRoID09PSBsYXN0TmV3RGF5LmRheUluTW9udGggJiYgYy5tb250aCA9PT0gbGFzdE5ld0RheS5tb250aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG5ld0RheXMgPSBuZXdEYXlzLmNvbmNhdChcbiAgICAgICAgICAgICAgICBuZXh0TW9udGguZGF5cy5zbGljZShsYXN0RGF5SW5kZXgyICsgMSwgbGFzdERheUluZGV4MiArIDEgKyAoZGF5c0NvdW50IC0gbmV3RGF5cy5sZW5ndGgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3RGF5cztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9sb2FkUHJldk1vbnRoKGRheXM6IERheVtdLCBtb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvKTogQXJyYXk8RGF5PiB7XG4gICAgICAgIGNvbnN0IGRheXNDb3VudCA9IGRheXMubGVuZ3RoO1xuICAgICAgICBsZXQgZmlyc3REYXkgPSBkYXlzWzBdO1xuICAgICAgICBjb25zdCBmaXJzdERheUluZGV4ID0gbW9udGhJbmZvLmRheXMuZmluZEluZGV4KFxuICAgICAgICAgICAgKGMpID0+IGMuZGF5SW5Nb250aCA9PT0gZmlyc3REYXkuZGF5SW5Nb250aCAmJiBjLm1vbnRoID09PSBmaXJzdERheS5tb250aFxuICAgICAgICApO1xuICAgICAgICBsZXQgbmV3RGF5czogRGF5W10gPSBtb250aEluZm8uZGF5cy5zbGljZShcbiAgICAgICAgICAgIGZpcnN0RGF5SW5kZXggLSBkYXlzQ291bnQgPiAwID8gZmlyc3REYXlJbmRleCAtIGRheXNDb3VudCA6IDAsXG4gICAgICAgICAgICBmaXJzdERheUluZGV4XG4gICAgICAgICk7XG4gICAgICAgIGlmIChuZXdEYXlzLmxlbmd0aCA8IGRheXNDb3VudCkge1xuICAgICAgICAgICAgLy8gd2UgbW92ZSB0byBwcmV2IG1vbnRoXG4gICAgICAgICAgICBpZiAobmV3RGF5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmlyc3REYXkgPSBuZXdEYXlzWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmVlZENvdW50RGF5ID0gZGF5c0NvdW50IC0gbmV3RGF5cy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmxvYWRNb250aChtb250aEluZm8uZGF0ZUluZm8sIC0xKTtcbiAgICAgICAgICAgIGxldCBlbmRQb3NpdGlvbiA9IHByZXZNb250aC5kYXlzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChuZWVkQ291bnREYXkgPCA0Mikge1xuICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gcHJldk1vbnRoLmRheXMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAoYykgPT4gYy5kYXlJbk1vbnRoID09PSBmaXJzdERheS5kYXlJbk1vbnRoICYmIGMubW9udGggPT09IGZpcnN0RGF5Lm1vbnRoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gcHJldk1vbnRoLmRheXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByZXZEYXlzID0gcHJldk1vbnRoLmRheXMuc2xpY2UoZW5kUG9zaXRpb24gLSBuZWVkQ291bnREYXksIGVuZFBvc2l0aW9uKTtcbiAgICAgICAgICAgIG5ld0RheXMgPSBbLi4ucHJldkRheXMsIC4uLm5ld0RheXNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdEYXlzO1xuICAgIH1cbiAgICBwcml2YXRlIF9sb2FkUHJldldlZWsoZGF5czogRGF5W10sIG1vbnRoSW5mbzogQ2FsZW5kYXJNb250aEluZm8pOiBBcnJheTxEYXk+IHtcbiAgICAgICAgY29uc3QgZGF5c0NvdW50ID0gZGF5cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF5ID0gZGF5c1swXTtcbiAgICAgICAgY29uc3QgZmlyc3REYXlJbmRleCA9IG1vbnRoSW5mby5kYXlzLmZpbmRJbmRleChcbiAgICAgICAgICAgIChjKSA9PiBjLmRheUluTW9udGggPT09IGZpcnN0RGF5LmRheUluTW9udGggJiYgYy5tb250aCA9PT0gZmlyc3REYXkubW9udGhcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcGFydEluZGV4UHJldiA9IGZpcnN0RGF5SW5kZXggLSBkYXlzQ291bnQ7XG4gICAgICAgIGxldCBuZXdEYXlzOiBEYXlbXSA9IFtdO1xuICAgICAgICBpZiAocGFydEluZGV4UHJldiA8IDApIHtcbiAgICAgICAgICAgIG5ld0RheXMgPSBmaXJzdERheUluZGV4IC0gMSA+PSAwID8gbW9udGhJbmZvLmRheXMuc2xpY2UoMCwgZmlyc3REYXlJbmRleCAtIDEpIDogW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdEYXlzID0gbW9udGhJbmZvLmRheXMuc2xpY2UoZmlyc3REYXlJbmRleCAtIGRheXNDb3VudCwgZmlyc3REYXlJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld0RheXMubGVuZ3RoIDwgZGF5c0NvdW50KSB7XG4gICAgICAgICAgICAvLyB3ZSBtb3ZlIHRvIHByZXYgbW9udGhcbiAgICAgICAgICAgIGxldCBmaXJzdE5ld0RheSA9IG5ld0RheXNbMF07XG4gICAgICAgICAgICBpZiAoIWZpcnN0TmV3RGF5KSB7XG4gICAgICAgICAgICAgICAgZmlyc3ROZXdEYXkgPSBmaXJzdERheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMubG9hZE1vbnRoKG1vbnRoSW5mby5kYXRlSW5mbywgLTEpO1xuICAgICAgICAgICAgY29uc3QgZmlyc3REYXlJbmRleDIgPSBwcmV2TW9udGguZGF5cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgKGMpID0+IGMuZGF5SW5Nb250aCA9PT0gZmlyc3ROZXdEYXkuZGF5SW5Nb250aCAmJiBjLm1vbnRoID09PSBmaXJzdE5ld0RheS5tb250aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG5ld0RheXMgPSBuZXdEYXlzLmNvbmNhdChcbiAgICAgICAgICAgICAgICBwcmV2TW9udGguZGF5cy5zbGljZShmaXJzdERheUluZGV4MiAtIChkYXlzQ291bnQgLSBuZXdEYXlzLmxlbmd0aCksIGZpcnN0RGF5SW5kZXgyKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3RGF5cztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENhbGVuZGFyTW9udGhJbmZvKGRhdGUpOiBDYWxlbmRhck1vbnRoSW5mbyB7XG4gICAgICAgIGNvbnN0IHN0YXJ0T2ZNb250aCA9IHRoaXMuX2RhdGVTZXJ2aWNlLnN0YXJ0T2ZNb250aChkYXRlKTtcbiAgICAgICAgY29uc3QgbW9tZW50RGF0ZSA9IHRoaXMuX2RhdGVTZXJ2aWNlLmdldE1vbWVudChkYXRlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9udGhJbmZvKHN0YXJ0T2ZNb250aCwgbW9tZW50RGF0ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0TW9udGhJbmZvKGRhdGUsIHRvZGF5KTogQ2FsZW5kYXJNb250aEluZm8ge1xuICAgICAgICBjb25zdCBkYXlzOiBEYXlbXSA9IFtdO1xuICAgICAgICBjb25zdCBhY3RpdmVEYXRlID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KGRhdGUpO1xuICAgICAgICBjb25zdCBzdGFydE9mTW9udGg6IERhdGUgPSB0aGlzLl9kYXRlU2VydmljZS5zdGFydE9mTW9udGgoYWN0aXZlRGF0ZSk7XG4gICAgICAgIGNvbnN0IGVuZE9mTW9udGg6IERhdGUgPSB0aGlzLl9kYXRlU2VydmljZS5lbmRPZk1vbnRoKGFjdGl2ZURhdGUpO1xuICAgICAgICBjb25zdCBkYXRlSW5mbyA9IHRoaXMuX2RhdGVTZXJ2aWNlLmdldERhdGVJbmZvKGFjdGl2ZURhdGUpO1xuICAgICAgICBjb25zdCBkYXlJbldlZWsgPSB0aGlzLl9kYXRlU2VydmljZS5kYXkoc3RhcnRPZk1vbnRoKTsgLy8gd2UgYWRkIDEgdG8gdGhlIGRheUluV2VlayBiZWNhdXNlIGl0J3Mgc3RhcnRzIHdpdGggemVyb1xuXG4gICAgICAgIGxldCB3ZWVrQ291bnRlciA9IDA7XG4gICAgICAgIGxldCBkYXlDb3VudGVyID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0MjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlT2ZTdGFydE9mTW9udGg6IERhdGUgPSBuZXcgRGF0ZShzdGFydE9mTW9udGgpO1xuICAgICAgICAgICAgZGF0ZU9mU3RhcnRPZk1vbnRoLnNldERhdGUoZGF0ZU9mU3RhcnRPZk1vbnRoLmdldERhdGUoKSArIGkgLSBkYXlJbldlZWspO1xuICAgICAgICAgICAgY29uc3QgeyBkYXksIGlzSW5Nb250aCB9OiB7IGRheTogRGF5OyBpc0luTW9udGg6IGFueSB9ID0gdGhpcy5fZ2V0RGF5KFxuICAgICAgICAgICAgICAgIGRhdGVPZlN0YXJ0T2ZNb250aCxcbiAgICAgICAgICAgICAgICBhY3RpdmVEYXRlLFxuICAgICAgICAgICAgICAgIHRvZGF5LFxuICAgICAgICAgICAgICAgIGVuZE9mTW9udGgsXG4gICAgICAgICAgICAgICAgc3RhcnRPZk1vbnRoLFxuICAgICAgICAgICAgICAgIGRhdGVJbmZvLFxuICAgICAgICAgICAgICAgIGlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkYXlzLnB1c2goZGF5KTtcbiAgICAgICAgICAgIGRheUNvdW50ZXIrKztcbiAgICAgICAgICAgIGlmIChpc0luTW9udGggJiYgZGF5Q291bnRlciA+IHdlZWtDb3VudGVyICogNykge1xuICAgICAgICAgICAgICAgIHdlZWtDb3VudGVyKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgZW5kT2ZNb250aEluZGV4ID0gZGF5cy5maW5kSW5kZXgoKGMpID0+IGMuaXNFbmRPZk1vbnRoKTtcbiAgICAgICAgLy8gaWYgKGVuZE9mTW9udGhJbmRleCA+IC0xICYmIGRheXMubGVuZ3RoIC0gZW5kT2ZNb250aEluZGV4ID4gNykge1xuICAgICAgICAvLyAgICAgLy8gZGF5cy5zcGxpY2UoZGF5cy5sZW5ndGggLSA3LCA3KTtcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zdCBjYWxlbmRhckluZm8gPSBuZXcgQ2FsZW5kYXJNb250aEluZm8oKTtcbiAgICAgICAgY2FsZW5kYXJJbmZvLmlkID0gZ2V0VW5pcXVlSWQoMyk7XG4gICAgICAgIGNhbGVuZGFySW5mby5kYXRlSW5mbyA9IGRhdGVJbmZvO1xuICAgICAgICBjYWxlbmRhckluZm8uZGF5cyA9IGRheXM7XG4gICAgICAgIGNhbGVuZGFySW5mby53ZWVrc0NvdW50ID0gd2Vla0NvdW50ZXI7XG4gICAgICAgIC8vIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgcmV0dXJuIGNhbGVuZGFySW5mbztcbiAgICB9XG4gICAgcHJpdmF0ZSBfZ2V0RGF5KFxuICAgICAgICBkYXRlOiBEYXRlLFxuICAgICAgICBhY3RpdmVEYXRlOiBhbnksXG4gICAgICAgIHRvZGF5OiBhbnksXG4gICAgICAgIGVuZE9mTW9udGg6IERhdGUsXG4gICAgICAgIHN0YXJ0T2ZNb250aDogRGF0ZSxcbiAgICAgICAgZGF0ZUluZm86IERhdGVJbmZvLFxuICAgICAgICBpOiBudW1iZXJcbiAgICApOiB7IGRheTogRGF5OyBpc0luTW9udGg6IGJvb2xlYW4gfSB7XG4gICAgICAgIGNvbnN0IGlzSW5Nb250aCA9IHRoaXMuX2RhdGVTZXJ2aWNlLmlzU2FtZShkYXRlLCBhY3RpdmVEYXRlLCAnbW9udGgnKTtcbiAgICAgICAgY29uc3QgbW9tZW50T2ZEYXRlID0gdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0TW9tZW50KGRhdGUpO1xuICAgICAgICBjb25zdCBpc1RvZGF5ID0gbW9tZW50T2ZEYXRlLmlzU2FtZSh0b2RheSwgJ2RheScpO1xuICAgICAgICBjb25zdCBkYXlJbk1vbnRoID0gdGhpcy5fZGF0ZVNlcnZpY2Uuc3RyRGF0ZShkYXRlKTtcbiAgICAgICAgY29uc3QgZGF5SW5XZWVrID0gdGhpcy5fZGF0ZVNlcnZpY2UuZGF5KGRhdGUpO1xuICAgICAgICBjb25zdCBpc0VuZE9mTW9udGggPSBtb21lbnRPZkRhdGUuaXNTYW1lKGVuZE9mTW9udGgsICdkYXknKTtcbiAgICAgICAgY29uc3QgaXNTdGFydE9mTW9udGggPSBtb21lbnRPZkRhdGUuaXNTYW1lKHN0YXJ0T2ZNb250aCwgJ2RheScpO1xuICAgICAgICBjb25zdCBtb250aERhdGVJbmZvID0gaXNJbk1vbnRoID8gZGF0ZUluZm8gOiB0aGlzLl9kYXRlU2VydmljZS5nZXREYXRlSW5mbyhkYXRlKTtcbiAgICAgICAgY29uc3QgZGF5OiBEYXkgPSB7XG4gICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBkYXlJbldlZWssXG4gICAgICAgICAgICBzdGF0dXM6IERheVN0YXR1cy5PcGVuLFxuICAgICAgICAgICAgZGF5SW5Nb250aCxcbiAgICAgICAgICAgIGRheUluTW9udGhOOiB0aGlzLmdldE51bWJlcihkYXlJbk1vbnRoKSxcbiAgICAgICAgICAgIGlzVG9kYXksXG4gICAgICAgICAgICBpc0luTW9udGgsXG4gICAgICAgICAgICBpc0VuZE9mTW9udGgsXG4gICAgICAgICAgICBpc1N0YXJ0T2ZNb250aCxcbiAgICAgICAgICAgIG1vbWVudE9mRGF0ZSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aERhdGVJbmZvLm1vbnRoLFxuICAgICAgICAgICAgeWVhcjogbW9udGhEYXRlSW5mby55ZWFyLFxuICAgICAgICAgICAgbW9udGhOYW1lOiBtb250aERhdGVJbmZvLm1vbnRoTmFtZSxcbiAgICAgICAgICAgIGRheU5hbWU6IG1vbWVudE9mRGF0ZS5mb3JtYXQoJ2RkZGQnKSxcbiAgICAgICAgICAgIHRhc2tzOiBbXSxcbiAgICAgICAgICAgIG1vbnRoRGF0ZUluZm8sXG4gICAgICAgICAgICByb3c6IE1hdGguZmxvb3IoaSAvIDcgKyAxKSxcbiAgICAgICAgICAgIGNvbDogNiAtIChpICUgNylcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgZGF5LCBpc0luTW9udGggfTtcbiAgICB9XG59XG4iXX0=
@@ -53,7 +53,7 @@ class CalendarService extends BaseComponent {
53
53
  super();
54
54
  this._logService = _logService;
55
55
  this._calendarsSource = new BehaviorSubject([]);
56
- this._modeSource = new BehaviorSubject('month');
56
+ this._modeSource = new BehaviorSubject('day');
57
57
  this._currentMonthIndexSource = new BehaviorSubject(-1);
58
58
  this._weekModeDaysSource = new BehaviorSubject([]);
59
59
  this._daysSource = new BehaviorSubject([]);