@microsoft/windows-admin-center-sdk 2.128.0 → 2.152.0

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 (65) hide show
  1. package/angular/assets/strings/cs-CZ/strings.json +1 -1
  2. package/angular/assets/strings/de-DE/strings.json +1 -1
  3. package/angular/assets/strings/es-ES/strings.json +1 -1
  4. package/angular/assets/strings/fr-FR/strings.json +1 -1
  5. package/angular/assets/strings/hu-HU/strings.json +1 -1
  6. package/angular/assets/strings/it-IT/strings.json +1 -1
  7. package/angular/assets/strings/ja-JP/strings.json +1 -1
  8. package/angular/assets/strings/ko-KR/strings.json +1 -1
  9. package/angular/assets/strings/nl-NL/strings.json +1 -1
  10. package/angular/assets/strings/pl-PL/strings.json +1 -1
  11. package/angular/assets/strings/pt-BR/strings.json +1 -1
  12. package/angular/assets/strings/pt-PT/strings.json +1 -1
  13. package/angular/assets/strings/ru-RU/strings.json +1 -1
  14. package/angular/assets/strings/sv-SE/strings.json +1 -1
  15. package/angular/assets/strings/tr-TR/strings.json +1 -1
  16. package/angular/assets/strings/zh-CN/strings.json +1 -1
  17. package/angular/assets/strings/zh-TW/strings.json +1 -1
  18. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js +558 -367
  19. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.js.map +1 -1
  20. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js +1 -1
  21. package/angular/bundles/microsoft-windows-admin-center-sdk-angular.umd.min.js.map +1 -1
  22. package/angular/esm2015/src/controls/accordion/index.js +5 -0
  23. package/angular/esm2015/src/controls/data-table/data-table.component.js +5 -5
  24. package/angular/esm2015/src/controls/dialog/dialog.component.js +2 -2
  25. package/angular/esm2015/src/controls/dropdown/dropdown.service.js +3 -2
  26. package/angular/esm2015/src/controls/form/form-field/array/array-form-field.component.js +29 -22
  27. package/angular/esm2015/src/controls/form/form-field/datetime-range/datetime-range-form-field.component.js +4 -3
  28. package/angular/esm2015/src/controls/form/form-field/list/list-form-field.component.js +1 -1
  29. package/angular/esm2015/src/controls/form/validation-alert/validation-alert.component.js +3 -2
  30. package/angular/esm2015/src/controls/index.js +2 -1
  31. package/angular/esm2015/src/controls/pivot/pivot.component.js +21 -9
  32. package/angular/esm2015/src/controls/settings/common-settings/common-settings.component.js +38 -34
  33. package/angular/esm2015/src/controls/settings/settings-content.component.js +3 -2
  34. package/angular/esm2015/src/controls/settings/settings.component.js +45 -13
  35. package/angular/esm2015/src/controls/settings/settings.module.js +5 -1
  36. package/angular/esm2015/src/controls/tooltip/tooltip-zone.directive.js +2 -2
  37. package/angular/esm2015/src/controls/wizard/models/index.js +1 -1
  38. package/angular/esm2015/src/controls/wizard/models/wizard-builder-interface.js +2 -0
  39. package/angular/esm2015/src/controls/wizard/models/wizard-navigation-interface.js +2 -0
  40. package/angular/esm2015/src/controls/wizard/wizard-builder.js +70 -1
  41. package/angular/esm2015/src/controls/wizard/wizard-navigation-information.js +56 -2
  42. package/angular/esm2015/src/controls/wizard/wizard.component.js +8 -2
  43. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js +508 -322
  44. package/angular/fesm2015/microsoft-windows-admin-center-sdk-angular.js.map +1 -1
  45. package/angular/src/controls/accordion/index.d.ts +4 -0
  46. package/angular/src/controls/form/form-field/array/array-form-field.component.d.ts +2 -1
  47. package/angular/src/controls/index.d.ts +1 -0
  48. package/angular/src/controls/pivot/pivot.component.d.ts +2 -2
  49. package/angular/src/controls/settings/settings.component.d.ts +3 -0
  50. package/angular/src/controls/settings/settings.module.d.ts +3 -2
  51. package/angular/src/controls/wizard/models/index.d.ts +2 -0
  52. package/angular/src/controls/wizard/models/wizard-builder-interface.d.ts +8 -0
  53. package/angular/src/controls/wizard/models/wizard-navigation-interface.d.ts +4 -0
  54. package/angular/src/controls/wizard/wizard-builder.d.ts +36 -1
  55. package/angular/src/controls/wizard/wizard-navigation-information.d.ts +48 -5
  56. package/angular/src/controls/wizard/wizard.component.d.ts +2 -1
  57. package/core/data/resource-cache.d.ts +1 -1
  58. package/core/data/resource-cache.js +1 -1
  59. package/core/data/resource-cache.js.map +1 -1
  60. package/core/security/authorization-manager.js +1 -1
  61. package/core/security/authorization-manager.js.map +1 -1
  62. package/package.json +2 -3
  63. package/styles/css/main.css +1 -1
  64. package/tools/gulp-ps-cim/index.js +1 -1
  65. package/tools/gulp-ps-cim/index.js.map +1 -1
@@ -61,7 +61,7 @@ function DialogComponent_sme_backdrop_0_Template(rf, ctx) { if (rf & 1) {
61
61
  i0.ɵɵproperty("level", ctx_r0.dialogLevel)("showBackdrop", ctx_r0.showBackdrop)("allowBackgroundInteraction", ctx_r0.allowBackgroundInteraction);
62
62
  i0.ɵɵadvance(1);
63
63
  i0.ɵɵproperty("ngClass", ctx_r0.dialogClasses);
64
- i0.ɵɵattribute("role", ctx_r0.dialogRole)("aria-hidden", !ctx_r0.visible)("aria-labelledby", ctx_r0.ariaLabel ? ctx_r0.idBag.ariaLabelSpan : null)("aria-describedby", ctx_r0.ariaDescription ? ctx_r0.idBag.ariaDescriptionSpan : null);
64
+ i0.ɵɵattribute("role", ctx_r0.dialogRole)("aria-hidden", !ctx_r0.visible)("aria-labelledby", ctx_r0.ariaLabel ? ctx_r0.idBag.ariaLabelSpan : "sme-dialog-title")("aria-describedby", ctx_r0.ariaDescription ? ctx_r0.idBag.ariaDescriptionSpan : "sme-dialog-desc");
65
65
  i0.ɵɵadvance(1);
66
66
  i0.ɵɵproperty("ngIf", ctx_r0.closeButton);
67
67
  i0.ɵɵadvance(7);
@@ -397,4 +397,4 @@ __decorate([
397
397
  type: HostListener,
398
398
  args: ['document:keyup.escape']
399
399
  }], autoFocus: [] }); })();
