igniteui-angular 18.2.1 → 18.2.3

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.
Files changed (59) hide show
  1. package/esm2022/lib/combo/combo.common.mjs +8 -17
  2. package/esm2022/lib/combo/combo.component.mjs +3 -3
  3. package/esm2022/lib/data-operations/filtering-expressions-tree.mjs +3 -1
  4. package/esm2022/lib/grids/common/crud.service.mjs +5 -3
  5. package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +14 -1
  6. package/esm2022/lib/grids/grid-base.directive.mjs +29 -31
  7. package/esm2022/lib/grids/grid-navigation.service.mjs +16 -1
  8. package/esm2022/lib/grids/headers/grid-header.component.mjs +2 -11
  9. package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +1 -7
  10. package/esm2022/lib/navigation-drawer/navigation-drawer.component.mjs +3 -3
  11. package/esm2022/lib/services/exporter-common/export-utilities.mjs +4 -2
  12. package/esm2022/lib/slider/slider.component.mjs +4 -4
  13. package/fesm2022/igniteui-angular.mjs +80 -72
  14. package/fesm2022/igniteui-angular.mjs.map +1 -1
  15. package/lib/combo/combo.common.d.ts +1 -3
  16. package/lib/core/styles/components/dialog/_dialog-theme.scss +5 -12
  17. package/lib/core/styles/components/drop-down/_drop-down-theme.scss +10 -4
  18. package/lib/core/styles/components/time-picker/_time-picker-component.scss +0 -4
  19. package/lib/core/styles/components/time-picker/_time-picker-theme.scss +7 -28
  20. package/lib/core/styles/typography/_bootstrap.scss +3 -4
  21. package/lib/core/styles/typography/_fluent.scss +9 -2
  22. package/lib/core/styles/typography/_indigo.scss +0 -1
  23. package/lib/data-operations/filtering-expressions-tree.d.ts +2 -2
  24. package/lib/grids/filtering/excel-style/excel-style-filtering.component.d.ts +1 -0
  25. package/lib/grids/grid-base.directive.d.ts +4 -5
  26. package/lib/grids/grid-navigation.service.d.ts +2 -0
  27. package/lib/grids/headers/grid-header.component.d.ts +0 -1
  28. package/lib/grids/pivot-grid/pivot-grid.component.d.ts +0 -5
  29. package/migrations/migration-collection.json +5 -0
  30. package/migrations/update-18_2_3/changes/theme-changes.json +11 -0
  31. package/migrations/update-18_2_3/index.d.ts +3 -0
  32. package/migrations/update-18_2_3/index.js +18 -0
  33. package/package.json +2 -2
  34. package/styles/igniteui-angular-dark.css +1 -1
  35. package/styles/igniteui-angular.css +1 -1
  36. package/styles/igniteui-bootstrap-dark.css +1 -1
  37. package/styles/igniteui-bootstrap-light.css +1 -1
  38. package/styles/igniteui-dark-green.css +1 -1
  39. package/styles/igniteui-fluent-dark-excel.css +1 -1
  40. package/styles/igniteui-fluent-dark-word.css +1 -1
  41. package/styles/igniteui-fluent-dark.css +1 -1
  42. package/styles/igniteui-fluent-light-excel.css +1 -1
  43. package/styles/igniteui-fluent-light-word.css +1 -1
  44. package/styles/igniteui-fluent-light.css +1 -1
  45. package/styles/igniteui-indigo-dark.css +1 -1
  46. package/styles/igniteui-indigo-light.css +1 -1
  47. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  48. package/styles/maps/igniteui-angular.css.map +1 -1
  49. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  50. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  51. package/styles/maps/igniteui-dark-green.css.map +1 -1
  52. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  53. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  54. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  55. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  56. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  57. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  58. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  59. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -1105,12 +1105,12 @@ export class IgxSliderComponent {
1105
1105
  normalizeByStep(value) {
1106
1106
  if (this.isRange) {
1107
1107
  this._value = {
1108
- lower: value.lower - (value.lower % this.step),
1109
- upper: value.upper - (value.upper % this.step)
1108
+ lower: Math.floor(value.lower / this.step) * this.step,
1109
+ upper: Math.floor(value.upper / this.step) * this.step
1110
1110
  };
1111
1111
  }
1112
1112
  else {
1113
- this._value = value - (value % this.step);
1113
+ this._value = Math.floor(value / this.step) * this.step;
1114
1114
  }
1115
1115
  }
1116
1116
  updateTrack() {
@@ -1254,4 +1254,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
1254
1254
  type: HostListener,
1255
1255
  args: ['pointerup', ['$event']]
1256
1256
  }] } });
