@smart-webcomponents-angular/combobox 25.0.0 → 25.5.5

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.
@@ -324,7 +324,7 @@ export class ComboBoxComponent extends BaseElement {
324
324
  set itemMeasureMode(value) {
325
325
  this.nativeElement ? this.nativeElement.itemMeasureMode = value : undefined;
326
326
  }
327
- /** @description A getter method that retrieves and returns an array containing all list ('') elements currently present within the dropdown menu. This allows you to easily access and manipulate every item displayed in the dropdown. */
327
+ /** @description A getter method that retrieves and returns an array containing all list ('li') elements currently present within the dropdown menu. This allows you to easily access and manipulate every item displayed in the dropdown. */
328
328
  get items() {
329
329
  return this.nativeElement ? this.nativeElement.items : undefined;
330
330
  }
@@ -1112,4 +1112,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.6", ngImpor
1112
1112
  }], onTokenClick: [{
1113
1113
  type: Output
1114
1114
  }] } });
1115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQuY29tYm9ib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb21ib2JveC9zcmMvc21hcnQuY29tYm9ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFhLFNBQVMsRUFBNkIsS0FBSyxFQUErQyxVQUFVLEVBQTJCLE1BQU0sRUFBRSxZQUFZLEVBQThCLE1BQU0sZUFBZSxDQUFDO0FBQzNOLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJckQsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUZ6RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFVeEMsTUFBTSxtQ0FBbUMsR0FBUTtJQUM3QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7SUFDaEQsS0FBSyxFQUFFLElBQUk7Q0FDZCxDQUFBO0FBUUQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFFakQsWUFBWSxHQUF5QjtRQUNwQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFJSixrQkFBYSxHQUFVLEVBQUUsQ0FBQztRQWEzQjs7O1VBR0U7UUFDSCxjQUFTLEdBQXlCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUMxQzs7O1VBR0U7UUFDSCxlQUFVLEdBQWMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBNGtCdkM7Ozs7Ozs7OztVQVNFO1FBQ1EsYUFBUSxHQUE4QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRW5FOzhDQUNzQztRQUM1QixZQUFPLEdBQThCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbEU7OENBQ3NDO1FBQzVCLGNBQVMsR0FBOEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVwRTs7Ozs7OztVQU9FO1FBQ1EsZ0JBQVcsR0FBOEIsSUFBSSxZ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QkFVRixhQUFhO3NCQURoQixLQUFLO2dCQVVGLE1BQU07c0JBRFQsS0FBSztnQkFVRixhQUFhO3NCQURoQixLQUFLO2dCQVVGLEtBQUs7c0JBRFIsS0FBSztnQkFVRixhQUFhO3NCQURoQixLQUFLO2dCQVVGLFdBQVc7c0JBRGQsS0FBSztnQkFVRixLQUFLO3NCQURSLEtBQUs7Z0JBVUYsV0FBVztzQkFEZCxLQUFLO2dCQVVGLDJCQUEyQjtzQkFEOUIsS0FBSztnQkFVRixXQUFXO3NCQURkLEtBQUs7Z0JBa0JJLFFBQVE7c0JBQWpCLE1BQU07Z0JBSUcsT0FBTztzQkFBaEIsTUFBTTtnQkFJRyxTQUFTO3NCQUFsQixNQUFNO2dCQVVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBSUcsTUFBTTtzQkFBZixNQUFNO2dCQUlHLFNBQVM7c0JBQWxCLE1BQU07Z0JBTUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFNRyxXQUFXO3NCQUFwQixNQUFNO2dCQUlHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFJRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBSUcsWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbWJvQm94IH0gZnJvbSAnLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBBdXRvQ29tcGxldGUsIERyb3BEb3duQnV0dG9uUG9zaXRpb24sIERyb3BEb3duT3Blbk1vZGUsIERyb3BEb3duUG9zaXRpb24sIENvbWJvQm94RXNjS2V5TW9kZSwgRmlsdGVyTW9kZSwgSG9yaXpvbnRhbFNjcm9sbEJhclZpc2liaWxpdHksIFNlYXJjaE1vZGUsIExpc3RJdGVtTWVhc3VyZU1vZGUsIFZlcnRpY2FsQWxpZ25tZW50LCBSZXNpemVNb2RlLCBTZWxlY3Rpb25EaXNwbGF5TW9kZSwgTGlzdFNlbGVjdGlvbk1vZGUsIFZlcnRpY2FsU2Nyb2xsQmFyVmlzaWJpbGl0eSwgRWxlbWVudFJlbmRlck1vZGV9IGZyb20gJy4vLi4vaW5kZXgnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBEaXJlY3RpdmUsIEFmdGVyVmlld0luaXQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzLCBmb3J3YXJkUmVmLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFF1ZXJ5TGlzdCwgQ29udGVudENoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlRWxlbWVudCwgU21hcnQgfSBmcm9tICcuL3NtYXJ0LmVsZW1lbnQnO1xuZXhwb3J0IHsgQXV0b0NvbXBsZXRlLCBEcm9wRG93bkJ1dHRvblBvc2l0aW9uLCBEcm9wRG93bk9wZW5Nb2RlLCBEcm9wRG93blBvc2l0aW9uLCBDb21ib0JveEVzY0tleU1vZGUsIEZpbHRlck1vZGUsIEhvcml6b250YWxTY3JvbGxCYXJWaXNpYmlsaXR5LCBTZWFyY2hNb2RlLCBMaXN0SXRlbU1lYXN1cmVNb2RlLCBWZXJ0aWNhbEFsaWdubWVudCwgUmVzaXplTW9kZSwgU2VsZWN0aW9uRGlzcGxheU1vZGUsIExpc3RTZWxlY3Rpb25Nb2RlLCBWZXJ0aWNhbFNjcm9sbEJhclZpc2liaWxpdHksIEVsZW1lbnRSZW5kZXJNb2RlfSBmcm9tICcuLy4uL2luZGV4JztcbmV4cG9ydCB7IFNtYXJ0IH0gZnJvbSAnLi9zbWFydC5lbGVtZW50JztcbmV4cG9ydCB7IENvbWJvQm94IH0gZnJvbSAnLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cblxuXG5pbXBvcnQgeyBMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vc21hcnQubGlzdGl0ZW0nO1xuXG5pbXBvcnQgeyBMaXN0SXRlbXNHcm91cENvbXBvbmVudCB9IGZyb20gJy4vc21hcnQubGlzdGl0ZW1zZ3JvdXAnO1xuXG5jb25zdCBDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbWJvQm94Q29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxufVxuXG5ARGlyZWN0aXZlKHtcblx0ZXhwb3J0QXM6ICdzbWFydC1jb21iby1ib3gnLFx0c2VsZWN0b3I6ICdzbWFydC1jb21iby1ib3gsIFtzbWFydC1jb21iby1ib3hdJyxcblx0cHJvdmlkZXJzOiBbQ1VTVE9NX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1JdXG5cbn0pXG5cbmV4cG9ydCBjbGFzcyBDb21ib0JveENvbXBvbmVudCBleHRlbmRzIEJhc2VFbGVtZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG5cdGNvbnN0cnVjdG9yKHJlZjogRWxlbWVudFJlZjxDb21ib0JveD4pIHtcblx0XHRzdXBlcihyZWYpO1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA9IHJlZi5uYXRpdmVFbGVtZW50IGFzIENvbWJvQm94O1xuXHR9XG5cblx0cHJpdmF0ZSBldmVudEhhbmRsZXJzOiBhbnlbXSA9IFtdO1xuXG5cdHB1YmxpYyBkZWNsYXJlIG5hdGl2ZUVsZW1lbnQ6IENvbWJvQm94O1xuXHQvKiogQGRlc2NyaXB0aW9uIENyZWF0ZXMgdGhlIGNvbXBvbmVudCBvbiBkZW1hbmQuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFuIG9wdGlvbmFsIG9iamVjdCBvZiBwcm9wZXJ0aWVzLCB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSB0ZW1wbGF0ZSBiaW5kZWQgb25lcy5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVDb21wb25lbnQocHJvcGVydGllcyA9IHt9KTogYW55IHtcbiAgICBcdHRoaXMubmF0aXZlRWxlbWVudCA9IDxDb21ib0JveD5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzbWFydC1jb21iby1ib3gnKTtcblx0XHRmb3IgKGxldCBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykgeyBcbiBcdFx0XHR0aGlzLm5hdGl2ZUVsZW1lbnRbcHJvcGVydHlOYW1lXSA9IHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudDtcblx0fVxuICAgICAgICAvKipcbiAgICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAgKiBUaGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2hlbiBhIGNoYW5nZSBldmVudCBvY2N1cnMgb24gdGhlIGZvcm0gZWxlbWVudHMuXG4gICAgICAgICovXG4gICAgICAgX29uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgICAgICAvKipcbiAgICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAgKiBUaGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2hlbiBhIGJsdXIgZXZlbnQgb2NjdXJzIG9uIHRoZSBmb3JtIGVsZW1lbnRzLlxuICAgICAgICAqL1xuICAgICAgIF9vblRvdWNoZWQ6ICgpID0+IGFueSA9ICgpID0+IHt9O1xuXG5cblx0LyoqIEBkZXNjcmlwdGlvbiBUaGlzIHByb3BlcnR5IGlzIGFwcGxpY2FibGUgb25seSB3aGVuIGRyb3BEb3duT3Blbk1vZGUgaXMgc2V0IHRvICdhdXRvJy4gSXQgc3BlY2lmaWVzIHRoZSBhbW91bnQgb2YgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSB0aGUgZHJvcGRvd24gd2lsbCByZW1haW4gb3BlbiBhZnRlciB0aGUgcG9pbnRlciBsZWF2ZXMgdGhlIGVsZW1lbnQsIGJlZm9yZSBpdCBhdXRvbWF0aWNhbGx5IGNsb3Nlcy4gSWYgdGhlIHBvaW50ZXIgaXMgbm90IGhvdmVyaW5nIG92ZXIgdGhlIGRyb3Bkb3duIG9yIGl0cyB0cmlnZ2VyIGVsZW1lbnQsIHRoZSBkcm9wZG93biB3aWxsIGNsb3NlIGFmdGVyIHRoaXMgZGVsYXkuICovXG5cdEBJbnB1dCgpXG5cdGdldCBhdXRvQ2xvc2VEZWxheSgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuYXV0b0Nsb3NlRGVsYXkgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGF1dG9DbG9zZURlbGF5KHZhbHVlOiBudW1iZXIpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuYXV0b0Nsb3NlRGVsYXkgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBhdXRvY29tcGxldGUgbW9kZSBmb3IgdGhlIGlucHV0IGZpZWxkLiBUaGUgc2VsZWN0ZWQgbW9kZSBkZWZpbmVzIGhvdyB0aGUgY29tcG9uZW50IGZpbHRlcnMgYW5kIGRpc3BsYXlzIGl0ZW1zIGZyb20gdGhlIGRhdGFTb3VyY2UsIHNob3dpbmcgb25seSB0aG9zZSBlbnRyaWVzIHRoYXQgbWF0Y2ggdGhlIHVzZXIncyBpbnB1dCBhY2NvcmRpbmcgdG8gdGhlIGNob3NlbiBtYXRjaGluZyBzdHJhdGVneS4gVGhpcyBzZXR0aW5nIGRpcmVjdGx5IGltcGFjdHMgdGhlIHN1Z2dlc3Rpb25zIHByZXNlbnRlZCB0byB0aGUgdXNlciBhcyB0aGV5IHR5cGUuICovXG5cdEBJbnB1dCgpXG5cdGdldCBhdXRvQ29tcGxldGUoKTogQXV0b0NvbXBsZXRlIHwgc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmF1dG9Db21wbGV0ZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgYXV0b0NvbXBsZXRlKHZhbHVlOiBBdXRvQ29tcGxldGUgfCBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuYXV0b0NvbXBsZXRlID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgYW1vdW50IG9mIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgdG8gd2FpdCBhZnRlciB0aGUgdXNlciBpbnB1dCBiZWZvcmUgZGlzcGxheWluZyB0aGUgZHJvcGRvd24gbGlzdCBvZiBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbnMuIFRoaXMgZGVsYXkgaGVscHMgY29udHJvbCBob3cgcXVpY2tseSB0aGUgc3VnZ2VzdGlvbnMgYXBwZWFyLCBhbGxvd2luZyBmb3Igc21vb3RoZXIgdXNlciBleHBlcmllbmNlIGFuZCByZWR1Y2luZyB1bm5lY2Vzc2FyeSBzZWFyY2hlcyBhcyB0aGUgdXNlciB0eXBlcy4gKi9cblx0QElucHV0KClcblx0Z2V0IGF1dG9Db21wbGV0ZURlbGF5KCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5hdXRvQ29tcGxldGVEZWxheSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgYXV0b0NvbXBsZXRlRGVsYXkodmFsdWU6IG51bWJlcikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5hdXRvQ29tcGxldGVEZWxheSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBFbmFibGVzIHVzZXJzIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgY3VzdG9tIGtleSBuYW1lcyB0aGF0IHdpbGwgdHJpZ2dlciB0aGUgb3BlbmluZyBvZiB0aGUgcG9wdXAgd2hlbiBwcmVzc2VkLiBUaGlzIGFsbG93cyBmb3IgZmxleGlibGUga2V5Ym9hcmQgc2hvcnRjdXRzIHRhaWxvcmVkIHRvIHVzZXIgcHJlZmVyZW5jZXMgb3IgYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgYXV0b09wZW5TaG9ydGN1dEtleSgpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5hdXRvT3BlblNob3J0Y3V0S2V5IDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBhdXRvT3BlblNob3J0Y3V0S2V5KHZhbHVlOiBzdHJpbmdbXSkge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5hdXRvT3BlblNob3J0Y3V0S2V5ID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgc291cmNlIG9mIGRhdGEgdG8gcG9wdWxhdGUgdGhlIENvbWJvQm94LiBUaGUgZGF0YVNvdXJjZSBjYW4gYmUgcHJvdmlkZWQgaW4gc2V2ZXJhbCBmb3JtYXRzOi0gQW4gYXJyYXkgb2Ygc3RyaW5ncyBvciBudW1iZXJzLCB3aGVyZSBlYWNoIGl0ZW0gYmVjb21lcyBhIHNlbGVjdGFibGUgb3B0aW9uIGluIHRoZSBDb21ib0JveC4tIEFuIGFycmF5IG9mIG9iamVjdHMsIHdoZXJlIGVhY2ggb2JqZWN0IHJlcHJlc2VudHMgYSBsaXN0IGl0ZW0gYW5kIGl0cyBwcm9wZXJ0aWVzIGRlZmluZSB0aGUgZGlzcGxheWVkIGluZm9ybWF0aW9uIGFuZCBhc3NvY2lhdGVkIHZhbHVlIChlLmcuLCBsYWJlbCBmb3IgZGlzcGxheSB0ZXh0LCB2YWx1ZSBmb3IgdGhlIHVuZGVybHlpbmcgdmFsdWUsIGFuZCBvcHRpb25hbGx5IGdyb3VwIHRvIGNhdGVnb3JpemUgaXRlbXMpLi0gQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgaXRlbXMgaW4gZWl0aGVyIG9mIHRoZSBhYm92ZSBmb3JtYXRzLCBlbmFibGluZyBkeW5hbWljIG9yIGFzeW5jaHJvbm91cyBkYXRhIGxvYWRpbmcuVGhpcyBmbGV4aWJsZSBkYXRhU291cmNlIGNvbmZpZ3VyYXRpb24gYWxsb3dzIHRoZSBDb21ib0JveCB0byBzdXBwb3J0IHNpbXBsZSBsaXN0cywgY2F0ZWdvcml6ZWQgbGlzdHMsIG9yIGR5bmFtaWNhbGx5IHJldHJpZXZlZCBkYXRhLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZGF0YVNvdXJjZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZGF0YVNvdXJjZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZGF0YVNvdXJjZSh2YWx1ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRhdGFTb3VyY2UgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciB0aGUgY29tYm8gYm94IGlzIGFjdGl2ZSBvciBpbmFjdGl2ZS4gV2hlbiBlbmFibGVkLCB1c2VycyBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgY29tYm8gYm94IHRvIHNlbGVjdCBvciBlbnRlciBhIHZhbHVlLiBXaGVuIGRpc2FibGVkLCB0aGUgY29tYm8gYm94IGlzIG5vbi1pbnRlcmFjdGl2ZSBhbmQgYXBwZWFycyBncmF5ZWQgb3V0LCBwcmV2ZW50aW5nIGFueSB1c2VyIGlucHV0IG9yIHNlbGVjdGlvbi4gKi9cblx0QElucHV0KClcblx0Z2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB3aGV0aGVyIGEgdmlzdWFsIGluZGljYXRvciAoc3VjaCBhcyBhIGxvYWRpbmcgc3Bpbm5lciBvciBwcm9ncmVzcyBiYXIpIHdpbGwgYmUgZGlzcGxheWVkIHdoaWxlIGZpbHRlcmluZyBkYXRhIGxvY2FsbHkgb3Igd2hlbiByZXRyaWV2aW5nIGl0ZW1zIGZyb20gYSByZW1vdGUgc291cmNlLiBUaGlzIGhlbHBzIGluZm9ybSB1c2VycyB0aGF0IGEgZmlsdGVyaW5nIG9wZXJhdGlvbiBvciBkYXRhIGZldGNoIGlzIGluIHByb2dyZXNzLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZGlzcGxheUxvYWRpbmdJbmRpY2F0b3IoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5kaXNwbGF5TG9hZGluZ0luZGljYXRvciA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZGlzcGxheUxvYWRpbmdJbmRpY2F0b3IodmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZGlzcGxheUxvYWRpbmdJbmRpY2F0b3IgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU2V0cyBvciByZXRyaWV2ZXMgdGhlIGRpc3BsYXlNZW1iZXIgcHJvcGVydHkuIFRoZSBkaXNwbGF5TWVtYmVyIHByb3BlcnR5IGRlZmluZXMgdGhlIHNwZWNpZmljIGZpZWxkIG5hbWUgd2l0aGluIGVhY2ggZGF0YSBvYmplY3QgaW4gdGhlIGNvbGxlY3Rpb24gcHJvdmlkZWQgYnkgdGhlICdkYXRhU291cmNlJyBwcm9wZXJ0eS4gVGhpcyBmaWVsZCdzIHZhbHVlIGlzIHVzZWQgZm9yIGRpc3BsYXlpbmcgaXRlbXMgaW4gdGhlIFVJIGNvbXBvbmVudCwgYWxsb3dpbmcgeW91IHRvIGNvbnRyb2wgd2hpY2ggYXR0cmlidXRlIG9mIHlvdXIgZGF0YSBvYmplY3RzIGlzIHNob3duIHRvIHRoZSB1c2VyLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZGlzcGxheU1lbWJlcigpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZGlzcGxheU1lbWJlciA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZGlzcGxheU1lbWJlcih2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRpc3BsYXlNZW1iZXIgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBwYXJlbnQgY29udGFpbmVyIGZvciB0aGUgZHJvcGRvd24gZWxlbWVudC4gVGhlIGRyb3BEb3duQXBwZW5kVG8gcHJvcGVydHkgYWNjZXB0cyBhIENTUyBzZWxlY3RvciBzdHJpbmcsIGFuIGVsZW1lbnQncyBJRCwgdGhlIHN0cmluZyB2YWx1ZSAnYm9keScsIG9yIGEgZGlyZWN0IHJlZmVyZW5jZSB0byBhbiBIVE1MIGVsZW1lbnQuIEJ5IGRlZmF1bHQsIHRoZSBkcm9wZG93biBpcyBhcHBlbmRlZCB0byBpdHMgb3JpZ2luYWwgcGFyZW50IGluIHRoZSBET00uIEhvd2V2ZXIsIGlmIG9uZSBvZiB0aGUgY29udGFpbmluZyBlbGVtZW50cyBoYXMgQ1NTIHByb3BlcnRpZXMgKHN1Y2ggYXMgb3ZlcmZsb3c6IGhpZGRlbikgdGhhdCByZXN0cmljdCB0aGUgZHJvcGRvd24ncyB2aXNpYmlsaXR5LCB5b3UgY2FuIHNldCB0aGlzIHByb3BlcnR54oCUY29tbW9ubHkgdG8gJ2JvZHkn4oCUdG8gYXBwZW5kIHRoZSBkcm9wZG93biBkaXJlY3RseSB0byB0aGUgJmx0O2JvZHkmZ3Q7IGVsZW1lbnQgYW5kIGVuc3VyZSBpdCBkaXNwbGF5cyBwcm9wZXJseS5Qb3NzaWJsZSB2YWx1ZXM6LSBBIENTUyBzZWxlY3RvciBzdHJpbmcgKGUuZy4sICcuY29udGFpbmVyJyBvciAnI21haW5EaXYnKS0gVGhlIHN0cmluZyAnYm9keSctIEEgZGlyZWN0IHJlZmVyZW5jZSB0byBhbiBleGlzdGluZyBIVE1MIGVsZW1lbnQtIEFuIGVsZW1lbnQncyBJRCAoYXMgYSBzdHJpbmcpLSBudWxsICh0byByZXNldCBhbmQgbW92ZSB0aGUgZHJvcGRvd24gYmFjayB0byBpdHMgb3JpZ2luYWwgcGFyZW50KVRoaXMgcHJvcGVydHkgaW1wcm92ZXMgY29tcGF0aWJpbGl0eSBpbiBsYXlvdXRzIHdpdGggcmVzdHJpY3RlZCBvdmVyZmxvdyBieSBhbGxvd2luZyB0aGUgZHJvcGRvd24gdG8gYmUgcmVuZGVyZWQgaW4gYSBjb250YWluZXIgb2YgeW91ciBjaG9vc2luZy4gUmVzZXR0aW5nIGRyb3BEb3duQXBwZW5kVG8gdG8gbnVsbCByZXN0b3JlcyB0aGUgZHJvcGRvd24gdG8gaXRzIGluaXRpYWwgcGxhY2VtZW50IHdpdGhpbiB0aGUgRE9NLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZHJvcERvd25BcHBlbmRUbygpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25BcHBlbmRUbyA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZHJvcERvd25BcHBlbmRUbyh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duQXBwZW5kVG8gPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZHJvcGRvd24gYnV0dG9uIHJlbGF0aXZlIHRvIGl0cyBhc3NvY2lhdGVkIGlucHV0IGZpZWxkIG9yIGNvbnRhaW5lci4gUG9zc2libGUgcG9zaXRpb25zIG1heSBpbmNsdWRlIFwibGVmdCxcIiBcInJpZ2h0LFwiIFwidG9wLFwiIG9yIFwiYm90dG9tLFwiIGFsbG93aW5nIGRldmVsb3BlcnMgdG8gY29udHJvbCB3aGVyZSB0aGUgZHJvcGRvd24gYnV0dG9uIGFwcGVhcnMgaW4gdGhlIHVzZXIgaW50ZXJmYWNlLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZHJvcERvd25CdXR0b25Qb3NpdGlvbigpOiBEcm9wRG93bkJ1dHRvblBvc2l0aW9uIHwgc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duQnV0dG9uUG9zaXRpb24gOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRyb3BEb3duQnV0dG9uUG9zaXRpb24odmFsdWU6IERyb3BEb3duQnV0dG9uUG9zaXRpb24gfCBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25CdXR0b25Qb3NpdGlvbiA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIGhlaWdodCBvZiB0aGUgZHJvcGRvd24gbWVudS4gQnkgZGVmYXVsdCwgdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLCB3aGljaCBtZWFucyB0aGUgZHJvcGRvd27igJlzIGhlaWdodCB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgQ1NTIHZhcmlhYmxlLiBJZiBhIHNwZWNpZmljIHZhbHVlIGlzIHByb3ZpZGVkLCBpdCB3aWxsIG92ZXJyaWRlIHRoZSBDU1MgdmFyaWFibGUgYW5kIHNldCB0aGUgZHJvcGRvd24gaGVpZ2h0IGV4cGxpY2l0bHkuICovXG5cdEBJbnB1dCgpXG5cdGdldCBkcm9wRG93bkhlaWdodCgpOiBzdHJpbmcgfCBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25IZWlnaHQgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRyb3BEb3duSGVpZ2h0KHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25IZWlnaHQgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBtYXhpbXVtIGhlaWdodCBvZiB0aGUgZHJvcGRvd24gbWVudS4gQnkgZGVmYXVsdCwgdGhpcyB2YWx1ZSBpcyBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLCB3aGljaCBtZWFucyB0aGUgZHJvcGRvd24ncyBtYXgtaGVpZ2h0IHdpbGwgYmUgY29udHJvbGxlZCBieSBhIENTUyB2YXJpYWJsZSBpbnN0ZWFkIG9mIGFuIGV4cGxpY2l0IHZhbHVlLiBJZiB5b3UgcHJvdmlkZSBhIHNwZWNpZmljIHZhbHVlIChlLmcuLCBcIjMwMHB4XCIgb3IgXCI1MHZoXCIpLCBpdCB3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0IENTUyB2YXJpYWJsZSBhbmQgZGlyZWN0bHkgc2V0IHRoZSBtYXhpbXVtIGhlaWdodCBvZiB0aGUgZHJvcGRvd24uICovXG5cdEBJbnB1dCgpXG5cdGdldCBkcm9wRG93bk1heEhlaWdodCgpOiBzdHJpbmcgfCBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25NYXhIZWlnaHQgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRyb3BEb3duTWF4SGVpZ2h0KHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25NYXhIZWlnaHQgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gRGVmaW5lcyB0aGUgbWF4aW11bSB3aWR0aCBvZiB0aGUgZHJvcGRvd24gbWVudS4gQnkgZGVmYXVsdCwgdGhpcyB2YWx1ZSBpcyBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLCB3aGljaCBtZWFucyB0aGUgZHJvcGRvd24ncyBtYXhpbXVtIHdpZHRoIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSBhIGNvcnJlc3BvbmRpbmcgQ1NTIHZhcmlhYmxlLiBJZiBhIHNwZWNpZmljIHZhbHVlIGlzIHByb3ZpZGVkIChlLmcuLCBcIjMwMHB4XCIgb3IgXCI1MCVcIiksIGl0IHdpbGwgb3ZlcnJpZGUgdGhlIENTUyB2YXJpYWJsZSBhbmQgZGlyZWN0bHkgc2V0IHRoZSBtYXhpbXVtIHdpZHRoIG9mIHRoZSBkcm9wZG93bi4gKi9cblx0QElucHV0KClcblx0Z2V0IGRyb3BEb3duTWF4V2lkdGgoKTogc3RyaW5nIHwgbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duTWF4V2lkdGggOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRyb3BEb3duTWF4V2lkdGgodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5kcm9wRG93bk1heFdpZHRoID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIERlZmluZXMgdGhlIG1pbmltdW0gaGVpZ2h0IG9mIHRoZSBkcm9wZG93biBjb21wb25lbnQuIEJ5IGRlZmF1bHQsIHRoaXMgcHJvcGVydHkgaXMgc2V0IHRvIGFuIGVtcHR5IHN0cmluZywgd2hpY2ggbWVhbnMgdGhlIGRyb3Bkb3duJ3MgbWluaW11bSBoZWlnaHQgaXMgZGV0ZXJtaW5lZCBieSBhIGNvcnJlc3BvbmRpbmcgQ1NTIHZhcmlhYmxlLiBJZiBhIHNwZWNpZmljIHZhbHVlIGlzIHByb3ZpZGVkIGZvciB0aGlzIHByb3BlcnR5LCBpdCB3aWxsIG92ZXJyaWRlIHRoZSBDU1MgdmFyaWFibGUgYW5kIGV4cGxpY2l0bHkgc2V0IHRoZSBkcm9wZG93bidzIG1pbmltdW0gaGVpZ2h0LiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZHJvcERvd25NaW5IZWlnaHQoKTogc3RyaW5nIHwgbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duTWluSGVpZ2h0IDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBkcm9wRG93bk1pbkhlaWdodCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duTWluSGVpZ2h0ID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgbWluaW11bSB3aWR0aCBvZiB0aGUgZHJvcGRvd24gY29tcG9uZW50LiBCeSBkZWZhdWx0LCB0aGlzIHByb3BlcnR5IGlzIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpLiBXaGVuIGxlZnQgdW5zZXQsIHRoZSBkcm9wZG93buKAmXMgbWluaW11bSB3aWR0aCBpcyBkZXRlcm1pbmVkIGJ5IGEgQ1NTIHZhcmlhYmxlLCBhbGxvd2luZyBmb3IgZmxleGlibGUgc3R5bGluZyB0aHJvdWdoIGV4dGVybmFsIHN0eWxlc2hlZXRzLiBUbyBvdmVycmlkZSB0aGUgQ1NTIHZhbHVlLCBhc3NpZ24gYSBzcGVjaWZpYyB3aWR0aCB2YWx1ZSAoZS5nLiwgXCIyMDBweFwiIG9yIFwiMTByZW1cIikgdG8gdGhpcyBwcm9wZXJ0eS4gKi9cblx0QElucHV0KClcblx0Z2V0IGRyb3BEb3duTWluV2lkdGgoKTogc3RyaW5nIHwgbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duTWluV2lkdGggOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRyb3BEb3duTWluV2lkdGgodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5kcm9wRG93bk1pbldpZHRoID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgZGlyZWN0aW9uIG9yIGFuaW1hdGlvbiBpbiB3aGljaCB0aGUgZHJvcGRvd24gbWVudSB3aWxsIGFwcGVhciB3aGVuIGFjdGl2YXRlZCwgc3VjaCBhcyBvcGVuaW5nIHVwd2FyZHMsIGRvd253YXJkcywgb3Igd2l0aCBhIHNwZWNpZmljIHRyYW5zaXRpb24gZWZmZWN0LiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZHJvcERvd25PcGVuTW9kZSgpOiBEcm9wRG93bk9wZW5Nb2RlIHwgc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duT3Blbk1vZGUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRyb3BEb3duT3Blbk1vZGUodmFsdWU6IERyb3BEb3duT3Blbk1vZGUgfCBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25PcGVuTW9kZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBJZiB0aGlzIHByb3BlcnR5IGlzIGVuYWJsZWQsIG9wZW5pbmcgdGhlIGVsZW1lbnQncyBkcm9wZG93biB3aWxsIGluc2VydCBhIHRyYW5zcGFyZW50IG92ZXJsYXkgYmV0d2VlbiB0aGUgZHJvcGRvd24gYW5kIHRoZSByZXN0IG9mIHRoZSBkb2N1bWVudC4gVGhpcyBvdmVybGF5IGNvdmVycyB0aGUgZW50aXJlIHZpZXdwb3J0IGV4Y2VwdCBmb3IgdGhlIGRyb3Bkb3duIGl0c2VsZiwgY2FwdHVyaW5nIGFsbCBjbGljayBldmVudHMgb3V0c2lkZSB0aGUgZHJvcGRvd24uIEFzIGEgcmVzdWx0LCBhbnkgY2xpY2tzIG91dHNpZGUgdGhlIHBvcHVwIHdpbGwgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmxheSBpbnN0ZWFkIG9mIG90aGVyIGVsZW1lbnRzIG9uIHRoZSBwYWdlLCBhbGxvd2luZyB5b3UgdG8gcmVsaWFibHkgZGV0ZWN0IGFuZCBoYW5kbGUgb3V0c2lkZSBjbGlja3MgKHN1Y2ggYXMgdG8gY2xvc2UgdGhlIGRyb3Bkb3duKSB3aXRob3V0IHVuaW50ZW50aW9uYWxseSB0cmlnZ2VyaW5nIG90aGVyIERPTSBlbGVtZW50cy4gKi9cblx0QElucHV0KClcblx0Z2V0IGRyb3BEb3duT3ZlcmxheSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duT3ZlcmxheSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZHJvcERvd25PdmVybGF5KHZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duT3ZlcmxheSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIHRleHQgb3IgY29udGVudCB0byBiZSBzaG93biBpbiB0aGUgZHJvcGRvd24gYXMgYSBwbGFjZWhvbGRlciB3aGVuIHRoZSBkcm9wZG93biBjb250YWlucyBubyBzZWxlY3RhYmxlIGl0ZW1zLiBUaGlzIHBsYWNlaG9sZGVyIHByb3ZpZGVzIGd1aWRhbmNlIG9yIGNvbnRleHQgdG8gdGhlIHVzZXIsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgY3VycmVudGx5IG5vIGF2YWlsYWJsZSBvcHRpb25zLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZHJvcERvd25QbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25QbGFjZWhvbGRlciA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZHJvcERvd25QbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duUGxhY2Vob2xkZXIgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGRyb3Bkb3duIG1lbnUgcmVsYXRpdmUgdG8gaXRzIHRyaWdnZXIgZWxlbWVudCB3aGVuIG9wZW5lZCAoZS5nLiwgYWJvdmUsIGJlbG93LCBsZWZ0LCBvciByaWdodCkuIFRoaXMgc2V0dGluZyBjb250cm9scyB3aGVyZSB0aGUgZHJvcGRvd24gYXBwZWFycyBvbiB0aGUgc2NyZWVuIGluIHJlbGF0aW9uIHRvIHRoZSBlbGVtZW50IHRoYXQgYWN0aXZhdGVzIGl0LiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZHJvcERvd25Qb3NpdGlvbigpOiBEcm9wRG93blBvc2l0aW9uIHwgc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duUG9zaXRpb24gOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRyb3BEb3duUG9zaXRpb24odmFsdWU6IERyb3BEb3duUG9zaXRpb24gfCBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25Qb3NpdGlvbiA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIHdpZHRoIG9mIHRoZSBkcm9wZG93biBtZW51LiBCeSBkZWZhdWx0LCB0aGlzIHByb3BlcnR5IGlzIHNldCB0byBhbiBlbXB0eSBzdHJpbmcsIGFsbG93aW5nIHRoZSBkcm9wZG93bidzIHdpZHRoIHRvIGJlIGRldGVybWluZWQgYnkgdGhlIGFzc29jaWF0ZWQgQ1NTIHZhcmlhYmxlICh0eXBpY2FsbHkgdmlhIGN1c3RvbSBwcm9wZXJ0aWVzIG9yIHRoZW1lIHNldHRpbmdzKS4gSWYgYSB2YWx1ZSBpcyBwcm92aWRlZCwgaXQgb3ZlcnJpZGVzIHRoZSBDU1MgdmFyaWFibGUgYW5kIGRpcmVjdGx5IHNldHMgdGhlIGRyb3Bkb3duJ3Mgd2lkdGguICovXG5cdEBJbnB1dCgpXG5cdGdldCBkcm9wRG93bldpZHRoKCk6IHN0cmluZyB8IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5kcm9wRG93bldpZHRoIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBkcm9wRG93bldpZHRoKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25XaWR0aCA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgaG93IHRoZSBlbGVtZW50IHNob3VsZCByZXNwb25kIHdoZW4gdGhlIEVzY2FwZSBrZXkgaXMgcHJlc3NlZCBieSB0aGUgdXNlci4gVGhpcyBwcm9wZXJ0eSBhbGxvd3MgeW91IHRvIGRlZmluZSBhY3Rpb25zIHN1Y2ggYXMgY2xvc2luZyBhIG1vZGFsLCBkaXNtaXNzaW5nIGEgZGlhbG9nLCBvciB0cmlnZ2VyaW5nIGEgY3VzdG9tIGV2ZW50IHdoZW4gdGhlIEVzY2FwZSBrZXkgaXMgZGV0ZWN0ZWQgd2hpbGUgdGhlIGVsZW1lbnQgaXMgZm9jdXNlZCBvciBhY3RpdmUuICovXG5cdEBJbnB1dCgpXG5cdGdldCBlc2NLZXlNb2RlKCk6IENvbWJvQm94RXNjS2V5TW9kZSB8IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5lc2NLZXlNb2RlIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBlc2NLZXlNb2RlKHZhbHVlOiBDb21ib0JveEVzY0tleU1vZGUgfCBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZXNjS2V5TW9kZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZmlsdGVyaW5nIGZlYXR1cmUgaXMgYWN0aXZlLiBXaGVuIHNldCB0byB0cnVlLCB1c2VycyBjYW4gYXBwbHkgZmlsdGVycyB0byBuYXJyb3cgZG93biBkaXNwbGF5ZWQgZGF0YTsgd2hlbiBmYWxzZSwgZmlsdGVyaW5nIG9wdGlvbnMgYXJlIGRpc2FibGVkIGFuZCBhbGwgZGF0YSBpcyBzaG93biB3aXRob3V0IHJlc3RyaWN0aW9uLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZmlsdGVyYWJsZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmZpbHRlcmFibGUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGZpbHRlcmFibGUodmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZmlsdGVyYWJsZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIHBsYWNlaG9sZGVyIHRleHQgZGlzcGxheWVkIGluc2lkZSB0aGUgZHJvcGRvd24gbGlzdOKAmXMgZmlsdGVyIGlucHV0IGZpZWxkLCBndWlkaW5nIHVzZXJzIG9uIHdoYXQgdG8gZW50ZXIgd2hlbiBzZWFyY2hpbmcgb3IgZmlsdGVyaW5nIG9wdGlvbnMuICovXG5cdEBJbnB1dCgpXG5cdGdldCBmaWx0ZXJJbnB1dFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5maWx0ZXJJbnB1dFBsYWNlaG9sZGVyIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBmaWx0ZXJJbnB1dFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZmlsdGVySW5wdXRQbGFjZWhvbGRlciA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIGZpbHRlcmluZyBiZWhhdmlvciBmb3IgdGhlIENvbWJvIEJveCwgY29udHJvbGxpbmcgaG93IHVzZXIgaW5wdXQgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBhdmFpbGFibGUgb3B0aW9ucyAoZS5nLiwgY29udGFpbnMsIHN0YXJ0cyB3aXRoLCBvciBleGFjdCBtYXRjaCkuIFRoaXMgcHJvcGVydHkgZGV0ZXJtaW5lcyB3aGljaCBvcHRpb25zIGFyZSBkaXNwbGF5ZWQgaW4gdGhlIGRyb3Bkb3duIGxpc3QgYXMgdGhlIHVzZXIgdHlwZXMuICovXG5cdEBJbnB1dCgpXG5cdGdldCBmaWx0ZXJNb2RlKCk6IEZpbHRlck1vZGUgfCBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZmlsdGVyTW9kZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZmlsdGVyTW9kZSh2YWx1ZTogRmlsdGVyTW9kZSB8IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5maWx0ZXJNb2RlID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFdoZW4gZW5hYmxlZCwgdGhpcyBvcHRpb24gYXV0b21hdGljYWxseSBncm91cHMgdGhlIGl0ZW1zIGJhc2VkIG9uIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCBpdGVtJ3MgdmFsdWUgb3IgbGFiZWwuIE5vdGU6IFRoaXMgZ3JvdXBpbmcgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgZGF0YVNvdXJjZSBkb2VzIG5vdCBhbHJlYWR5IGluY2x1ZGUgcHJlZGVmaW5lZCBncm91cHMuIElmIHRoZSBkYXRhU291cmNlIGlzIGFscmVhZHkgZ3JvdXBlZCwgdGhpcyBzZXR0aW5nIHdpbGwgaGF2ZSBubyBlZmZlY3QuICovXG5cdEBJbnB1dCgpXG5cdGdldCBncm91cGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZ3JvdXBlZCA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZ3JvdXBlZCh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5ncm91cGVkID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB3aGljaCBhdHRyaWJ1dGUgb2YgdGhlIGRhdGFTb3VyY2Ugb2JqZWN0IHNob3VsZCBiZSB1c2VkIHRvIGdyb3VwIGl0ZW1zIGluIHRoZSBMaXN0Qm94LiBCeSBkZWZhdWx0LCBpZiB0aGlzIHByb3BlcnR5IChncm91cE1lbWJlcikgaXMgbm90IHNldCwgdGhlIExpc3RCb3ggd2lsbCB1c2UgdGhlICdncm91cCcgcHJvcGVydHkgZnJvbSBlYWNoIGRhdGFTb3VyY2UgaXRlbSB0byBvcmdhbml6ZSBncm91cHMuIFRoaXMgcHJvcGVydHkgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIGxvYWRpbmcgZGF0YSBmcm9tIGEgSlNPTiBmaWxlLCBhbGxvd2luZyB5b3UgdG8gZGVzaWduYXRlIGEgc3BlY2lmaWMgcHJvcGVydHkgZnJvbSB5b3VyIGRhdGEgb2JqZWN0cyB0byBkZXRlcm1pbmUgdGhlIGdyb3VwaW5nIG9mIGl0ZW1z4oCUZXNwZWNpYWxseSBpZiB5b3VyIEpTT04gc3RydWN0dXJlIHVzZXMgYSBkaWZmZXJlbnQgcHJvcGVydHkgbmFtZSBmb3IgZ3JvdXBpbmcuICovXG5cdEBJbnB1dCgpXG5cdGdldCBncm91cE1lbWJlcigpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZ3JvdXBNZW1iZXIgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGdyb3VwTWVtYmVyKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZ3JvdXBNZW1iZXIgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gRGlzcGxheXMgc3VwcGxlbWVudGFyeSBoZWxwZXIgdGV4dCBiZW5lYXRoIHRoZSBlbGVtZW50LiBUaGlzIGhpbnQgaXMgdmlzaWJsZSBleGNsdXNpdmVseSB3aGVuIHRoZSBlbGVtZW50IGlzIGluIGZvY3VzLCBwcm92aWRpbmcgY29udGV4dHVhbCBndWlkYW5jZSB0byB1c2VycyBhcyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGZpZWxkLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgaGludCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuaGludCA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgaGludCh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmhpbnQgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciB0aGUgaG9yaXpvbnRhbCBzY3JvbGwgYmFyIGlzIGRpc3BsYXllZCB3aXRoaW4gdGhlIGRyb3Bkb3duIG1lbnUgd2hlbiB0aGUgY29udGVudCBleGNlZWRzIHRoZSBhdmFpbGFibGUgd2lkdGguICovXG5cdEBJbnB1dCgpXG5cdGdldCBob3Jpem9udGFsU2Nyb2xsQmFyVmlzaWJpbGl0eSgpOiBIb3Jpem9udGFsU2Nyb2xsQmFyVmlzaWJpbGl0eSB8IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5ob3Jpem9udGFsU2Nyb2xsQmFyVmlzaWJpbGl0eSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgaG9yaXpvbnRhbFNjcm9sbEJhclZpc2liaWxpdHkodmFsdWU6IEhvcml6b250YWxTY3JvbGxCYXJWaXNpYmlsaXR5IHwgc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lmhvcml6b250YWxTY3JvbGxCYXJWaXNpYmlsaXR5ID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgdGhlIHByb3BlcnR5IG5hbWUgb2YgYSBMaXN0IGl0ZW0gd2hvc2UgdmFsdWUgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGlucHV0IGZpZWxkIHdoZW4gYSBMaXN0SXRlbSBpcyBzZWxlY3RlZC4gVGhpcyBhbGxvd3MgZGV2ZWxvcGVycyB0byBjb250cm9sIHdoaWNoIHByb3BlcnR5IG9mIGVhY2ggaXRlbSBpcyBzaG93biBpbiB0aGUgaW5wdXQsIHN1Y2ggYXMgZGlzcGxheWluZyB0aGUgaXRlbSdzIHZhbHVlIGluc3RlYWQgb2YgaXRzIGxhYmVsLiBCeSBkZWZhdWx0LCB0aGUgbGFiZWwgcHJvcGVydHkgaXMgdXNlZCBmb3IgZGlzcGxheS4gVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gY3VzdG9taXplIHRoZSBkaXNwbGF5ZWQgY29udGVudCwgZm9yIGV4YW1wbGUsIHRvIHNob3cgYSB1bmlxdWUgaWRlbnRpZmllciBvciB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZGVzY3JpcHRpdmUgbGFiZWwuICovXG5cdEBJbnB1dCgpXG5cdGdldCBpbnB1dE1lbWJlcigpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuaW5wdXRNZW1iZXIgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGlucHV0TWVtYmVyKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuaW5wdXRNZW1iZXIgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBleHBlY3RlZCB0eXBlIG9mIGluZm9ybWF0aW9uIGZvciB0aGUgaW5wdXQgZmllbGQgYW5kIGluZm9ybXMgdGhlIGJyb3dzZXIgYWJvdXQgdGhlIG5hdHVyZSBvZiB0aGUgZGF0YSB0byBiZSBlbnRlcmVkLiBUaGlzIGd1aWRhbmNlIGFsbG93cyB1c2VyIGFnZW50cyAoc3VjaCBhcyBicm93c2VycyBhbmQgcGFzc3dvcmQgbWFuYWdlcnMpIHRvIGRldGVybWluZSBpZiB0aGV5IGNhbiBwcm92aWRlIGF1dG9tYXRlZCBhc3Npc3RhbmNl4oCUbGlrZSBhdXRvZmlsbGluZyByZWxldmFudCB2YWx1ZXPigJR3aGVuIHRoZSBlbGVtZW50IGlzIHVzZWQgaW4gYSBmb3JtLiBUaGUgdmFsdWUgYXNzaWduZWQgdG8gdGhpcyBwcm9wZXJ0eSBkaXJlY3RseSBtYXBzIHRvIHRoZSBzdGFuZGFyZCBIVE1MIGF1dG9jb21wbGV0ZSBhdHRyaWJ1dGUuIENvbW1vbiB2YWx1ZXMgaW5jbHVkZSAnb24nIChlbmFibGUgYXV0b2NvbXBsZXRlKSwgJ29mZicgKGRpc2FibGUgYXV0b2NvbXBsZXRlKSwgJ25hbWUnIChmdWxsIG5hbWUpLCAnb3JnYW5pemF0aW9uJyAoY29tcGFueSBvciBvcmdhbml6YXRpb24pLCAnZW1haWwnLCAnc3RyZWV0LWFkZHJlc3MnLCBhbmQgbWFueSBvdGhlcnMsIGFzIHNwZWNpZmllZCBieSB0aGUgSFRNTCBzdGFuZGFyZC4gVXNpbmcgYW4gYXBwcm9wcmlhdGUgdmFsdWUgaW1wcm92ZXMgdXNlciBleHBlcmllbmNlLCBlbmhhbmNlcyBhY2Nlc3NpYmlsaXR5LCBhbmQgaGVscHMgbWFpbnRhaW4gcHJpdmFjeSBhbmQgc2VjdXJpdHkgc3RhbmRhcmRzIHdpdGhpbiB3ZWIgZm9ybXMuICovXG5cdEBJbnB1dCgpXG5cdGdldCBpbnB1dFB1cnBvc2UoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmlucHV0UHVycG9zZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgaW5wdXRQdXJwb3NlKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuaW5wdXRQdXJwb3NlID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFRoZSAnSW5jcmVtZW50YWxTZWFyY2hEZWxheScgcHJvcGVydHkgZGVmaW5lcyB0aGUgZHVyYXRpb24sIGluIG1pbGxpc2Vjb25kcywgdG8gd2FpdCBhZnRlciB0aGUgdXNlciBzdG9wcyB0eXBpbmcgYmVmb3JlIGNsZWFyaW5nIHRoZSBwcmV2aW91cyBzZWFyY2ggcXVlcnkuIFRoaXMgdGltZXIgYmVnaW5zIGFzIHNvb24gYXMgdGhlIHVzZXIgZmluaXNoZXMgdHlwaW5nLiBEdXJpbmcgdGhpcyBkZWxheSBwZXJpb2QsIG5vIG5ldyBzZWFyY2ggcXVlcnkgd2lsbCBiZSBpbml0aWF0ZWQuIE9ubHkgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheSBoYXMgZWxhcHNlZCB3aWxsIHRoZSBjdXJyZW50IHNlYXJjaCBpbnB1dCBiZSBjbGVhcmVkLCBhbGxvd2luZyBhIG5ldyBzZWFyY2ggcXVlcnkgdG8gYmUgc3RhcnRlZC4gVGhpcyBoZWxwcyB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBhbmQgdXNlciBleHBlcmllbmNlIGJ5IHByZXZlbnRpbmcgdW5uZWNlc3Nhcnkgb3IgcHJlbWF0dXJlIHF1ZXJpZXMgd2hpbGUgdGhlIHVzZXIgaXMgc3RpbGwgZW50ZXJpbmcgdGhlaXIgc2VhcmNoIHRlcm1zLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgaW5jcmVtZW50YWxTZWFyY2hEZWxheSgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuaW5jcmVtZW50YWxTZWFyY2hEZWxheSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgaW5jcmVtZW50YWxTZWFyY2hEZWxheSh2YWx1ZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmluY3JlbWVudGFsU2VhcmNoRGVsYXkgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gQ29uZmlndXJlcyBvciByZXRyaWV2ZXMgdGhlIGN1cnJlbnQgbW9kZSBvZiBpbmNyZW1lbnRhbCBzZWFyY2guIEJ5IGRlZmF1bHQsIGluY3JlbWVudGFsIHNlYXJjaCBpcyBlbmFibGVkLCBhbGxvd2luZyB1c2VycyB0byB0eXBlIHdoaWxlIHRoZSBkcm9wZG93biBpcyBmb2N1c2VkIHRvIHF1aWNrbHkgZmlsdGVyIGFuZCBoaWdobGlnaHQgbWF0Y2hpbmcgb3B0aW9ucy4gTW9kaWZ5aW5nIHRoaXMgc2V0dGluZyBjb250cm9scyBob3cgdXNlciBpbnB1dCBpcyBwcm9jZXNzZWQgZm9yIHNlYXJjaGluZyB3aXRoaW4gdGhlIGRyb3Bkb3duIGxpc3QuICovXG5cdEBJbnB1dCgpXG5cdGdldCBpbmNyZW1lbnRhbFNlYXJjaE1vZGUoKTogU2VhcmNoTW9kZSB8IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5pbmNyZW1lbnRhbFNlYXJjaE1vZGUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGluY3JlbWVudGFsU2VhcmNoTW9kZSh2YWx1ZTogU2VhcmNoTW9kZSB8IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5pbmNyZW1lbnRhbFNlYXJjaE1vZGUgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBoZWlnaHQgKGluIHBpeGVscykgZm9yIGVhY2ggbGlzdCBpdGVtIHdoZW4gcmVuZGVyaW5nIHRoZSBsaXN0LiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXBwbGljYWJsZSB3aGVuIGxpc3QgdmlydHVhbGl6YXRpb24gaXMgZW5hYmxlZCwgYXMgaXQgaGVscHMgb3B0aW1pemUgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGJ5IGFsbG93aW5nIHRoZSBjb21wb25lbnQgdG8gY2FsY3VsYXRlIGFuZCByZW5kZXIgb25seSB0aGUgdmlzaWJsZSBpdGVtcy4gKi9cblx0QElucHV0KClcblx0Z2V0IGl0ZW1IZWlnaHQoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lml0ZW1IZWlnaHQgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGl0ZW1IZWlnaHQodmFsdWU6IG51bWJlcikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5pdGVtSGVpZ2h0ID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgYWxnb3JpdGhtIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB3aWR0aCBvZiBlYWNoIGl0ZW0uIFRoaXMgc2V0dGluZyBkZXRlcm1pbmVzIGhvdyB0aGUgd2lkdGggb2YgYW4gaXRlbSBpcyBtZWFzdXJlZCwgc3VjaCBhcyB1c2luZyB0aGUgaXRlbSdzIGludHJpbnNpYyBjb250ZW50IHNpemUsIGEgZml4ZWQgdmFsdWUsIG9yIGEgcGVyY2VudGFnZSBvZiB0aGUgY29udGFpbmVyLiBBZGp1c3QgdGhpcyBwYXJhbWV0ZXIgdG8gY29udHJvbCBob3cgaXRlbSB3aWR0aHMgYXJlIGRldGVybWluZWQgd2l0aGluIHRoZSBsYXlvdXQuICovXG5cdEBJbnB1dCgpXG5cdGdldCBpdGVtTWVhc3VyZU1vZGUoKTogTGlzdEl0ZW1NZWFzdXJlTW9kZSB8IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5pdGVtTWVhc3VyZU1vZGUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGl0ZW1NZWFzdXJlTW9kZSh2YWx1ZTogTGlzdEl0ZW1NZWFzdXJlTW9kZSB8IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5pdGVtTWVhc3VyZU1vZGUgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gQSBnZXR0ZXIgbWV0aG9kIHRoYXQgcmV0cmlldmVzIGFuZCByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIGxpc3QgKCcnKSBlbGVtZW50cyBjdXJyZW50bHkgcHJlc2VudCB3aXRoaW4gdGhlIGRyb3Bkb3duIG1lbnUuIFRoaXMgYWxsb3dzIHlvdSB0byBlYXNpbHkgYWNjZXNzIGFuZCBtYW5pcHVsYXRlIGV2ZXJ5IGl0ZW0gZGlzcGxheWVkIGluIHRoZSBkcm9wZG93bi4gKi9cblx0QElucHV0KClcblx0Z2V0IGl0ZW1zKCk6IHtsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nfVtdIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lml0ZW1zIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBpdGVtcyh2YWx1ZToge2xhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmd9W10pIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuaXRlbXMgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gVGhlIGl0ZW1UZW1wbGF0ZSBwcm9wZXJ0eSBpcyBhIHN0cmluZyB0aGF0IHNwZWNpZmllcyB0aGUgSUQgb2YgYW4gSFRNTFRlbXBsYXRlRWxlbWVudCBwcmVzZW50IGluIHRoZSBET00uIFRoaXMgdGVtcGxhdGUgaXMgdXNlZCB0byBkZWZpbmUgYW5kIGN1c3RvbWl6ZSB0aGUgc3RydWN0dXJlIGFuZCBjb250ZW50IG9mIGluZGl2aWR1YWwgbGlzdCBpdGVtcywgYWxsb3dpbmcgZGV2ZWxvcGVycyB0byBjb250cm9sIGhvdyBlYWNoIGl0ZW0gYXBwZWFycyB3aGVuIHJlbmRlcmVkIGluIHRoZSBsaXN0LiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgaXRlbVRlbXBsYXRlKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5pdGVtVGVtcGxhdGUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGl0ZW1UZW1wbGF0ZSh2YWx1ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lml0ZW1UZW1wbGF0ZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBEaXNwbGF5cyBhIHNtYWxsIHRleHQgbGFiZWwgcG9zaXRpb25lZCBhYm92ZSB0aGUgZWxlbWVudCwgdHlwaWNhbGx5IHVzZWQgdG8gcHJvdmlkZSBjb250ZXh0LCBpbnN0cnVjdGlvbnMsIG9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gdXNlcnMuICovXG5cdEBJbnB1dCgpXG5cdGdldCBsYWJlbCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubGFiZWwgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGxhYmVsKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubGFiZWwgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSB0ZXh0IHRoYXQgYXBwZWFycyBhbG9uZ3NpZGUgdGhlIGxvYWRpbmcgaW5kaWNhdG9yIHdoZW4gdGhlIGxvYWRlciBpcyB2aXNpYmxlIGFuZCBwb3NpdGlvbmVkIGF0IHRoZSB0b3Agb3IgYm90dG9tIG9mIHRoZSBjb21wb25lbnQuIFRoaXMgdGV4dCBwcm92aWRlcyB1c2VycyB3aXRoIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gb3Igc3RhdHVzIHVwZGF0ZXMgZHVyaW5nIGxvYWRpbmcuICovXG5cdEBJbnB1dCgpXG5cdGdldCBsb2FkaW5nSW5kaWNhdG9yUGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmxvYWRpbmdJbmRpY2F0b3JQbGFjZWhvbGRlciA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgbG9hZGluZ0luZGljYXRvclBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubG9hZGluZ0luZGljYXRvclBsYWNlaG9sZGVyID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgZXhhY3QgbG9jYXRpb24gb24gdGhlIHVzZXIgaW50ZXJmYWNlIHdoZXJlIHRoZSBsb2FkaW5nIGluZGljYXRvciB3aWxsIGJlIGRpc3BsYXllZCwgc3VjaCBhcyBhdCB0aGUgdG9wLCBjZW50ZXIsIG9yIGJvdHRvbSBvZiB0aGUgc2NyZWVuIG9yIGNvbXBvbmVudC4gKi9cblx0QElucHV0KClcblx0Z2V0IGxvYWRpbmdJbmRpY2F0b3JQb3NpdGlvbigpOiBWZXJ0aWNhbEFsaWdubWVudCB8IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5sb2FkaW5nSW5kaWNhdG9yUG9zaXRpb24gOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGxvYWRpbmdJbmRpY2F0b3JQb3NpdGlvbih2YWx1ZTogVmVydGljYWxBbGlnbm1lbnQgfCBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubG9hZGluZ0luZGljYXRvclBvc2l0aW9uID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNldHMgb3IgcmV0cmlldmVzIHRoZSB1bmxvY2tLZXksIGEgdW5pcXVlIHZhbHVlIHJlcXVpcmVkIHRvIGdyYW50IGFjY2VzcyB0byB0aGUgcHJvZHVjdOKAmXMgcHJlbWl1bSBmZWF0dXJlcyBvciBhY3RpdmF0ZSBpdHMgZnVsbCBmdW5jdGlvbmFsaXR5LiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgdW5sb2NrS2V5KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC51bmxvY2tLZXkgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHVubG9ja0tleSh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnVubG9ja0tleSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgb3IgcmV0cmlldmVzIHRoZSBjdXJyZW50IGxhbmd1YWdlIHNldHRpbmcgZm9yIHRoZSBjb21wb25lbnQuIFRoaXMgcHJvcGVydHkgZGV0ZXJtaW5lcyB3aGljaCBsYW5ndWFnZSBpcyB1c2VkIHdoZW4gZGlzcGxheWluZyBjb250ZW50IGZyb20gdGhlIG1lc3NhZ2VzIHByb3BlcnR5LCBhbGxvd2luZyBmb3IgbG9jYWxpemF0aW9uIGFuZCBpbnRlcm5hdGlvbmFsaXphdGlvbiBvZiBkaXNwbGF5ZWQgbWVzc2FnZXMuIFNldCB0aGlzIHByb3BlcnR5IHRvIGEgc3VwcG9ydGVkIGxhbmd1YWdlIGNvZGUgKGUuZy4sIFwiZW5cIiwgXCJmclwiKSB0byBsb2FkIHRoZSBjb3JyZXNwb25kaW5nIHRyYW5zbGF0aW9ucyBmcm9tIHRoZSBtZXNzYWdlcyBvYmplY3QuICovXG5cdEBJbnB1dCgpXG5cdGdldCBsb2NhbGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmxvY2FsZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgbG9jYWxlKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubG9jYWxlID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBhbGxvd3MgeW91IHRvIGN1c3RvbWl6ZSB0aGUgZm9ybWF0dGluZyBvZiBtZXNzYWdlcyByZXR1cm5lZCBieSB0aGUgTG9jYWxpemF0aW9uIE1vZHVsZS4gVXNlIHRoaXMgY2FsbGJhY2sgdG8gbW9kaWZ5IG1lc3NhZ2UgdGV4dCwgYXBwbHkgZHluYW1pYyB2YWx1ZXMsIG9yIGltcGxlbWVudCBjdXN0b20gZm9ybWF0dGluZyBsb2dpYyBiZWZvcmUgdGhlIGxvY2FsaXplZCBtZXNzYWdlcyBhcmUgZGVsaXZlcmVkIHRvIHlvdXIgYXBwbGljYXRpb24uICovXG5cdEBJbnB1dCgpXG5cdGdldCBsb2NhbGl6ZUZvcm1hdEZ1bmN0aW9uKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5sb2NhbGl6ZUZvcm1hdEZ1bmN0aW9uIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBsb2NhbGl6ZUZvcm1hdEZ1bmN0aW9uKHZhbHVlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubG9jYWxpemVGb3JtYXRGdW5jdGlvbiA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgb3IgcmV0cmlldmVzIGFuIG9iamVjdCBjb250YWluaW5nIGxvY2FsaXplZCBzdHJpbmcgdmFsdWVzIHVzZWQgd2l0aGluIHRoZSB3aWRnZXTigJlzIHVzZXIgaW50ZXJmYWNlLiBUaGlzIHByb3BlcnR5IGVuYWJsZXMgdGhlIGN1c3RvbWl6YXRpb24gYW5kIHRyYW5zbGF0aW9uIG9mIFVJIHRleHQgZm9yIGRpZmZlcmVudCBsYW5ndWFnZXMgb3IgcmVnaW9ucy4gSXQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoIHRoZSBsb2NhbGUgcHJvcGVydHksIGFsbG93aW5nIHlvdSB0byBlYXNpbHkgcHJvdmlkZSBvciB1cGRhdGUgbG9jYWxpemVkIHN0cmluZ3MgYWNjb3JkaW5nIHRvIHRoZSBzZWxlY3RlZCBsb2NhbGUuICovXG5cdEBJbnB1dCgpXG5cdGdldCBtZXNzYWdlcygpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubWVzc2FnZXMgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IG1lc3NhZ2VzKHZhbHVlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubWVzc2FnZXMgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGEgdXNlciBtdXN0IGVudGVyIGluIHRoZSBpbnB1dCBmaWVsZCBiZWZvcmUgdGhlIGF1dG9jb21wbGV0ZSBmZWF0dXJlIGlzIGFjdGl2YXRlZCBhbmQgc3VnZ2VzdGlvbnMgYXJlIGRpc3BsYXllZC4gKi9cblx0QElucHV0KClcblx0Z2V0IG1pbkxlbmd0aCgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubWluTGVuZ3RoIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBtaW5MZW5ndGgodmFsdWU6IG51bWJlcikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5taW5MZW5ndGggPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIGVudGVyZWQgaW50byB0aGUgaW5wdXQgZmllbGQuIEFueSBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgYmV5b25kIHRoaXMgbGltaXQgd2lsbCBub3QgYmUgYWNjZXB0ZWQuIFRoaXMgaGVscHMgZW5mb3JjZSBkYXRhIHZhbGlkYXRpb24gYW5kIGNvbnNpc3RlbmN5IGZvciB1c2VyIGlucHV0LiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgbWF4TGVuZ3RoKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5tYXhMZW5ndGggOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IG1heExlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lm1heExlbmd0aCA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQncyBuYW1lIGF0dHJpYnV0ZS4gVGhlIG5hbWUgYXR0cmlidXRlIHVuaXF1ZWx5IGlkZW50aWZpZXMgZm9ybSBlbGVtZW50cyB3aGVuIHN1Ym1pdHRpbmcgSFRNTCBmb3JtcywgYWxsb3dpbmcgdGhlIGZvcm0gZGF0YSB0byBiZSBvcmdhbml6ZWQgYW5kIGFjY2Vzc2VkIGJ5IG5hbWUgb24gdGhlIHNlcnZlciBzaWRlLiBUaGlzIGF0dHJpYnV0ZSBpcyBlc3NlbnRpYWwgZm9yIGdyb3VwaW5nIGZvcm0gY29udHJvbHMgYW5kIGFjY3VyYXRlbHkgdHJhbnNtaXR0aW5nIHVzZXIgaW5wdXQgZHVyaW5nIGZvcm0gc3VibWlzc2lvbi4gKi9cblx0QElucHV0KClcblx0Z2V0IG5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lm5hbWUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IG5hbWUodmFsdWU6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5uYW1lID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBwb3B1cCBpcyBjdXJyZW50bHkgdmlzaWJsZSAob3Blbikgb3IgaGlkZGVuIChjbG9zZWQpIGluIHRoZSB1c2VyIGludGVyZmFjZS4gKi9cblx0QElucHV0KClcblx0Z2V0IG9wZW5lZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lm9wZW5lZCA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgb3BlbmVkKHZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lm9wZW5lZCA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIHBsYWNlaG9sZGVyIHRleHQgdGhhdCBhcHBlYXJzIGluc2lkZSB0aGUgaW5wdXQgZmllbGQgd2hlbiBpdCBpcyBlbXB0eSwgcHJvdmlkaW5nIGd1aWRhbmNlIG9yIGV4YW1wbGUgY29udGVudCB0byB0aGUgdXNlci4gKi9cblx0QElucHV0KClcblx0Z2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5wbGFjZWhvbGRlciA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5wbGFjZWhvbGRlciA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBQcmV2ZW50cyBhbnkgdXNlciBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZWxlbWVudCwgaW5jbHVkaW5nIGNsaWNraW5nLCB0YXBwaW5nLCBzZWxlY3RpbmcsIGhvdmVyaW5nLCBvciBmb2N1c2luZy4gV2hpbGUgdGhpcyBpcyBlbmFibGVkLCB0aGUgZWxlbWVudCB3aWxsIG5vdCByZXNwb25kIHRvIG1vdXNlLCBrZXlib2FyZCwgb3IgdG91Y2ggZXZlbnRzLCBlZmZlY3RpdmVseSBtYWtpbmcgaXQgbm9uLWludGVyYWN0aXZlIGZvciB1c2Vycy4gKi9cblx0QElucHV0KClcblx0Z2V0IHJlYWRvbmx5KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQucmVhZG9ubHkgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHJlYWRvbmx5KHZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnJlYWRvbmx5ID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyBvciByZXRyaWV2ZXMgYSB2YWx1ZSB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgZWxlbWVudOKAmXMgdGV4dCBkaXJlY3Rpb24gaXMgc2V0IHRvIHN1cHBvcnQgcmlnaHQtdG8tbGVmdCAoUlRMKSBsYW5ndWFnZXMsIHN1Y2ggYXMgQXJhYmljIG9yIEhlYnJldy4gV2hlbiBlbmFibGVkLCB0aGUgZWxlbWVudCBhbmQgaXRzIGNvbnRlbnQgYXJlIGFsaWduZWQgYWNjb3JkaW5nIHRvIFJUTCBmb3JtYXR0aW5nLCBlbnN1cmluZyBwcm9wZXIgZGlzcGxheSBmb3IgbG9jYWxlcyB0aGF0IHVzZSByaWdodC10by1sZWZ0IHNjcmlwdHMuICovXG5cdEBJbnB1dCgpXG5cdGdldCByaWdodFRvTGVmdCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnJpZ2h0VG9MZWZ0IDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCByaWdodFRvTGVmdCh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5yaWdodFRvTGVmdCA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBDb250cm9scyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgcmVzaXplIGluZGljYXRvciBsb2NhdGVkIGluIHRoZSBib3R0b20tcmlnaHQgY29ybmVyIG9mIHRoZSBkcm9wZG93biBjb21wb25lbnQuIFdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZSwgdXNlcnMgd2lsbCBzZWUgYSBoYW5kbGUgYWxsb3dpbmcgdGhlbSB0byByZXNpemUgdGhlIGRyb3Bkb3duIGFyZWEuIFRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgcmVzaXplTW9kZSBwcm9wZXJ0eSB0byBkZWZpbmUgYm90aCB0aGUgYXZhaWxhYmlsaXR5IGFuZCBiZWhhdmlvciBvZiB0aGUgcmVzaXppbmcgZmVhdHVyZS4gKi9cblx0QElucHV0KClcblx0Z2V0IHJlc2l6ZUluZGljYXRvcigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnJlc2l6ZUluZGljYXRvciA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgcmVzaXplSW5kaWNhdG9yKHZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnJlc2l6ZUluZGljYXRvciA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZHJvcC1kb3duIG1lbnUgaXMgcmVzaXphYmxlIGJ5IHRoZSB1c2VyLiBJZiByZXNpemluZyBpcyBlbmFibGVkLCBhIHJlc2l6ZSBiYXIgd2lsbCBiZSBkaXNwbGF5ZWQgYWxvbmcgdGhlIHRvcCBvciBib3R0b20gZWRnZSBvZiB0aGUgZHJvcC1kb3duLCBhbGxvd2luZyB1c2VycyB0byBjbGljayBhbmQgZHJhZyB0byBhZGp1c3QgaXRzIGhlaWdodC4gRGlzYWJsaW5nIHRoaXMgb3B0aW9uIHJlbW92ZXMgdGhlIHJlc2l6ZSBiYXIgYW5kIHByZXZlbnRzIGFueSBtYW51YWwgcmVzaXppbmcgb2YgdGhlIGRyb3AtZG93biBjb21wb25lbnQuICovXG5cdEBJbnB1dCgpXG5cdGdldCByZXNpemVNb2RlKCk6IFJlc2l6ZU1vZGUgfCBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQucmVzaXplTW9kZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgcmVzaXplTW9kZSh2YWx1ZTogUmVzaXplTW9kZSB8IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5yZXNpemVNb2RlID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgY29udGVudCBvciB2YWx1ZSB0aGF0IHdpbGwgYXBwZWFyIHdpdGhpbiB0aGUgaW5wdXQgZmllbGQsIGVpdGhlciBhcyBhIGRlZmF1bHQgdmFsdWUsIHVzZXItZW50ZXJlZCBkYXRhLCBvciBkeW5hbWljYWxseSBnZW5lcmF0ZWQgY29udGVudC4gVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHdoYXQgdGhlIHVzZXIgc2VlcyBhbmQgaW50ZXJhY3RzIHdpdGggaW5zaWRlIHRoZSBpbnB1dCBlbGVtZW50LiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgc2VsZWN0aW9uRGlzcGxheU1vZGUoKTogU2VsZWN0aW9uRGlzcGxheU1vZGUgfCBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uRGlzcGxheU1vZGUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHNlbGVjdGlvbkRpc3BsYXlNb2RlKHZhbHVlOiBTZWxlY3Rpb25EaXNwbGF5TW9kZSB8IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25EaXNwbGF5TW9kZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgc2VsZWN0ZWQgaW5kZXhlcy4gVGhlIHNlbGVjdGVkIGluZGV4ZXMgcHJvcGVydHkgaXMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbnVtZXJpYyBpbmRleGVzIG9mIHRoZSBpdGVtcyB0aGF0IGFyZSBjdXJyZW50bHkgc2VsZWN0ZWQuIEVhY2ggdmFsdWUgaW4gdGhlIGFycmF5IGNvcnJlc3BvbmRzIHRvIHRoZSBwb3NpdGlvbiBvZiBhIHNlbGVjdGVkIGl0ZW0gd2l0aGluIHRoZSBvdmVyYWxsIGxpc3Qgb3IgY29sbGVjdGlvbi4gQXNzaWduaW5nIGEgbmV3IGFycmF5IHRvIHRoaXMgcHJvcGVydHkgdXBkYXRlcyB0aGUgc2VsZWN0aW9uIHN0YXRlIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQgaW5kZXhlczsgcmV0cmlldmluZyBpdCByZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhcyBhbiBhcnJheSBvZiBpbmRleGVzLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgc2VsZWN0ZWRJbmRleGVzKCk6IG51bWJlcltdIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGVkSW5kZXhlcyA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgc2VsZWN0ZWRJbmRleGVzKHZhbHVlOiBudW1iZXJbXSkge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3RlZEluZGV4ZXMgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gICBcIlNldHMgb3IgcmV0cmlldmVzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW5kZXhlcy4gVGhlICdzZWxlY3RlZCcgcHJvcGVydHkgaG9sZHMgYW4gYXJyYXkgb2YgdGhlIGluZGljZXMgY29ycmVzcG9uZGluZyB0byB0aGUgaXRlbXMgdGhhdCBhcmUgbWFya2VkIGFzIHNlbGVjdGVkLiBXaGVuIHNldHRpbmcgdGhpcyBwcm9wZXJ0eSwgcHJvdmlkZSBhbiBhcnJheSBvZiBpbmRleGVzIHRvIHNwZWNpZnkgd2hpY2ggaXRlbXMgc2hvdWxkIGJlIHNlbGVjdGVkLiBXaGVuIGdldHRpbmcgdGhpcyBwcm9wZXJ0eSwgaXQgcmV0dXJucyB0aGUgYXJyYXkgb2YgaW5kZXhlcyBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcy5cIiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgc2VsZWN0ZWRWYWx1ZXMoKTogc3RyaW5nW10ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuc2VsZWN0ZWRWYWx1ZXMgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHNlbGVjdGVkVmFsdWVzKHZhbHVlOiBzdHJpbmdbXSkge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3RlZFZhbHVlcyA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgYSB1c2VyIGlzIGFsbG93ZWQgdG8gc2VsZWN0IGF0IG9uZSB0aW1lLiBJZiB0aGlzIHZhbHVlIGlzIHNldCB0byAxLCBvbmx5IHNpbmdsZSBzZWxlY3Rpb24gaXMgcGVybWl0dGVkOyBoaWdoZXIgdmFsdWVzIGFsbG93IG11bHRpcGxlIHNlbGVjdGlvbnMgdXAgdG8gdGhlIGRlZmluZWQgbGltaXQuICovXG5cdEBJbnB1dCgpXG5cdGdldCBzZWxlY3Rpb25Nb2RlKCk6IExpc3RTZWxlY3Rpb25Nb2RlIHwgc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbk1vZGUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHNlbGVjdGlvbk1vZGUodmFsdWU6IExpc3RTZWxlY3Rpb25Nb2RlIHwgc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbk1vZGUgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGl0ZW1zIGFyZSBhcnJhbmdlZCBpbiBhbHBoYWJldGljYWwgb3JkZXIuIElmIHNldCB0byB0cnVlLCB0aGUgaXRlbXMgd2lsbCBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHk7IGlmIGZhbHNlLCB0aGUgb3JpZ2luYWwgb3JkZXIgd2lsbCBiZSBwcmVzZXJ2ZWQuICovXG5cdEBJbnB1dCgpXG5cdGdldCBzb3J0ZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5zb3J0ZWQgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHNvcnRlZCh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5zb3J0ZWQgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBzb3J0aW5nIG9yZGVyIGZvciBkYXRhLCBhbGxvd2luZyB5b3UgdG8gY2hvb3NlIGJldHdlZW4gYXNjZW5kaW5nIChcImFzY1wiKSBmb3IgbG93ZXN0LXRvLWhpZ2hlc3Qgb3IgYWxwaGFiZXRpY2FsIEHigJNaIHNvcnRpbmcsIGFuZCBkZXNjZW5kaW5nIChcImRlc2NcIikgZm9yIGhpZ2hlc3QtdG8tbG93ZXN0IG9yIFrigJNBIHNvcnRpbmcuICovXG5cdEBJbnB1dCgpXG5cdGdldCBzb3J0RGlyZWN0aW9uKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5zb3J0RGlyZWN0aW9uIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBzb3J0RGlyZWN0aW9uKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuc29ydERpcmVjdGlvbiA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIHZpc3VhbCB0aGVtZSB0byBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LiBUaGUgc2VsZWN0ZWQgdGhlbWUgY29udHJvbHMgdGhlIGVsZW1lbnTigJlzIGFwcGVhcmFuY2UsIGluY2x1ZGluZyBjb2xvcnMsIGZvbnRzLCBhbmQgb3RoZXIgc3R5bGlzdGljIHByb3BlcnRpZXMsIGVuc3VyaW5nIGEgY29uc2lzdGVudCBsb29rIGFuZCBmZWVsIGFjcm9zcyB0aGUgdXNlciBpbnRlcmZhY2UuICovXG5cdEBJbnB1dCgpXG5cdGdldCB0aGVtZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQudGhlbWUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHRoZW1lKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQudGhlbWUgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gRGVmaW5lcyB0aGUgY3VzdG9tIGNvbnRlbnQgdG8gZGlzcGxheSB3aXRoaW4gZWFjaCB0b2tlbiB3aGVuIHRoZSBzZWxlY3Rpb25EaXNwbGF5TW9kZSBpcyBzZXQgdG8gXCJ0b2tlbnNcIi4gVG9rZW5zIHZpc3VhbGx5IHJlcHJlc2VudCBzZWxlY3RlZCBpdGVtcyBpbiBhIG11bHRpLXNlbGVjdCBpbnRlcmZhY2UgYW5kIGFyZSBvbmx5IGFwcGxpY2FibGUgd2hlbiBtdWx0aXBsZSBzZWxlY3Rpb24gaXMgZW5hYmxlZC4gVXNlIHRoaXMgb3B0aW9uIHRvIGN1c3RvbWl6ZSBob3cgZWFjaCB0b2tlbiBhcHBlYXJzLCBzdWNoIGFzIGRpc3BsYXlpbmcgc3BlY2lmaWMgdGV4dCwgaWNvbnMsIG9yIGFkZGl0aW9uYWwgZGF0YSBmb3IgZWFjaCBzZWxlY3RlZCBpdGVtLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgdG9rZW5UZW1wbGF0ZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQudG9rZW5UZW1wbGF0ZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgdG9rZW5UZW1wbGF0ZSh2YWx1ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnRva2VuVGVtcGxhdGUgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gSWYgc2V0IHRvIHRydWUsIHRoZSBlbGVtZW50IHdpbGwgbm90IGJlIGFibGUgdG8gcmVjZWl2ZSBrZXlib2FyZCBvciBtb3VzZSBmb2N1cywgbWFraW5nIGl0IGluYWNjZXNzaWJsZSB2aWEgdGFiIG5hdmlnYXRpb24gb3IgcHJvZ3JhbW1hdGljIGZvY3VzIG1ldGhvZHMuICovXG5cdEBJbnB1dCgpXG5cdGdldCB1bmZvY3VzYWJsZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnVuZm9jdXNhYmxlIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCB1bmZvY3VzYWJsZSh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC51bmZvY3VzYWJsZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIHJldHJpZXZlIChnZXQpIG9yIGFzc2lnbiAoc2V0KSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuIFdoZW4gdXNlZCBhcyBhIGdldHRlciwgaXQgcmV0dXJucyB0aGUgcHJvcGVydHkncyBjdXJyZW50IHZhbHVlLiBXaGVuIHVzZWQgYXMgYSBzZXR0ZXIsIGl0IHVwZGF0ZXMgdGhlIHByb3BlcnR5IHdpdGggdGhlIHNwZWNpZmllZCB2YWx1ZS4gKi9cblx0QElucHV0KClcblx0Z2V0IHZhbHVlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC52YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgdmFsdWUodmFsdWU6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgd2hpY2ggcHJvcGVydHkgb2YgZWFjaCBpdGVtIG9iamVjdCBzaG91bGQgYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRoYXQgaXRlbS4gVGhlIHZhbHVlIGRlc2lnbmF0ZWQgYnkgdmFsdWVNZW1iZXIgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGl0ZW0ncyB2YWx1ZSBmaWVsZC4gVGhpcyBwcm9wZXJ0eSBmdW5jdGlvbnMgc2ltaWxhcmx5IHRvIGdyb3VwTWVtYmVyLCBidXQgaXMgZm9jdXNlZCBvbiBpZGVudGlmeWluZyB0aGUgdmFsdWUgcmF0aGVyIHRoYW4gdGhlIGdyb3VwLiB2YWx1ZU1lbWJlciBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIHdoZW4gcG9wdWxhdGluZyBhIExpc3RCb3ggZnJvbSBhIEpTT04gZGF0YSBzb3VyY2UsIGFzIGl0IGFsbG93cyB5b3UgdG8gc3BlY2lmeSB3aGljaCBwcm9wZXJ0eSBvZiB5b3VyIGRhdGEgb2JqZWN0cyBzaG91bGQgc2VydmUgYXMgdGhlIHVuaXF1ZSB2YWx1ZSBmb3IgZWFjaCBpdGVtIGluIHRoZSBMaXN0Qm94LiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgdmFsdWVNZW1iZXIoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnZhbHVlTWVtYmVyIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCB2YWx1ZU1lbWJlcih2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnZhbHVlTWVtYmVyID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIENvbnRyb2xzIHdoZXRoZXIgdGhlIHZlcnRpY2FsIHNjcm9sbCBiYXIgaXMgZGlzcGxheWVkIHdpdGhpbiB0aGUgY29udGVudCBhcmVhLCBhbGxvd2luZyB1c2VycyB0byBzY3JvbGwgdmVydGljYWxseSB3aGVuIHRoZSBjb250ZW50IGV4dGVuZHMgYmV5b25kIHRoZSB2aXNpYmxlIHJlZ2lvbi4gKi9cblx0QElucHV0KClcblx0Z2V0IHZlcnRpY2FsU2Nyb2xsQmFyVmlzaWJpbGl0eSgpOiBWZXJ0aWNhbFNjcm9sbEJhclZpc2liaWxpdHkgfCBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQudmVydGljYWxTY3JvbGxCYXJWaXNpYmlsaXR5IDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCB2ZXJ0aWNhbFNjcm9sbEJhclZpc2liaWxpdHkodmFsdWU6IFZlcnRpY2FsU2Nyb2xsQmFyVmlzaWJpbGl0eSB8IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC52ZXJ0aWNhbFNjcm9sbEJhclZpc2liaWxpdHkgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gRGV0ZXJtaW5lcyB3aGV0aGVyIHZpcnR1YWxpemF0aW9uIGlzIGVuYWJsZWQgZm9yIHRoZSBDb21ib0JveC4gV2hlbiB2aXJ0dWFsaXphdGlvbiBpcyBlbmFibGVkLCB0aGUgQ29tYm9Cb3ggY2FuIGVmZmljaWVudGx5IGRpc3BsYXkgYSB2ZXJ5IGxhcmdlIG51bWJlciBvZiBpdGVtc+KAlHN1Y2ggYXMgYSBtaWxsaW9u4oCUYnkgb25seSByZW5kZXJpbmcgdGhlIHZpc2libGUgaXRlbXMgaW4gdGhlIExpc3RCb3ggYW5kIGR5bmFtaWNhbGx5IGxvYWRpbmcgaXRlbXMgYXMgbmVlZGVkLiBUaGlzIHNpZ25pZmljYW50bHkgaW1wcm92ZXMgcGVyZm9ybWFuY2UgYW5kIHJlZHVjZXMgbWVtb3J5IHVzYWdlLCBlc3BlY2lhbGx5IHdpdGggbGFyZ2UgZGF0YSBzZXRzLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgdmlydHVhbGl6ZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC52aXJ0dWFsaXplZCA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgdmlydHVhbGl6ZWQodmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQudmlydHVhbGl6ZWQgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbmV2ZXIgdGhlIHVzZXIgY2hhbmdlcyB0aGUgY3VycmVudCBzZWxlY3Rpb24sIHN1Y2ggYXMgaGlnaGxpZ2h0aW5nIGRpZmZlcmVudCB0ZXh0IG9yIHNlbGVjdGluZyBhIG5ldyBpdGVtIGluIGEgbGlzdC4gSXQgYWxsb3dzIHlvdSB0byBkZXRlY3QgYW5kIHJlc3BvbmQgdG8gdXBkYXRlcyBpbiB0aGUgc2VsZWN0ZWQgY29udGVudCBvciBvcHRpb25zIHdpdGhpbiB0aGUgaW50ZXJmYWNlLlxuXHQqICBAcGFyYW0gZXZlbnQuIFRoZSBjdXN0b20gZXZlbnQuIFx0Q3VzdG9tIGV2ZW50IHdhcyBjcmVhdGVkIHdpdGg6IGV2ZW50LmRldGFpbChcdGFkZGVkSXRlbXMsIFx0ZGlzYWJsZWQsIFx0aW5kZXgsIFx0bGFiZWwsIFx0cmVtb3ZlZEl0ZW1zLCBcdHNlbGVjdGVkLCBcdHZhbHVlKVxuXHQqICAgYWRkZWRJdGVtcyAtIEFuIGFycmF5IG9mIExpc3QgaXRlbXMgdGhhdCBoYXZlIGJlZW4gc2VsZWN0ZWQuXG5cdCogICBkaXNhYmxlZCAtIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRoZSBpdGVtIHRoYXQgY2F1c2VkIHRoZSBjaGFuZ2UgZXZlbnQgaXMgZGlzYWJsZWQuXG5cdCogICBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgTGlzdCBpdGVtIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC5cblx0KiAgIGxhYmVsIC0gVGhlIGxhYmVsIG9mIHRoZSBMaXN0IGl0ZW0gdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LlxuXHQqICAgcmVtb3ZlZEl0ZW1zIC0gQW4gYXJyYXkgb2YgTGlzdCBpdGVtcyB0aGF0IGhhdmUgYmVlbiB1bnNlbGVjdGVkIGJlZm9yZSB0aGUgZXZlbnQgd2FzIGZpcmVkLlxuXHQqICAgc2VsZWN0ZWQgLSBUaGUgc2VsZWN0ZWQgc3RhdGUgb2YgdGhlIExpc3QgaXRlbSB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuIElmIGFuIGl0ZW0gd2FzIHNlbGVjdGVkIHRoZSB2YWx1ZSB3aWxsIGJlIHRydWUgYW5kIHZpY2UgdmVyc2EuXG5cdCogICB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgTGlzdCBpdGVtIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC5cblx0Ki9cblx0QE91dHB1dCgpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKiBAZGVzY3JpcHRpb24gVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgZHJvcC1kb3duIGxpc3QgaXMgY2xvc2VkLCBlaXRoZXIgYnkgdGhlIHVzZXIgc2VsZWN0aW5nIGFuIG9wdGlvbiBvciBieSBjbGlja2luZyBvdXRzaWRlIHRoZSBtZW51LiBJdCBvY2N1cnMgYWZ0ZXIgdGhlIGRyb3AtZG93biBtZW51IGlzIG5vIGxvbmdlciB2aXNpYmxlLCBhbGxvd2luZyB5b3UgdG8gcGVyZm9ybSBhY3Rpb25zIGluIHJlc3BvbnNlIHRvIHRoZSBtZW51J3MgY2xvc3VyZS5cblx0KiAgQHBhcmFtIGV2ZW50LiBUaGUgY3VzdG9tIGV2ZW50LiBcdCovXG5cdEBPdXRwdXQoKSBvbkNsb3NlOiBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKiBAZGVzY3JpcHRpb24gVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgcmlnaHQgYmVmb3JlIHRoZSBkcm9wZG93biBsaXN0IGlzIGFib3V0IHRvIGNsb3NlLCBwcm92aWRpbmcgYW4gb3Bwb3J0dW5pdHkgdG8gaW50ZXJ2ZW5lLiBCeSBjYWxsaW5nIGV2ZW50LnByZXZlbnREZWZhdWx0KCkgd2l0aGluIHRoZSBldmVudCBoYW5kbGVyLCB5b3UgY2FuIGNhbmNlbCB0aGUgY2xvc2luZyBvcGVyYXRpb24sIGFsbG93aW5nIHlvdSB0byBwZXJmb3JtIHZhbGlkYXRpb24sIGRpc3BsYXkgYSBjb25maXJtYXRpb24gZGlhbG9nLCBvciBleGVjdXRlIGN1c3RvbSBsb2dpYyBiZWZvcmUgdGhlIGRyb3Bkb3duIGlzIGNsb3NlZC5cblx0KiAgQHBhcmFtIGV2ZW50LiBUaGUgY3VzdG9tIGV2ZW50LiBcdCovXG5cdEBPdXRwdXQoKSBvbkNsb3Npbmc6IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuZXZlciBhIHVzZXIgY2xpY2tzIG9uIGEgc3BlY2lmaWMgaXRlbSwgYWxsb3dpbmcgeW91IHRvIGV4ZWN1dGUgY3VzdG9tIGFjdGlvbnMgaW4gcmVzcG9uc2UgdG8gdGhlIHVzZXIncyBzZWxlY3Rpb24uIFRoZSBldmVudCBwcm92aWRlcyBjb250ZXh0IGFib3V0IHRoZSBjbGlja2VkIGl0ZW0sIGVuYWJsaW5nIHlvdSB0byBhY2Nlc3MgaXRzIHByb3BlcnRpZXMgb3IgcGVyZm9ybSByZWxhdGVkIHVwZGF0ZXMgd2l0aGluIHlvdXIgYXBwbGljYXRpb24uXG5cdCogIEBwYXJhbSBldmVudC4gVGhlIGN1c3RvbSBldmVudC4gXHRDdXN0b20gZXZlbnQgd2FzIGNyZWF0ZWQgd2l0aDogZXZlbnQuZGV0YWlsKFx0ZGlzYWJsZWQsIFx0aW5kZXgsIFx0bGFiZWwsIFx0c2VsZWN0ZWQsIFx0dmFsdWUpXG5cdCogICBkaXNhYmxlZCAtIEluZGljYXRlcyB3aGV0aGVyIHRoZSBMaXN0IGl0ZW0gdGhhdCB3YXMgY2xpY2tlZCBpcyBkaXNhYmxlZCBvciBub3QuXG5cdCogICBpbmRleCAtIEluZGljYXRlcyB0aGUgaW5kZXggb2YgdGhlIExpc3QgaXRlbSB0aGF0IHdhcyBjbGlja2VkLlxuXHQqICAgbGFiZWwgLSBUaGUgbGFiZWwgb2YgdGhlIExpc3QgaXRlbSB0aGF0IHdhcyBjbGlja2VkLlxuXHQqICAgc2VsZWN0ZWQgLSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgTGlzdCBpdGVtIHRoYXQgd2FzIGNsaWNrZWQgaXMgc2VsZWN0ZWQgb3Igbm90LlxuXHQqICAgdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIExpc3QgaXRlbSB0aGF0IHdhcyBjbGlja2VkLlxuXHQqL1xuXHRAT3V0cHV0KCkgb25JdGVtQ2xpY2s6IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuZXZlciB0aGUgZHJvcGRvd24gbGlzdCBiZWNvbWVzIHZpc2libGUgdG8gdGhlIHVzZXIsIHN1Y2ggYXMgd2hlbiB0aGUgdXNlciBjbGlja3Mgb3IgaW50ZXJhY3RzIHdpdGggdGhlIGNvbnRyb2wgdG8gZXhwYW5kIGFuZCBkaXNwbGF5IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb25zLiBVc2UgdGhpcyBldmVudCB0byBleGVjdXRlIGN1c3RvbSBsb2dpYyB3aGVuIHRoZSBkcm9wZG93biBtZW51IGlzIG9wZW5lZC5cblx0KiAgQHBhcmFtIGV2ZW50LiBUaGUgY3VzdG9tIGV2ZW50LiBcdCovXG5cdEBPdXRwdXQoKSBvbk9wZW46IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRyb3Bkb3duIGxpc3QgaXMgZGlzcGxheWVkIHRvIHRoZSB1c2VyLiBXaXRoaW4gdGhlIGV2ZW50IGhhbmRsZXIsIHlvdSBjYW4gcHJldmVudCB0aGUgZHJvcGRvd24gZnJvbSBvcGVuaW5nIGJ5IGNhbGxpbmcgZXZlbnQucHJldmVudERlZmF1bHQoKS4gVGhpcyBhbGxvd3MgeW91IHRvIGltcGxlbWVudCBjdXN0b20gbG9naWMgdG8gY29uZGl0aW9uYWxseSBhbGxvdyBvciBibG9jayB0aGUgb3BlbmluZyBvZiB0aGUgZHJvcGRvd24sIHN1Y2ggYXMgdmFsaWRhdGluZyBjb25kaXRpb25zIG9yIG1hbmFnaW5nIHVzZXIgcGVybWlzc2lvbnMgYmVmb3JlIHRoZSBsaXN0IGlzIHNob3duLlxuXHQqICBAcGFyYW0gZXZlbnQuIFRoZSBjdXN0b20gZXZlbnQuIFx0Ki9cblx0QE91dHB1dCgpIG9uT3BlbmluZzogRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKiogQGRlc2NyaXB0aW9uIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgaW5pdGlhdGVzIHRoZSByZXNpemluZyBhY3Rpb24gb24gdGhlIGRyb3Bkb3duIGNvbXBvbmVudCwgc3VjaCBhcyBjbGlja2luZyBhbmQgZHJhZ2dpbmcgYSByZXNpemUgaGFuZGxlLiBJdCBhbGxvd3MgZGV2ZWxvcGVycyB0byBkZXRlY3QgdGhlIGV4YWN0IG1vbWVudCB3aGVuIGEgcmVzaXplIG9wZXJhdGlvbiBvbiB0aGUgZHJvcGRvd24gYmVnaW5zLlxuXHQqICBAcGFyYW0gZXZlbnQuIFRoZSBjdXN0b20gZXZlbnQuIFx0Q3VzdG9tIGV2ZW50IHdhcyBjcmVhdGVkIHdpdGg6IGV2ZW50LmRldGFpbChcdHBvc2l0aW9uKVxuXHQqICAgcG9zaXRpb24gLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY3VycmVudCBsZWZ0IGFuZCB0b3AgcG9zaXRpb25zIG9mIHRoZSBkcm9wIGRvd24uXG5cdCovXG5cdEBPdXRwdXQoKSBvblJlc2l6ZVN0YXJ0OiBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKiBAZGVzY3JpcHRpb24gVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgdGhlIHVzZXIgaGFzIGNvbXBsZXRlZCByZXNpemluZyB0aGUgZHJvcGRvd24gbWVudSwgc2lnbmFsaW5nIHRoYXQgdGhlIHJlc2l6aW5nIGFjdGlvbiBoYXMgZW5kZWQgYW5kIHRoZSBuZXcgZGltZW5zaW9ucyBoYXZlIGJlZW4gc2V0LlxuXHQqICBAcGFyYW0gZXZlbnQuIFRoZSBjdXN0b20gZXZlbnQuIFx0Q3VzdG9tIGV2ZW50IHdhcyBjcmVhdGVkIHdpdGg6IGV2ZW50LmRldGFpbChcdHBvc2l0aW9uKVxuXHQqICAgcG9zaXRpb24gLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY3VycmVudCBsZWZ0IGFuZCB0b3AgcG9zaXRpb25zIG9mIHRoZSBkcm9wIGRvd24uXG5cdCovXG5cdEBPdXRwdXQoKSBvblJlc2l6ZUVuZDogRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKiogQGRlc2NyaXB0aW9uIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIHVzZXIgc2Nyb2xscyB0byB0aGUgYm90dG9tIG9mIHRoZSBkcm9wZG93biBsaXN0LCBpbmRpY2F0aW5nIHRoYXQgYWxsIGF2YWlsYWJsZSBvcHRpb25zIGhhdmUgYmVlbiBkaXNwbGF5ZWQuIEl0IGNhbiBiZSB1c2VkIHRvIGRldGVjdCB3aGVuIGFkZGl0aW9uYWwgZGF0YSBzaG91bGQgYmUgbG9hZGVkIG9yIHdoZW4gbm8gZnVydGhlciBvcHRpb25zIHJlbWFpbiBpbiB0aGUgZHJvcGRvd24uXG5cdCogIEBwYXJhbSBldmVudC4gVGhlIGN1c3RvbSBldmVudC4gXHQqL1xuXHRAT3V0cHV0KCkgb25TY3JvbGxCb3R0b21SZWFjaGVkOiBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKiBAZGVzY3JpcHRpb24gVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBzY3JvbGxzIHRvIHRoZSB2ZXJ5IGJlZ2lubmluZyAodG9wKSBvZiB0aGUgZHJvcGRvd24gbGlzdCwgaW5kaWNhdGluZyB0aGF0IG5vIG1vcmUgaXRlbXMgYXJlIGF2YWlsYWJsZSBhYm92ZSB0aGUgY3VycmVudCB2aWV3LlxuXHQqICBAcGFyYW0gZXZlbnQuIFRoZSBjdXN0b20gZXZlbnQuIFx0Ki9cblx0QE91dHB1dCgpIG9uU2Nyb2xsVG9wUmVhY2hlZDogRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKiogQGRlc2NyaXB0aW9uIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gYSB0b2tlbiBpdGVtIChhbHNvIGtub3duIGFzIGEgJ3BpbGwnKSBpcyBjbGlja2VkIGJ5IHRoZSB1c2VyLiBCeSBoYW5kbGluZyB0aGlzIGV2ZW50LCBkZXZlbG9wZXJzIGhhdmUgdGhlIG9wcG9ydHVuaXR5IHRvIGludGVyY2VwdCB0aGUgZGVmYXVsdCBhY3Rpb24gdGhhdCB3b3VsZCBub3JtYWxseSBvY2N1ciB3aGVuIHRoZSB0b2tlbiBpcyBjbGlja2Vk4oCUc3VjaCBhcyBvcGVuaW5nIGEgZHJvcGRvd24gb3IgcGVyZm9ybWluZyBhbm90aGVyIHJlbGF0ZWQgb3BlcmF0aW9uLiBUbyBwcmV2ZW50IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZyb20gZXhlY3V0aW5nLCBjYWxsIGV2ZW50LnByZXZlbnREZWZhdWx0KCkgd2l0aGluIHlvdXIgZXZlbnQgaGFuZGxlciBmdW5jdGlvbi5cIlxuXHQqICBAcGFyYW0gZXZlbnQuIFRoZSBjdXN0b20gZXZlbnQuIFx0Ki9cblx0QE91dHB1dCgpIG9uVG9rZW5DbGljazogRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKiogQGRlc2NyaXB0aW9uIEFwcGVuZHMgYSBuZXcgTGlzdEl0ZW0gZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBleGlzdGluZyBsaXN0IG9mIGl0ZW1zIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciBlbGVtZW50LCB0aGVyZWJ5IHVwZGF0aW5nIHRoZSBsaXN0IHRvIGluY2x1ZGUgdGhlIG5ld2x5IGFkZGVkIGl0ZW0gYXMgaXRzIGxhc3QgZW50cnkuIFxuXHQqIEBwYXJhbSB7Tm9kZX0gbm9kZS4gQSBMaXN0SXRlbSBlbGVtZW50IHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByZXN0IG9mIHRoZSBpdGVtcyBhcyB0aGUgbGFzdCBpdGVtLlxuXHQqIEByZXR1cm5zIHtOb2RlfVxuICAqL1xuXHRwdWJsaWMgYXN5bmMgYXBwZW5kQ2hpbGQobm9kZSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgZ2V0UmVzdWx0T25SZW5kZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0UmVzdWx0T25SZW5kZXIoKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuXHRwdWJsaWMgYXBwZW5kQ2hpbGRTeW5jKG5vZGUpOiBOb2RlIHtcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkKSB7XG4gXHQgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGFuZCBhcHBlbmRzIG9uZSBvciBtb3JlIG5ldyBpdGVtcyB0byB0aGUgY29sbGVjdGlvbiBvciBsaXN0LiBcblx0KiBAcGFyYW0ge2FueX0gaXRlbS4gRGVzY3JpYmVzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtIHRoYXQgd2lsbCBiZSBpbnNlcnRlZC4gWW91IGNhbiBhbHNvIHBhc3MgYW4gYXJyYXkgb2YgaXRlbXMuXG5cdCovXG4gICAgcHVibGljIGFkZChpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmFkZChpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBhbGwgZXhpc3RpbmcgaXRlbXMgZnJvbSB0aGUgZHJvcGRvd24gbGlzdCwgcmVzdWx0aW5nIGluIGFuIGVtcHR5IGxpc3Qgd2l0aCBubyBzZWxlY3RhYmxlIG9wdGlvbnMgZGlzcGxheWVkIHRvIHRoZSB1c2VyLiBcblx0Ki9cbiAgICBwdWJsaWMgY2xlYXJJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuY2xlYXJJdGVtcygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmNsZWFySXRlbXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gRGVzZWxlY3RzIGFsbCBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbXMsIGVuc3VyaW5nIHRoYXQgbm8gaXRlbXMgcmVtYWluIHNlbGVjdGVkLiBUaGlzIGFjdGlvbiBjbGVhcnMgYW55IGV4aXN0aW5nIHNlbGVjdGlvbnMgYW5kIHJlc2V0cyB0aGUgc2VsZWN0aW9uIHN0YXRlLiBcblx0Ki9cbiAgICBwdWJsaWMgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQuaXNSZW5kZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQud2hlblJlbmRlcmVkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gQ2xvc2VzIHRoZSBjdXJyZW50bHkgb3BlbiBkcm9wLWRvd24gbGlzdCwgaGlkaW5nIGFsbCBhdmFpbGFibGUgb3B0aW9ucyBmcm9tIHZpZXcgYW5kIHJldHVybmluZyB0aGUgY29tcG9uZW50IHRvIGl0cyBjb2xsYXBzZWQgc3RhdGUuIFRoaXMgYWN0aW9uIGVuc3VyZXMgdGhhdCB0aGUgZHJvcC1kb3duIG1lbnUgaXMgbm8gbG9uZ2VyIHZpc2libGUgdG8gdGhlIHVzZXIuIFxuXHQqL1xuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5jbG9zZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBJbml0aWF0ZXMgYSBkYXRhIGJpbmRpbmcgcHJvY2VzcywgY29ubmVjdGluZyBVSSBjb21wb25lbnRzIHRvIHRoZSB1bmRlcmx5aW5nIGRhdGEgc291cmNlLiBUaGlzIG1ldGhvZCByZWZyZXNoZXMgdGhlIGRhdGEgc291cmNlLCBlbnN1cmluZyB0aGF0IGFueSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGRhdGEgYXJlIHJlZmxlY3RlZCBpbiB0aGUgdXNlciBpbnRlcmZhY2UuIEl0IGNhbiBiZSB1c2VkIHRvIHVwZGF0ZSBkaXNwbGF5ZWQgaW5mb3JtYXRpb24gYWZ0ZXIgbW9kaWZ5aW5nLCBhZGRpbmcsIG9yIGRlbGV0aW5nIGRhdGEuIFxuXHQqL1xuICAgIHB1YmxpYyBkYXRhQmluZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuZGF0YUJpbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5kYXRhQmluZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTY3JvbGxzIHRoZSB0YXJnZXQgaXRlbSBpbnRvIHZpZXcgd2l0aGluIGl0cyBjb250YWluZXIsIGF1dG9tYXRpY2FsbHkgYWRqdXN0aW5nIHRoZSBzY3JvbGwgcG9zaXRpb24gYXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGUgZW50aXJlIGl0ZW0gaXMgZnVsbHkgdmlzaWJsZSB0byB0aGUgdXNlci4gXG5cdCogQHBhcmFtIHtIVE1MRWxlbWVudCB8IHN0cmluZ30gaXRlbS4gQSBsaXN0IGl0ZW0gb3IgdmFsdWUgb2YgdGhlIGRlc2lyZWQgaXRlbSB0byBiZSB2aXNpYmxlLlxuXHQqL1xuICAgIHB1YmxpYyBlbnN1cmVWaXNpYmxlKGl0ZW06IEhUTUxFbGVtZW50IHwgc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQuaXNSZW5kZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmVuc3VyZVZpc2libGUoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQud2hlblJlbmRlcmVkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuZW5zdXJlVmlzaWJsZShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIHNwZWNpZmljIGl0ZW0gaW5zdGFuY2UgZnJvbSB0aGUgZHJvcERvd24gbGlzdCwgYWxsb3dpbmcgeW91IHRvIGFjY2VzcyB0aGUgcHJvcGVydGllcyBhbmQgbWV0aG9kcyBvZiB0aGUgc2VsZWN0ZWQgbGlzdCBpdGVtLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpdGVtLCBzdWNoIGFzIGl0cyB2YWx1ZSwgbGFiZWwsIG9yIGluZGV4IHdpdGhpbiB0aGUgZHJvcERvd24uIFxuXHQqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZS4gVGhlIHZhbHVlIG9mIGFuIGl0ZW0gZnJvbSB0aGUgZHJvcCBkb3duIGxpc3QuXG5cdCogQHJldHVybnMge0hUTUxFbGVtZW50fVxuICAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0SXRlbSh2YWx1ZSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgZ2V0UmVzdWx0T25SZW5kZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubmF0aXZlRWxlbWVudC5nZXRJdGVtKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0UmVzdWx0T25SZW5kZXIoKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuXHRwdWJsaWMgZ2V0SXRlbVN5bmModmFsdWUpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQuaXNSZW5kZXJlZCkge1xuIFx0ICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0SXRlbSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gSW5zZXJ0cyBhIG5ldyBpdGVtIGludG8gdGhlIGFycmF5IGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggcG9zaXRpb24sIHNoaWZ0aW5nIGV4aXN0aW5nIGVsZW1lbnRzIHRvIHRoZSByaWdodCB0byBhY2NvbW1vZGF0ZSB0aGUgbmV3IGl0ZW0uIFxuXHQqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbi4gVGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBpdGVtIG11c3QgYmUgaW5zZXJ0ZWQuXG5cdCogQHBhcmFtIHthbnl9IGl0ZW0uIERlc2NyaWJlcyB0aGUgcHJvcGVydGllcyBvZiB0aGUgaXRlbSB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQuIFlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIGl0ZW1zLlxuXHQqL1xuICAgIHB1YmxpYyBpbnNlcnQocG9zaXRpb246IG51bWJlciwgaXRlbTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQuaXNSZW5kZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50Lmluc2VydChwb3NpdGlvbiwgaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQud2hlblJlbmRlcmVkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuaW5zZXJ0KHBvc2l0aW9uLCBpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gSW5zZXJ0cyBhIG5ldyBMaXN0SXRlbSBlbGVtZW50IGRpcmVjdGx5IGJlZm9yZSBhIHNwZWNpZmllZCBleGlzdGluZyBMaXN0SXRlbSB3aXRoaW4gdGhlIGxpc3QsIHByZXNlcnZpbmcgdGhlIG9yZGVyIG9mIHRoZSByZW1haW5pbmcgaXRlbXMuIFxuXHQqIEBwYXJhbSB7Tm9kZX0gbm9kZS4gQSBMaXN0SXRlbSBlbGVtZW50IHRoYXQgc2hvdWxkIGJlIGFkZGVkIGJlZm9yZSB0aGUgcmVmZXJlbmNlSXRlbSBpbiB0aGUgbGlzdC5cblx0KiBAcGFyYW0ge05vZGUgfCBudWxsfSByZWZlcmVuY2VOb2RlLiBBIExpc3RJdGVtIGVsZW1lbnQgdGhhdCBhY3RzIGFzIHRoZSByZWZlcmVuY2UgaXRlbSBiZWZvcmUgd2hpY2ggYSBuZXcgaXRlbSBpcyBhYm91dCB0byBiZSBpbnNlcnRlZC4gVGhlIHJlZmVyZW5jZU5vZGUgbXVzdCBiZSBpbiB0aGUgc2FtZSBsaXN0IGFzIHRoZSBub2RlLlxuXHQqIEByZXR1cm5zIHtOb2RlfVxuICAqL1xuXHRwdWJsaWMgYXN5bmMgaW5zZXJ0QmVmb3JlKG5vZGUsIHJlZmVyZW5jZU5vZGUpOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IGdldFJlc3VsdE9uUmVuZGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIHJlZmVyZW5jZU5vZGUpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRSZXN1bHRPblJlbmRlcigpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG5cdHB1YmxpYyBpbnNlcnRCZWZvcmVTeW5jKG5vZGUsIHJlZmVyZW5jZU5vZGUpOiBOb2RlIHtcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkKSB7XG4gXHQgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5pbnNlcnRCZWZvcmUobm9kZSwgcmVmZXJlbmNlTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gRGlzcGxheXMgYW5kIGV4cGFuZHMgdGhlIGRyb3AtZG93biBsaXN0LCBtYWtpbmcgYWxsIGF2YWlsYWJsZSBvcHRpb25zIHZpc2libGUgZm9yIHNlbGVjdGlvbi4gXG5cdCovXG4gICAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQuaXNSZW5kZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50Lm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5vcGVuKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFJlbW92ZXMgdGhlIGl0ZW0gbG9jYXRlZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IG9yIHBvc2l0aW9uIHdpdGhpbiBhIGNvbGxlY3Rpb24gKHN1Y2ggYXMgYW4gYXJyYXkgb3IgbGlzdCkuIEFmdGVyIHJlbW92YWwsIHRoZSBjb2xsZWN0aW9uIGlzIHVwZGF0ZWQgc28gdGhhdCBzdWJzZXF1ZW50IGl0ZW1zIHNoaWZ0IHRvIGZpbGwgdGhlIGdhcCwgZW5zdXJpbmcgY29udGlndW91cyBpbmRleGluZy4gXG5cdCogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uLiBUaGUgcG9zaXRpb24gb2YgdGhlIHJlbW92ZWQgaXRlbS5cblx0Ki9cbiAgICBwdWJsaWMgcmVtb3ZlQXQocG9zaXRpb246IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmlzUmVuZGVyZWQpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5yZW1vdmVBdChwb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQud2hlblJlbmRlcmVkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXQocG9zaXRpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIGEgc3BlY2lmaWVkIExpc3RJdGVtIGZyb20gdGhlIGNvbGxlY3Rpb24gb2YgaXRlbXMgY29udGFpbmVkIHdpdGhpbiB0aGUgZ2l2ZW4gZWxlbWVudCwgdXBkYXRpbmcgdGhlIGxpc3QgdG8gcmVmbGVjdCB0aGUgZGVsZXRpb24uIFxuXHQqIEBwYXJhbSB7Tm9kZX0gbm9kZS4gQSBMaXN0SXRlbSBlbGVtZW50IHRoYXQgaXMgcGFydCBvZiB0aGUgbGlzdCBvZiBpdGVtcyBpbnNpZGUgdGhlIGVsZW1lbnQuXG5cdCogQHJldHVybnMge05vZGV9XG4gICovXG5cdHB1YmxpYyBhc3luYyByZW1vdmVDaGlsZChub2RlKTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBnZXRSZXN1bHRPblJlbmRlciA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQud2hlblJlbmRlcmVkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRSZXN1bHRPblJlbmRlcigpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG5cdHB1YmxpYyByZW1vdmVDaGlsZFN5bmMobm9kZSk6IE5vZGUge1xuICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmlzUmVuZGVyZWQpIHtcbiBcdCAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNlbGVjdHMgYSBzcGVjaWZpZWQgaXRlbSBmcm9tIHRoZSBkcm9wZG93biBsaXN0LCBhbGxvd2luZyB1c2VycyB0byBjaG9vc2Ugb25lIG9wdGlvbiBmcm9tIHRoZSBhdmFpbGFibGUgY2hvaWNlcy4gVGhpcyBhY3Rpb24gdXBkYXRlcyB0aGUgZHJvcGRvd27igJlzIGN1cnJlbnQgc2VsZWN0aW9uIGFuZCBjYW4gdHJpZ2dlciBhbnkgYXNzb2NpYXRlZCBldmVudCBoYW5kbGVycyBvciBjaGFuZ2VzIGluIHRoZSBhcHBsaWNhdGlvbuKAmXMgc3RhdGUuIFxuXHQqIEBwYXJhbSB7c3RyaW5nIHwgSFRNTEVsZW1lbnR9IGl0ZW0uIEEgc3RyaW5nLCByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoZSBpdGVtIG9yIGFuIEhUTUwgRWxlbWVudCByZWZlcmVuY2luZyBhbiBpdGVtIGZyb20gdGhlIGxpc3Rcblx0Ki9cbiAgICBwdWJsaWMgc2VsZWN0KGl0ZW06IHN0cmluZyB8IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQuaXNSZW5kZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3QoaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIERlc2VsZWN0cyBhIHNwZWNpZmllZCBpdGVtIGZyb20gdGhlIGRyb3Bkb3duIGxpc3QsIHJlbW92aW5nIGl0cyBzZWxlY3RlZCBzdGF0ZSBhbmQgcmV2ZXJ0aW5nIHRoZSBkcm9wZG93biB0byByZWZsZWN0IHRoYXQgdGhlIGl0ZW0gaXMgbm8gbG9uZ2VyIGNob3NlbiBieSB0aGUgdXNlci4gXG5cdCogQHBhcmFtIHtzdHJpbmcgfCBIVE1MRWxlbWVudH0gaXRlbS4gQSBzdHJpbmcsIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhlIGl0ZW0gb3IgYW4gSFRNTCBFbGVtZW50IHJlZmVyZW5jaW5nIGFuIGl0ZW0gZnJvbSB0aGUgbGlzdFxuXHQqL1xuICAgIHB1YmxpYyB1bnNlbGVjdChpdGVtOiBzdHJpbmcgfCBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmlzUmVuZGVyZWQpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC51bnNlbGVjdChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC51bnNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gVXBkYXRlcyB0aGUgc2VsZWN0ZWQgaXRlbSBpbiB0aGUgZHJvcERvd24gbGlzdCB3aXRoIG5ldyBkYXRhIG9yIGF0dHJpYnV0ZXMuIFRoaXMgYWN0aW9uIG1vZGlmaWVzIHRoZSBleGlzdGluZyBpdGVtIHJhdGhlciB0aGFuIGFkZGluZyBvciByZW1vdmluZyBpdGVtcyBmcm9tIHRoZSBsaXN0LCBlbnN1cmluZyB0aGF0IGFueSBjaGFuZ2VzIGFyZSByZWZsZWN0ZWQgaW1tZWRpYXRlbHkgaW4gdGhlIHVzZXIgaW50ZXJmYWNlLiBTcGVjaWZ5IHRoZSB0YXJnZXQgaXRlbSBhbmQgdGhlIHVwZGF0ZWQgdmFsdWVzIHRvIGNvbXBsZXRlIHRoZSBvcGVyYXRpb24uIFxuXHQqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbi4gVGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBpdGVtIG11c3QgYmUgdXBkYXRlZC5cblx0KiBAcGFyYW0ge2FueX0gdmFsdWUuIFRoZSB2YWx1ZSBvZiB0aGUgdXBkYXRlZCBpdGVtLlxuXHQqL1xuICAgIHB1YmxpYyB1cGRhdGUocG9zaXRpb246IG51bWJlciwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmlzUmVuZGVyZWQpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC51cGRhdGUocG9zaXRpb24sIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC51cGRhdGUocG9zaXRpb24sIHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cblx0Z2V0IGlzUmVuZGVyZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkIDogZmFsc2U7XG5cdH1cblxuXHRuZ09uSW5pdCgpIHtcblx0fVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG5cbiAgICAgIHRoYXQub25DcmVhdGUuZW1pdCh0aGF0Lm5hdGl2ZUVsZW1lbnQpO1xuXG5cdFx0aWYgKFNtYXJ0KSBTbWFydC5SZW5kZXIoKTtcblxuXHRcdHRoaXMubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdzbWFydC1hbmd1bGFyJyk7XG5cblx0XHRpZiAodGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCkgdGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7IHRoYXQub25SZWFkeS5lbWl0KHRoYXQubmF0aXZlRWxlbWVudCk7IH0pO1xuXHRcdHRoaXMubGlzdGVuKCk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHR0aGlzLnVubGlzdGVuKCk7XG5cdH1cblxuXHRfaW5pdGlhbENoYW5nZSA9IHRydWU7IFxuXG5cdGdldCBuZ1ZhbHVlKCk6IGFueSB7XG5cdFx0aWYgKCF0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNlbGVjdGVkVmFsdWVzICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMSA/IHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3RlZFZhbHVlc1swXSA6IHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3RlZFZhbHVlcztcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICAgIHJldHVybiBpbnB1dCA/IGlucHV0LnZhbHVlIDogbnVsbDtcblx0fVxuXG5cdHNldCBuZ1ZhbHVlKHZhbHVlOiBhbnkpIHtcblx0XHRpZiAodGhpcy5uYXRpdmVFbGVtZW50KSB7XG5cdFx0ICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0d3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcblxuXHRcdHRoYXQubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgdGhhdC5uYXRpdmVFbGVtZW50LiQubGlzdEJveC5pc0luaXRpYWxpemVkID0gdGhhdC5faW5pdGlhbENoYW5nZSA/IGZhbHNlIDogdHJ1ZTtcblx0XHRcdHRoYXQuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKChjdXJyZW50VmFsdWU6IGFueSkgPT4gdGhpcy5zZWxlY3QoY3VycmVudFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGF0LnNlbGVjdChub3JtYWxpemVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoYXQubmF0aXZlRWxlbWVudC4kLmxpc3RCb3guaXNJbml0aWFsaXplZCA9IHRydWU7XG5cdFx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQuX2FwcGx5U2VsZWN0aW9uKCk7XG5cdFx0XHRpZiAodGhhdC5faW5pdGlhbENoYW5nZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhhdC5zZWxlY3RlZFZhbHVlcyAmJiB0aGF0LnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5fb25DaGFuZ2UodGhhdC5zZWxlY3RlZFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoYXQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuXHRcdFx0XHRcdGxldCBpbnB1dFZhbHVlOiBhbnkgPSBpbnB1dC52YWx1ZTtcblx0XHRcdFx0XHRpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRpbnB1dFZhbHVlID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuICAgICAgICAgICAgICAgICAgICB0aGF0Ll9vbkNoYW5nZSgodGhhdC5zZWxlY3RlZFZhbHVlcyAmJiB0aGF0LnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IDApID8gdGhhdC5zZWxlY3RlZFZhbHVlc1swXSA6IChpbnB1dCA/IGlucHV0VmFsdWUgOiBudWxsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXHRcdH0pO1xuXHR9XG5cblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG5cdFx0dGhpcy5fb25DaGFuZ2UgPSBmbjtcblx0fVxuXG5cdHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcblx0XHR0aGlzLl9vblRvdWNoZWQgPSBmbjtcblx0fVxuXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcblx0XHRpZiAodGhpcy5uYXRpdmVFbGVtZW50ICYmIHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHByb3BOYW1lIGluIGNoYW5nZXMpIHtcblx0XHRcdFx0aWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG5cdFx0XHRcdFx0dGhpcy5uYXRpdmVFbGVtZW50W3Byb3BOYW1lXSA9IGNoYW5nZXNbcHJvcE5hbWVdLmN1cnJlbnRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gQWRkIGV2ZW50IGxpc3RlbmVycy4gKi9cblx0cHJpdmF0ZSBsaXN0ZW4oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuXHRcdHRoYXQuZXZlbnRIYW5kbGVyc1snY2hhbmdlSGFuZGxlciddID0gKGV2ZW50OiBDdXN0b21FdmVudCkgPT4geyB0aGF0Lm9uQ2hhbmdlLmVtaXQoZXZlbnQpOyB9XG5cdFx0dGhhdC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoYXQuZXZlbnRIYW5kbGVyc1snY2hhbmdlSGFuZGxlciddKTtcblxuXHRcdHRoYXQuZXZlbnRIYW5kbGVyc1snY2xvc2VIYW5kbGVyJ10gPSAoZXZlbnQ6IEN1c3RvbUV2ZW50KSA9PiB7IHRoYXQub25DbG9zZS5lbWl0KGV2ZW50KTsgfVxuXHRcdHRoYXQubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsIHRoYXQuZXZlbnRIYW5kbGVyc1snY2xvc2VIYW5kbGVyJ10pO1xuXG5cdFx0dGhhdC5ldmVudEhhbmRsZXJzWydjbG9zaW5nSGFuZGxlciddID0gKGV2ZW50OiBDdXN0b21FdmVudCkgPT4geyB0aGF0Lm9uQ2xvc2luZy5lbWl0KGV2ZW50KTsgfVxuXHRcdHRoYXQubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbG9zaW5nJywgdGhhdC5ldmVudEhhbmRsZXJzWydjbG9zaW5nSGFuZGxlciddKTtcblxuXHRcdHRoYXQuZXZlbnRIYW5kbGVyc1snaXRlbUNsaWNrSGFuZGxlciddID0gKGV2ZW50OiBDdXN0b21FdmVudCkgPT4geyB0aGF0Lm9uSXRlbUNsaWNrLmVtaXQoZXZlbnQpOyB9XG5cdFx0dGhhdC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2l0ZW1DbGljaycsIHRoYXQuZXZlbnRIYW5kbGVyc1snaXRlbUNsaWNrSGFuZGxlciddKTtcblxuXHRcdHRoYXQuZXZlbnRIYW5kbGVyc1snb3BlbkhhbmRsZXInXSA9IChldmVudDogQ3VzdG9tRXZlbnQpID0+IHsgdGhhdC5vbk9wZW4uZW1pdChldmVudCk7IH1cblx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoYXQuZXZlbnRIYW5kbGVyc1snb3BlbkhhbmRsZXInXSk7XG5cblx0XHR0aGF0LmV2ZW50SGFuZGxlcnNbJ29wZW5pbmdIYW5kbGVyJ10gPSAoZXZlbnQ6IEN1c3RvbUV2ZW50KSA9PiB7IHRoYXQub25PcGVuaW5nLmVtaXQoZXZlbnQpOyB9XG5cdFx0dGhhdC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ29wZW5pbmcnLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ29wZW5pbmdIYW5kbGVyJ10pO1xuXG5cdFx0dGhhdC5ldmVudEhhbmRsZXJzWydyZXNpemVTdGFydEhhbmRsZXInXSA9IChldmVudDogQ3VzdG9tRXZlbnQpID0+IHsgdGhhdC5vblJlc2l6ZVN0YXJ0LmVtaXQoZXZlbnQpOyB9XG5cdFx0dGhhdC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZVN0YXJ0JywgdGhhdC5ldmVudEhhbmRsZXJzWydyZXNpemVTdGFydEhhbmRsZXInXSk7XG5cblx0XHR0aGF0LmV2ZW50SGFuZGxlcnNbJ3Jlc2l6ZUVuZEhhbmRsZXInXSA9IChldmVudDogQ3VzdG9tRXZlbnQpID0+IHsgdGhhdC5vblJlc2l6ZUVuZC5lbWl0KGV2ZW50KTsgfVxuXHRcdHRoYXQubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdyZXNpemVFbmQnLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ3Jlc2l6ZUVuZEhhbmRsZXInXSk7XG5cblx0XHR0aGF0LmV2ZW50SGFuZGxlcnNbJ3Njcm9sbEJvdHRvbVJlYWNoZWRIYW5kbGVyJ10gPSAoZXZlbnQ6IEN1c3RvbUV2ZW50KSA9PiB7IHRoYXQub25TY3JvbGxCb3R0b21SZWFjaGVkLmVtaXQoZXZlbnQpOyB9XG5cdFx0dGhhdC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbEJvdHRvbVJlYWNoZWQnLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ3Njcm9sbEJvdHRvbVJlYWNoZWRIYW5kbGVyJ10pO1xuXG5cdFx0dGhhdC5ldmVudEhhbmRsZXJzWydzY3JvbGxUb3BSZWFjaGVkSGFuZGxlciddID0gKGV2ZW50OiBDdXN0b21FdmVudCkgPT4geyB0aGF0Lm9uU2Nyb2xsVG9wUmVhY2hlZC5lbWl0KGV2ZW50KTsgfVxuXHRcdHRoYXQubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGxUb3BSZWFjaGVkJywgdGhhdC5ldmVudEhhbmRsZXJzWydzY3JvbGxUb3BSZWFjaGVkSGFuZGxlciddKTtcblxuXHRcdHRoYXQuZXZlbnRIYW5kbGVyc1sndG9rZW5DbGlja0hhbmRsZXInXSA9IChldmVudDogQ3VzdG9tRXZlbnQpID0+IHsgdGhhdC5vblRva2VuQ2xpY2suZW1pdChldmVudCk7IH1cblx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG9rZW5DbGljaycsIHRoYXQuZXZlbnRIYW5kbGVyc1sndG9rZW5DbGlja0hhbmRsZXInXSk7XG5cblxuICAgICAgICB0aGF0LmV2ZW50SGFuZGxlcnNbJ2NoYW5nZU1vZGVsSGFuZGxlciddID0gKGV2ZW50OiBFdmVudCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgdGhhdC5faW5pdGlhbENoYW5nZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhhdC5fb25DaGFuZ2UodGhhdC5uYXRpdmVFbGVtZW50LnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IDAgPyAodGhhdC5uYXRpdmVFbGVtZW50LnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IDEgPyB0aGF0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0ZWRWYWx1ZXMgOiB0aGF0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0ZWRWYWx1ZXNbMF0pIDogdGhhdC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuZXZlbnRIYW5kbGVyc1snYmx1ck1vZGVsSGFuZGxlciddID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhhdC5fb25Ub3VjaGVkKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoYXQubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoYXQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5ldmVudEhhbmRsZXJzWydrZXl1cE1vZGVsSGFuZGxlciddID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGF0LmV2ZW50SGFuZGxlcnNbJ2NoYW5nZU1vZGVsSGFuZGxlciddKGV2ZW50KTsgfSwgNTApO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGF0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKS5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoYXQuZXZlbnRIYW5kbGVyc1sna2V5dXBNb2RlbEhhbmRsZXInXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXHRcdHRoYXQubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ2NoYW5nZU1vZGVsSGFuZGxlciddKTtcblx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoYXQuZXZlbnRIYW5kbGVyc1snYmx1ck1vZGVsSGFuZGxlciddKTtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gUmVtb3ZlIGV2ZW50IGxpc3RlbmVycy4gKi9cblx0cHJpdmF0ZSB1bmxpc3RlbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG5cdFx0aWYgKHRoYXQuZXZlbnRIYW5kbGVyc1snY2hhbmdlSGFuZGxlciddKSB7XG5cdFx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhhdC5ldmVudEhhbmRsZXJzWydjaGFuZ2VIYW5kbGVyJ10pO1xuXHRcdH1cblxuXHRcdGlmICh0aGF0LmV2ZW50SGFuZGxlcnNbJ2Nsb3NlSGFuZGxlciddKSB7XG5cdFx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ2Nsb3NlSGFuZGxlciddKTtcblx0XHR9XG5cblx0XHRpZiAodGhhdC5ldmVudEhhbmRsZXJzWydjbG9zaW5nSGFuZGxlciddKSB7XG5cdFx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2luZycsIHRoYXQuZXZlbnRIYW5kbGVyc1snY2xvc2luZ0hhbmRsZXInXSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoYXQuZXZlbnRIYW5kbGVyc1snaXRlbUNsaWNrSGFuZGxlciddKSB7XG5cdFx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignaXRlbUNsaWNrJywgdGhhdC5ldmVudEhhbmRsZXJzWydpdGVtQ2xpY2tIYW5kbGVyJ10pO1xuXHRcdH1cblxuXHRcdGlmICh0aGF0LmV2ZW50SGFuZGxlcnNbJ29wZW5IYW5kbGVyJ10pIHtcblx0XHRcdHRoYXQubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhhdC5ldmVudEhhbmRsZXJzWydvcGVuSGFuZGxlciddKTtcblx0XHR9XG5cblx0XHRpZiAodGhhdC5ldmVudEhhbmRsZXJzWydvcGVuaW5nSGFuZGxlciddKSB7XG5cdFx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbmluZycsIHRoYXQuZXZlbnRIYW5kbGVyc1snb3BlbmluZ0hhbmRsZXInXSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoYXQuZXZlbnRIYW5kbGVyc1sncmVzaXplU3RhcnRIYW5kbGVyJ10pIHtcblx0XHRcdHRoYXQubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemVTdGFydCcsIHRoYXQuZXZlbnRIYW5kbGVyc1sncmVzaXplU3RhcnRIYW5kbGVyJ10pO1xuXHRcdH1cblxuXHRcdGlmICh0aGF0LmV2ZW50SGFuZGxlcnNbJ3Jlc2l6ZUVuZEhhbmRsZXInXSkge1xuXHRcdFx0dGhhdC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZUVuZCcsIHRoYXQuZXZlbnRIYW5kbGVyc1sncmVzaXplRW5kSGFuZGxlciddKTtcblx0XHR9XG5cblx0XHRpZiAodGhhdC5ldmVudEhhbmRsZXJzWydzY3JvbGxCb3R0b21SZWFjaGVkSGFuZGxlciddKSB7XG5cdFx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsQm90dG9tUmVhY2hlZCcsIHRoYXQuZXZlbnRIYW5kbGVyc1snc2Nyb2xsQm90dG9tUmVhY2hlZEhhbmRsZXInXSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoYXQuZXZlbnRIYW5kbGVyc1snc2Nyb2xsVG9wUmVhY2hlZEhhbmRsZXInXSkge1xuXHRcdFx0dGhhdC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbFRvcFJlYWNoZWQnLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ3Njcm9sbFRvcFJlYWNoZWRIYW5kbGVyJ10pO1xuXHRcdH1cblxuXHRcdGlmICh0aGF0LmV2ZW50SGFuZGxlcnNbJ3Rva2VuQ2xpY2tIYW5kbGVyJ10pIHtcblx0XHRcdHRoYXQubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b2tlbkNsaWNrJywgdGhhdC5ldmVudEhhbmRsZXJzWyd0b2tlbkNsaWNrSGFuZGxlciddKTtcblx0XHR9XG5cblx0XHRpZiAodGhhdC5ldmVudEhhbmRsZXJzWydjaGFuZ2VNb2RlbEhhbmRsZXInXSkge1xuXHRcdFx0dGhhdC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoYXQuZXZlbnRIYW5kbGVyc1snY2hhbmdlTW9kZWxIYW5kbGVyJ10pO1xuICAgICAgICAgICAgaWYgKHRoYXQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpKSB7XG4gICAgICAgICAgICAgICAgICB0aGF0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKS5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoYXQuZXZlbnRIYW5kbGVyc1sna2V5dXBNb2RlbEhhbmRsZXInXSk7XG4gICAgICAgICAgICB9XG5cdFx0fVxuXHRcdGlmICh0aGF0LmV2ZW50SGFuZGxlcnNbJ2JsdXJNb2RlbEhhbmRsZXInXSkge1xuXHRcdFx0dGhhdC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ2JsdXJNb2RlbEhhbmRsZXInXSk7XG5cdFx0fVxuXHR9XG59XG4iXX0=
1115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQuY29tYm9ib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb21ib2JveC9zcmMvc21hcnQuY29tYm9ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFhLFNBQVMsRUFBNkIsS0FBSyxFQUErQyxVQUFVLEVBQTJCLE1BQU0sRUFBRSxZQUFZLEVBQThCLE1BQU0sZUFBZSxDQUFDO0FBQzNOLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJckQsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUZ6RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFVeEMsTUFBTSxtQ0FBbUMsR0FBUTtJQUM3QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7SUFDaEQsS0FBSyxFQUFFLElBQUk7Q0FDZCxDQUFBO0FBUUQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFFakQsWUFBWSxHQUF5QjtRQUNwQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFJSixrQkFBYSxHQUFVLEVBQUUsQ0FBQztRQWEzQjs7O1VBR0U7UUFDSCxjQUFTLEdBQXlCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUMxQzs7O1VBR0U7UUFDSCxlQUFVLEdBQWMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBNGtCdkM7Ozs7Ozs7OztVQVNFO1FBQ1EsYUFBUSxHQUE4QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRW5FOzhDQUNzQztRQUM1QixZQUFPLEdBQThCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbEU7OENBQ3NDO1FBQzVCLGNBQVMsR0FBOEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVwRTs7Ozs7OztVQU9FO1FBQ1EsZ0JBQVcsR0FBOEIsSUFBSSxZ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QkFVRixhQUFhO3NCQURoQixLQUFLO2dCQVVGLE1BQU07c0JBRFQsS0FBSztnQkFVRixhQUFhO3NCQURoQixLQUFLO2dCQVVGLEtBQUs7c0JBRFIsS0FBSztnQkFVRixhQUFhO3NCQURoQixLQUFLO2dCQVVGLFdBQVc7c0JBRGQsS0FBSztnQkFVRixLQUFLO3NCQURSLEtBQUs7Z0JBVUYsV0FBVztzQkFEZCxLQUFLO2dCQVVGLDJCQUEyQjtzQkFEOUIsS0FBSztnQkFVRixXQUFXO3NCQURkLEtBQUs7Z0JBa0JJLFFBQVE7c0JBQWpCLE1BQU07Z0JBSUcsT0FBTztzQkFBaEIsTUFBTTtnQkFJRyxTQUFTO3NCQUFsQixNQUFNO2dCQVVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBSUcsTUFBTTtzQkFBZixNQUFNO2dCQUlHLFNBQVM7c0JBQWxCLE1BQU07Z0JBTUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFNRyxXQUFXO3NCQUFwQixNQUFNO2dCQUlHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFJRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBSUcsWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbWJvQm94IH0gZnJvbSAnLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBBdXRvQ29tcGxldGUsIERyb3BEb3duQnV0dG9uUG9zaXRpb24sIERyb3BEb3duT3Blbk1vZGUsIERyb3BEb3duUG9zaXRpb24sIENvbWJvQm94RXNjS2V5TW9kZSwgRmlsdGVyTW9kZSwgSG9yaXpvbnRhbFNjcm9sbEJhclZpc2liaWxpdHksIFNlYXJjaE1vZGUsIExpc3RJdGVtTWVhc3VyZU1vZGUsIFZlcnRpY2FsQWxpZ25tZW50LCBSZXNpemVNb2RlLCBTZWxlY3Rpb25EaXNwbGF5TW9kZSwgTGlzdFNlbGVjdGlvbk1vZGUsIFZlcnRpY2FsU2Nyb2xsQmFyVmlzaWJpbGl0eSwgRWxlbWVudFJlbmRlck1vZGV9IGZyb20gJy4vLi4vaW5kZXgnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBEaXJlY3RpdmUsIEFmdGVyVmlld0luaXQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzLCBmb3J3YXJkUmVmLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFF1ZXJ5TGlzdCwgQ29udGVudENoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlRWxlbWVudCwgU21hcnQgfSBmcm9tICcuL3NtYXJ0LmVsZW1lbnQnO1xuZXhwb3J0IHsgQXV0b0NvbXBsZXRlLCBEcm9wRG93bkJ1dHRvblBvc2l0aW9uLCBEcm9wRG93bk9wZW5Nb2RlLCBEcm9wRG93blBvc2l0aW9uLCBDb21ib0JveEVzY0tleU1vZGUsIEZpbHRlck1vZGUsIEhvcml6b250YWxTY3JvbGxCYXJWaXNpYmlsaXR5LCBTZWFyY2hNb2RlLCBMaXN0SXRlbU1lYXN1cmVNb2RlLCBWZXJ0aWNhbEFsaWdubWVudCwgUmVzaXplTW9kZSwgU2VsZWN0aW9uRGlzcGxheU1vZGUsIExpc3RTZWxlY3Rpb25Nb2RlLCBWZXJ0aWNhbFNjcm9sbEJhclZpc2liaWxpdHksIEVsZW1lbnRSZW5kZXJNb2RlfSBmcm9tICcuLy4uL2luZGV4JztcbmV4cG9ydCB7IFNtYXJ0IH0gZnJvbSAnLi9zbWFydC5lbGVtZW50JztcbmV4cG9ydCB7IENvbWJvQm94IH0gZnJvbSAnLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cblxuXG5pbXBvcnQgeyBMaXN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vc21hcnQubGlzdGl0ZW0nO1xuXG5pbXBvcnQgeyBMaXN0SXRlbXNHcm91cENvbXBvbmVudCB9IGZyb20gJy4vc21hcnQubGlzdGl0ZW1zZ3JvdXAnO1xuXG5jb25zdCBDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbWJvQm94Q29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxufVxuXG5ARGlyZWN0aXZlKHtcblx0ZXhwb3J0QXM6ICdzbWFydC1jb21iby1ib3gnLFx0c2VsZWN0b3I6ICdzbWFydC1jb21iby1ib3gsIFtzbWFydC1jb21iby1ib3hdJyxcblx0cHJvdmlkZXJzOiBbQ1VTVE9NX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1JdXG5cbn0pXG5cbmV4cG9ydCBjbGFzcyBDb21ib0JveENvbXBvbmVudCBleHRlbmRzIEJhc2VFbGVtZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG5cdGNvbnN0cnVjdG9yKHJlZjogRWxlbWVudFJlZjxDb21ib0JveD4pIHtcblx0XHRzdXBlcihyZWYpO1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA9IHJlZi5uYXRpdmVFbGVtZW50IGFzIENvbWJvQm94O1xuXHR9XG5cblx0cHJpdmF0ZSBldmVudEhhbmRsZXJzOiBhbnlbXSA9IFtdO1xuXG5cdHB1YmxpYyBkZWNsYXJlIG5hdGl2ZUVsZW1lbnQ6IENvbWJvQm94O1xuXHQvKiogQGRlc2NyaXB0aW9uIENyZWF0ZXMgdGhlIGNvbXBvbmVudCBvbiBkZW1hbmQuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFuIG9wdGlvbmFsIG9iamVjdCBvZiBwcm9wZXJ0aWVzLCB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIHRoZSB0ZW1wbGF0ZSBiaW5kZWQgb25lcy5cblx0ICovXG5cdHB1YmxpYyBjcmVhdGVDb21wb25lbnQocHJvcGVydGllcyA9IHt9KTogYW55IHtcbiAgICBcdHRoaXMubmF0aXZlRWxlbWVudCA9IDxDb21ib0JveD5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzbWFydC1jb21iby1ib3gnKTtcblx0XHRmb3IgKGxldCBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykgeyBcbiBcdFx0XHR0aGlzLm5hdGl2ZUVsZW1lbnRbcHJvcGVydHlOYW1lXSA9IHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudDtcblx0fVxuICAgICAgICAvKipcbiAgICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAgKiBUaGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2hlbiBhIGNoYW5nZSBldmVudCBvY2N1cnMgb24gdGhlIGZvcm0gZWxlbWVudHMuXG4gICAgICAgICovXG4gICAgICAgX29uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgICAgICAvKipcbiAgICAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgICAgKiBUaGUgcmVnaXN0ZXJlZCBjYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2hlbiBhIGJsdXIgZXZlbnQgb2NjdXJzIG9uIHRoZSBmb3JtIGVsZW1lbnRzLlxuICAgICAgICAqL1xuICAgICAgIF9vblRvdWNoZWQ6ICgpID0+IGFueSA9ICgpID0+IHt9O1xuXG5cblx0LyoqIEBkZXNjcmlwdGlvbiBUaGlzIHByb3BlcnR5IGlzIGFwcGxpY2FibGUgb25seSB3aGVuIGRyb3BEb3duT3Blbk1vZGUgaXMgc2V0IHRvICdhdXRvJy4gSXQgc3BlY2lmaWVzIHRoZSBhbW91bnQgb2YgdGltZSAoaW4gbWlsbGlzZWNvbmRzKSB0aGUgZHJvcGRvd24gd2lsbCByZW1haW4gb3BlbiBhZnRlciB0aGUgcG9pbnRlciBsZWF2ZXMgdGhlIGVsZW1lbnQsIGJlZm9yZSBpdCBhdXRvbWF0aWNhbGx5IGNsb3Nlcy4gSWYgdGhlIHBvaW50ZXIgaXMgbm90IGhvdmVyaW5nIG92ZXIgdGhlIGRyb3Bkb3duIG9yIGl0cyB0cmlnZ2VyIGVsZW1lbnQsIHRoZSBkcm9wZG93biB3aWxsIGNsb3NlIGFmdGVyIHRoaXMgZGVsYXkuICovXG5cdEBJbnB1dCgpXG5cdGdldCBhdXRvQ2xvc2VEZWxheSgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuYXV0b0Nsb3NlRGVsYXkgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGF1dG9DbG9zZURlbGF5KHZhbHVlOiBudW1iZXIpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuYXV0b0Nsb3NlRGVsYXkgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBhdXRvY29tcGxldGUgbW9kZSBmb3IgdGhlIGlucHV0IGZpZWxkLiBUaGUgc2VsZWN0ZWQgbW9kZSBkZWZpbmVzIGhvdyB0aGUgY29tcG9uZW50IGZpbHRlcnMgYW5kIGRpc3BsYXlzIGl0ZW1zIGZyb20gdGhlIGRhdGFTb3VyY2UsIHNob3dpbmcgb25seSB0aG9zZSBlbnRyaWVzIHRoYXQgbWF0Y2ggdGhlIHVzZXIncyBpbnB1dCBhY2NvcmRpbmcgdG8gdGhlIGNob3NlbiBtYXRjaGluZyBzdHJhdGVneS4gVGhpcyBzZXR0aW5nIGRpcmVjdGx5IGltcGFjdHMgdGhlIHN1Z2dlc3Rpb25zIHByZXNlbnRlZCB0byB0aGUgdXNlciBhcyB0aGV5IHR5cGUuICovXG5cdEBJbnB1dCgpXG5cdGdldCBhdXRvQ29tcGxldGUoKTogQXV0b0NvbXBsZXRlIHwgc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmF1dG9Db21wbGV0ZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgYXV0b0NvbXBsZXRlKHZhbHVlOiBBdXRvQ29tcGxldGUgfCBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuYXV0b0NvbXBsZXRlID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgYW1vdW50IG9mIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgdG8gd2FpdCBhZnRlciB0aGUgdXNlciBpbnB1dCBiZWZvcmUgZGlzcGxheWluZyB0aGUgZHJvcGRvd24gbGlzdCBvZiBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbnMuIFRoaXMgZGVsYXkgaGVscHMgY29udHJvbCBob3cgcXVpY2tseSB0aGUgc3VnZ2VzdGlvbnMgYXBwZWFyLCBhbGxvd2luZyBmb3Igc21vb3RoZXIgdXNlciBleHBlcmllbmNlIGFuZCByZWR1Y2luZyB1bm5lY2Vzc2FyeSBzZWFyY2hlcyBhcyB0aGUgdXNlciB0eXBlcy4gKi9cblx0QElucHV0KClcblx0Z2V0IGF1dG9Db21wbGV0ZURlbGF5KCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5hdXRvQ29tcGxldGVEZWxheSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgYXV0b0NvbXBsZXRlRGVsYXkodmFsdWU6IG51bWJlcikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5hdXRvQ29tcGxldGVEZWxheSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBFbmFibGVzIHVzZXJzIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgY3VzdG9tIGtleSBuYW1lcyB0aGF0IHdpbGwgdHJpZ2dlciB0aGUgb3BlbmluZyBvZiB0aGUgcG9wdXAgd2hlbiBwcmVzc2VkLiBUaGlzIGFsbG93cyBmb3IgZmxleGlibGUga2V5Ym9hcmQgc2hvcnRjdXRzIHRhaWxvcmVkIHRvIHVzZXIgcHJlZmVyZW5jZXMgb3IgYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgYXV0b09wZW5TaG9ydGN1dEtleSgpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5hdXRvT3BlblNob3J0Y3V0S2V5IDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBhdXRvT3BlblNob3J0Y3V0S2V5KHZhbHVlOiBzdHJpbmdbXSkge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5hdXRvT3BlblNob3J0Y3V0S2V5ID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgc291cmNlIG9mIGRhdGEgdG8gcG9wdWxhdGUgdGhlIENvbWJvQm94LiBUaGUgZGF0YVNvdXJjZSBjYW4gYmUgcHJvdmlkZWQgaW4gc2V2ZXJhbCBmb3JtYXRzOi0gQW4gYXJyYXkgb2Ygc3RyaW5ncyBvciBudW1iZXJzLCB3aGVyZSBlYWNoIGl0ZW0gYmVjb21lcyBhIHNlbGVjdGFibGUgb3B0aW9uIGluIHRoZSBDb21ib0JveC4tIEFuIGFycmF5IG9mIG9iamVjdHMsIHdoZXJlIGVhY2ggb2JqZWN0IHJlcHJlc2VudHMgYSBsaXN0IGl0ZW0gYW5kIGl0cyBwcm9wZXJ0aWVzIGRlZmluZSB0aGUgZGlzcGxheWVkIGluZm9ybWF0aW9uIGFuZCBhc3NvY2lhdGVkIHZhbHVlIChlLmcuLCBsYWJlbCBmb3IgZGlzcGxheSB0ZXh0LCB2YWx1ZSBmb3IgdGhlIHVuZGVybHlpbmcgdmFsdWUsIGFuZCBvcHRpb25hbGx5IGdyb3VwIHRvIGNhdGVnb3JpemUgaXRlbXMpLi0gQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgaXRlbXMgaW4gZWl0aGVyIG9mIHRoZSBhYm92ZSBmb3JtYXRzLCBlbmFibGluZyBkeW5hbWljIG9yIGFzeW5jaHJvbm91cyBkYXRhIGxvYWRpbmcuVGhpcyBmbGV4aWJsZSBkYXRhU291cmNlIGNvbmZpZ3VyYXRpb24gYWxsb3dzIHRoZSBDb21ib0JveCB0byBzdXBwb3J0IHNpbXBsZSBsaXN0cywgY2F0ZWdvcml6ZWQgbGlzdHMsIG9yIGR5bmFtaWNhbGx5IHJldHJpZXZlZCBkYXRhLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZGF0YVNvdXJjZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZGF0YVNvdXJjZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZGF0YVNvdXJjZSh2YWx1ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRhdGFTb3VyY2UgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciB0aGUgY29tYm8gYm94IGlzIGFjdGl2ZSBvciBpbmFjdGl2ZS4gV2hlbiBlbmFibGVkLCB1c2VycyBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgY29tYm8gYm94IHRvIHNlbGVjdCBvciBlbnRlciBhIHZhbHVlLiBXaGVuIGRpc2FibGVkLCB0aGUgY29tYm8gYm94IGlzIG5vbi1pbnRlcmFjdGl2ZSBhbmQgYXBwZWFycyBncmF5ZWQgb3V0LCBwcmV2ZW50aW5nIGFueSB1c2VyIGlucHV0IG9yIHNlbGVjdGlvbi4gKi9cblx0QElucHV0KClcblx0Z2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB3aGV0aGVyIGEgdmlzdWFsIGluZGljYXRvciAoc3VjaCBhcyBhIGxvYWRpbmcgc3Bpbm5lciBvciBwcm9ncmVzcyBiYXIpIHdpbGwgYmUgZGlzcGxheWVkIHdoaWxlIGZpbHRlcmluZyBkYXRhIGxvY2FsbHkgb3Igd2hlbiByZXRyaWV2aW5nIGl0ZW1zIGZyb20gYSByZW1vdGUgc291cmNlLiBUaGlzIGhlbHBzIGluZm9ybSB1c2VycyB0aGF0IGEgZmlsdGVyaW5nIG9wZXJhdGlvbiBvciBkYXRhIGZldGNoIGlzIGluIHByb2dyZXNzLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZGlzcGxheUxvYWRpbmdJbmRpY2F0b3IoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5kaXNwbGF5TG9hZGluZ0luZGljYXRvciA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZGlzcGxheUxvYWRpbmdJbmRpY2F0b3IodmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZGlzcGxheUxvYWRpbmdJbmRpY2F0b3IgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU2V0cyBvciByZXRyaWV2ZXMgdGhlIGRpc3BsYXlNZW1iZXIgcHJvcGVydHkuIFRoZSBkaXNwbGF5TWVtYmVyIHByb3BlcnR5IGRlZmluZXMgdGhlIHNwZWNpZmljIGZpZWxkIG5hbWUgd2l0aGluIGVhY2ggZGF0YSBvYmplY3QgaW4gdGhlIGNvbGxlY3Rpb24gcHJvdmlkZWQgYnkgdGhlICdkYXRhU291cmNlJyBwcm9wZXJ0eS4gVGhpcyBmaWVsZCdzIHZhbHVlIGlzIHVzZWQgZm9yIGRpc3BsYXlpbmcgaXRlbXMgaW4gdGhlIFVJIGNvbXBvbmVudCwgYWxsb3dpbmcgeW91IHRvIGNvbnRyb2wgd2hpY2ggYXR0cmlidXRlIG9mIHlvdXIgZGF0YSBvYmplY3RzIGlzIHNob3duIHRvIHRoZSB1c2VyLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZGlzcGxheU1lbWJlcigpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZGlzcGxheU1lbWJlciA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZGlzcGxheU1lbWJlcih2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRpc3BsYXlNZW1iZXIgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBwYXJlbnQgY29udGFpbmVyIGZvciB0aGUgZHJvcGRvd24gZWxlbWVudC4gVGhlIGRyb3BEb3duQXBwZW5kVG8gcHJvcGVydHkgYWNjZXB0cyBhIENTUyBzZWxlY3RvciBzdHJpbmcsIGFuIGVsZW1lbnQncyBJRCwgdGhlIHN0cmluZyB2YWx1ZSAnYm9keScsIG9yIGEgZGlyZWN0IHJlZmVyZW5jZSB0byBhbiBIVE1MIGVsZW1lbnQuIEJ5IGRlZmF1bHQsIHRoZSBkcm9wZG93biBpcyBhcHBlbmRlZCB0byBpdHMgb3JpZ2luYWwgcGFyZW50IGluIHRoZSBET00uIEhvd2V2ZXIsIGlmIG9uZSBvZiB0aGUgY29udGFpbmluZyBlbGVtZW50cyBoYXMgQ1NTIHByb3BlcnRpZXMgKHN1Y2ggYXMgb3ZlcmZsb3c6IGhpZGRlbikgdGhhdCByZXN0cmljdCB0aGUgZHJvcGRvd24ncyB2aXNpYmlsaXR5LCB5b3UgY2FuIHNldCB0aGlzIHByb3BlcnR54oCUY29tbW9ubHkgdG8gJ2JvZHkn4oCUdG8gYXBwZW5kIHRoZSBkcm9wZG93biBkaXJlY3RseSB0byB0aGUgJmx0O2JvZHkmZ3Q7IGVsZW1lbnQgYW5kIGVuc3VyZSBpdCBkaXNwbGF5cyBwcm9wZXJseS5Qb3NzaWJsZSB2YWx1ZXM6LSBBIENTUyBzZWxlY3RvciBzdHJpbmcgKGUuZy4sICcuY29udGFpbmVyJyBvciAnI21haW5EaXYnKS0gVGhlIHN0cmluZyAnYm9keSctIEEgZGlyZWN0IHJlZmVyZW5jZSB0byBhbiBleGlzdGluZyBIVE1MIGVsZW1lbnQtIEFuIGVsZW1lbnQncyBJRCAoYXMgYSBzdHJpbmcpLSBudWxsICh0byByZXNldCBhbmQgbW92ZSB0aGUgZHJvcGRvd24gYmFjayB0byBpdHMgb3JpZ2luYWwgcGFyZW50KVRoaXMgcHJvcGVydHkgaW1wcm92ZXMgY29tcGF0aWJpbGl0eSBpbiBsYXlvdXRzIHdpdGggcmVzdHJpY3RlZCBvdmVyZmxvdyBieSBhbGxvd2luZyB0aGUgZHJvcGRvd24gdG8gYmUgcmVuZGVyZWQgaW4gYSBjb250YWluZXIgb2YgeW91ciBjaG9vc2luZy4gUmVzZXR0aW5nIGRyb3BEb3duQXBwZW5kVG8gdG8gbnVsbCByZXN0b3JlcyB0aGUgZHJvcGRvd24gdG8gaXRzIGluaXRpYWwgcGxhY2VtZW50IHdpdGhpbiB0aGUgRE9NLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZHJvcERvd25BcHBlbmRUbygpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25BcHBlbmRUbyA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZHJvcERvd25BcHBlbmRUbyh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duQXBwZW5kVG8gPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZHJvcGRvd24gYnV0dG9uIHJlbGF0aXZlIHRvIGl0cyBhc3NvY2lhdGVkIGlucHV0IGZpZWxkIG9yIGNvbnRhaW5lci4gUG9zc2libGUgcG9zaXRpb25zIG1heSBpbmNsdWRlIFwibGVmdCxcIiBcInJpZ2h0LFwiIFwidG9wLFwiIG9yIFwiYm90dG9tLFwiIGFsbG93aW5nIGRldmVsb3BlcnMgdG8gY29udHJvbCB3aGVyZSB0aGUgZHJvcGRvd24gYnV0dG9uIGFwcGVhcnMgaW4gdGhlIHVzZXIgaW50ZXJmYWNlLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZHJvcERvd25CdXR0b25Qb3NpdGlvbigpOiBEcm9wRG93bkJ1dHRvblBvc2l0aW9uIHwgc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duQnV0dG9uUG9zaXRpb24gOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRyb3BEb3duQnV0dG9uUG9zaXRpb24odmFsdWU6IERyb3BEb3duQnV0dG9uUG9zaXRpb24gfCBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25CdXR0b25Qb3NpdGlvbiA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIGhlaWdodCBvZiB0aGUgZHJvcGRvd24gbWVudS4gQnkgZGVmYXVsdCwgdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLCB3aGljaCBtZWFucyB0aGUgZHJvcGRvd27igJlzIGhlaWdodCB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgQ1NTIHZhcmlhYmxlLiBJZiBhIHNwZWNpZmljIHZhbHVlIGlzIHByb3ZpZGVkLCBpdCB3aWxsIG92ZXJyaWRlIHRoZSBDU1MgdmFyaWFibGUgYW5kIHNldCB0aGUgZHJvcGRvd24gaGVpZ2h0IGV4cGxpY2l0bHkuICovXG5cdEBJbnB1dCgpXG5cdGdldCBkcm9wRG93bkhlaWdodCgpOiBzdHJpbmcgfCBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25IZWlnaHQgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRyb3BEb3duSGVpZ2h0KHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25IZWlnaHQgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBtYXhpbXVtIGhlaWdodCBvZiB0aGUgZHJvcGRvd24gbWVudS4gQnkgZGVmYXVsdCwgdGhpcyB2YWx1ZSBpcyBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLCB3aGljaCBtZWFucyB0aGUgZHJvcGRvd24ncyBtYXgtaGVpZ2h0IHdpbGwgYmUgY29udHJvbGxlZCBieSBhIENTUyB2YXJpYWJsZSBpbnN0ZWFkIG9mIGFuIGV4cGxpY2l0IHZhbHVlLiBJZiB5b3UgcHJvdmlkZSBhIHNwZWNpZmljIHZhbHVlIChlLmcuLCBcIjMwMHB4XCIgb3IgXCI1MHZoXCIpLCBpdCB3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0IENTUyB2YXJpYWJsZSBhbmQgZGlyZWN0bHkgc2V0IHRoZSBtYXhpbXVtIGhlaWdodCBvZiB0aGUgZHJvcGRvd24uICovXG5cdEBJbnB1dCgpXG5cdGdldCBkcm9wRG93bk1heEhlaWdodCgpOiBzdHJpbmcgfCBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25NYXhIZWlnaHQgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRyb3BEb3duTWF4SGVpZ2h0KHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25NYXhIZWlnaHQgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gRGVmaW5lcyB0aGUgbWF4aW11bSB3aWR0aCBvZiB0aGUgZHJvcGRvd24gbWVudS4gQnkgZGVmYXVsdCwgdGhpcyB2YWx1ZSBpcyBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLCB3aGljaCBtZWFucyB0aGUgZHJvcGRvd24ncyBtYXhpbXVtIHdpZHRoIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSBhIGNvcnJlc3BvbmRpbmcgQ1NTIHZhcmlhYmxlLiBJZiBhIHNwZWNpZmljIHZhbHVlIGlzIHByb3ZpZGVkIChlLmcuLCBcIjMwMHB4XCIgb3IgXCI1MCVcIiksIGl0IHdpbGwgb3ZlcnJpZGUgdGhlIENTUyB2YXJpYWJsZSBhbmQgZGlyZWN0bHkgc2V0IHRoZSBtYXhpbXVtIHdpZHRoIG9mIHRoZSBkcm9wZG93bi4gKi9cblx0QElucHV0KClcblx0Z2V0IGRyb3BEb3duTWF4V2lkdGgoKTogc3RyaW5nIHwgbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duTWF4V2lkdGggOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRyb3BEb3duTWF4V2lkdGgodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5kcm9wRG93bk1heFdpZHRoID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIERlZmluZXMgdGhlIG1pbmltdW0gaGVpZ2h0IG9mIHRoZSBkcm9wZG93biBjb21wb25lbnQuIEJ5IGRlZmF1bHQsIHRoaXMgcHJvcGVydHkgaXMgc2V0IHRvIGFuIGVtcHR5IHN0cmluZywgd2hpY2ggbWVhbnMgdGhlIGRyb3Bkb3duJ3MgbWluaW11bSBoZWlnaHQgaXMgZGV0ZXJtaW5lZCBieSBhIGNvcnJlc3BvbmRpbmcgQ1NTIHZhcmlhYmxlLiBJZiBhIHNwZWNpZmljIHZhbHVlIGlzIHByb3ZpZGVkIGZvciB0aGlzIHByb3BlcnR5LCBpdCB3aWxsIG92ZXJyaWRlIHRoZSBDU1MgdmFyaWFibGUgYW5kIGV4cGxpY2l0bHkgc2V0IHRoZSBkcm9wZG93bidzIG1pbmltdW0gaGVpZ2h0LiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZHJvcERvd25NaW5IZWlnaHQoKTogc3RyaW5nIHwgbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duTWluSGVpZ2h0IDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBkcm9wRG93bk1pbkhlaWdodCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duTWluSGVpZ2h0ID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgbWluaW11bSB3aWR0aCBvZiB0aGUgZHJvcGRvd24gY29tcG9uZW50LiBCeSBkZWZhdWx0LCB0aGlzIHByb3BlcnR5IGlzIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpLiBXaGVuIGxlZnQgdW5zZXQsIHRoZSBkcm9wZG93buKAmXMgbWluaW11bSB3aWR0aCBpcyBkZXRlcm1pbmVkIGJ5IGEgQ1NTIHZhcmlhYmxlLCBhbGxvd2luZyBmb3IgZmxleGlibGUgc3R5bGluZyB0aHJvdWdoIGV4dGVybmFsIHN0eWxlc2hlZXRzLiBUbyBvdmVycmlkZSB0aGUgQ1NTIHZhbHVlLCBhc3NpZ24gYSBzcGVjaWZpYyB3aWR0aCB2YWx1ZSAoZS5nLiwgXCIyMDBweFwiIG9yIFwiMTByZW1cIikgdG8gdGhpcyBwcm9wZXJ0eS4gKi9cblx0QElucHV0KClcblx0Z2V0IGRyb3BEb3duTWluV2lkdGgoKTogc3RyaW5nIHwgbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duTWluV2lkdGggOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRyb3BEb3duTWluV2lkdGgodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5kcm9wRG93bk1pbldpZHRoID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgZGlyZWN0aW9uIG9yIGFuaW1hdGlvbiBpbiB3aGljaCB0aGUgZHJvcGRvd24gbWVudSB3aWxsIGFwcGVhciB3aGVuIGFjdGl2YXRlZCwgc3VjaCBhcyBvcGVuaW5nIHVwd2FyZHMsIGRvd253YXJkcywgb3Igd2l0aCBhIHNwZWNpZmljIHRyYW5zaXRpb24gZWZmZWN0LiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZHJvcERvd25PcGVuTW9kZSgpOiBEcm9wRG93bk9wZW5Nb2RlIHwgc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duT3Blbk1vZGUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRyb3BEb3duT3Blbk1vZGUodmFsdWU6IERyb3BEb3duT3Blbk1vZGUgfCBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25PcGVuTW9kZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBJZiB0aGlzIHByb3BlcnR5IGlzIGVuYWJsZWQsIG9wZW5pbmcgdGhlIGVsZW1lbnQncyBkcm9wZG93biB3aWxsIGluc2VydCBhIHRyYW5zcGFyZW50IG92ZXJsYXkgYmV0d2VlbiB0aGUgZHJvcGRvd24gYW5kIHRoZSByZXN0IG9mIHRoZSBkb2N1bWVudC4gVGhpcyBvdmVybGF5IGNvdmVycyB0aGUgZW50aXJlIHZpZXdwb3J0IGV4Y2VwdCBmb3IgdGhlIGRyb3Bkb3duIGl0c2VsZiwgY2FwdHVyaW5nIGFsbCBjbGljayBldmVudHMgb3V0c2lkZSB0aGUgZHJvcGRvd24uIEFzIGEgcmVzdWx0LCBhbnkgY2xpY2tzIG91dHNpZGUgdGhlIHBvcHVwIHdpbGwgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmxheSBpbnN0ZWFkIG9mIG90aGVyIGVsZW1lbnRzIG9uIHRoZSBwYWdlLCBhbGxvd2luZyB5b3UgdG8gcmVsaWFibHkgZGV0ZWN0IGFuZCBoYW5kbGUgb3V0c2lkZSBjbGlja3MgKHN1Y2ggYXMgdG8gY2xvc2UgdGhlIGRyb3Bkb3duKSB3aXRob3V0IHVuaW50ZW50aW9uYWxseSB0cmlnZ2VyaW5nIG90aGVyIERPTSBlbGVtZW50cy4gKi9cblx0QElucHV0KClcblx0Z2V0IGRyb3BEb3duT3ZlcmxheSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duT3ZlcmxheSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZHJvcERvd25PdmVybGF5KHZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duT3ZlcmxheSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIHRleHQgb3IgY29udGVudCB0byBiZSBzaG93biBpbiB0aGUgZHJvcGRvd24gYXMgYSBwbGFjZWhvbGRlciB3aGVuIHRoZSBkcm9wZG93biBjb250YWlucyBubyBzZWxlY3RhYmxlIGl0ZW1zLiBUaGlzIHBsYWNlaG9sZGVyIHByb3ZpZGVzIGd1aWRhbmNlIG9yIGNvbnRleHQgdG8gdGhlIHVzZXIsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgY3VycmVudGx5IG5vIGF2YWlsYWJsZSBvcHRpb25zLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZHJvcERvd25QbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25QbGFjZWhvbGRlciA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZHJvcERvd25QbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duUGxhY2Vob2xkZXIgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGRyb3Bkb3duIG1lbnUgcmVsYXRpdmUgdG8gaXRzIHRyaWdnZXIgZWxlbWVudCB3aGVuIG9wZW5lZCAoZS5nLiwgYWJvdmUsIGJlbG93LCBsZWZ0LCBvciByaWdodCkuIFRoaXMgc2V0dGluZyBjb250cm9scyB3aGVyZSB0aGUgZHJvcGRvd24gYXBwZWFycyBvbiB0aGUgc2NyZWVuIGluIHJlbGF0aW9uIHRvIHRoZSBlbGVtZW50IHRoYXQgYWN0aXZhdGVzIGl0LiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZHJvcERvd25Qb3NpdGlvbigpOiBEcm9wRG93blBvc2l0aW9uIHwgc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmRyb3BEb3duUG9zaXRpb24gOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGRyb3BEb3duUG9zaXRpb24odmFsdWU6IERyb3BEb3duUG9zaXRpb24gfCBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25Qb3NpdGlvbiA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIHdpZHRoIG9mIHRoZSBkcm9wZG93biBtZW51LiBCeSBkZWZhdWx0LCB0aGlzIHByb3BlcnR5IGlzIHNldCB0byBhbiBlbXB0eSBzdHJpbmcsIGFsbG93aW5nIHRoZSBkcm9wZG93bidzIHdpZHRoIHRvIGJlIGRldGVybWluZWQgYnkgdGhlIGFzc29jaWF0ZWQgQ1NTIHZhcmlhYmxlICh0eXBpY2FsbHkgdmlhIGN1c3RvbSBwcm9wZXJ0aWVzIG9yIHRoZW1lIHNldHRpbmdzKS4gSWYgYSB2YWx1ZSBpcyBwcm92aWRlZCwgaXQgb3ZlcnJpZGVzIHRoZSBDU1MgdmFyaWFibGUgYW5kIGRpcmVjdGx5IHNldHMgdGhlIGRyb3Bkb3duJ3Mgd2lkdGguICovXG5cdEBJbnB1dCgpXG5cdGdldCBkcm9wRG93bldpZHRoKCk6IHN0cmluZyB8IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5kcm9wRG93bldpZHRoIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBkcm9wRG93bldpZHRoKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZHJvcERvd25XaWR0aCA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgaG93IHRoZSBlbGVtZW50IHNob3VsZCByZXNwb25kIHdoZW4gdGhlIEVzY2FwZSBrZXkgaXMgcHJlc3NlZCBieSB0aGUgdXNlci4gVGhpcyBwcm9wZXJ0eSBhbGxvd3MgeW91IHRvIGRlZmluZSBhY3Rpb25zIHN1Y2ggYXMgY2xvc2luZyBhIG1vZGFsLCBkaXNtaXNzaW5nIGEgZGlhbG9nLCBvciB0cmlnZ2VyaW5nIGEgY3VzdG9tIGV2ZW50IHdoZW4gdGhlIEVzY2FwZSBrZXkgaXMgZGV0ZWN0ZWQgd2hpbGUgdGhlIGVsZW1lbnQgaXMgZm9jdXNlZCBvciBhY3RpdmUuICovXG5cdEBJbnB1dCgpXG5cdGdldCBlc2NLZXlNb2RlKCk6IENvbWJvQm94RXNjS2V5TW9kZSB8IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5lc2NLZXlNb2RlIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBlc2NLZXlNb2RlKHZhbHVlOiBDb21ib0JveEVzY0tleU1vZGUgfCBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZXNjS2V5TW9kZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZmlsdGVyaW5nIGZlYXR1cmUgaXMgYWN0aXZlLiBXaGVuIHNldCB0byB0cnVlLCB1c2VycyBjYW4gYXBwbHkgZmlsdGVycyB0byBuYXJyb3cgZG93biBkaXNwbGF5ZWQgZGF0YTsgd2hlbiBmYWxzZSwgZmlsdGVyaW5nIG9wdGlvbnMgYXJlIGRpc2FibGVkIGFuZCBhbGwgZGF0YSBpcyBzaG93biB3aXRob3V0IHJlc3RyaWN0aW9uLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgZmlsdGVyYWJsZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmZpbHRlcmFibGUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGZpbHRlcmFibGUodmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZmlsdGVyYWJsZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIHBsYWNlaG9sZGVyIHRleHQgZGlzcGxheWVkIGluc2lkZSB0aGUgZHJvcGRvd24gbGlzdOKAmXMgZmlsdGVyIGlucHV0IGZpZWxkLCBndWlkaW5nIHVzZXJzIG9uIHdoYXQgdG8gZW50ZXIgd2hlbiBzZWFyY2hpbmcgb3IgZmlsdGVyaW5nIG9wdGlvbnMuICovXG5cdEBJbnB1dCgpXG5cdGdldCBmaWx0ZXJJbnB1dFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5maWx0ZXJJbnB1dFBsYWNlaG9sZGVyIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBmaWx0ZXJJbnB1dFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZmlsdGVySW5wdXRQbGFjZWhvbGRlciA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIGZpbHRlcmluZyBiZWhhdmlvciBmb3IgdGhlIENvbWJvIEJveCwgY29udHJvbGxpbmcgaG93IHVzZXIgaW5wdXQgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBhdmFpbGFibGUgb3B0aW9ucyAoZS5nLiwgY29udGFpbnMsIHN0YXJ0cyB3aXRoLCBvciBleGFjdCBtYXRjaCkuIFRoaXMgcHJvcGVydHkgZGV0ZXJtaW5lcyB3aGljaCBvcHRpb25zIGFyZSBkaXNwbGF5ZWQgaW4gdGhlIGRyb3Bkb3duIGxpc3QgYXMgdGhlIHVzZXIgdHlwZXMuICovXG5cdEBJbnB1dCgpXG5cdGdldCBmaWx0ZXJNb2RlKCk6IEZpbHRlck1vZGUgfCBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZmlsdGVyTW9kZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZmlsdGVyTW9kZSh2YWx1ZTogRmlsdGVyTW9kZSB8IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5maWx0ZXJNb2RlID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFdoZW4gZW5hYmxlZCwgdGhpcyBvcHRpb24gYXV0b21hdGljYWxseSBncm91cHMgdGhlIGl0ZW1zIGJhc2VkIG9uIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCBpdGVtJ3MgdmFsdWUgb3IgbGFiZWwuIE5vdGU6IFRoaXMgZ3JvdXBpbmcgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUgZGF0YVNvdXJjZSBkb2VzIG5vdCBhbHJlYWR5IGluY2x1ZGUgcHJlZGVmaW5lZCBncm91cHMuIElmIHRoZSBkYXRhU291cmNlIGlzIGFscmVhZHkgZ3JvdXBlZCwgdGhpcyBzZXR0aW5nIHdpbGwgaGF2ZSBubyBlZmZlY3QuICovXG5cdEBJbnB1dCgpXG5cdGdldCBncm91cGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZ3JvdXBlZCA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgZ3JvdXBlZCh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5ncm91cGVkID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB3aGljaCBhdHRyaWJ1dGUgb2YgdGhlIGRhdGFTb3VyY2Ugb2JqZWN0IHNob3VsZCBiZSB1c2VkIHRvIGdyb3VwIGl0ZW1zIGluIHRoZSBMaXN0Qm94LiBCeSBkZWZhdWx0LCBpZiB0aGlzIHByb3BlcnR5IChncm91cE1lbWJlcikgaXMgbm90IHNldCwgdGhlIExpc3RCb3ggd2lsbCB1c2UgdGhlICdncm91cCcgcHJvcGVydHkgZnJvbSBlYWNoIGRhdGFTb3VyY2UgaXRlbSB0byBvcmdhbml6ZSBncm91cHMuIFRoaXMgcHJvcGVydHkgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIGxvYWRpbmcgZGF0YSBmcm9tIGEgSlNPTiBmaWxlLCBhbGxvd2luZyB5b3UgdG8gZGVzaWduYXRlIGEgc3BlY2lmaWMgcHJvcGVydHkgZnJvbSB5b3VyIGRhdGEgb2JqZWN0cyB0byBkZXRlcm1pbmUgdGhlIGdyb3VwaW5nIG9mIGl0ZW1z4oCUZXNwZWNpYWxseSBpZiB5b3VyIEpTT04gc3RydWN0dXJlIHVzZXMgYSBkaWZmZXJlbnQgcHJvcGVydHkgbmFtZSBmb3IgZ3JvdXBpbmcuICovXG5cdEBJbnB1dCgpXG5cdGdldCBncm91cE1lbWJlcigpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZ3JvdXBNZW1iZXIgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGdyb3VwTWVtYmVyKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuZ3JvdXBNZW1iZXIgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gRGlzcGxheXMgc3VwcGxlbWVudGFyeSBoZWxwZXIgdGV4dCBiZW5lYXRoIHRoZSBlbGVtZW50LiBUaGlzIGhpbnQgaXMgdmlzaWJsZSBleGNsdXNpdmVseSB3aGVuIHRoZSBlbGVtZW50IGlzIGluIGZvY3VzLCBwcm92aWRpbmcgY29udGV4dHVhbCBndWlkYW5jZSB0byB1c2VycyBhcyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGZpZWxkLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgaGludCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuaGludCA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgaGludCh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmhpbnQgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciB0aGUgaG9yaXpvbnRhbCBzY3JvbGwgYmFyIGlzIGRpc3BsYXllZCB3aXRoaW4gdGhlIGRyb3Bkb3duIG1lbnUgd2hlbiB0aGUgY29udGVudCBleGNlZWRzIHRoZSBhdmFpbGFibGUgd2lkdGguICovXG5cdEBJbnB1dCgpXG5cdGdldCBob3Jpem9udGFsU2Nyb2xsQmFyVmlzaWJpbGl0eSgpOiBIb3Jpem9udGFsU2Nyb2xsQmFyVmlzaWJpbGl0eSB8IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5ob3Jpem9udGFsU2Nyb2xsQmFyVmlzaWJpbGl0eSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgaG9yaXpvbnRhbFNjcm9sbEJhclZpc2liaWxpdHkodmFsdWU6IEhvcml6b250YWxTY3JvbGxCYXJWaXNpYmlsaXR5IHwgc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lmhvcml6b250YWxTY3JvbGxCYXJWaXNpYmlsaXR5ID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgdGhlIHByb3BlcnR5IG5hbWUgb2YgYSBMaXN0IGl0ZW0gd2hvc2UgdmFsdWUgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGlucHV0IGZpZWxkIHdoZW4gYSBMaXN0SXRlbSBpcyBzZWxlY3RlZC4gVGhpcyBhbGxvd3MgZGV2ZWxvcGVycyB0byBjb250cm9sIHdoaWNoIHByb3BlcnR5IG9mIGVhY2ggaXRlbSBpcyBzaG93biBpbiB0aGUgaW5wdXQsIHN1Y2ggYXMgZGlzcGxheWluZyB0aGUgaXRlbSdzIHZhbHVlIGluc3RlYWQgb2YgaXRzIGxhYmVsLiBCeSBkZWZhdWx0LCB0aGUgbGFiZWwgcHJvcGVydHkgaXMgdXNlZCBmb3IgZGlzcGxheS4gVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gY3VzdG9taXplIHRoZSBkaXNwbGF5ZWQgY29udGVudCwgZm9yIGV4YW1wbGUsIHRvIHNob3cgYSB1bmlxdWUgaWRlbnRpZmllciBvciB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZGVzY3JpcHRpdmUgbGFiZWwuICovXG5cdEBJbnB1dCgpXG5cdGdldCBpbnB1dE1lbWJlcigpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuaW5wdXRNZW1iZXIgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGlucHV0TWVtYmVyKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuaW5wdXRNZW1iZXIgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBleHBlY3RlZCB0eXBlIG9mIGluZm9ybWF0aW9uIGZvciB0aGUgaW5wdXQgZmllbGQgYW5kIGluZm9ybXMgdGhlIGJyb3dzZXIgYWJvdXQgdGhlIG5hdHVyZSBvZiB0aGUgZGF0YSB0byBiZSBlbnRlcmVkLiBUaGlzIGd1aWRhbmNlIGFsbG93cyB1c2VyIGFnZW50cyAoc3VjaCBhcyBicm93c2VycyBhbmQgcGFzc3dvcmQgbWFuYWdlcnMpIHRvIGRldGVybWluZSBpZiB0aGV5IGNhbiBwcm92aWRlIGF1dG9tYXRlZCBhc3Npc3RhbmNl4oCUbGlrZSBhdXRvZmlsbGluZyByZWxldmFudCB2YWx1ZXPigJR3aGVuIHRoZSBlbGVtZW50IGlzIHVzZWQgaW4gYSBmb3JtLiBUaGUgdmFsdWUgYXNzaWduZWQgdG8gdGhpcyBwcm9wZXJ0eSBkaXJlY3RseSBtYXBzIHRvIHRoZSBzdGFuZGFyZCBIVE1MIGF1dG9jb21wbGV0ZSBhdHRyaWJ1dGUuIENvbW1vbiB2YWx1ZXMgaW5jbHVkZSAnb24nIChlbmFibGUgYXV0b2NvbXBsZXRlKSwgJ29mZicgKGRpc2FibGUgYXV0b2NvbXBsZXRlKSwgJ25hbWUnIChmdWxsIG5hbWUpLCAnb3JnYW5pemF0aW9uJyAoY29tcGFueSBvciBvcmdhbml6YXRpb24pLCAnZW1haWwnLCAnc3RyZWV0LWFkZHJlc3MnLCBhbmQgbWFueSBvdGhlcnMsIGFzIHNwZWNpZmllZCBieSB0aGUgSFRNTCBzdGFuZGFyZC4gVXNpbmcgYW4gYXBwcm9wcmlhdGUgdmFsdWUgaW1wcm92ZXMgdXNlciBleHBlcmllbmNlLCBlbmhhbmNlcyBhY2Nlc3NpYmlsaXR5LCBhbmQgaGVscHMgbWFpbnRhaW4gcHJpdmFjeSBhbmQgc2VjdXJpdHkgc3RhbmRhcmRzIHdpdGhpbiB3ZWIgZm9ybXMuICovXG5cdEBJbnB1dCgpXG5cdGdldCBpbnB1dFB1cnBvc2UoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmlucHV0UHVycG9zZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgaW5wdXRQdXJwb3NlKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuaW5wdXRQdXJwb3NlID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFRoZSAnSW5jcmVtZW50YWxTZWFyY2hEZWxheScgcHJvcGVydHkgZGVmaW5lcyB0aGUgZHVyYXRpb24sIGluIG1pbGxpc2Vjb25kcywgdG8gd2FpdCBhZnRlciB0aGUgdXNlciBzdG9wcyB0eXBpbmcgYmVmb3JlIGNsZWFyaW5nIHRoZSBwcmV2aW91cyBzZWFyY2ggcXVlcnkuIFRoaXMgdGltZXIgYmVnaW5zIGFzIHNvb24gYXMgdGhlIHVzZXIgZmluaXNoZXMgdHlwaW5nLiBEdXJpbmcgdGhpcyBkZWxheSBwZXJpb2QsIG5vIG5ldyBzZWFyY2ggcXVlcnkgd2lsbCBiZSBpbml0aWF0ZWQuIE9ubHkgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheSBoYXMgZWxhcHNlZCB3aWxsIHRoZSBjdXJyZW50IHNlYXJjaCBpbnB1dCBiZSBjbGVhcmVkLCBhbGxvd2luZyBhIG5ldyBzZWFyY2ggcXVlcnkgdG8gYmUgc3RhcnRlZC4gVGhpcyBoZWxwcyB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBhbmQgdXNlciBleHBlcmllbmNlIGJ5IHByZXZlbnRpbmcgdW5uZWNlc3Nhcnkgb3IgcHJlbWF0dXJlIHF1ZXJpZXMgd2hpbGUgdGhlIHVzZXIgaXMgc3RpbGwgZW50ZXJpbmcgdGhlaXIgc2VhcmNoIHRlcm1zLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgaW5jcmVtZW50YWxTZWFyY2hEZWxheSgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuaW5jcmVtZW50YWxTZWFyY2hEZWxheSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgaW5jcmVtZW50YWxTZWFyY2hEZWxheSh2YWx1ZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmluY3JlbWVudGFsU2VhcmNoRGVsYXkgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gQ29uZmlndXJlcyBvciByZXRyaWV2ZXMgdGhlIGN1cnJlbnQgbW9kZSBvZiBpbmNyZW1lbnRhbCBzZWFyY2guIEJ5IGRlZmF1bHQsIGluY3JlbWVudGFsIHNlYXJjaCBpcyBlbmFibGVkLCBhbGxvd2luZyB1c2VycyB0byB0eXBlIHdoaWxlIHRoZSBkcm9wZG93biBpcyBmb2N1c2VkIHRvIHF1aWNrbHkgZmlsdGVyIGFuZCBoaWdobGlnaHQgbWF0Y2hpbmcgb3B0aW9ucy4gTW9kaWZ5aW5nIHRoaXMgc2V0dGluZyBjb250cm9scyBob3cgdXNlciBpbnB1dCBpcyBwcm9jZXNzZWQgZm9yIHNlYXJjaGluZyB3aXRoaW4gdGhlIGRyb3Bkb3duIGxpc3QuICovXG5cdEBJbnB1dCgpXG5cdGdldCBpbmNyZW1lbnRhbFNlYXJjaE1vZGUoKTogU2VhcmNoTW9kZSB8IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5pbmNyZW1lbnRhbFNlYXJjaE1vZGUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGluY3JlbWVudGFsU2VhcmNoTW9kZSh2YWx1ZTogU2VhcmNoTW9kZSB8IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5pbmNyZW1lbnRhbFNlYXJjaE1vZGUgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBoZWlnaHQgKGluIHBpeGVscykgZm9yIGVhY2ggbGlzdCBpdGVtIHdoZW4gcmVuZGVyaW5nIHRoZSBsaXN0LiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgYXBwbGljYWJsZSB3aGVuIGxpc3QgdmlydHVhbGl6YXRpb24gaXMgZW5hYmxlZCwgYXMgaXQgaGVscHMgb3B0aW1pemUgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGJ5IGFsbG93aW5nIHRoZSBjb21wb25lbnQgdG8gY2FsY3VsYXRlIGFuZCByZW5kZXIgb25seSB0aGUgdmlzaWJsZSBpdGVtcy4gKi9cblx0QElucHV0KClcblx0Z2V0IGl0ZW1IZWlnaHQoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lml0ZW1IZWlnaHQgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGl0ZW1IZWlnaHQodmFsdWU6IG51bWJlcikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5pdGVtSGVpZ2h0ID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgYWxnb3JpdGhtIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB3aWR0aCBvZiBlYWNoIGl0ZW0uIFRoaXMgc2V0dGluZyBkZXRlcm1pbmVzIGhvdyB0aGUgd2lkdGggb2YgYW4gaXRlbSBpcyBtZWFzdXJlZCwgc3VjaCBhcyB1c2luZyB0aGUgaXRlbSdzIGludHJpbnNpYyBjb250ZW50IHNpemUsIGEgZml4ZWQgdmFsdWUsIG9yIGEgcGVyY2VudGFnZSBvZiB0aGUgY29udGFpbmVyLiBBZGp1c3QgdGhpcyBwYXJhbWV0ZXIgdG8gY29udHJvbCBob3cgaXRlbSB3aWR0aHMgYXJlIGRldGVybWluZWQgd2l0aGluIHRoZSBsYXlvdXQuICovXG5cdEBJbnB1dCgpXG5cdGdldCBpdGVtTWVhc3VyZU1vZGUoKTogTGlzdEl0ZW1NZWFzdXJlTW9kZSB8IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5pdGVtTWVhc3VyZU1vZGUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGl0ZW1NZWFzdXJlTW9kZSh2YWx1ZTogTGlzdEl0ZW1NZWFzdXJlTW9kZSB8IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5pdGVtTWVhc3VyZU1vZGUgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gQSBnZXR0ZXIgbWV0aG9kIHRoYXQgcmV0cmlldmVzIGFuZCByZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIGxpc3QgKCdsaScpIGVsZW1lbnRzIGN1cnJlbnRseSBwcmVzZW50IHdpdGhpbiB0aGUgZHJvcGRvd24gbWVudS4gVGhpcyBhbGxvd3MgeW91IHRvIGVhc2lseSBhY2Nlc3MgYW5kIG1hbmlwdWxhdGUgZXZlcnkgaXRlbSBkaXNwbGF5ZWQgaW4gdGhlIGRyb3Bkb3duLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgaXRlbXMoKToge2xhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmd9W10ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuaXRlbXMgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGl0ZW1zKHZhbHVlOiB7bGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZ31bXSkge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5pdGVtcyA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBUaGUgaXRlbVRlbXBsYXRlIHByb3BlcnR5IGlzIGEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSBJRCBvZiBhbiBIVE1MVGVtcGxhdGVFbGVtZW50IHByZXNlbnQgaW4gdGhlIERPTS4gVGhpcyB0ZW1wbGF0ZSBpcyB1c2VkIHRvIGRlZmluZSBhbmQgY3VzdG9taXplIHRoZSBzdHJ1Y3R1cmUgYW5kIGNvbnRlbnQgb2YgaW5kaXZpZHVhbCBsaXN0IGl0ZW1zLCBhbGxvd2luZyBkZXZlbG9wZXJzIHRvIGNvbnRyb2wgaG93IGVhY2ggaXRlbSBhcHBlYXJzIHdoZW4gcmVuZGVyZWQgaW4gdGhlIGxpc3QuICovXG5cdEBJbnB1dCgpXG5cdGdldCBpdGVtVGVtcGxhdGUoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lml0ZW1UZW1wbGF0ZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgaXRlbVRlbXBsYXRlKHZhbHVlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuaXRlbVRlbXBsYXRlID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIERpc3BsYXlzIGEgc21hbGwgdGV4dCBsYWJlbCBwb3NpdGlvbmVkIGFib3ZlIHRoZSBlbGVtZW50LCB0eXBpY2FsbHkgdXNlZCB0byBwcm92aWRlIGNvbnRleHQsIGluc3RydWN0aW9ucywgb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byB1c2Vycy4gKi9cblx0QElucHV0KClcblx0Z2V0IGxhYmVsKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5sYWJlbCA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgbGFiZWwodmFsdWU6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5sYWJlbCA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIHRleHQgdGhhdCBhcHBlYXJzIGFsb25nc2lkZSB0aGUgbG9hZGluZyBpbmRpY2F0b3Igd2hlbiB0aGUgbG9hZGVyIGlzIHZpc2libGUgYW5kIHBvc2l0aW9uZWQgYXQgdGhlIHRvcCBvciBib3R0b20gb2YgdGhlIGNvbXBvbmVudC4gVGhpcyB0ZXh0IHByb3ZpZGVzIHVzZXJzIHdpdGggY29udGV4dHVhbCBpbmZvcm1hdGlvbiBvciBzdGF0dXMgdXBkYXRlcyBkdXJpbmcgbG9hZGluZy4gKi9cblx0QElucHV0KClcblx0Z2V0IGxvYWRpbmdJbmRpY2F0b3JQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubG9hZGluZ0luZGljYXRvclBsYWNlaG9sZGVyIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBsb2FkaW5nSW5kaWNhdG9yUGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5sb2FkaW5nSW5kaWNhdG9yUGxhY2Vob2xkZXIgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBleGFjdCBsb2NhdGlvbiBvbiB0aGUgdXNlciBpbnRlcmZhY2Ugd2hlcmUgdGhlIGxvYWRpbmcgaW5kaWNhdG9yIHdpbGwgYmUgZGlzcGxheWVkLCBzdWNoIGFzIGF0IHRoZSB0b3AsIGNlbnRlciwgb3IgYm90dG9tIG9mIHRoZSBzY3JlZW4gb3IgY29tcG9uZW50LiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgbG9hZGluZ0luZGljYXRvclBvc2l0aW9uKCk6IFZlcnRpY2FsQWxpZ25tZW50IHwgc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmxvYWRpbmdJbmRpY2F0b3JQb3NpdGlvbiA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgbG9hZGluZ0luZGljYXRvclBvc2l0aW9uKHZhbHVlOiBWZXJ0aWNhbEFsaWdubWVudCB8IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5sb2FkaW5nSW5kaWNhdG9yUG9zaXRpb24gPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU2V0cyBvciByZXRyaWV2ZXMgdGhlIHVubG9ja0tleSwgYSB1bmlxdWUgdmFsdWUgcmVxdWlyZWQgdG8gZ3JhbnQgYWNjZXNzIHRvIHRoZSBwcm9kdWN04oCZcyBwcmVtaXVtIGZlYXR1cmVzIG9yIGFjdGl2YXRlIGl0cyBmdWxsIGZ1bmN0aW9uYWxpdHkuICovXG5cdEBJbnB1dCgpXG5cdGdldCB1bmxvY2tLZXkoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnVubG9ja0tleSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgdW5sb2NrS2V5KHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQudW5sb2NrS2V5ID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyBvciByZXRyaWV2ZXMgdGhlIGN1cnJlbnQgbGFuZ3VhZ2Ugc2V0dGluZyBmb3IgdGhlIGNvbXBvbmVudC4gVGhpcyBwcm9wZXJ0eSBkZXRlcm1pbmVzIHdoaWNoIGxhbmd1YWdlIGlzIHVzZWQgd2hlbiBkaXNwbGF5aW5nIGNvbnRlbnQgZnJvbSB0aGUgbWVzc2FnZXMgcHJvcGVydHksIGFsbG93aW5nIGZvciBsb2NhbGl6YXRpb24gYW5kIGludGVybmF0aW9uYWxpemF0aW9uIG9mIGRpc3BsYXllZCBtZXNzYWdlcy4gU2V0IHRoaXMgcHJvcGVydHkgdG8gYSBzdXBwb3J0ZWQgbGFuZ3VhZ2UgY29kZSAoZS5nLiwgXCJlblwiLCBcImZyXCIpIHRvIGxvYWQgdGhlIGNvcnJlc3BvbmRpbmcgdHJhbnNsYXRpb25zIGZyb20gdGhlIG1lc3NhZ2VzIG9iamVjdC4gKi9cblx0QElucHV0KClcblx0Z2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubG9jYWxlIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBsb2NhbGUodmFsdWU6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5sb2NhbGUgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGFsbG93cyB5b3UgdG8gY3VzdG9taXplIHRoZSBmb3JtYXR0aW5nIG9mIG1lc3NhZ2VzIHJldHVybmVkIGJ5IHRoZSBMb2NhbGl6YXRpb24gTW9kdWxlLiBVc2UgdGhpcyBjYWxsYmFjayB0byBtb2RpZnkgbWVzc2FnZSB0ZXh0LCBhcHBseSBkeW5hbWljIHZhbHVlcywgb3IgaW1wbGVtZW50IGN1c3RvbSBmb3JtYXR0aW5nIGxvZ2ljIGJlZm9yZSB0aGUgbG9jYWxpemVkIG1lc3NhZ2VzIGFyZSBkZWxpdmVyZWQgdG8geW91ciBhcHBsaWNhdGlvbi4gKi9cblx0QElucHV0KClcblx0Z2V0IGxvY2FsaXplRm9ybWF0RnVuY3Rpb24oKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmxvY2FsaXplRm9ybWF0RnVuY3Rpb24gOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IGxvY2FsaXplRm9ybWF0RnVuY3Rpb24odmFsdWU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5sb2NhbGl6ZUZvcm1hdEZ1bmN0aW9uID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyBvciByZXRyaWV2ZXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgbG9jYWxpemVkIHN0cmluZyB2YWx1ZXMgdXNlZCB3aXRoaW4gdGhlIHdpZGdldOKAmXMgdXNlciBpbnRlcmZhY2UuIFRoaXMgcHJvcGVydHkgZW5hYmxlcyB0aGUgY3VzdG9taXphdGlvbiBhbmQgdHJhbnNsYXRpb24gb2YgVUkgdGV4dCBmb3IgZGlmZmVyZW50IGxhbmd1YWdlcyBvciByZWdpb25zLiBJdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggdGhlIGxvY2FsZSBwcm9wZXJ0eSwgYWxsb3dpbmcgeW91IHRvIGVhc2lseSBwcm92aWRlIG9yIHVwZGF0ZSBsb2NhbGl6ZWQgc3RyaW5ncyBhY2NvcmRpbmcgdG8gdGhlIHNlbGVjdGVkIGxvY2FsZS4gKi9cblx0QElucHV0KClcblx0Z2V0IG1lc3NhZ2VzKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5tZXNzYWdlcyA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgbWVzc2FnZXModmFsdWU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5tZXNzYWdlcyA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYSB1c2VyIG11c3QgZW50ZXIgaW4gdGhlIGlucHV0IGZpZWxkIGJlZm9yZSB0aGUgYXV0b2NvbXBsZXRlIGZlYXR1cmUgaXMgYWN0aXZhdGVkIGFuZCBzdWdnZXN0aW9ucyBhcmUgZGlzcGxheWVkLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgbWluTGVuZ3RoKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5taW5MZW5ndGggOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IG1pbkxlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lm1pbkxlbmd0aCA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgZW50ZXJlZCBpbnRvIHRoZSBpbnB1dCBmaWVsZC4gQW55IGFkZGl0aW9uYWwgY2hhcmFjdGVycyBiZXlvbmQgdGhpcyBsaW1pdCB3aWxsIG5vdCBiZSBhY2NlcHRlZC4gVGhpcyBoZWxwcyBlbmZvcmNlIGRhdGEgdmFsaWRhdGlvbiBhbmQgY29uc2lzdGVuY3kgZm9yIHVzZXIgaW5wdXQuICovXG5cdEBJbnB1dCgpXG5cdGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lm1heExlbmd0aCA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgbWF4TGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubWF4TGVuZ3RoID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNldHMgb3IgcmV0cmlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCdzIG5hbWUgYXR0cmlidXRlLiBUaGUgbmFtZSBhdHRyaWJ1dGUgdW5pcXVlbHkgaWRlbnRpZmllcyBmb3JtIGVsZW1lbnRzIHdoZW4gc3VibWl0dGluZyBIVE1MIGZvcm1zLCBhbGxvd2luZyB0aGUgZm9ybSBkYXRhIHRvIGJlIG9yZ2FuaXplZCBhbmQgYWNjZXNzZWQgYnkgbmFtZSBvbiB0aGUgc2VydmVyIHNpZGUuIFRoaXMgYXR0cmlidXRlIGlzIGVzc2VudGlhbCBmb3IgZ3JvdXBpbmcgZm9ybSBjb250cm9scyBhbmQgYWNjdXJhdGVseSB0cmFuc21pdHRpbmcgdXNlciBpbnB1dCBkdXJpbmcgZm9ybSBzdWJtaXNzaW9uLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgbmFtZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQubmFtZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50Lm5hbWUgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHBvcHVwIGlzIGN1cnJlbnRseSB2aXNpYmxlIChvcGVuKSBvciBoaWRkZW4gKGNsb3NlZCkgaW4gdGhlIHVzZXIgaW50ZXJmYWNlLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgb3BlbmVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQub3BlbmVkIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBvcGVuZWQodmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQub3BlbmVkID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgcGxhY2Vob2xkZXIgdGV4dCB0aGF0IGFwcGVhcnMgaW5zaWRlIHRoZSBpbnB1dCBmaWVsZCB3aGVuIGl0IGlzIGVtcHR5LCBwcm92aWRpbmcgZ3VpZGFuY2Ugb3IgZXhhbXBsZSBjb250ZW50IHRvIHRoZSB1c2VyLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnBsYWNlaG9sZGVyIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnBsYWNlaG9sZGVyID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFByZXZlbnRzIGFueSB1c2VyIGludGVyYWN0aW9ucyB3aXRoIHRoZSBlbGVtZW50LCBpbmNsdWRpbmcgY2xpY2tpbmcsIHRhcHBpbmcsIHNlbGVjdGluZywgaG92ZXJpbmcsIG9yIGZvY3VzaW5nLiBXaGlsZSB0aGlzIGlzIGVuYWJsZWQsIHRoZSBlbGVtZW50IHdpbGwgbm90IHJlc3BvbmQgdG8gbW91c2UsIGtleWJvYXJkLCBvciB0b3VjaCBldmVudHMsIGVmZmVjdGl2ZWx5IG1ha2luZyBpdCBub24taW50ZXJhY3RpdmUgZm9yIHVzZXJzLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5yZWFkb25seSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgcmVhZG9ubHkodmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQucmVhZG9ubHkgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIG9yIHJldHJpZXZlcyBhIHZhbHVlIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBlbGVtZW504oCZcyB0ZXh0IGRpcmVjdGlvbiBpcyBzZXQgdG8gc3VwcG9ydCByaWdodC10by1sZWZ0IChSVEwpIGxhbmd1YWdlcywgc3VjaCBhcyBBcmFiaWMgb3IgSGVicmV3LiBXaGVuIGVuYWJsZWQsIHRoZSBlbGVtZW50IGFuZCBpdHMgY29udGVudCBhcmUgYWxpZ25lZCBhY2NvcmRpbmcgdG8gUlRMIGZvcm1hdHRpbmcsIGVuc3VyaW5nIHByb3BlciBkaXNwbGF5IGZvciBsb2NhbGVzIHRoYXQgdXNlIHJpZ2h0LXRvLWxlZnQgc2NyaXB0cy4gKi9cblx0QElucHV0KClcblx0Z2V0IHJpZ2h0VG9MZWZ0KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQucmlnaHRUb0xlZnQgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHJpZ2h0VG9MZWZ0KHZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnJpZ2h0VG9MZWZ0ID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIENvbnRyb2xzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSByZXNpemUgaW5kaWNhdG9yIGxvY2F0ZWQgaW4gdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIgb2YgdGhlIGRyb3Bkb3duIGNvbXBvbmVudC4gV2hlbiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLCB1c2VycyB3aWxsIHNlZSBhIGhhbmRsZSBhbGxvd2luZyB0aGVtIHRvIHJlc2l6ZSB0aGUgZHJvcGRvd24gYXJlYS4gVGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgdXNlZCB0b2dldGhlciB3aXRoIHRoZSByZXNpemVNb2RlIHByb3BlcnR5IHRvIGRlZmluZSBib3RoIHRoZSBhdmFpbGFiaWxpdHkgYW5kIGJlaGF2aW9yIG9mIHRoZSByZXNpemluZyBmZWF0dXJlLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgcmVzaXplSW5kaWNhdG9yKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQucmVzaXplSW5kaWNhdG9yIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCByZXNpemVJbmRpY2F0b3IodmFsdWU6IGJvb2xlYW4pIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQucmVzaXplSW5kaWNhdG9yID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBkcm9wLWRvd24gbWVudSBpcyByZXNpemFibGUgYnkgdGhlIHVzZXIuIElmIHJlc2l6aW5nIGlzIGVuYWJsZWQsIGEgcmVzaXplIGJhciB3aWxsIGJlIGRpc3BsYXllZCBhbG9uZyB0aGUgdG9wIG9yIGJvdHRvbSBlZGdlIG9mIHRoZSBkcm9wLWRvd24sIGFsbG93aW5nIHVzZXJzIHRvIGNsaWNrIGFuZCBkcmFnIHRvIGFkanVzdCBpdHMgaGVpZ2h0LiBEaXNhYmxpbmcgdGhpcyBvcHRpb24gcmVtb3ZlcyB0aGUgcmVzaXplIGJhciBhbmQgcHJldmVudHMgYW55IG1hbnVhbCByZXNpemluZyBvZiB0aGUgZHJvcC1kb3duIGNvbXBvbmVudC4gKi9cblx0QElucHV0KClcblx0Z2V0IHJlc2l6ZU1vZGUoKTogUmVzaXplTW9kZSB8IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5yZXNpemVNb2RlIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCByZXNpemVNb2RlKHZhbHVlOiBSZXNpemVNb2RlIHwgc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnJlc2l6ZU1vZGUgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBjb250ZW50IG9yIHZhbHVlIHRoYXQgd2lsbCBhcHBlYXIgd2l0aGluIHRoZSBpbnB1dCBmaWVsZCwgZWl0aGVyIGFzIGEgZGVmYXVsdCB2YWx1ZSwgdXNlci1lbnRlcmVkIGRhdGEsIG9yIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBjb250ZW50LiBUaGlzIHNldHRpbmcgY29udHJvbHMgd2hhdCB0aGUgdXNlciBzZWVzIGFuZCBpbnRlcmFjdHMgd2l0aCBpbnNpZGUgdGhlIGlucHV0IGVsZW1lbnQuICovXG5cdEBJbnB1dCgpXG5cdGdldCBzZWxlY3Rpb25EaXNwbGF5TW9kZSgpOiBTZWxlY3Rpb25EaXNwbGF5TW9kZSB8IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25EaXNwbGF5TW9kZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgc2VsZWN0aW9uRGlzcGxheU1vZGUodmFsdWU6IFNlbGVjdGlvbkRpc3BsYXlNb2RlIHwgc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkRpc3BsYXlNb2RlID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNldHMgb3IgcmV0cmlldmVzIHRoZSBzZWxlY3RlZCBpbmRleGVzLiBUaGUgc2VsZWN0ZWQgaW5kZXhlcyBwcm9wZXJ0eSBpcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGluZGV4ZXMgb2YgdGhlIGl0ZW1zIHRoYXQgYXJlIGN1cnJlbnRseSBzZWxlY3RlZC4gRWFjaCB2YWx1ZSBpbiB0aGUgYXJyYXkgY29ycmVzcG9uZHMgdG8gdGhlIHBvc2l0aW9uIG9mIGEgc2VsZWN0ZWQgaXRlbSB3aXRoaW4gdGhlIG92ZXJhbGwgbGlzdCBvciBjb2xsZWN0aW9uLiBBc3NpZ25pbmcgYSBuZXcgYXJyYXkgdG8gdGhpcyBwcm9wZXJ0eSB1cGRhdGVzIHRoZSBzZWxlY3Rpb24gc3RhdGUgdG8gbWF0Y2ggdGhlIHNwZWNpZmllZCBpbmRleGVzOyByZXRyaWV2aW5nIGl0IHJldHVybnMgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGFzIGFuIGFycmF5IG9mIGluZGV4ZXMuICovXG5cdEBJbnB1dCgpXG5cdGdldCBzZWxlY3RlZEluZGV4ZXMoKTogbnVtYmVyW10ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuc2VsZWN0ZWRJbmRleGVzIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCBzZWxlY3RlZEluZGV4ZXModmFsdWU6IG51bWJlcltdKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGVkSW5kZXhlcyA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiAgIFwiU2V0cyBvciByZXRyaWV2ZXMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpbmRleGVzLiBUaGUgJ3NlbGVjdGVkJyBwcm9wZXJ0eSBob2xkcyBhbiBhcnJheSBvZiB0aGUgaW5kaWNlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpdGVtcyB0aGF0IGFyZSBtYXJrZWQgYXMgc2VsZWN0ZWQuIFdoZW4gc2V0dGluZyB0aGlzIHByb3BlcnR5LCBwcm92aWRlIGFuIGFycmF5IG9mIGluZGV4ZXMgdG8gc3BlY2lmeSB3aGljaCBpdGVtcyBzaG91bGQgYmUgc2VsZWN0ZWQuIFdoZW4gZ2V0dGluZyB0aGlzIHByb3BlcnR5LCBpdCByZXR1cm5zIHRoZSBhcnJheSBvZiBpbmRleGVzIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zLlwiICovXG5cdEBJbnB1dCgpXG5cdGdldCBzZWxlY3RlZFZhbHVlcygpOiBzdHJpbmdbXSB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3RlZFZhbHVlcyA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgc2VsZWN0ZWRWYWx1ZXModmFsdWU6IHN0cmluZ1tdKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGVkVmFsdWVzID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBhIHVzZXIgaXMgYWxsb3dlZCB0byBzZWxlY3QgYXQgb25lIHRpbWUuIElmIHRoaXMgdmFsdWUgaXMgc2V0IHRvIDEsIG9ubHkgc2luZ2xlIHNlbGVjdGlvbiBpcyBwZXJtaXR0ZWQ7IGhpZ2hlciB2YWx1ZXMgYWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9ucyB1cCB0byB0aGUgZGVmaW5lZCBsaW1pdC4gKi9cblx0QElucHV0KClcblx0Z2V0IHNlbGVjdGlvbk1vZGUoKTogTGlzdFNlbGVjdGlvbk1vZGUgfCBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uTW9kZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgc2VsZWN0aW9uTW9kZSh2YWx1ZTogTGlzdFNlbGVjdGlvbk1vZGUgfCBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uTW9kZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgd2hldGhlciB0aGUgaXRlbXMgYXJlIGFycmFuZ2VkIGluIGFscGhhYmV0aWNhbCBvcmRlci4gSWYgc2V0IHRvIHRydWUsIHRoZSBpdGVtcyB3aWxsIGJlIHNvcnRlZCBhbHBoYWJldGljYWxseTsgaWYgZmFsc2UsIHRoZSBvcmlnaW5hbCBvcmRlciB3aWxsIGJlIHByZXNlcnZlZC4gKi9cblx0QElucHV0KClcblx0Z2V0IHNvcnRlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnNvcnRlZCA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgc29ydGVkKHZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnNvcnRlZCA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIHNvcnRpbmcgb3JkZXIgZm9yIGRhdGEsIGFsbG93aW5nIHlvdSB0byBjaG9vc2UgYmV0d2VlbiBhc2NlbmRpbmcgKFwiYXNjXCIpIGZvciBsb3dlc3QtdG8taGlnaGVzdCBvciBhbHBoYWJldGljYWwgQeKAk1ogc29ydGluZywgYW5kIGRlc2NlbmRpbmcgKFwiZGVzY1wiKSBmb3IgaGlnaGVzdC10by1sb3dlc3Qgb3IgWuKAk0Egc29ydGluZy4gKi9cblx0QElucHV0KClcblx0Z2V0IHNvcnREaXJlY3Rpb24oKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnNvcnREaXJlY3Rpb24gOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHNvcnREaXJlY3Rpb24odmFsdWU6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC5zb3J0RGlyZWN0aW9uID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgdmlzdWFsIHRoZW1lIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQuIFRoZSBzZWxlY3RlZCB0aGVtZSBjb250cm9scyB0aGUgZWxlbWVudOKAmXMgYXBwZWFyYW5jZSwgaW5jbHVkaW5nIGNvbG9ycywgZm9udHMsIGFuZCBvdGhlciBzdHlsaXN0aWMgcHJvcGVydGllcywgZW5zdXJpbmcgYSBjb25zaXN0ZW50IGxvb2sgYW5kIGZlZWwgYWNyb3NzIHRoZSB1c2VyIGludGVyZmFjZS4gKi9cblx0QElucHV0KClcblx0Z2V0IHRoZW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC50aGVtZSA6IHVuZGVmaW5lZDtcblx0fVxuXHRzZXQgdGhlbWUodmFsdWU6IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC50aGVtZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIHRoZSBjdXN0b20gY29udGVudCB0byBkaXNwbGF5IHdpdGhpbiBlYWNoIHRva2VuIHdoZW4gdGhlIHNlbGVjdGlvbkRpc3BsYXlNb2RlIGlzIHNldCB0byBcInRva2Vuc1wiLiBUb2tlbnMgdmlzdWFsbHkgcmVwcmVzZW50IHNlbGVjdGVkIGl0ZW1zIGluIGEgbXVsdGktc2VsZWN0IGludGVyZmFjZSBhbmQgYXJlIG9ubHkgYXBwbGljYWJsZSB3aGVuIG11bHRpcGxlIHNlbGVjdGlvbiBpcyBlbmFibGVkLiBVc2UgdGhpcyBvcHRpb24gdG8gY3VzdG9taXplIGhvdyBlYWNoIHRva2VuIGFwcGVhcnMsIHN1Y2ggYXMgZGlzcGxheWluZyBzcGVjaWZpYyB0ZXh0LCBpY29ucywgb3IgYWRkaXRpb25hbCBkYXRhIGZvciBlYWNoIHNlbGVjdGVkIGl0ZW0uICovXG5cdEBJbnB1dCgpXG5cdGdldCB0b2tlblRlbXBsYXRlKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC50b2tlblRlbXBsYXRlIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCB0b2tlblRlbXBsYXRlKHZhbHVlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQudG9rZW5UZW1wbGF0ZSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGVsZW1lbnQgd2lsbCBub3QgYmUgYWJsZSB0byByZWNlaXZlIGtleWJvYXJkIG9yIG1vdXNlIGZvY3VzLCBtYWtpbmcgaXQgaW5hY2Nlc3NpYmxlIHZpYSB0YWIgbmF2aWdhdGlvbiBvciBwcm9ncmFtbWF0aWMgZm9jdXMgbWV0aG9kcy4gKi9cblx0QElucHV0KClcblx0Z2V0IHVuZm9jdXNhYmxlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQudW5mb2N1c2FibGUgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHVuZm9jdXNhYmxlKHZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnVuZm9jdXNhYmxlID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdG8gcmV0cmlldmUgKGdldCkgb3IgYXNzaWduIChzZXQpIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4gV2hlbiB1c2VkIGFzIGEgZ2V0dGVyLCBpdCByZXR1cm5zIHRoZSBwcm9wZXJ0eSdzIGN1cnJlbnQgdmFsdWUuIFdoZW4gdXNlZCBhcyBhIHNldHRlciwgaXQgdXBkYXRlcyB0aGUgcHJvcGVydHkgd2l0aCB0aGUgc3BlY2lmaWVkIHZhbHVlLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgdmFsdWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB3aGljaCBwcm9wZXJ0eSBvZiBlYWNoIGl0ZW0gb2JqZWN0IHNob3VsZCBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgdGhhdCBpdGVtLiBUaGUgdmFsdWUgZGVzaWduYXRlZCBieSB2YWx1ZU1lbWJlciB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgaXRlbSdzIHZhbHVlIGZpZWxkLiBUaGlzIHByb3BlcnR5IGZ1bmN0aW9ucyBzaW1pbGFybHkgdG8gZ3JvdXBNZW1iZXIsIGJ1dCBpcyBmb2N1c2VkIG9uIGlkZW50aWZ5aW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ3JvdXAuIHZhbHVlTWVtYmVyIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiBwb3B1bGF0aW5nIGEgTGlzdEJveCBmcm9tIGEgSlNPTiBkYXRhIHNvdXJjZSwgYXMgaXQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHdoaWNoIHByb3BlcnR5IG9mIHlvdXIgZGF0YSBvYmplY3RzIHNob3VsZCBzZXJ2ZSBhcyB0aGUgdW5pcXVlIHZhbHVlIGZvciBlYWNoIGl0ZW0gaW4gdGhlIExpc3RCb3guICovXG5cdEBJbnB1dCgpXG5cdGdldCB2YWx1ZU1lbWJlcigpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQudmFsdWVNZW1iZXIgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHZhbHVlTWVtYmVyKHZhbHVlOiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZUVsZW1lbnQgPyB0aGlzLm5hdGl2ZUVsZW1lbnQudmFsdWVNZW1iZXIgPSB2YWx1ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciB0aGUgdmVydGljYWwgc2Nyb2xsIGJhciBpcyBkaXNwbGF5ZWQgd2l0aGluIHRoZSBjb250ZW50IGFyZWEsIGFsbG93aW5nIHVzZXJzIHRvIHNjcm9sbCB2ZXJ0aWNhbGx5IHdoZW4gdGhlIGNvbnRlbnQgZXh0ZW5kcyBiZXlvbmQgdGhlIHZpc2libGUgcmVnaW9uLiAqL1xuXHRASW5wdXQoKVxuXHRnZXQgdmVydGljYWxTY3JvbGxCYXJWaXNpYmlsaXR5KCk6IFZlcnRpY2FsU2Nyb2xsQmFyVmlzaWJpbGl0eSB8IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC52ZXJ0aWNhbFNjcm9sbEJhclZpc2liaWxpdHkgOiB1bmRlZmluZWQ7XG5cdH1cblx0c2V0IHZlcnRpY2FsU2Nyb2xsQmFyVmlzaWJpbGl0eSh2YWx1ZTogVmVydGljYWxTY3JvbGxCYXJWaXNpYmlsaXR5IHwgc3RyaW5nKSB7XG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnZlcnRpY2FsU2Nyb2xsQmFyVmlzaWJpbGl0eSA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmVzIHdoZXRoZXIgdmlydHVhbGl6YXRpb24gaXMgZW5hYmxlZCBmb3IgdGhlIENvbWJvQm94LiBXaGVuIHZpcnR1YWxpemF0aW9uIGlzIGVuYWJsZWQsIHRoZSBDb21ib0JveCBjYW4gZWZmaWNpZW50bHkgZGlzcGxheSBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mIGl0ZW1z4oCUc3VjaCBhcyBhIG1pbGxpb27igJRieSBvbmx5IHJlbmRlcmluZyB0aGUgdmlzaWJsZSBpdGVtcyBpbiB0aGUgTGlzdEJveCBhbmQgZHluYW1pY2FsbHkgbG9hZGluZyBpdGVtcyBhcyBuZWVkZWQuIFRoaXMgc2lnbmlmaWNhbnRseSBpbXByb3ZlcyBwZXJmb3JtYW5jZSBhbmQgcmVkdWNlcyBtZW1vcnkgdXNhZ2UsIGVzcGVjaWFsbHkgd2l0aCBsYXJnZSBkYXRhIHNldHMuICovXG5cdEBJbnB1dCgpXG5cdGdldCB2aXJ0dWFsaXplZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LnZpcnR1YWxpemVkIDogdW5kZWZpbmVkO1xuXHR9XG5cdHNldCB2aXJ0dWFsaXplZCh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMubmF0aXZlRWxlbWVudCA/IHRoaXMubmF0aXZlRWxlbWVudC52aXJ0dWFsaXplZCA9IHZhbHVlIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuZXZlciB0aGUgdXNlciBjaGFuZ2VzIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgc3VjaCBhcyBoaWdobGlnaHRpbmcgZGlmZmVyZW50IHRleHQgb3Igc2VsZWN0aW5nIGEgbmV3IGl0ZW0gaW4gYSBsaXN0LiBJdCBhbGxvd3MgeW91IHRvIGRldGVjdCBhbmQgcmVzcG9uZCB0byB1cGRhdGVzIGluIHRoZSBzZWxlY3RlZCBjb250ZW50IG9yIG9wdGlvbnMgd2l0aGluIHRoZSBpbnRlcmZhY2UuXG5cdCogIEBwYXJhbSBldmVudC4gVGhlIGN1c3RvbSBldmVudC4gXHRDdXN0b20gZXZlbnQgd2FzIGNyZWF0ZWQgd2l0aDogZXZlbnQuZGV0YWlsKFx0YWRkZWRJdGVtcywgXHRkaXNhYmxlZCwgXHRpbmRleCwgXHRsYWJlbCwgXHRyZW1vdmVkSXRlbXMsIFx0c2VsZWN0ZWQsIFx0dmFsdWUpXG5cdCogICBhZGRlZEl0ZW1zIC0gQW4gYXJyYXkgb2YgTGlzdCBpdGVtcyB0aGF0IGhhdmUgYmVlbiBzZWxlY3RlZC5cblx0KiAgIGRpc2FibGVkIC0gQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlIGl0ZW0gdGhhdCBjYXVzZWQgdGhlIGNoYW5nZSBldmVudCBpcyBkaXNhYmxlZC5cblx0KiAgIGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBMaXN0IGl0ZW0gdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LlxuXHQqICAgbGFiZWwgLSBUaGUgbGFiZWwgb2YgdGhlIExpc3QgaXRlbSB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQuXG5cdCogICByZW1vdmVkSXRlbXMgLSBBbiBhcnJheSBvZiBMaXN0IGl0ZW1zIHRoYXQgaGF2ZSBiZWVuIHVuc2VsZWN0ZWQgYmVmb3JlIHRoZSBldmVudCB3YXMgZmlyZWQuXG5cdCogICBzZWxlY3RlZCAtIFRoZSBzZWxlY3RlZCBzdGF0ZSBvZiB0aGUgTGlzdCBpdGVtIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC4gSWYgYW4gaXRlbSB3YXMgc2VsZWN0ZWQgdGhlIHZhbHVlIHdpbGwgYmUgdHJ1ZSBhbmQgdmljZSB2ZXJzYS5cblx0KiAgIHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBMaXN0IGl0ZW0gdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50LlxuXHQqL1xuXHRAT3V0cHV0KCkgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBkcm9wLWRvd24gbGlzdCBpcyBjbG9zZWQsIGVpdGhlciBieSB0aGUgdXNlciBzZWxlY3RpbmcgYW4gb3B0aW9uIG9yIGJ5IGNsaWNraW5nIG91dHNpZGUgdGhlIG1lbnUuIEl0IG9jY3VycyBhZnRlciB0aGUgZHJvcC1kb3duIG1lbnUgaXMgbm8gbG9uZ2VyIHZpc2libGUsIGFsbG93aW5nIHlvdSB0byBwZXJmb3JtIGFjdGlvbnMgaW4gcmVzcG9uc2UgdG8gdGhlIG1lbnUncyBjbG9zdXJlLlxuXHQqICBAcGFyYW0gZXZlbnQuIFRoZSBjdXN0b20gZXZlbnQuIFx0Ki9cblx0QE91dHB1dCgpIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCByaWdodCBiZWZvcmUgdGhlIGRyb3Bkb3duIGxpc3QgaXMgYWJvdXQgdG8gY2xvc2UsIHByb3ZpZGluZyBhbiBvcHBvcnR1bml0eSB0byBpbnRlcnZlbmUuIEJ5IGNhbGxpbmcgZXZlbnQucHJldmVudERlZmF1bHQoKSB3aXRoaW4gdGhlIGV2ZW50IGhhbmRsZXIsIHlvdSBjYW4gY2FuY2VsIHRoZSBjbG9zaW5nIG9wZXJhdGlvbiwgYWxsb3dpbmcgeW91IHRvIHBlcmZvcm0gdmFsaWRhdGlvbiwgZGlzcGxheSBhIGNvbmZpcm1hdGlvbiBkaWFsb2csIG9yIGV4ZWN1dGUgY3VzdG9tIGxvZ2ljIGJlZm9yZSB0aGUgZHJvcGRvd24gaXMgY2xvc2VkLlxuXHQqICBAcGFyYW0gZXZlbnQuIFRoZSBjdXN0b20gZXZlbnQuIFx0Ki9cblx0QE91dHB1dCgpIG9uQ2xvc2luZzogRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKiogQGRlc2NyaXB0aW9uIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW5ldmVyIGEgdXNlciBjbGlja3Mgb24gYSBzcGVjaWZpYyBpdGVtLCBhbGxvd2luZyB5b3UgdG8gZXhlY3V0ZSBjdXN0b20gYWN0aW9ucyBpbiByZXNwb25zZSB0byB0aGUgdXNlcidzIHNlbGVjdGlvbi4gVGhlIGV2ZW50IHByb3ZpZGVzIGNvbnRleHQgYWJvdXQgdGhlIGNsaWNrZWQgaXRlbSwgZW5hYmxpbmcgeW91IHRvIGFjY2VzcyBpdHMgcHJvcGVydGllcyBvciBwZXJmb3JtIHJlbGF0ZWQgdXBkYXRlcyB3aXRoaW4geW91ciBhcHBsaWNhdGlvbi5cblx0KiAgQHBhcmFtIGV2ZW50LiBUaGUgY3VzdG9tIGV2ZW50LiBcdEN1c3RvbSBldmVudCB3YXMgY3JlYXRlZCB3aXRoOiBldmVudC5kZXRhaWwoXHRkaXNhYmxlZCwgXHRpbmRleCwgXHRsYWJlbCwgXHRzZWxlY3RlZCwgXHR2YWx1ZSlcblx0KiAgIGRpc2FibGVkIC0gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIExpc3QgaXRlbSB0aGF0IHdhcyBjbGlja2VkIGlzIGRpc2FibGVkIG9yIG5vdC5cblx0KiAgIGluZGV4IC0gSW5kaWNhdGVzIHRoZSBpbmRleCBvZiB0aGUgTGlzdCBpdGVtIHRoYXQgd2FzIGNsaWNrZWQuXG5cdCogICBsYWJlbCAtIFRoZSBsYWJlbCBvZiB0aGUgTGlzdCBpdGVtIHRoYXQgd2FzIGNsaWNrZWQuXG5cdCogICBzZWxlY3RlZCAtIEluZGljYXRlcyB3aGV0aGVyIHRoZSBMaXN0IGl0ZW0gdGhhdCB3YXMgY2xpY2tlZCBpcyBzZWxlY3RlZCBvciBub3QuXG5cdCogICB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0aGUgTGlzdCBpdGVtIHRoYXQgd2FzIGNsaWNrZWQuXG5cdCovXG5cdEBPdXRwdXQoKSBvbkl0ZW1DbGljazogRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKiogQGRlc2NyaXB0aW9uIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW5ldmVyIHRoZSBkcm9wZG93biBsaXN0IGJlY29tZXMgdmlzaWJsZSB0byB0aGUgdXNlciwgc3VjaCBhcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvciBpbnRlcmFjdHMgd2l0aCB0aGUgY29udHJvbCB0byBleHBhbmQgYW5kIGRpc3BsYXkgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMuIFVzZSB0aGlzIGV2ZW50IHRvIGV4ZWN1dGUgY3VzdG9tIGxvZ2ljIHdoZW4gdGhlIGRyb3Bkb3duIG1lbnUgaXMgb3BlbmVkLlxuXHQqICBAcGFyYW0gZXZlbnQuIFRoZSBjdXN0b20gZXZlbnQuIFx0Ki9cblx0QE91dHB1dCgpIG9uT3BlbjogRXZlbnRFbWl0dGVyPEN1c3RvbUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKiogQGRlc2NyaXB0aW9uIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZHJvcGRvd24gbGlzdCBpcyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuIFdpdGhpbiB0aGUgZXZlbnQgaGFuZGxlciwgeW91IGNhbiBwcmV2ZW50IHRoZSBkcm9wZG93biBmcm9tIG9wZW5pbmcgYnkgY2FsbGluZyBldmVudC5wcmV2ZW50RGVmYXVsdCgpLiBUaGlzIGFsbG93cyB5b3UgdG8gaW1wbGVtZW50IGN1c3RvbSBsb2dpYyB0byBjb25kaXRpb25hbGx5IGFsbG93IG9yIGJsb2NrIHRoZSBvcGVuaW5nIG9mIHRoZSBkcm9wZG93biwgc3VjaCBhcyB2YWxpZGF0aW5nIGNvbmRpdGlvbnMgb3IgbWFuYWdpbmcgdXNlciBwZXJtaXNzaW9ucyBiZWZvcmUgdGhlIGxpc3QgaXMgc2hvd24uXG5cdCogIEBwYXJhbSBldmVudC4gVGhlIGN1c3RvbSBldmVudC4gXHQqL1xuXHRAT3V0cHV0KCkgb25PcGVuaW5nOiBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKiBAZGVzY3JpcHRpb24gVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBpbml0aWF0ZXMgdGhlIHJlc2l6aW5nIGFjdGlvbiBvbiB0aGUgZHJvcGRvd24gY29tcG9uZW50LCBzdWNoIGFzIGNsaWNraW5nIGFuZCBkcmFnZ2luZyBhIHJlc2l6ZSBoYW5kbGUuIEl0IGFsbG93cyBkZXZlbG9wZXJzIHRvIGRldGVjdCB0aGUgZXhhY3QgbW9tZW50IHdoZW4gYSByZXNpemUgb3BlcmF0aW9uIG9uIHRoZSBkcm9wZG93biBiZWdpbnMuXG5cdCogIEBwYXJhbSBldmVudC4gVGhlIGN1c3RvbSBldmVudC4gXHRDdXN0b20gZXZlbnQgd2FzIGNyZWF0ZWQgd2l0aDogZXZlbnQuZGV0YWlsKFx0cG9zaXRpb24pXG5cdCogICBwb3NpdGlvbiAtIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXJyZW50IGxlZnQgYW5kIHRvcCBwb3NpdGlvbnMgb2YgdGhlIGRyb3AgZG93bi5cblx0Ki9cblx0QE91dHB1dCgpIG9uUmVzaXplU3RhcnQ6IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCBhZnRlciB0aGUgdXNlciBoYXMgY29tcGxldGVkIHJlc2l6aW5nIHRoZSBkcm9wZG93biBtZW51LCBzaWduYWxpbmcgdGhhdCB0aGUgcmVzaXppbmcgYWN0aW9uIGhhcyBlbmRlZCBhbmQgdGhlIG5ldyBkaW1lbnNpb25zIGhhdmUgYmVlbiBzZXQuXG5cdCogIEBwYXJhbSBldmVudC4gVGhlIGN1c3RvbSBldmVudC4gXHRDdXN0b20gZXZlbnQgd2FzIGNyZWF0ZWQgd2l0aDogZXZlbnQuZGV0YWlsKFx0cG9zaXRpb24pXG5cdCogICBwb3NpdGlvbiAtIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBjdXJyZW50IGxlZnQgYW5kIHRvcCBwb3NpdGlvbnMgb2YgdGhlIGRyb3AgZG93bi5cblx0Ki9cblx0QE91dHB1dCgpIG9uUmVzaXplRW5kOiBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKiBAZGVzY3JpcHRpb24gVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBzY3JvbGxzIHRvIHRoZSBib3R0b20gb2YgdGhlIGRyb3Bkb3duIGxpc3QsIGluZGljYXRpbmcgdGhhdCBhbGwgYXZhaWxhYmxlIG9wdGlvbnMgaGF2ZSBiZWVuIGRpc3BsYXllZC4gSXQgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IHdoZW4gYWRkaXRpb25hbCBkYXRhIHNob3VsZCBiZSBsb2FkZWQgb3Igd2hlbiBubyBmdXJ0aGVyIG9wdGlvbnMgcmVtYWluIGluIHRoZSBkcm9wZG93bi5cblx0KiAgQHBhcmFtIGV2ZW50LiBUaGUgY3VzdG9tIGV2ZW50LiBcdCovXG5cdEBPdXRwdXQoKSBvblNjcm9sbEJvdHRvbVJlYWNoZWQ6IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIHNjcm9sbHMgdG8gdGhlIHZlcnkgYmVnaW5uaW5nICh0b3ApIG9mIHRoZSBkcm9wZG93biBsaXN0LCBpbmRpY2F0aW5nIHRoYXQgbm8gbW9yZSBpdGVtcyBhcmUgYXZhaWxhYmxlIGFib3ZlIHRoZSBjdXJyZW50IHZpZXcuXG5cdCogIEBwYXJhbSBldmVudC4gVGhlIGN1c3RvbSBldmVudC4gXHQqL1xuXHRAT3V0cHV0KCkgb25TY3JvbGxUb3BSZWFjaGVkOiBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKiBAZGVzY3JpcHRpb24gVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiBhIHRva2VuIGl0ZW0gKGFsc28ga25vd24gYXMgYSAncGlsbCcpIGlzIGNsaWNrZWQgYnkgdGhlIHVzZXIuIEJ5IGhhbmRsaW5nIHRoaXMgZXZlbnQsIGRldmVsb3BlcnMgaGF2ZSB0aGUgb3Bwb3J0dW5pdHkgdG8gaW50ZXJjZXB0IHRoZSBkZWZhdWx0IGFjdGlvbiB0aGF0IHdvdWxkIG5vcm1hbGx5IG9jY3VyIHdoZW4gdGhlIHRva2VuIGlzIGNsaWNrZWTigJRzdWNoIGFzIG9wZW5pbmcgYSBkcm9wZG93biBvciBwZXJmb3JtaW5nIGFub3RoZXIgcmVsYXRlZCBvcGVyYXRpb24uIFRvIHByZXZlbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZnJvbSBleGVjdXRpbmcsIGNhbGwgZXZlbnQucHJldmVudERlZmF1bHQoKSB3aXRoaW4geW91ciBldmVudCBoYW5kbGVyIGZ1bmN0aW9uLlwiXG5cdCogIEBwYXJhbSBldmVudC4gVGhlIGN1c3RvbSBldmVudC4gXHQqL1xuXHRAT3V0cHV0KCkgb25Ub2tlbkNsaWNrOiBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKiBAZGVzY3JpcHRpb24gQXBwZW5kcyBhIG5ldyBMaXN0SXRlbSBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIGV4aXN0aW5nIGxpc3Qgb2YgaXRlbXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyIGVsZW1lbnQsIHRoZXJlYnkgdXBkYXRpbmcgdGhlIGxpc3QgdG8gaW5jbHVkZSB0aGUgbmV3bHkgYWRkZWQgaXRlbSBhcyBpdHMgbGFzdCBlbnRyeS4gXG5cdCogQHBhcmFtIHtOb2RlfSBub2RlLiBBIExpc3RJdGVtIGVsZW1lbnQgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIGl0ZW1zIGFzIHRoZSBsYXN0IGl0ZW0uXG5cdCogQHJldHVybnMge05vZGV9XG4gICovXG5cdHB1YmxpYyBhc3luYyBhcHBlbmRDaGlsZChub2RlKTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBnZXRSZXN1bHRPblJlbmRlciA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQud2hlblJlbmRlcmVkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRSZXN1bHRPblJlbmRlcigpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG5cdHB1YmxpYyBhcHBlbmRDaGlsZFN5bmMobm9kZSk6IE5vZGUge1xuICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmlzUmVuZGVyZWQpIHtcbiBcdCAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYW5kIGFwcGVuZHMgb25lIG9yIG1vcmUgbmV3IGl0ZW1zIHRvIHRoZSBjb2xsZWN0aW9uIG9yIGxpc3QuIFxuXHQqIEBwYXJhbSB7YW55fSBpdGVtLiBEZXNjcmliZXMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW0gdGhhdCB3aWxsIGJlIGluc2VydGVkLiBZb3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBpdGVtcy5cblx0Ki9cbiAgICBwdWJsaWMgYWRkKGl0ZW06IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmlzUmVuZGVyZWQpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5hZGQoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQud2hlblJlbmRlcmVkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIGFsbCBleGlzdGluZyBpdGVtcyBmcm9tIHRoZSBkcm9wZG93biBsaXN0LCByZXN1bHRpbmcgaW4gYW4gZW1wdHkgbGlzdCB3aXRoIG5vIHNlbGVjdGFibGUgb3B0aW9ucyBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuIFxuXHQqL1xuICAgIHB1YmxpYyBjbGVhckl0ZW1zKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmlzUmVuZGVyZWQpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5jbGVhckl0ZW1zKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQud2hlblJlbmRlcmVkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuY2xlYXJJdGVtcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBEZXNlbGVjdHMgYWxsIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcywgZW5zdXJpbmcgdGhhdCBubyBpdGVtcyByZW1haW4gc2VsZWN0ZWQuIFRoaXMgYWN0aW9uIGNsZWFycyBhbnkgZXhpc3Rpbmcgc2VsZWN0aW9ucyBhbmQgcmVzZXRzIHRoZSBzZWxlY3Rpb24gc3RhdGUuIFxuXHQqL1xuICAgIHB1YmxpYyBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBDbG9zZXMgdGhlIGN1cnJlbnRseSBvcGVuIGRyb3AtZG93biBsaXN0LCBoaWRpbmcgYWxsIGF2YWlsYWJsZSBvcHRpb25zIGZyb20gdmlldyBhbmQgcmV0dXJuaW5nIHRoZSBjb21wb25lbnQgdG8gaXRzIGNvbGxhcHNlZCBzdGF0ZS4gVGhpcyBhY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBkcm9wLWRvd24gbWVudSBpcyBubyBsb25nZXIgdmlzaWJsZSB0byB0aGUgdXNlci4gXG5cdCovXG4gICAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmlzUmVuZGVyZWQpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmNsb3NlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIEluaXRpYXRlcyBhIGRhdGEgYmluZGluZyBwcm9jZXNzLCBjb25uZWN0aW5nIFVJIGNvbXBvbmVudHMgdG8gdGhlIHVuZGVybHlpbmcgZGF0YSBzb3VyY2UuIFRoaXMgbWV0aG9kIHJlZnJlc2hlcyB0aGUgZGF0YSBzb3VyY2UsIGVuc3VyaW5nIHRoYXQgYW55IGNoYW5nZXMgbWFkZSB0byB0aGUgZGF0YSBhcmUgcmVmbGVjdGVkIGluIHRoZSB1c2VyIGludGVyZmFjZS4gSXQgY2FuIGJlIHVzZWQgdG8gdXBkYXRlIGRpc3BsYXllZCBpbmZvcm1hdGlvbiBhZnRlciBtb2RpZnlpbmcsIGFkZGluZywgb3IgZGVsZXRpbmcgZGF0YS4gXG5cdCovXG4gICAgcHVibGljIGRhdGFCaW5kKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmlzUmVuZGVyZWQpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5kYXRhQmluZCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmRhdGFCaW5kKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFNjcm9sbHMgdGhlIHRhcmdldCBpdGVtIGludG8gdmlldyB3aXRoaW4gaXRzIGNvbnRhaW5lciwgYXV0b21hdGljYWxseSBhZGp1c3RpbmcgdGhlIHNjcm9sbCBwb3NpdGlvbiBhcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnRpcmUgaXRlbSBpcyBmdWxseSB2aXNpYmxlIHRvIHRoZSB1c2VyLiBcblx0KiBAcGFyYW0ge0hUTUxFbGVtZW50IHwgc3RyaW5nfSBpdGVtLiBBIGxpc3QgaXRlbSBvciB2YWx1ZSBvZiB0aGUgZGVzaXJlZCBpdGVtIHRvIGJlIHZpc2libGUuXG5cdCovXG4gICAgcHVibGljIGVuc3VyZVZpc2libGUoaXRlbTogSFRNTEVsZW1lbnQgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuZW5zdXJlVmlzaWJsZShpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5lbnN1cmVWaXNpYmxlKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIGEgc3BlY2lmaWMgaXRlbSBpbnN0YW5jZSBmcm9tIHRoZSBkcm9wRG93biBsaXN0LCBhbGxvd2luZyB5b3UgdG8gYWNjZXNzIHRoZSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIG9mIHRoZSBzZWxlY3RlZCBsaXN0IGl0ZW0uIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGl0ZW0sIHN1Y2ggYXMgaXRzIHZhbHVlLCBsYWJlbCwgb3IgaW5kZXggd2l0aGluIHRoZSBkcm9wRG93bi4gXG5cdCogQHBhcmFtIHtzdHJpbmd9IHZhbHVlLiBUaGUgdmFsdWUgb2YgYW4gaXRlbSBmcm9tIHRoZSBkcm9wIGRvd24gbGlzdC5cblx0KiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICovXG5cdHB1YmxpYyBhc3luYyBnZXRJdGVtKHZhbHVlKTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBnZXRSZXN1bHRPblJlbmRlciA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQud2hlblJlbmRlcmVkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5uYXRpdmVFbGVtZW50LmdldEl0ZW0odmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZXRSZXN1bHRPblJlbmRlcigpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG5cdHB1YmxpYyBnZXRJdGVtU3luYyh2YWx1ZSk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkKSB7XG4gXHQgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5nZXRJdGVtKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBJbnNlcnRzIGEgbmV3IGl0ZW0gaW50byB0aGUgYXJyYXkgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBwb3NpdGlvbiwgc2hpZnRpbmcgZXhpc3RpbmcgZWxlbWVudHMgdG8gdGhlIHJpZ2h0IHRvIGFjY29tbW9kYXRlIHRoZSBuZXcgaXRlbS4gXG5cdCogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uLiBUaGUgcG9zaXRpb24gd2hlcmUgdGhlIGl0ZW0gbXVzdCBiZSBpbnNlcnRlZC5cblx0KiBAcGFyYW0ge2FueX0gaXRlbS4gRGVzY3JpYmVzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBpdGVtIHRoYXQgd2lsbCBiZSBpbnNlcnRlZC4gWW91IGNhbiBhbHNvIHBhc3MgYW4gYXJyYXkgb2YgaXRlbXMuXG5cdCovXG4gICAgcHVibGljIGluc2VydChwb3NpdGlvbjogbnVtYmVyLCBpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuaW5zZXJ0KHBvc2l0aW9uLCBpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5pbnNlcnQocG9zaXRpb24sIGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBJbnNlcnRzIGEgbmV3IExpc3RJdGVtIGVsZW1lbnQgZGlyZWN0bHkgYmVmb3JlIGEgc3BlY2lmaWVkIGV4aXN0aW5nIExpc3RJdGVtIHdpdGhpbiB0aGUgbGlzdCwgcHJlc2VydmluZyB0aGUgb3JkZXIgb2YgdGhlIHJlbWFpbmluZyBpdGVtcy4gXG5cdCogQHBhcmFtIHtOb2RlfSBub2RlLiBBIExpc3RJdGVtIGVsZW1lbnQgdGhhdCBzaG91bGQgYmUgYWRkZWQgYmVmb3JlIHRoZSByZWZlcmVuY2VJdGVtIGluIHRoZSBsaXN0LlxuXHQqIEBwYXJhbSB7Tm9kZSB8IG51bGx9IHJlZmVyZW5jZU5vZGUuIEEgTGlzdEl0ZW0gZWxlbWVudCB0aGF0IGFjdHMgYXMgdGhlIHJlZmVyZW5jZSBpdGVtIGJlZm9yZSB3aGljaCBhIG5ldyBpdGVtIGlzIGFib3V0IHRvIGJlIGluc2VydGVkLiBUaGUgcmVmZXJlbmNlTm9kZSBtdXN0IGJlIGluIHRoZSBzYW1lIGxpc3QgYXMgdGhlIG5vZGUuXG5cdCogQHJldHVybnMge05vZGV9XG4gICovXG5cdHB1YmxpYyBhc3luYyBpbnNlcnRCZWZvcmUobm9kZSwgcmVmZXJlbmNlTm9kZSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgZ2V0UmVzdWx0T25SZW5kZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubmF0aXZlRWxlbWVudC5pbnNlcnRCZWZvcmUobm9kZSwgcmVmZXJlbmNlTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFJlc3VsdE9uUmVuZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cblx0cHVibGljIGluc2VydEJlZm9yZVN5bmMobm9kZSwgcmVmZXJlbmNlTm9kZSk6IE5vZGUge1xuICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50LmlzUmVuZGVyZWQpIHtcbiBcdCAgICAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50Lmluc2VydEJlZm9yZShub2RlLCByZWZlcmVuY2VOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBEaXNwbGF5cyBhbmQgZXhwYW5kcyB0aGUgZHJvcC1kb3duIGxpc3QsIG1ha2luZyBhbGwgYXZhaWxhYmxlIG9wdGlvbnMgdmlzaWJsZSBmb3Igc2VsZWN0aW9uLiBcblx0Ki9cbiAgICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQub3BlbigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50Lm9wZW4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyB0aGUgaXRlbSBsb2NhdGVkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggb3IgcG9zaXRpb24gd2l0aGluIGEgY29sbGVjdGlvbiAoc3VjaCBhcyBhbiBhcnJheSBvciBsaXN0KS4gQWZ0ZXIgcmVtb3ZhbCwgdGhlIGNvbGxlY3Rpb24gaXMgdXBkYXRlZCBzbyB0aGF0IHN1YnNlcXVlbnQgaXRlbXMgc2hpZnQgdG8gZmlsbCB0aGUgZ2FwLCBlbnN1cmluZyBjb250aWd1b3VzIGluZGV4aW5nLiBcblx0KiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb24uIFRoZSBwb3NpdGlvbiBvZiB0aGUgcmVtb3ZlZCBpdGVtLlxuXHQqL1xuICAgIHB1YmxpYyByZW1vdmVBdChwb3NpdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQuaXNSZW5kZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUF0KHBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5yZW1vdmVBdChwb3NpdGlvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuXHQvKiogQGRlc2NyaXB0aW9uIFJlbW92ZXMgYSBzcGVjaWZpZWQgTGlzdEl0ZW0gZnJvbSB0aGUgY29sbGVjdGlvbiBvZiBpdGVtcyBjb250YWluZWQgd2l0aGluIHRoZSBnaXZlbiBlbGVtZW50LCB1cGRhdGluZyB0aGUgbGlzdCB0byByZWZsZWN0IHRoZSBkZWxldGlvbi4gXG5cdCogQHBhcmFtIHtOb2RlfSBub2RlLiBBIExpc3RJdGVtIGVsZW1lbnQgdGhhdCBpcyBwYXJ0IG9mIHRoZSBsaXN0IG9mIGl0ZW1zIGluc2lkZSB0aGUgZWxlbWVudC5cblx0KiBAcmV0dXJucyB7Tm9kZX1cbiAgKi9cblx0cHVibGljIGFzeW5jIHJlbW92ZUNoaWxkKG5vZGUpOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IGdldFJlc3VsdE9uUmVuZGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC53aGVuUmVuZGVyZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldFJlc3VsdE9uUmVuZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cblx0cHVibGljIHJlbW92ZUNoaWxkU3luYyhub2RlKTogTm9kZSB7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQuaXNSZW5kZXJlZCkge1xuIFx0ICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gU2VsZWN0cyBhIHNwZWNpZmllZCBpdGVtIGZyb20gdGhlIGRyb3Bkb3duIGxpc3QsIGFsbG93aW5nIHVzZXJzIHRvIGNob29zZSBvbmUgb3B0aW9uIGZyb20gdGhlIGF2YWlsYWJsZSBjaG9pY2VzLiBUaGlzIGFjdGlvbiB1cGRhdGVzIHRoZSBkcm9wZG93buKAmXMgY3VycmVudCBzZWxlY3Rpb24gYW5kIGNhbiB0cmlnZ2VyIGFueSBhc3NvY2lhdGVkIGV2ZW50IGhhbmRsZXJzIG9yIGNoYW5nZXMgaW4gdGhlIGFwcGxpY2F0aW9u4oCZcyBzdGF0ZS4gXG5cdCogQHBhcmFtIHtzdHJpbmcgfCBIVE1MRWxlbWVudH0gaXRlbS4gQSBzdHJpbmcsIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhlIGl0ZW0gb3IgYW4gSFRNTCBFbGVtZW50IHJlZmVyZW5jaW5nIGFuIGl0ZW0gZnJvbSB0aGUgbGlzdFxuXHQqL1xuICAgIHB1YmxpYyBzZWxlY3QoaXRlbTogc3RyaW5nIHwgSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC5pc1JlbmRlcmVkKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuc2VsZWN0KGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG5cdC8qKiBAZGVzY3JpcHRpb24gRGVzZWxlY3RzIGEgc3BlY2lmaWVkIGl0ZW0gZnJvbSB0aGUgZHJvcGRvd24gbGlzdCwgcmVtb3ZpbmcgaXRzIHNlbGVjdGVkIHN0YXRlIGFuZCByZXZlcnRpbmcgdGhlIGRyb3Bkb3duIHRvIHJlZmxlY3QgdGhhdCB0aGUgaXRlbSBpcyBubyBsb25nZXIgY2hvc2VuIGJ5IHRoZSB1c2VyLiBcblx0KiBAcGFyYW0ge3N0cmluZyB8IEhUTUxFbGVtZW50fSBpdGVtLiBBIHN0cmluZywgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGUgaXRlbSBvciBhbiBIVE1MIEVsZW1lbnQgcmVmZXJlbmNpbmcgYW4gaXRlbSBmcm9tIHRoZSBsaXN0XG5cdCovXG4gICAgcHVibGljIHVuc2VsZWN0KGl0ZW06IHN0cmluZyB8IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQuaXNSZW5kZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnVuc2VsZWN0KGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnVuc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBVcGRhdGVzIHRoZSBzZWxlY3RlZCBpdGVtIGluIHRoZSBkcm9wRG93biBsaXN0IHdpdGggbmV3IGRhdGEgb3IgYXR0cmlidXRlcy4gVGhpcyBhY3Rpb24gbW9kaWZpZXMgdGhlIGV4aXN0aW5nIGl0ZW0gcmF0aGVyIHRoYW4gYWRkaW5nIG9yIHJlbW92aW5nIGl0ZW1zIGZyb20gdGhlIGxpc3QsIGVuc3VyaW5nIHRoYXQgYW55IGNoYW5nZXMgYXJlIHJlZmxlY3RlZCBpbW1lZGlhdGVseSBpbiB0aGUgdXNlciBpbnRlcmZhY2UuIFNwZWNpZnkgdGhlIHRhcmdldCBpdGVtIGFuZCB0aGUgdXBkYXRlZCB2YWx1ZXMgdG8gY29tcGxldGUgdGhlIG9wZXJhdGlvbi4gXG5cdCogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uLiBUaGUgcG9zaXRpb24gd2hlcmUgdGhlIGl0ZW0gbXVzdCBiZSB1cGRhdGVkLlxuXHQqIEBwYXJhbSB7YW55fSB2YWx1ZS4gVGhlIHZhbHVlIG9mIHRoZSB1cGRhdGVkIGl0ZW0uXG5cdCovXG4gICAgcHVibGljIHVwZGF0ZShwb3NpdGlvbjogbnVtYmVyLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQuaXNSZW5kZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnVwZGF0ZShwb3NpdGlvbiwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnVwZGF0ZShwb3NpdGlvbiwgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXHRnZXQgaXNSZW5kZXJlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50ID8gdGhpcy5uYXRpdmVFbGVtZW50LmlzUmVuZGVyZWQgOiBmYWxzZTtcblx0fVxuXG5cdG5nT25Jbml0KCkge1xuXHR9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICBjb25zdCB0aGF0ID0gdGhpcztcblxuICAgICAgdGhhdC5vbkNyZWF0ZS5lbWl0KHRoYXQubmF0aXZlRWxlbWVudCk7XG5cblx0XHRpZiAoU21hcnQpIFNtYXJ0LlJlbmRlcigpO1xuXG5cdFx0dGhpcy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3NtYXJ0LWFuZ3VsYXInKTtcblxuXHRcdGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQud2hlblJlbmRlcmVkKSB0aGlzLm5hdGl2ZUVsZW1lbnQud2hlblJlbmRlcmVkKCgpID0+IHsgdGhhdC5vblJlYWR5LmVtaXQodGhhdC5uYXRpdmVFbGVtZW50KTsgfSk7XG5cdFx0dGhpcy5saXN0ZW4oKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdHRoaXMudW5saXN0ZW4oKTtcblx0fVxuXG5cdF9pbml0aWFsQ2hhbmdlID0gdHJ1ZTsgXG5cblx0Z2V0IG5nVmFsdWUoKTogYW55IHtcblx0XHRpZiAoIXRoaXMubmF0aXZlRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZXMgJiYgdGhpcy5zZWxlY3RlZFZhbHVlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSAxID8gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGVkVmFsdWVzWzBdIDogdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGVkVmFsdWVzO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID8gaW5wdXQudmFsdWUgOiBudWxsO1xuXHR9XG5cblx0c2V0IG5nVmFsdWUodmFsdWU6IGFueSkge1xuXHRcdGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcblx0XHQgICAgdGhpcy53cml0ZVZhbHVlKHZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHR3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlO1xuXG5cdFx0dGhhdC5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7XG4gICAgICAgICAgICB0aGF0Lm5hdGl2ZUVsZW1lbnQuJC5saXN0Qm94LmlzSW5pdGlhbGl6ZWQgPSB0aGF0Ll9pbml0aWFsQ2hhbmdlID8gZmFsc2UgOiB0cnVlO1xuXHRcdFx0dGhhdC5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9ybWFsaXplZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKGN1cnJlbnRWYWx1ZTogYW55KSA9PiB0aGlzLnNlbGVjdChjdXJyZW50VmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuc2VsZWN0KG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhhdC5uYXRpdmVFbGVtZW50LiQubGlzdEJveC5pc0luaXRpYWxpemVkID0gdHJ1ZTtcblx0XHRcdHRoYXQubmF0aXZlRWxlbWVudC5fYXBwbHlTZWxlY3Rpb24oKTtcblx0XHRcdGlmICh0aGF0Ll9pbml0aWFsQ2hhbmdlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGF0LnNlbGVjdGVkVmFsdWVzICYmIHRoYXQuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGF0Ll9vbkNoYW5nZSh0aGF0LnNlbGVjdGVkVmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhhdC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG5cdFx0XHRcdFx0bGV0IGlucHV0VmFsdWU6IGFueSA9IGlucHV0LnZhbHVlO1xuXHRcdFx0XHRcdGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdGlucHV0VmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG4gICAgICAgICAgICAgICAgICAgIHRoYXQuX29uQ2hhbmdlKCh0aGF0LnNlbGVjdGVkVmFsdWVzICYmIHRoYXQuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID4gMCkgPyB0aGF0LnNlbGVjdGVkVmFsdWVzWzBdIDogKGlucHV0ID8gaW5wdXRWYWx1ZSA6IG51bGwpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cdFx0fSk7XG5cdH1cblxuXHRyZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcblx0XHR0aGlzLl9vbkNoYW5nZSA9IGZuO1xuXHR9XG5cblx0cmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuXHRcdHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuXHR9XG5cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXHRcdGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5uYXRpdmVFbGVtZW50LmlzUmVuZGVyZWQpIHtcblx0XHRcdGZvciAoY29uc3QgcHJvcE5hbWUgaW4gY2hhbmdlcykge1xuXHRcdFx0XHRpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcblx0XHRcdFx0XHR0aGlzLm5hdGl2ZUVsZW1lbnRbcHJvcE5hbWVdID0gY2hhbmdlc1twcm9wTmFtZV0uY3VycmVudFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBBZGQgZXZlbnQgbGlzdGVuZXJzLiAqL1xuXHRwcml2YXRlIGxpc3RlbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG5cdFx0dGhhdC5ldmVudEhhbmRsZXJzWydjaGFuZ2VIYW5kbGVyJ10gPSAoZXZlbnQ6IEN1c3RvbUV2ZW50KSA9PiB7IHRoYXQub25DaGFuZ2UuZW1pdChldmVudCk7IH1cblx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhhdC5ldmVudEhhbmRsZXJzWydjaGFuZ2VIYW5kbGVyJ10pO1xuXG5cdFx0dGhhdC5ldmVudEhhbmRsZXJzWydjbG9zZUhhbmRsZXInXSA9IChldmVudDogQ3VzdG9tRXZlbnQpID0+IHsgdGhhdC5vbkNsb3NlLmVtaXQoZXZlbnQpOyB9XG5cdFx0dGhhdC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgdGhhdC5ldmVudEhhbmRsZXJzWydjbG9zZUhhbmRsZXInXSk7XG5cblx0XHR0aGF0LmV2ZW50SGFuZGxlcnNbJ2Nsb3NpbmdIYW5kbGVyJ10gPSAoZXZlbnQ6IEN1c3RvbUV2ZW50KSA9PiB7IHRoYXQub25DbG9zaW5nLmVtaXQoZXZlbnQpOyB9XG5cdFx0dGhhdC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Nsb3NpbmcnLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ2Nsb3NpbmdIYW5kbGVyJ10pO1xuXG5cdFx0dGhhdC5ldmVudEhhbmRsZXJzWydpdGVtQ2xpY2tIYW5kbGVyJ10gPSAoZXZlbnQ6IEN1c3RvbUV2ZW50KSA9PiB7IHRoYXQub25JdGVtQ2xpY2suZW1pdChldmVudCk7IH1cblx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaXRlbUNsaWNrJywgdGhhdC5ldmVudEhhbmRsZXJzWydpdGVtQ2xpY2tIYW5kbGVyJ10pO1xuXG5cdFx0dGhhdC5ldmVudEhhbmRsZXJzWydvcGVuSGFuZGxlciddID0gKGV2ZW50OiBDdXN0b21FdmVudCkgPT4geyB0aGF0Lm9uT3Blbi5lbWl0KGV2ZW50KTsgfVxuXHRcdHRoYXQubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgdGhhdC5ldmVudEhhbmRsZXJzWydvcGVuSGFuZGxlciddKTtcblxuXHRcdHRoYXQuZXZlbnRIYW5kbGVyc1snb3BlbmluZ0hhbmRsZXInXSA9IChldmVudDogQ3VzdG9tRXZlbnQpID0+IHsgdGhhdC5vbk9wZW5pbmcuZW1pdChldmVudCk7IH1cblx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignb3BlbmluZycsIHRoYXQuZXZlbnRIYW5kbGVyc1snb3BlbmluZ0hhbmRsZXInXSk7XG5cblx0XHR0aGF0LmV2ZW50SGFuZGxlcnNbJ3Jlc2l6ZVN0YXJ0SGFuZGxlciddID0gKGV2ZW50OiBDdXN0b21FdmVudCkgPT4geyB0aGF0Lm9uUmVzaXplU3RhcnQuZW1pdChldmVudCk7IH1cblx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplU3RhcnQnLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ3Jlc2l6ZVN0YXJ0SGFuZGxlciddKTtcblxuXHRcdHRoYXQuZXZlbnRIYW5kbGVyc1sncmVzaXplRW5kSGFuZGxlciddID0gKGV2ZW50OiBDdXN0b21FdmVudCkgPT4geyB0aGF0Lm9uUmVzaXplRW5kLmVtaXQoZXZlbnQpOyB9XG5cdFx0dGhhdC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZUVuZCcsIHRoYXQuZXZlbnRIYW5kbGVyc1sncmVzaXplRW5kSGFuZGxlciddKTtcblxuXHRcdHRoYXQuZXZlbnRIYW5kbGVyc1snc2Nyb2xsQm90dG9tUmVhY2hlZEhhbmRsZXInXSA9IChldmVudDogQ3VzdG9tRXZlbnQpID0+IHsgdGhhdC5vblNjcm9sbEJvdHRvbVJlYWNoZWQuZW1pdChldmVudCk7IH1cblx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsQm90dG9tUmVhY2hlZCcsIHRoYXQuZXZlbnRIYW5kbGVyc1snc2Nyb2xsQm90dG9tUmVhY2hlZEhhbmRsZXInXSk7XG5cblx0XHR0aGF0LmV2ZW50SGFuZGxlcnNbJ3Njcm9sbFRvcFJlYWNoZWRIYW5kbGVyJ10gPSAoZXZlbnQ6IEN1c3RvbUV2ZW50KSA9PiB7IHRoYXQub25TY3JvbGxUb3BSZWFjaGVkLmVtaXQoZXZlbnQpOyB9XG5cdFx0dGhhdC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbFRvcFJlYWNoZWQnLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ3Njcm9sbFRvcFJlYWNoZWRIYW5kbGVyJ10pO1xuXG5cdFx0dGhhdC5ldmVudEhhbmRsZXJzWyd0b2tlbkNsaWNrSGFuZGxlciddID0gKGV2ZW50OiBDdXN0b21FdmVudCkgPT4geyB0aGF0Lm9uVG9rZW5DbGljay5lbWl0KGV2ZW50KTsgfVxuXHRcdHRoYXQubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b2tlbkNsaWNrJywgdGhhdC5ldmVudEhhbmRsZXJzWyd0b2tlbkNsaWNrSGFuZGxlciddKTtcblxuXG4gICAgICAgIHRoYXQuZXZlbnRIYW5kbGVyc1snY2hhbmdlTW9kZWxIYW5kbGVyJ10gPSAoZXZlbnQ6IEV2ZW50KSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICB0aGF0Ll9pbml0aWFsQ2hhbmdlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGF0Ll9vbkNoYW5nZSh0aGF0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID4gMCA/ICh0aGF0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID4gMSA/IHRoYXQubmF0aXZlRWxlbWVudC5zZWxlY3RlZFZhbHVlcyA6IHRoYXQubmF0aXZlRWxlbWVudC5zZWxlY3RlZFZhbHVlc1swXSkgOiB0aGF0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5ldmVudEhhbmRsZXJzWydibHVyTW9kZWxIYW5kbGVyJ10gPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGF0Ll9vblRvdWNoZWQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhhdC5uYXRpdmVFbGVtZW50LndoZW5SZW5kZXJlZCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhhdC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykpIHtcbiAgICAgICAgICAgICAgICB0aGF0LmV2ZW50SGFuZGxlcnNbJ2tleXVwTW9kZWxIYW5kbGVyJ10gPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoYXQuZXZlbnRIYW5kbGVyc1snY2hhbmdlTW9kZWxIYW5kbGVyJ10oZXZlbnQpOyB9LCA1MCk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRoYXQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhhdC5ldmVudEhhbmRsZXJzWydrZXl1cE1vZGVsSGFuZGxlciddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cdFx0dGhhdC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoYXQuZXZlbnRIYW5kbGVyc1snY2hhbmdlTW9kZWxIYW5kbGVyJ10pO1xuXHRcdHRoYXQubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhhdC5ldmVudEhhbmRsZXJzWydibHVyTW9kZWxIYW5kbGVyJ10pO1xuXHR9XG5cblx0LyoqIEBkZXNjcmlwdGlvbiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzLiAqL1xuXHRwcml2YXRlIHVubGlzdGVuKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0aGF0ID0gdGhpcztcblx0XHRpZiAodGhhdC5ldmVudEhhbmRsZXJzWydjaGFuZ2VIYW5kbGVyJ10pIHtcblx0XHRcdHRoYXQubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ2NoYW5nZUhhbmRsZXInXSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoYXQuZXZlbnRIYW5kbGVyc1snY2xvc2VIYW5kbGVyJ10pIHtcblx0XHRcdHRoYXQubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbG9zZScsIHRoYXQuZXZlbnRIYW5kbGVyc1snY2xvc2VIYW5kbGVyJ10pO1xuXHRcdH1cblxuXHRcdGlmICh0aGF0LmV2ZW50SGFuZGxlcnNbJ2Nsb3NpbmdIYW5kbGVyJ10pIHtcblx0XHRcdHRoYXQubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbG9zaW5nJywgdGhhdC5ldmVudEhhbmRsZXJzWydjbG9zaW5nSGFuZGxlciddKTtcblx0XHR9XG5cblx0XHRpZiAodGhhdC5ldmVudEhhbmRsZXJzWydpdGVtQ2xpY2tIYW5kbGVyJ10pIHtcblx0XHRcdHRoYXQubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdpdGVtQ2xpY2snLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ2l0ZW1DbGlja0hhbmRsZXInXSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoYXQuZXZlbnRIYW5kbGVyc1snb3BlbkhhbmRsZXInXSkge1xuXHRcdFx0dGhhdC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29wZW4nLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ29wZW5IYW5kbGVyJ10pO1xuXHRcdH1cblxuXHRcdGlmICh0aGF0LmV2ZW50SGFuZGxlcnNbJ29wZW5pbmdIYW5kbGVyJ10pIHtcblx0XHRcdHRoYXQubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuaW5nJywgdGhhdC5ldmVudEhhbmRsZXJzWydvcGVuaW5nSGFuZGxlciddKTtcblx0XHR9XG5cblx0XHRpZiAodGhhdC5ldmVudEhhbmRsZXJzWydyZXNpemVTdGFydEhhbmRsZXInXSkge1xuXHRcdFx0dGhhdC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZVN0YXJ0JywgdGhhdC5ldmVudEhhbmRsZXJzWydyZXNpemVTdGFydEhhbmRsZXInXSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoYXQuZXZlbnRIYW5kbGVyc1sncmVzaXplRW5kSGFuZGxlciddKSB7XG5cdFx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplRW5kJywgdGhhdC5ldmVudEhhbmRsZXJzWydyZXNpemVFbmRIYW5kbGVyJ10pO1xuXHRcdH1cblxuXHRcdGlmICh0aGF0LmV2ZW50SGFuZGxlcnNbJ3Njcm9sbEJvdHRvbVJlYWNoZWRIYW5kbGVyJ10pIHtcblx0XHRcdHRoYXQubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGxCb3R0b21SZWFjaGVkJywgdGhhdC5ldmVudEhhbmRsZXJzWydzY3JvbGxCb3R0b21SZWFjaGVkSGFuZGxlciddKTtcblx0XHR9XG5cblx0XHRpZiAodGhhdC5ldmVudEhhbmRsZXJzWydzY3JvbGxUb3BSZWFjaGVkSGFuZGxlciddKSB7XG5cdFx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsVG9wUmVhY2hlZCcsIHRoYXQuZXZlbnRIYW5kbGVyc1snc2Nyb2xsVG9wUmVhY2hlZEhhbmRsZXInXSk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoYXQuZXZlbnRIYW5kbGVyc1sndG9rZW5DbGlja0hhbmRsZXInXSkge1xuXHRcdFx0dGhhdC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rva2VuQ2xpY2snLCB0aGF0LmV2ZW50SGFuZGxlcnNbJ3Rva2VuQ2xpY2tIYW5kbGVyJ10pO1xuXHRcdH1cblxuXHRcdGlmICh0aGF0LmV2ZW50SGFuZGxlcnNbJ2NoYW5nZU1vZGVsSGFuZGxlciddKSB7XG5cdFx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhhdC5ldmVudEhhbmRsZXJzWydjaGFuZ2VNb2RlbEhhbmRsZXInXSk7XG4gICAgICAgICAgICBpZiAodGhhdC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykpIHtcbiAgICAgICAgICAgICAgICAgIHRoYXQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhhdC5ldmVudEhhbmRsZXJzWydrZXl1cE1vZGVsSGFuZGxlciddKTtcbiAgICAgICAgICAgIH1cblx0XHR9XG5cdFx0aWYgKHRoYXQuZXZlbnRIYW5kbGVyc1snYmx1ck1vZGVsSGFuZGxlciddKSB7XG5cdFx0XHR0aGF0Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoYXQuZXZlbnRIYW5kbGVyc1snYmx1ck1vZGVsSGFuZGxlciddKTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==