400
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUlSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7SUNWekQsaUNBRXNEO0lBRHBELDBNQUEwQjtJQUUxQiwwQkFBOEM7SUFDaEQsaUJBQVM7OztJQUZQLHdFQUFtRDtJQUR4Qiw4RUFBNkQ7OztJQWU1RiwrQkFBNkU7SUFBQSxZQUFhO0lBQUEsaUJBQU87OztJQUEvQywrQ0FBMEI7SUFBQyxlQUFhO0lBQWIsc0NBQWE7OztJQUMxRiwrQkFBeUY7SUFBQSxZQUFtQjtJQUFBLGlCQUFPOzs7SUFBM0QscURBQWdDO0lBQUMsZUFBbUI7SUFBbkIsNENBQW1COzs7O0lBdkI5Ryx1Q0FFc0Q7SUFGRix1T0FBcUQsRUFBRSxJQUFDO0lBRzFHLDhCQUVpRztJQUMvRixxRkFJUztJQUNULDhCQUFtRDtJQUNqRCxrQkFBb0Q7SUFDdEQsaUJBQU07SUFDTiw4QkFDK007SUFDN00scUJBQXFEO0lBQ3ZELGlCQUFNO0lBQ04sOEJBQW1EO0lBQ2pELHFCQUFv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QUMsQ0FBQztZQUM3RixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztTQUNsRztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNPLFdBQVc7UUFDakIsT0FBTztZQUNILGFBQWEsRUFBRSxFQUFFO1lBQ2pCLG1CQUFtQixFQUFFLEVBQUU7U0FDMUIsQ0FBQztJQUNOLENBQUM7O0FBbE9EOztHQUVHO0FBQ1ksNEJBQVksR0FBRyxDQUFDLENBQUM7aUdBWHZCLGVBQWU7dUVBQWYsZUFBZTswR0FBZixhQUFTOzs7UUN0RnRCLG9GQXdCZTs7UUF4QkEsa0NBQWE7O0FEaU94QjtJQURDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Ozs7Z0RBT1g7dUZBakpRLGVBQWU7Y0FKM0IsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixXQUFXLEVBQUUseUJBQXlCO2FBQ3pDO29IQWdDbUIsMEJBQTBCO2tCQUF6QyxLQUFLO1lBQ1UsWUFBWTtrQkFBM0IsS0FBSztZQUNVLGFBQWE7a0JBQTVCLEtBQUs7WUFDVSxTQUFTO2tCQUF4QixLQUFLO1lBQ1UsZUFBZTtrQkFBOUIsS0FBSztZQVFjLFVBQVU7a0JBQTdCLEtBQUs7WUFlSyxVQUFVO2tCQURwQixLQUFLO1lBY1UsVUFBVTtrQkFBekIsS0FBSztZQUtVLFdBQVc7a0JBQTFCLEtBQUs7WUFvQ0MsT0FBTztrQkFEYixZQUFZO21CQUFDLHVCQUF1QjtZQTRCOUIsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdDaGVja2VkLFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIFNpbXBsZUNoYW5nZXNcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGVib3VuY2UgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy9kZWJvdW5jZS5kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgRG9tIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kb20vZG9tJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTdHJpbmdzIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdGVkL3N0cmluZ3MnO1xyXG5pbXBvcnQgeyBDb3JlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi9iYXNlLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICpcclxuICogQHNtZURvYyB7QGxhYmVsIERpYWxvZyBAaWQgc21lLWRpYWxvZ31cclxuICpcclxuICogQG92ZXJ2aWV3XHJcbiAqIEBmaWxlIHtAZmlsZXBhdGggLi9leGFtcGxlcy9kaWFsb2ctb3ZlcnZpZXcubWR9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgQmFzaWMgVXNhZ2UgQGlkIGJhc2ljLXVzYWdlfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9kaWFsb2ctZXhhbXBsZS5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZGlhbG9nLWV4YW1wbGUuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgRGlhbG9nIENoYWluIEBpZCBkaWFsb2ctY2hhaW59XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RpYWxvZy1leGFtcGxlLWRpYWxvZy1jaGFpbi5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZGlhbG9nLWV4YW1wbGUtZGlhbG9nLWNoYWluLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIEZ1bGwgU2NyZWVuIERpYWxvZyBAaWQgZnVsbC1zY3JlZW4tZGlhbG9nfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9kaWFsb2ctZXhhbXBsZS1mdWxsLXNjcmVlbi1kaWFsb2cuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RpYWxvZy1leGFtcGxlLWZ1bGwtc2NyZWVuLWRpYWxvZy5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZGlhbG9nLWhlYWRlcicsXHJcbiAgICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJzbWUtcGFkZGluZy1zcHJlYWQtaC1zbVwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2Rpdj4nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dIZWFkZXJDb21wb25lbnQge1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWRpYWxvZy1jb250ZW50JyxcclxuICAgIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PidcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ0NvbnRlbnRDb21wb25lbnQge1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWRpYWxvZy1mb290ZXInLFxyXG4gICAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwic21lLWxheW91dC1mbG9hdC1yaWdodCBzbWUtcG9zaXRpb24tcmlnaHQtaW5saW5lIHNtZS1wYWRkaW5nLXNwcmVhZC1oLXNtIHNtZS1sYXlvdXQtZGlhbG9nLWZvb3RlclwiPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ0Zvb3RlckNvbXBvbmVudCB7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIERpYWxvZ0Nsb3NlUmVhc29uIHtcclxuICAgIFNvZnREaXNtaXNzID0gMCxcclxuICAgIENsb3NlQnV0dG9uID0gMSxcclxuICAgIEVzY2FwZUtleSA9IDIsXHJcbiAgICBDb21wZXRpbmdEaWFsb2cgPSAzXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dNb2RlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgcGFuZSA9ICdwYW5lJztcclxuICAgIHB1YmxpYyBzdGF0aWMgd2lkZVBhbmUgPSAnd2lkZS1wYW5lJztcclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFjdCA9ICdjb21wYWN0JztcclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFjdFNxdWFyZSA9ICdjb21wYWN0LXNxdWFyZSc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGZ1bGxzY3JlZW4gPSAnZnVsbHNjcmVlbic7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNlbnRlcmVkID0gJ2NlbnRlcmVkJztcclxuICAgIHB1YmxpYyBzdGF0aWMgY2VudGVyZWRNZWRpdW0gPSAnY2VudGVyZWQtbWVkaXVtJztcclxuICAgIHB1YmxpYyBzdGF0aWMgY2VudGVyZWRMYXJnZSA9ICdjZW50ZXJlZC1sYXJnZSc7XHJcbiAgICBwdWJsaWMgc3RhdGljIG5vdGlmaWNhdGlvbiA9ICdub3RpZmljYXRpb24nO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbW9kYWxEaWFsb2cgPSAnbW9kYWwnO1xyXG5leHBvcnQgY29uc3QgYWxlcnREaWFsb2cgPSAnYWxlcnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1kaWFsb2cnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RpYWxvZy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ0NvbXBvbmVudCBleHRlbmRzIENvcmVCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0RpYWxvZ0NvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGF0aWMgY29uc3RhbnQgdG8gcHJvdmlkZSB1bmlxdWUgaWRzIGZvciBlYWNoIG1hc3RlciB2aWV3XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIG5leHREaWFsb2dJZCA9IDA7XHJcbiAgICBwdWJsaWMgZGlhbG9nQ2xhc3Nlczogc3RyaW5nW107XHJcbiAgICBwdWJsaWMgZGlhbG9nUm9sZSA9ICdhbGVydGRpYWxvZyc7XHJcblxyXG4gICAgcHVibGljIHN0cmluZ3MgPSBNc2Z0U21lLmdldFN0cmluZ3M8U3RyaW5ncz4oKTtcclxuXHJcbiAgICBwdWJsaWMgZGlhbG9nTGV2ZWwgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBiYWcgb2YgaWRzIGdlbmVyYXRlZCB1c2luZyBAc2VlIHttYXN0ZXJWaWV3SWR9IGFuZCB0aGUgbWFwIHJldHVybmVkIGZyb20gQHNlZSB7Y3JlYXRlSWRCYWd9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpZEJhZzogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHVuaXF1ZSBpZCBvZiB0aGlzIG1hc3RlciB2aWV3LlxyXG4gICAgICogVGhpcyBpcyB1c2VmdWwgd2hlbiBtYXN0ZXJWaWV3cyBuZWVkIHRvIHVzZSBhbiBJRCBidXQgbWF5IGFwcGVhciBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBwYWdlLlxyXG4gICAgICogVXNpbmcgdGhpcyBJRCBhcyB0aGUgYmFzaXMgZm9yIHRoZSBjb250cm9scyBpbnRlcm5hbCBJRHMgZ2VuZXJhdGVkIGluIEBzZWUge2NyZWF0ZUlkQmFnfSBrZWVwcyB0aGUgSURzIHVuaXF1ZS5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGRpYWxvZ0lkOiBudW1iZXI7XHJcbiAgICBwcm90ZWN0ZWQgbW9kZTogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd0JhY2tncm91bmRJbnRlcmFjdGlvbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcHVibGljIHNob3dCYWNrZHJvcCA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgY2xpY2tCYWNrZHJvcCA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYXJpYUxhYmVsID0gJyc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYXJpYURlc2NyaXB0aW9uID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhpcyBzaG91bGQgYmUgYW4gYWN0aW9uIHBhbmUgb3IgYSBjZW50ZXJlZCBkaWFsb2dcclxuICAgICAqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgZGlhbG9nTW9kZSBpbnN0ZWFkXHJcbiAgICAgKiBAcGFyYW0gbmV3VmFsdWUgaWYgdHJ1ZSwgdXNlcyBhIGxlZnQgcGFuZSBkaWFsb2csIG90aGVyd2lzZSBhIGNlbnRlcmVkIGRpYWxvZ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2V0IGFjdGlvblBhbmUobmV3VmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAobmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dNb2RlID0gRGlhbG9nTW9kZS5wYW5lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nTW9kZSA9IERpYWxvZ01vZGUuY2VudGVyZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldERpYWxvZ01vZGVGcm9tSW5wdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGUgZGlhbG9nIG1vZGUgdG8gdXNlXHJcbiAgICAgKiBAc2VlIERpYWxvZ01vZGVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgZGlhbG9nTW9kZShtb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlhbG9nTW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlhbG9nIHR5cGVzLiBNb3N0bHkgdXNlZCBmb3IgYWNjZXNzaWJpbGl0eS4gVmFsaWQgdmFsdWVzOlxyXG4gICAgICogQHNlZSBtb2RhbERpYWxvZyA9ICdtb2RhbCc7XHJcbiAgICAgKiBAc2VlIGFsZXJ0RGlhbG9nID0gXCJhbGVydFwiO1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZGlhbG9nVHlwZSA9ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmxhZyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGlhbG9nIHNob3VsZCBoYXZlIGEgY2xvc2UgYnV0dG9uIGluIHRvcCByaWdodCBvciBub3RcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGNsb3NlQnV0dG9uID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGNsb3NlUmVxdWVzdGVkOiBTdWJqZWN0PERpYWxvZ0Nsb3NlUmVhc29uPjtcclxuXHJcbiAgICBwcml2YXRlIGRvQXV0b0ZvY3VzID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGlzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNldCB2aXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHZpc2libGU7XHJcbiAgICAgICAgdGhpcy5kb0F1dG9Gb2N1cyA9IHZpc2libGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB2aXNpYmxlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmlzaWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUgPSBEaWFsb2dNb2RlLnBhbmU7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBjbG9zZVJlcXVlc3RlZCBzdWJqZWN0IHRvIG5vdGlmeSBkaWFsb2dzIHdoZW4gYSBjbG9zZSBpcyByZXF1ZXN0ZWQgYW5kIGhvdyBpdCB3YXMgcmVxdWVzdGVkIChEaWFsb2dDbG9zZVJlYXNvbilcclxuICAgICAgICB0aGlzLmNsb3NlUmVxdWVzdGVkID0gbmV3IFN1YmplY3Q8RGlhbG9nQ2xvc2VSZWFzb24+KCk7XHJcbiAgICAgICAgdGhpcy5zZXREaWFsb2dNb2RlRnJvbUlucHV0KCk7XHJcblxyXG4gICAgICAgIC8vIHNldHVwIGRpYWxvZyBpZCBhbmQgaWRCYWdcclxuICAgICAgICB0aGlzLmRpYWxvZ0lkID0gRGlhbG9nQ29tcG9uZW50Lm5leHREaWFsb2dJZCsrO1xyXG4gICAgICAgIHRoaXMuaWRCYWcgPSB0aGlzLmNyZWF0ZUlkQmFnKCk7XHJcbiAgICAgICAgTXNmdFNtZS5mb3JFYWNoS2V5KHRoaXMuaWRCYWcsIChrZXkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pZEJhZ1trZXldID0gYGRpYWxvZy0ke3RoaXMuZGlhbG9nSWQudG9TdHJpbmcoKX0tJHtrZXl9YDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb2N1bWVudDprZXl1cC5lc2NhcGUgaXMgdXNlZCBzbyB0aGF0IGEgZGlhbG9nIGlzIG5vdCBjbG9zZWQgd2hlbiB0cnlpbmcgdG8gY2xvc2UgYSB0b29sdGlwXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXl1cC5lc2NhcGUnKVxyXG4gICAgcHVibGljIG9uS2V5VXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uRXNjYXBlUHJlc3NlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuZ3VsYXIgTGlmZSBDeWNsZSBob29rIGZvciBBZnRlciBWaWV3IENoZWNrZWQuXHJcbiAgICAgKiBXaGVuIHRoZSB2aXNpYmlsaXR5IGNoYW5nZXMsIHdlIGFyZSBnb2luZyB0byBmb2N1cyBvbiB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGhhcyB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRvQXV0b0ZvY3VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b0ZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGxldGVkIHRoZSBjbG9zZVJlcXVlc3RlZCBzdWJqZWN0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmNsb3NlUmVxdWVzdGVkLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdXRvIGZvY3VzIG9uIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyBmb2N1c2FibGVcclxuICAgICAqL1xyXG4gICAgQERlYm91bmNlKDApXHJcbiAgICBwdWJsaWMgYXV0b0ZvY3VzKCkge1xyXG4gICAgICAgIHRoaXMuZG9BdXRvRm9jdXMgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9IERvbS5nZXRGaXJzdEZvY3VzYWJsZURlc2NlbmRlbnQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIGlmIChmaXJzdEZvY3VzYWJsZSkge1xyXG4gICAgICAgICAgICBmaXJzdEZvY3VzYWJsZS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3dzIHRoZSBkaWFsb2cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIaWRlcyB0aGUgZGlhbG9nLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vdGlmaWVzIGNsb3NlUmVxdWVzdGVkIHN1YnNjcmliZXJzIHRoYXQgdGhlIGJhY2tkcm9wIGhhcyBiZWVuIGNsaWNrZWQsIHJlcXVlc3RpbmcgYSBzb2Z0IGRpc21pc3NcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uQmFja2dyb3VuZENsaWNrZWQoKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVJlcXVlc3RlZC5uZXh0KERpYWxvZ0Nsb3NlUmVhc29uLlNvZnREaXNtaXNzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vdGlmaWVzIGNsb3NlUmVxdWVzdGVkIHN1YnNjcmliZXJzIHRoYXQgdGhlIGNsb3NlIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLCByZXF1ZXN0aW5nIGEgY2xvc2UgYnV0dG9uIGRpc21pc3NcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uQ2xvc2VDbGlja2VkKCkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VSZXF1ZXN0ZWQubmV4dChEaWFsb2dDbG9zZVJlYXNvbi5DbG9zZUJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRXNjYXBlUHJlc3NlZCgpIHtcclxuICAgICAgICB0aGlzLmNsb3NlUmVxdWVzdGVkLm5leHQoRGlhbG9nQ2xvc2VSZWFzb24uRXNjYXBlS2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ01vZGVDaGFuZ2UgPSBjaGFuZ2VzWydkaWFsb2dNb2RlJ107XHJcbiAgICAgICAgaWYgKGRpYWxvZ01vZGVDaGFuZ2UgJiYgZGlhbG9nTW9kZUNoYW5nZS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXREaWFsb2dNb2RlRnJvbUlucHV0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXREaWFsb2dNb2RlRnJvbUlucHV0KCkge1xyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5kaWFsb2dNb2RlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBbJ3NtZS1sYXlvdXQtYWJzb2x1dGUnLCAnc21lLXNjaGVtZS1kaWFsb2cnLCAnc21lLWFuaW1hdGlvbi10cmFuc2l0aW9uLXdpZHRoLXhzJ107XHJcbiAgICAgICAgY29uc3QgY29tbW9uUGFuZUNsYXNzZXMgPSBbJ3NtZS1wb3NpdGlvbi12ZXJ0aWNhbC1ub25lJywgJ3NtZS1wb3NpdGlvbi1yaWdodC1ub25lJ107XHJcblxyXG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gRGlhbG9nTW9kZS5wYW5lKSB7XHJcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCguLi5jb21tb25QYW5lQ2xhc3NlcywgJ3NtZS1sYXlvdXQtZGlhbG9nLXBhbmUnLCAnc21lLXNoYWRvdy1hY3Rpb24tcGFuZScpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUud2lkZVBhbmUpIHtcclxuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKC4uLmNvbW1vblBhbmVDbGFzc2VzLCAnc21lLWxheW91dC1kaWFsb2ctd2lkZS1wYW5lJywgJ3NtZS1zaGFkb3ctYWN0aW9uLXBhbmUnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlID09PSBEaWFsb2dNb2RlLmNvbXBhY3QpIHtcclxuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKC4uLmNvbW1vblBhbmVDbGFzc2VzLCAnc21lLWxheW91dC1kaWFsb2ctY29tcGFjdCcsICdzbWUtc2hhZG93LWFjdGlvbi1wYW5lJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuZXdWYWx1ZSA9PT0gRGlhbG9nTW9kZS5jb21wYWN0U3F1YXJlKSB7XHJcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc21lLXBvc2l0aW9uLWNlbnRlciBzbWUtbGF5b3V0LWRpYWxvZy1jZW50ZXJlZCBzbWUtbGF5b3V0LWRpYWxvZy1jb21wYWN0LXNxdWFyZScsICdzbWUtc2hhZG93LWRpYWxvZycpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUuZnVsbHNjcmVlbikge1xyXG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goLi4uY29tbW9uUGFuZUNsYXNzZXMsICdzbWUtbGF5b3V0LWRpYWxvZy1mdWxsc2NyZWVuJywgJ3NtZS1zaGFkb3ctYWN0aW9uLXBhbmUnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlID09PSBEaWFsb2dNb2RlLmNlbnRlcmVkKSB7XHJcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc21lLXBvc2l0aW9uLWNlbnRlciBzbWUtbGF5b3V0LWRpYWxvZy1jZW50ZXJlZCcsICdzbWUtc2hhZG93LWRpYWxvZycpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUuY2VudGVyZWRNZWRpdW0pIHtcclxuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzbWUtcG9zaXRpb24tY2VudGVyIHNtZS1sYXlvdXQtZGlhbG9nLWNlbnRlcmVkLW1lZGl1bScsICdzbWUtc2hhZG93LWRpYWxvZycpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUuY2VudGVyZWRMYXJnZSkge1xyXG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NtZS1wb3NpdGlvbi1jZW50ZXIgc21lLWxheW91dC1kaWFsb2ctY2VudGVyZWQtbGFyZ2UnLCAnc21lLXNoYWRvdy1kaWFsb2cnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlID09PSBEaWFsb2dNb2RlLm5vdGlmaWNhdGlvbikge1xyXG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NtZS1wb3NpdGlvbi10b3Atc20gc21lLXBvc2l0aW9uLXJpZ2h0LXNtIHNtZS1sYXlvdXQtZGlhbG9nLW5vdGlmaWNhdGlvbicsICdzbWUtc2hhZG93LWRpYWxvZycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdzbWUtYXJyYW5nZS1zdGFjay12IHNtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG8nKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dDbGFzc2VzID0gY2xhc3NlcztcclxuXHJcbiAgICAgICAgLy8gYWNjZXNzaWJpbGl0eVxyXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ1R5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSb2xlID0gdGhpcy5kaWFsb2dUeXBlID09PSBtb2RhbERpYWxvZyA/ICdkaWFsb2cnIDogJ2FsZXJ0ZGlhbG9nJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBieSBkZWZhdWx0IGNlbnRlcmVkIGRpYWxvZ3MgYXJlIGNvbnNpZGVyZWQgYXMgYWxlcnRzXHJcbiAgICAgICAgICAgIGNvbnN0IGFsZXJ0TW9kZXMgPSBbRGlhbG9nTW9kZS5jZW50ZXJlZCwgRGlhbG9nTW9kZS5jZW50ZXJlZExhcmdlLCBEaWFsb2dNb2RlLmNvbXBhY3RTcXVhcmVdO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JvbGUgPSBhbGVydE1vZGVzLnNvbWUobW9kZSA9PiB0aGlzLmRpYWxvZ01vZGUgPT09IG1vZGUpID8gJ2FsZXJ0ZGlhbG9nJyA6ICdkaWFsb2cnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYXJpYUxhYmVsU3BhbjogJycsXHJcbiAgICAgICAgICAgIGFyaWFEZXNjcmlwdGlvblNwYW46ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iLCI8c21lLWJhY2tkcm9wICpuZ0lmPVwidmlzaWJsZVwiIFtsZXZlbF09XCJkaWFsb2dMZXZlbFwiIChjbGlja2VkKT1cIiEhY2xpY2tCYWNrZHJvcCA/IG9uQmFja2dyb3VuZENsaWNrZWQoKSA6ICcnXCJcclxuICBbc2hvd0JhY2tkcm9wXT1cInNob3dCYWNrZHJvcFwiIFthbGxvd0JhY2tncm91bmRJbnRlcmFjdGlvbl09XCJhbGxvd0JhY2tncm91bmRJbnRlcmFjdGlvblwiXHJcbiAgY2xhc3M9XCJzbWUtbGF5b3V0LWFic29sdXRlIHNtZS1wb3NpdGlvbi1pbnNldC1ub25lXCI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJkaWFsb2dDbGFzc2VzXCIgW2F0dHIucm9sZV09XCJkaWFsb2dSb2xlXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIXZpc2libGVcIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbCA/IGlkQmFnLmFyaWFMYWJlbFNwYW4gOm51bGxcIlxyXG4gICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpcHRpb24gPyBpZEJhZy5hcmlhRGVzY3JpcHRpb25TcGFuIDogbnVsbFwiIGFyaWEtbW9kYWw9XCJ0cnVlXCI+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiY2xvc2VCdXR0b25cIiBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLWRpYWxvZy1jbG9zZS1idXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwib25DbG9zZUNsaWNrZWQoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uY2xvc2VcIlxyXG4gICAgICBbdGl0bGVdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uY2xvc2VcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1jYW5jZWxcIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1mb2N1cy16b25lXCI+XHJcbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNtZS1kaWFsb2ctaGVhZGVyXCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0by15IHNtZS1hcnJhbmdlLW92ZXJmbG93LWhpZGUteCBzbWUtZm9jdXMtem9uZSBzbWUtbGF5b3V0LXJlc3BvbnNpdmUtem9uZS14cyBzbWUtZGlhbG9nLWNvbnRlbnQtd3JhcHBlclwiPlxyXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJzbWUtZGlhbG9nLWNvbnRlbnRcIj48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1mb2N1cy16b25lXCI+XHJcbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNtZS1kaWFsb2ctZm9vdGVyXCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPHNwYW4gKm5nSWY9XCJhcmlhTGFiZWxcIiBjbGFzcz1cInNtZS1zY3JlZW4tcmVhZGVyXCIgW2lkXT1cImlkQmFnLmFyaWFMYWJlbFNwYW5cIj57e2FyaWFMYWJlbH19PC9zcGFuPlxyXG4gIDxzcGFuICpuZ0lmPVwiYXJpYURlc2NyaXB0aW9uXCIgY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiIFtpZF09XCJpZEJhZy5hcmlhRGVzY3JpcHRpb25TcGFuXCI+e3thcmlhRGVzY3JpcHRpb259fTwvc3Bhbj5cclxuPC9zbWUtYmFja2Ryb3A+Il19
400
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUlSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7SUNWekQsaUNBRXNEO0lBRHBELDBNQUEwQjtJQUUxQiwwQkFBOEM7SUFDaEQsaUJBQVM7OztJQUZQLHdFQUFtRDtJQUR4Qiw4RUFBNkQ7OztJQWU1RiwrQkFBNkU7SUFBQSxZQUFhO0lBQUEsaUJBQU87OztJQUEvQywrQ0FBMEI7SUFBQyxlQUFhO0lBQWIsc0NBQWE7OztJQUMxRiwrQkFBeUY7SUFBQSxZQUFtQjtJQUFBLGlCQUFPOzs7SUFBM0QscURBQWdDO0lBQUMsZUFBbUI7SUFBbkIsNENBQW1COzs7O0lBdkI5Ryx1Q0FFc0Q7SUFGRix1T0FBcUQsRUFBRSxJQUFDO0lBRzFHLDhCQUU4RztJQUM1RyxxRkFJUztJQUNULDhCQUFtRDtJQUNqRCxrQkFBb0Q7SUFDdEQsaUJBQU07SUFDTiw4QkFDK007SUFDN00scUJBQXFEO0lBQ3ZELGlCQUFNO0lBQ04sOEJBQW1EO0lBQ2pELHFCQUFv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QUMsQ0FBQztZQUM3RixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztTQUNsRztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNPLFdBQVc7UUFDakIsT0FBTztZQUNILGFBQWEsRUFBRSxFQUFFO1lBQ2pCLG1CQUFtQixFQUFFLEVBQUU7U0FDMUIsQ0FBQztJQUNOLENBQUM7O0FBbE9EOztHQUVHO0FBQ1ksNEJBQVksR0FBRyxDQUFDLENBQUM7aUdBWHZCLGVBQWU7dUVBQWYsZUFBZTswR0FBZixhQUFTOzs7UUN0RnRCLG9GQXdCZTs7UUF4QkEsa0NBQWE7O0FEaU94QjtJQURDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Ozs7Z0RBT1g7dUZBakpRLGVBQWU7Y0FKM0IsU0FBUztlQUFDO2dCQUNQLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixXQUFXLEVBQUUseUJBQXlCO2FBQ3pDO29IQWdDbUIsMEJBQTBCO2tCQUF6QyxLQUFLO1lBQ1UsWUFBWTtrQkFBM0IsS0FBSztZQUNVLGFBQWE7a0JBQTVCLEtBQUs7WUFDVSxTQUFTO2tCQUF4QixLQUFLO1lBQ1UsZUFBZTtrQkFBOUIsS0FBSztZQVFjLFVBQVU7a0JBQTdCLEtBQUs7WUFlSyxVQUFVO2tCQURwQixLQUFLO1lBY1UsVUFBVTtrQkFBekIsS0FBSztZQUtVLFdBQVc7a0JBQTFCLEtBQUs7WUFvQ0MsT0FBTztrQkFEYixZQUFZO21CQUFDLHVCQUF1QjtZQTRCOUIsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdDaGVja2VkLFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIFNpbXBsZUNoYW5nZXNcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGVib3VuY2UgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy9kZWJvdW5jZS5kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgRG9tIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kb20vZG9tJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTdHJpbmdzIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdGVkL3N0cmluZ3MnO1xyXG5pbXBvcnQgeyBDb3JlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi9iYXNlLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICpcclxuICogQHNtZURvYyB7QGxhYmVsIERpYWxvZyBAaWQgc21lLWRpYWxvZ31cclxuICpcclxuICogQG92ZXJ2aWV3XHJcbiAqIEBmaWxlIHtAZmlsZXBhdGggLi9leGFtcGxlcy9kaWFsb2ctb3ZlcnZpZXcubWR9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgQmFzaWMgVXNhZ2UgQGlkIGJhc2ljLXVzYWdlfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9kaWFsb2ctZXhhbXBsZS5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZGlhbG9nLWV4YW1wbGUuY29tcG9uZW50Lmh0bWx9XHJcbiAqXHJcbiAqIEBleGFtcGxlIHtAbGFiZWwgRGlhbG9nIENoYWluIEBpZCBkaWFsb2ctY2hhaW59XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50LnRzIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RpYWxvZy1leGFtcGxlLWRpYWxvZy1jaGFpbi5jb21wb25lbnQudHN9XHJcbiAqIEBmaWxlIHtAZmlsZW5hbWUgY29tcG9uZW50Lmh0bWwgQGZpbGVwYXRoIC4vZXhhbXBsZXMvZGlhbG9nLWV4YW1wbGUtZGlhbG9nLWNoYWluLmNvbXBvbmVudC5odG1sfVxyXG4gKlxyXG4gKiBAZXhhbXBsZSB7QGxhYmVsIEZ1bGwgU2NyZWVuIERpYWxvZyBAaWQgZnVsbC1zY3JlZW4tZGlhbG9nfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC50cyBAZmlsZXBhdGggLi9leGFtcGxlcy9kaWFsb2ctZXhhbXBsZS1mdWxsLXNjcmVlbi1kaWFsb2cuY29tcG9uZW50LnRzfVxyXG4gKiBAZmlsZSB7QGZpbGVuYW1lIGNvbXBvbmVudC5odG1sIEBmaWxlcGF0aCAuL2V4YW1wbGVzL2RpYWxvZy1leGFtcGxlLWZ1bGwtc2NyZWVuLWRpYWxvZy5jb21wb25lbnQuaHRtbH1cclxuICpcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzbWUtZGlhbG9nLWhlYWRlcicsXHJcbiAgICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJzbWUtcGFkZGluZy1zcHJlYWQtaC1zbVwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2Rpdj4nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dIZWFkZXJDb21wb25lbnQge1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWRpYWxvZy1jb250ZW50JyxcclxuICAgIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PidcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ0NvbnRlbnRDb21wb25lbnQge1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnc21lLWRpYWxvZy1mb290ZXInLFxyXG4gICAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwic21lLWxheW91dC1mbG9hdC1yaWdodCBzbWUtcG9zaXRpb24tcmlnaHQtaW5saW5lIHNtZS1wYWRkaW5nLXNwcmVhZC1oLXNtIHNtZS1sYXlvdXQtZGlhbG9nLWZvb3RlclwiPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ0Zvb3RlckNvbXBvbmVudCB7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIERpYWxvZ0Nsb3NlUmVhc29uIHtcclxuICAgIFNvZnREaXNtaXNzID0gMCxcclxuICAgIENsb3NlQnV0dG9uID0gMSxcclxuICAgIEVzY2FwZUtleSA9IDIsXHJcbiAgICBDb21wZXRpbmdEaWFsb2cgPSAzXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dNb2RlIHtcclxuICAgIHB1YmxpYyBzdGF0aWMgcGFuZSA9ICdwYW5lJztcclxuICAgIHB1YmxpYyBzdGF0aWMgd2lkZVBhbmUgPSAnd2lkZS1wYW5lJztcclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFjdCA9ICdjb21wYWN0JztcclxuICAgIHB1YmxpYyBzdGF0aWMgY29tcGFjdFNxdWFyZSA9ICdjb21wYWN0LXNxdWFyZSc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGZ1bGxzY3JlZW4gPSAnZnVsbHNjcmVlbic7XHJcbiAgICBwdWJsaWMgc3RhdGljIGNlbnRlcmVkID0gJ2NlbnRlcmVkJztcclxuICAgIHB1YmxpYyBzdGF0aWMgY2VudGVyZWRNZWRpdW0gPSAnY2VudGVyZWQtbWVkaXVtJztcclxuICAgIHB1YmxpYyBzdGF0aWMgY2VudGVyZWRMYXJnZSA9ICdjZW50ZXJlZC1sYXJnZSc7XHJcbiAgICBwdWJsaWMgc3RhdGljIG5vdGlmaWNhdGlvbiA9ICdub3RpZmljYXRpb24nO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbW9kYWxEaWFsb2cgPSAnbW9kYWwnO1xyXG5leHBvcnQgY29uc3QgYWxlcnREaWFsb2cgPSAnYWxlcnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1kaWFsb2cnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RpYWxvZy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ0NvbXBvbmVudCBleHRlbmRzIENvcmVCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0RpYWxvZ0NvbXBvbmVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGF0aWMgY29uc3RhbnQgdG8gcHJvdmlkZSB1bmlxdWUgaWRzIGZvciBlYWNoIG1hc3RlciB2aWV3XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIG5leHREaWFsb2dJZCA9IDA7XHJcbiAgICBwdWJsaWMgZGlhbG9nQ2xhc3Nlczogc3RyaW5nW107XHJcbiAgICBwdWJsaWMgZGlhbG9nUm9sZSA9ICdhbGVydGRpYWxvZyc7XHJcblxyXG4gICAgcHVibGljIHN0cmluZ3MgPSBNc2Z0U21lLmdldFN0cmluZ3M8U3RyaW5ncz4oKTtcclxuXHJcbiAgICBwdWJsaWMgZGlhbG9nTGV2ZWwgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSBiYWcgb2YgaWRzIGdlbmVyYXRlZCB1c2luZyBAc2VlIHttYXN0ZXJWaWV3SWR9IGFuZCB0aGUgbWFwIHJldHVybmVkIGZyb20gQHNlZSB7Y3JlYXRlSWRCYWd9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpZEJhZzogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHVuaXF1ZSBpZCBvZiB0aGlzIG1hc3RlciB2aWV3LlxyXG4gICAgICogVGhpcyBpcyB1c2VmdWwgd2hlbiBtYXN0ZXJWaWV3cyBuZWVkIHRvIHVzZSBhbiBJRCBidXQgbWF5IGFwcGVhciBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBwYWdlLlxyXG4gICAgICogVXNpbmcgdGhpcyBJRCBhcyB0aGUgYmFzaXMgZm9yIHRoZSBjb250cm9scyBpbnRlcm5hbCBJRHMgZ2VuZXJhdGVkIGluIEBzZWUge2NyZWF0ZUlkQmFnfSBrZWVwcyB0aGUgSURzIHVuaXF1ZS5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGRpYWxvZ0lkOiBudW1iZXI7XHJcbiAgICBwcm90ZWN0ZWQgbW9kZTogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd0JhY2tncm91bmRJbnRlcmFjdGlvbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcHVibGljIHNob3dCYWNrZHJvcCA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgY2xpY2tCYWNrZHJvcCA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYXJpYUxhYmVsID0gJyc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYXJpYURlc2NyaXB0aW9uID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHdoZXRoZXIgdGhpcyBzaG91bGQgYmUgYW4gYWN0aW9uIHBhbmUgb3IgYSBjZW50ZXJlZCBkaWFsb2dcclxuICAgICAqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgZGlhbG9nTW9kZSBpbnN0ZWFkXHJcbiAgICAgKiBAcGFyYW0gbmV3VmFsdWUgaWYgdHJ1ZSwgdXNlcyBhIGxlZnQgcGFuZSBkaWFsb2csIG90aGVyd2lzZSBhIGNlbnRlcmVkIGRpYWxvZ1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2V0IGFjdGlvblBhbmUobmV3VmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAobmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dNb2RlID0gRGlhbG9nTW9kZS5wYW5lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nTW9kZSA9IERpYWxvZ01vZGUuY2VudGVyZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldERpYWxvZ01vZGVGcm9tSW5wdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB0aGUgZGlhbG9nIG1vZGUgdG8gdXNlXHJcbiAgICAgKiBAc2VlIERpYWxvZ01vZGVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgZGlhbG9nTW9kZShtb2RlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZGlhbG9nTW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlhbG9nIHR5cGVzLiBNb3N0bHkgdXNlZCBmb3IgYWNjZXNzaWJpbGl0eS4gVmFsaWQgdmFsdWVzOlxyXG4gICAgICogQHNlZSBtb2RhbERpYWxvZyA9ICdtb2RhbCc7XHJcbiAgICAgKiBAc2VlIGFsZXJ0RGlhbG9nID0gXCJhbGVydFwiO1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZGlhbG9nVHlwZSA9ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmxhZyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGlhbG9nIHNob3VsZCBoYXZlIGEgY2xvc2UgYnV0dG9uIGluIHRvcCByaWdodCBvciBub3RcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGNsb3NlQnV0dG9uID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGNsb3NlUmVxdWVzdGVkOiBTdWJqZWN0PERpYWxvZ0Nsb3NlUmVhc29uPjtcclxuXHJcbiAgICBwcml2YXRlIGRvQXV0b0ZvY3VzID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGlzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgcHVibGljIHNldCB2aXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHZpc2libGU7XHJcbiAgICAgICAgdGhpcy5kb0F1dG9Gb2N1cyA9IHZpc2libGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB2aXNpYmxlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmlzaWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG5cclxuICAgICAgICB0aGlzLm1vZGUgPSBEaWFsb2dNb2RlLnBhbmU7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBjbG9zZVJlcXVlc3RlZCBzdWJqZWN0IHRvIG5vdGlmeSBkaWFsb2dzIHdoZW4gYSBjbG9zZSBpcyByZXF1ZXN0ZWQgYW5kIGhvdyBpdCB3YXMgcmVxdWVzdGVkIChEaWFsb2dDbG9zZVJlYXNvbilcclxuICAgICAgICB0aGlzLmNsb3NlUmVxdWVzdGVkID0gbmV3IFN1YmplY3Q8RGlhbG9nQ2xvc2VSZWFzb24+KCk7XHJcbiAgICAgICAgdGhpcy5zZXREaWFsb2dNb2RlRnJvbUlucHV0KCk7XHJcblxyXG4gICAgICAgIC8vIHNldHVwIGRpYWxvZyBpZCBhbmQgaWRCYWdcclxuICAgICAgICB0aGlzLmRpYWxvZ0lkID0gRGlhbG9nQ29tcG9uZW50Lm5leHREaWFsb2dJZCsrO1xyXG4gICAgICAgIHRoaXMuaWRCYWcgPSB0aGlzLmNyZWF0ZUlkQmFnKCk7XHJcbiAgICAgICAgTXNmdFNtZS5mb3JFYWNoS2V5KHRoaXMuaWRCYWcsIChrZXkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pZEJhZ1trZXldID0gYGRpYWxvZy0ke3RoaXMuZGlhbG9nSWQudG9TdHJpbmcoKX0tJHtrZXl9YDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBkb2N1bWVudDprZXl1cC5lc2NhcGUgaXMgdXNlZCBzbyB0aGF0IGEgZGlhbG9nIGlzIG5vdCBjbG9zZWQgd2hlbiB0cnlpbmcgdG8gY2xvc2UgYSB0b29sdGlwXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXl1cC5lc2NhcGUnKVxyXG4gICAgcHVibGljIG9uS2V5VXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uRXNjYXBlUHJlc3NlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuZ3VsYXIgTGlmZSBDeWNsZSBob29rIGZvciBBZnRlciBWaWV3IENoZWNrZWQuXHJcbiAgICAgKiBXaGVuIHRoZSB2aXNpYmlsaXR5IGNoYW5nZXMsIHdlIGFyZSBnb2luZyB0byBmb2N1cyBvbiB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGhhcyB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRvQXV0b0ZvY3VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b0ZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcGxldGVkIHRoZSBjbG9zZVJlcXVlc3RlZCBzdWJqZWN0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmNsb3NlUmVxdWVzdGVkLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdXRvIGZvY3VzIG9uIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyBmb2N1c2FibGVcclxuICAgICAqL1xyXG4gICAgQERlYm91bmNlKDApXHJcbiAgICBwdWJsaWMgYXV0b0ZvY3VzKCkge1xyXG4gICAgICAgIHRoaXMuZG9BdXRvRm9jdXMgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9IERvbS5nZXRGaXJzdEZvY3VzYWJsZURlc2NlbmRlbnQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIGlmIChmaXJzdEZvY3VzYWJsZSkge1xyXG4gICAgICAgICAgICBmaXJzdEZvY3VzYWJsZS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3dzIHRoZSBkaWFsb2cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIaWRlcyB0aGUgZGlhbG9nLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vdGlmaWVzIGNsb3NlUmVxdWVzdGVkIHN1YnNjcmliZXJzIHRoYXQgdGhlIGJhY2tkcm9wIGhhcyBiZWVuIGNsaWNrZWQsIHJlcXVlc3RpbmcgYSBzb2Z0IGRpc21pc3NcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uQmFja2dyb3VuZENsaWNrZWQoKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVJlcXVlc3RlZC5uZXh0KERpYWxvZ0Nsb3NlUmVhc29uLlNvZnREaXNtaXNzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5vdGlmaWVzIGNsb3NlUmVxdWVzdGVkIHN1YnNjcmliZXJzIHRoYXQgdGhlIGNsb3NlIGJ1dHRvbiBoYXMgYmVlbiBwcmVzc2VkLCByZXF1ZXN0aW5nIGEgY2xvc2UgYnV0dG9uIGRpc21pc3NcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uQ2xvc2VDbGlja2VkKCkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VSZXF1ZXN0ZWQubmV4dChEaWFsb2dDbG9zZVJlYXNvbi5DbG9zZUJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRXNjYXBlUHJlc3NlZCgpIHtcclxuICAgICAgICB0aGlzLmNsb3NlUmVxdWVzdGVkLm5leHQoRGlhbG9nQ2xvc2VSZWFzb24uRXNjYXBlS2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ01vZGVDaGFuZ2UgPSBjaGFuZ2VzWydkaWFsb2dNb2RlJ107XHJcbiAgICAgICAgaWYgKGRpYWxvZ01vZGVDaGFuZ2UgJiYgZGlhbG9nTW9kZUNoYW5nZS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXREaWFsb2dNb2RlRnJvbUlucHV0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXREaWFsb2dNb2RlRnJvbUlucHV0KCkge1xyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5kaWFsb2dNb2RlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBbJ3NtZS1sYXlvdXQtYWJzb2x1dGUnLCAnc21lLXNjaGVtZS1kaWFsb2cnLCAnc21lLWFuaW1hdGlvbi10cmFuc2l0aW9uLXdpZHRoLXhzJ107XHJcbiAgICAgICAgY29uc3QgY29tbW9uUGFuZUNsYXNzZXMgPSBbJ3NtZS1wb3NpdGlvbi12ZXJ0aWNhbC1ub25lJywgJ3NtZS1wb3NpdGlvbi1yaWdodC1ub25lJ107XHJcblxyXG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gRGlhbG9nTW9kZS5wYW5lKSB7XHJcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCguLi5jb21tb25QYW5lQ2xhc3NlcywgJ3NtZS1sYXlvdXQtZGlhbG9nLXBhbmUnLCAnc21lLXNoYWRvdy1hY3Rpb24tcGFuZScpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUud2lkZVBhbmUpIHtcclxuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKC4uLmNvbW1vblBhbmVDbGFzc2VzLCAnc21lLWxheW91dC1kaWFsb2ctd2lkZS1wYW5lJywgJ3NtZS1zaGFkb3ctYWN0aW9uLXBhbmUnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlID09PSBEaWFsb2dNb2RlLmNvbXBhY3QpIHtcclxuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKC4uLmNvbW1vblBhbmVDbGFzc2VzLCAnc21lLWxheW91dC1kaWFsb2ctY29tcGFjdCcsICdzbWUtc2hhZG93LWFjdGlvbi1wYW5lJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuZXdWYWx1ZSA9PT0gRGlhbG9nTW9kZS5jb21wYWN0U3F1YXJlKSB7XHJcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc21lLXBvc2l0aW9uLWNlbnRlciBzbWUtbGF5b3V0LWRpYWxvZy1jZW50ZXJlZCBzbWUtbGF5b3V0LWRpYWxvZy1jb21wYWN0LXNxdWFyZScsICdzbWUtc2hhZG93LWRpYWxvZycpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUuZnVsbHNjcmVlbikge1xyXG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goLi4uY29tbW9uUGFuZUNsYXNzZXMsICdzbWUtbGF5b3V0LWRpYWxvZy1mdWxsc2NyZWVuJywgJ3NtZS1zaGFkb3ctYWN0aW9uLXBhbmUnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlID09PSBEaWFsb2dNb2RlLmNlbnRlcmVkKSB7XHJcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnc21lLXBvc2l0aW9uLWNlbnRlciBzbWUtbGF5b3V0LWRpYWxvZy1jZW50ZXJlZCcsICdzbWUtc2hhZG93LWRpYWxvZycpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUuY2VudGVyZWRNZWRpdW0pIHtcclxuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdzbWUtcG9zaXRpb24tY2VudGVyIHNtZS1sYXlvdXQtZGlhbG9nLWNlbnRlcmVkLW1lZGl1bScsICdzbWUtc2hhZG93LWRpYWxvZycpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUgPT09IERpYWxvZ01vZGUuY2VudGVyZWRMYXJnZSkge1xyXG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NtZS1wb3NpdGlvbi1jZW50ZXIgc21lLWxheW91dC1kaWFsb2ctY2VudGVyZWQtbGFyZ2UnLCAnc21lLXNoYWRvdy1kaWFsb2cnKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlID09PSBEaWFsb2dNb2RlLm5vdGlmaWNhdGlvbikge1xyXG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goJ3NtZS1wb3NpdGlvbi10b3Atc20gc21lLXBvc2l0aW9uLXJpZ2h0LXNtIHNtZS1sYXlvdXQtZGlhbG9nLW5vdGlmaWNhdGlvbicsICdzbWUtc2hhZG93LWRpYWxvZycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdzbWUtYXJyYW5nZS1zdGFjay12IHNtZS1hcnJhbmdlLW92ZXJmbG93LWF1dG8nKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dDbGFzc2VzID0gY2xhc3NlcztcclxuXHJcbiAgICAgICAgLy8gYWNjZXNzaWJpbGl0eVxyXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ1R5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSb2xlID0gdGhpcy5kaWFsb2dUeXBlID09PSBtb2RhbERpYWxvZyA/ICdkaWFsb2cnIDogJ2FsZXJ0ZGlhbG9nJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBieSBkZWZhdWx0IGNlbnRlcmVkIGRpYWxvZ3MgYXJlIGNvbnNpZGVyZWQgYXMgYWxlcnRzXHJcbiAgICAgICAgICAgIGNvbnN0IGFsZXJ0TW9kZXMgPSBbRGlhbG9nTW9kZS5jZW50ZXJlZCwgRGlhbG9nTW9kZS5jZW50ZXJlZExhcmdlLCBEaWFsb2dNb2RlLmNvbXBhY3RTcXVhcmVdO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1JvbGUgPSBhbGVydE1vZGVzLnNvbWUobW9kZSA9PiB0aGlzLmRpYWxvZ01vZGUgPT09IG1vZGUpID8gJ2FsZXJ0ZGlhbG9nJyA6ICdkaWFsb2cnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgdGhlIGlkQmFnIHVzZWQgYnkgdGhpcyBjb21wb25lbnQgdG8gc3RvcmUgdW5pcXVlIGVsZW1lbnQgaWRzLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSWRCYWcoKTogTXNmdFNtZS5TdHJpbmdNYXA8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYXJpYUxhYmVsU3BhbjogJycsXHJcbiAgICAgICAgICAgIGFyaWFEZXNjcmlwdGlvblNwYW46ICcnXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iLCI8c21lLWJhY2tkcm9wICpuZ0lmPVwidmlzaWJsZVwiIFtsZXZlbF09XCJkaWFsb2dMZXZlbFwiIChjbGlja2VkKT1cIiEhY2xpY2tCYWNrZHJvcCA/IG9uQmFja2dyb3VuZENsaWNrZWQoKSA6ICcnXCJcclxuICBbc2hvd0JhY2tkcm9wXT1cInNob3dCYWNrZHJvcFwiIFthbGxvd0JhY2tncm91bmRJbnRlcmFjdGlvbl09XCJhbGxvd0JhY2tncm91bmRJbnRlcmFjdGlvblwiXHJcbiAgY2xhc3M9XCJzbWUtbGF5b3V0LWFic29sdXRlIHNtZS1wb3NpdGlvbi1pbnNldC1ub25lXCI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJkaWFsb2dDbGFzc2VzXCIgW2F0dHIucm9sZV09XCJkaWFsb2dSb2xlXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIXZpc2libGVcIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbCA/IGlkQmFnLmFyaWFMYWJlbFNwYW4gOidzbWUtZGlhbG9nLXRpdGxlJ1wiXHJcbiAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImFyaWFEZXNjcmlwdGlvbiA/IGlkQmFnLmFyaWFEZXNjcmlwdGlvblNwYW4gOiAnc21lLWRpYWxvZy1kZXNjJ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCI+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiY2xvc2VCdXR0b25cIiBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLWRpYWxvZy1jbG9zZS1idXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwib25DbG9zZUNsaWNrZWQoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uY2xvc2VcIlxyXG4gICAgICBbdGl0bGVdPVwic3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5Db21tb24uY2xvc2VcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtaWNvbiBzbWUtaWNvbi1jYW5jZWxcIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1mb2N1cy16b25lXCI+XHJcbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNtZS1kaWFsb2ctaGVhZGVyXCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwic21lLWxheW91dC1yZWxhdGl2ZSBzbWUtcG9zaXRpb24tZmxleC1hdXRvIHNtZS1wYWRkaW5nLWhvcml6b250YWwtbGcgc21lLWFycmFuZ2Utb3ZlcmZsb3ctYXV0by15IHNtZS1hcnJhbmdlLW92ZXJmbG93LWhpZGUteCBzbWUtZm9jdXMtem9uZSBzbWUtbGF5b3V0LXJlc3BvbnNpdmUtem9uZS14cyBzbWUtZGlhbG9nLWNvbnRlbnQtd3JhcHBlclwiPlxyXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJzbWUtZGlhbG9nLWNvbnRlbnRcIj48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1mb2N1cy16b25lXCI+XHJcbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInNtZS1kaWFsb2ctZm9vdGVyXCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPHNwYW4gKm5nSWY9XCJhcmlhTGFiZWxcIiBjbGFzcz1cInNtZS1zY3JlZW4tcmVhZGVyXCIgW2lkXT1cImlkQmFnLmFyaWFMYWJlbFNwYW5cIj57e2FyaWFMYWJlbH19PC9zcGFuPlxyXG4gIDxzcGFuICpuZ0lmPVwiYXJpYURlc2NyaXB0aW9uXCIgY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiIFtpZF09XCJpZEJhZy5hcmlhRGVzY3JpcHRpb25TcGFuXCI+e3thcmlhRGVzY3JpcHRpb259fTwvc3Bhbj5cclxuPC9zbWUtYmFja2Ryb3A+XHJcbiJdfQ==
@@ -191,7 +191,8 @@ export class DropdownService {
191
191
  // if the esc key is pressed, close the popup and focus on the toggle element
192
192
  if (event.keyCode === KeyCode.Escape) {
193
193
  if (this.activeDropdown && this.activeDropdown.toggleElement) {
194
- const nextElement = Dom.getNextFocusableElement(this.activeDropdown.toggleElement.nativeElement);
194
+ const docElement = this.activeDropdown.toggleElement.nativeElement;
195
+ const nextElement = Dom.getFirstFocusableDescendent(docElement) || Dom.getNextFocusableElement(docElement);
195
196
  if (nextElement) {
196
197
  nextElement.focus();
197
198
  }
@@ -569,4 +570,4 @@ __decorate([
569
570
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DropdownService, [{
570
571
  type: Injectable
571
572
  }], null, { closeNestedHelper: [] }); })();
572
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2Ryb3Bkb3duL2Ryb3Bkb3duLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUM5RixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0RBQWtELENBQUM7O0FBT3ZFOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQU41QjtRQWFZLDJCQUFzQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pELDZCQUF3QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsMEJBQXFCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsd0JBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0Q7O1dBRUc7UUFDSyxpQkFBWSxHQUFvQixFQUFFLENBQUM7UUFDM0MsMEVBQTBFO1FBQzFFLHVFQUF1RTtRQUMvRCw0QkFBdUIsR0FBb0M7WUFDL0QsS0FBSyxFQUFFO2dCQUNILCtDQUErQztnQkFDL0MscUNBQXFDO2dCQUNyQyxHQUFHLEVBQUUsR0FBRztnQkFDUixNQUFNLEVBQUUsQ0FBQztnQkFDVCxXQUFXLEVBQUUsSUFBSTthQUNwQjtZQUNELE1BQU0sRUFBRTtnQkFDSiw4Q0FBOEM7Z0JBQzlDLHFDQUFxQztnQkFDckMsR0FBRyxFQUFFLEdBQUc7Z0JBQ1Is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QUU7Ozs7d0RBUVA7dUZBcmlCUSxlQUFlO2NBTjNCLFVBQVU7Z0JBdWlCQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFlpZWxkIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMveWllbGQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgS2V5Q29kZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGF0YS9hY2Nlc3NpYmlsaXR5LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBEb20gfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RvbS9kb20nO1xyXG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgRHJvcGRvd25IZWlnaHRDYWxjdWxhdGlvblJlc3VsdCB9IGZyb20gJy4vbW9kZWxzL2Ryb3Bkb3duLWhlaWdodC1jYWxjdWxhdGlvbi1yZXN1bHQnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkhlaWdodENhbGN1bGF0aW9uU2NoZW1hIH0gZnJvbSAnLi9tb2RlbHMvZHJvcGRvd24taGVpZ2h0LXNjaGVtYSc7XHJcblxyXG5leHBvcnQgdHlwZSBFdmVudHMgPSBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCB8IEZvY3VzRXZlbnQ7XHJcbkBJbmplY3RhYmxlKClcclxuLyoqXHJcbiAqIFNlcnZpY2UgZm9yIG1haW50YWluaW5nIGRyb3Bkb3duIHN0YXRlLlxyXG4gKiBPbmx5IG9uZSBkcm9wZG93biBjYW4gYmUgb3BlbmVkIGF0IGEgdGltZS5cclxuICogVGhpcyBkb2VzIG5vdCBzdXBwb3J0IG5lc3RlZCBkcm9wZG93bnMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRHJvcGRvd25TZXJ2aWNlIHtcclxuICAgIC8vIE1pbmltdW0gc3BhY2UgYWJvdmUgb3IgYmVsb3cgdGhlIGRyb3Bkb3duIHRvIGRldGVybWluZSBwb3NpdGlvbmluZy5cclxuICAgIHByaXZhdGUgc3RhdGljIG1pblNwYWNlRm9yRHJvcGRvd24gPSAzMDA7XHJcbiAgICAvLyBJZiB0aGUgb3JpZ2luYWwgaGVpZ2h0IGZvciB0aGUgd2hvbGUgZHJvcGRvd24gaXMgMiB0aW1lcyB0aGUgYXZhaWxhYmxlIHNwYWNlXHJcbiAgICAvLyBzaG91bGQgZGlzcGxheSBhcyBmdWxsIGhlaWdodFxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc2hvdWxkVXNlRnVsbEhlaWdodERyb3Bkb3duUmF0aW8gPSAyO1xyXG5cclxuICAgIHByaXZhdGUgb25Eb2N1bWVudENsaWNrQmluZGluZyA9IHRoaXMub25Eb2N1bWVudENsaWNrLmJpbmQodGhpcyk7XHJcbiAgICBwcml2YXRlIG9uRG9jdW1lbnRLZXlkb3duQmluZGluZyA9IHRoaXMub25Eb2N1bWVudEtleWRvd24uYmluZCh0aGlzKTtcclxuICAgIHByaXZhdGUgb25XaW5kb3dTY3JvbGxCaW5kaW5nID0gdGhpcy5vbldpbmRvd1Njcm9sbC5iaW5kKHRoaXMpO1xyXG4gICAgcHJpdmF0ZSBvbldpbmRvd0JsdXJCaW5kaW5nID0gdGhpcy5vbldpbmRvd0JsdXIuYmluZCh0aGlzKTtcclxuICAgIHByaXZhdGUgYWN0aXZlRHJvcGRvd246IERyb3Bkb3duO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIHNhdmVzIHRoZSByZWNvcmRzIGZvciB0aGUgbGFzdCBvcGVuZWQgZHJvcGRvd25zXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZHJvcGRvd25MaXN0OiBBcnJheTxEcm9wZG93bj4gPSBbXTtcclxuICAgIC8vIEl0IGRlZmluZXMgdGhlIGhlaWdodCBmb3IgdGhlIGRyb3Bkb3duIHdpdGggdGhlIHNwZWNpZmljIHdpbmRvdyBoZWlnaHQuXHJcbiAgICAvLyBUaGlzIHdpbGwgYmUgZW5hYmxlZCBvbmx5IGlmIDxzbWUtZHJvcGRvd24gW2NhbGN1bGF0ZUhlaWdodF09XCJ0cnVlXCI+XHJcbiAgICBwcml2YXRlIGhlaWdodENhbGN1bGF0aW9uT2JqZWN0OiBEcm9wZG93bkhlaWdodENhbGN1bGF0aW9uU2NoZW1hID0ge1xyXG4gICAgICAgIHNtYWxsOiB7XHJcbiAgICAgICAgICAgIC8vIHdoZW4gdGhlIHdpbmRvdyBoZWlnaHQgaXMgc21hbGxlciB0aGFuIDMwMHB4XHJcbiAgICAgICAgICAgIC8vIFRoZSBzbWFsbGVzdCBtYXJnaW4gdG9wIGFuZCBib3R0b21cclxuICAgICAgICAgICAgbWF4OiAzMDAsXHJcbiAgICAgICAgICAgIG1hcmdpbjogNSxcclxuICAgICAgICAgICAgd2hvbGVIZWlnaHQ6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1lZGl1bToge1xyXG4gICAgICAgICAgICAvLyB3aGVuIHRoZW4gd2luZG93IGhlaWdodCBpcyB3aXRoaW4gWzMwMSw1MDBdXHJcbiAgICAgICAgICAgIC8vIFRoZSBzbWFsbGVzdCBtYXJnaW4gdG9wIGFuZCBib3R0b21cclxuICAgICAgICAgICAgbWluOiAzMDAsXHJcbiAgICAgICAgICAgIG1heDogNTAwLFxyXG4gICAgICAgICAgICBtYXJnaW46IDEwXHJcbiAgICAgICAgfSxcclxuICAgICAgICBsYXJnZToge1xyXG4gICAgICAgICAgICAvLyB3aGVuIHRoZW4gd2luZG93IGhlaWdodCBpcyBncmVhdGVyIHRoYW4gNTAwcHhcclxuICAgICAgICAgICAgLy8gVGhlIHNtYWxsZXN0IG1hcmdpbiB0b3AgYW5kIGJvdHRvbVxyXG4gICAgICAgICAgICBtaW46IDUwMCxcclxuICAgICAgICAgICAgbWFyZ2luOiAyMFxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBvcGVucyBhIGRyb3Bkb3duIGFuZCBzZXRzIGl0IHRvIGFjdGl2ZVxyXG4gICAgICogQHBhcmFtIGRyb3Bkb3duIFRoZSBkcm9wZG93biB0byBvcGVuXHJcbiAgICAgKiBAcGFyYW0gY2FsY3VsYXRlSGVpZ2h0IFdoZXRoZXIgdG8gZG8gaGVpZ2h0IGNhbGN1bGF0aW9uXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcGVuKGRyb3Bkb3duOiBEcm9wZG93biwgY2FsY3VsYXRlSGVpZ2h0PzogYm9vbGVhbiwgZGlzcGxheVRvU2lkZT86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzQ3VycmVudERyb3Bkb3duQ2hpbGRGcm9tQWN0aXZlRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZURyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBub3QgYW4gYWN0aXZlIGRyb3Bkb3duLCBhZGQgaGFuZGxlciBmb3IgYXV0byBjbG9zaW5nIHRoZSBkcm9wZG93blxyXG4gICAgICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkRvY3VtZW50Q2xpY2tCaW5kaW5nKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbkRvY3VtZW50S2V5ZG93bkJpbmRpbmcpO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25XaW5kb3dTY3JvbGxCaW5kaW5nLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vbldpbmRvd0JsdXJCaW5kaW5nKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBwYXNzZWQgaW4gZHJvcGRvd24gaXMgbm90IHRoZSBhY3RpdmUgZHJvcGRvd25cclxuICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnQgZHJvcGRvd24gaXMgdGhlIGNoaWxkIG9mIHRoZSBhY3RpdmUgZHJvcGRvd25cclxuICAgICAgICAgICAgICAgIC8vIHdlIHNob3VsZCBrZWVwIGJvdGggZHJvcGRvd24gb3BlbmluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlRHJvcGRvd24gIT09IGRyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZHJvcGRvd25Ob2RlID0gZHJvcGRvd24uY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVEcm9wZG93bkNoaWxkcmVuID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zbWUtbGF5b3V0LWRyb3Bkb3duJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZURyb3Bkb3duQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGl2ZURyb3Bkb3duQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVEcm9wZG93bkNoaWxkcmVuW2ldLmlzU2FtZU5vZGUoZHJvcGRvd25Ob2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudERyb3Bkb3duQ2hpbGRGcm9tQWN0aXZlRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0N1cnJlbnREcm9wZG93bkNoaWxkRnJvbUFjdGl2ZURyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRHJvcGRvd24uaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURyb3Bkb3duLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBjbG9zZSB0aGUgYWN0aXZlIGRyb3Bkb3duXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEcm9wZG93bi5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiBub3QgZnJvbSB0aGUgc2FtZSBwYXJlbnQsIGNsb3NlIHRoZSBwcmV2aW91cyBhY3RpdmUgZWxlbWVudCdzIGRpcmVjdHNcclxuICAgICAgICAgICAgLy8gdGhlbiBvcGVuIGN1cnJlbnQgYWN0aXZlIGRyb3Bkb3duXHJcbiAgICAgICAgICAgIC8vIGlmIG5lZWQgdG8gY2xvc2UsIHRoZW4gbmVlZCB0byBjbG9zZSBmaXJzdCBhbmQgdGhlbiBvcGVuXHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VOZXN0ZWRPbk9wZW4oZHJvcGRvd24sIHRoaXMuYWN0aXZlRHJvcGRvd24sIGlzQ3VycmVudERyb3Bkb3duQ2hpbGRGcm9tQWN0aXZlRHJvcGRvd24pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBuZXcgZHJvcGRvd24gYXMgdGhlIG9wZW4gZHJvcGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRHJvcGRvd24gPSBkcm9wZG93bjtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRHJvcGRvd24uaXNPcGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBwdXNoIG5ldyBleHBhbmRlZCBkcm9wZG93biBjb21wb25lbnRcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURyb3Bkb3duICYmICF0aGlzLmRyb3Bkb3duTGlzdC5pbmNsdWRlcyh0aGlzLmFjdGl2ZURyb3Bkb3duKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25MaXN0LnB1c2godGhpcy5hY3RpdmVEcm9wZG93bik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbihkcm9wZG93biwgY2FsY3VsYXRlSGVpZ2h0LCBkaXNwbGF5VG9TaWRlKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogdXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgYSBkcm9wZG93biBzbyB0aGF0IGl0IHJlbWFpbnMgb24gc2NyZWVuXHJcbiAgICAgKiBAcGFyYW0gZHJvcGRvd24gVGhlIGRyb3Bkb3duIHRvIHVwZGF0ZVxyXG4gICAgICogQHBhcmFtIGNhbGN1bGF0ZUhlaWdodCBEZWZpbmVzIHdoZXRoZXIgdG8gY2FsY3VsYXRlIGhlaWdodCBvZiB0aGUgZHJvcGRvd24gYmFzZWQgb24gd2luZG93IHNpemUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVQb3NpdGlvbihkcm9wZG93bjogRHJvcGRvd24sIGNhbGN1bGF0ZUhlaWdodD86IGJvb2xlYW4sIGRpc3BsYXlUb1NpZGU/OiBib29sZWFuKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudEVsZW1lbnQgPSAoPEhUTUxFbGVtZW50PmRyb3Bkb3duLmNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xyXG5cclxuICAgICAgICAvLyByZXNldCBkcm9wZG93biBvdmVyZmxvd1xyXG4gICAgICAgIGRyb3Bkb3duLm92ZXJmbG93WCA9IGZhbHNlO1xyXG4gICAgICAgIGRyb3Bkb3duLm92ZXJmbG93WSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBSZXNldCB0aGUgY29udGVudCBoZWlnaHQgYW5kIHdpZHRoIHRoZW4gdGhlIGNvbnRlbnQuc2Nyb2xsSGVpZ2h0IGFuZCBzY3JvbGxXaWR0aCBjYW4gZ2V0IHRoZSBhY3R1YWwgY29udGVudCBkaW1lbnNpb25zXHJcbiAgICAgICAgY29udGVudEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgY29udGVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAnJztcclxuXHJcbiAgICAgICAgY29uc3QgdG9nZ2xlUmVjdCA9ICg8SFRNTEVsZW1lbnQ+ZHJvcGRvd24udG9nZ2xlRWxlbWVudC5uYXRpdmVFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgLy8gd2UgZG9uJ3QgYWxsb3cgdGhlIGRyb3Bkb3duIHRvIGV4Y2VlZCB0aGUgaGVpZ2h0IG9yIHdpZHRoIG9mIHRoZSB3aW5kb3csIHNvIGFjY291bnQgZm9yIHRoYXQgYXMgd2VsbFxyXG4gICAgICAgIGNvbnN0IHJlY3RXaWR0aCA9IGNvbnRlbnRFbGVtZW50LnNjcm9sbFdpZHRoO1xyXG4gICAgICAgIGNvbnN0IHJlY3RIZWlnaHQgPSBjb250ZW50RWxlbWVudC5zY3JvbGxIZWlnaHQ7XHJcblxyXG4gICAgICAgIC8vIFNldCB0aGUgbGVmdCBwb3NpdGlvbiBvZiB0aGUgZHJvcGRvd25cclxuICAgICAgICB0aGlzLmRyb3Bkb3duU2V0UG9zaXRpb25MZWZ0KHRvZ2dsZVJlY3QsIGRyb3Bkb3duLCByZWN0V2lkdGgsIGRpc3BsYXlUb1NpZGUpO1xyXG5cclxuICAgICAgICAvLyBTZXQgdGhlIHJpZ2h0IHBvc2l0aW9uIG9mIHRoZSBkcm9wZG93blxyXG4gICAgICAgIHRoaXMuZHJvcGRvd25TZXRQb3NpdGlvblRvcCh0b2dnbGVSZWN0LCBkcm9wZG93biwgcmVjdEhlaWdodCwgY2FsY3VsYXRlSGVpZ2h0LCBkaXNwbGF5VG9TaWRlKTtcclxuXHJcbiAgICAgICAgaWYgKCFkcm9wZG93bi5kcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGgpIHtcclxuICAgICAgICAgICAgLy8gbWluLWNvbnRlbnQgd291bGQgYmUgYSBnb29kIGNob2ljZSBidXQgd29uJ3QgYmUgc3VwcG9ydGVkIGJ5IGllIG9yIGVkZ2VcclxuICAgICAgICAgICAgKDxIVE1MRWxlbWVudD5kcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KS5zdHlsZS5tYXhXaWR0aCA9ICdpbmhlcml0JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyBhIGRyb3Bkb3duIGFzIGNsb3NlZCwgaWYgdGhlIGRyb3Bkb3duIGlzIHRoZSBhY3RpdmUgZHJvcGRvd24sXHJcbiAgICAgKiB0aGUgYWN0aXZlIGRyb3Bkb3duIGlzIHJlc2V0IGFuZCBldmVudCBoYW5kbGVycyBhcmUgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSBkcm9wZG93biBUaGUgZHJvcGRvd24gdG8gY2xvc2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsb3NlKGRyb3Bkb3duOiBEcm9wZG93biwgZXZlbnQ/OiBFdmVudHMpIHtcclxuICAgICAgICAvLyBtYXJrIHRoZSBkcm9wZG93biBhcyBjbG9zZWRcclxuICAgICAgICBkcm9wZG93bi5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgICAvLyByZXR1cm4gaWYgdGhlIHBhc3NlZCBpbiBkcm9wZG93biBpcyBub3QgdGhlIGFjdGl2ZSBkcm9wZG93blxyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURyb3Bkb3duICE9PSBkcm9wZG93bikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZXNldCBhY3RpdmUgZHJvcGRvd24gdG8gbnVsbFxyXG4gICAgICAgIHRoaXMuYWN0aXZlRHJvcGRvd24gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZU5lc3RlZChkcm9wZG93biwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc3RvcCBsaXN0ZW5pbmcgdG8gZG9jdW1lbnQgZXZlbnRzIGlmIG5vIGFjdGl2ZSBkcm9wZG93blxyXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVEcm9wZG93bikge1xyXG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uRG9jdW1lbnRDbGlja0JpbmRpbmcpO1xyXG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25Eb2N1bWVudEtleWRvd25CaW5kaW5nKTtcclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25XaW5kb3dTY3JvbGxCaW5kaW5nLCB0cnVlKTtcclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uV2luZG93Qmx1ckJpbmRpbmcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgZG9jdW1lbnQgY2xpY2tzIHdoaWxlIGEgZHJvcGRvd24gaXMgb3BlblxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgICAgIC8vIHN0b3AgaWYgdGhlcmUgaXMgbm8gZHJvcGRvd25cclxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlRHJvcGRvd24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc3RvcCBpZiB0aGUgY2xpY2tlZCBlbGVtZW50IGlzIGFsc28gdGhlIHRvZ2dsZSBlbGVtZW50IGZvciB0aGUgYWN0aXZlIGRyb3Bkb3duXHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRHJvcGRvd24udG9nZ2xlRWxlbWVudCAmJiB0aGlzLmFjdGl2ZURyb3Bkb3duLnRvZ2dsZUVsZW1lbnQubmF0aXZlRWxlbWVudCA9PT0gZXZlbnQudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBjbGljayBvY2N1cmVkIGFuIGVsZW1lbnQgdGhhdCBpcyBpbnNpZGUgdGhlIGRyb3Bkb3duIGNvbnRlbnRcclxuICAgICAgICBpZiAodGhpcy5hY3RpdmVEcm9wZG93bi5jb250ZW50RWxlbWVudCAmJlxyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURyb3Bkb3duLmNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xyXG5cclxuICAgICAgICAgICAgLy8gc3RvcCBpZiB0aGUgZWxlbWVudCBpcyBhbiBlbGVtZW50IHRoYXQgaGFuZGxlcyBpbnB1dCwgcmV0dXJuXHJcbiAgICAgICAgICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KCg8YW55PmV2ZW50LnRhcmdldCkudGFnTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc3RvcCBpZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaGFzIHRoZSAnc21lLWRyb3Bkb3duLWludGVyYWN0aW9uLWVuYWJsZWQnIGNsYXNzIG9uIG9uZSBvZiBpdHMgYW5jZXN0b3JzIHVwIHRvIHRoZSBjb250ZW50IGVsZW1lbnRcclxuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0O1xyXG4gICAgICAgICAgICB3aGlsZSAoIXRoaXMuYWN0aXZlRHJvcGRvd24uY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5pc1NhbWVOb2RlKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3NtZS1kcm9wZG93bi1pbnRlcmFjdGlvbi1lbmFibGVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBvdGhlcndpc2UsIGNsb3NlIHRoZSBkcm9wZG93blxyXG4gICAgICAgIHRoaXMuY2xvc2UodGhpcy5hY3RpdmVEcm9wZG93biwgZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBkb2N1bWVudCBrZXlkb3ducyB3aGlsZSBhIGRyb3Bkb3duIGlzIG9wZW5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBvbkRvY3VtZW50S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIC8vIGlmIHRoZSBlc2Mga2V5IGlzIHByZXNzZWQsIGNsb3NlIHRoZSBwb3B1cCBhbmQgZm9jdXMgb24gdGhlIHRvZ2dsZSBlbGVtZW50XHJcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGUuRXNjYXBlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURyb3Bkb3duICYmIHRoaXMuYWN0aXZlRHJvcGRvd24udG9nZ2xlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEVsZW1lbnQgPSBEb20uZ2V0TmV4dEZvY3VzYWJsZUVsZW1lbnQodGhpcy5hY3RpdmVEcm9wZG93bi50b2dnbGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKHRoaXMuYWN0aXZlRHJvcGRvd24pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBkb2N1bWVudCBzY3JvbGxpbmcgd2hpbGUgYSBkcm9wZG93biBpcyBvcGVuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgb25XaW5kb3dTY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgLy8gc3RvcCBpZiB0aGVyZSBpcyBubyBkcm9wZG93blxyXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVEcm9wZG93bikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBzY3JvbGwgb2NjdXJlZCBvbiBhbiBlbGVtZW50IHRoYXQgaXMgaW5zaWRlIHRoZSBkcm9wZG93biBjb250ZW50XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRHJvcGRvd24uY29udGVudEVsZW1lbnQgJiZcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBvdGhlcndpc2UsIGNsb3NlIGRyb3Bkb3duKHMpXHJcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25MaXN0ICYmIHRoaXMuZHJvcGRvd25MaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTmVzdGVkQWxsRXhwYW5kZWREcm9wZG93bnModGhpcy5kcm9wZG93bkxpc3QpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2UodGhpcy5hY3RpdmVEcm9wZG93bik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB3aW5kb3cgYmx1cnMgd2hpbGUgYSBkcm9wZG93biBpcyBvcGVuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgb25XaW5kb3dCbHVyKGV2ZW50OiBGb2N1c0V2ZW50KSB7XHJcbiAgICAgICAgLy8gY2xvc2UgdGhlIGRyb3Bkb3duIGlmIHdlIGxlYXZlIHRoZSB3aW5kb3cgKHRoaXMgYWxzbyB3b3JrcyB0byBwcmV2ZW50IHRvIGNsb3NlIGRyb3Bkb3ducyBpbiBpZnJhbWVzKVxyXG4gICAgICAgIHRoaXMuY2xvc2UodGhpcy5hY3RpdmVEcm9wZG93biwgZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgICAvKipcclxuICAgICAqIEhhbmRsZXMgdGhlIHBvc2l0aW9uIGNhbGN1bGF0aW9uIGZvciB0aGUgbGVmdCBvZiB0aGUgZHJvcGRvd24gY29udGFpbmVyXHJcbiAgICAgKiBEZWNpZGVzIHdoZXRoZXIgdG8gcGxhY2UgdGhlIGRyb3Bkb3duIGxlZnQsIHJpZ2h0LCBvciBvbiB0b3Agb2YgdGhlIHRvZ2dsZSBidXR0b25cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBkcm9wZG93blNldFBvc2l0aW9uTGVmdChcclxuICAgICAgICB0b2dnbGVSZWN0OiBET01SZWN0IHwgQ2xpZW50UmVjdCxcclxuICAgICAgICBkcm9wZG93bjogRHJvcGRvd24sXHJcbiAgICAgICAgcmVjdFdpZHRoOiBudW1iZXIsXHJcbiAgICAgICAgZGlzcGxheVRvU2lkZT86IGJvb2xlYW4pOiB2b2lkIHtcclxuXHJcbiAgICAgICAgLy8gbW9kaWZ5IHRoZSBsZWZ0IHBvc2l0aW9uIG9mIHRoZSByZWN0IHRvIGFjY291bnQgZm9yIGFueSBvbGQgb2Zmc2V0XHJcbiAgICAgICAgbGV0IHJlY3RMZWZ0ID0gdG9nZ2xlUmVjdC5sZWZ0O1xyXG5cclxuICAgICAgICAvLyBnZXQgdGhlIHZpZXdwb3J0IHdpZHRoXHJcbiAgICAgICAgY29uc3Qgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuXHJcbiAgICAgICAgLy8gSWYgZGlzcGxheVRvU2lkZSBhdHRyaWJ1dGUgaXMgc2V0LCBkaXNwbGF5IGRyb3Bkb3duIHRvIHNpZGUgb2YgdG9nZ2xlUmVjdCwgZWxzZSBwbGFjZSBpdCBhYm92ZSBvciBiZWxvd1xyXG4gICAgICAgIGlmICghIWRpc3BsYXlUb1NpZGUpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3BhY2VMZWZ0ID0gdG9nZ2xlUmVjdC5sZWZ0O1xyXG4gICAgICAgICAgICBjb25zdCBzcGFjZVJpZ2h0ID0gd2luZG93V2lkdGggLSB0b2dnbGVSZWN0LnJpZ2h0O1xyXG5cclxuICAgICAgICAgICAgLy8gQWx3YXlzIHRyeSB0byBwdXQgZHJvcGRvd24gdG8gdGhlIGRpcmVjdGlvbiB0aGF0IGhhcyBtb3JlIHNwYWNlLiBGaXJzdCB0cnkgdG8gcHV0IG9uIHRoZSByaWdodCwgaWYgbm90IHRoZW4gcHV0IGxlZnRcclxuICAgICAgICAgICAgaWYgKHNwYWNlUmlnaHQgPj0gRHJvcGRvd25TZXJ2aWNlLm1pblNwYWNlRm9yRHJvcGRvd24gfHwgcmVjdFdpZHRoIDwgc3BhY2VSaWdodCB8fCBzcGFjZVJpZ2h0ID4gc3BhY2VMZWZ0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVjdFdpZHRoID4gc3BhY2VSaWdodCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RXaWR0aCA9IHNwYWNlUmlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd24ub3ZlcmZsb3dYID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIHNob3cgcmlnaHQgb2YgY29udHJvbFxyXG4gICAgICAgICAgICAgICAgcmVjdExlZnQgPSB0b2dnbGVSZWN0LnJpZ2h0O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlY3RXaWR0aCA8IHNwYWNlTGVmdCkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2hvdyBsZWZ0IG9mIGNvbnRyb2xcclxuICAgICAgICAgICAgICAgIHJlY3RMZWZ0ID0gdG9nZ2xlUmVjdC5sZWZ0IC0gcmVjdFdpZHRoO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgcmVjdCBpcyBiaWdnZXIgdGhhbiBzcGFjZSB0byB0aGUgbGVmdCBhbmQgdG9nZ2xlIHJlY3RhbmdsZSBjb21iaW5lZFxyXG4gICAgICAgICAgICAgICAgaWYgKHJlY3RXaWR0aCA+IHNwYWNlTGVmdCArIHRvZ2dsZVJlY3Qud2lkdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWN0V2lkdGggPSBzcGFjZUxlZnQgKyB0b2dnbGVSZWN0LndpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duLm92ZXJmbG93WCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBzaG93IG9uIHRvcCBvZiBjb250cm9sXHJcbiAgICAgICAgICAgICAgICByZWN0TGVmdCA9IHRvZ2dsZVJlY3QucmlnaHQgLSByZWN0V2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBDYXAgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgd2luZG93IGRpbWVuc2lvbnMgYW5kIHNldCBhcHByb3ByaWF0ZSBvdmVyZmxvd1xyXG4gICAgICAgICAgICBpZiAocmVjdFdpZHRoID4gd2luZG93V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIHJlY3RXaWR0aCA9IHdpbmRvd1dpZHRoO1xyXG4gICAgICAgICAgICAgICAgZHJvcGRvd24ub3ZlcmZsb3dYID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVjdFdpZHRoIDwgdG9nZ2xlUmVjdC53aWR0aCkge1xyXG4gICAgICAgICAgICAgICAgcmVjdFdpZHRoID0gdG9nZ2xlUmVjdC53aWR0aDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlY3RMZWZ0ICsgcmVjdFdpZHRoID4gd2luZG93V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIHJlY3RMZWZ0ID0gd2luZG93V2lkdGggLSByZWN0V2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlY3RMZWZ0ID0gTWF0aC5tYXgoMCwgcmVjdExlZnQpO1xyXG4gICAgICAgIGRyb3Bkb3duLmxlZnQgPSByZWN0TGVmdDtcclxuXHJcbiAgICAgICAgKDxIVE1MRWxlbWVudD5kcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KS5zdHlsZS5sZWZ0ID0gcmVjdExlZnQgKyAncHgnO1xyXG4gICAgICAgIGlmICghZHJvcGRvd24uYXV0b1dpZHRoKSB7XHJcbiAgICAgICAgICAgICg8SFRNTEVsZW1lbnQ+ZHJvcGRvd24uY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudCkuc3R5bGUud2lkdGggPSByZWN0V2lkdGggKyAncHgnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgdGhlIHBvc2l0aW9uIGNhbGN1bGF0aW9uIGZvciB0aGUgdG9wIG9mIHRoZSBkcm9wZG93biBjb250YWluZXJcclxuICAgICAqIERlY2lkZXMgd2hldGhlciB0byBwbGFjZSB0aGUgZHJvcGRvd24gYWJvdmUgb3IgYmVsb3cgdGhlIHRvZ2dsZSBidXR0b25cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBkcm9wZG93blNldFBvc2l0aW9uVG9wKFxyXG4gICAgICAgIHRvZ2dsZVJlY3Q6IERPTVJlY3QgfCBDbGllbnRSZWN0LFxyXG4gICAgICAgIGRyb3Bkb3duOiBEcm9wZG93bixcclxuICAgICAgICByZWN0SGVpZ2h0OiBudW1iZXIsXHJcbiAgICAgICAgY2FsY3VsYXRlSGVpZ2h0PzogYm9vbGVhbixcclxuICAgICAgICBkaXNwbGF5VG9TaWRlPzogYm9vbGVhbik6IHZvaWQge1xyXG5cclxuICAgICAgICAvLyBuZWVkIHRvIHJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZSBmb3Igc21hbGwgaGVpZ2h0IHdpbmRvdyByZW5kZXJpbmdcclxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlY3RIZWlnaHQgPSByZWN0SGVpZ2h0O1xyXG5cclxuICAgICAgICAvLyBtb2RpZnkgdGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgcmVjdCB0byBhY2NvdW50IGZvciBhbnkgb2xkIG9mZnNldFxyXG4gICAgICAgIGxldCByZWN0VG9wID0gdG9nZ2xlUmVjdC5ib3R0b207XHJcblxyXG4gICAgICAgIC8vIGdldCB0aGUgdmlld3BvcnQgaGVpZ2h0XHJcbiAgICAgICAgY29uc3Qgd2luZG93SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG5cclxuICAgICAgICBjb25zdCBzcGFjZUFib3ZlID0gdG9nZ2xlUmVjdC50b3A7XHJcbiAgICAgICAgY29uc3Qgc3BhY2VCZWxvdyA9IHdpbmRvd0hlaWdodCAtIHRvZ2dsZVJlY3QuYm90dG9tO1xyXG5cclxuICAgICAgICAvLyBBbHdheXMgdHJ5IHRvIHB1dCBkcm9wZG93biB0byB0aGUgZGlyZWN0aW9uIHRoYXQgaGFzIG1vcmUgc3BhY2UuXHJcbiAgICAgICAgbGV0IHNob3VsZERpc3BsYXlpbmdBYm92ZSA9IGZhbHNlO1xyXG4gICAgICAgIC8vIEZpcnN0IHRyeSB0byBwdXQgb24gdGhlIGJvdHRvbSwgaWYgbm90IHRoZW4gcHV0IG9uIGFib3ZlXHJcbiAgICAgICAgaWYgKHNwYWNlQmVsb3cgPj0gRHJvcGRvd25TZXJ2aWNlLm1pblNwYWNlRm9yRHJvcGRvd24gfHwgcmVjdEhlaWdodCA8IHNwYWNlQmVsb3cgfHwgc3BhY2VCZWxvdyA+IHNwYWNlQWJvdmUpIHtcclxuICAgICAgICAgICAgaWYgKHJlY3RIZWlnaHQgPiBzcGFjZUJlbG93KSB7XHJcbiAgICAgICAgICAgICAgICByZWN0SGVpZ2h0ID0gc3BhY2VCZWxvdztcclxuICAgICAgICAgICAgICAgIGRyb3Bkb3duLm92ZXJmbG93WSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2hvdyBiZWxvdyB0aGUgY29udHJvbC5cclxuICAgICAgICAgICAgcmVjdFRvcCA9IGRpc3BsYXlUb1NpZGUgPT09IHRydWUgPyB0b2dnbGVSZWN0LnRvcCA6IHRvZ2dsZVJlY3QuYm90dG9tO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGlmIHJlY3QgaXMgYmlnZ2VyIHRoYW4gc3BhY2UgYWJvdmVcclxuICAgICAgICAgICAgaWYgKHJlY3RIZWlnaHQgPiBzcGFjZUFib3ZlKSB7XHJcbiAgICAgICAgICAgICAgICByZWN0SGVpZ2h0ID0gc3BhY2VBYm92ZTtcclxuICAgICAgICAgICAgICAgIGRyb3Bkb3duLm92ZXJmbG93WSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2hvdyBhYm92ZSB0aGUgY29udHJvbC5cclxuICAgICAgICAgICAgcmVjdFRvcCA9IGRpc3BsYXlUb1NpZGUgPT09IHRydWUgPyB0b2dnbGVSZWN0LmJvdHRvbSAtIHJlY3RIZWlnaHQgOiB0b2dnbGVSZWN0LnRvcCAtIHJlY3RIZWlnaHQ7XHJcbiAgICAgICAgICAgIHNob3VsZERpc3BsYXlpbmdBYm92ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZWN0VG9wID0gTWF0aC5tYXgoMCwgcmVjdFRvcCk7XHJcbiAgICAgICAgZHJvcGRvd24udG9wID0gcmVjdFRvcDtcclxuXHJcbiAgICAgICAgaWYgKGNhbGN1bGF0ZUhlaWdodCkge1xyXG4gICAgICAgICAgICBjb25zdCBoZWlnaHRUb3BPYmplY3QgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNhbGN1bGF0ZUhlaWdodFRvcChcclxuICAgICAgICAgICAgICAgICAgICByZWN0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RUb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkRGlzcGxheWluZ0Fib3ZlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNwYWNlQWJvdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BhY2VCZWxvdyxcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFJlY3RIZWlnaHRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICg8SFRNTEVsZW1lbnQ+ZHJvcGRvd24uY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudCkuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0VG9wT2JqZWN0LmhlaWdodCArICdweCc7XHJcbiAgICAgICAgICAgICg8SFRNTEVsZW1lbnQ+ZHJvcGRvd24uY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudCkuc3R5bGUudG9wID0gaGVpZ2h0VG9wT2JqZWN0LnRvcCArICdweCc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgKDxIVE1MRWxlbWVudD5kcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KS5zdHlsZS5oZWlnaHQgPSByZWN0SGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgKDxIVE1MRWxlbWVudD5kcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KS5zdHlsZS50b3AgPSByZWN0VG9wICsgJ3B4JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBoYW5kbGVzIHRoZSBoZWlnaHQgY2FsY3VsYXRpb24gZm9yIHRoZSBkcm9wZG93biBjb250YWluZXJcclxuICAgICAqIEl0IGNhbGN1bGF0ZXMgYmFzZWQgb24gdGhlIGhlaWdodENhbGN1bGF0aW9uT2JqZWN0XHJcbiAgICAgKiBGaXJzdCB0cnkgdG8gcHV0IHRoZSBkcm9wZG93biBjb250YWluZXIgdG8gZGVjaWRlIHdoZXRoZXIgYSBzY3JvbGwgYmFyIGlzIG5lZWRlZFxyXG4gICAgICogVGhlbiBhcHBseSB0aGUgaGVpZ2h0IGZyb20gY2FsY3VsYXRpb25cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBkcm9wZG93bkNhbGN1bGF0ZUhlaWdodFRvcChyZWN0SGVpZ2h0OiBudW1iZXIsIHJlY3RUb3A6IG51bWJlciwgc2hvdWxkRGlzcGxheWluZ0Fib3ZlOiBib29sZWFuLCB0b2dnbGVUb3A6IG51bWJlcixcclxuICAgICAgICB0b2dnbGVCb3R0b206IG51bWJlciwgb3JpZ2luYWxSZWN0SGVpZ2h0OiBudW1iZXIpOiBEcm9wZG93bkhlaWdodENhbGN1bGF0aW9uUmVzdWx0IHtcclxuICAgICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcbiAgICAgICAgbGV0IGFjdHVhbFRvcCA9IHJlY3RUb3A7XHJcbiAgICAgICAgbGV0IGFjdHVhbEhlaWdodCA9IHJlY3RIZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgdG9nZ2xlSGVpZ2h0ID0gc2hvdWxkRGlzcGxheWluZ0Fib3ZlID8gdG9nZ2xlVG9wIDogdG9nZ2xlQm90dG9tO1xyXG4gICAgICAgIGNvbnN0IHdpbmRvd0hlaWdodE1hcmdpbiA9IHRoaXMuZ2V0RHJvcGRvd25NYXJnaW4od2luZG93SGVpZ2h0KTtcclxuICAgICAgICBjb25zdCBzaG91bGRVcGRhdGVIZWlnaHQgPSB0aGlzLnNob3VsZFVwZGF0ZUhlaWdodChyZWN0SGVpZ2h0LCB0b2dnbGVIZWlnaHQsIHdpbmRvd0hlaWdodE1hcmdpbik7XHJcblxyXG4gICAgICAgIGlmIChzaG91bGRVcGRhdGVIZWlnaHQpIHtcclxuICAgICAgICAgICAgLy8gaGFuZGxlcyBzcGVjaWFsIGNhc2VzIHdoZXJlIGRyb3Bkb3duIGJvZHkgaXMgdG9vIGJpZywgdXNlIGZ1bGwgaGVpZ2h0IG1vZGVcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsUmVjdEhlaWdodCA+PSB0b2dnbGVIZWlnaHQgKiBEcm9wZG93blNlcnZpY2Uuc2hvdWxkVXNlRnVsbEhlaWdodERyb3Bkb3duUmF0aW8pIHtcclxuICAgICAgICAgICAgICAgIGFjdHVhbFRvcCA9IHdpbmRvd0hlaWdodE1hcmdpbjtcclxuICAgICAgICAgICAgICAgIC8vIGlmIG9yaWdpbmFsIGJvZHkgZXhjZWVkZWQgdGhlIHdob2xlIHdpbmRvdyBoZWlnaHQsIHVzZSB3aW5kb3cgaGVpZ2h0XHJcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdXNlIHRoZSBvcmlnaW5hbCBoZWlnaHRcclxuICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbFJlY3RIZWlnaHQgPj0gd2luZG93SGVpZ2h0IC0gMiAqIHdpbmRvd0hlaWdodE1hcmdpbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbEhlaWdodCA9IHdpbmRvd0hlaWdodCAtIDIgKiB3aW5kb3dIZWlnaHRNYXJnaW47XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbEhlaWdodCA9IG9yaWdpbmFsUmVjdEhlaWdodDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3dIZWlnaHQgPD0gdGhpcy5oZWlnaHRDYWxjdWxhdGlvbk9iamVjdC5zbWFsbC5tYXgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxSZWN0SGVpZ2h0ID4gd2luZG93SGVpZ2h0IC0gMiAqIHdpbmRvd0hlaWdodE1hcmdpbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aG9sZSBoZWlnaHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsSGVpZ2h0ID0gd2luZG93SGVpZ2h0IC0gMiAqIHdpbmRvd0hlaWdodE1hcmdpbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsVG9wID0gd2luZG93SGVpZ2h0TWFyZ2luO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjdEhlaWdodCA+IHRvZ2dsZUhlaWdodCAtIHdpbmRvd0hlaWdodE1hcmdpbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkaXNwbGF5IGZyb20gdG9wLCB3aWxsIGNvdmVyIHBhcnQgb2YgdGhlIGlucHV0IGJveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxIZWlnaHQgPSByZWN0SGVpZ2h0IC0gd2luZG93SGVpZ2h0TWFyZ2luO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxUb3AgPSB3aW5kb3dIZWlnaHRNYXJnaW47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYW4gYmUgb25seSBkaXNwbGF5ZWQgYXMgYmVsb3cgb3IgYWJvdmUgaW4gYmlnZ2VyIHNjcmVlblxyXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbEhlaWdodCA9IHJlY3RIZWlnaHQgLSB3aW5kb3dIZWlnaHRNYXJnaW47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzaG91bGREaXNwbGF5aW5nQWJvdmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0b2dnbGVUb3AgPiBhY3R1YWxIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhY3R1YWxUb3AgPSB0b2dnbGVUb3AgLSBhY3R1YWxIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRvcDogYWN0dWFsVG9wLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFjdHVhbEhlaWdodFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHdoZXRoZXIgc2hvdWxkIHVwZGF0ZSB0aGUgaGVpZ2h0IHBpeGVscyBmb3IgdGhlIGRyb3Bkb3duXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2hvdWxkVXBkYXRlSGVpZ2h0KHJlY3RIZWlnaHQ6IG51bWJlciwgdG9nZ2xlSGVpZ2h0OiBudW1iZXIsIHdpbmRvd0hlaWdodE1hcmdpbjogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlcyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0b2dnbGVIZWlnaHQgLSByZWN0SGVpZ2h0IDwgd2luZG93SGVpZ2h0TWFyZ2luKSB7XHJcbiAgICAgICAgICAgIHJlcyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgZHJvcGRvd24gbWFyZ2luIGJhc2Ugb24gdGhlIGNhbGN1bGF0aW9uIG9iamVjdFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldERyb3Bkb3duTWFyZ2luKHdpbmRvd0hlaWdodDogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IHdpbmRvd0hlaWdodE1hcmdpbiA9IDA7XHJcbiAgICAgICAgaWYgKHdpbmRvd0hlaWdodCA8PSB0aGlzLmhlaWdodENhbGN1bGF0aW9uT2JqZWN0LnNtYWxsLm1heCkge1xyXG4gICAgICAgICAgICB3aW5kb3dIZWlnaHRNYXJnaW4gPSB0aGlzLmhlaWdodENhbGN1bGF0aW9uT2JqZWN0LnNtYWxsLm1hcmdpbjtcclxuICAgICAgICB9IGVsc2UgaWYgKHdpbmRvd0hlaWdodCA+PSB0aGlzLmhlaWdodENhbGN1bGF0aW9uT2JqZWN0Lm1lZGl1bS5taW4gJiYgd2luZG93SGVpZ2h0IDw9IHRoaXMuaGVpZ2h0Q2FsY3VsYXRpb25PYmplY3QubWVkaXVtLm1heCkge1xyXG4gICAgICAgICAgICB3aW5kb3dIZWlnaHRNYXJnaW4gPSB0aGlzLmhlaWdodENhbGN1bGF0aW9uT2JqZWN0Lm1lZGl1bS5tYXJnaW47XHJcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3dIZWlnaHQgPj0gdGhpcy5oZWlnaHRDYWxjdWxhdGlvbk9iamVjdC5sYXJnZS5taW4pIHtcclxuICAgICAgICAgICAgd2luZG93SGVpZ2h0TWFyZ2luID0gdGhpcy5oZWlnaHRDYWxjdWxhdGlvbk9iamVjdC5sYXJnZS5tYXJnaW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB3aW5kb3dIZWlnaHRNYXJnaW47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWFsIHdpdGggbmVzdGVkIGNsb3NlIGZvciBkcm9wZG93blxyXG4gICAgICogQHBhcmFtIGRyb3Bkb3duIHRoZSBhY3RpdmUgZHJvcGRvd25cclxuICAgICAqIEBwYXJhbSBldmVudCBjb250YWlucyB0aGUgY3VycmVudCBldmVudCB0YXJnZXRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsb3NlTmVzdGVkKGRyb3Bkb3duOiBEcm9wZG93biwgZXZlbnQ6IEV2ZW50cykge1xyXG4gICAgICAgIGlmIChkcm9wZG93biAmJiBldmVudCkge1xyXG4gICAgICAgICAgICBsZXQgZXZlbnRUYXJnZXQgPSA8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0O1xyXG4gICAgICAgICAgICAvLyBhc3NpZ24gYWN0aXZlIGRyb3Bkb3duXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyb3Bkb3duTGlzdCAmJiB0aGlzLmRyb3Bkb3duTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudFRhcmdldC5jbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFldmVudFRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJy5zbWUtbGF5b3V0LWRyb3Bkb3duJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0ID0gRG9tLmdldEFuY2VzdG9yKGV2ZW50VGFyZ2V0LCBlbGVtZW50ID0+IGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdzbWUtbGF5b3V0LWRyb3Bkb3duJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBoYW5kbGVzIHdoZW4gdGhlIGV2ZW50IHRhcmdldCBpcyBXaW5kb3cgb2JqZWN0IHRoYXQgZG9lcyd0IGNvbnRhaW5zIGV2ZW50LnRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRUYXJnZXQuaGFzT3duUHJvcGVydHkoJ3F1ZXJ5U2VsZWN0b3InKSAmJiBldmVudFRhcmdldC5xdWVyeVNlbGVjdG9yKCdzbWUtZHJvcGRvd24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0ID0gZXZlbnRUYXJnZXQucXVlcnlTZWxlY3Rvcignc21lLWRyb3Bkb3duJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGFjdGl2ZURyb3Bkb3duID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmRyb3Bkb3duTGlzdC5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IHRoaXMuZHJvcGRvd25MaXN0W2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQuY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudCA9PT0gZXZlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZURyb3Bkb3duID0gZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEcm9wZG93biA9IGFjdGl2ZURyb3Bkb3duO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNsb3NlIGRyb3AtZG93bnNcclxuICAgICAgICAgICAgaWYgKGV2ZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkcm9wZG93bnNJbkV2ZW50UmVnaW9uID0gZXZlbnRUYXJnZXQucXVlcnlTZWxlY3RvckFsbCgnc21lLWRyb3Bkb3duIC5zbWUtZHJvcGRvd24tdG9nZ2xlLWNvbnRhaW5lcicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRyb3Bkb3duc0luRXZlbnRSZWdpb24gJiYgZHJvcGRvd25zSW5FdmVudFJlZ2lvbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjbG9zZSBhbGwgY2hpbGRyZW4gZHJvcGRvd25zXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgY2FuIG9ubHkgcmVmZXIgdG8gVUkgbGV2ZWwgZnJvbSBxdWVyeVNlbGVjdG9yQWxsLCBub3QgdGhlIGNvbXBvbmVudC5cclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bnNJbkV2ZW50UmVnaW9uLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Nsb3NlRXZlbnQnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2xvc2UgYWxsIGV4cGFuZGVkIGRyb3Bkb3duc1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VOZXN0ZWRBbGxFeHBhbmRlZERyb3Bkb3ducyh0aGlzLmRyb3Bkb3duTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEcm9wZG93biA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjbG9zZSBhbGwgZXhwYW5kZWQgZHJvcGRvd25zXHJcbiAgICAgICAgICAgICAgICAvLyBjbG9zZSBjaGlsZCBmaXJzdFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZU5lc3RlZEFsbEV4cGFuZGVkRHJvcGRvd25zKHRoaXMuZHJvcGRvd25MaXN0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRHJvcGRvd24gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGhhbmRsZXMgY2xvc2luZyBhbGwgdGhlIGV4cGFuZGVkIGRyb3Bkb3duc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNsb3NlTmVzdGVkQWxsRXhwYW5kZWREcm9wZG93bnMoZHJvcGRvd25MaXN0OiBBcnJheTxEcm9wZG93bj4pIHtcclxuICAgICAgICBpZiAoZHJvcGRvd25MaXN0ICYmIGRyb3Bkb3duTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGRyb3Bkb3duTGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRyb3Bkb3duTGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBlbGVtZW50LmNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSBjbG9zZSB0aGUgb25lcyBkaXNwbGF5aW5nXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmNsYXNzTGlzdC5jb250YWlucygnc21lLWxheW91dC1oaWRkZW4nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTmVzdGVkSGVscGVyKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBAWWllbGQoKVxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBoYW5kbGVzIGNsb3NpbmcgdGhlIGRyb3Bkb3duIGZyb20gdGhlIGNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNsb3NlTmVzdGVkSGVscGVyKGRyb3Bkb3duOiBEcm9wZG93bikge1xyXG4gICAgICAgIGlmIChkcm9wZG93bikge1xyXG4gICAgICAgICAgICBkcm9wZG93bi5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBoYW5kbGVzIHdoZW4gb3BlbmluZyBhIGRyb3Bkb3duIHdoZW4gb3RoZXIgZHJvcGRvd24ocykgaXMvYXJlIG9wZW5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjbG9zZU5lc3RlZE9uT3BlbihjdXJyZW50RHJvcGRvd246IERyb3Bkb3duLCBwcmV2aW91c0Ryb3Bkb3duOiBEcm9wZG93biwgaXNDdXJyZW50RHJvcGRvd25DaGlsZEZyb21BY3RpdmVEcm9wZG93bjogYm9vbGVhbik6XHJcbiAgICAgICAgUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpc0N1cnJlbnREcm9wZG93bkNoaWxkRnJvbUFjdGl2ZURyb3Bkb3duIHx8ICF0aGlzLmRyb3Bkb3duTGlzdCB8fCAhdGhpcy5kcm9wZG93bkxpc3QubGVuZ3RoIHx8ICFwcmV2aW91c0Ryb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc0Zyb21TYW1lUGFyZW50ID0gdGhpcy5pc0Zyb21TYW1lUGFyZW50KGN1cnJlbnREcm9wZG93biwgcHJldmlvdXNEcm9wZG93bik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RHJvcGRvd25Ob2RlID0gY3VycmVudERyb3Bkb3duLmNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0Ryb3Bkb3duTm9kZSA9IHByZXZpb3VzRHJvcGRvd24uY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBEb207XHJcbiAgICAgICAgICAgICAgICAvLyBmaW5kIGlmIHRoZXJlIGFyZSBpbnRlcnNlY3Rpb24gb24gcGFyZW50IG5vZGUuIEFuZCBjbG9zZSB0aWxsIHRoYXQgbGV2ZWwuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiBubyBpbnRlcnNlY3Rpb24sIGNsb3NlIHRoZSBwcmV2aW91cyBhY3RpdmUgZHJvcGRvd24gb25lIGJ5IG9uZS5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQWN0aXZlRHJvcGRvd25zID0gdGhpcy5kcm9wZG93bkxpc3Q7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNGcm9tU2FtZVBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZENsb3NlRHJvcGRvd25zID0gcHJldmlvdXNBY3RpdmVEcm9wZG93bnMuZmlsdGVyKChkcm9wZG93bikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxDaGlsZHJlbiA9IGQuZ2V0QWxsRWxlbWVudHMoZHJvcGRvd24uY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3NtZS1sYXlvdXQtZHJvcGRvd24nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxDaGlsZHJlbi5pbmNsdWRlcyhwcmV2aW91c0Ryb3Bkb3duTm9kZSkgJiYgYWxsQ2hpbGRyZW4uaW5jbHVkZXMoY3VycmVudERyb3Bkb3duTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTmVzdGVkQWxsRXhwYW5kZWREcm9wZG93bnMoc2hvdWxkQ2xvc2VEcm9wZG93bnMpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTmVzdGVkQWxsRXhwYW5kZWREcm9wZG93bnModGhpcy5kcm9wZG93bkxpc3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJdCBoYW5kbGVzIHdoZXRoZXIgdHdvIGRyb3Bkb3ducyBhcmUgZnJvbSB0aGUgc2FtZSBwYXJlbnRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpc0Zyb21TYW1lUGFyZW50KGN1cnJlbnREcm9wZG93bjogRHJvcGRvd24sIFByZXZpb3VzRHJvcGRvd246IERyb3Bkb3duKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudERyb3Bkb3duTm9kZSA9IGN1cnJlbnREcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzRHJvcGRvd25Ob2RlID0gUHJldmlvdXNEcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGQgPSBEb207XHJcbiAgICAgICAgY29uc3QgY3VycmVudERyb3Bkb3duTm9kZVBhcmVudHMgPSBkLmdldEFsbEFuY2VzdG9ycyhjdXJyZW50RHJvcGRvd25Ob2RlLFxyXG4gICAgICAgICAgICBlbGVtZW50ID0+IGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdzbWUtbGF5b3V0LWRyb3Bkb3duJykpO1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzRHJvcGRvd25Ob2RlUGFyZW50cyA9IGQuZ2V0QWxsQW5jZXN0b3JzKHByZXZpb3VzRHJvcGRvd25Ob2RlLFxyXG4gICAgICAgICAgICBlbGVtZW50ID0+IGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdzbWUtbGF5b3V0LWRyb3Bkb3duJykpO1xyXG4gICAgICAgIGxldCByZXMgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnREcm9wZG93bk5vZGVQYXJlbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlFbGVtZW50ID0gY3VycmVudERyb3Bkb3duTm9kZVBhcmVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcHJldmlvdXNEcm9wZG93bk5vZGVQYXJlbnRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqRWxlbWVudCA9IHByZXZpb3VzRHJvcGRvd25Ob2RlUGFyZW50c1tqXTtcclxuICAgICAgICAgICAgICAgIGlmIChpRWxlbWVudC5pc1NhbWVOb2RlKGpFbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxufVxyXG4iXX0=
573
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2Ryb3Bkb3duL2Ryb3Bkb3duLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUM5RixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0RBQWtELENBQUM7O0FBT3ZFOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQU41QjtRQWFZLDJCQUFzQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pELDZCQUF3QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsMEJBQXFCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsd0JBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0Q7O1dBRUc7UUFDSyxpQkFBWSxHQUFvQixFQUFFLENBQUM7UUFDM0MsMEVBQTBFO1FBQzFFLHVFQUF1RTtRQUMvRCw0QkFBdUIsR0FBb0M7WUFDL0QsS0FBSyxFQUFFO2dCQUNILCtDQUErQztnQkFDL0MscUNBQXFDO2dCQUNyQyxHQUFHLEVBQUUsR0FBRztnQkFDUixNQUFNLEVBQUUsQ0FBQztnQkFDVCxXQUFXLEVBQUUsSUFBSTthQUNwQjtZQUNELE1BQU0sRUFBRTtnQkFDSiw4Q0FBOEM7Z0JBQzlDLHFDQUFxQztnQkFDckMsR0FBRyxFQUFFLEdBQUc7Z0JBQ1Is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LEdBQUcsQ0FBQyxDQUFDO2lHQUwzQyxlQUFlOzBFQUFmLGVBQWUsV0FBZixlQUFlO0FBb2lCeEI7SUFKQyxLQUFLLEVBQUU7Ozs7d0RBUVA7dUZBeGlCUSxlQUFlO2NBTjNCLFVBQVU7Z0JBMGlCQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFlpZWxkIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9iYXNlL2RlY29yYXRvcnMveWllbGQuZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgS2V5Q29kZSB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGF0YS9hY2Nlc3NpYmlsaXR5LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBEb20gfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2RvbS9kb20nO1xyXG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgRHJvcGRvd25IZWlnaHRDYWxjdWxhdGlvblJlc3VsdCB9IGZyb20gJy4vbW9kZWxzL2Ryb3Bkb3duLWhlaWdodC1jYWxjdWxhdGlvbi1yZXN1bHQnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkhlaWdodENhbGN1bGF0aW9uU2NoZW1hIH0gZnJvbSAnLi9tb2RlbHMvZHJvcGRvd24taGVpZ2h0LXNjaGVtYSc7XHJcblxyXG5leHBvcnQgdHlwZSBFdmVudHMgPSBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCB8IEZvY3VzRXZlbnQ7XHJcbkBJbmplY3RhYmxlKClcclxuLyoqXHJcbiAqIFNlcnZpY2UgZm9yIG1haW50YWluaW5nIGRyb3Bkb3duIHN0YXRlLlxyXG4gKiBPbmx5IG9uZSBkcm9wZG93biBjYW4gYmUgb3BlbmVkIGF0IGEgdGltZS5cclxuICogVGhpcyBkb2VzIG5vdCBzdXBwb3J0IG5lc3RlZCBkcm9wZG93bnMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRHJvcGRvd25TZXJ2aWNlIHtcclxuICAgIC8vIE1pbmltdW0gc3BhY2UgYWJvdmUgb3IgYmVsb3cgdGhlIGRyb3Bkb3duIHRvIGRldGVybWluZSBwb3NpdGlvbmluZy5cclxuICAgIHByaXZhdGUgc3RhdGljIG1pblNwYWNlRm9yRHJvcGRvd24gPSAzMDA7XHJcbiAgICAvLyBJZiB0aGUgb3JpZ2luYWwgaGVpZ2h0IGZvciB0aGUgd2hvbGUgZHJvcGRvd24gaXMgMiB0aW1lcyB0aGUgYXZhaWxhYmxlIHNwYWNlXHJcbiAgICAvLyBzaG91bGQgZGlzcGxheSBhcyBmdWxsIGhlaWdodFxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgc2hvdWxkVXNlRnVsbEhlaWdodERyb3Bkb3duUmF0aW8gPSAyO1xyXG5cclxuICAgIHByaXZhdGUgb25Eb2N1bWVudENsaWNrQmluZGluZyA9IHRoaXMub25Eb2N1bWVudENsaWNrLmJpbmQodGhpcyk7XHJcbiAgICBwcml2YXRlIG9uRG9jdW1lbnRLZXlkb3duQmluZGluZyA9IHRoaXMub25Eb2N1bWVudEtleWRvd24uYmluZCh0aGlzKTtcclxuICAgIHByaXZhdGUgb25XaW5kb3dTY3JvbGxCaW5kaW5nID0gdGhpcy5vbldpbmRvd1Njcm9sbC5iaW5kKHRoaXMpO1xyXG4gICAgcHJpdmF0ZSBvbldpbmRvd0JsdXJCaW5kaW5nID0gdGhpcy5vbldpbmRvd0JsdXIuYmluZCh0aGlzKTtcclxuICAgIHByaXZhdGUgYWN0aXZlRHJvcGRvd246IERyb3Bkb3duO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIHNhdmVzIHRoZSByZWNvcmRzIGZvciB0aGUgbGFzdCBvcGVuZWQgZHJvcGRvd25zXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZHJvcGRvd25MaXN0OiBBcnJheTxEcm9wZG93bj4gPSBbXTtcclxuICAgIC8vIEl0IGRlZmluZXMgdGhlIGhlaWdodCBmb3IgdGhlIGRyb3Bkb3duIHdpdGggdGhlIHNwZWNpZmljIHdpbmRvdyBoZWlnaHQuXHJcbiAgICAvLyBUaGlzIHdpbGwgYmUgZW5hYmxlZCBvbmx5IGlmIDxzbWUtZHJvcGRvd24gW2NhbGN1bGF0ZUhlaWdodF09XCJ0cnVlXCI+XHJcbiAgICBwcml2YXRlIGhlaWdodENhbGN1bGF0aW9uT2JqZWN0OiBEcm9wZG93bkhlaWdodENhbGN1bGF0aW9uU2NoZW1hID0ge1xyXG4gICAgICAgIHNtYWxsOiB7XHJcbiAgICAgICAgICAgIC8vIHdoZW4gdGhlIHdpbmRvdyBoZWlnaHQgaXMgc21hbGxlciB0aGFuIDMwMHB4XHJcbiAgICAgICAgICAgIC8vIFRoZSBzbWFsbGVzdCBtYXJnaW4gdG9wIGFuZCBib3R0b21cclxuICAgICAgICAgICAgbWF4OiAzMDAsXHJcbiAgICAgICAgICAgIG1hcmdpbjogNSxcclxuICAgICAgICAgICAgd2hvbGVIZWlnaHQ6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1lZGl1bToge1xyXG4gICAgICAgICAgICAvLyB3aGVuIHRoZW4gd2luZG93IGhlaWdodCBpcyB3aXRoaW4gWzMwMSw1MDBdXHJcbiAgICAgICAgICAgIC8vIFRoZSBzbWFsbGVzdCBtYXJnaW4gdG9wIGFuZCBib3R0b21cclxuICAgICAgICAgICAgbWluOiAzMDAsXHJcbiAgICAgICAgICAgIG1heDogNTAwLFxyXG4gICAgICAgICAgICBtYXJnaW46IDEwXHJcbiAgICAgICAgfSxcclxuICAgICAgICBsYXJnZToge1xyXG4gICAgICAgICAgICAvLyB3aGVuIHRoZW4gd2luZG93IGhlaWdodCBpcyBncmVhdGVyIHRoYW4gNTAwcHhcclxuICAgICAgICAgICAgLy8gVGhlIHNtYWxsZXN0IG1hcmdpbiB0b3AgYW5kIGJvdHRvbVxyXG4gICAgICAgICAgICBtaW46IDUwMCxcclxuICAgICAgICAgICAgbWFyZ2luOiAyMFxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBvcGVucyBhIGRyb3Bkb3duIGFuZCBzZXRzIGl0IHRvIGFjdGl2ZVxyXG4gICAgICogQHBhcmFtIGRyb3Bkb3duIFRoZSBkcm9wZG93biB0byBvcGVuXHJcbiAgICAgKiBAcGFyYW0gY2FsY3VsYXRlSGVpZ2h0IFdoZXRoZXIgdG8gZG8gaGVpZ2h0IGNhbGN1bGF0aW9uXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcGVuKGRyb3Bkb3duOiBEcm9wZG93biwgY2FsY3VsYXRlSGVpZ2h0PzogYm9vbGVhbiwgZGlzcGxheVRvU2lkZT86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzQ3VycmVudERyb3Bkb3duQ2hpbGRGcm9tQWN0aXZlRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZURyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBub3QgYW4gYWN0aXZlIGRyb3Bkb3duLCBhZGQgaGFuZGxlciBmb3IgYXV0byBjbG9zaW5nIHRoZSBkcm9wZG93blxyXG4gICAgICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkRvY3VtZW50Q2xpY2tCaW5kaW5nKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbkRvY3VtZW50S2V5ZG93bkJpbmRpbmcpO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25XaW5kb3dTY3JvbGxCaW5kaW5nLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vbldpbmRvd0JsdXJCaW5kaW5nKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBwYXNzZWQgaW4gZHJvcGRvd24gaXMgbm90IHRoZSBhY3RpdmUgZHJvcGRvd25cclxuICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnQgZHJvcGRvd24gaXMgdGhlIGNoaWxkIG9mIHRoZSBhY3RpdmUgZHJvcGRvd25cclxuICAgICAgICAgICAgICAgIC8vIHdlIHNob3VsZCBrZWVwIGJvdGggZHJvcGRvd24gb3BlbmluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlRHJvcGRvd24gIT09IGRyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZHJvcGRvd25Ob2RlID0gZHJvcGRvd24uY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVEcm9wZG93bkNoaWxkcmVuID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zbWUtbGF5b3V0LWRyb3Bkb3duJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZURyb3Bkb3duQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGl2ZURyb3Bkb3duQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVEcm9wZG93bkNoaWxkcmVuW2ldLmlzU2FtZU5vZGUoZHJvcGRvd25Ob2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudERyb3Bkb3duQ2hpbGRGcm9tQWN0aXZlRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0N1cnJlbnREcm9wZG93bkNoaWxkRnJvbUFjdGl2ZURyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRHJvcGRvd24uaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURyb3Bkb3duLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBjbG9zZSB0aGUgYWN0aXZlIGRyb3Bkb3duXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEcm9wZG93bi5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiBub3QgZnJvbSB0aGUgc2FtZSBwYXJlbnQsIGNsb3NlIHRoZSBwcmV2aW91cyBhY3RpdmUgZWxlbWVudCdzIGRpcmVjdHNcclxuICAgICAgICAgICAgLy8gdGhlbiBvcGVuIGN1cnJlbnQgYWN0aXZlIGRyb3Bkb3duXHJcbiAgICAgICAgICAgIC8vIGlmIG5lZWQgdG8gY2xvc2UsIHRoZW4gbmVlZCB0byBjbG9zZSBmaXJzdCBhbmQgdGhlbiBvcGVuXHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VOZXN0ZWRPbk9wZW4oZHJvcGRvd24sIHRoaXMuYWN0aXZlRHJvcGRvd24sIGlzQ3VycmVudERyb3Bkb3duQ2hpbGRGcm9tQWN0aXZlRHJvcGRvd24pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBuZXcgZHJvcGRvd24gYXMgdGhlIG9wZW4gZHJvcGRvd25cclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRHJvcGRvd24gPSBkcm9wZG93bjtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRHJvcGRvd24uaXNPcGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBwdXNoIG5ldyBleHBhbmRlZCBkcm9wZG93biBjb21wb25lbnRcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURyb3Bkb3duICYmICF0aGlzLmRyb3Bkb3duTGlzdC5pbmNsdWRlcyh0aGlzLmFjdGl2ZURyb3Bkb3duKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25MaXN0LnB1c2godGhpcy5hY3RpdmVEcm9wZG93bik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbihkcm9wZG93biwgY2FsY3VsYXRlSGVpZ2h0LCBkaXNwbGF5VG9TaWRlKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogdXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgYSBkcm9wZG93biBzbyB0aGF0IGl0IHJlbWFpbnMgb24gc2NyZWVuXHJcbiAgICAgKiBAcGFyYW0gZHJvcGRvd24gVGhlIGRyb3Bkb3duIHRvIHVwZGF0ZVxyXG4gICAgICogQHBhcmFtIGNhbGN1bGF0ZUhlaWdodCBEZWZpbmVzIHdoZXRoZXIgdG8gY2FsY3VsYXRlIGhlaWdodCBvZiB0aGUgZHJvcGRvd24gYmFzZWQgb24gd2luZG93IHNpemUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB1cGRhdGVQb3NpdGlvbihkcm9wZG93bjogRHJvcGRvd24sIGNhbGN1bGF0ZUhlaWdodD86IGJvb2xlYW4sIGRpc3BsYXlUb1NpZGU/OiBib29sZWFuKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudEVsZW1lbnQgPSAoPEhUTUxFbGVtZW50PmRyb3Bkb3duLmNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xyXG5cclxuICAgICAgICAvLyByZXNldCBkcm9wZG93biBvdmVyZmxvd1xyXG4gICAgICAgIGRyb3Bkb3duLm92ZXJmbG93WCA9IGZhbHNlO1xyXG4gICAgICAgIGRyb3Bkb3duLm92ZXJmbG93WSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBSZXNldCB0aGUgY29udGVudCBoZWlnaHQgYW5kIHdpZHRoIHRoZW4gdGhlIGNvbnRlbnQuc2Nyb2xsSGVpZ2h0IGFuZCBzY3JvbGxXaWR0aCBjYW4gZ2V0IHRoZSBhY3R1YWwgY29udGVudCBkaW1lbnNpb25zXHJcbiAgICAgICAgY29udGVudEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJyc7XHJcbiAgICAgICAgY29udGVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAnJztcclxuXHJcbiAgICAgICAgY29uc3QgdG9nZ2xlUmVjdCA9ICg8SFRNTEVsZW1lbnQ+ZHJvcGRvd24udG9nZ2xlRWxlbWVudC5uYXRpdmVFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgLy8gd2UgZG9uJ3QgYWxsb3cgdGhlIGRyb3Bkb3duIHRvIGV4Y2VlZCB0aGUgaGVpZ2h0IG9yIHdpZHRoIG9mIHRoZSB3aW5kb3csIHNvIGFjY291bnQgZm9yIHRoYXQgYXMgd2VsbFxyXG4gICAgICAgIGNvbnN0IHJlY3RXaWR0aCA9IGNvbnRlbnRFbGVtZW50LnNjcm9sbFdpZHRoO1xyXG4gICAgICAgIGNvbnN0IHJlY3RIZWlnaHQgPSBjb250ZW50RWxlbWVudC5zY3JvbGxIZWlnaHQ7XHJcblxyXG4gICAgICAgIC8vIFNldCB0aGUgbGVmdCBwb3NpdGlvbiBvZiB0aGUgZHJvcGRvd25cclxuICAgICAgICB0aGlzLmRyb3Bkb3duU2V0UG9zaXRpb25MZWZ0KHRvZ2dsZVJlY3QsIGRyb3Bkb3duLCByZWN0V2lkdGgsIGRpc3BsYXlUb1NpZGUpO1xyXG5cclxuICAgICAgICAvLyBTZXQgdGhlIHJpZ2h0IHBvc2l0aW9uIG9mIHRoZSBkcm9wZG93blxyXG4gICAgICAgIHRoaXMuZHJvcGRvd25TZXRQb3NpdGlvblRvcCh0b2dnbGVSZWN0LCBkcm9wZG93biwgcmVjdEhlaWdodCwgY2FsY3VsYXRlSGVpZ2h0LCBkaXNwbGF5VG9TaWRlKTtcclxuXHJcbiAgICAgICAgaWYgKCFkcm9wZG93bi5kcm9wZG93bkFwcGx5Rm9ybUZpZWxkT2Zmc2V0V2lkdGgpIHtcclxuICAgICAgICAgICAgLy8gbWluLWNvbnRlbnQgd291bGQgYmUgYSBnb29kIGNob2ljZSBidXQgd29uJ3QgYmUgc3VwcG9ydGVkIGJ5IGllIG9yIGVkZ2VcclxuICAgICAgICAgICAgKDxIVE1MRWxlbWVudD5kcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KS5zdHlsZS5tYXhXaWR0aCA9ICdpbmhlcml0JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXJrcyBhIGRyb3Bkb3duIGFzIGNsb3NlZCwgaWYgdGhlIGRyb3Bkb3duIGlzIHRoZSBhY3RpdmUgZHJvcGRvd24sXHJcbiAgICAgKiB0aGUgYWN0aXZlIGRyb3Bkb3duIGlzIHJlc2V0IGFuZCBldmVudCBoYW5kbGVycyBhcmUgcmVtb3ZlZC5cclxuICAgICAqIEBwYXJhbSBkcm9wZG93biBUaGUgZHJvcGRvd24gdG8gY2xvc2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsb3NlKGRyb3Bkb3duOiBEcm9wZG93biwgZXZlbnQ/OiBFdmVudHMpIHtcclxuICAgICAgICAvLyBtYXJrIHRoZSBkcm9wZG93biBhcyBjbG9zZWRcclxuICAgICAgICBkcm9wZG93bi5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgICAvLyByZXR1cm4gaWYgdGhlIHBhc3NlZCBpbiBkcm9wZG93biBpcyBub3QgdGhlIGFjdGl2ZSBkcm9wZG93blxyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURyb3Bkb3duICE9PSBkcm9wZG93bikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZXNldCBhY3RpdmUgZHJvcGRvd24gdG8gbnVsbFxyXG4gICAgICAgIHRoaXMuYWN0aXZlRHJvcGRvd24gPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZU5lc3RlZChkcm9wZG93biwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc3RvcCBsaXN0ZW5pbmcgdG8gZG9jdW1lbnQgZXZlbnRzIGlmIG5vIGFjdGl2ZSBkcm9wZG93blxyXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVEcm9wZG93bikge1xyXG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uRG9jdW1lbnRDbGlja0JpbmRpbmcpO1xyXG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25Eb2N1bWVudEtleWRvd25CaW5kaW5nKTtcclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25XaW5kb3dTY3JvbGxCaW5kaW5nLCB0cnVlKTtcclxuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uV2luZG93Qmx1ckJpbmRpbmcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgZG9jdW1lbnQgY2xpY2tzIHdoaWxlIGEgZHJvcGRvd24gaXMgb3BlblxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgICAgIC8vIHN0b3AgaWYgdGhlcmUgaXMgbm8gZHJvcGRvd25cclxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlRHJvcGRvd24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc3RvcCBpZiB0aGUgY2xpY2tlZCBlbGVtZW50IGlzIGFsc28gdGhlIHRvZ2dsZSBlbGVtZW50IGZvciB0aGUgYWN0aXZlIGRyb3Bkb3duXHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRHJvcGRvd24udG9nZ2xlRWxlbWVudCAmJiB0aGlzLmFjdGl2ZURyb3Bkb3duLnRvZ2dsZUVsZW1lbnQubmF0aXZlRWxlbWVudCA9PT0gZXZlbnQudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBjbGljayBvY2N1cmVkIGFuIGVsZW1lbnQgdGhhdCBpcyBpbnNpZGUgdGhlIGRyb3Bkb3duIGNvbnRlbnRcclxuICAgICAgICBpZiAodGhpcy5hY3RpdmVEcm9wZG93bi5jb250ZW50RWxlbWVudCAmJlxyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURyb3Bkb3duLmNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xyXG5cclxuICAgICAgICAgICAgLy8gc3RvcCBpZiB0aGUgZWxlbWVudCBpcyBhbiBlbGVtZW50IHRoYXQgaGFuZGxlcyBpbnB1dCwgcmV0dXJuXHJcbiAgICAgICAgICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KCg8YW55PmV2ZW50LnRhcmdldCkudGFnTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc3RvcCBpZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaGFzIHRoZSAnc21lLWRyb3Bkb3duLWludGVyYWN0aW9uLWVuYWJsZWQnIGNsYXNzIG9uIG9uZSBvZiBpdHMgYW5jZXN0b3JzIHVwIHRvIHRoZSBjb250ZW50IGVsZW1lbnRcclxuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0O1xyXG4gICAgICAgICAgICB3aGlsZSAoIXRoaXMuYWN0aXZlRHJvcGRvd24uY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5pc1NhbWVOb2RlKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3NtZS1kcm9wZG93bi1pbnRlcmFjdGlvbi1lbmFibGVkJykpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBvdGhlcndpc2UsIGNsb3NlIHRoZSBkcm9wZG93blxyXG4gICAgICAgIHRoaXMuY2xvc2UodGhpcy5hY3RpdmVEcm9wZG93biwgZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBkb2N1bWVudCBrZXlkb3ducyB3aGlsZSBhIGRyb3Bkb3duIGlzIG9wZW5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBvbkRvY3VtZW50S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIC8vIGlmIHRoZSBlc2Mga2V5IGlzIHByZXNzZWQsIGNsb3NlIHRoZSBwb3B1cCBhbmQgZm9jdXMgb24gdGhlIHRvZ2dsZSBlbGVtZW50XHJcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEtleUNvZGUuRXNjYXBlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURyb3Bkb3duICYmIHRoaXMuYWN0aXZlRHJvcGRvd24udG9nZ2xlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG9jRWxlbWVudCA9IHRoaXMuYWN0aXZlRHJvcGRvd24udG9nZ2xlRWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEVsZW1lbnQgPSBEb20uZ2V0Rmlyc3RGb2N1c2FibGVEZXNjZW5kZW50KGRvY0VsZW1lbnQpIHx8IERvbS5nZXROZXh0Rm9jdXNhYmxlRWxlbWVudChkb2NFbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKHRoaXMuYWN0aXZlRHJvcGRvd24pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBkb2N1bWVudCBzY3JvbGxpbmcgd2hpbGUgYSBkcm9wZG93biBpcyBvcGVuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgb25XaW5kb3dTY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgLy8gc3RvcCBpZiB0aGVyZSBpcyBubyBkcm9wZG93blxyXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVEcm9wZG93bikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBzY3JvbGwgb2NjdXJlZCBvbiBhbiBlbGVtZW50IHRoYXQgaXMgaW5zaWRlIHRoZSBkcm9wZG93biBjb250ZW50XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRHJvcGRvd24uY29udGVudEVsZW1lbnQgJiZcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBvdGhlcndpc2UsIGNsb3NlIGRyb3Bkb3duKHMpXHJcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25MaXN0ICYmIHRoaXMuZHJvcGRvd25MaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlTmVzdGVkQWxsRXhwYW5kZWREcm9wZG93bnModGhpcy5kcm9wZG93bkxpc3QpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2UodGhpcy5hY3RpdmVEcm9wZG93bik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB3aW5kb3cgYmx1cnMgd2hpbGUgYSBkcm9wZG93biBpcyBvcGVuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgb25XaW5kb3dCbHVyKGV2ZW50OiBGb2N1c0V2ZW50KSB7XHJcbiAgICAgICAgLy8gY2xvc2UgdGhlIGRyb3Bkb3duIGlmIHdlIGxlYXZlIHRoZSB3aW5kb3cgKHRoaXMgYWxzbyB3b3JrcyB0byBwcmV2ZW50IHRvIGNsb3NlIGRyb3Bkb3ducyBpbiBpZnJhbWVzKVxyXG4gICAgICAgIHRoaXMuY2xvc2UodGhpcy5hY3RpdmVEcm9wZG93biwgZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBIYW5kbGVzIHRoZSBwb3NpdGlvbiBjYWxjdWxhdGlvbiBmb3IgdGhlIGxlZnQgb2YgdGhlIGRyb3Bkb3duIGNvbnRhaW5lclxyXG4gICAgKiBEZWNpZGVzIHdoZXRoZXIgdG8gcGxhY2UgdGhlIGRyb3Bkb3duIGxlZnQsIHJpZ2h0LCBvciBvbiB0b3Agb2YgdGhlIHRvZ2dsZSBidXR0b25cclxuICAgICovXHJcbiAgICBwcml2YXRlIGRyb3Bkb3duU2V0UG9zaXRpb25MZWZ0KFxyXG4gICAgICAgIHRvZ2dsZVJlY3Q6IERPTVJlY3QgfCBDbGllbnRSZWN0LFxyXG4gICAgICAgIGRyb3Bkb3duOiBEcm9wZG93bixcclxuICAgICAgICByZWN0V2lkdGg6IG51bWJlcixcclxuICAgICAgICBkaXNwbGF5VG9TaWRlPzogYm9vbGVhbik6IHZvaWQge1xyXG5cclxuICAgICAgICAvLyBtb2RpZnkgdGhlIGxlZnQgcG9zaXRpb24gb2YgdGhlIHJlY3QgdG8gYWNjb3VudCBmb3IgYW55IG9sZCBvZmZzZXRcclxuICAgICAgICBsZXQgcmVjdExlZnQgPSB0b2dnbGVSZWN0LmxlZnQ7XHJcblxyXG4gICAgICAgIC8vIGdldCB0aGUgdmlld3BvcnQgd2lkdGhcclxuICAgICAgICBjb25zdCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG5cclxuICAgICAgICAvLyBJZiBkaXNwbGF5VG9TaWRlIGF0dHJpYnV0ZSBpcyBzZXQsIGRpc3BsYXkgZHJvcGRvd24gdG8gc2lkZSBvZiB0b2dnbGVSZWN0LCBlbHNlIHBsYWNlIGl0IGFib3ZlIG9yIGJlbG93XHJcbiAgICAgICAgaWYgKCEhZGlzcGxheVRvU2lkZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzcGFjZUxlZnQgPSB0b2dnbGVSZWN0LmxlZnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwYWNlUmlnaHQgPSB3aW5kb3dXaWR0aCAtIHRvZ2dsZVJlY3QucmlnaHQ7XHJcblxyXG4gICAgICAgICAgICAvLyBBbHdheXMgdHJ5IHRvIHB1dCBkcm9wZG93biB0byB0aGUgZGlyZWN0aW9uIHRoYXQgaGFzIG1vcmUgc3BhY2UuIEZpcnN0IHRyeSB0byBwdXQgb24gdGhlIHJpZ2h0LCBpZiBub3QgdGhlbiBwdXQgbGVmdFxyXG4gICAgICAgICAgICBpZiAoc3BhY2VSaWdodCA+PSBEcm9wZG93blNlcnZpY2UubWluU3BhY2VGb3JEcm9wZG93biB8fCByZWN0V2lkdGggPCBzcGFjZVJpZ2h0IHx8IHNwYWNlUmlnaHQgPiBzcGFjZUxlZnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZWN0V2lkdGggPiBzcGFjZVJpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdFdpZHRoID0gc3BhY2VSaWdodDtcclxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bi5vdmVyZmxvd1ggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gc2hvdyByaWdodCBvZiBjb250cm9sXHJcbiAgICAgICAgICAgICAgICByZWN0TGVmdCA9IHRvZ2dsZVJlY3QucmlnaHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjdFdpZHRoIDwgc3BhY2VMZWZ0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzaG93IGxlZnQgb2YgY29udHJvbFxyXG4gICAgICAgICAgICAgICAgcmVjdExlZnQgPSB0b2dnbGVSZWN0LmxlZnQgLSByZWN0V2lkdGg7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZiByZWN0IGlzIGJpZ2dlciB0aGFuIHNwYWNlIHRvIHRoZSBsZWZ0IGFuZCB0b2dnbGUgcmVjdGFuZ2xlIGNvbWJpbmVkXHJcbiAgICAgICAgICAgICAgICBpZiAocmVjdFdpZHRoID4gc3BhY2VMZWZ0ICsgdG9nZ2xlUmVjdC53aWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RXaWR0aCA9IHNwYWNlTGVmdCArIHRvZ2dsZVJlY3Qud2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd24ub3ZlcmZsb3dYID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIHNob3cgb24gdG9wIG9mIGNvbnRyb2xcclxuICAgICAgICAgICAgICAgIHJlY3RMZWZ0ID0gdG9nZ2xlUmVjdC5yaWdodCAtIHJlY3RXaWR0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIENhcCB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZSB3aW5kb3cgZGltZW5zaW9ucyBhbmQgc2V0IGFwcHJvcHJpYXRlIG92ZXJmbG93XHJcbiAgICAgICAgICAgIGlmIChyZWN0V2lkdGggPiB3aW5kb3dXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgcmVjdFdpZHRoID0gd2luZG93V2lkdGg7XHJcbiAgICAgICAgICAgICAgICBkcm9wZG93bi5vdmVyZmxvd1ggPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZWN0V2lkdGggPCB0b2dnbGVSZWN0LndpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICByZWN0V2lkdGggPSB0b2dnbGVSZWN0LndpZHRoO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmVjdExlZnQgKyByZWN0V2lkdGggPiB3aW5kb3dXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgcmVjdExlZnQgPSB3aW5kb3dXaWR0aCAtIHJlY3RXaWR0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVjdExlZnQgPSBNYXRoLm1heCgwLCByZWN0TGVmdCk7XHJcbiAgICAgICAgZHJvcGRvd24ubGVmdCA9IHJlY3RMZWZ0O1xyXG5cclxuICAgICAgICAoPEhUTUxFbGVtZW50PmRyb3Bkb3duLmNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLnN0eWxlLmxlZnQgPSByZWN0TGVmdCArICdweCc7XHJcbiAgICAgICAgaWYgKCFkcm9wZG93bi5hdXRvV2lkdGgpIHtcclxuICAgICAgICAgICAgKDxIVE1MRWxlbWVudD5kcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KS5zdHlsZS53aWR0aCA9IHJlY3RXaWR0aCArICdweCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyB0aGUgcG9zaXRpb24gY2FsY3VsYXRpb24gZm9yIHRoZSB0b3Agb2YgdGhlIGRyb3Bkb3duIGNvbnRhaW5lclxyXG4gICAgICogRGVjaWRlcyB3aGV0aGVyIHRvIHBsYWNlIHRoZSBkcm9wZG93biBhYm92ZSBvciBiZWxvdyB0aGUgdG9nZ2xlIGJ1dHRvblxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRyb3Bkb3duU2V0UG9zaXRpb25Ub3AoXHJcbiAgICAgICAgdG9nZ2xlUmVjdDogRE9NUmVjdCB8IENsaWVudFJlY3QsXHJcbiAgICAgICAgZHJvcGRvd246IERyb3Bkb3duLFxyXG4gICAgICAgIHJlY3RIZWlnaHQ6IG51bWJlcixcclxuICAgICAgICBjYWxjdWxhdGVIZWlnaHQ/OiBib29sZWFuLFxyXG4gICAgICAgIGRpc3BsYXlUb1NpZGU/OiBib29sZWFuKTogdm9pZCB7XHJcblxyXG4gICAgICAgIC8vIG5lZWQgdG8gcmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlIGZvciBzbWFsbCBoZWlnaHQgd2luZG93IHJlbmRlcmluZ1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVjdEhlaWdodCA9IHJlY3RIZWlnaHQ7XHJcblxyXG4gICAgICAgIC8vIG1vZGlmeSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSByZWN0IHRvIGFjY291bnQgZm9yIGFueSBvbGQgb2Zmc2V0XHJcbiAgICAgICAgbGV0IHJlY3RUb3AgPSB0b2dnbGVSZWN0LmJvdHRvbTtcclxuXHJcbiAgICAgICAgLy8gZ2V0IHRoZSB2aWV3cG9ydCBoZWlnaHRcclxuICAgICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcblxyXG4gICAgICAgIGNvbnN0IHNwYWNlQWJvdmUgPSB0b2dnbGVSZWN0LnRvcDtcclxuICAgICAgICBjb25zdCBzcGFjZUJlbG93ID0gd2luZG93SGVpZ2h0IC0gdG9nZ2xlUmVjdC5ib3R0b207XHJcblxyXG4gICAgICAgIC8vIEFsd2F5cyB0cnkgdG8gcHV0IGRyb3Bkb3duIHRvIHRoZSBkaXJlY3Rpb24gdGhhdCBoYXMgbW9yZSBzcGFjZS5cclxuICAgICAgICBsZXQgc2hvdWxkRGlzcGxheWluZ0Fib3ZlID0gZmFsc2U7XHJcbiAgICAgICAgLy8gRmlyc3QgdHJ5IHRvIHB1dCBvbiB0aGUgYm90dG9tLCBpZiBub3QgdGhlbiBwdXQgb24gYWJvdmVcclxuICAgICAgICBpZiAoc3BhY2VCZWxvdyA+PSBEcm9wZG93blNlcnZpY2UubWluU3BhY2VGb3JEcm9wZG93biB8fCByZWN0SGVpZ2h0IDwgc3BhY2VCZWxvdyB8fCBzcGFjZUJlbG93ID4gc3BhY2VBYm92ZSkge1xyXG4gICAgICAgICAgICBpZiAocmVjdEhlaWdodCA+IHNwYWNlQmVsb3cpIHtcclxuICAgICAgICAgICAgICAgIHJlY3RIZWlnaHQgPSBzcGFjZUJlbG93O1xyXG4gICAgICAgICAgICAgICAgZHJvcGRvd24ub3ZlcmZsb3dZID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzaG93IGJlbG93IHRoZSBjb250cm9sLlxyXG4gICAgICAgICAgICByZWN0VG9wID0gZGlzcGxheVRvU2lkZSA9PT0gdHJ1ZSA/IHRvZ2dsZVJlY3QudG9wIDogdG9nZ2xlUmVjdC5ib3R0b207XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gaWYgcmVjdCBpcyBiaWdnZXIgdGhhbiBzcGFjZSBhYm92ZVxyXG4gICAgICAgICAgICBpZiAocmVjdEhlaWdodCA+IHNwYWNlQWJvdmUpIHtcclxuICAgICAgICAgICAgICAgIHJlY3RIZWlnaHQgPSBzcGFjZUFib3ZlO1xyXG4gICAgICAgICAgICAgICAgZHJvcGRvd24ub3ZlcmZsb3dZID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzaG93IGFib3ZlIHRoZSBjb250cm9sLlxyXG4gICAgICAgICAgICByZWN0VG9wID0gZGlzcGxheVRvU2lkZSA9PT0gdHJ1ZSA/IHRvZ2dsZVJlY3QuYm90dG9tIC0gcmVjdEhlaWdodCA6IHRvZ2dsZVJlY3QudG9wIC0gcmVjdEhlaWdodDtcclxuICAgICAgICAgICAgc2hvdWxkRGlzcGxheWluZ0Fib3ZlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlY3RUb3AgPSBNYXRoLm1heCgwLCByZWN0VG9wKTtcclxuICAgICAgICBkcm9wZG93bi50b3AgPSByZWN0VG9wO1xyXG5cclxuICAgICAgICBpZiAoY2FsY3VsYXRlSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodFRvcE9iamVjdCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ2FsY3VsYXRlSGVpZ2h0VG9wKFxyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdFRvcCxcclxuICAgICAgICAgICAgICAgICAgICBzaG91bGREaXNwbGF5aW5nQWJvdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BhY2VBYm92ZSxcclxuICAgICAgICAgICAgICAgICAgICBzcGFjZUJlbG93LFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsUmVjdEhlaWdodFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgKDxIVE1MRWxlbWVudD5kcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KS5zdHlsZS5oZWlnaHQgPSBoZWlnaHRUb3BPYmplY3QuaGVpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgKDxIVE1MRWxlbWVudD5kcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KS5zdHlsZS50b3AgPSBoZWlnaHRUb3BPYmplY3QudG9wICsgJ3B4JztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAoPEhUTUxFbGVtZW50PmRyb3Bkb3duLmNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLnN0eWxlLmhlaWdodCA9IHJlY3RIZWlnaHQgKyAncHgnO1xyXG4gICAgICAgICAgICAoPEhUTUxFbGVtZW50PmRyb3Bkb3duLmNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLnN0eWxlLnRvcCA9IHJlY3RUb3AgKyAncHgnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGhhbmRsZXMgdGhlIGhlaWdodCBjYWxjdWxhdGlvbiBmb3IgdGhlIGRyb3Bkb3duIGNvbnRhaW5lclxyXG4gICAgICogSXQgY2FsY3VsYXRlcyBiYXNlZCBvbiB0aGUgaGVpZ2h0Q2FsY3VsYXRpb25PYmplY3RcclxuICAgICAqIEZpcnN0IHRyeSB0byBwdXQgdGhlIGRyb3Bkb3duIGNvbnRhaW5lciB0byBkZWNpZGUgd2hldGhlciBhIHNjcm9sbCBiYXIgaXMgbmVlZGVkXHJcbiAgICAgKiBUaGVuIGFwcGx5IHRoZSBoZWlnaHQgZnJvbSBjYWxjdWxhdGlvblxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRyb3Bkb3duQ2FsY3VsYXRlSGVpZ2h0VG9wKHJlY3RIZWlnaHQ6IG51bWJlciwgcmVjdFRvcDogbnVtYmVyLCBzaG91bGREaXNwbGF5aW5nQWJvdmU6IGJvb2xlYW4sIHRvZ2dsZVRvcDogbnVtYmVyLFxyXG4gICAgICAgIHRvZ2dsZUJvdHRvbTogbnVtYmVyLCBvcmlnaW5hbFJlY3RIZWlnaHQ6IG51bWJlcik6IERyb3Bkb3duSGVpZ2h0Q2FsY3VsYXRpb25SZXN1bHQge1xyXG4gICAgICAgIGNvbnN0IHdpbmRvd0hlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgICAgICBsZXQgYWN0dWFsVG9wID0gcmVjdFRvcDtcclxuICAgICAgICBsZXQgYWN0dWFsSGVpZ2h0ID0gcmVjdEhlaWdodDtcclxuICAgICAgICBjb25zdCB0b2dnbGVIZWlnaHQgPSBzaG91bGREaXNwbGF5aW5nQWJvdmUgPyB0b2dnbGVUb3AgOiB0b2dnbGVCb3R0b207XHJcbiAgICAgICAgY29uc3Qgd2luZG93SGVpZ2h0TWFyZ2luID0gdGhpcy5nZXREcm9wZG93bk1hcmdpbih3aW5kb3dIZWlnaHQpO1xyXG4gICAgICAgIGNvbnN0IHNob3VsZFVwZGF0ZUhlaWdodCA9IHRoaXMuc2hvdWxkVXBkYXRlSGVpZ2h0KHJlY3RIZWlnaHQsIHRvZ2dsZUhlaWdodCwgd2luZG93SGVpZ2h0TWFyZ2luKTtcclxuXHJcbiAgICAgICAgaWYgKHNob3VsZFVwZGF0ZUhlaWdodCkge1xyXG4gICAgICAgICAgICAvLyBoYW5kbGVzIHNwZWNpYWwgY2FzZXMgd2hlcmUgZHJvcGRvd24gYm9keSBpcyB0b28gYmlnLCB1c2UgZnVsbCBoZWlnaHQgbW9kZVxyXG4gICAgICAgICAgICBpZiAob3JpZ2luYWxSZWN0SGVpZ2h0ID49IHRvZ2dsZUhlaWdodCAqIERyb3Bkb3duU2VydmljZS5zaG91bGRVc2VGdWxsSGVpZ2h0RHJvcGRvd25SYXRpbykge1xyXG4gICAgICAgICAgICAgICAgYWN0dWFsVG9wID0gd2luZG93SGVpZ2h0TWFyZ2luO1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgb3JpZ2luYWwgYm9keSBleGNlZWRlZCB0aGUgd2hvbGUgd2luZG93IGhlaWdodCwgdXNlIHdpbmRvdyBoZWlnaHRcclxuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB1c2UgdGhlIG9yaWdpbmFsIGhlaWdodFxyXG4gICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsUmVjdEhlaWdodCA+PSB3aW5kb3dIZWlnaHQgLSAyICogd2luZG93SGVpZ2h0TWFyZ2luKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsSGVpZ2h0ID0gd2luZG93SGVpZ2h0IC0gMiAqIHdpbmRvd0hlaWdodE1hcmdpbjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsSGVpZ2h0ID0gb3JpZ2luYWxSZWN0SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvd0hlaWdodCA8PSB0aGlzLmhlaWdodENhbGN1bGF0aW9uT2JqZWN0LnNtYWxsLm1heCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbFJlY3RIZWlnaHQgPiB3aW5kb3dIZWlnaHQgLSAyICogd2luZG93SGVpZ2h0TWFyZ2luKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdob2xlIGhlaWdodFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxIZWlnaHQgPSB3aW5kb3dIZWlnaHQgLSAyICogd2luZG93SGVpZ2h0TWFyZ2luO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxUb3AgPSB3aW5kb3dIZWlnaHRNYXJnaW47XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWN0SGVpZ2h0ID4gdG9nZ2xlSGVpZ2h0IC0gd2luZG93SGVpZ2h0TWFyZ2luKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpc3BsYXkgZnJvbSB0b3AsIHdpbGwgY292ZXIgcGFydCBvZiB0aGUgaW5wdXQgYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbEhlaWdodCA9IHJlY3RIZWlnaHQgLSB3aW5kb3dIZWlnaHRNYXJnaW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbFRvcCA9IHdpbmRvd0hlaWdodE1hcmdpbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNhbiBiZSBvbmx5IGRpc3BsYXllZCBhcyBiZWxvdyBvciBhYm92ZSBpbiBiaWdnZXIgc2NyZWVuXHJcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsSGVpZ2h0ID0gcmVjdEhlaWdodCAtIHdpbmRvd0hlaWdodE1hcmdpbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNob3VsZERpc3BsYXlpbmdBYm92ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRvZ2dsZVRvcCA+IGFjdHVhbEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbFRvcCA9IHRvZ2dsZVRvcCAtIGFjdHVhbEhlaWdodDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdG9wOiBhY3R1YWxUb3AsXHJcbiAgICAgICAgICAgIGhlaWdodDogYWN0dWFsSGVpZ2h0XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgd2hldGhlciBzaG91bGQgdXBkYXRlIHRoZSBoZWlnaHQgcGl4ZWxzIGZvciB0aGUgZHJvcGRvd25cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzaG91bGRVcGRhdGVIZWlnaHQocmVjdEhlaWdodDogbnVtYmVyLCB0b2dnbGVIZWlnaHQ6IG51bWJlciwgd2luZG93SGVpZ2h0TWFyZ2luOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRvZ2dsZUhlaWdodCAtIHJlY3RIZWlnaHQgPCB3aW5kb3dIZWlnaHRNYXJnaW4pIHtcclxuICAgICAgICAgICAgcmVzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBkcm9wZG93biBtYXJnaW4gYmFzZSBvbiB0aGUgY2FsY3VsYXRpb24gb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0RHJvcGRvd25NYXJnaW4od2luZG93SGVpZ2h0OiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgd2luZG93SGVpZ2h0TWFyZ2luID0gMDtcclxuICAgICAgICBpZiAod2luZG93SGVpZ2h0IDw9IHRoaXMuaGVpZ2h0Q2FsY3VsYXRpb25PYmplY3Quc21hbGwubWF4KSB7XHJcbiAgICAgICAgICAgIHdpbmRvd0hlaWdodE1hcmdpbiA9IHRoaXMuaGVpZ2h0Q2FsY3VsYXRpb25PYmplY3Quc21hbGwubWFyZ2luO1xyXG4gICAgICAgIH0gZWxzZSBpZiAod2luZG93SGVpZ2h0ID49IHRoaXMuaGVpZ2h0Q2FsY3VsYXRpb25PYmplY3QubWVkaXVtLm1pbiAmJiB3aW5kb3dIZWlnaHQgPD0gdGhpcy5oZWlnaHRDYWxjdWxhdGlvbk9iamVjdC5tZWRpdW0ubWF4KSB7XHJcbiAgICAgICAgICAgIHdpbmRvd0hlaWdodE1hcmdpbiA9IHRoaXMuaGVpZ2h0Q2FsY3VsYXRpb25PYmplY3QubWVkaXVtLm1hcmdpbjtcclxuICAgICAgICB9IGVsc2UgaWYgKHdpbmRvd0hlaWdodCA+PSB0aGlzLmhlaWdodENhbGN1bGF0aW9uT2JqZWN0LmxhcmdlLm1pbikge1xyXG4gICAgICAgICAgICB3aW5kb3dIZWlnaHRNYXJnaW4gPSB0aGlzLmhlaWdodENhbGN1bGF0aW9uT2JqZWN0LmxhcmdlLm1hcmdpbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvd0hlaWdodE1hcmdpbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERlYWwgd2l0aCBuZXN0ZWQgY2xvc2UgZm9yIGRyb3Bkb3duXHJcbiAgICAgKiBAcGFyYW0gZHJvcGRvd24gdGhlIGFjdGl2ZSBkcm9wZG93blxyXG4gICAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHRoZSBjdXJyZW50IGV2ZW50IHRhcmdldFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xvc2VOZXN0ZWQoZHJvcGRvd246IERyb3Bkb3duLCBldmVudDogRXZlbnRzKSB7XHJcbiAgICAgICAgaWYgKGRyb3Bkb3duICYmIGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGxldCBldmVudFRhcmdldCA9IDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQ7XHJcbiAgICAgICAgICAgIC8vIGFzc2lnbiBhY3RpdmUgZHJvcGRvd25cclxuICAgICAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25MaXN0ICYmIHRoaXMuZHJvcGRvd25MaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50VGFyZ2V0LmNsYXNzTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV2ZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnLnNtZS1sYXlvdXQtZHJvcGRvd24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQgPSBEb20uZ2V0QW5jZXN0b3IoZXZlbnRUYXJnZXQsIGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3NtZS1sYXlvdXQtZHJvcGRvd24nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGhhbmRsZXMgd2hlbiB0aGUgZXZlbnQgdGFyZ2V0IGlzIFdpbmRvdyBvYmplY3QgdGhhdCBkb2VzJ3QgY29udGFpbnMgZXZlbnQudGFyZ2V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudFRhcmdldC5oYXNPd25Qcm9wZXJ0eSgncXVlcnlTZWxlY3RvcicpICYmIGV2ZW50VGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ3NtZS1kcm9wZG93bicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQgPSBldmVudFRhcmdldC5xdWVyeVNlbGVjdG9yKCdzbWUtZHJvcGRvd24nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYWN0aXZlRHJvcGRvd24gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuZHJvcGRvd25MaXN0Lmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkID0gdGhpcy5kcm9wZG93bkxpc3RbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZC5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50ID09PSBldmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlRHJvcGRvd24gPSBkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURyb3Bkb3duID0gYWN0aXZlRHJvcGRvd247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY2xvc2UgZHJvcC1kb3duc1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duc0luRXZlbnRSZWdpb24gPSBldmVudFRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKCdzbWUtZHJvcGRvd24gLnNtZS1kcm9wZG93bi10b2dnbGUtY29udGFpbmVyJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZHJvcGRvd25zSW5FdmVudFJlZ2lvbiAmJiBkcm9wZG93bnNJbkV2ZW50UmVnaW9uLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNsb3NlIGFsbCBjaGlsZHJlbiBkcm9wZG93bnNcclxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjYW4gb25seSByZWZlciB0byBVSSBsZXZlbCBmcm9tIHF1ZXJ5U2VsZWN0b3JBbGwsIG5vdCB0aGUgY29tcG9uZW50LlxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duc0luRXZlbnRSZWdpb24uZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2xvc2VFdmVudCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjbG9zZSBhbGwgZXhwYW5kZWQgZHJvcGRvd25zXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZU5lc3RlZEFsbEV4cGFuZGVkRHJvcGRvd25zKHRoaXMuZHJvcGRvd25MaXN0KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURyb3Bkb3duID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNsb3NlIGFsbCBleHBhbmRlZCBkcm9wZG93bnNcclxuICAgICAgICAgICAgICAgIC8vIGNsb3NlIGNoaWxkIGZpcnN0XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTmVzdGVkQWxsRXhwYW5kZWREcm9wZG93bnModGhpcy5kcm9wZG93bkxpc3QpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEcm9wZG93biA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSXQgaGFuZGxlcyBjbG9zaW5nIGFsbCB0aGUgZXhwYW5kZWQgZHJvcGRvd25zXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY2xvc2VOZXN0ZWRBbGxFeHBhbmRlZERyb3Bkb3ducyhkcm9wZG93bkxpc3Q6IEFycmF5PERyb3Bkb3duPikge1xyXG4gICAgICAgIGlmIChkcm9wZG93bkxpc3QgJiYgZHJvcGRvd25MaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZHJvcGRvd25MaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZHJvcGRvd25MaXN0W2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGVsZW1lbnQuY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGNsb3NlIHRoZSBvbmVzIGRpc3BsYXlpbmdcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdzbWUtbGF5b3V0LWhpZGRlbicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VOZXN0ZWRIZWxwZXIoZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBZaWVsZCgpXHJcbiAgICAvKipcclxuICAgICAqIEl0IGhhbmRsZXMgY2xvc2luZyB0aGUgZHJvcGRvd24gZnJvbSB0aGUgY29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY2xvc2VOZXN0ZWRIZWxwZXIoZHJvcGRvd246IERyb3Bkb3duKSB7XHJcbiAgICAgICAgaWYgKGRyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgIGRyb3Bkb3duLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGhhbmRsZXMgd2hlbiBvcGVuaW5nIGEgZHJvcGRvd24gd2hlbiBvdGhlciBkcm9wZG93bihzKSBpcy9hcmUgb3BlblxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNsb3NlTmVzdGVkT25PcGVuKGN1cnJlbnREcm9wZG93bjogRHJvcGRvd24sIHByZXZpb3VzRHJvcGRvd246IERyb3Bkb3duLCBpc0N1cnJlbnREcm9wZG93bkNoaWxkRnJvbUFjdGl2ZURyb3Bkb3duOiBib29sZWFuKTpcclxuICAgICAgICBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzQ3VycmVudERyb3Bkb3duQ2hpbGRGcm9tQWN0aXZlRHJvcGRvd24gfHwgIXRoaXMuZHJvcGRvd25MaXN0IHx8ICF0aGlzLmRyb3Bkb3duTGlzdC5sZW5ndGggfHwgIXByZXZpb3VzRHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzRnJvbVNhbWVQYXJlbnQgPSB0aGlzLmlzRnJvbVNhbWVQYXJlbnQoY3VycmVudERyb3Bkb3duLCBwcmV2aW91c0Ryb3Bkb3duKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREcm9wZG93bk5vZGUgPSBjdXJyZW50RHJvcGRvd24uY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRHJvcGRvd25Ob2RlID0gcHJldmlvdXNEcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZCA9IERvbTtcclxuICAgICAgICAgICAgICAgIC8vIGZpbmQgaWYgdGhlcmUgYXJlIGludGVyc2VjdGlvbiBvbiBwYXJlbnQgbm9kZS4gQW5kIGNsb3NlIHRpbGwgdGhhdCBsZXZlbC5cclxuICAgICAgICAgICAgICAgIC8vIGlmIG5vIGludGVyc2VjdGlvbiwgY2xvc2UgdGhlIHByZXZpb3VzIGFjdGl2ZSBkcm9wZG93biBvbmUgYnkgb25lLlxyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBY3RpdmVEcm9wZG93bnMgPSB0aGlzLmRyb3Bkb3duTGlzdDtcclxuICAgICAgICAgICAgICAgIGlmIChpc0Zyb21TYW1lUGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkQ2xvc2VEcm9wZG93bnMgPSBwcmV2aW91c0FjdGl2ZURyb3Bkb3ducy5maWx0ZXIoKGRyb3Bkb3duKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbENoaWxkcmVuID0gZC5nZXRBbGxFbGVtZW50cyhkcm9wZG93bi5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9PiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnc21lLWxheW91dC1kcm9wZG93bicpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbENoaWxkcmVuLmluY2x1ZGVzKHByZXZpb3VzRHJvcGRvd25Ob2RlKSAmJiBhbGxDaGlsZHJlbi5pbmNsdWRlcyhjdXJyZW50RHJvcGRvd25Ob2RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VOZXN0ZWRBbGxFeHBhbmRlZERyb3Bkb3ducyhzaG91bGRDbG9zZURyb3Bkb3ducyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VOZXN0ZWRBbGxFeHBhbmRlZERyb3Bkb3ducyh0aGlzLmRyb3Bkb3duTGlzdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEl0IGhhbmRsZXMgd2hldGhlciB0d28gZHJvcGRvd25zIGFyZSBmcm9tIHRoZSBzYW1lIHBhcmVudFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGlzRnJvbVNhbWVQYXJlbnQoY3VycmVudERyb3Bkb3duOiBEcm9wZG93biwgUHJldmlvdXNEcm9wZG93bjogRHJvcGRvd24pIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50RHJvcGRvd25Ob2RlID0gY3VycmVudERyb3Bkb3duLmNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNEcm9wZG93bk5vZGUgPSBQcmV2aW91c0Ryb3Bkb3duLmNvbnRlbnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgZCA9IERvbTtcclxuICAgICAgICBjb25zdCBjdXJyZW50RHJvcGRvd25Ob2RlUGFyZW50cyA9IGQuZ2V0QWxsQW5jZXN0b3JzKGN1cnJlbnREcm9wZG93bk5vZGUsXHJcbiAgICAgICAgICAgIGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3NtZS1sYXlvdXQtZHJvcGRvd24nKSk7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNEcm9wZG93bk5vZGVQYXJlbnRzID0gZC5nZXRBbGxBbmNlc3RvcnMocHJldmlvdXNEcm9wZG93bk5vZGUsXHJcbiAgICAgICAgICAgIGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3NtZS1sYXlvdXQtZHJvcGRvd24nKSk7XHJcbiAgICAgICAgbGV0IHJlcyA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudERyb3Bkb3duTm9kZVBhcmVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaUVsZW1lbnQgPSBjdXJyZW50RHJvcGRvd25Ob2RlUGFyZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwcmV2aW91c0Ryb3Bkb3duTm9kZVBhcmVudHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpFbGVtZW50ID0gcHJldmlvdXNEcm9wZG93bk5vZGVQYXJlbnRzW2pdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlFbGVtZW50LmlzU2FtZU5vZGUoakVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==