1257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQ2lELFNBQVMsRUFBRSxZQUFZLEVBQWMsWUFBWSxFQUNyRyxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBd0MsTUFBTSxFQUFFLFNBQVMsRUFBNEIsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQzlLLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFDSCxhQUFhLEVBQUUsNkJBQTZCLEVBQzVDLDJCQUEyQixFQUFFLDZCQUE2QixFQUFrRCxZQUFZLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQ3BLLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0s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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgTmdab25lLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIGJvb2xlYW5BdHRyaWJ1dGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBhbmltYXRpb25GcmFtZVNjaGVkdWxlciwgZnJvbUV2ZW50LCBpbnRlcnZhbCwgbWVyZ2UsIG5vb3AsIE9ic2VydmFibGUsIFN1YmplY3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRocm90dGxlLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFZGl0b3JQcm92aWRlciB9IGZyb20gJy4uL2NvcmUvZWRpdC1wcm92aWRlcic7XG5pbXBvcnQgeyByZXNpemVPYnNlcnZhYmxlIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hEaXJlY3Rpb25hbGl0eSB9IGZyb20gJy4uL3NlcnZpY2VzL2RpcmVjdGlvbi9kaXJlY3Rpb25hbGl0eSc7XG5pbXBvcnQgeyBJZ3hUaHVtYkxhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi9sYWJlbC90aHVtYi1sYWJlbC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBJZ3hTbGlkZXJUeXBlLCBJZ3hUaHVtYkZyb21UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBJZ3hUaHVtYlRvVGVtcGxhdGVEaXJlY3RpdmUsIElneFRpY2tMYWJlbFRlbXBsYXRlRGlyZWN0aXZlLCBJUmFuZ2VTbGlkZXJWYWx1ZSwgSVNsaWRlclZhbHVlQ2hhbmdlRXZlbnRBcmdzLCBTbGlkZXJIYW5kbGUsIFRpY2tMYWJlbHNPcmllbnRhdGlvbiwgVGlja3NPcmllbnRhdGlvblxufSBmcm9tICcuL3NsaWRlci5jb21tb24nO1xuaW1wb3J0IHsgSWd4U2xpZGVyVGh1bWJDb21wb25lbnQgfSBmcm9tICcuL3RodW1iL3RodW1iLXNsaWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4VGlja0xhYmVsc1BpcGUgfSBmcm9tICcuL3RpY2tzL3RpY2sucGlwZSc7XG5pbXBvcnQgeyBJZ3hUaWNrc0NvbXBvbmVudCB9IGZyb20gJy4vdGlja3MvdGlja3MuY29tcG9uZW50JztcblxubGV0IE5FWFRfSUQgPSAwO1xuXG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIFNsaWRlcioqIC1cbiAqIFtEb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5pbmZyYWdpc3RpY3MuY29tL3Byb2R1Y3RzL2lnbml0ZS11aS1hbmd1bGFyL2FuZ3VsYXIvY29tcG9uZW50cy9zbGlkZXIvc2xpZGVyKVxuICpcbiAqIFRoZSBJZ25pdGUgVUkgU2xpZGVyIGFsbG93cyBzZWxlY3Rpb24gaW4gYSBnaXZlbiByYW5nZSBieSBtb3ZpbmcgdGhlIHRodW1iIGFsb25nIHRoZSB0cmFjay4gVGhlIHRyYWNrXG4gKiBjYW4gYmUgZGVmaW5lZCBhcyBjb250aW51b3VzIG9yIHN0ZXBwZWQsIGFuZCB5b3UgY2FuIGNob29zZSBiZXR3ZWVuIHNpbmdsZSBhbmQgcmFuZ2Ugc2xpZGVyIHR5cGVzLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGBodG1sXG4gKiA8aWd4LXNsaWRlciBpZD1cInNsaWRlclwiXG4gKiAgICAgICAgICAgIFttaW5WYWx1ZV09XCIwXCIgW21heFZhbHVlXT1cIjEwMFwiXG4gKiAgICAgICAgICAgIFtjb250aW51b3VzXT10cnVlIFsobmdNb2RlbCldPVwidm9sdW1lXCI+XG4gKiA8L2lneC1zbGlkZXI+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IElneFNsaWRlckNvbXBvbmVudCwgbXVsdGk6IHRydWUgfV0sXG4gICAgc2VsZWN0b3I6ICdpZ3gtc2xpZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3NsaWRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgSWd4VGlja3NDb21wb25lbnQsIElneFRodW1iTGFiZWxDb21wb25lbnQsIElneFNsaWRlclRodW1iQ29tcG9uZW50LCBJZ3hUaWNrTGFiZWxzUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4U2xpZGVyQ29tcG9uZW50IGltcGxlbWVudHNcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBFZGl0b3JQcm92aWRlcixcbiAgICBPbkluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRodW1iRnJvbSgpOiBJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRodW1icy5maW5kKHRodW1iID0+IHRodW1iLnR5cGUgPT09IFNsaWRlckhhbmRsZS5GUk9NKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCB0aHVtYlRvKCk6IElneFNsaWRlclRodW1iQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh1bWJzLmZpbmQodGh1bWIgPT4gdGh1bWIudHlwZSA9PT0gU2xpZGVySGFuZGxlLlRPKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBsYWJlbEZyb20oKTogSWd4VGh1bWJMYWJlbENvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsUmVmcy5maW5kKGxhYmVsID0+IGxhYmVsLnR5cGUgPT09IFNsaWRlckhhbmRsZS5GUk9NKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBsYWJlbFRvKCk6IElneFRodW1iTGFiZWxDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5sYWJlbFJlZnMuZmluZChsYWJlbCA9PiBsYWJlbC50eXBlID09PSBTbGlkZXJIYW5kbGUuVE8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCd0cmFjaycsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHVibGljIHRyYWNrUmVmOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4VGh1bWJGcm9tVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgdGh1bWJGcm9tVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hUaHVtYlRvVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgdGh1bWJUb1RlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4VGlja0xhYmVsVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgdGlja0xhYmVsVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtc2xpZGVyJylcbiAgICBwdWJsaWMgc2xpZXJDbGFzcyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgYGlkYCBhdHRyaWJ1dGUuXG4gICAgICogSWYgbm90IHByb3ZpZGVkIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIFtpZF09XCInaWd4LXNsaWRlci0zMidcIiBbKG5nTW9kZWwpXT1cInRhc2sucGVyY2VudENvbXBsZXRlZFwiIFtzdGVwXT1cIjVcIiBbbG93ZXJCb3VuZF09XCIyMFwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LXNsaWRlci0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZHVyYXRpb24gdmlzaWJpbGl0eSBvZiB0aHVtYnMgbGFiZWxzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA3NTAgbWlsbGlzZWNvbmRzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciAjc2xpZGVyIFt0aHVtYkxhYmVsVmlzaWJpbGl0eUR1cmF0aW9uXT1cIjMwMDBcIiBbKG5nTW9kZWwpXT1cInRhc2sucGVyY2VudENvbXBsZXRlZFwiIFtzdGVwXT1cIjVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0aHVtYkxhYmVsVmlzaWJpbGl0eUR1cmF0aW9uID0gNzUwO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXNsaWRlci0tZGlzYWJsZWQnKVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdHlwZSBvZiB0aGUgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogVGhlIHNsaWRlciBjYW4gYmUgSWd4U2xpZGVyVHlwZS5TTElERVIoZGVmYXVsdCkgb3IgSWd4U2xpZGVyVHlwZS5SQU5HRS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlcjJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCB0eXBlID0gdGhpcy5zbGlkZXIudHlwZTtcbiAgICAgKiB9XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlIGFzIElneFNsaWRlclR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdHlwZSBvZiB0aGUgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogVGhlIHNsaWRlciBjYW4gYmUgSWd4U2xpZGVyVHlwZS5TTElERVIoZGVmYXVsdCkgb3IgSWd4U2xpZGVyVHlwZS5SQU5HRS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogc2xpZGVyVHlwZTogSWd4U2xpZGVyVHlwZSA9IElneFNsaWRlclR5cGUuUkFOR0U7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyICNzbGlkZXIyIFt0eXBlXT1cInNsaWRlclR5cGVcIiBbKG5nTW9kZWwpXT1cInJhbmdlVmFsdWVcIiBbbWluVmFsdWVdPVwiMFwiIFttYXhWYWx1ZV09XCIxMDBcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHR5cGUodHlwZTogSWd4U2xpZGVyVHlwZSkge1xuICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gSWd4U2xpZGVyVHlwZS5TTElERVIpIHtcbiAgICAgICAgICAgIHRoaXMubG93ZXJWYWx1ZSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faGFzVmlld0luaXQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBgbGFiZWxWaWV3YCwgYnkgYWNjZXB0aW5nIGEgY29sbGVjdGlvbiBvZiBwcmltaXRpdmUgdmFsdWVzIHdpdGggbW9yZSB0aGFuIG9uZSBlbGVtZW50LlxuICAgICAqIEVhY2ggZWxlbWVudCB3aWxsIGJlIGVxdWFsbHkgc3ByZWFkIG92ZXIgdGhlIHNsaWRlciBhbmQgaXQgd2lsbCBzZXJ2ZSBhcyBhIHRodW1iIGxhYmVsLlxuICAgICAqIE9uY2UgdGhlIHByb3BlcnR5IGlzIHNldCwgaXQgd2lsbCBwcmVjZW5kZW5jZSBvdmVyIHtAbGluayBtYXhWYWx1ZX0sIHtAbGluayBtaW5WYWx1ZX0sIHtAbGluayBzdGVwfS5cbiAgICAgKiBUaGlzIG1lYW5zIHRoYXQgdGhlIG1hbmlwdWxhdGlvbiBmb3IgdGhvc2UgcHJvcGVydGllcyB3b24ndCBiZSBhbGxvd2VkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBsYWJlbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbHM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBsYWJlbHMobGFiZWxzOiBBcnJheTxudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZD4pIHtcbiAgICAgICAgdGhpcy5fbGFiZWxzID0gbGFiZWxzO1xuXG4gICAgICAgIHRoaXMuX3BNYXggPSB0aGlzLnZhbHVlVG9GcmFjdGlvbih0aGlzLnVwcGVyQm91bmQsIDAsIDEpO1xuICAgICAgICB0aGlzLl9wTWluID0gdGhpcy52YWx1ZVRvRnJhY3Rpb24odGhpcy5sb3dlckJvdW5kLCAwLCAxKTtcblxuICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjaygpO1xuXG4gICAgICAgIGlmICh0aGlzLl9oYXNWaWV3SW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zdGVwRGlzdGFuY2UgPSB0aGlzLmNhbGN1bGF0ZVN0ZXBEaXN0YW5jZSgpO1xuICAgICAgICAgICAgdGhpcy5zZXRUaWNrSW50ZXJ2YWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHRlbXBsYXRlIGNvbnRleHQgY29ycmVzcG9uZGluZ1xuICAgICAqIHRvIHtAbGluayBJZ3hUaHVtYkZyb21UZW1wbGF0ZURpcmVjdGl2ZX0gYW5kIHtAbGluayBJZ3hUaHVtYlRvVGVtcGxhdGVEaXJlY3RpdmV9IHRlbXBsYXRlcy5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiByZXR1cm4ge1xuICAgICAqICAkaW1wbGljaXQgLy8gcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxhYmVsLFxuICAgICAqICBsYWJlbHMgLy8gcmV0dXJucyB0aGUgbGFiZWxzIGNvbGxlY3Rpb24gdGhlIHVzZXIgaGFzIHBhc3NlZC5cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBjb250ZXh0KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBsYWJlbHM6IHRoaXMubGFiZWxzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgaW5jcmVtZW50YWwvZGVjcmVtZW50YWwgc3RlcCBvZiB0aGUgdmFsdWUgd2hlbiBkcmFnZ2luZyB0aGUgdGh1bWIuXG4gICAgICogVGhlIGRlZmF1bHQgc3RlcCBpcyAxLCBhbmQgc3RlcCBzaG91bGQgbm90IGJlIGxlc3Mgb3IgZXF1YWwgdGhhbiAwLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciAjc2xpZGVyIFsobmdNb2RlbCldPVwidGFzay5wZXJjZW50Q29tcGxldGVkXCIgW3N0ZXBdPVwiNVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBzdGVwKHN0ZXA6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9zdGVwID0gc3RlcDtcblxuICAgICAgICBpZiAodGhpcy5faGFzVmlld0luaXQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcERpc3RhbmNlID0gdGhpcy5jYWxjdWxhdGVTdGVwRGlzdGFuY2UoKTtcbiAgICAgICAgICAgIHRoaXMubm9ybWFsaXplQnlTdGVwKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5fdmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKTtcbiAgICAgICAgICAgIHRoaXMuc2V0VGlja0ludGVydmFsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBpbmNyZW1lbnRhbC9kZWNyZW1lbnRhbCBkcmFnZ2luZyBzdGVwIG9mIHRoZSB7QGxpbmsgSWd4U2xpZGVyQ29tcG9uZW50fS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlcjJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCBzdGVwID0gdGhpcy5zbGlkZXIuc3RlcDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBzdGVwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYWJlbHNWaWV3RW5hYmxlZCA/IDEgOiB0aGlzLl9zdGVwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgdGhlIHtAbGluayBJZ3hTbGlkZXJDb21wb25lbnR9IGlzIGRpc2FibGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyMlwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICAgbGV0IGlzRGlzYWJsZWQgPSB0aGlzLnNsaWRlci5kaXNhYmxlZDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBjb21wb25lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyICNzbGlkZXIgW2Rpc2FibGVkXT1cInRydWVcIiBbKG5nTW9kZWwpXT1cInRhc2sucGVyY2VudENvbXBsZXRlZFwiIFtzdGVwXT1cIjVcIiBbbG93ZXJCb3VuZF09XCIyMFwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQoZGlzYWJsZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGU7XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc1ZpZXdJbml0KSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVRodW1iRm9jdXNhYmxlU3RhdGUoZGlzYWJsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSB7QGxpbmsgSWd4U2xpZGVyQ29tcG9uZW50fSBpcyBzZXQgYXMgY29udGludW91cy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlcjJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCBjb250aW51b3VzID0gdGhpcy5zbGlkZXIuY29udGludW91cztcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIGdldCBjb250aW51b3VzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGludW91cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB7QGxpbmsgSWd4U2xpZGVyQ29tcG9uZW50fSBhcyBjb250aW51b3VzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXMgY29uc2lkZXJlZCB0aGF0IHRoZSB7QGxpbmsgSWd4U2xpZGVyQ29tcG9uZW50fSBpcyBkaXNjcmV0ZS5cbiAgICAgKiBEaXNjcmV0ZSB7QGxpbmsgSWd4U2xpZGVyQ29tcG9uZW50fSBzbGlkZXIgaGFzIHN0ZXAgaW5kaWNhdG9ycyBvdmVyIHRoZSB0cmFjayBhbmQgdmlzaWJsZSB0aHVtYiBsYWJlbHMgZHVyaW5nIGludGVyYWN0aW9uLlxuICAgICAqIENvbnRpbnVvdXMge0BsaW5rIElneFNsaWRlckNvbXBvbmVudH0gZG9lcyBub3QgaGF2ZSB0aWNrcyBhbmQgZG9lcyBub3Qgc2hvdyBidWJibGUgbGFiZWxzIGZvciB2YWx1ZXMuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyICNzbGlkZXIgW2NvbnRpbnVvdXNdPVwiJ3RydWUnXCIgWyhuZ01vZGVsKV09XCJ0YXNrLnBlcmNlbnRDb21wbGV0ZWRcIiBbc3RlcF09XCI1XCIgW2xvd2VyQm91bmRdPVwiMjBcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGNvbnRpbnVvdXMoY29udGludW91czogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9jb250aW51b3VzID0gY29udGludW91cztcbiAgICAgICAgaWYgKHRoaXMuX2hhc1ZpZXdJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnNldFRpY2tJbnRlcnZhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWluaW1hbCBkaXNwbGF5ZWQgdHJhY2sgdmFsdWUgb2YgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgQFZpZXdDaGlsZChcInNsaWRlcjJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCBzbGlkZXJNaW4gPSB0aGlzLnNsaWRlci5taW5WYWx1ZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBtaW5WYWx1ZSgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5sYWJlbHNWaWV3RW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fbWluVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWluaW1hbCBkaXNwbGF5ZWQgdHJhY2sgdmFsdWUgZm9yIHRoZSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBUaGUgZGVmYXVsdCBtaW5pbWFsIHZhbHVlIGlzIDAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIFt0eXBlXT1cInNsaWRlclR5cGVcIiBbbWluVmFsdWVdPVwiNTZcIiBbbWF4VmFsdWVdPVwiMTAwXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG1pblZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlID49IHRoaXMubWF4VmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX21pblZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPiB0aGlzLl91cHBlckJvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVwcGVyQm91bmRBbmRNYXhUcmF2ZWxab25lKCk7XG4gICAgICAgICAgICB0aGlzLmxvd2VyQm91bmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlZnJlc2ggbWluIHRyYXZlbCB6b25lIGxpbWl0LlxuICAgICAgICB0aGlzLl9wTWluID0gMDtcbiAgICAgICAgLy8gUmVjYWxjdWxhdGUgc3RlcCBkaXN0YW5jZS5cbiAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKTtcbiAgICAgICAgaWYgKHRoaXMuX2hhc1ZpZXdJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXBEaXN0YW5jZSA9IHRoaXMuY2FsY3VsYXRlU3RlcERpc3RhbmNlKCk7XG4gICAgICAgICAgICB0aGlzLnNldFRpY2tJbnRlcnZhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWF4aW11bSBkaXNwbGF5ZWQgdHJhY2sgdmFsdWUgZm9yIHRoZSB7QGxpbmsgSWd4U2xpZGVyQ29tcG9uZW50fS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlclwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICAgbGV0IHNsaWRlck1heCA9IHRoaXMuc2xpZGVyLm1heFZhbHVlO1xuICAgICAqIH1cbiAgICAgKiAgYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBtYXhWYWx1ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5sYWJlbHNWaWV3RW5hYmxlZCA/XG4gICAgICAgICAgICB0aGlzLmxhYmVscy5sZW5ndGggLSAxIDpcbiAgICAgICAgICAgIHRoaXMuX21heFZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1heGltYWwgZGlzcGxheWVkIHRyYWNrIHZhbHVlIGZvciB0aGUgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogVGhlIGRlZmF1bHQgbWF4aW11bSB2YWx1ZSBpcyAxMDAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIFt0eXBlXT1cInNsaWRlclR5cGVcIiBbbWluVmFsdWVdPVwiNTZcIiBbbWF4VmFsdWVdPVwiMjU2XCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG1heFZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlIDw9IHRoaXMuX21pblZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9tYXhWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlIDwgdGhpcy5fbG93ZXJCb3VuZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb3dlckJvdW5kQW5kTWluVHJhdmVsWm9uZSgpO1xuICAgICAgICAgICAgdGhpcy51cHBlckJvdW5kID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZWZyZXNoIG1heCB0cmF2ZWwgem9uZSBsaW1pdHMuXG4gICAgICAgIHRoaXMuX3BNYXggPSAxO1xuICAgICAgICAvLyByZWNhbGN1bGF0ZSBzdGVwIGRpc3RhbmNlLlxuICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjaygpO1xuICAgICAgICBpZiAodGhpcy5faGFzVmlld0luaXQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcERpc3RhbmNlID0gdGhpcy5jYWxjdWxhdGVTdGVwRGlzdGFuY2UoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0VGlja0ludGVydmFsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsb3dlciBib3VuZGFyeSBvZiBzZXR0YWJsZSB2YWx1ZXMgb2YgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIElmIG5vdCBzZXQsIHdpbGwgcmV0dXJuIGBtaW5WYWx1ZWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCBzbGlkZXJMb3dCb3VuZCA9IHRoaXMuc2xpZGVyLmxvd2VyQm91bmQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbG93ZXJCb3VuZCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTih0aGlzLl9sb3dlckJvdW5kKSAmJiB0aGlzLl9sb3dlckJvdW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlSW5SYW5nZSh0aGlzLl9sb3dlckJvdW5kLCB0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm1pblZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGxvd2VyIGJvdW5kYXJ5IG9mIHNldHRhYmxlIHZhbHVlcyBvZiB0aGUgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogSWYgbm90IHNldCBpcyB0aGUgc2FtZSBhcyBtaW4gdmFsdWUuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIFtzdGVwXT1cIjVcIiBbbG93ZXJCb3VuZF09XCIyMFwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBsb3dlckJvdW5kKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlID49IHRoaXMudXBwZXJCb3VuZCB8fCAodGhpcy5sYWJlbHNWaWV3RW5hYmxlZCAmJiB2YWx1ZSA8IDApKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb3dlckJvdW5kID0gdGhpcy52YWx1ZUluUmFuZ2UodmFsdWUsIHRoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWUpO1xuXG4gICAgICAgIC8vIFJlZnJlc2ggbWluIHRyYXZlbCB6b25lLlxuICAgICAgICB0aGlzLl9wTWluID0gdGhpcy52YWx1ZVRvRnJhY3Rpb24odGhpcy5fbG93ZXJCb3VuZCwgMCwgMSk7XG4gICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdXBwZXIgYm91bmRhcnkgb2Ygc2V0dGFibGUgdmFsdWVzIG9mIHRoZSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBJZiBub3Qgc2V0LCB3aWxsIHJldHVybiBgbWF4VmFsdWVgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IHNsaWRlclVwQm91bmQgPSB0aGlzLnNsaWRlci51cHBlckJvdW5kO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHVwcGVyQm91bmQoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4odGhpcy5fdXBwZXJCb3VuZCkgJiYgdGhpcy5fdXBwZXJCb3VuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUluUmFuZ2UodGhpcy5fdXBwZXJCb3VuZCwgdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5tYXhWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB1cHBlciBib3VuZGFyeSBvZiB0aGUgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogSWYgbm90IHNldCBpcyB0aGUgc2FtZSBhcyBtYXggdmFsdWUuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIFtzdGVwXT1cIjVcIiBbdXBwZXJCb3VuZF09XCIyMFwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB1cHBlckJvdW5kKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlIDw9IHRoaXMubG93ZXJCb3VuZCB8fCAodGhpcy5sYWJlbHNWaWV3RW5hYmxlZCAmJiB2YWx1ZSA+IHRoaXMubGFiZWxzLmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91cHBlckJvdW5kID0gdGhpcy52YWx1ZUluUmFuZ2UodmFsdWUsIHRoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWUpO1xuICAgICAgICAvLyBSZWZyZXNoIHRpbWUgdHJhdmVsIHpvbmUuXG4gICAgICAgIHRoaXMuX3BNYXggPSB0aGlzLnZhbHVlVG9GcmFjdGlvbih0aGlzLl91cHBlckJvdW5kLCAwLCAxKTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzbGlkZXIgdmFsdWUuIElmIHRoZSBzbGlkZXIgaXMgb2YgdHlwZSB7QGxpbmsgSWd4U2xpZGVyVHlwZS5TTElERVJ9IHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBudW1iZXIuXG4gICAgICogSWYgdGhlIHNsaWRlciB0eXBlIGlzIHtAbGluayBJZ3hTbGlkZXJUeXBlLlJBTkdFfS5cbiAgICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgcmVwcmVzZW50cyBhbiBvYmplY3Qgb2Yge0BsaW5rIGxvd2VyVmFsdWV9IGFuZCB7QGxpbmsgdXBwZXJWYWx1ZX0uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXIyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIHB1YmxpYyBzbGlkZXJWYWx1ZShldmVudCl7XG4gICAgICogICAgIGxldCBzbGlkZXJWYWwgPSB0aGlzLnNsaWRlci52YWx1ZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBudW1iZXIgfCBJUmFuZ2VTbGlkZXJWYWx1ZSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbG93ZXI6IHRoaXMudmFsdWVJblJhbmdlKHRoaXMubG93ZXJWYWx1ZSwgdGhpcy5sb3dlckJvdW5kLCB0aGlzLnVwcGVyQm91bmQpLFxuICAgICAgICAgICAgICAgIHVwcGVyOiB0aGlzLnZhbHVlSW5SYW5nZSh0aGlzLnVwcGVyVmFsdWUsIHRoaXMubG93ZXJCb3VuZCwgdGhpcy51cHBlckJvdW5kKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlSW5SYW5nZSh0aGlzLnVwcGVyVmFsdWUsIHRoaXMubG93ZXJCb3VuZCwgdGhpcy51cHBlckJvdW5kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHNsaWRlciB2YWx1ZS5cbiAgICAgKiBJZiB0aGUgc2xpZGVyIGlzIG9mIHR5cGUge0BsaW5rIElneFNsaWRlclR5cGUuU0xJREVSfS5cbiAgICAgKiBUaGUgYXJndW1lbnQgaXMgbnVtYmVyLiBCeSBkZWZhdWx0IHRoZSB7QGxpbmsgdmFsdWV9IGdldHMgdGhlIHtAbGluayBsb3dlckJvdW5kfS5cbiAgICAgKiBJZiB0aGUgc2xpZGVyIHR5cGUgaXMge0BsaW5rIElneFNsaWRlclR5cGUuUkFOR0V9IHRoZSBhcmd1bWVudFxuICAgICAqIHJlcHJlc2VudHMgYW4gb2JqZWN0IG9mIHtAbGluayBsb3dlclZhbHVlfSBhbmQge0BsaW5rIHVwcGVyVmFsdWV9IHByb3BlcnRpZXMuXG4gICAgICogQnkgZGVmYXVsdCB0aGUgb2JqZWN0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUge0BsaW5rIGxvd2VyQm91bmR9IGFuZCB7QGxpbmsgdXBwZXJCb3VuZH0gcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiByYW5nZVZhbHVlID0ge1xuICAgICAqICAgbG93ZXI6IDMwLFxuICAgICAqICAgdXBwZXI6IDYwXG4gICAgICogfTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgW3R5cGVdPVwic2xpZGVyVHlwZVwiIFsobmdNb2RlbCldPVwicmFuZ2VWYWx1ZVwiIFttaW5WYWx1ZV09XCI1NlwiIFttYXhWYWx1ZV09XCIyNTZcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IG51bWJlciB8IElSYW5nZVNsaWRlclZhbHVlKSB7XG4gICAgICAgIHRoaXMubm9ybWFsaXplQnlTdGVwKHZhbHVlKTtcblxuICAgICAgICBpZiAodGhpcy5faGFzVmlld0luaXQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5fdmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgcHJlc2VudGVkIHByaW1hcnkgdGlja3MuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHByaW1hcnlUaWNrcyA9IHRoaXMuc2xpZGVyLnByaW1hcnlUaWNrcztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgcHJpbWFyeVRpY2tzKCkge1xuICAgICAgICBpZiAodGhpcy5sYWJlbHNWaWV3RW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ByaW1hcnlUaWNrcyA9IHRoaXMubGFiZWxzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHJpbWFyeVRpY2tzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBwcmltYXJ5IHRpY2tzLiBJZiB7QGxpbmsgQGxhYmVsc30gaXMgZW5hYmxlZCwgdGhpcyBwcm9wZXJ0eSB3b24ndCBmdW5jdGlvbi5cbiAgICAgKiBJbnN0ZWQgZW5hYmxlIHRpY2tzIGJ5IHtAbGluayBzaG93VGlja3N9IHByb3BlcnR5LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnNsaWRlci5wcmltYXJ5VGlja3MgPSA1O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgcHJpbWFyeVRpY2tzKHZhbDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWwgPD0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHJpbWFyeVRpY2tzID0gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgcHJlc2VudGVkIHNlY29uZGFyeSB0aWNrcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgc2Vjb25kYXJ5VGlja3MgPSB0aGlzLnNsaWRlci5zZWNvbmRhcnlUaWNrcztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgc2Vjb25kYXJ5VGlja3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWNvbmRhcnlUaWNrcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kYXJ5IHRpY2tzLiBUaGUgcHJvcGVydHkgZnVuY3Rpb25zIGV2ZW4gd2hlbiB7QGxpbmsgbGFiZWxzfSBpcyBlbmFibGVkLFxuICAgICAqIGJ1dCBhbGwgc2Vjb25kYXJ5IHRpY2tzIHdvbid0IHByZXNlbnQgYW55IHRpY2sgbGFiZWxzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnNsaWRlci5zZWNvbmRhcnlUaWNrcyA9IDU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBzZWNvbmRhcnlUaWNrcyh2YWw6IG51bWJlcikge1xuICAgICAgICBpZiAodmFsIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2Vjb25kYXJ5VGlja3MgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvdy9oaWRlIHNsaWRlciB0aWNrc1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWVyIFtzaG93VGlja3NdPVwidHJ1ZVwiIFtwcmltYXJ5VGlja3NdPVwiNVwiPjwvaWd4LXNsaWVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBzaG93VGlja3MgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIHNob3cvaGlkZSBwcmltYXJ5IHRpY2sgbGFiZWxzXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIFtwcmltYXJ5VGlja3NdPVwiNVwiIFtwcmltYXJ5VGlja0xhYmVsc109XCJmYWxzZVwiPjwvaWd4LXNsaWRlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgcHJpbWFyeVRpY2tMYWJlbHMgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogc2hvdy9oaWRlIHNlY29uZGFyeSB0aWNrIGxhYmVsc1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbc2Vjb25kYXJ5VGlja3NdPVwiNVwiIFtzZWNvbmRhcnlUaWNrTGFiZWxzXT1cImZhbHNlXCI+PC9pZ3gtc2xpZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBzZWNvbmRhcnlUaWNrTGFiZWxzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgdGlja3Mgb3JpZW50YXRpb246XG4gICAgICogYm90dG9tIC0gVGhlIGRlZmF1bHQgb3JpZW5hdGlvbiwgYmVsb3cgdGhlIHNsaWRlciB0cmFjay5cbiAgICAgKiB0b3AgLSBBYm92ZSB0aGUgc2xpZGVyIHRyYWNrXG4gICAgICogbWlycm9yIC0gY29tYmluZXMgdG9wIGFuZCBib3R0b20gb3JpZW50YXRpb24uXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIFtwcmltYXJ5VGlja3NdPVwiNVwiIFt0aWNrc09yaWVudGF0aW9uXT1cInRpY2tzT3JpZW50YXRpb25cIj48L2lneC1zbGlkZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGlja3NPcmllbnRhdGlvbjogVGlja3NPcmllbnRhdGlvbiA9IFRpY2tzT3JpZW50YXRpb24uQm90dG9tO1xuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyB0aWNrIGxhYmVscyByb3RhdGlvbjpcbiAgICAgKiBob3Jpem9udGFsIC0gVGhlIGRlZmF1bHQgcm90YXRpb25cbiAgICAgKiB0b3B0b2JvdHRvbSAtIFJvdGF0ZXMgdGljayBsYWJlbHMgdmVydGljYWxseSB0byA5MGRlZ1xuICAgICAqIGJvdHRvbXRvdG9wIC0gUm90YXRlIHRpY2sgbGFiZWxzIHZlcnRpY2FsbHkgdG8gLTkwZGVnXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIFtwcmltYXJ5VGlja3NdPVwiNVwiIFtzZWNvbmRhcnlUaWNrc109XCIzXCIgW3RpY2tMYWJlbHNPcmllbnRhdGlvbl09XCJ0aWNrTGFiZWxzT3JpZW50YWl0b25cIj48L2lneC1zbGlkZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGlja0xhYmVsc09yaWVudGF0aW9uOiBUaWNrTGFiZWxzT3JpZW50YXRpb24gPSBUaWNrTGFiZWxzT3JpZW50YXRpb24uSG9yaXpvbnRhbDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRlYWN0aXZhdGVUaHVtYkxhYmVsKCkge1xuICAgICAgICByZXR1cm4gKCh0aGlzLnByaW1hcnlUaWNrcyAmJiB0aGlzLnByaW1hcnlUaWNrTGFiZWxzKSB8fCAodGhpcy5zZWNvbmRhcnlUaWNrcyAmJiB0aGlzLnNlY29uZGFyeVRpY2tMYWJlbHMpKSAmJlxuICAgICAgICAgICAgKHRoaXMudGlja3NPcmllbnRhdGlvbiA9PT0gVGlja3NPcmllbnRhdGlvbi5Ub3AgfHwgdGhpcy50aWNrc09yaWVudGF0aW9uID09PSBUaWNrc09yaWVudGF0aW9uLk1pcnJvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBlbWl0dGVkIGV2ZXJ5IHRpbWUgdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBjaGFuZ2UoZXZlbnQpe1xuICAgICAqICAgIGFsZXJ0KFwiVGhlIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQhXCIpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgKHZhbHVlQ2hhbmdlKT1cImNoYW5nZSgkZXZlbnQpXCIgI3NsaWRlciBbKG5nTW9kZWwpXT1cInRhc2sucGVyY2VudENvbXBsZXRlZFwiIFtzdGVwXT1cIjVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElTbGlkZXJWYWx1ZUNoYW5nZUV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZW1pdHRlZCBldmVyeSB0aW1lIHRoZSBsb3dlciB2YWx1ZSBvZiBhIHJhbmdlIHNsaWRlciBpcyBjaGFuZ2VkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgY2hhbmdlKHZhbHVlKXtcbiAgICAgKiAgICBhbGVydChgVGhlIGxvd2VyIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgdG8gJHt2YWx1ZX1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIFsobG93ZXJWYWx1ZSldPVwibW9kZWwubG93ZXJ2YWx1ZVwiIChsb3dlclZhbHVlQ2hhbmdlKT1cImNoYW5nZSgkZXZlbnQpXCIgW3N0ZXBdPVwiNVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBsb3dlclZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgZXZlcnkgdGltZSB0aGUgdXBwZXIgdmFsdWUgb2YgYSByYW5nZSBzbGlkZXIgaXMgY2hhbmdlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGNoYW5nZSh2YWx1ZSl7XG4gICAgICogICAgYWxlcnQoYFRoZSB1cHBlciB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIHRvICR7dmFsdWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbKHVwcGVyVmFsdWUpXT1cIm1vZGVsLnVwcGVydmFsdWVcIiAodXBwZXJWYWx1ZUNoYW5nZSk9XCJjaGFuZ2UoJGV2ZW50KVwiIFtzdGVwXT1cIjVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgdXBwZXJWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBlbWl0dGVkIGF0IHRoZSBlbmQgb2YgZXZlcnkgc2xpZGUgaW50ZXJhY3Rpb24uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBjaGFuZ2UoZXZlbnQpe1xuICAgICAqICAgIGFsZXJ0KFwiVGhlIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQhXCIpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgKGRyYWdGaW5pc2hlZCk9XCJjaGFuZ2UoJGV2ZW50KVwiICNzbGlkZXIgWyhuZ01vZGVsKV09XCJ0YXNrLnBlcmNlbnRDb21wbGV0ZWRcIiBbc3RlcF09XCI1XCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGRyYWdGaW5pc2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgSVJhbmdlU2xpZGVyVmFsdWU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgndGlja3MnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHByaXZhdGUgdGlja3M6IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbihJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudClcbiAgICBwcml2YXRlIHRodW1iczogUXVlcnlMaXN0PElneFNsaWRlclRodW1iQ29tcG9uZW50PiA9IG5ldyBRdWVyeUxpc3Q8SWd4U2xpZGVyVGh1bWJDb21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbihJZ3hUaHVtYkxhYmVsQ29tcG9uZW50KVxuICAgIHByaXZhdGUgbGFiZWxSZWZzOiBRdWVyeUxpc3Q8SWd4VGh1bWJMYWJlbENvbXBvbmVudD4gPSBuZXcgUXVlcnlMaXN0PElneFRodW1iTGFiZWxDb21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uUGFuOiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHN0ZXBEaXN0YW5jZTogbnVtYmVyO1xuXG4gICAgLy8gTGltaXQgaGFuZGxlIHRyYXZlbCB6b25lXG4gICAgcHJpdmF0ZSBfcE1pbiA9IDA7XG4gICAgcHJpdmF0ZSBfcE1heCA9IDE7XG5cbiAgICAvLyBGcm9tL3VwcGVyVmFsdWUgaW4gcGVyY2VudCB2YWx1ZXNcbiAgICBwcml2YXRlIF9oYXNWaWV3SW5pdCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX21pblZhbHVlID0gMDtcbiAgICBwcml2YXRlIF9tYXhWYWx1ZSA9IDEwMDtcbiAgICBwcml2YXRlIF9sb3dlckJvdW5kOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfdXBwZXJCb3VuZDogbnVtYmVyO1xuICAgIHByaXZhdGUgX2xvd2VyVmFsdWU6IG51bWJlcjtcbiAgICBwcml2YXRlIF91cHBlclZhbHVlOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfY29udGludW91cyA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfc3RlcCA9IDE7XG4gICAgcHJpdmF0ZSBfdmFsdWU6IG51bWJlciB8IElSYW5nZVNsaWRlclZhbHVlID0gMDtcblxuICAgIC8vIHRpY2tzXG4gICAgcHJpdmF0ZSBfcHJpbWFyeVRpY2tzID0gMDtcbiAgICBwcml2YXRlIF9zZWNvbmRhcnlUaWNrcyA9IDA7XG4gICAgcHJpdmF0ZSBfc2xpZGluZyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfbGFiZWxzID0gbmV3IEFycmF5PG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuICAgIHByaXZhdGUgX3R5cGU6IElneFNsaWRlclR5cGUgPSBJZ3hTbGlkZXJUeXBlLlNMSURFUjtcblxuICAgIHByaXZhdGUgX2Rlc3Ryb3llciQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIHByaXZhdGUgX2luZGljYXRvcnNEZXN0cm95ZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIF9pbmRpY2F0b3JzVGltZXI6IE9ic2VydmFibGU8YW55PjtcblxuICAgIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICAgIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIF9kaXI6IElneERpcmVjdGlvbmFsaXR5KSB7XG4gICAgICAgIHRoaXMuc3RlcERpc3RhbmNlID0gdGhpcy5fc3RlcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICAgIHB1YmxpYyBvbkZvY3VzKCkge1xuICAgICAgICB0aGlzLnRvZ2dsZVNsaWRlckluZGljYXRvcnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgIHR5cGUgaXMgUkFOR0UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBAVmlld0NoaWxkKFwic2xpZGVyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgc2xpZGVyUmFuZ2UgPSB0aGlzLnNsaWRlci5pc1JhbmdlO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzUmFuZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IElneFNsaWRlclR5cGUuUkFOR0U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbG93ZXIgdmFsdWUgb2YgYSBSQU5HRSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlclwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBwdWJsaWMgbG93VmFsdWUoZXZlbnQpe1xuICAgICAqICAgIGxldCBzbGlkZXJMb3dWYWx1ZSA9IHRoaXMuc2xpZGVyLmxvd2VyVmFsdWU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbG93ZXJWYWx1ZSgpOiBudW1iZXIge1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTih0aGlzLl9sb3dlclZhbHVlKSAmJiB0aGlzLl9sb3dlclZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fbG93ZXJWYWx1ZSA+PSB0aGlzLmxvd2VyQm91bmQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb3dlclZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubG93ZXJCb3VuZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBsb3dlciB2YWx1ZSBvZiBhIFJBTkdFIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIHB1YmxpYyBsb3dWYWx1ZShldmVudCl7XG4gICAgICogICAgdGhpcy5zbGlkZXIubG93ZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbG93ZXJWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGFkanVzdGVkVmFsdWUgPSB0aGlzLnZhbHVlSW5SYW5nZSh2YWx1ZSwgdGhpcy5sb3dlckJvdW5kLCB0aGlzLnVwcGVyQm91bmQpO1xuICAgICAgICBpZiAodGhpcy5fbG93ZXJWYWx1ZSAhPT0gYWRqdXN0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fbG93ZXJWYWx1ZSA9IGFkanVzdGVkVmFsdWU7XG4gICAgICAgICAgICB0aGlzLmxvd2VyVmFsdWVDaGFuZ2UuZW1pdCh0aGlzLl9sb3dlclZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB7IGxvd2VyOiB0aGlzLl9sb3dlclZhbHVlLCB1cHBlcjogdGhpcy5fdXBwZXJWYWx1ZSB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdXBwZXIgdmFsdWUgb2YgYSBSQU5HRSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBSZXR1cm5zIGB2YWx1ZWAgb2YgYSBTTElERVIgYElneFNsaWRlckNvbXBvbmVudGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIEBWaWV3Q2hpbGQoXCJzbGlkZXIyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIHB1YmxpYyB1cHBlclZhbHVlKGV2ZW50KXtcbiAgICAgKiAgICAgbGV0IHVwcGVyVmFsdWUgPSB0aGlzLnNsaWRlci51cHBlclZhbHVlO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHVwcGVyVmFsdWUoKSB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKHRoaXMuX3VwcGVyVmFsdWUpICYmIHRoaXMuX3VwcGVyVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl91cHBlclZhbHVlIDw9IHRoaXMudXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VwcGVyVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy51cHBlckJvdW5kO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHVwcGVyIHZhbHVlIG9mIGEgUkFOR0UgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBAVmlld0NoaWxkKFwic2xpZGVyMlwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBwdWJsaWMgdXBwZXJWYWx1ZShldmVudCl7XG4gICAgICogICAgIHRoaXMuc2xpZGVyLnVwcGVyVmFsdWUgPSB2YWx1ZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHVwcGVyVmFsdWUodmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBhZGp1c3RlZFZhbHVlID0gdGhpcy52YWx1ZUluUmFuZ2UodmFsdWUsIHRoaXMubG93ZXJCb3VuZCwgdGhpcy51cHBlckJvdW5kKTtcbiAgICAgICAgaWYgKHRoaXMuX3VwcGVyVmFsdWUgIT09IGFkanVzdGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwcGVyVmFsdWUgPSBhZGp1c3RlZFZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cHBlclZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fdXBwZXJWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0geyBsb3dlcjogdGhpcy5fbG93ZXJWYWx1ZSwgdXBwZXI6IHRoaXMuX3VwcGVyVmFsdWUgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdGhlIGxvd2VyIGxhYmVsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIGxldCBsYWJlbCA9IHRoaXMuc2xpZGVyLmxvd2VyTGFiZWw7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBsb3dlckxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYWJlbHNWaWV3RW5hYmxlZCA/IHRoaXMubGFiZWxzW3RoaXMubG93ZXJWYWx1ZV0gOiB0aGlzLmxvd2VyVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgY29ycmVzcG9uZGluZyB0aGUgdXBwZXIgbGFiZWwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbGV0IGxhYmVsID0gdGhpcy5zbGlkZXIudXBwZXJMYWJlbDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHVwcGVyTGFiZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsc1ZpZXdFbmFibGVkID8gdGhpcy5sYWJlbHNbdGhpcy51cHBlclZhbHVlXSA6IHRoaXMudXBwZXJWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIGxhYmVsIHZpZXcgaXMgZW5hYmxlZC5cbiAgICAgKiBJZiB0aGUge0BsaW5rIGxhYmVsc30gaXMgc2V0LCB0aGUgdmlldyBpcyBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlclwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBsZXQgbGFiZWxWaWV3ID0gdGhpcy5zbGlkZXIubGFiZWxzVmlld0VuYWJsZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBsYWJlbHNWaWV3RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMubGFiZWxzICYmIHRoaXMubGFiZWxzLmxlbmd0aCA+IDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dUb3BUaWNrcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGlja3NPcmllbnRhdGlvbiA9PT0gVGlja3NPcmllbnRhdGlvbi5Ub3AgfHxcbiAgICAgICAgICAgIHRoaXMudGlja3NPcmllbnRhdGlvbiA9PT0gVGlja3NPcmllbnRhdGlvbi5NaXJyb3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2hvd0JvdHRvbVRpY2tzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aWNrc09yaWVudGF0aW9uID09PSBUaWNrc09yaWVudGF0aW9uLkJvdHRvbSB8fFxuICAgICAgICAgICAgdGhpcy50aWNrc09yaWVudGF0aW9uID09PSBUaWNrc09yaWVudGF0aW9uLk1pcnJvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMubWluVmFsdWUgJiYgY2hhbmdlcy5tYXhWYWx1ZSAmJlxuICAgICAgICAgICAgY2hhbmdlcy5taW5WYWx1ZS5jdXJyZW50VmFsdWUgPCBjaGFuZ2VzLm1heFZhbHVlLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fbWF4VmFsdWUgPSBjaGFuZ2VzLm1heFZhbHVlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX21pblZhbHVlID0gY2hhbmdlcy5taW5WYWx1ZS5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5zdGVwICYmIGNoYW5nZXMuc3RlcC5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMubm9ybWFsaXplQnlTdGVwKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBpZiB7QGxpbmsgU2xpZGVyVHlwZS5TTElERVJ9IHRoYW4gdGhlIGluaXRpYWwgdmFsdWUgc2hvbGQgYmUgdGhlIGxvd2VzdCBvbmUuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoIXRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fdXBwZXJWYWx1ZSA9IHRoaXMubG93ZXJCb3VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0cmFjayB0cmF2ZWwgem9uZVxuICAgICAgICB0aGlzLl9wTWluID0gdGhpcy52YWx1ZVRvRnJhY3Rpb24odGhpcy5sb3dlckJvdW5kKSB8fCAwO1xuICAgICAgICB0aGlzLl9wTWF4ID0gdGhpcy52YWx1ZVRvRnJhY3Rpb24odGhpcy51cHBlckJvdW5kKSB8fCAxO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5fdmFsdWUsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5faGFzVmlld0luaXQgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0ZXBEaXN0YW5jZSA9IHRoaXMuY2FsY3VsYXRlU3RlcERpc3RhbmNlKCk7XG4gICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCk7XG4gICAgICAgIHRoaXMuc2V0VGlja0ludGVydmFsKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlVGh1bWJGb2N1c2FibGVTdGF0ZSh0aGlzLmRpc2FibGVkKTtcblxuICAgICAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKHRoaXMudGh1bWJGcm9tKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cyh0aGlzLnRodW1iVG8pO1xuXG4gICAgICAgIHRoaXMudGh1bWJzLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVyJCkpLnN1YnNjcmliZShjaGFuZ2UgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGh1bWJGcm9tID0gY2hhbmdlLmZpbmQoKHRodW1iOiBJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudCkgPT4gdGh1bWIudHlwZSA9PT0gU2xpZGVySGFuZGxlLkZST00pO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXIodGh1bWJGcm9tLCBudWxsLCB0aGlzLmxvd2VyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cyh0aHVtYkZyb20pO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VUaHVtYkZvY3VzYWJsZVN0YXRlKHRoaXMuZGlzYWJsZWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmxhYmVsUmVmcy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llciQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFiZWxGcm9tID0gdGhpcy5sYWJlbFJlZnMuZmluZCgobGFiZWw6IElneFRodW1iTGFiZWxDb21wb25lbnQpID0+IGxhYmVsLnR5cGUgPT09IFNsaWRlckhhbmRsZS5GUk9NKTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyKG51bGwsIGxhYmVsRnJvbSwgdGhpcy5sb3dlclZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5fZWwubmF0aXZlRWxlbWVudCkucGlwZShcbiAgICAgICAgICAgICAgICB0aHJvdHRsZVRpbWUoNDApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZXIkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBEaXN0YW5jZSA9IHRoaXMuY2FsY3VsYXRlU3RlcERpc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQsICdwb2ludGVybW92ZScpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGhyb3R0bGUoKCkgPT4gaW50ZXJ2YWwoMCwgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVyJCkpLnN1YnNjcmliZSgoJGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmUoJGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llciQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVyJC5jb21wbGV0ZSgpO1xuXG4gICAgICAgIHRoaXMuX2luZGljYXRvcnNEZXN0cm95ZXIkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuX2luZGljYXRvcnNEZXN0cm95ZXIkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBJUmFuZ2VTbGlkZXJWYWx1ZSB8IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc051bGxpc2hCdXROb3RaZXJvKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ub3JtYWxpemVCeVN0ZXAodmFsdWUpO1xuICAgICAgICB0aGlzLnNldFZhbHVlKHRoaXMuX3ZhbHVlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIGdldEVkaXRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1JhbmdlID8gdGhpcy50aHVtYkZyb20ubmF0aXZlRWxlbWVudCA6IHRoaXMudGh1bWJUby5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGUobW91c2VYKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgVG8vRnJvbSBWYWx1ZXNcbiAgICAgICAgdGhpcy5vblBhbi5uZXh0KG1vdXNlWCk7XG5cbiAgICAgICAgLy8gRmluYWxseSBkbyBwb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2sgdGhlIERPTVxuICAgICAgICAvLyBiYXNlZCBvbiBkYXRhIHZhbHVlc1xuICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgdGh1bWJDaGFuZ2VkKHZhbHVlOiBudW1iZXIsIHRodW1iVHlwZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICBpZiAodGh1bWJUeXBlID09PSBTbGlkZXJIYW5kbGUuRlJPTSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvd2VyVmFsdWUgKyB2YWx1ZSA+IHRoaXMudXBwZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwcGVyVmFsdWUgPSB0aGlzLmxvd2VyVmFsdWUgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5sb3dlclZhbHVlICs9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51cHBlclZhbHVlICsgdmFsdWUgPCB0aGlzLmxvd2VyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb3dlclZhbHVlID0gdGhpcy51cHBlclZhbHVlICsgdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudXBwZXJWYWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbmV3VmFsOiBJUmFuZ2VTbGlkZXJWYWx1ZSA9IHtcbiAgICAgICAgICAgICAgICBsb3dlcjogdGhpcy5sb3dlclZhbHVlLFxuICAgICAgICAgICAgICAgIHVwcGVyOiB0aGlzLnVwcGVyVmFsdWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU3dhcCB0aGUgdGh1bWJzIGlmIGEgY29sbGlzaW9uIGFwcGVhcnMuXG4gICAgICAgICAgICAvLyBpZiAobmV3VmFsLmxvd2VyID09IG5ld1ZhbC51cHBlcikge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMudG9nZ2xlVGh1bWIoKTtcbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbDtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsID0gKHRoaXMudmFsdWUgYXMgbnVtYmVyKSArIHZhbHVlO1xuICAgICAgICAgICAgaWYgKG5ld1ZhbCA+PSB0aGlzLmxvd2VyQm91bmQgJiYgbmV3VmFsIDw9IHRoaXMudXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZUNoYW5nZWQob2xkVmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRWYWx1ZUNoYW5nZShvbGRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uVGh1bWJDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlU2xpZGVySW5kaWNhdG9ycygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Ib3ZlckNoYW5nZShzdGF0ZTogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gc3RhdGUgPyB0aGlzLnNob3dTbGlkZXJJbmRpY2F0b3JzKCkgOiB0aGlzLmhpZGVTbGlkZXJJbmRpY2F0b3JzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZhbHVlKHZhbHVlOiBudW1iZXIgfCBJUmFuZ2VTbGlkZXJWYWx1ZSwgdHJpZ2dlckNoYW5nZTogYm9vbGVhbikge1xuICAgICAgICBsZXQgcmVzO1xuICAgICAgICBpZiAoIXRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSBhcyBudW1iZXI7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwcGVyVmFsdWUgPSB2YWx1ZSAtIHZhbHVlICUgdGhpcy5zdGVwO1xuICAgICAgICAgICAgICAgIHJlcyA9IHRoaXMudXBwZXJWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy52YWxpZGF0ZUluaXRpYWxWYWx1ZSh2YWx1ZSBhcyBJUmFuZ2VTbGlkZXJWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl91cHBlclZhbHVlID0gdmFsdWUudXBwZXI7XG4gICAgICAgICAgICB0aGlzLl9sb3dlclZhbHVlID0gdmFsdWUubG93ZXI7XG4gICAgICAgICAgICByZXMgPSB7IGxvd2VyOiB0aGlzLmxvd2VyVmFsdWUsIHVwcGVyOiB0aGlzLnVwcGVyVmFsdWUgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHJlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdwb2ludGVyZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHJpdmF0ZSBvblBvaW50ZXJEb3duKCRldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgICAgIHRoaXMuZmluZENsb3Nlc3RUaHVtYigkZXZlbnQpO1xuXG4gICAgICAgIGlmICghdGhpcy50aHVtYlRvLmlzQWN0aXZlICYmIHRoaXMudGh1bWJGcm9tID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NsaWRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBhY3RpdmVUaHVtYiA9IHRoaXMudGh1bWJUby5pc0FjdGl2ZSA/IHRoaXMudGh1bWJUbyA6IHRoaXMudGh1bWJGcm9tO1xuICAgICAgICBhY3RpdmVUaHVtYi5uYXRpdmVFbGVtZW50LnNldFBvaW50ZXJDYXB0dXJlKCRldmVudC5wb2ludGVySWQpO1xuICAgICAgICB0aGlzLnNob3dTbGlkZXJJbmRpY2F0b3JzKCk7XG5cbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblBvaW50ZXJNb3ZlKCRldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9zbGlkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgkZXZlbnQuY2xpZW50WCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdwb2ludGVydXAnLCBbJyRldmVudCddKVxuICAgIHByaXZhdGUgb25Qb2ludGVyVXAoJGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRodW1iVG8uaXNBY3RpdmUgJiYgdGhpcy50aHVtYkZyb20gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWN0aXZlVGh1bWIgPSB0aGlzLnRodW1iVG8uaXNBY3RpdmUgPyB0aGlzLnRodW1iVG8gOiB0aGlzLnRodW1iRnJvbTtcbiAgICAgICAgYWN0aXZlVGh1bWIubmF0aXZlRWxlbWVudC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoJGV2ZW50LnBvaW50ZXJJZCk7XG5cbiAgICAgICAgdGhpcy5fc2xpZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhpZGVTbGlkZXJJbmRpY2F0b3JzKCk7XG4gICAgICAgIHRoaXMuZHJhZ0ZpbmlzaGVkLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUluaXRpYWxWYWx1ZSh2YWx1ZTogSVJhbmdlU2xpZGVyVmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlLnVwcGVyIDwgdmFsdWUubG93ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSB2YWx1ZS51cHBlcjtcbiAgICAgICAgICAgIHZhbHVlLnVwcGVyID0gdmFsdWUubG93ZXI7XG4gICAgICAgICAgICB2YWx1ZS5sb3dlciA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUubG93ZXIgPCB0aGlzLmxvd2VyQm91bmQpIHtcbiAgICAgICAgICAgIHZhbHVlLmxvd2VyID0gdGhpcy5sb3dlckJvdW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLnVwcGVyID4gdGhpcy51cHBlckJvdW5kKSB7XG4gICAgICAgICAgICB2YWx1ZS51cHBlciA9IHRoaXMudXBwZXJCb3VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRDbG9zZXN0VGh1bWIoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3Nlc3RIYW5kbGUoZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50aHVtYlRvLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlKGV2ZW50LmNsaWVudFgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTG93ZXJCb3VuZEFuZE1pblRyYXZlbFpvbmUoKSB7XG4gICAgICAgIHRoaXMubG93ZXJCb3VuZCA9IHRoaXMubWluVmFsdWU7XG4gICAgICAgIHRoaXMuX3BNaW4gPSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVXBwZXJCb3VuZEFuZE1heFRyYXZlbFpvbmUoKSB7XG4gICAgICAgIHRoaXMudXBwZXJCb3VuZCA9IHRoaXMubWF4VmFsdWU7XG4gICAgICAgIHRoaXMuX3BNYXggPSAxO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlU3RlcERpc3RhbmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvICh0aGlzLm1heFZhbHVlIC0gdGhpcy5taW5WYWx1ZSkgKiB0aGlzLnN0ZXA7XG4gICAgfVxuXG4gICAgLy8gcHJpdmF0ZSB0b2dnbGVUaHVtYigpIHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMudGh1bWJGcm9tLmlzQWN0aXZlID9cbiAgICAvLyAgICAgICAgIHRoaXMudGh1bWJUby5uYXRpdmVFbGVtZW50LmZvY3VzKCkgOlxuICAgIC8vICAgICAgICAgdGhpcy50aHVtYkZyb20ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIC8vIH1cblxuICAgIHByaXZhdGUgdmFsdWVJblJhbmdlKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxMDApIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KE1hdGgubWluKHZhbHVlLCBtYXgpLCBtaW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9zaXRpb25IYW5kbGVyKHRodW1iSGFuZGxlOiBFbGVtZW50UmVmLCBsYWJlbEhhbmRsZTogRWxlbWVudFJlZiwgcG9zaXRpb246IG51bWJlcikge1xuICAgICAgICBjb25zdCBwZXJjZW50ID0gYCR7dGhpcy52YWx1ZVRvRnJhY3Rpb24ocG9zaXRpb24pICogMTAwfSVgO1xuICAgICAgICBjb25zdCBkaXIgPSB0aGlzLl9kaXIucnRsID8gJ3JpZ2h0JyA6ICdsZWZ0JztcblxuICAgICAgICBpZiAodGh1bWJIYW5kbGUpIHtcbiAgICAgICAgICAgIHRodW1iSGFuZGxlLm5hdGl2ZUVsZW1lbnQuc3R5bGVbZGlyXSA9IHBlcmNlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxIYW5kbGUpIHtcbiAgICAgICAgICAgIGxhYmVsSGFuZGxlLm5hdGl2ZUVsZW1lbnQuc3R5bGVbZGlyXSA9IHBlcmNlbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjaygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyKHRoaXMudGh1bWJUbywgdGhpcy5sYWJlbFRvLCB0aGlzLnZhbHVlIGFzIG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcih0aGlzLnRodW1iVG8sIHRoaXMubGFiZWxUbywgKHRoaXMudmFsdWUgYXMgSVJhbmdlU2xpZGVyVmFsdWUpLnVwcGVyKTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyKHRoaXMudGh1bWJGcm9tLCB0aGlzLmxhYmVsRnJvbSwgKHRoaXMudmFsdWUgYXMgSVJhbmdlU2xpZGVyVmFsdWUpLmxvd2VyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9oYXNWaWV3SW5pdCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZXN0SGFuZGxlKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZnJvbU9mZnNldCA9IHRoaXMudGh1bWJGcm9tLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCArIHRoaXMudGh1bWJGcm9tLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLyAyO1xuICAgICAgICBjb25zdCB0b09mZnNldCA9IHRoaXMudGh1bWJUby5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgKyB0aGlzLnRodW1iVG8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IHhQb2ludGVyID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLmNsb3Nlc3RUbyh4UG9pbnRlciwgW2Zyb21PZmZzZXQsIHRvT2Zmc2V0XSk7XG5cbiAgICAgICAgaWYgKGZyb21PZmZzZXQgPT09IHRvT2Zmc2V0ICYmIHRvT2Zmc2V0IDwgeFBvaW50ZXIpIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJUby5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZnJvbU9mZnNldCA9PT0gdG9PZmZzZXQgJiYgdG9PZmZzZXQgPiB4UG9pbnRlcikge1xuICAgICAgICAgICAgdGhpcy50aHVtYkZyb20ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoID09PSBmcm9tT2Zmc2V0KSB7XG4gICAgICAgICAgICB0aGlzLnRodW1iRnJvbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRodW1iVG8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUaWNrSW50ZXJ2YWwoKSB7XG4gICAgICAgIGxldCB0aWNrSW50ZXJ2YWw7XG4gICAgICAgIGNvbnN0IHRyYWNrUHJvZ3Jlc3MgPSAxMDA7XG5cbiAgICAgICAgaWYgKHRoaXMubGFiZWxzVmlld0VuYWJsZWQpIHtcbiAgICAgICAgICAgIC8vIENhbGMgdGlja3MgZGVwZW5kaW5nIG9uIHRoZSBsYWJlbHMgbGVuZ3RoO1xuICAgICAgICAgICAgdGlja0ludGVydmFsID0gKCh0cmFja1Byb2dyZXNzIC8gKHRoaXMubGFiZWxzLmxlbmd0aCAtIDEpICogMTApKSAvIDEwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdHJhY2tSYW5nZSA9IHRoaXMubWF4VmFsdWUgLSB0aGlzLm1pblZhbHVlO1xuICAgICAgICAgICAgdGlja0ludGVydmFsID0gdGhpcy5zdGVwID4gMSA/XG4gICAgICAgICAgICAgICAgKHRyYWNrUHJvZ3Jlc3MgLyAoKHRyYWNrUmFuZ2UgLyB0aGlzLnN0ZXApKSAqIDEwKSAvIDEwXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRpY2tzLm5hdGl2ZUVsZW1lbnQsICdzdHJva2UtZGFzaGFycmF5JywgYDAsICR7dGlja0ludGVydmFsICogTWF0aC5zcXJ0KDIpfSVgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRpY2tzLm5hdGl2ZUVsZW1lbnQsICd2aXNpYmlsaXR5JywgdGhpcy5jb250aW51b3VzIHx8IHRpY2tJbnRlcnZhbCA9PT0gbnVsbCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dTbGlkZXJJbmRpY2F0b3JzKCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2luZGljYXRvcnNUaW1lcikge1xuICAgICAgICAgICAgdGhpcy5faW5kaWNhdG9yc0Rlc3Ryb3llciQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuX2luZGljYXRvcnNUaW1lciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRodW1iVG8uc2hvd1RodW1iSW5kaWNhdG9ycygpO1xuICAgICAgICB0aGlzLmxhYmVsVG8uYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMudGh1bWJGcm9tKSB7XG4gICAgICAgICAgICB0aGlzLnRodW1iRnJvbS5zaG93VGh1bWJJbmRpY2F0b3JzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYWJlbEZyb20pIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWxGcm9tLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZVNsaWRlckluZGljYXRvcnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pbmRpY2F0b3JzVGltZXIgPSB0aW1lcih0aGlzLnRodW1iTGFiZWxWaXNpYmlsaXR5RHVyYXRpb24pO1xuICAgICAgICB0aGlzLl9pbmRpY2F0b3JzVGltZXIucGlwZSh0YWtlVW50aWwodGhpcy5faW5kaWNhdG9yc0Rlc3Ryb3llciQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50aHVtYlRvLmhpZGVUaHVtYkluZGljYXRvcnMoKTtcbiAgICAgICAgICAgIHRoaXMubGFiZWxUby5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnRodW1iRnJvbSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGh1bWJGcm9tLmhpZGVUaHVtYkluZGljYXRvcnMoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMubGFiZWxGcm9tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbEZyb20uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9nZ2xlU2xpZGVySW5kaWNhdG9ycygpIHtcbiAgICAgICAgdGhpcy5zaG93U2xpZGVySW5kaWNhdG9ycygpO1xuICAgICAgICB0aGlzLmhpZGVTbGlkZXJJbmRpY2F0b3JzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VUaHVtYkZvY3VzYWJsZVN0YXRlKHN0YXRlOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc3RhdGUgPyAtMSA6IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy50aHVtYkZyb20udGFiaW5kZXggPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGh1bWJUby50YWJpbmRleCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZXN0VG8oZ29hbDogbnVtYmVyLCBwb3NpdGlvbnM6IG51bWJlcltdKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9ucy5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiAoTWF0aC5hYnMoZ29hbCAtIGN1cnJlbnQpIDwgTWF0aC5hYnMoZ29hbCAtIHByZXZpb3VzKSA/IGN1cnJlbnQgOiBwcmV2aW91cykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsdWVUb0ZyYWN0aW9uKHZhbHVlOiBudW1iZXIsIHBNaW4gPSB0aGlzLl9wTWluLCBwTWF4ID0gdGhpcy5fcE1heCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUluUmFuZ2UoKHZhbHVlIC0gdGhpcy5taW5WYWx1ZSkgLyAodGhpcy5tYXhWYWx1ZSAtIHRoaXMubWluVmFsdWUpLCBwTWluLCBwTWF4KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTnVsbGlzaEJ1dE5vdFplcm8odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXZhbHVlICYmIHZhbHVlICE9PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBOb3JtYWxpetC1IHRoZSB2YWx1ZSB3aGVuIHR3by13YXkgZGF0YSBiaW5kIGlzIHVzZWQgYW5kIHtAbGluayB0aGlzLnN0ZXB9IGlzIHNldC5cbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cbiAgICBwcml2YXRlIG5vcm1hbGl6ZUJ5U3RlcCh2YWx1ZTogSVJhbmdlU2xpZGVyVmFsdWUgfCBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgbG93ZXI6ICh2YWx1ZSBhcyBJUmFuZ2VTbGlkZXJWYWx1ZSkubG93ZXIgLSAoKHZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKS5sb3dlciAlIHRoaXMuc3RlcCksXG4gICAgICAgICAgICAgICAgdXBwZXI6ICh2YWx1ZSBhcyBJUmFuZ2VTbGlkZXJWYWx1ZSkudXBwZXIgLSAoKHZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKS51cHBlciAlIHRoaXMuc3RlcClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9ICh2YWx1ZSBhcyBudW1iZXIpIC0gKCh2YWx1ZSBhcyBudW1iZXIpICUgdGhpcy5zdGVwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVHJhY2soKSB7XG4gICAgICAgIGNvbnN0IGZyb21Qb3NpdGlvbiA9IHRoaXMudmFsdWVUb0ZyYWN0aW9uKHRoaXMubG93ZXJWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHRvUG9zaXRpb24gPSB0aGlzLnZhbHVlVG9GcmFjdGlvbih0aGlzLnVwcGVyVmFsdWUpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbkdhcCA9IHRvUG9zaXRpb24gLSBmcm9tUG9zaXRpb247XG5cbiAgICAgICAgbGV0IHRyYWNrTGVmdEluZGVudGlvbiA9IGZyb21Qb3NpdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uR2FwKSB7XG4gICAgICAgICAgICAgICAgdHJhY2tMZWZ0SW5kZW50aW9uID0gTWF0aC5yb3VuZCgoMSAvIHBvc2l0aW9uR2FwICogZnJvbVBvc2l0aW9uKSAqIDEwMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyYWNrTGVmdEluZGVudGlvbiA9IHRoaXMuX2Rpci5ydGwgPyAtdHJhY2tMZWZ0SW5kZW50aW9uIDogdHJhY2tMZWZ0SW5kZW50aW9uO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRyYWNrUmVmLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2Zvcm0nLCBgc2NhbGVYKCR7cG9zaXRpb25HYXB9KSB0cmFuc2xhdGVYKCR7dHJhY2tMZWZ0SW5kZW50aW9ufSUpYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudHJhY2tSZWYubmF0aXZlRWxlbWVudCwgJ3RyYW5zZm9ybScsIGBzY2FsZVgoJHt0b1Bvc2l0aW9ufSlgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9FdmVudHModGh1bWI6IElneFNsaWRlclRodW1iQ29tcG9uZW50KSB7XG4gICAgICAgIGlmICghdGh1bWIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRodW1iLnRodW1iVmFsdWVDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlcih0aHVtYikpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLnRodW1iQ2hhbmdlZCh2YWx1ZSwgdGh1bWIudHlwZSkpO1xuXG4gICAgICAgIHRodW1iLnRodW1iQmx1clxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVyKHRodW1iKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5zdWJzY3JpYmVyKHRodW1iOiBJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gbWVyZ2UodGhpcy5fZGVzdHJveWVyJCwgdGh1bWIuZGVzdHJveSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNWYWx1ZUNoYW5nZWQob2xkVmFsdWUpIHtcbiAgICAgICAgY29uc3QgaXNTbGlkZXJXaXRoRGlmZmVyZW50VmFsdWU6IGJvb2xlYW4gPSAhdGhpcy5pc1JhbmdlICYmIG9sZFZhbHVlICE9PSB0aGlzLnZhbHVlO1xuICAgICAgICBjb25zdCBpc1JhbmdlV2l0aE9uZURpZmZlcmVudFZhbHVlOiBib29sZWFuID0gdGhpcy5pc1JhbmdlICYmXG4gICAgICAgICAgICAoKG9sZFZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKS5sb3dlciAhPT0gKHRoaXMudmFsdWUgYXMgSVJhbmdlU2xpZGVyVmFsdWUpLmxvd2VyIHx8XG4gICAgICAgICAgICAgICAgKG9sZFZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKS51cHBlciAhPT0gKHRoaXMudmFsdWUgYXMgSVJhbmdlU2xpZGVyVmFsdWUpLnVwcGVyKTtcblxuICAgICAgICByZXR1cm4gaXNTbGlkZXJXaXRoRGlmZmVyZW50VmFsdWUgfHwgaXNSYW5nZVdpdGhPbmVEaWZmZXJlbnRWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRWYWx1ZUNoYW5nZShvbGRWYWx1ZTogbnVtYmVyIHwgSVJhbmdlU2xpZGVyVmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHsgb2xkVmFsdWUsIHZhbHVlOiB0aGlzLnZhbHVlIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cblxuIiwiPGlneC10aWNrc1xuICAgICpuZ0lmPVwic2hvd1RpY2tzICYmIHNob3dUb3BUaWNrc1wiXG4gICAgdGlja3NPcmllbnRhdGlvbj1cInRvcFwiXG4gICAgW3ByaW1hcnlUaWNrc109XCJwcmltYXJ5VGlja3NcIlxuICAgIFtzZWNvbmRhcnlUaWNrc109XCJzZWNvbmRhcnlUaWNrc1wiXG4gICAgW3ByaW1hcnlUaWNrTGFiZWxzXT1cInByaW1hcnlUaWNrTGFiZWxzXCJcbiAgICBbc2Vjb25kYXJ5VGlja0xhYmVsc109XCJzZWNvbmRhcnlUaWNrTGFiZWxzXCJcbiAgICBbdGlja0xhYmVsc09yaWVudGF0aW9uXT1cInRpY2tMYWJlbHNPcmllbnRhdGlvblwiXG4gICAgW2xhYmVsc1ZpZXdFbmFibGVkXT1cImxhYmVsc1ZpZXdFbmFibGVkXCJcbiAgICBbbGFiZWxzXT1cImxhYmVscyB8IHNwcmVhZFRpY2tMYWJlbHM6c2Vjb25kYXJ5VGlja3NcIlxuICAgIFt0aWNrTGFiZWxUZW1wbGF0ZVJlZl09XCJ0aWNrTGFiZWxUZW1wbGF0ZVJlZlwiXG4gICAgW21pblZhbHVlXT1cIm1pblZhbHVlXCJcbiAgICBbbWF4VmFsdWVdPVwibWF4VmFsdWVcIj5cbjwvaWd4LXRpY2tzPlxuPGRpdiBjbGFzcz1cImlneC1zbGlkZXJfX3RyYWNrXCI+XG4gICAgPGRpdiBjbGFzcz1cImlneC1zbGlkZXJfX3RyYWNrLWluYWN0aXZlXCI+PC9kaXY+XG4gICAgPGRpdiAjdHJhY2sgY2xhc3M9XCJpZ3gtc2xpZGVyX190cmFjay1maWxsXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlneC1zbGlkZXJfX3RyYWNrLXN0ZXBzXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPlxuICAgICAgICAgIDxsaW5lICN0aWNrcyB4MT1cIjBcIiB5MT1cIjJcIiB4Mj1cIjEwMCVcIiB5Mj1cIjJcIj48L2xpbmU+XG4gICAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiaWd4LXNsaWRlcl9fdGh1bWJzXCI+XG4gICAgPGlneC10aHVtYi1sYWJlbFxuICAgICAgICAqbmdJZj1cImlzUmFuZ2VcIlxuICAgICAgICB0eXBlPVwiZnJvbVwiXG4gICAgICAgIFt2YWx1ZV09XCJsb3dlckxhYmVsXCJcbiAgICAgICAgW3RlbXBsYXRlUmVmXT1cInRodW1iRnJvbVRlbXBsYXRlUmVmXCJcbiAgICAgICAgW2NvbnRpbnVvdXNdPVwiY29udGludW91c1wiXG4gICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICAgICAgICBbZGVhY3RpdmVTdGF0ZV09XCJkZWFjdGl2YXRlVGh1bWJMYWJlbFwiXG4gICAgICAgIFt0aHVtYl09XCJ0aHVtYkZyb21cIj48L2lneC10aHVtYi1sYWJlbD5cblxuICAgIDxpZ3gtdGh1bWJcbiAgICAgICAgKm5nSWY9XCJpc1JhbmdlXCJcbiAgICAgICAgI3RodW1iRnJvbVxuICAgICAgICB0eXBlPVwiZnJvbVwiXG4gICAgICAgIFt2YWx1ZV09XCJsb3dlckxhYmVsXCJcbiAgICAgICAgW21pbl09XCJtaW5WYWx1ZVwiXG4gICAgICAgIFttYXhdPVwibWF4VmFsdWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbY29udGludW91c109XCJjb250aW51b3VzXCJcbiAgICAgICAgW29uUGFuXT1cIm9uUGFuXCJcbiAgICAgICAgW3N0ZXBEaXN0YW5jZV09XCJzdGVwRGlzdGFuY2VcIlxuICAgICAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgW3RlbXBsYXRlUmVmXT1cInRodW1iRnJvbVRlbXBsYXRlUmVmXCJcbiAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgICAgIFtsYWJlbHNdPVwibGFiZWxzXCJcbiAgICAgICAgKHRodW1iQ2hhbmdlKT1cIm9uVGh1bWJDaGFuZ2UoKVwiXG4gICAgICAgIChob3ZlckNoYW5nZSk9XCJvbkhvdmVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZGVhY3RpdmVTdGF0ZV09XCJkZWFjdGl2YXRlVGh1bWJMYWJlbFwiXG4gICAgICAgIFt0aHVtYkxhYmVsVmlzaWJpbGl0eUR1cmF0aW9uXT1cInRodW1iTGFiZWxWaXNpYmlsaXR5RHVyYXRpb25cIj48L2lneC10aHVtYj5cblxuICAgIDxpZ3gtdGh1bWItbGFiZWxcbiAgICAgICAgW3ZhbHVlXT1cInVwcGVyTGFiZWxcIlxuICAgICAgICB0eXBlPVwidG9cIlxuICAgICAgICBbdGVtcGxhdGVSZWZdPVwidGh1bWJUb1RlbXBsYXRlUmVmXCJcbiAgICAgICAgW2NvbnRpbnVvdXNdPVwiY29udGludW91c1wiXG4gICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICAgICAgICBbZGVhY3RpdmVTdGF0ZV09XCJkZWFjdGl2YXRlVGh1bWJMYWJlbFwiXG4gICAgICAgIFt0aHVtYl09XCJ0aHVtYlRvXCI+PC9pZ3gtdGh1bWItbGFiZWw+XG5cbiAgICA8aWd4LXRodW1iXG4gICAgICAgICN0aHVtYlRvXG4gICAgICAgIHR5cGU9XCJ0b1wiXG4gICAgICAgIFt2YWx1ZV09XCJ1cHBlckxhYmVsXCJcbiAgICAgICAgW21pbl09XCJtaW5WYWx1ZVwiXG4gICAgICAgIFttYXhdPVwibWF4VmFsdWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbY29udGludW91c109XCJjb250aW51b3VzXCJcbiAgICAgICAgW29uUGFuXT1cIm9uUGFuXCJcbiAgICAgICAgW3N0ZXBEaXN0YW5jZV09XCJzdGVwRGlzdGFuY2VcIlxuICAgICAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgW3RlbXBsYXRlUmVmXT1cInRodW1iVG9UZW1wbGF0ZVJlZlwiXG4gICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICAgICAgICBbbGFiZWxzXT1cImxhYmVsc1wiXG4gICAgICAgICh0aHVtYkNoYW5nZSk9XCJvblRodW1iQ2hhbmdlKClcIlxuICAgICAgICAoaG92ZXJDaGFuZ2UpPVwib25Ib3ZlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2RlYWN0aXZlU3RhdGVdPVwiZGVhY3RpdmF0ZVRodW1iTGFiZWxcIlxuICAgICAgICBbdGh1bWJMYWJlbFZpc2liaWxpdHlEdXJhdGlvbl09XCJ0aHVtYkxhYmVsVmlzaWJpbGl0eUR1cmF0aW9uXCI+PC9pZ3gtdGh1bWI+XG48L2Rpdj5cbjxpZ3gtdGlja3NcbiAgICAqbmdJZj1cInNob3dUaWNrcyAmJiBzaG93Qm90dG9tVGlja3NcIlxuICAgIHRpY2tzT3JpZW50YXRpb249XCJib3R0b21cIlxuICAgIFtwcmltYXJ5VGlja3NdPVwicHJpbWFyeVRpY2tzXCJcbiAgICBbc2Vjb25kYXJ5VGlja3NdPVwic2Vjb25kYXJ5VGlja3NcIlxuICAgIFtwcmltYXJ5VGlja0xhYmVsc109XCJwcmltYXJ5VGlja0xhYmVsc1wiXG4gICAgW3NlY29uZGFyeVRpY2tMYWJlbHNdPVwic2Vjb25kYXJ5VGlja0xhYmVsc1wiXG4gICAgW3RpY2tMYWJlbHNPcmllbnRhdGlvbl09XCJ0aWNrTGFiZWxzT3JpZW50YXRpb25cIlxuICAgIFtsYWJlbHNWaWV3RW5hYmxlZF09XCJsYWJlbHNWaWV3RW5hYmxlZFwiXG4gICAgW2xhYmVsc109XCJsYWJlbHMgfCBzcHJlYWRUaWNrTGFiZWxzOnNlY29uZGFyeVRpY2tzXCJcbiAgICBbdGlja0xhYmVsVGVtcGxhdGVSZWZdPVwidGlja0xhYmVsVGVtcGxhdGVSZWZcIlxuICAgIFttaW5WYWx1ZV09XCJtaW5WYWx1ZVwiXG4gICAgW21heFZhbHVlXT1cIm1heFZhbHVlXCI+XG48L2lneC10aWNrcz5cbiJdfQ==
1257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQ2lELFNBQVMsRUFBRSxZQUFZLEVBQWMsWUFBWSxFQUNyRyxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBd0MsTUFBTSxFQUFFLFNBQVMsRUFBNEIsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQzlLLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFDSCxhQUFhLEVBQUUsNkJBQTZCLEVBQzVDLDJCQUEyQixFQUFFLDZCQUE2QixFQUFrRCxZQUFZLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQ3BLLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0s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V0FBVztzQkFEbEIsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBib29sZWFuQXR0cmlidXRlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsIGZyb21FdmVudCwgaW50ZXJ2YWwsIG1lcmdlLCBub29wLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0aHJvdHRsZSwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRWRpdG9yUHJvdmlkZXIgfSBmcm9tICcuLi9jb3JlL2VkaXQtcHJvdmlkZXInO1xuaW1wb3J0IHsgcmVzaXplT2JzZXJ2YWJsZSB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4RGlyZWN0aW9uYWxpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9kaXJlY3Rpb24vZGlyZWN0aW9uYWxpdHknO1xuaW1wb3J0IHsgSWd4VGh1bWJMYWJlbENvbXBvbmVudCB9IGZyb20gJy4vbGFiZWwvdGh1bWItbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgSWd4U2xpZGVyVHlwZSwgSWd4VGh1bWJGcm9tVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgSWd4VGh1bWJUb1RlbXBsYXRlRGlyZWN0aXZlLCBJZ3hUaWNrTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSwgSVJhbmdlU2xpZGVyVmFsdWUsIElTbGlkZXJWYWx1ZUNoYW5nZUV2ZW50QXJncywgU2xpZGVySGFuZGxlLCBUaWNrTGFiZWxzT3JpZW50YXRpb24sIFRpY2tzT3JpZW50YXRpb25cbn0gZnJvbSAnLi9zbGlkZXIuY29tbW9uJztcbmltcG9ydCB7IElneFNsaWRlclRodW1iQ29tcG9uZW50IH0gZnJvbSAnLi90aHVtYi90aHVtYi1zbGlkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneFRpY2tMYWJlbHNQaXBlIH0gZnJvbSAnLi90aWNrcy90aWNrLnBpcGUnO1xuaW1wb3J0IHsgSWd4VGlja3NDb21wb25lbnQgfSBmcm9tICcuL3RpY2tzL3RpY2tzLmNvbXBvbmVudCc7XG5cbmxldCBORVhUX0lEID0gMDtcblxuLyoqXG4gKiAqKklnbml0ZSBVSSBmb3IgQW5ndWxhciBTbGlkZXIqKiAtXG4gKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cuaW5mcmFnaXN0aWNzLmNvbS9wcm9kdWN0cy9pZ25pdGUtdWktYW5ndWxhci9hbmd1bGFyL2NvbXBvbmVudHMvc2xpZGVyL3NsaWRlcilcbiAqXG4gKiBUaGUgSWduaXRlIFVJIFNsaWRlciBhbGxvd3Mgc2VsZWN0aW9uIGluIGEgZ2l2ZW4gcmFuZ2UgYnkgbW92aW5nIHRoZSB0aHVtYiBhbG9uZyB0aGUgdHJhY2suIFRoZSB0cmFja1xuICogY2FuIGJlIGRlZmluZWQgYXMgY29udGludW91cyBvciBzdGVwcGVkLCBhbmQgeW91IGNhbiBjaG9vc2UgYmV0d2VlbiBzaW5nbGUgYW5kIHJhbmdlIHNsaWRlciB0eXBlcy5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgaHRtbFxuICogPGlneC1zbGlkZXIgaWQ9XCJzbGlkZXJcIlxuICogICAgICAgICAgICBbbWluVmFsdWVdPVwiMFwiIFttYXhWYWx1ZV09XCIxMDBcIlxuICogICAgICAgICAgICBbY29udGludW91c109dHJ1ZSBbKG5nTW9kZWwpXT1cInZvbHVtZVwiPlxuICogPC9pZ3gtc2xpZGVyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBJZ3hTbGlkZXJDb21wb25lbnQsIG11bHRpOiB0cnVlIH1dLFxuICAgIHNlbGVjdG9yOiAnaWd4LXNsaWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICdzbGlkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIElneFRpY2tzQ29tcG9uZW50LCBJZ3hUaHVtYkxhYmVsQ29tcG9uZW50LCBJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudCwgSWd4VGlja0xhYmVsc1BpcGVdXG59KVxuZXhwb3J0IGNsYXNzIElneFNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgRWRpdG9yUHJvdmlkZXIsXG4gICAgT25Jbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCB0aHVtYkZyb20oKTogSWd4U2xpZGVyVGh1bWJDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy50aHVtYnMuZmluZCh0aHVtYiA9PiB0aHVtYi50eXBlID09PSBTbGlkZXJIYW5kbGUuRlJPTSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdGh1bWJUbygpOiBJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRodW1icy5maW5kKHRodW1iID0+IHRodW1iLnR5cGUgPT09IFNsaWRlckhhbmRsZS5UTyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgbGFiZWxGcm9tKCk6IElneFRodW1iTGFiZWxDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5sYWJlbFJlZnMuZmluZChsYWJlbCA9PiBsYWJlbC50eXBlID09PSBTbGlkZXJIYW5kbGUuRlJPTSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgbGFiZWxUbygpOiBJZ3hUaHVtYkxhYmVsQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxSZWZzLmZpbmQobGFiZWwgPT4gbGFiZWwudHlwZSA9PT0gU2xpZGVySGFuZGxlLlRPKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgndHJhY2snLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyB0cmFja1JlZjogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFRodW1iRnJvbVRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIHRodW1iRnJvbVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4VGh1bWJUb1RlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIHRodW1iVG9UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFRpY2tMYWJlbFRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIHRpY2tMYWJlbFRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXNsaWRlcicpXG4gICAgcHVibGljIHNsaWVyQ2xhc3MgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlLlxuICAgICAqIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbaWRdPVwiJ2lneC1zbGlkZXItMzInXCIgWyhuZ01vZGVsKV09XCJ0YXNrLnBlcmNlbnRDb21wbGV0ZWRcIiBbc3RlcF09XCI1XCIgW2xvd2VyQm91bmRdPVwiMjBcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1zbGlkZXItJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGR1cmF0aW9uIHZpc2liaWxpdHkgb2YgdGh1bWJzIGxhYmVscy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNzUwIG1pbGxpc2Vjb25kcy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgI3NsaWRlciBbdGh1bWJMYWJlbFZpc2liaWxpdHlEdXJhdGlvbl09XCIzMDAwXCIgWyhuZ01vZGVsKV09XCJ0YXNrLnBlcmNlbnRDb21wbGV0ZWRcIiBbc3RlcF09XCI1XCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGh1bWJMYWJlbFZpc2liaWxpdHlEdXJhdGlvbiA9IDc1MDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1zbGlkZXItLWRpc2FibGVkJylcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHR5cGUgb2YgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIFRoZSBzbGlkZXIgY2FuIGJlIElneFNsaWRlclR5cGUuU0xJREVSKGRlZmF1bHQpIG9yIElneFNsaWRlclR5cGUuUkFOR0UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXIyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgdHlwZSA9IHRoaXMuc2xpZGVyLnR5cGU7XG4gICAgICogfVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSBhcyBJZ3hTbGlkZXJUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHR5cGUgb2YgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIFRoZSBzbGlkZXIgY2FuIGJlIElneFNsaWRlclR5cGUuU0xJREVSKGRlZmF1bHQpIG9yIElneFNsaWRlclR5cGUuUkFOR0UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHNsaWRlclR5cGU6IElneFNsaWRlclR5cGUgPSBJZ3hTbGlkZXJUeXBlLlJBTkdFO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciAjc2xpZGVyMiBbdHlwZV09XCJzbGlkZXJUeXBlXCIgWyhuZ01vZGVsKV09XCJyYW5nZVZhbHVlXCIgW21pblZhbHVlXT1cIjBcIiBbbWF4VmFsdWVdPVwiMTAwXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCB0eXBlKHR5cGU6IElneFNsaWRlclR5cGUpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IElneFNsaWRlclR5cGUuU0xJREVSKSB7XG4gICAgICAgICAgICB0aGlzLmxvd2VyVmFsdWUgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc1ZpZXdJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgYGxhYmVsVmlld2AsIGJ5IGFjY2VwdGluZyBhIGNvbGxlY3Rpb24gb2YgcHJpbWl0aXZlIHZhbHVlcyB3aXRoIG1vcmUgdGhhbiBvbmUgZWxlbWVudC5cbiAgICAgKiBFYWNoIGVsZW1lbnQgd2lsbCBiZSBlcXVhbGx5IHNwcmVhZCBvdmVyIHRoZSBzbGlkZXIgYW5kIGl0IHdpbGwgc2VydmUgYXMgYSB0aHVtYiBsYWJlbC5cbiAgICAgKiBPbmNlIHRoZSBwcm9wZXJ0eSBpcyBzZXQsIGl0IHdpbGwgcHJlY2VuZGVuY2Ugb3ZlciB7QGxpbmsgbWF4VmFsdWV9LCB7QGxpbmsgbWluVmFsdWV9LCB7QGxpbmsgc3RlcH0uXG4gICAgICogVGhpcyBtZWFucyB0aGF0IHRoZSBtYW5pcHVsYXRpb24gZm9yIHRob3NlIHByb3BlcnRpZXMgd29uJ3QgYmUgYWxsb3dlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbGFiZWxzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWxzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgbGFiZWxzKGxhYmVsczogQXJyYXk8bnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ+KSB7XG4gICAgICAgIHRoaXMuX2xhYmVscyA9IGxhYmVscztcblxuICAgICAgICB0aGlzLl9wTWF4ID0gdGhpcy52YWx1ZVRvRnJhY3Rpb24odGhpcy51cHBlckJvdW5kLCAwLCAxKTtcbiAgICAgICAgdGhpcy5fcE1pbiA9IHRoaXMudmFsdWVUb0ZyYWN0aW9uKHRoaXMubG93ZXJCb3VuZCwgMCwgMSk7XG5cbiAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKTtcblxuICAgICAgICBpZiAodGhpcy5faGFzVmlld0luaXQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcERpc3RhbmNlID0gdGhpcy5jYWxjdWxhdGVTdGVwRGlzdGFuY2UoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0VGlja0ludGVydmFsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBjb250ZXh0IGNvcnJlc3BvbmRpbmdcbiAgICAgKiB0byB7QGxpbmsgSWd4VGh1bWJGcm9tVGVtcGxhdGVEaXJlY3RpdmV9IGFuZCB7QGxpbmsgSWd4VGh1bWJUb1RlbXBsYXRlRGlyZWN0aXZlfSB0ZW1wbGF0ZXMuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcmV0dXJuIHtcbiAgICAgKiAgJGltcGxpY2l0IC8vIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBsYWJlbCxcbiAgICAgKiAgbGFiZWxzIC8vIHJldHVybnMgdGhlIGxhYmVscyBjb2xsZWN0aW9uIHRoZSB1c2VyIGhhcyBwYXNzZWQuXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29udGV4dCgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgbGFiZWxzOiB0aGlzLmxhYmVsc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGluY3JlbWVudGFsL2RlY3JlbWVudGFsIHN0ZXAgb2YgdGhlIHZhbHVlIHdoZW4gZHJhZ2dpbmcgdGhlIHRodW1iLlxuICAgICAqIFRoZSBkZWZhdWx0IHN0ZXAgaXMgMSwgYW5kIHN0ZXAgc2hvdWxkIG5vdCBiZSBsZXNzIG9yIGVxdWFsIHRoYW4gMC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgI3NsaWRlciBbKG5nTW9kZWwpXT1cInRhc2sucGVyY2VudENvbXBsZXRlZFwiIFtzdGVwXT1cIjVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgc3RlcChzdGVwOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fc3RlcCA9IHN0ZXA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc1ZpZXdJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXBEaXN0YW5jZSA9IHRoaXMuY2FsY3VsYXRlU3RlcERpc3RhbmNlKCk7XG4gICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZUJ5U3RlcCh0aGlzLl92YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRoaXMuX3ZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCk7XG4gICAgICAgICAgICB0aGlzLnNldFRpY2tJbnRlcnZhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaW5jcmVtZW50YWwvZGVjcmVtZW50YWwgZHJhZ2dpbmcgc3RlcCBvZiB0aGUge0BsaW5rIElneFNsaWRlckNvbXBvbmVudH0uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXIyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgc3RlcCA9IHRoaXMuc2xpZGVyLnN0ZXA7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc3RlcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxzVmlld0VuYWJsZWQgPyAxIDogdGhpcy5fc3RlcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSB7QGxpbmsgSWd4U2xpZGVyQ29tcG9uZW50fSBpcyBkaXNhYmxlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlcjJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCBpc0Rpc2FibGVkID0gdGhpcy5zbGlkZXIuZGlzYWJsZWQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgY29tcG9uZW50LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciAjc2xpZGVyIFtkaXNhYmxlZF09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJ0YXNrLnBlcmNlbnRDb21wbGV0ZWRcIiBbc3RlcF09XCI1XCIgW2xvd2VyQm91bmRdPVwiMjBcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGRpc2FibGVkKGRpc2FibGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlO1xuXG4gICAgICAgIGlmICh0aGlzLl9oYXNWaWV3SW5pdCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VUaHVtYkZvY3VzYWJsZVN0YXRlKGRpc2FibGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUge0BsaW5rIElneFNsaWRlckNvbXBvbmVudH0gaXMgc2V0IGFzIGNvbnRpbnVvdXMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXIyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgY29udGludW91cyA9IHRoaXMuc2xpZGVyLmNvbnRpbnVvdXM7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBnZXQgY29udGludW91cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRpbnVvdXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUge0BsaW5rIElneFNsaWRlckNvbXBvbmVudH0gYXMgY29udGludW91cy5cbiAgICAgKiBCeSBkZWZhdWx0IGlzIGNvbnNpZGVyZWQgdGhhdCB0aGUge0BsaW5rIElneFNsaWRlckNvbXBvbmVudH0gaXMgZGlzY3JldGUuXG4gICAgICogRGlzY3JldGUge0BsaW5rIElneFNsaWRlckNvbXBvbmVudH0gc2xpZGVyIGhhcyBzdGVwIGluZGljYXRvcnMgb3ZlciB0aGUgdHJhY2sgYW5kIHZpc2libGUgdGh1bWIgbGFiZWxzIGR1cmluZyBpbnRlcmFjdGlvbi5cbiAgICAgKiBDb250aW51b3VzIHtAbGluayBJZ3hTbGlkZXJDb21wb25lbnR9IGRvZXMgbm90IGhhdmUgdGlja3MgYW5kIGRvZXMgbm90IHNob3cgYnViYmxlIGxhYmVscyBmb3IgdmFsdWVzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciAjc2xpZGVyIFtjb250aW51b3VzXT1cIid0cnVlJ1wiIFsobmdNb2RlbCldPVwidGFzay5wZXJjZW50Q29tcGxldGVkXCIgW3N0ZXBdPVwiNVwiIFtsb3dlckJvdW5kXT1cIjIwXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBjb250aW51b3VzKGNvbnRpbnVvdXM6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fY29udGludW91cyA9IGNvbnRpbnVvdXM7XG4gICAgICAgIGlmICh0aGlzLl9oYXNWaWV3SW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zZXRUaWNrSW50ZXJ2YWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1pbmltYWwgZGlzcGxheWVkIHRyYWNrIHZhbHVlIG9mIHRoZSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIEBWaWV3Q2hpbGQoXCJzbGlkZXIyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgc2xpZGVyTWluID0gdGhpcy5zbGlkZXIubWluVmFsdWU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbWluVmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMubGFiZWxzVmlld0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX21pblZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1pbmltYWwgZGlzcGxheWVkIHRyYWNrIHZhbHVlIGZvciB0aGUgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogVGhlIGRlZmF1bHQgbWluaW1hbCB2YWx1ZSBpcyAwLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbdHlwZV09XCJzbGlkZXJUeXBlXCIgW21pblZhbHVlXT1cIjU2XCIgW21heFZhbHVlXT1cIjEwMFwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtaW5WYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSA+PSB0aGlzLm1heFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9taW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID4gdGhpcy5fdXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVVcHBlckJvdW5kQW5kTWF4VHJhdmVsWm9uZSgpO1xuICAgICAgICAgICAgdGhpcy5sb3dlckJvdW5kID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWZyZXNoIG1pbiB0cmF2ZWwgem9uZSBsaW1pdC5cbiAgICAgICAgdGhpcy5fcE1pbiA9IDA7XG4gICAgICAgIC8vIFJlY2FsY3VsYXRlIHN0ZXAgZGlzdGFuY2UuXG4gICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCk7XG4gICAgICAgIGlmICh0aGlzLl9oYXNWaWV3SW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zdGVwRGlzdGFuY2UgPSB0aGlzLmNhbGN1bGF0ZVN0ZXBEaXN0YW5jZSgpO1xuICAgICAgICAgICAgdGhpcy5zZXRUaWNrSW50ZXJ2YWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gZGlzcGxheWVkIHRyYWNrIHZhbHVlIGZvciB0aGUge0BsaW5rIElneFNsaWRlckNvbXBvbmVudH0uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCBzbGlkZXJNYXggPSB0aGlzLnNsaWRlci5tYXhWYWx1ZTtcbiAgICAgKiB9XG4gICAgICogIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbWF4VmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxzVmlld0VuYWJsZWQgP1xuICAgICAgICAgICAgdGhpcy5sYWJlbHMubGVuZ3RoIC0gMSA6XG4gICAgICAgICAgICB0aGlzLl9tYXhWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXhpbWFsIGRpc3BsYXllZCB0cmFjayB2YWx1ZSBmb3IgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIFRoZSBkZWZhdWx0IG1heGltdW0gdmFsdWUgaXMgMTAwLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbdHlwZV09XCJzbGlkZXJUeXBlXCIgW21pblZhbHVlXT1cIjU2XCIgW21heFZhbHVlXT1cIjI1NlwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtYXhWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSA8PSB0aGlzLl9taW5WYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbWF4VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA8IHRoaXMuX2xvd2VyQm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG93ZXJCb3VuZEFuZE1pblRyYXZlbFpvbmUoKTtcbiAgICAgICAgICAgIHRoaXMudXBwZXJCb3VuZCA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVmcmVzaCBtYXggdHJhdmVsIHpvbmUgbGltaXRzLlxuICAgICAgICB0aGlzLl9wTWF4ID0gMTtcbiAgICAgICAgLy8gcmVjYWxjdWxhdGUgc3RlcCBkaXN0YW5jZS5cbiAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKTtcbiAgICAgICAgaWYgKHRoaXMuX2hhc1ZpZXdJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXBEaXN0YW5jZSA9IHRoaXMuY2FsY3VsYXRlU3RlcERpc3RhbmNlKCk7XG4gICAgICAgICAgICB0aGlzLnNldFRpY2tJbnRlcnZhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbG93ZXIgYm91bmRhcnkgb2Ygc2V0dGFibGUgdmFsdWVzIG9mIHRoZSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBJZiBub3Qgc2V0LCB3aWxsIHJldHVybiBgbWluVmFsdWVgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgc2xpZGVyTG93Qm91bmQgPSB0aGlzLnNsaWRlci5sb3dlckJvdW5kO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxvd2VyQm91bmQoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4odGhpcy5fbG93ZXJCb3VuZCkgJiYgdGhpcy5fbG93ZXJCb3VuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUluUmFuZ2UodGhpcy5fbG93ZXJCb3VuZCwgdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5taW5WYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBsb3dlciBib3VuZGFyeSBvZiBzZXR0YWJsZSB2YWx1ZXMgb2YgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIElmIG5vdCBzZXQgaXMgdGhlIHNhbWUgYXMgbWluIHZhbHVlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbc3RlcF09XCI1XCIgW2xvd2VyQm91bmRdPVwiMjBcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbG93ZXJCb3VuZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSA+PSB0aGlzLnVwcGVyQm91bmQgfHwgKHRoaXMubGFiZWxzVmlld0VuYWJsZWQgJiYgdmFsdWUgPCAwKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG93ZXJCb3VuZCA9IHRoaXMudmFsdWVJblJhbmdlKHZhbHVlLCB0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlKTtcblxuICAgICAgICAvLyBSZWZyZXNoIG1pbiB0cmF2ZWwgem9uZS5cbiAgICAgICAgdGhpcy5fcE1pbiA9IHRoaXMudmFsdWVUb0ZyYWN0aW9uKHRoaXMuX2xvd2VyQm91bmQsIDAsIDEpO1xuICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHVwcGVyIGJvdW5kYXJ5IG9mIHNldHRhYmxlIHZhbHVlcyBvZiB0aGUgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogSWYgbm90IHNldCwgd2lsbCByZXR1cm4gYG1heFZhbHVlYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBzbGlkZXJVcEJvdW5kID0gdGhpcy5zbGlkZXIudXBwZXJCb3VuZDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCB1cHBlckJvdW5kKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKHRoaXMuX3VwcGVyQm91bmQpICYmIHRoaXMuX3VwcGVyQm91bmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVJblJhbmdlKHRoaXMuX3VwcGVyQm91bmQsIHRoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWF4VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIElmIG5vdCBzZXQgaXMgdGhlIHNhbWUgYXMgbWF4IHZhbHVlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbc3RlcF09XCI1XCIgW3VwcGVyQm91bmRdPVwiMjBcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgdXBwZXJCb3VuZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSA8PSB0aGlzLmxvd2VyQm91bmQgfHwgKHRoaXMubGFiZWxzVmlld0VuYWJsZWQgJiYgdmFsdWUgPiB0aGlzLmxhYmVscy5sZW5ndGggLSAxKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXBwZXJCb3VuZCA9IHRoaXMudmFsdWVJblJhbmdlKHZhbHVlLCB0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlKTtcbiAgICAgICAgLy8gUmVmcmVzaCB0aW1lIHRyYXZlbCB6b25lLlxuICAgICAgICB0aGlzLl9wTWF4ID0gdGhpcy52YWx1ZVRvRnJhY3Rpb24odGhpcy5fdXBwZXJCb3VuZCwgMCwgMSk7XG4gICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2xpZGVyIHZhbHVlLiBJZiB0aGUgc2xpZGVyIGlzIG9mIHR5cGUge0BsaW5rIElneFNsaWRlclR5cGUuU0xJREVSfSB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgbnVtYmVyLlxuICAgICAqIElmIHRoZSBzbGlkZXIgdHlwZSBpcyB7QGxpbmsgSWd4U2xpZGVyVHlwZS5SQU5HRX0uXG4gICAgICogVGhlIHJldHVybmVkIHZhbHVlIHJlcHJlc2VudHMgYW4gb2JqZWN0IG9mIHtAbGluayBsb3dlclZhbHVlfSBhbmQge0BsaW5rIHVwcGVyVmFsdWV9LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyMlwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBwdWJsaWMgc2xpZGVyVmFsdWUoZXZlbnQpe1xuICAgICAqICAgICBsZXQgc2xpZGVyVmFsID0gdGhpcy5zbGlkZXIudmFsdWU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogbnVtYmVyIHwgSVJhbmdlU2xpZGVyVmFsdWUge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGxvd2VyOiB0aGlzLnZhbHVlSW5SYW5nZSh0aGlzLmxvd2VyVmFsdWUsIHRoaXMubG93ZXJCb3VuZCwgdGhpcy51cHBlckJvdW5kKSxcbiAgICAgICAgICAgICAgICB1cHBlcjogdGhpcy52YWx1ZUluUmFuZ2UodGhpcy51cHBlclZhbHVlLCB0aGlzLmxvd2VyQm91bmQsIHRoaXMudXBwZXJCb3VuZClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUluUmFuZ2UodGhpcy51cHBlclZhbHVlLCB0aGlzLmxvd2VyQm91bmQsIHRoaXMudXBwZXJCb3VuZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzbGlkZXIgdmFsdWUuXG4gICAgICogSWYgdGhlIHNsaWRlciBpcyBvZiB0eXBlIHtAbGluayBJZ3hTbGlkZXJUeXBlLlNMSURFUn0uXG4gICAgICogVGhlIGFyZ3VtZW50IGlzIG51bWJlci4gQnkgZGVmYXVsdCB0aGUge0BsaW5rIHZhbHVlfSBnZXRzIHRoZSB7QGxpbmsgbG93ZXJCb3VuZH0uXG4gICAgICogSWYgdGhlIHNsaWRlciB0eXBlIGlzIHtAbGluayBJZ3hTbGlkZXJUeXBlLlJBTkdFfSB0aGUgYXJndW1lbnRcbiAgICAgKiByZXByZXNlbnRzIGFuIG9iamVjdCBvZiB7QGxpbmsgbG93ZXJWYWx1ZX0gYW5kIHtAbGluayB1cHBlclZhbHVlfSBwcm9wZXJ0aWVzLlxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIG9iamVjdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHtAbGluayBsb3dlckJvdW5kfSBhbmQge0BsaW5rIHVwcGVyQm91bmR9IHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcmFuZ2VWYWx1ZSA9IHtcbiAgICAgKiAgIGxvd2VyOiAzMCxcbiAgICAgKiAgIHVwcGVyOiA2MFxuICAgICAqIH07XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIFt0eXBlXT1cInNsaWRlclR5cGVcIiBbKG5nTW9kZWwpXT1cInJhbmdlVmFsdWVcIiBbbWluVmFsdWVdPVwiNTZcIiBbbWF4VmFsdWVdPVwiMjU2XCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBudW1iZXIgfCBJUmFuZ2VTbGlkZXJWYWx1ZSkge1xuICAgICAgICB0aGlzLm5vcm1hbGl6ZUJ5U3RlcCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc1ZpZXdJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRoaXMuX3ZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIHByZXNlbnRlZCBwcmltYXJ5IHRpY2tzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBwcmltYXJ5VGlja3MgPSB0aGlzLnNsaWRlci5wcmltYXJ5VGlja3M7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHByaW1hcnlUaWNrcygpIHtcbiAgICAgICAgaWYgKHRoaXMubGFiZWxzVmlld0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcmltYXJ5VGlja3MgPSB0aGlzLmxhYmVscy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByaW1hcnlUaWNrcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcHJpbWFyeSB0aWNrcy4gSWYge0BsaW5rIEBsYWJlbHN9IGlzIGVuYWJsZWQsIHRoaXMgcHJvcGVydHkgd29uJ3QgZnVuY3Rpb24uXG4gICAgICogSW5zdGVkIGVuYWJsZSB0aWNrcyBieSB7QGxpbmsgc2hvd1RpY2tzfSBwcm9wZXJ0eS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5zbGlkZXIucHJpbWFyeVRpY2tzID0gNTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHByaW1hcnlUaWNrcyh2YWw6IG51bWJlcikge1xuICAgICAgICBpZiAodmFsIDw9IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ByaW1hcnlUaWNrcyA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIHByZXNlbnRlZCBzZWNvbmRhcnkgdGlja3MuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHNlY29uZGFyeVRpY2tzID0gdGhpcy5zbGlkZXIuc2Vjb25kYXJ5VGlja3M7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHNlY29uZGFyeVRpY2tzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Vjb25kYXJ5VGlja3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHNlY29uZGFyeSB0aWNrcy4gVGhlIHByb3BlcnR5IGZ1bmN0aW9ucyBldmVuIHdoZW4ge0BsaW5rIGxhYmVsc30gaXMgZW5hYmxlZCxcbiAgICAgKiBidXQgYWxsIHNlY29uZGFyeSB0aWNrcyB3b24ndCBwcmVzZW50IGFueSB0aWNrIGxhYmVscy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5zbGlkZXIuc2Vjb25kYXJ5VGlja3MgPSA1O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgc2Vjb25kYXJ5VGlja3ModmFsOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlY29uZGFyeVRpY2tzID0gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cvaGlkZSBzbGlkZXIgdGlja3NcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGllciBbc2hvd1RpY2tzXT1cInRydWVcIiBbcHJpbWFyeVRpY2tzXT1cIjVcIj48L2lneC1zbGllcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2hvd1RpY2tzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBzaG93L2hpZGUgcHJpbWFyeSB0aWNrIGxhYmVsc1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbcHJpbWFyeVRpY2tzXT1cIjVcIiBbcHJpbWFyeVRpY2tMYWJlbHNdPVwiZmFsc2VcIj48L2lneC1zbGlkZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHByaW1hcnlUaWNrTGFiZWxzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIHNob3cvaGlkZSBzZWNvbmRhcnkgdGljayBsYWJlbHNcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgW3NlY29uZGFyeVRpY2tzXT1cIjVcIiBbc2Vjb25kYXJ5VGlja0xhYmVsc109XCJmYWxzZVwiPjwvaWd4LXNsaWRlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2Vjb25kYXJ5VGlja0xhYmVscyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIHRpY2tzIG9yaWVudGF0aW9uOlxuICAgICAqIGJvdHRvbSAtIFRoZSBkZWZhdWx0IG9yaWVuYXRpb24sIGJlbG93IHRoZSBzbGlkZXIgdHJhY2suXG4gICAgICogdG9wIC0gQWJvdmUgdGhlIHNsaWRlciB0cmFja1xuICAgICAqIG1pcnJvciAtIGNvbWJpbmVzIHRvcCBhbmQgYm90dG9tIG9yaWVudGF0aW9uLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbcHJpbWFyeVRpY2tzXT1cIjVcIiBbdGlja3NPcmllbnRhdGlvbl09XCJ0aWNrc09yaWVudGF0aW9uXCI+PC9pZ3gtc2xpZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRpY2tzT3JpZW50YXRpb246IFRpY2tzT3JpZW50YXRpb24gPSBUaWNrc09yaWVudGF0aW9uLkJvdHRvbTtcblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgdGljayBsYWJlbHMgcm90YXRpb246XG4gICAgICogaG9yaXpvbnRhbCAtIFRoZSBkZWZhdWx0IHJvdGF0aW9uXG4gICAgICogdG9wdG9ib3R0b20gLSBSb3RhdGVzIHRpY2sgbGFiZWxzIHZlcnRpY2FsbHkgdG8gOTBkZWdcbiAgICAgKiBib3R0b210b3RvcCAtIFJvdGF0ZSB0aWNrIGxhYmVscyB2ZXJ0aWNhbGx5IHRvIC05MGRlZ1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbcHJpbWFyeVRpY2tzXT1cIjVcIiBbc2Vjb25kYXJ5VGlja3NdPVwiM1wiIFt0aWNrTGFiZWxzT3JpZW50YXRpb25dPVwidGlja0xhYmVsc09yaWVudGFpdG9uXCI+PC9pZ3gtc2xpZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRpY2tMYWJlbHNPcmllbnRhdGlvbjogVGlja0xhYmVsc09yaWVudGF0aW9uID0gVGlja0xhYmVsc09yaWVudGF0aW9uLkhvcml6b250YWw7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBkZWFjdGl2YXRlVGh1bWJMYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuICgodGhpcy5wcmltYXJ5VGlja3MgJiYgdGhpcy5wcmltYXJ5VGlja0xhYmVscykgfHwgKHRoaXMuc2Vjb25kYXJ5VGlja3MgJiYgdGhpcy5zZWNvbmRhcnlUaWNrTGFiZWxzKSkgJiZcbiAgICAgICAgICAgICh0aGlzLnRpY2tzT3JpZW50YXRpb24gPT09IFRpY2tzT3JpZW50YXRpb24uVG9wIHx8IHRoaXMudGlja3NPcmllbnRhdGlvbiA9PT0gVGlja3NPcmllbnRhdGlvbi5NaXJyb3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZW1pdHRlZCBldmVyeSB0aW1lIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgY2hhbmdlKGV2ZW50KXtcbiAgICAgKiAgICBhbGVydChcIlRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIVwiKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyICh2YWx1ZUNoYW5nZSk9XCJjaGFuZ2UoJGV2ZW50KVwiICNzbGlkZXIgWyhuZ01vZGVsKV09XCJ0YXNrLnBlcmNlbnRDb21wbGV0ZWRcIiBbc3RlcF09XCI1XCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJU2xpZGVyVmFsdWVDaGFuZ2VFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgZXZlcnkgdGltZSB0aGUgbG93ZXIgdmFsdWUgb2YgYSByYW5nZSBzbGlkZXIgaXMgY2hhbmdlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGNoYW5nZSh2YWx1ZSl7XG4gICAgICogICAgYWxlcnQoYFRoZSBsb3dlciB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIHRvICR7dmFsdWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbKGxvd2VyVmFsdWUpXT1cIm1vZGVsLmxvd2VydmFsdWVcIiAobG93ZXJWYWx1ZUNoYW5nZSk9XCJjaGFuZ2UoJGV2ZW50KVwiIFtzdGVwXT1cIjVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgbG93ZXJWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBlbWl0dGVkIGV2ZXJ5IHRpbWUgdGhlIHVwcGVyIHZhbHVlIG9mIGEgcmFuZ2Ugc2xpZGVyIGlzIGNoYW5nZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBjaGFuZ2UodmFsdWUpe1xuICAgICAqICAgIGFsZXJ0KGBUaGUgdXBwZXIgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCB0byAke3ZhbHVlfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgWyh1cHBlclZhbHVlKV09XCJtb2RlbC51cHBlcnZhbHVlXCIgKHVwcGVyVmFsdWVDaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIiBbc3RlcF09XCI1XCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHVwcGVyVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZW1pdHRlZCBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHNsaWRlIGludGVyYWN0aW9uLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgY2hhbmdlKGV2ZW50KXtcbiAgICAgKiAgICBhbGVydChcIlRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIVwiKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIChkcmFnRmluaXNoZWQpPVwiY2hhbmdlKCRldmVudClcIiAjc2xpZGVyIFsobmdNb2RlbCldPVwidGFzay5wZXJjZW50Q29tcGxldGVkXCIgW3N0ZXBdPVwiNVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkcmFnRmluaXNoZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IElSYW5nZVNsaWRlclZhbHVlPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RpY2tzJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIHRpY2tzOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oSWd4U2xpZGVyVGh1bWJDb21wb25lbnQpXG4gICAgcHJpdmF0ZSB0aHVtYnM6IFF1ZXJ5TGlzdDxJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudD4gPSBuZXcgUXVlcnlMaXN0PElneFNsaWRlclRodW1iQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oSWd4VGh1bWJMYWJlbENvbXBvbmVudClcbiAgICBwcml2YXRlIGxhYmVsUmVmczogUXVlcnlMaXN0PElneFRodW1iTGFiZWxDb21wb25lbnQ+ID0gbmV3IFF1ZXJ5TGlzdDxJZ3hUaHVtYkxhYmVsQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvblBhbjogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBzdGVwRGlzdGFuY2U6IG51bWJlcjtcblxuICAgIC8vIExpbWl0IGhhbmRsZSB0cmF2ZWwgem9uZVxuICAgIHByaXZhdGUgX3BNaW4gPSAwO1xuICAgIHByaXZhdGUgX3BNYXggPSAxO1xuXG4gICAgLy8gRnJvbS91cHBlclZhbHVlIGluIHBlcmNlbnQgdmFsdWVzXG4gICAgcHJpdmF0ZSBfaGFzVmlld0luaXQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9taW5WYWx1ZSA9IDA7XG4gICAgcHJpdmF0ZSBfbWF4VmFsdWUgPSAxMDA7XG4gICAgcHJpdmF0ZSBfbG93ZXJCb3VuZDogbnVtYmVyO1xuICAgIHByaXZhdGUgX3VwcGVyQm91bmQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF9sb3dlclZhbHVlOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfdXBwZXJWYWx1ZTogbnVtYmVyO1xuICAgIHByaXZhdGUgX2NvbnRpbnVvdXMgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3N0ZXAgPSAxO1xuICAgIHByaXZhdGUgX3ZhbHVlOiBudW1iZXIgfCBJUmFuZ2VTbGlkZXJWYWx1ZSA9IDA7XG5cbiAgICAvLyB0aWNrc1xuICAgIHByaXZhdGUgX3ByaW1hcnlUaWNrcyA9IDA7XG4gICAgcHJpdmF0ZSBfc2Vjb25kYXJ5VGlja3MgPSAwO1xuICAgIHByaXZhdGUgX3NsaWRpbmcgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2xhYmVscyA9IG5ldyBBcnJheTxudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcbiAgICBwcml2YXRlIF90eXBlOiBJZ3hTbGlkZXJUeXBlID0gSWd4U2xpZGVyVHlwZS5TTElERVI7XG5cbiAgICBwcml2YXRlIF9kZXN0cm95ZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIF9pbmRpY2F0b3JzRGVzdHJveWVyJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBfaW5kaWNhdG9yc1RpbWVyOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgX2VsOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBfZGlyOiBJZ3hEaXJlY3Rpb25hbGl0eSkge1xuICAgICAgICB0aGlzLnN0ZXBEaXN0YW5jZSA9IHRoaXMuX3N0ZXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcbiAgICBwdWJsaWMgb25Gb2N1cygpIHtcbiAgICAgICAgdGhpcy50b2dnbGVTbGlkZXJJbmRpY2F0b3JzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBgSWd4U2xpZGVyQ29tcG9uZW50YCB0eXBlIGlzIFJBTkdFLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgQFZpZXdDaGlsZChcInNsaWRlclwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICAgbGV0IHNsaWRlclJhbmdlID0gdGhpcy5zbGlkZXIuaXNSYW5nZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc1JhbmdlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBJZ3hTbGlkZXJUeXBlLlJBTkdFO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxvd2VyIHZhbHVlIG9mIGEgUkFOR0UgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogcHVibGljIGxvd1ZhbHVlKGV2ZW50KXtcbiAgICAgKiAgICBsZXQgc2xpZGVyTG93VmFsdWUgPSB0aGlzLnNsaWRlci5sb3dlclZhbHVlO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxvd2VyVmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4odGhpcy5fbG93ZXJWYWx1ZSkgJiYgdGhpcy5fbG93ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2xvd2VyVmFsdWUgPj0gdGhpcy5sb3dlckJvdW5kKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG93ZXJWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmxvd2VyQm91bmQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbG93ZXIgdmFsdWUgb2YgYSBSQU5HRSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlclwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBwdWJsaWMgbG93VmFsdWUoZXZlbnQpe1xuICAgICAqICAgIHRoaXMuc2xpZGVyLmxvd2VyVmFsdWUgPSB2YWx1ZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGxvd2VyVmFsdWUodmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBhZGp1c3RlZFZhbHVlID0gdGhpcy52YWx1ZUluUmFuZ2UodmFsdWUsIHRoaXMubG93ZXJCb3VuZCwgdGhpcy51cHBlckJvdW5kKTtcbiAgICAgICAgaWYgKHRoaXMuX2xvd2VyVmFsdWUgIT09IGFkanVzdGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvd2VyVmFsdWUgPSBhZGp1c3RlZFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5sb3dlclZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fbG93ZXJWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0geyBsb3dlcjogdGhpcy5fbG93ZXJWYWx1ZSwgdXBwZXI6IHRoaXMuX3VwcGVyVmFsdWUgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHVwcGVyIHZhbHVlIG9mIGEgUkFOR0UgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogUmV0dXJucyBgdmFsdWVgIG9mIGEgU0xJREVSIGBJZ3hTbGlkZXJDb21wb25lbnRgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBAVmlld0NoaWxkKFwic2xpZGVyMlwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBwdWJsaWMgdXBwZXJWYWx1ZShldmVudCl7XG4gICAgICogICAgIGxldCB1cHBlclZhbHVlID0gdGhpcy5zbGlkZXIudXBwZXJWYWx1ZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCB1cHBlclZhbHVlKCkge1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTih0aGlzLl91cHBlclZhbHVlKSAmJiB0aGlzLl91cHBlclZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fdXBwZXJWYWx1ZSA8PSB0aGlzLnVwcGVyQm91bmQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91cHBlclZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudXBwZXJCb3VuZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB1cHBlciB2YWx1ZSBvZiBhIFJBTkdFIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgQFZpZXdDaGlsZChcInNsaWRlcjJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogcHVibGljIHVwcGVyVmFsdWUoZXZlbnQpe1xuICAgICAqICAgICB0aGlzLnNsaWRlci51cHBlclZhbHVlID0gdmFsdWU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB1cHBlclZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRWYWx1ZSA9IHRoaXMudmFsdWVJblJhbmdlKHZhbHVlLCB0aGlzLmxvd2VyQm91bmQsIHRoaXMudXBwZXJCb3VuZCk7XG4gICAgICAgIGlmICh0aGlzLl91cHBlclZhbHVlICE9PSBhZGp1c3RlZFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl91cHBlclZhbHVlID0gYWRqdXN0ZWRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBwZXJWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3VwcGVyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHsgbG93ZXI6IHRoaXMuX2xvd2VyVmFsdWUsIHVwcGVyOiB0aGlzLl91cHBlclZhbHVlIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRoZSBsb3dlciBsYWJlbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlclwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBsZXQgbGFiZWwgPSB0aGlzLnNsaWRlci5sb3dlckxhYmVsO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbG93ZXJMYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxzVmlld0VuYWJsZWQgPyB0aGlzLmxhYmVsc1t0aGlzLmxvd2VyVmFsdWVdIDogdGhpcy5sb3dlclZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdGhlIHVwcGVyIGxhYmVsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIGxldCBsYWJlbCA9IHRoaXMuc2xpZGVyLnVwcGVyTGFiZWw7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCB1cHBlckxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYWJlbHNWaWV3RW5hYmxlZCA/IHRoaXMubGFiZWxzW3RoaXMudXBwZXJWYWx1ZV0gOiB0aGlzLnVwcGVyVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiBsYWJlbCB2aWV3IGlzIGVuYWJsZWQuXG4gICAgICogSWYgdGhlIHtAbGluayBsYWJlbHN9IGlzIHNldCwgdGhlIHZpZXcgaXMgYXV0b21hdGljYWxseSBhY3RpdmF0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbGV0IGxhYmVsVmlldyA9IHRoaXMuc2xpZGVyLmxhYmVsc1ZpZXdFbmFibGVkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbGFiZWxzVmlld0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhISh0aGlzLmxhYmVscyAmJiB0aGlzLmxhYmVscy5sZW5ndGggPiAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93VG9wVGlja3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRpY2tzT3JpZW50YXRpb24gPT09IFRpY2tzT3JpZW50YXRpb24uVG9wIHx8XG4gICAgICAgICAgICB0aGlzLnRpY2tzT3JpZW50YXRpb24gPT09IFRpY2tzT3JpZW50YXRpb24uTWlycm9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dCb3R0b21UaWNrcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGlja3NPcmllbnRhdGlvbiA9PT0gVGlja3NPcmllbnRhdGlvbi5Cb3R0b20gfHxcbiAgICAgICAgICAgIHRoaXMudGlja3NPcmllbnRhdGlvbiA9PT0gVGlja3NPcmllbnRhdGlvbi5NaXJyb3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLm1pblZhbHVlICYmIGNoYW5nZXMubWF4VmFsdWUgJiZcbiAgICAgICAgICAgIGNoYW5nZXMubWluVmFsdWUuY3VycmVudFZhbHVlIDwgY2hhbmdlcy5tYXhWYWx1ZS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX21heFZhbHVlID0gY2hhbmdlcy5tYXhWYWx1ZS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9taW5WYWx1ZSA9IGNoYW5nZXMubWluVmFsdWUuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuc3RlcCAmJiBjaGFuZ2VzLnN0ZXAuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZUJ5U3RlcCh0aGlzLl92YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogaWYge0BsaW5rIFNsaWRlclR5cGUuU0xJREVSfSB0aGFuIHRoZSBpbml0aWFsIHZhbHVlIHNob2xkIGJlIHRoZSBsb3dlc3Qgb25lLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKCF0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwcGVyVmFsdWUgPSB0aGlzLmxvd2VyQm91bmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdHJhY2sgdHJhdmVsIHpvbmVcbiAgICAgICAgdGhpcy5fcE1pbiA9IHRoaXMudmFsdWVUb0ZyYWN0aW9uKHRoaXMubG93ZXJCb3VuZCkgfHwgMDtcbiAgICAgICAgdGhpcy5fcE1heCA9IHRoaXMudmFsdWVUb0ZyYWN0aW9uKHRoaXMudXBwZXJCb3VuZCkgfHwgMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnNldFZhbHVlKHRoaXMuX3ZhbHVlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuX2hhc1ZpZXdJbml0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGVwRGlzdGFuY2UgPSB0aGlzLmNhbGN1bGF0ZVN0ZXBEaXN0YW5jZSgpO1xuICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjaygpO1xuICAgICAgICB0aGlzLnNldFRpY2tJbnRlcnZhbCgpO1xuICAgICAgICB0aGlzLmNoYW5nZVRodW1iRm9jdXNhYmxlU3RhdGUodGhpcy5kaXNhYmxlZCk7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cyh0aGlzLnRodW1iRnJvbSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9FdmVudHModGhpcy50aHVtYlRvKTtcblxuICAgICAgICB0aGlzLnRodW1icy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llciQpKS5zdWJzY3JpYmUoY2hhbmdlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRodW1iRnJvbSA9IGNoYW5nZS5maW5kKCh0aHVtYjogSWd4U2xpZGVyVGh1bWJDb21wb25lbnQpID0+IHRodW1iLnR5cGUgPT09IFNsaWRlckhhbmRsZS5GUk9NKTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyKHRodW1iRnJvbSwgbnVsbCwgdGhpcy5sb3dlclZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9FdmVudHModGh1bWJGcm9tKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVGh1bWJGb2N1c2FibGVTdGF0ZSh0aGlzLmRpc2FibGVkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5sYWJlbFJlZnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZXIkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsRnJvbSA9IHRoaXMubGFiZWxSZWZzLmZpbmQoKGxhYmVsOiBJZ3hUaHVtYkxhYmVsQ29tcG9uZW50KSA9PiBsYWJlbC50eXBlID09PSBTbGlkZXJIYW5kbGUuRlJPTSk7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcihudWxsLCBsYWJlbEZyb20sIHRoaXMubG93ZXJWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGhyb3R0bGVUaW1lKDQwKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVyJCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwRGlzdGFuY2UgPSB0aGlzLmNhbGN1bGF0ZVN0ZXBEaXN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LCAncG9pbnRlcm1vdmUnKS5waXBlKFxuICAgICAgICAgICAgICAgIHRocm90dGxlKCgpID0+IGludGVydmFsKDAsIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llciQpKS5zdWJzY3JpYmUoKCRldmVudDogUG9pbnRlckV2ZW50KSA9PiB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlKCRldmVudCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9kZXN0cm95ZXIkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llciQuY29tcGxldGUoKTtcblxuICAgICAgICB0aGlzLl9pbmRpY2F0b3JzRGVzdHJveWVyJC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLl9pbmRpY2F0b3JzRGVzdHJveWVyJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogSVJhbmdlU2xpZGVyVmFsdWUgfCBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNOdWxsaXNoQnV0Tm90WmVybyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubm9ybWFsaXplQnlTdGVwKHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLl92YWx1ZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXRFZGl0RWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSYW5nZSA/IHRoaXMudGh1bWJGcm9tLm5hdGl2ZUVsZW1lbnQgOiB0aGlzLnRodW1iVG8ubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlKG1vdXNlWCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIFRvL0Zyb20gVmFsdWVzXG4gICAgICAgIHRoaXMub25QYW4ubmV4dChtb3VzZVgpO1xuXG4gICAgICAgIC8vIEZpbmFsbHkgZG8gcG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrIHRoZSBET01cbiAgICAgICAgLy8gYmFzZWQgb24gZGF0YSB2YWx1ZXNcbiAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHRodW1iQ2hhbmdlZCh2YWx1ZTogbnVtYmVyLCB0aHVtYlR5cGU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgaWYgKHRodW1iVHlwZSA9PT0gU2xpZGVySGFuZGxlLkZST00pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb3dlclZhbHVlICsgdmFsdWUgPiB0aGlzLnVwcGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cHBlclZhbHVlID0gdGhpcy5sb3dlclZhbHVlICsgdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubG93ZXJWYWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXBwZXJWYWx1ZSArIHZhbHVlIDwgdGhpcy5sb3dlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG93ZXJWYWx1ZSA9IHRoaXMudXBwZXJWYWx1ZSArIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnVwcGVyVmFsdWUgKz0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbDogSVJhbmdlU2xpZGVyVmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgbG93ZXI6IHRoaXMubG93ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICB1cHBlcjogdGhpcy51cHBlclZhbHVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFN3YXAgdGhlIHRodW1icyBpZiBhIGNvbGxpc2lvbiBhcHBlYXJzLlxuICAgICAgICAgICAgLy8gaWYgKG5ld1ZhbC5sb3dlciA9PSBuZXdWYWwudXBwZXIpIHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnRvZ2dsZVRodW1iKCk7XG4gICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWw7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9ICh0aGlzLnZhbHVlIGFzIG51bWJlcikgKyB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChuZXdWYWwgPj0gdGhpcy5sb3dlckJvdW5kICYmIG5ld1ZhbCA8PSB0aGlzLnVwcGVyQm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWVDaGFuZ2VkKG9sZFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0VmFsdWVDaGFuZ2Uob2xkVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvblRodW1iQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnRvZ2dsZVNsaWRlckluZGljYXRvcnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uSG92ZXJDaGFuZ2Uoc3RhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlID8gdGhpcy5zaG93U2xpZGVySW5kaWNhdG9ycygpIDogdGhpcy5oaWRlU2xpZGVySW5kaWNhdG9ycygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgSVJhbmdlU2xpZGVyVmFsdWUsIHRyaWdnZXJDaGFuZ2U6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IHJlcztcbiAgICAgICAgaWYgKCF0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgYXMgbnVtYmVyO1xuICAgICAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cHBlclZhbHVlID0gdmFsdWUgLSB2YWx1ZSAlIHRoaXMuc3RlcDtcbiAgICAgICAgICAgICAgICByZXMgPSB0aGlzLnVwcGVyVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMudmFsaWRhdGVJbml0aWFsVmFsdWUodmFsdWUgYXMgSVJhbmdlU2xpZGVyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fdXBwZXJWYWx1ZSA9IHZhbHVlLnVwcGVyO1xuICAgICAgICAgICAgdGhpcy5fbG93ZXJWYWx1ZSA9IHZhbHVlLmxvd2VyO1xuICAgICAgICAgICAgcmVzID0geyBsb3dlcjogdGhpcy5sb3dlclZhbHVlLCB1cHBlcjogdGhpcy51cHBlclZhbHVlIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayhyZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBbJyRldmVudCddKVxuICAgIHByaXZhdGUgb25Qb2ludGVyRG93bigkZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgICAgICB0aGlzLmZpbmRDbG9zZXN0VGh1bWIoJGV2ZW50KTtcblxuICAgICAgICBpZiAoIXRoaXMudGh1bWJUby5pc0FjdGl2ZSAmJiB0aGlzLnRodW1iRnJvbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zbGlkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgYWN0aXZlVGh1bWIgPSB0aGlzLnRodW1iVG8uaXNBY3RpdmUgPyB0aGlzLnRodW1iVG8gOiB0aGlzLnRodW1iRnJvbTtcbiAgICAgICAgYWN0aXZlVGh1bWIubmF0aXZlRWxlbWVudC5zZXRQb2ludGVyQ2FwdHVyZSgkZXZlbnQucG9pbnRlcklkKTtcbiAgICAgICAgdGhpcy5zaG93U2xpZGVySW5kaWNhdG9ycygpO1xuXG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Qb2ludGVyTW92ZSgkZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5fc2xpZGluZykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoJGV2ZW50LmNsaWVudFgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigncG9pbnRlcnVwJywgWyckZXZlbnQnXSlcbiAgICBwcml2YXRlIG9uUG9pbnRlclVwKCRldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy50aHVtYlRvLmlzQWN0aXZlICYmIHRoaXMudGh1bWJGcm9tID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZVRodW1iID0gdGhpcy50aHVtYlRvLmlzQWN0aXZlID8gdGhpcy50aHVtYlRvIDogdGhpcy50aHVtYkZyb207XG4gICAgICAgIGFjdGl2ZVRodW1iLm5hdGl2ZUVsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKCRldmVudC5wb2ludGVySWQpO1xuXG4gICAgICAgIHRoaXMuX3NsaWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oaWRlU2xpZGVySW5kaWNhdG9ycygpO1xuICAgICAgICB0aGlzLmRyYWdGaW5pc2hlZC5lbWl0KHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVJbml0aWFsVmFsdWUodmFsdWU6IElSYW5nZVNsaWRlclZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZS51cHBlciA8IHZhbHVlLmxvd2VyKSB7XG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gdmFsdWUudXBwZXI7XG4gICAgICAgICAgICB2YWx1ZS51cHBlciA9IHZhbHVlLmxvd2VyO1xuICAgICAgICAgICAgdmFsdWUubG93ZXIgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmxvd2VyIDwgdGhpcy5sb3dlckJvdW5kKSB7XG4gICAgICAgICAgICB2YWx1ZS5sb3dlciA9IHRoaXMubG93ZXJCb3VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS51cHBlciA+IHRoaXMudXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgdmFsdWUudXBwZXIgPSB0aGlzLnVwcGVyQm91bmQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kQ2xvc2VzdFRodW1iKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZXN0SGFuZGxlKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJUby5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZShldmVudC5jbGllbnRYKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxvd2VyQm91bmRBbmRNaW5UcmF2ZWxab25lKCkge1xuICAgICAgICB0aGlzLmxvd2VyQm91bmQgPSB0aGlzLm1pblZhbHVlO1xuICAgICAgICB0aGlzLl9wTWluID0gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVVwcGVyQm91bmRBbmRNYXhUcmF2ZWxab25lKCkge1xuICAgICAgICB0aGlzLnVwcGVyQm91bmQgPSB0aGlzLm1heFZhbHVlO1xuICAgICAgICB0aGlzLl9wTWF4ID0gMTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVN0ZXBEaXN0YW5jZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLyAodGhpcy5tYXhWYWx1ZSAtIHRoaXMubWluVmFsdWUpICogdGhpcy5zdGVwO1xuICAgIH1cblxuICAgIC8vIHByaXZhdGUgdG9nZ2xlVGh1bWIoKSB7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLnRodW1iRnJvbS5pc0FjdGl2ZSA/XG4gICAgLy8gICAgICAgICB0aGlzLnRodW1iVG8ubmF0aXZlRWxlbWVudC5mb2N1cygpIDpcbiAgICAvLyAgICAgICAgIHRoaXMudGh1bWJGcm9tLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAvLyB9XG5cbiAgICBwcml2YXRlIHZhbHVlSW5SYW5nZSh2YWx1ZSwgbWluID0gMCwgbWF4ID0gMTAwKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChNYXRoLm1pbih2YWx1ZSwgbWF4KSwgbWluKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvc2l0aW9uSGFuZGxlcih0aHVtYkhhbmRsZTogRWxlbWVudFJlZiwgbGFiZWxIYW5kbGU6IEVsZW1lbnRSZWYsIHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcGVyY2VudCA9IGAke3RoaXMudmFsdWVUb0ZyYWN0aW9uKHBvc2l0aW9uKSAqIDEwMH0lYDtcbiAgICAgICAgY29uc3QgZGlyID0gdGhpcy5fZGlyLnJ0bCA/ICdyaWdodCcgOiAnbGVmdCc7XG5cbiAgICAgICAgaWYgKHRodW1iSGFuZGxlKSB7XG4gICAgICAgICAgICB0aHVtYkhhbmRsZS5uYXRpdmVFbGVtZW50LnN0eWxlW2Rpcl0gPSBwZXJjZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhYmVsSGFuZGxlKSB7XG4gICAgICAgICAgICBsYWJlbEhhbmRsZS5uYXRpdmVFbGVtZW50LnN0eWxlW2Rpcl0gPSBwZXJjZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcih0aGlzLnRodW1iVG8sIHRoaXMubGFiZWxUbywgdGhpcy52YWx1ZSBhcyBudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXIodGhpcy50aHVtYlRvLCB0aGlzLmxhYmVsVG8sICh0aGlzLnZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKS51cHBlcik7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcih0aGlzLnRodW1iRnJvbSwgdGhpcy5sYWJlbEZyb20sICh0aGlzLnZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKS5sb3dlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faGFzVmlld0luaXQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VzdEhhbmRsZShldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGZyb21PZmZzZXQgPSB0aGlzLnRodW1iRnJvbS5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgKyB0aGlzLnRodW1iRnJvbS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgdG9PZmZzZXQgPSB0aGlzLnRodW1iVG8ubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0ICsgdGhpcy50aHVtYlRvLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLyAyO1xuICAgICAgICBjb25zdCB4UG9pbnRlciA9IGV2ZW50LmNsaWVudFggLSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5jbG9zZXN0VG8oeFBvaW50ZXIsIFtmcm9tT2Zmc2V0LCB0b09mZnNldF0pO1xuXG4gICAgICAgIGlmIChmcm9tT2Zmc2V0ID09PSB0b09mZnNldCAmJiB0b09mZnNldCA8IHhQb2ludGVyKSB7XG4gICAgICAgICAgICB0aGlzLnRodW1iVG8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKGZyb21PZmZzZXQgPT09IHRvT2Zmc2V0ICYmIHRvT2Zmc2V0ID4geFBvaW50ZXIpIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJGcm9tLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaCA9PT0gZnJvbU9mZnNldCkge1xuICAgICAgICAgICAgdGhpcy50aHVtYkZyb20ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50aHVtYlRvLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGlja0ludGVydmFsKCkge1xuICAgICAgICBsZXQgdGlja0ludGVydmFsO1xuICAgICAgICBjb25zdCB0cmFja1Byb2dyZXNzID0gMTAwO1xuXG4gICAgICAgIGlmICh0aGlzLmxhYmVsc1ZpZXdFbmFibGVkKSB7XG4gICAgICAgICAgICAvLyBDYWxjIHRpY2tzIGRlcGVuZGluZyBvbiB0aGUgbGFiZWxzIGxlbmd0aDtcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9ICgodHJhY2tQcm9ncmVzcyAvICh0aGlzLmxhYmVscy5sZW5ndGggLSAxKSAqIDEwKSkgLyAxMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNrUmFuZ2UgPSB0aGlzLm1heFZhbHVlIC0gdGhpcy5taW5WYWx1ZTtcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9IHRoaXMuc3RlcCA+IDEgP1xuICAgICAgICAgICAgICAgICh0cmFja1Byb2dyZXNzIC8gKCh0cmFja1JhbmdlIC8gdGhpcy5zdGVwKSkgKiAxMCkgLyAxMFxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50aWNrcy5uYXRpdmVFbGVtZW50LCAnc3Ryb2tlLWRhc2hhcnJheScsIGAwLCAke3RpY2tJbnRlcnZhbCAqIE1hdGguc3FydCgyKX0lYCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50aWNrcy5uYXRpdmVFbGVtZW50LCAndmlzaWJpbGl0eScsIHRoaXMuY29udGludW91cyB8fCB0aWNrSW50ZXJ2YWwgPT09IG51bGwgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93U2xpZGVySW5kaWNhdG9ycygpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pbmRpY2F0b3JzVGltZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2luZGljYXRvcnNEZXN0cm95ZXIkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl9pbmRpY2F0b3JzVGltZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aHVtYlRvLnNob3dUaHVtYkluZGljYXRvcnMoKTtcbiAgICAgICAgdGhpcy5sYWJlbFRvLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLnRodW1iRnJvbSkge1xuICAgICAgICAgICAgdGhpcy50aHVtYkZyb20uc2hvd1RodW1iSW5kaWNhdG9ycygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGFiZWxGcm9tKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsRnJvbS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVTbGlkZXJJbmRpY2F0b3JzKCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faW5kaWNhdG9yc1RpbWVyID0gdGltZXIodGhpcy50aHVtYkxhYmVsVmlzaWJpbGl0eUR1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5faW5kaWNhdG9yc1RpbWVyLnBpcGUodGFrZVVudGlsKHRoaXMuX2luZGljYXRvcnNEZXN0cm95ZXIkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJUby5oaWRlVGh1bWJJbmRpY2F0b3JzKCk7XG4gICAgICAgICAgICB0aGlzLmxhYmVsVG8uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy50aHVtYkZyb20pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRodW1iRnJvbS5oaWRlVGh1bWJJbmRpY2F0b3JzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmxhYmVsRnJvbSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxGcm9tLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZVNsaWRlckluZGljYXRvcnMoKSB7XG4gICAgICAgIHRoaXMuc2hvd1NsaWRlckluZGljYXRvcnMoKTtcbiAgICAgICAgdGhpcy5oaWRlU2xpZGVySW5kaWNhdG9ycygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlVGh1bWJGb2N1c2FibGVTdGF0ZShzdGF0ZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHN0YXRlID8gLTEgOiAwO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJGcm9tLnRhYmluZGV4ID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRodW1iVG8udGFiaW5kZXggPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VzdFRvKGdvYWw6IG51bWJlciwgcG9zaXRpb25zOiBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbnMucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4gKE1hdGguYWJzKGdvYWwgLSBjdXJyZW50KSA8IE1hdGguYWJzKGdvYWwgLSBwcmV2aW91cykgPyBjdXJyZW50IDogcHJldmlvdXMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbHVlVG9GcmFjdGlvbih2YWx1ZTogbnVtYmVyLCBwTWluID0gdGhpcy5fcE1pbiwgcE1heCA9IHRoaXMuX3BNYXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVJblJhbmdlKCh2YWx1ZSAtIHRoaXMubWluVmFsdWUpIC8gKHRoaXMubWF4VmFsdWUgLSB0aGlzLm1pblZhbHVlKSwgcE1pbiwgcE1heCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc051bGxpc2hCdXROb3RaZXJvKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF2YWx1ZSAmJiB2YWx1ZSAhPT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTm9ybWFsaXrQtSB0aGUgdmFsdWUgd2hlbiB0d28td2F5IGRhdGEgYmluZCBpcyB1c2VkIGFuZCB7QGxpbmsgdGhpcy5zdGVwfSBpcyBzZXQuXG4gICAgICogQHBhcmFtIHZhbHVlXG4gICAgICovXG4gICAgcHJpdmF0ZSBub3JtYWxpemVCeVN0ZXAodmFsdWU6IElSYW5nZVNsaWRlclZhbHVlIHwgbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0ge1xuICAgICAgICAgICAgICAgIGxvd2VyOiBNYXRoLmZsb29yKCh2YWx1ZSBhcyBJUmFuZ2VTbGlkZXJWYWx1ZSkubG93ZXIgLyB0aGlzLnN0ZXApICogdGhpcy5zdGVwLFxuICAgICAgICAgICAgICAgIHVwcGVyOiBNYXRoLmZsb29yKCh2YWx1ZSBhcyBJUmFuZ2VTbGlkZXJWYWx1ZSkudXBwZXIgLyB0aGlzLnN0ZXApICogdGhpcy5zdGVwXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBNYXRoLmZsb29yKCh2YWx1ZSBhcyBudW1iZXIpIC8gdGhpcy5zdGVwKSAqIHRoaXMuc3RlcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVHJhY2soKSB7XG4gICAgICAgIGNvbnN0IGZyb21Qb3NpdGlvbiA9IHRoaXMudmFsdWVUb0ZyYWN0aW9uKHRoaXMubG93ZXJWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHRvUG9zaXRpb24gPSB0aGlzLnZhbHVlVG9GcmFjdGlvbih0aGlzLnVwcGVyVmFsdWUpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbkdhcCA9IHRvUG9zaXRpb24gLSBmcm9tUG9zaXRpb247XG5cbiAgICAgICAgbGV0IHRyYWNrTGVmdEluZGVudGlvbiA9IGZyb21Qb3NpdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgaWYgKHBvc2l0aW9uR2FwKSB7XG4gICAgICAgICAgICAgICAgdHJhY2tMZWZ0SW5kZW50aW9uID0gTWF0aC5yb3VuZCgoMSAvIHBvc2l0aW9uR2FwICogZnJvbVBvc2l0aW9uKSAqIDEwMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyYWNrTGVmdEluZGVudGlvbiA9IHRoaXMuX2Rpci5ydGwgPyAtdHJhY2tMZWZ0SW5kZW50aW9uIDogdHJhY2tMZWZ0SW5kZW50aW9uO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRyYWNrUmVmLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2Zvcm0nLCBgc2NhbGVYKCR7cG9zaXRpb25HYXB9KSB0cmFuc2xhdGVYKCR7dHJhY2tMZWZ0SW5kZW50aW9ufSUpYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudHJhY2tSZWYubmF0aXZlRWxlbWVudCwgJ3RyYW5zZm9ybScsIGBzY2FsZVgoJHt0b1Bvc2l0aW9ufSlgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9FdmVudHModGh1bWI6IElneFNsaWRlclRodW1iQ29tcG9uZW50KSB7XG4gICAgICAgIGlmICghdGh1bWIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRodW1iLnRodW1iVmFsdWVDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlcih0aHVtYikpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB0aGlzLnRodW1iQ2hhbmdlZCh2YWx1ZSwgdGh1bWIudHlwZSkpO1xuXG4gICAgICAgIHRodW1iLnRodW1iQmx1clxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVyKHRodW1iKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5zdWJzY3JpYmVyKHRodW1iOiBJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gbWVyZ2UodGhpcy5fZGVzdHJveWVyJCwgdGh1bWIuZGVzdHJveSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNWYWx1ZUNoYW5nZWQob2xkVmFsdWUpIHtcbiAgICAgICAgY29uc3QgaXNTbGlkZXJXaXRoRGlmZmVyZW50VmFsdWU6IGJvb2xlYW4gPSAhdGhpcy5pc1JhbmdlICYmIG9sZFZhbHVlICE9PSB0aGlzLnZhbHVlO1xuICAgICAgICBjb25zdCBpc1JhbmdlV2l0aE9uZURpZmZlcmVudFZhbHVlOiBib29sZWFuID0gdGhpcy5pc1JhbmdlICYmXG4gICAgICAgICAgICAoKG9sZFZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKS5sb3dlciAhPT0gKHRoaXMudmFsdWUgYXMgSVJhbmdlU2xpZGVyVmFsdWUpLmxvd2VyIHx8XG4gICAgICAgICAgICAgICAgKG9sZFZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKS51cHBlciAhPT0gKHRoaXMudmFsdWUgYXMgSVJhbmdlU2xpZGVyVmFsdWUpLnVwcGVyKTtcblxuICAgICAgICByZXR1cm4gaXNTbGlkZXJXaXRoRGlmZmVyZW50VmFsdWUgfHwgaXNSYW5nZVdpdGhPbmVEaWZmZXJlbnRWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRWYWx1ZUNoYW5nZShvbGRWYWx1ZTogbnVtYmVyIHwgSVJhbmdlU2xpZGVyVmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHsgb2xkVmFsdWUsIHZhbHVlOiB0aGlzLnZhbHVlIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cblxuIiwiPGlneC10aWNrc1xuICAgICpuZ0lmPVwic2hvd1RpY2tzICYmIHNob3dUb3BUaWNrc1wiXG4gICAgdGlja3NPcmllbnRhdGlvbj1cInRvcFwiXG4gICAgW3ByaW1hcnlUaWNrc109XCJwcmltYXJ5VGlja3NcIlxuICAgIFtzZWNvbmRhcnlUaWNrc109XCJzZWNvbmRhcnlUaWNrc1wiXG4gICAgW3ByaW1hcnlUaWNrTGFiZWxzXT1cInByaW1hcnlUaWNrTGFiZWxzXCJcbiAgICBbc2Vjb25kYXJ5VGlja0xhYmVsc109XCJzZWNvbmRhcnlUaWNrTGFiZWxzXCJcbiAgICBbdGlja0xhYmVsc09yaWVudGF0aW9uXT1cInRpY2tMYWJlbHNPcmllbnRhdGlvblwiXG4gICAgW2xhYmVsc1ZpZXdFbmFibGVkXT1cImxhYmVsc1ZpZXdFbmFibGVkXCJcbiAgICBbbGFiZWxzXT1cImxhYmVscyB8IHNwcmVhZFRpY2tMYWJlbHM6c2Vjb25kYXJ5VGlja3NcIlxuICAgIFt0aWNrTGFiZWxUZW1wbGF0ZVJlZl09XCJ0aWNrTGFiZWxUZW1wbGF0ZVJlZlwiXG4gICAgW21pblZhbHVlXT1cIm1pblZhbHVlXCJcbiAgICBbbWF4VmFsdWVdPVwibWF4VmFsdWVcIj5cbjwvaWd4LXRpY2tzPlxuPGRpdiBjbGFzcz1cImlneC1zbGlkZXJfX3RyYWNrXCI+XG4gICAgPGRpdiBjbGFzcz1cImlneC1zbGlkZXJfX3RyYWNrLWluYWN0aXZlXCI+PC9kaXY+XG4gICAgPGRpdiAjdHJhY2sgY2xhc3M9XCJpZ3gtc2xpZGVyX190cmFjay1maWxsXCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImlneC1zbGlkZXJfX3RyYWNrLXN0ZXBzXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPlxuICAgICAgICAgIDxsaW5lICN0aWNrcyB4MT1cIjBcIiB5MT1cIjJcIiB4Mj1cIjEwMCVcIiB5Mj1cIjJcIj48L2xpbmU+XG4gICAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiaWd4LXNsaWRlcl9fdGh1bWJzXCI+XG4gICAgPGlneC10aHVtYi1sYWJlbFxuICAgICAgICAqbmdJZj1cImlzUmFuZ2VcIlxuICAgICAgICB0eXBlPVwiZnJvbVwiXG4gICAgICAgIFt2YWx1ZV09XCJsb3dlckxhYmVsXCJcbiAgICAgICAgW3RlbXBsYXRlUmVmXT1cInRodW1iRnJvbVRlbXBsYXRlUmVmXCJcbiAgICAgICAgW2NvbnRpbnVvdXNdPVwiY29udGludW91c1wiXG4gICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICAgICAgICBbZGVhY3RpdmVTdGF0ZV09XCJkZWFjdGl2YXRlVGh1bWJMYWJlbFwiXG4gICAgICAgIFt0aHVtYl09XCJ0aHVtYkZyb21cIj48L2lneC10aHVtYi1sYWJlbD5cblxuICAgIDxpZ3gtdGh1bWJcbiAgICAgICAgKm5nSWY9XCJpc1JhbmdlXCJcbiAgICAgICAgI3RodW1iRnJvbVxuICAgICAgICB0eXBlPVwiZnJvbVwiXG4gICAgICAgIFt2YWx1ZV09XCJsb3dlckxhYmVsXCJcbiAgICAgICAgW21pbl09XCJtaW5WYWx1ZVwiXG4gICAgICAgIFttYXhdPVwibWF4VmFsdWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbY29udGludW91c109XCJjb250aW51b3VzXCJcbiAgICAgICAgW29uUGFuXT1cIm9uUGFuXCJcbiAgICAgICAgW3N0ZXBEaXN0YW5jZV09XCJzdGVwRGlzdGFuY2VcIlxuICAgICAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgW3RlbXBsYXRlUmVmXT1cInRodW1iRnJvbVRlbXBsYXRlUmVmXCJcbiAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgICAgIFtsYWJlbHNdPVwibGFiZWxzXCJcbiAgICAgICAgKHRodW1iQ2hhbmdlKT1cIm9uVGh1bWJDaGFuZ2UoKVwiXG4gICAgICAgIChob3ZlckNoYW5nZSk9XCJvbkhvdmVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZGVhY3RpdmVTdGF0ZV09XCJkZWFjdGl2YXRlVGh1bWJMYWJlbFwiXG4gICAgICAgIFt0aHVtYkxhYmVsVmlzaWJpbGl0eUR1cmF0aW9uXT1cInRodW1iTGFiZWxWaXNpYmlsaXR5RHVyYXRpb25cIj48L2lneC10aHVtYj5cblxuICAgIDxpZ3gtdGh1bWItbGFiZWxcbiAgICAgICAgW3ZhbHVlXT1cInVwcGVyTGFiZWxcIlxuICAgICAgICB0eXBlPVwidG9cIlxuICAgICAgICBbdGVtcGxhdGVSZWZdPVwidGh1bWJUb1RlbXBsYXRlUmVmXCJcbiAgICAgICAgW2NvbnRpbnVvdXNdPVwiY29udGludW91c1wiXG4gICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICAgICAgICBbZGVhY3RpdmVTdGF0ZV09XCJkZWFjdGl2YXRlVGh1bWJMYWJlbFwiXG4gICAgICAgIFt0aHVtYl09XCJ0aHVtYlRvXCI+PC9pZ3gtdGh1bWItbGFiZWw+XG5cbiAgICA8aWd4LXRodW1iXG4gICAgICAgICN0aHVtYlRvXG4gICAgICAgIHR5cGU9XCJ0b1wiXG4gICAgICAgIFt2YWx1ZV09XCJ1cHBlckxhYmVsXCJcbiAgICAgICAgW21pbl09XCJtaW5WYWx1ZVwiXG4gICAgICAgIFttYXhdPVwibWF4VmFsdWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbY29udGludW91c109XCJjb250aW51b3VzXCJcbiAgICAgICAgW29uUGFuXT1cIm9uUGFuXCJcbiAgICAgICAgW3N0ZXBEaXN0YW5jZV09XCJzdGVwRGlzdGFuY2VcIlxuICAgICAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgW3RlbXBsYXRlUmVmXT1cInRodW1iVG9UZW1wbGF0ZVJlZlwiXG4gICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICAgICAgICBbbGFiZWxzXT1cImxhYmVsc1wiXG4gICAgICAgICh0aHVtYkNoYW5nZSk9XCJvblRodW1iQ2hhbmdlKClcIlxuICAgICAgICAoaG92ZXJDaGFuZ2UpPVwib25Ib3ZlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2RlYWN0aXZlU3RhdGVdPVwiZGVhY3RpdmF0ZVRodW1iTGFiZWxcIlxuICAgICAgICBbdGh1bWJMYWJlbFZpc2liaWxpdHlEdXJhdGlvbl09XCJ0aHVtYkxhYmVsVmlzaWJpbGl0eUR1cmF0aW9uXCI+PC9pZ3gtdGh1bWI+XG48L2Rpdj5cbjxpZ3gtdGlja3NcbiAgICAqbmdJZj1cInNob3dUaWNrcyAmJiBzaG93Qm90dG9tVGlja3NcIlxuICAgIHRpY2tzT3JpZW50YXRpb249XCJib3R0b21cIlxuICAgIFtwcmltYXJ5VGlja3NdPVwicHJpbWFyeVRpY2tzXCJcbiAgICBbc2Vjb25kYXJ5VGlja3NdPVwic2Vjb25kYXJ5VGlja3NcIlxuICAgIFtwcmltYXJ5VGlja0xhYmVsc109XCJwcmltYXJ5VGlja0xhYmVsc1wiXG4gICAgW3NlY29uZGFyeVRpY2tMYWJlbHNdPVwic2Vjb25kYXJ5VGlja0xhYmVsc1wiXG4gICAgW3RpY2tMYWJlbHNPcmllbnRhdGlvbl09XCJ0aWNrTGFiZWxzT3JpZW50YXRpb25cIlxuICAgIFtsYWJlbHNWaWV3RW5hYmxlZF09XCJsYWJlbHNWaWV3RW5hYmxlZFwiXG4gICAgW2xhYmVsc109XCJsYWJlbHMgfCBzcHJlYWRUaWNrTGFiZWxzOnNlY29uZGFyeVRpY2tzXCJcbiAgICBbdGlja0xhYmVsVGVtcGxhdGVSZWZdPVwidGlja0xhYmVsVGVtcGxhdGVSZWZcIlxuICAgIFttaW5WYWx1ZV09XCJtaW5WYWx1ZVwiXG4gICAgW21heFZhbHVlXT1cIm1heFZhbHVlXCI+XG48L2lneC10aWNrcz5cbiJdfQ==