tnx-shared 5.2.20 → 5.2.21

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 (71) hide show
  1. package/app-context/component-context.service.d.ts.map +1 -1
  2. package/classes/base/component-base.d.ts +1 -1
  3. package/classes/public-function.d.ts +3 -2
  4. package/classes/public-function.d.ts.map +1 -1
  5. package/components/chat/chat-box/chat-box.component.d.ts +1 -1
  6. package/components/dropdown/services/dropdown.service.d.ts.map +1 -1
  7. package/components/file-explorer/services/file-explorer-new.service.d.ts.map +1 -1
  8. package/components/file-explorer/services/file-explorer.service.d.ts.map +1 -1
  9. package/components/file-explorer/services/file-version.service.d.ts.map +1 -1
  10. package/components/file-explorer/services/folder.service.d.ts.map +1 -1
  11. package/components/file-explorer/services/ky-so-sim-signPDF.service.d.ts.map +1 -1
  12. package/components/file-explorer/services/my-drive.service.d.ts.map +1 -1
  13. package/components/tn-app-help/services/path-name.service.d.ts.map +1 -1
  14. package/congviec/congviec/services/congviec-dinhkem.service.d.ts.map +1 -1
  15. package/esm2020/app-context/component-context.service.mjs +4 -5
  16. package/esm2020/classes/base/component-base.mjs +2 -2
  17. package/esm2020/components/common-app-component/common-app-component.mjs +2 -2
  18. package/esm2020/components/crud/crud-form/crud-form.component.mjs +1 -1
  19. package/esm2020/components/dropdown/services/dropdown.service.mjs +5 -5
  20. package/esm2020/components/file-explorer/file-ky-so-sim/file-ky-so-sim.component.mjs +1 -1
  21. package/esm2020/components/file-explorer/file-manager/file-manager.component.mjs +2 -2
  22. package/esm2020/components/file-explorer/file-viewer/file-viewer.component.mjs +3 -3
  23. package/esm2020/components/file-explorer/services/file-explorer-new.service.mjs +39 -40
  24. package/esm2020/components/file-explorer/services/file-explorer.service.mjs +48 -51
  25. package/esm2020/components/file-explorer/services/file-version.service.mjs +5 -4
  26. package/esm2020/components/file-explorer/services/folder.service.mjs +3 -3
  27. package/esm2020/components/file-explorer/services/ky-so-sim-signPDF.service.mjs +3 -2
  28. package/esm2020/components/file-explorer/services/my-drive.service.mjs +34 -34
  29. package/esm2020/components/mask/mask.component.mjs +1 -1
  30. package/esm2020/components/number-picker-range/number-picker-range.component.mjs +1 -1
  31. package/esm2020/components/tn-app-help/services/path-name.service.mjs +4 -3
  32. package/esm2020/components/tn-tinymce/tn-tinymce.component.mjs +2 -2
  33. package/esm2020/components/user-picker/user-picker-box/user-picker-box.component.mjs +1 -1
  34. package/esm2020/components/workflow/workflow-history-new/workflow-history-new.component.mjs +1 -1
  35. package/esm2020/congviec/cauhinh-workflow/cauhinh-workflow.component.mjs +1 -1
  36. package/esm2020/congviec/congviec/services/congviec-dinhkem.service.mjs +5 -4
  37. package/esm2020/services/article.service.mjs +10 -13
  38. package/esm2020/services/base.service.mjs +36 -41
  39. package/esm2020/services/custom-router.service.mjs +4 -5
  40. package/esm2020/services/entity-picker.service.mjs +4 -3
  41. package/esm2020/services/file-object-v4.service.mjs +5 -7
  42. package/esm2020/services/high-performance.service.mjs +4 -3
  43. package/esm2020/services/master-data.service.mjs +23 -30
  44. package/esm2020/services/organization.service.mjs +18 -23
  45. package/esm2020/services/template-v4.service.mjs +3 -2
  46. package/esm2020/services/template.service.mjs +19 -27
  47. package/esm2020/services/templateinstance.service.mjs +22 -31
  48. package/esm2020/services/tn-client.service.mjs +3 -3
  49. package/esm2020/services/unique-number.service.mjs +4 -3
  50. package/esm2020/services/user-v5.service.mjs +31 -39
  51. package/esm2020/services/user.service.mjs +32 -40
  52. package/fesm2015/tnx-shared.mjs +334 -409
  53. package/fesm2015/tnx-shared.mjs.map +1 -1
  54. package/fesm2020/tnx-shared.mjs +334 -409
  55. package/fesm2020/tnx-shared.mjs.map +1 -1
  56. package/package.json +2 -2
  57. package/services/article.service.d.ts.map +1 -1
  58. package/services/base.service.d.ts.map +1 -1
  59. package/services/common.service.d.ts +2 -2
  60. package/services/custom-router.service.d.ts.map +1 -1
  61. package/services/entity-picker.service.d.ts.map +1 -1
  62. package/services/file-object-v4.service.d.ts.map +1 -1
  63. package/services/high-performance.service.d.ts.map +1 -1
  64. package/services/master-data.service.d.ts.map +1 -1
  65. package/services/organization.service.d.ts.map +1 -1
  66. package/services/template-v4.service.d.ts.map +1 -1
  67. package/services/template.service.d.ts.map +1 -1
  68. package/services/templateinstance.service.d.ts.map +1 -1
  69. package/services/unique-number.service.d.ts.map +1 -1
  70. package/services/user-v5.service.d.ts.map +1 -1
  71. package/services/user.service.d.ts.map +1 -1
@@ -690,7 +690,7 @@ export class CommonAppComponentComponent {
690
690
  // tslint:disable-next-line: use-life-cycle-interface
691
691
  ngOnDestroy() {
692
692
  // Unsubscribe from all subscriptions
693
- this._unsubscribeAll.next();
693
+ this._unsubscribeAll.next(1);
694
694
  this._unsubscribeAll.complete();
695
695
  this._componentContextService.fireEvent(ComCtxConstants.ROOT.DESTROY_TASK_DETAIL_COMPONENT);
696
696
  }
@@ -875,4 +875,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
875
875
  type: HostListener,
876
876
  args: ['document:keypress', ['$event']]
877
877
  }] } });
878
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWFwcC1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2NvbW1vbi1hcHAtY29tcG9uZW50L2NvbW1vbi1hcHAtY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9jb21tb24tYXBwLWNvbXBvbmVudC9jb21tb24tYXBwLWNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0QsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBMkMsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvTixPQUFPLEVBQWtCLGVBQWUsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUdqRixPQUFPLEtBQUssTUFBTSxNQUFNLFVBQVUsQ0FBQztBQUVuQyxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUc3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBSzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRS9FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBVTNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVc5RSxNQUFNLE9BQU8s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OEI7Z0JBQ1EscUNBQXFDO3NCQUF4RixZQUFZO3VCQUFDLG9DQUFvQztnQkFDRCxrQ0FBa0M7c0JBQWxGLFlBQVk7dUJBQUMsaUNBQWlDO2dCQUNBLGdDQUFnQztzQkFBOUUsWUFBWTt1QkFBQywrQkFBK0I7Z0JBQ0osMEJBQTBCO3NCQUFsRSxZQUFZO3VCQUFDLHlCQUF5QjtnQkFDUCxpQkFBaUI7c0JBQWhELFlBQVk7dUJBQUMsZ0JBQWdCO2dCQUNRLHVCQUF1QjtzQkFBNUQsWUFBWTt1QkFBQyxzQkFBc0I7Z0JBRTNCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFpMEJOLDhCQUE4QjtzQkFEN0IsWUFBWTt1QkFBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25TdGFydCwgUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQXV0aENvbmZpZywgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XHJcbmltcG9ydCAqIGFzIEhhbW1lciBmcm9tICdoYW1tZXJqcyc7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUHJpbWVOR0NvbmZpZyB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9hcHBsaWNhdGlvbi1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDcnVkTGlzdFNldHRpbmcgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IEF1dGhlblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21wb25lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1c3RvbWl6ZVVpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1c3RvbWl6ZS11aS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5TWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LW1ldGFkYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJpY0d1YXJkQ2hpbGRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2VuZXJpYy1ndWFyZC1jaGlsZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJpY0d1YXJkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dlbmVyaWMtZ3VhcmQuc2VydmljZSc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yYWdlVXBkYXRlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLXVwZGF0ZWQuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG5DbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG4tY2xpZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlcG9ydFF1ZXVlQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVwb3J0LXF1ZXVlL3JlcG9ydC1xdWV1ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUbkN1c3RvbVNjcm9sbGJhckNvbXBvbmVudCB9IGZyb20gJy4uL3RuLWN1c3RvbS1zY3JvbGxiYXIvdG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQnO1xyXG5cclxuZGVjbGFyZSBsZXQgdGlueW1jZTogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NvbW1vbi1hcHAtY29tcG9uZW50JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb21tb24tYXBwLWNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NvbW1vbi1hcHAtY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlLCBFbnRpdHlNZXRhZGF0YVNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21tb25BcHBDb21wb25lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnb2tCdXR0b24nKSBva0J1dHRvbjogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoJ2NhbmNlbEJ1dHRvbicpIGNhbmNlbEJ1dHRvbjogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoJ3F1aWNrTm90ZUJ0JykgcXVpY2tOb3RlQnQ6IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdxdWlja05vdGVCdDEnKSBxdWlja05vdGVCdDE6IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdxdWlja05vdGVCdDInKSBxdWlja05vdGVCdDI6IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdwaW5uZWROb3RlcycpIHBpbm5lZE5vdGVzOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZChSZXBvcnRRdWV1ZUNvbXBvbmVudCkgcmVwb3J0UXVldWU6IFJlcG9ydFF1ZXVlQ29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnc2Nyb2xsYmFyJykgc2Nyb2xsQmFyTWVudTogVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQ7XHJcbiAgICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlUmVmKSBjaGlsZHJlbjogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgncXVlcnlCdWlsZGVyVXNlclBpY2tlcicpIHRwbFF1ZXJ5QnVpbGRlclVzZXJQaWNrZXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCdxdWVyeUJ1aWxkZXJDb0NhdVBpY2tlcicpIHRwbFF1ZXJ5QnVpbGRlckNvQ2F1UGlja2VyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgncXVlcnlCdWlsZGVyQXV0b2NvbXBsZXRlUGlja2VyJykgdHBsUXVlcnlCdWlsZGVyQXV0b2NvbXBsZXRlUGlja2VyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgnbGlzdENvbmdWaWVjQ29uJykgdHBsTGlzdENvbmdWaWVjQ29uOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgnY3J1ZExpc3RTZXR0aW5nUm93JykgdHBsQ3J1ZExpc3RTZXR0aW5nUm93OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgnY3J1ZExpc3RTZXR0aW5nJykgdHBsQ3J1ZExpc3RTZXR0aW5nOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgnY3J1ZExpc3RBZHZhbmNlU2VhcmNoJykgdHBsQ3J1ZExpc3RBZHZhbmNlU2VhcmNoOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgnY3J1ZEZvcm1UYWJsZURldGFpbEZvcm0nKSB0cGxDcnVkRm9ybVRhYmxlRGV0YWlsRm9ybTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ2NydWRGb3JtQ29uZ1ZpZWNGb3JtJykgdHBsQ3J1ZEZvcm1Db25nVmllY0Zvcm06IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCdjcnVkRm9ybUFkZHJlc3NDb21wb25lbnQnKSB0cGxDcnVkRm9ybUFkZHJlc3NDb21wb25lbnQ6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCdjcnVkRm9ybUZpbGVNYW5hZ2VyQ29tcG9uZW50JykgdHBsQ3J1ZEZvcm1GaWxlTWFuYWdlckNvbXBvbmVudDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ2NydWRGb3JtU2VydmljZUZpbGVVcGxvYWRDb21wb25lbnQnKSB0cGxDcnVkRm9ybVNlcnZpY2VGaWxlVXBsb2FkQ29tcG9uZW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgnY3J1ZEZvcm1Db25nVmllY1BpY2tlckNvbXBvbmVudCcpIHRwbENydWRGb3JtQ29uZ1ZpZWNQaWNrZXJDb21wb25lbnQ6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCdjcnVkRm9ybVZhbkJhblBpY2tlckNvbXBvbmVudCcpIHRwbENydWRGb3JtVmFuQmFuUGlja2VyQ29tcG9uZW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgndGlueU1jZUZpbGVQaWNrZXJEaWFsb2cnKSB0cGxUaW55TWNlRmlsZVBpY2tlckRpYWxvZzogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ3RpbnlNY2VBZGROZXdzJykgdHBsVGlueU1jZUFkZE5ld3M6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCdkcm9wZG93blF1aWNrQWRkRm9ybScpIHRwbERyb3Bkb3duUXVpY2tBZGRGb3JtOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBJbnB1dCgpIHNob3dRdWlja05vdGUgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgYWxsb3dBbm9ueW1vdXMgPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUFsbDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgLy8gcm9vdFZlcnNpb25EZXBsb3kgPSAnMS4zJztcclxuICAgIGN1cnJlbnRSb3V0ZSA9ICcnO1xyXG4gICAgcGFnZUxvYWRlZCA9IGZhbHNlO1xyXG4gICAgZmlyc3RUaW1lTG9naW4gPSBmYWxzZTtcclxuICAgIHNob3dBZGROb3RlRm9ybSA9IGZhbHNlO1xyXG4gICAgcGlubmVkTm90ZURhdGE6IGFueTtcclxuICAgIHBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMgPSBmYWxzZTtcclxuICAgIHBpbm5lZE5vdGVzTWF4aW1pemVTdGF0dXMgPSBudWxsO1xyXG4gICAgY2FwdHVyZU1vZGUgPSBmYWxzZTtcclxuICAgIHAwOiBhbnk7XHJcbiAgICBwMTogYW55O1xyXG4gICAgbG9nZ2VkSW4gPSBmYWxzZTtcclxuICAgIHN1YnNjcmlibGU6IFN1YnNjcmlwdGlvbjtcclxuICAgIG9ubHlTaG93TWFpbkNvbnRlbnQgPSBmYWxzZTtcclxuXHJcbiAgICBhcHBDb2RlID0gJyc7XHJcblxyXG4gICAgc2VhcmNoTWVudVJlc3VsdDogYW55W107XHJcbiAgICBzZWFyY2hNZW51SW5wdXQ6IHN0cmluZztcclxuXHJcbiAgICBzaG93UGlubmVkTWVudSA9IGZhbHNlO1xyXG4gICAgaXNJblBpbm5lZE1lbnUgPSBmYWxzZTtcclxuICAgIGlzU2VhcmNoTWVudUlucHV0Rm9jdXMgPSBmYWxzZTtcclxuICAgIG1lbnVNb2RlbDogYW55O1xyXG4gICAgd2FpdGluZyA9IGZhbHNlO1xyXG4gICAgbWVzc2FnZVdhaXRpbmc6IHN0cmluZ1tdID0gW107XHJcbiAgICBzaG93UmVqZWN0Q29uZmlybSA9IHRydWU7XHJcblxyXG4gICAga2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMgPSAncHBwcHBwcHBwJztcclxuICAgIGN1cnJlbnRLZXlQcmVzc0luZGV4ID0gMDtcclxuICAgIHJvb3REYXRhOiBhbnk7XHJcblxyXG4gICAgY29uZ1ZpZWNTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgcHVibGljIF9nbG9iYWxTZXJ2aWNlOiBHbG9iYWxTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jb21wb25lbnRTZXJ2aWNlOiBDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX29hdXRoU2VydmljZTogT0F1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2F1dGhlblNlcnZpY2U6IEF1dGhlblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgX3RpdGxlOiBUaXRsZSxcclxuICAgICAgICBwcml2YXRlIF9zaWduYWxSU2VydmljZTogU2lnbmFsUlNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlOiBTdG9yYWdlVXBkYXRlZFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXBwbGljYXRpb25Db250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBfY29tcG9uZW50Q29udGV4dFNlcnZpY2U6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwdWJsaWMgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIF90bkNsaWVudFNlcnZpY2U6IFRuQ2xpZW50U2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2VudGl0eU1ldGFkYXRhU2VydmljZTogRW50aXR5TWV0YWRhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2Vudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX21lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9wcmltZW5nQ29uZmlnOiBQcmltZU5HQ29uZmlnLFxyXG4gICAgICAgIHByaXZhdGUgX3N0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9wZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfY3VzdG9taXplVWlTZXJ2aWNlOiBDdXN0b21pemVVaVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuYXBwQ29kZSA9IHRoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRBcHBDb2RlKCk7XHJcbiAgICAgICAgY29uc3Qga2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMgPSB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0S2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMoKTtcclxuICAgICAgICBpZiAoa2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5rZXlQcmVzc1Blcm1pc3Npb25VdGlscyA9IGtleVByZXNzUGVybWlzc2lvblV0aWxzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRTdG9yYWdlKCkgPT09ICdzZXNzaW9uU3RvcmFnZScpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0U3RvcmFnZShzZXNzaW9uU3RvcmFnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRTdG9yYWdlKGxvY2FsU3RvcmFnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9wcmltZW5nQ29uZmlnLnNldFRyYW5zbGF0aW9uKHtcclxuICAgICAgICAgICAgZGF5TmFtZXM6IFsnQ2jhu6cgbmjhuq10JywgJ1Ro4bupIDInLCAnVGjhu6kgMycsICdUaOG7qSA0JywgJ1Ro4bupIDUnLCAnVGjhu6kgNicsICdUaOG7qSA3J10sXHJcbiAgICAgICAgICAgIGRheU5hbWVzU2hvcnQ6IFsnQ04nLCAnVGgyJywgJ1RoMycsICdUaDQnLCAnVGg1JywgJ1RoNicsICdUaDcnXSxcclxuICAgICAgICAgICAgZGF5TmFtZXNNaW46IFsnQ04nLCAnVGgyJywgJ1RoMycsICdUaDQnLCAnVGg1JywgJ1RoNicsICdUaDcnXSxcclxuICAgICAgICAgICAgbW9udGhOYW1lczogW1xyXG4gICAgICAgICAgICAgICAgJ1Row6FuZyAxJywgJ1Row6FuZyAyJywgJ1Row6FuZyAzJywgJ1Row6FuZyA0JywgJ1Row6FuZyA1JywgJ1Row6FuZyA2JywgJ1Row6FuZyA3JywgJ1Row6FuZyA4JywgJ1Row6FuZyA5JywgJ1Row6FuZyAxMCcsICdUaMOhbmcgMTEnLCAnVGjDoW5nIDEyJ1xyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBtb250aE5hbWVzU2hvcnQ6IFsnVDEnLCAnVDInLCAnVDMnLCAnVDQnLCAnVDUnLCAnVDYnLCAnVDcnLCAnVDgnLCAnVDknLCAnVDEwJywgJ1QxMScsICdUMTInXSxcclxuICAgICAgICAgICAgdG9kYXk6ICdIw7RtIG5heScsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGN1c3RvbVVpID0gdGhpcy5fZW52aXJvbm1lbnRTZXJ2aWNlLmdldEN1c3RvbWl6ZVVpKCk7XHJcbiAgICAgICAgaWYgKGN1c3RvbVVpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2N1c3RvbWl6ZVVpU2VydmljZS5zZXRDdXN0b21pemUoY3VzdG9tVWkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmFkZFJvb3RDb250ZXh0KFxyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZSxcclxuICAgICAgICAgICAgX2FjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuX3RpdGxlLnNldFRpdGxlKHRoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRUaXRsZSgpKTtcclxuXHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcoJ3ZuJyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKCd2bicpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRUaW55TWNlKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNmZyA9IHRoaXMuZ2V0Q29uZmlnQXV0aGVuKCk7XHJcbiAgICAgICAgLy8gQ2h1eeG7g24gc2FuZyBzZXNzaW9uIHN0b3JhZ2UsIG7hur91IOG7lW4gdGjDrCB4w7NhIGTDsm5nIG7DoHkgxJFpXHJcbiAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLnNldFN0b3JhZ2UodGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0U3RvcmFnZSgpKTtcclxuICAgICAgICB0aGlzLmluamVjdENvbmZpZyhjZmcpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbmZpZ3VyZVdpdGhOZXdDb25maWdBcGkoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZSA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldE9iamVjdEFueSgncGVyc29uYWxpemUnKTtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZSA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UucmVwbGF5U3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX0xPQURFRCxcclxuICAgICAgICAgICAgYXN5bmMgcnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLnNldHVwU3luY0NhY2hlRW50aXR5TWV0YWRhdGEoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yb3V0ZXIuY29uZmlnXHJcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2gocm91dGUgPT4gdGhpcy5hZGRHdWFyZChyb3V0ZSkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpcnN0VGltZUxvZ2luKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbOG6p24gxJHhuqd1IMSRxINuZyBuaOG6rXAgdGjDrCB2w6BvIHRyYW5nIG3hurdjIMSR4buLbmhcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiAodGhpcy5yb290VmVyc2lvbkRlcGxveSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCd2ZXJzaW9uRGVwbG95JywgdGhpcy5yb290VmVyc2lvbkRlcGxveSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBUaMOqbSB2w6BvIMSR4buDIMSRw6FuaCBk4bqldSBs4bqnbiBk4bqndSBsb2dpbiA9PiDEkeG7gyB44butIGzDvVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZXJBIMSRYWcg4bufIG3DoG4gaMOsbmggMSA9PiDEkcSDbmcgeHXhuqV0ID0+IMSRxINuZyBuaOG6rXAgdsOgbyB0w6BpIGtob+G6o24gVXNlckIga2jDtG5nIGPDsyBxdXnhu4FuIG3DoG4gaMOsbmggMSA9PiByZWRpcmVjdCB24buBIFwiL1wiXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnY3VycmVudF91c2VyX2luZm8nKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdmaXJzdFRpbWVMb2dpbicsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9sZFVybCA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2N1cnJlbnRVcmwnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9sZFVybCAmJiBvbGRVcmwgIT0gdG9wLmxvY2F0aW9uLmhyZWYgKyAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjdXJyZW50VXJsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7b2xkVXJsfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRVcmwnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRSZWRpcmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHZhciB2ZXJzaW9uRGVwbG95ID0gdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgndmVyc2lvbkRlcGxveScpO1xyXG4gICAgICAgICAgICAgICAgLy8gbGV0IHZlcnNpb25Gcm9tQXBwbGljYXRpb24gPSB0aGlzLnJvb3RWZXJzaW9uRGVwbG95O1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgKHZlcnNpb25Gcm9tQXBwbGljYXRpb24gJiYgdmVyc2lvbkRlcGxveSAmJiAoK3ZlcnNpb25EZXBsb3kpIDwgKCt2ZXJzaW9uRnJvbUFwcGxpY2F0aW9uKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3ZlcnNpb25EZXBsb3knLCB2ZXJzaW9uRnJvbUFwcGxpY2F0aW9uKTtcclxuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmxvZ291dCgpO1xyXG4gICAgICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGlubmVkTm90ZXMoKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsUlNlcnZpY2UuaW5pdCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS5zdGFydChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zaXN0ZW5jeUh1YicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQnJvYWRjYXN0TWVzc2FnZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQXV0aG9yaXplQ2FjaGUuYmluZCh0aGlzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsUlNlcnZpY2Uuc3RhcnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTm90aWZpY2F0aW9uSHViJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWZyZXNoRm9yVXBkYXRlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmFwcENvZGVzICYmIGRhdGEuYXBwQ29kZXMuc29tZSh4ID0+IHgudG9VcHBlckNhc2UoKSA9PSB0aGlzLmFwcENvZGUudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5DT01NT04uRk9SQ0VfUkVMT0FEKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZGVmYXVsdE1vZHVsZVBhZ2VzID0gdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZS5kZWZhdWx0TW9kdWxlUGFnZXM7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRNb2R1bGVQYWdlcyAmJiBkZWZhdWx0TW9kdWxlUGFnZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRMaXN0QXBwKCkuZm9yRWFjaChhcHAgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IGRlZmF1bHRNb2R1bGVQYWdlcy5maW5kKHAgPT4gcC5jb2RlID09IGFwcC5jb2RlKTtcclxuICAgICAgICAgICAgICAgIGlmIChwYWdlICYmIHBhZ2UuZGVmYXVsdFBhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcHAudXJsID0gcGFnZS5kZWZhdWx0UGFnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBIYW1tZXIuZGVmYXVsdHMuY3NzUHJvcHMudXNlclNlbGVjdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZSgnUVVJQ0tfTk9URV9QT1BVUC5DTE9TRV9QT1BVUCcsIHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5lZGl0Rm9ybU1vZGVsLnNob3dRdWlja05vdGVGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZSgnR09fSE9NRScsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycpO1xyXG4gICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoJ1RPR0dMRV9MQVlPVVQnLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGEub25seVNob3dNYWluQ29udGVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSBkYXRhLm9ubHlTaG93TWFpbkNvbnRlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKCdNQUlOX0NPTlRFTlRfT05MWScsIHJzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gcnM7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5TSE9XX1JFSkVDVF9DT05GSVJNLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaG93UmVqZWN0Q29uZmlybSA9IGRhdGE7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgIHRoaXMucm9vdERhdGEgPSByb290LmRhdGE7XHJcbiAgICAgICAgcm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YSA9IHRoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRPYmplY3RBcHAodGhpcy5hcHBDb2RlKTtcclxuICAgICAgICByb290LmRhdGEuYXBwT3JpZ2luID0gdGhpcy5fZW52aXJvbm1lbnRTZXJ2aWNlLmdldEVuYWJsZUJhc2VIcmVmKCkgPyBgLyR7cm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5jb2RlLnRvTG93ZXJDYXNlKCl9L2AgOiAnLyc7XHJcbiAgICAgICAgcm9vdC5kYXRhLmFsbG93QW5vbnltb3VzID0gdGhpcy5hbGxvd0Fub255bW91cztcclxuICAgICAgICAvLyBnZXQgY3VycmVudCBVc2VyXHJcbiAgICAgICAgdGhpcy5fdXNlclNlcnZpY2UucG9wdWxhdGVDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5ORUVEX0NMRUFSX1BFUk1JU1NJT05fQ0FDSEUsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5fcGVybWlzc2lvblNlcnZpY2UuY2xlYXJQZXJtaXNzaW9uQ2FjaGVBbGwoKTtcclxuICAgICAgICAgICAgaWYgKCFyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgdHJvbmcgbMO6YyBjbGVhciBjYWNoZSBwaMOibiBxdXnhu4FuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZmlyZVJlcGxheUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfTE9BREVEKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuS0VZX0RPV05fQVJST1dMRUZULCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5va0J1dHRvbi5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuS0VZX0RPV05fQVJST1dSSUdIVCwgKGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5QRVJTT05BTElaRV9VUERBVEVELCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5zaG93UXVpY2tOb3RlQnV0dG9uT25TY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIHNlbmQgY3VycmVudCB2ZXJzaW9uIHRvIHRuIGNsaWVudFxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyB0aGlzLl90bkNsaWVudFNlcnZpY2Uuc2VuZENvbW1hbmQoPFRuQ2xpZW50Q29tbWFuZD57XHJcbiAgICAgICAgICAgIC8vICAgICBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuU3luY1ZlcmlvblRuQ2xpZW50LFxyXG4gICAgICAgICAgICAvLyAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAvLyAgICAgICAgIHZlcnNpb246IHRoaXMuZW52aXJvbm1lbnQuc2lnbmFsci52ZXJzaW9uLFxyXG4gICAgICAgICAgICAvLyAgICAgICAgIGVuZHBvaW50OiB0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpbi5hcHBEb21haW4gKyAnLycgKyB0aGlzLmVudmlyb25tZW50LnNpZ25hbHIuZW5kcG9pbnRVcGRhdGVcclxuICAgICAgICAgICAgLy8gICAgIH0sXHJcbiAgICAgICAgICAgIC8vICAgICBrZXk6IHRoaXMuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXlcclxuICAgICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcblxyXG5cclxuICAgICAgICAvLyB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5DTE9TRV9FRElUX0ZPUk0sIChkYXRhKSA9PiB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuc2hvd0FkZE5vdGVGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgLy8gfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnJlcGxheVN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5RVUlDS19OT1RFX1BJTiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBzZXQgcGlubmVkIG5vdGUgbG9jYXRpb24gYWZ0ZXIgY2xpY2sgcGluXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBpbm5lZE5vdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgncGlubmVkTm90ZXNMb2NhdGlvbicsIHtcclxuICAgICAgICAgICAgICAgICAgICBib3R0b206ICh3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LnRvcCAtIHJlY3QuaGVpZ2h0KSxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAocmVjdC5sZWZ0KSxcclxuICAgICAgICAgICAgICAgICAgICBtaW5pbWl6ZTogdGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGlubmVkTm90ZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5yZXBsYXlTdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuUVVJQ0tfTk9URV9VTlBJTiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBzZXQgcGlubmVkIG5vdGUgbG9jYXRpb24gYWZ0ZXIgY2xpY2sgdXBwaW5cclxuICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdwaW5uZWROb3Rlc0xvY2F0aW9uJywge1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IChyZWN0LmxlZnQpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pbmltaXplOiB0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXNcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQaW5uZWROb3RlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZWRpdEZvcm1Nb2RlbCA9IFtdO1xyXG5cclxuICAgICAgICAvLyBzdWJzY3JpYmUgY2hhbmdlIGVudGl0eSBtZXRhZGF0YVxyXG4gICAgICAgIHRoaXMuX3N0b3JhZ2VVcGRhdGVkU2VydmljZS5zdWJzY3JpYmVDaGFuZ2VkTG9jYWxTdG9yYWdlKCdLRVlfRU5USVRZX01FVERBVEFfVVBEQVRFRCcsIChycykgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZW50aXR5IG1ldGFkYXRhIGNoYW5nZWQnLCBycyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIHRyaWdnZXIgdXBkYXRlIHN0b3JhZ2Uga2V5XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlNIT1dfV0FJVF9CT1gsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLndhaXRpbmcgPSBkYXRhLnNob3c7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVdhaXRpbmcgPSBbLi4uZGF0YS5tZXNzYWdlXTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh4IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3REYXRhLmh0dHBSZXF1ZXN0TGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIG7hur91IGFsbG93IGFub255bW91cyB0aMOsIGxvYWQgcmEgY8OhYyBwaMOibiBo4buHIGNobyBwaMOpcCB2w6BvIGtow7RuZyBj4bqnbiDEkcSDbmcgbmjhuq1wXHJcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dBbm9ueW1vdXMpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm9ubHlTaG93TWFpbkNvbnRlbnQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgcm9vdC5zdWJzY3JpYmUoJ0xPR0lOJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudEFuZFRyeUxvZ2luKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dBbm9ueW1vdXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmluaXRMb2dpbkZsb3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmluaXRGb3JHbG9iYWxUZW1wbGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICAvLyAvLyBTZXQgZHluYW1pYyBhbGwgY2hpbGRyZW5cclxuICAgICAgICAvLyB0aGlzLmNoaWxkcmVuLmZvckVhY2godG1wID0+IHtcclxuXHJcbiAgICAgICAgLy8gfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFNlcnZpY2Uuc2V0VGVtcGxhdGUoJ3F1ZXJ5QnVpbGRlclVzZXJQaWNrZXInLCB0aGlzLnRwbFF1ZXJ5QnVpbGRlclVzZXJQaWNrZXIpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFNlcnZpY2Uuc2V0VGVtcGxhdGUoJ3F1ZXJ5QnVpbGRlckNvQ2F1UGlja2VyJywgdGhpcy50cGxRdWVyeUJ1aWxkZXJDb0NhdVBpY2tlcik7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50U2VydmljZS5zZXRUZW1wbGF0ZSgncXVlcnlCdWlsZGVyQXV0b2NvbXBsZXRlUGlja2VyJywgdGhpcy50cGxRdWVyeUJ1aWxkZXJBdXRvY29tcGxldGVQaWNrZXIpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFNlcnZpY2Uuc2V0VGVtcGxhdGUoJ2xpc3RDb25nVmllY0NvbicsIHRoaXMudHBsTGlzdENvbmdWaWVjQ29uKTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRTZXJ2aWNlLnNldFRlbXBsYXRlKCdjcnVkTGlzdFNldHRpbmdSb3cnLCB0aGlzLnRwbENydWRMaXN0U2V0dGluZ1Jvdyk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50U2VydmljZS5zZXRUZW1wbGF0ZSgnY3J1ZExpc3RTZXR0aW5nJywgdGhpcy50cGxDcnVkTGlzdFNldHRpbmcpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFNlcnZpY2Uuc2V0VGVtcGxhdGUoJ2NydWRMaXN0QWR2YW5jZVNlYXJjaCcsIHRoaXMudHBsQ3J1ZExpc3RBZHZhbmNlU2VhcmNoKTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRTZXJ2aWNlLnNldFRlbXBsYXRlKCdjcnVkRm9ybVRhYmxlRGV0YWlsRm9ybScsIHRoaXMudHBsQ3J1ZEZvcm1UYWJsZURldGFpbEZvcm0pO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFNlcnZpY2Uuc2V0VGVtcGxhdGUoJ2NydWRGb3JtQ29uZ1ZpZWNGb3JtJywgdGhpcy50cGxDcnVkRm9ybUNvbmdWaWVjRm9ybSk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50U2VydmljZS5zZXRUZW1wbGF0ZSgnY3J1ZEZvcm1BZGRyZXNzQ29tcG9uZW50JywgdGhpcy50cGxDcnVkRm9ybUFkZHJlc3NDb21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFNlcnZpY2Uuc2V0VGVtcGxhdGUoJ2NydWRGb3JtRmlsZU1hbmFnZXJDb21wb25lbnQnLCB0aGlzLnRwbENydWRGb3JtRmlsZU1hbmFnZXJDb21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFNlcnZpY2Uuc2V0VGVtcGxhdGUoJ2NydWRGb3JtU2VydmljZUZpbGVVcGxvYWRDb21wb25lbnQnLCB0aGlzLnRwbENydWRGb3JtU2VydmljZUZpbGVVcGxvYWRDb21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFNlcnZpY2Uuc2V0VGVtcGxhdGUoJ2NydWRGb3JtQ29uZ1ZpZWNQaWNrZXJDb21wb25lbnQnLCB0aGlzLnRwbENydWRGb3JtQ29uZ1ZpZWNQaWNrZXJDb21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFNlcnZpY2Uuc2V0VGVtcGxhdGUoJ2NydWRGb3JtVmFuQmFuUGlja2VyQ29tcG9uZW50JywgdGhpcy50cGxDcnVkRm9ybVZhbkJhblBpY2tlckNvbXBvbmVudCk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50U2VydmljZS5zZXRUZW1wbGF0ZSgndGlueU1jZUZpbGVQaWNrZXJEaWFsb2cnLCB0aGlzLnRwbFRpbnlNY2VGaWxlUGlja2VyRGlhbG9nKTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRTZXJ2aWNlLnNldFRlbXBsYXRlKCd0aW55TWNlQWRkTmV3cycsIHRoaXMudHBsVGlueU1jZUFkZE5ld3MpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFNlcnZpY2Uuc2V0VGVtcGxhdGUoJ2Ryb3Bkb3duUXVpY2tBZGRGb3JtJywgdGhpcy50cGxEcm9wZG93blF1aWNrQWRkRm9ybSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuX2NkLmRldGFjaCgpO1xyXG4gICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBxdWlja05vdGVCdExvY2F0aW9uID0gdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0T2JqZWN0QW55KCdxdWlja05vdGVCdExvY2F0aW9uJyk7XHJcbiAgICAgICAgICAgIGlmIChxdWlja05vdGVCdExvY2F0aW9uICYmIHRoaXMucXVpY2tOb3RlQnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChxdWlja05vdGVCdExvY2F0aW9uLmJvdHRvbSA8IHdpbmRvdy5pbm5lckhlaWdodCAtIDUwICYmIHF1aWNrTm90ZUJ0TG9jYXRpb24ucmlnaHQgPCB3aW5kb3cuaW5uZXJXaWR0aCAtIDUwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLmJvdHRvbSA9IHF1aWNrTm90ZUJ0TG9jYXRpb24uYm90dG9tICsgJ3B4JztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSBxdWlja05vdGVCdExvY2F0aW9uLnJpZ2h0ICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplLnNob3dRdWlja05vdGVCdXR0b25PblNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucXVpY2tOb3RlQnQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplLnNob3dRdWlja05vdGVCdXR0b25PblNjcmVlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwaW5uZWROb3Rlc0xvY2F0aW9uID0gdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0T2JqZWN0QW55KCdwaW5uZWROb3Rlc0xvY2F0aW9uJyk7XHJcbiAgICAgICAgICAgIGlmIChwaW5uZWROb3Rlc0xvY2F0aW9uICYmIHRoaXMucGlubmVkTm90ZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGlubmVkTm90ZXNMb2NhdGlvbi5ib3R0b20gPCB3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LmhlaWdodCAmJiBwaW5uZWROb3Rlc0xvY2F0aW9uLmxlZnQgPCB3aW5kb3cuaW5uZXJXaWR0aCAtIDI1MCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5zdHlsZS5ib3R0b20gPSBwaW5uZWROb3Rlc0xvY2F0aW9uLmJvdHRvbSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSBwaW5uZWROb3Rlc0xvY2F0aW9uLmxlZnQgKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9IHBpbm5lZE5vdGVzTG9jYXRpb24ubWluaW1pemU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5waW5uZWROb3RlRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0udGl0bGVQYWRkaW5nQm90dG9tID0gJzBweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0uY29udGVudERpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucGlubmVkTm90ZURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS50aXRsZVBhZGRpbmdCb3R0b20gPSAnNnB4JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS5jb250ZW50RGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5waW5uZWROb3Rlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKTtcclxuICAgICAgICByb290LnJlcG9ydFF1ZXVlID0gdGhpcy5yZXBvcnRRdWV1ZTtcclxuICAgICAgICB0aGlzLm1lbnVNb2RlbCA9IHRoaXMuX21lbnVTZXJ2aWNlLmdldE1lbnVJdGVtcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRGb3JHbG9iYWxUZW1wbGF0ZSgpIHtcclxuICAgICAgICB0aGlzLmNvbmdWaWVjU2V0dGluZyA9IG5ldyBDcnVkTGlzdFNldHRpbmcoKTtcclxuICAgICAgICB0aGlzLmNvbmdWaWVjU2V0dGluZy5pc1dvcmtmbG93VHJlZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZGVmYXVsdFJlZGlyZWN0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFwcFNldHRpbmcgPSB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKS5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YTtcclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFJlZGlyZWN0ID0gdGhpcy5fZW52aXJvbm1lbnRTZXJ2aWNlLmdldERlZmF1bHRSZWRpcmVjdCgpO1xyXG4gICAgICAgICAgICBpZiAoIWFwcFNldHRpbmcgJiYgZGVmYXVsdFJlZGlyZWN0ICYmIHRoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRJc1Byb2R1Y3Rpb24oKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UmVkaXJlY3RcclxuICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcGF0aFRvQ2hlY2sgPSB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0RW5hYmxlQmFzZUhyZWYoKSA/IGAvJHthcHBTZXR0aW5nLmNvZGUudG9Mb3dlckNhc2UoKX0vYCA6ICcvJztcclxuXHJcbiAgICAgICAgICAgIGlmICgobG9jYXRpb24ucGF0aG5hbWUgPT09ICcvJyB8fCBsb2NhdGlvbi5wYXRobmFtZSA9PT0gJycgfHwgbG9jYXRpb24ucGF0aG5hbWUgPT09IHBhdGhUb0NoZWNrKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndXNlciBub3QgdmFsaWQgdG9rZW4nLCB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdhY2Nlc3NfdG9rZW4nKSk7XHJcbiAgICAgICAgICAgIC8vIFRPRE86IE5hbU5IIFjhu60gbMO9IHThuqFtIGNobyB0csaw4budbmcgaOG7o3AgxJHEg25nIG5o4bqtcCBs4bqnbiDEkeG6p3UgbmjGsG5nIGNo4bqheSDEkeG6v24gxJHDonkgbcOgIGFjY2VzcyB0b2tlbiB24bqrbiBraMO0bmcgaOG7o3AgbOG7h1xyXG4gICAgICAgICAgICAvLyBY4butIGzDvSB0cmnhu4d0IMSR4buDIGLhurFuZyBjw6FjaCB0w6xtIFBBIGLhuq90IGV2ZW50IGPhu6dhIGFuZ3VsYXIyIG9pZGMgxJHhu4MgeOG7rSBsw70gdHLGsOG7m2Mga2hpIMSR4bq/biBixrDhu5tjIGRlZmF1bHQgcmVkaXJlY3RcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0b3AubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgIH0sIDUwMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZXRlY3RDaGFuZ2VzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jZFsnZGVzdHJveWVkJ10pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2V4Y2VwdGlvbiBvbiBkZXRlY3QgY2hhbmdlJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbGVhckF1dGhvcml6ZUNhY2hlKCkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHNlc3Npb25TdG9yYWdlKVxyXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gL15BVVRIT1JJWkFUSU9OLy50ZXN0KGl0ZW0pKVxyXG4gICAgICAgICAgICAuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzVHJhcChldmVudCwgZGlyZWN0KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBpZiAoZGlyZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbml0VGlueU1jZSgpIHtcclxuICAgICAgICB0aW55bWNlLmJhc2VVUkwgPSAnL2Fzc2V0cy92ZW5kb3IvdGlueW1jZSc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb25maWd1cmVXaXRoTmV3Q29uZmlnQXBpKCkge1xyXG4gICAgICAgIC8vIGZvciBmaXJzdCBsb2dpblxyXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5ldmVudHMuc3Vic2NyaWJlKGV2dCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGV2dC50eXBlID09ICd0b2tlbl9yZWNlaXZlZCdcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UuY2xlYW51cExvY2FsU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhbnVwU2Vzc2lvblN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VVcGRhdGVkU2VydmljZS5jbGVhbnVwU3RvcmFnZVNlcnZpY2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVSZXBsYXlFdmVudChcclxuICAgICAgICAgICAgICAgICAgICBDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX1JFQURZLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RUaW1lTG9naW5cclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09PSAndG9rZW5fZXhwaXJlcycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS50cnlMb2dpbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09PSAnbG9nb3V0Jykge1xyXG4gICAgICAgICAgICAgICAgLy8gY2xlYW51cCBzdG9yYWdlXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFudXBMb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UuY2xlYW51cFNlc3Npb25TdG9yYWdlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlVXBkYXRlZFNlcnZpY2UuY2xlYW51cFN0b3JhZ2VTZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UucmV2b2tlVG9rZW5BbmRMb2dvdXQobnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT0gJ3Nlc3Npb25fdGVybWluYXRlZCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRfdXNlcl9pbmZvJyk7XHJcbiAgICAgICAgICAgICAgICAvLyBsb2dvdXRcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT0gJ2Rpc2NvdmVyeV9kb2N1bWVudF9sb2FkZWQnKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LnR5cGUgPT0gJ3Rva2VuX3JlZnJlc2hlZCcpIHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdsb2dpbiBldmVudCcsIGV2dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudCgpO1xyXG4gICAgICAgIGlmICh0aGlzLl9vYXV0aFNlcnZpY2UuaGFzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVSZXBsYXlFdmVudChcclxuICAgICAgICAgICAgICAgIENvbUN0eENvbnN0YW50cy5ST09ULlVTRVJfUkVBRFksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2Uuc2V0dXBBdXRvbWF0aWNTaWxlbnRSZWZyZXNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2N1cnJlbnRVcmwnKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnY3VycmVudFVybCcsIHRvcC5sb2NhdGlvbi5ocmVmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UubG9hZERpc2NvdmVyeURvY3VtZW50QW5kVHJ5TG9naW4oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd0Fub255bW91cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdOG7lW5nIGjhu6NwIGJp4bq/biBwb3NpdGlvblxyXG4gICAgICAgIGlmICh0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdteWl0ZW0nKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoJ1BPU0lUSU9OX0xPQURFRCcsIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ215aXRlbScpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGfhu41pIGFwaSDEkeG7gyB04buVbmcgaOG7o3AgZOG7ryBsaXVlamUuLi5cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZUV2ZW50KCdQT1NJVElPTl9MT0FERUQnLCB7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5qZWN0Q29uZmlnKGNmZzogQXV0aENvbmZpZykge1xyXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5jb25maWd1cmUoY2ZnKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENvbmZpZ0F1dGhlbigpIHtcclxuICAgICAgICBjb25zdCBjZmcgPSB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXV0aENvbmZpZygpO1xyXG4gICAgICAgIGNvbnN0IHR5cGVMb2dpbiA9IHRoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRBdXRoZW50aWNhdGlvblR5cGUoKTtcclxuICAgICAgICBpZiAodHlwZUxvZ2luICYmIHR5cGVMb2dpbi5pbmNsdWRlcygnaW1wbGljaXQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2ZnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY2ZnLnJlc3BvbnNlVHlwZSA9ICdjb2RlJztcclxuICAgICAgICAgICAgcmV0dXJuIGNmZztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlTWVudUFjdGl2ZSh0b3ApIHtcclxuICAgICAgICB0aGlzLnNjcm9sbEJhck1lbnUuc2Nyb2xsVG9Ub3AodG9wKTtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVEcm9wcGVkKGV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdxdWlja05vdGVCdExvY2F0aW9uJywgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBib3R0b206ICh3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LnRvcCAtIDUwKSwgcmlnaHQ6ICh3aW5kb3cuaW5uZXJXaWR0aCAtIHJlY3QubGVmdCAtIDUwKVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVNb3ZpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVN0YXJ0ZWQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnF1aWNrTm90ZU1vdmluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcXVpY2tOb3RlUHJlc3MoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnF1aWNrTm90ZVByZXNzaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnModHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlT25jZShDb21DdHhDb25zdGFudHMuUk9PVC5CT0RZX01PVVNFX0RPV04sICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVQcmVzc1VwKGV2ZW50KSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlUHJlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZUFkZE5vdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnF1aWNrTm90ZU1vdmluZ1xyXG4gICAgICAgICAgICAmJiAhdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVQcmVzc2luZykge1xyXG4gICAgICAgICAgICB0aGlzLnF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnMoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLm5vdGVEYXRhTW9kZWwgPSA8YW55PntcclxuICAgICAgICAgICAgICAgIGVkaXRGb3JtTW9kZWw6IDxhbnk+eyBzaG93UXVpY2tOb3RlRm9ybTogdHJ1ZSwgcG9wdXBTaXplOiA8YW55Pnt9LCBkYXRhOiA8YW55Pnt9IH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5lZGl0Rm9ybU1vZGVsLnNob3dRdWlja05vdGVGb3JtID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcXVpY2tOb3RlU2hvd0FsbE5vdGVzKCkge1xyXG4gICAgICAgIHRoaXMucXVpY2tOb3RlVG9nZ2xlU3ViQnV0dG9ucyhmYWxzZSk7XHJcbiAgICAgICAgdG9wLmxvY2F0aW9uLmhyZWYgPSBgJHt0aGlzLmdldEFwcFN3aXRjaGVyVXJsKCd1c2VyJyl9L21haW4vcXVpY2stbm90ZWA7XHJcbiAgICB9XHJcblxyXG4gICAgcXVpY2tOb3RlU2hvd1NldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMucXVpY2tOb3RlVG9nZ2xlU3ViQnV0dG9ucyhmYWxzZSk7XHJcbiAgICAgICAgdG9wLmxvY2F0aW9uLmhyZWYgPSBgJHt0aGlzLmdldEFwcFN3aXRjaGVyVXJsKCd1c2VyJyl9L21haW4vcGVyc29uYWxpemVgO1xyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnMoc2hvdykge1xyXG4gICAgICAgIGlmIChzaG93KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQxLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSAnNTVweCc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Mi5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzEwMHB4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQxLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSAnNjVweCc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Mi5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzEyMHB4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDEubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICc1cHgnO1xyXG4gICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Mi5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzVweCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFBpbm5lZCBOb3RlXHJcbiAgICBnZXRQaW5uZWROb3RlcygpIHtcclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHBpbm5lZE5vdGVzRHJvcHBlZChldmVudCkge1xyXG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgncGlubmVkTm90ZXNMb2NhdGlvbicsIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgYm90dG9tOiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC50b3AgLSByZWN0LmhlaWdodCksXHJcbiAgICAgICAgICAgIGxlZnQ6IChyZWN0LmxlZnQpLFxyXG4gICAgICAgICAgICBtaW5pbWl6ZTogdGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzXHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5waW5uZWROb3Rlc01vdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGlubmVkTm90ZXNTdGFydGVkKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5waW5uZWROb3Rlc01vdmluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcGlubmVkTm90ZXNNaW5pbWl6ZShkYXRhOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzID0gIWRhdGE7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgncGlubmVkTm90ZXNMb2NhdGlvbicsIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgYm90dG9tOiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC50b3AgLSByZWN0LmhlaWdodCksXHJcbiAgICAgICAgICAgIGxlZnQ6IChyZWN0LmxlZnQpLFxyXG4gICAgICAgICAgICBtaW5pbWl6ZTogdGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzXHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5waW5uZWROb3RlRGF0YSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzID09IHRydWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLnRpdGxlUGFkZGluZ0JvdHRvbSA9ICcwcHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS5jb250ZW50RGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucGlubmVkTm90ZURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0udGl0bGVQYWRkaW5nQm90dG9tID0gJzZweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLmNvbnRlbnREaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1blBpbk5vdGUocm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgcm93RGF0YS5pc1Bpbm5lZCA9IGZhbHNlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjb21wbGV0ZU5vdGUocm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgcm93RGF0YS5pc0NvbXBsZXRlZCA9IHRydWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGluQ29tcGxldGVOb3RlKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHJvd0RhdGEuaXNDb21wbGV0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VUYWJXaW5kb3coKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2Nsb3NlVGFiV2luZG93Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXBwU3dpdGNoZXJVcmwoYXBwQ29kZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0SHR0cENsaWVudEVuZHBvaW50KGFwcENvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdXNlLWxpZmUtY3ljbGUtaW50ZXJmYWNlXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICAvLyBVbnN1YnNjcmliZSBmcm9tIGFsbCBzdWJzY3JpcHRpb25zXHJcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwubmV4dCgpO1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULkRFU1RST1lfVEFTS19ERVRBSUxfQ09NUE9ORU5UKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZWFyY2ggbWVudVxyXG4gICAgb25TZWFyY2hNZW51KGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hNZW51UmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnF1ZXJ5KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2VhcmNoTWVudVJlc3VsdCA9IHRoaXMuZ2V0U2VhcmNoTWVudVJlc3VsdChldmVudC5xdWVyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VhcmNoTWVudVJlc3VsdChrZXl3b3JkKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgIHRoaXMucmVncm91cFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZCwgdGhpcy5tZW51TW9kZWwsIHJlc3VsdCk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWdyb3VwU2VhcmNoTWVudVJlc3VsdChrZXl3b3JkOiBzdHJpbmcsIGxpc3RUb0dldDogYW55W10sIGxpc3RUb1B1c2g6IGFueVtdKSB7XHJcbiAgICAgICAgbGlzdFRvR2V0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZ3JvdXBTZWFyY2hNZW51UmVzdWx0KGtleXdvcmQsIGl0ZW0uaXRlbXMsIGxpc3RUb1B1c2gpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCh0aGlzLm5vbkFjY2VudFZpZXRuYW1lc2UoaXRlbS5sYWJlbCkuaW5kZXhPZih0aGlzLm5vbkFjY2VudFZpZXRuYW1lc2Uoa2V5d29yZCkpID49IDApKSB7XHJcbiAgICAgICAgICAgICAgICBsaXN0VG9QdXNoLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbm9uQWNjZW50VmlldG5hbWVzZShzdHIpIHtcclxuICAgICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAvLyAgICAgV2UgY2FuIGFsc28gdXNlIHRoaXMgaW5zdGVhZCBvZiBmcm9tIGxpbmUgMTEgdG8gbGluZSAxN1xyXG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDBFMHxcXHUwMEUxfFxcdTFFQTF8XFx1MUVBM3xcXHUwMEUzfFxcdTAwRTJ8XFx1MUVBN3xcXHUxRUE1fFxcdTFFQUR8XFx1MUVBOXxcXHUxRUFCfFxcdTAxMDN8XFx1MUVCMXxcXHUxRUFGfFxcdTFFQjd8XFx1MUVCM3xcXHUxRUI1L2csIFwiYVwiKTtcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRTh8XFx1MDBFOXxcXHUxRUI5fFxcdTFFQkJ8XFx1MUVCRHxcXHUwMEVBfFxcdTFFQzF8XFx1MUVCRnxcXHUxRUM3fFxcdTFFQzN8XFx1MUVDNS9nLCBcImVcIik7XHJcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEVDfFxcdTAwRUR8XFx1MUVDQnxcXHUxRUM5fFxcdTAxMjkvZywgXCJpXCIpO1xyXG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDBGMnxcXHUwMEYzfFxcdTFFQ0R8XFx1MUVDRnxcXHUwMEY1fFxcdTAwRjR8XFx1MUVEM3xcXHUxRUQxfFxcdTFFRDl8XFx1MUVENXxcXHUxRUQ3fFxcdTAxQTF8XFx1MUVERHxcXHUxRURCfFxcdTFFRTN8XFx1MUVERnxcXHUxRUUxL2csIFwib1wiKTtcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRjl8XFx1MDBGQXxcXHUxRUU1fFxcdTFFRTd8XFx1MDE2OXxcXHUwMUIwfFxcdTFFRUJ8XFx1MUVFOXxcXHUxRUYxfFxcdTFFRUR8XFx1MUVFRi9nLCBcInVcIik7XHJcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUxRUYzfFxcdTAwRkR8XFx1MUVGNXxcXHUxRUY3fFxcdTFFRjkvZywgXCJ5XCIpO1xyXG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDExMS9nLCBcImRcIik7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8OgfMOhfOG6oXzhuqN8w6N8w6J84bqnfOG6pXzhuq184bqpfOG6q3zEg3zhurF84bqvfOG6t3zhurN84bq1L2csICdhJyk7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8OofMOpfOG6uXzhurt84bq9fMOqfOG7gXzhur984buHfOG7g3zhu4UvZywgJ2UnKTtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw6x8w6184buLfOG7iXzEqS9nLCAnaScpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DsnzDs3zhu4184buPfMO1fMO0fOG7k3zhu5F84buZfOG7lXzhu5d8xqF84budfOG7m3zhu6N84buffOG7oS9nLCAnbycpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DuXzDunzhu6V84bunfMWpfMawfOG7q3zhu6l84buxfOG7rXzhu68vZywgJ3UnKTtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgv4buzfMO9fOG7tXzhu7d84bu5L2csICd5Jyk7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8SRL2csICdkJyk7XHJcbiAgICAgICAgLy8gU29tZSBzeXN0ZW0gZW5jb2RlIHZpZXRuYW1lc2UgY29tYmluaW5nIGFjY2VudCBhcyBpbmRpdmlkdWFsIHV0Zi04IGNoYXJhY3RlcnNcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDMwMHxcXHUwMzAxfFxcdTAzMDN8XFx1MDMwOXxcXHUwMzIzL2csICcnKTsgLy8gSHV54buBbiBz4bqvYyBo4buPaSBuZ8OjIG7hurduZ1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMkM2fFxcdTAzMDZ8XFx1MDMxQi9nLCAnJyk7IC8vIMOCLCDDiiwgxIIsIMagLCDGr1xyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxlY3RNZW51U3VnZ2VzdGlvbihtZW51SXRlbU9iaikge1xyXG4gICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKG1lbnVJdGVtT2JqLnJvdXRlckxpbmspO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTWVudUlucHV0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc2hvd1Bpbm5lZE1lbnUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJsdXJTZWFyY2hNZW51SW5wdXQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmlzU2VhcmNoTWVudUlucHV0Rm9jdXMgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5pc0luUGlubmVkTWVudSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlYXJjaE1lbnVJbnB1dCA9ICcnO1xyXG4gICAgICAgIHRoaXMuc2hvd1Bpbm5lZE1lbnUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvbkZvY3VzU2VhcmNoTWVudUlucHV0KGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5pc1NlYXJjaE1lbnVJbnB1dEZvY3VzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dQaW5uZWRNZW51ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlwcmVzcycsIFsnJGV2ZW50J10pXHJcbiAgICBoYW5kbGVTaG93UG9wdXBQZXJtaXNzaW9uVXRpbHMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5rZXlQcmVzc1Blcm1pc3Npb25VdGlsc1t0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4XSA9PT0gZXZlbnQua2V5KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4ID09IHRoaXMua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3REYXRhLnNob3dQZXJtaXNzaW9uVXRpbHMgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEtleVByZXNzSW5kZXgrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkR3VhcmQocm91dGU6IFJvdXRlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHJvdXRlLnBhdGggPT09ICcnIHx8IHJvdXRlLnBhdGggPT09ICcvJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocm91dGUubG9hZENoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICByb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkID0gcm91dGUuY2FuQWN0aXZhdGVDaGlsZCA/IHJvdXRlLmNhbkFjdGl2YXRlQ2hpbGQgOiBbR2VuZXJpY0d1YXJkQ2hpbGRTZXJ2aWNlXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJvdXRlLmNhbkFjdGl2YXRlID0gcm91dGUuY2FuQWN0aXZhdGUgPyByb3V0ZS5jYW5BY3RpdmF0ZSA6IFtHZW5lcmljR3VhcmRTZXJ2aWNlXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwicGFnZUxvYWRlZFwiIFtzdHlsZS5kaXNwbGF5XT1cInBhZ2VMb2FkZWQgPyAnJyA6ICdub25lJ1wiIGNsYXNzPVwibGF5b3V0LXdyYXBwZXJcIlxyXG4gICAgKGNsaWNrKT1cIl9jb21tb25TZXJ2aWNlLm9uTGF5b3V0Q2xpY2soKVwiIFtuZ0NsYXNzXT1cInsnbWVudS1sYXlvdXQtc3RhdGljJzogIV9jb21tb25TZXJ2aWNlLmlzT3ZlcmxheSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lbnUtbGF5b3V0LW92ZXJsYXknOiBfY29tbW9uU2VydmljZS5pc092ZXJsYXkoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYXlvdXQtbWVudS1vdmVybGF5LWFjdGl2ZSc6IF9jb21tb25TZXJ2aWNlLm92ZXJsYXlNZW51QWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lbnUtbGF5b3V0LWhvcml6b250YWwnOiBfY29tbW9uU2VydmljZS5pc0hvcml6b250YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZW51LWxheW91dC1zbGltJzogX2NvbW1vblNlcnZpY2UuaXNTbGltKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGF5b3V0LW1lbnUtc3RhdGljLWRlc2t0b3AtaW5hY3RpdmUnOiBfY29tbW9uU2VydmljZS5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xheW91dC1tZW51LXN0YXRpYy1kZXNrdG9wLWFjdGl2ZSc6ICFfY29tbW9uU2VydmljZS5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xheW91dC1tZW51LXN0YXRpYy1tb2JpbGUtaW5hY3RpdmUnOiAhX2NvbW1vblNlcnZpY2Uuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYXlvdXQtbWVudS1zdGF0aWMtbW9iaWxlLWFjdGl2ZSc6IF9jb21tb25TZXJ2aWNlLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGF5b3V0LW1lbnUtc3RhdGljLWluYWN0aXZlJzogX2NvbW1vblNlcnZpY2Uuc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYXlvdXQtbWVudS1zdGF0aWMtYWN0aXZlJzogX2NvbW1vblNlcnZpY2Uuc3RhdGljTWVudU1vYmlsZUFjdGl2ZX1cIj5cclxuXHJcbiAgICA8YXBwLXRvcGJhciAqbmdJZj1cIl9nbG9iYWxTZXJ2aWNlLmdldEhlYWRlclN0YXRlKClcIj48L2FwcC10b3BiYXI+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIl9nbG9iYWxTZXJ2aWNlLmdldE1lbnVTdGF0ZSgpXCIgY2xhc3M9XCJsYXlvdXQtbWVudS1jb250YWluZXJcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnbGF5b3V0LW1lbnUtZGFyayc6X2NvbW1vblNlcnZpY2UuZGFya01lbnV9XCIgKGNsaWNrKT1cIl9jb21tb25TZXJ2aWNlLm9uTWVudUNsaWNrKCRldmVudClcIj5cclxuICAgICAgICA8YXBwLXJvb3QtbWVudT48L2FwcC1yb290LW1lbnU+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxheW91dC1tZW51LWJsb2NrXCI+XHJcbiAgICAgICAgICAgIDx0bi1jdXN0b20tc2Nyb2xsYmFyICNzY3JvbGxiYXIgW3N0eWxlXT1cInsncGFkZGluZy10b3AnOiAnMTZweCd9XCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWlubGluZS1wcm9maWxlICpuZ0lmPVwiX2NvbW1vblNlcnZpY2UucHJvZmlsZU1vZGUgPT0gJ2lubGluZScgJiYhX2NvbW1vblNlcnZpY2UuaXNIb3Jpem9udGFsKClcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWlubGluZS1wcm9maWxlPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1tZW51IFtyZXNldF09XCJfY29tbW9uU2VydmljZS5yZXNldE1lbnVcIiAob25NZW51QWN0aXZlKT1cImhhbmRsZU1lbnVBY3RpdmUoJGV2ZW50KVwiPjwvYXBwLW1lbnU+XHJcbiAgICAgICAgICAgIDwvdG4tY3VzdG9tLXNjcm9sbGJhcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWFyZWEgbGF5b3V0LW1lbnUtc2VhcmNoLWFyZWFcIj5cclxuICAgICAgICAgICAgPHAtYXV0b0NvbXBsZXRlIFsobmdNb2RlbCldPVwic2VhcmNoTWVudUlucHV0XCIgW3N0eWxlXT1cInsnd2lkdGgnOicxMDAlJ31cIiBbc3VnZ2VzdGlvbnNdPVwic2VhcmNoTWVudVJlc3VsdFwiXHJcbiAgICAgICAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwib25TZWFyY2hNZW51KCRldmVudClcIiBbYXV0b0hpZ2hsaWdodF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInVMOsbSBraeG6v20gY2jhu6ljIG7Eg25nJyB8IHRyYW5zbGF0ZVwiIFtkZWxheV09XCIyMDBcIiBbc2Nyb2xsSGVpZ2h0XT1cIic0MDBweCdcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiBbcmVhZG9ubHldPVwiIShtZW51TW9kZWwgJiYgbWVudU1vZGVsLmxlbmd0aClcIlxyXG4gICAgICAgICAgICAgICAgKG9uU2VsZWN0KT1cIm9uU2VsZWN0TWVudVN1Z2dlc3Rpb24oJGV2ZW50KVwiIGZpZWxkPVwibGFiZWxcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpbm5lckhUTUw9XCJ7eyBpdGVtLmxhYmVsIHwgaGlnaGxpZ2h0IDogc2VhcmNoTWVudUlucHV0fX1cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1zZWFyY2hcIj48aSBjbGFzcz1cInBpIHBpLXNlYXJjaFwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IFtjbGFzc109XCInbGF5b3V0LW1haW4nXCIgW25nQ2xhc3NdPVwieyduby1oZWFkZXInOiBfZ2xvYmFsU2VydmljZS5nZXRIZWFkZXJTdGF0ZSgpID8gZmFsc2UgOiB0cnVlfVwiPlxyXG4gICAgICAgIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtbWFza1wiPjwvZGl2PlxyXG4gICAgPGRpdiAjcXVpY2tOb3RlQnQgKm5nSWY9XCIhb25seVNob3dNYWluQ29udGVudCAmJiBzaG93UXVpY2tOb3RlXCIgY2xhc3M9XCJxdWljay1ub3RlLWJ1dHRvbi1ob2xkZXJcIiBjZGtEcmFnXHJcbiAgICAgICAgY2RrRHJhZ0JvdW5kYXJ5PVwiLmxheW91dC13cmFwcGVyXCIgb25jb250ZXh0bWVudT1cInJldHVybiBmYWxzZVwiIChjZGtEcmFnRW5kZWQpPVwicXVpY2tOb3RlRHJvcHBlZCgkZXZlbnQpXCJcclxuICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwicXVpY2tOb3RlU3RhcnRlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPGEgI3F1aWNrTm90ZUJ0MSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJhbGwtbm90ZS1idXR0b25cIiB0YWJpbmRleD1cIjBcIiAoY2xpY2spPVwicXVpY2tOb3RlU2hvd0FsbE5vdGVzKClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc3RpY2t5LW5vdGVcIj48L2k+PC9hPlxyXG4gICAgICAgIDxhICNxdWlja05vdGVCdDIgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwic2V0dGluZy1ub3RlLWJ1dHRvblwiIHRhYmluZGV4PVwiMFwiIChjbGljayk9XCJxdWlja05vdGVTaG93U2V0dGluZ3MoKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jb2dcIj48L2k+PC9hPlxyXG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAocHJlc3MpPVwicXVpY2tOb3RlUHJlc3MoJGV2ZW50KVwiIChwcmVzc3VwKT1cInF1aWNrTm90ZVByZXNzVXAoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicXVpY2stbm90ZS1idXR0b25cIiB0YWJpbmRleD1cIjBcIiAoY2xpY2spPVwicXVpY2tOb3RlQWRkTm90ZSgpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIj48L2k+PC9hPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICNwaW5uZWROb3RlcyAqbmdJZj1cIiFvbmx5U2hvd01haW5Db250ZW50XCIgY2xhc3M9XCJwaW5uZWQtbm90ZXMtaG9sZGVyXCIgY2RrRHJhZyBjZGtEcmFnQm91bmRhcnk9XCIubGF5b3V0LXdyYXBwZXJcIlxyXG4gICAgICAgIG9uY29udGV4dG1lbnU9XCJyZXR1cm4gZmFsc2VcIiAoY2RrRHJhZ0VuZGVkKT1cInBpbm5lZE5vdGVzRHJvcHBlZCgkZXZlbnQpXCJcclxuICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwicGlubmVkTm90ZXNTdGFydGVkKCRldmVudClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlubmVkLW5vdGVzIHVpLWdcIiB0YWJpbmRleD1cIjBcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXNcIiBjbGFzcz1cInBpbm5lZC1ub3Rlcy1taW5pbWl6ZS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBpbm5lZE5vdGVzTWluaW1pemUocGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cylcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktd2luZG93LW1heGltaXplXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBpbm5lZE5vdGVzTWF4aW1pemVTdGF0dXNcIiBjbGFzcz1cIiBwaW5uZWQtbm90ZXMtbWluaW1pemUtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwaW5uZWROb3Rlc01pbmltaXplKHBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXdpbmRvdy1taW5pbWl6ZVwiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG5vdGUgb2YgcGlubmVkTm90ZURhdGFcIiBjbGFzcz1cInBpbm5lZC1ub3RlIHVpLWctMTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaW5uZWQtbm90ZS1oZWFkZXItbGluZVwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIm5vdGUuY29sb3JDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaW5uZWQtbm90ZS1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaW5uZWQtbm90ZS1saW5lLXRpdGxlXCIgW3N0eWxlLnBhZGRpbmdCb3R0b21dPVwibm90ZS50aXRsZVBhZGRpbmdCb3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpbm5lZC1ub3RlLWhlYWRlci1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaW5uZWQtbm90ZS1oZWFkZXItdGltZVwiPnt7bm90ZS5jcmVhdGVkIHwgZGF0ZTogJ2RkL01NJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvbGF5b3V0L2ltYWdlcy9pY28vdW5waW4tMS5pY29cIiBjbGFzcz1cInBpbm5lZC1ub3RlLWhlYWRlci1idXR0b24tdW5waW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1blBpbk5vdGUobm90ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIW5vdGUuaXNDb21wbGV0ZWRcIiBjbGFzcz1cImZhciBmYS1mbGFnIHBpbm5lZC1ub3RlLWhlYWRlci1idXR0b24tY29tcGxldGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb21wbGV0ZU5vdGUobm90ZSlcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIm5vdGUuaXNDb21wbGV0ZWRcIiBjbGFzcz1cImZhcyBmYS1mbGFnLWNoZWNrZXJlZCBwaW5uZWQtbm90ZS1oZWFkZXItYnV0dG9uLWNvbXBsZXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5Db21wbGV0ZU5vdGUobm90ZSlcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7bm90ZS5uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpbm5lZC1ub3RlLWNvbnRlbnRzXCIgW3N0eWxlLmRpc3BsYXldPVwibm90ZS5jb250ZW50RGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgY29udGVudCBvZiBub3RlLmNvbnRlbnRzXCIgY2xhc3M9XCJwaW5uZWQtbm90ZS1saW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbnRlbnR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8cmVwb3J0LXF1ZXVlIFtoZWFkZXJdPVwiJ1h14bqldCBk4buvIGxp4buHdSdcIj5cclxuICAgIDwvcmVwb3J0LXF1ZXVlPlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIndhaXRpbmctYm94XCIgW2NsYXNzLnNob3ddPVwid2FpdGluZ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj48L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWxvYWRpbmdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibGRzLWVsbGlwc2lzXCI+XHJcbiAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2UtbG9hZGluZ1wiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgeCBvZiBtZXNzYWdlV2FpdGluZ1wiPnt7eH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48cC10b2FzdCBbcG9zaXRpb25dPVwiJ3RvcC1yaWdodCdcIiBbYXV0b1pJbmRleF09XCJ0cnVlXCI+PC9wLXRvYXN0PlxyXG48cC1jb25maXJtRGlhbG9nICNjZCBbY2xvc2FibGVdPVwiZmFsc2VcIj5cclxuICAgIDxwLWZvb3Rlcj5cclxuICAgICAgICA8YnV0dG9uICNva0J1dHRvbiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktY2hlY2tcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiIGxhYmVsPVwixJDhu5NuZyDDvVwiXHJcbiAgICAgICAgICAgIChrZXlkb3duLnNoaWZ0LnRhYik9XCJmb2N1c1RyYXAoJGV2ZW50LCBmYWxzZSlcIiAoY2xpY2spPVwiY2QuYWNjZXB0KClcIj48L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd1JlamVjdENvbmZpcm1cIiAjY2FuY2VsQnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXNlY29uZGFyeVwiIGljb249XCJwaSBwaS10aW1lc1wiIGxhYmVsPVwiQuG7jyBxdWFcIlxyXG4gICAgICAgICAgICAoa2V5ZG93bi50YWIpPVwiZm9jdXNUcmFwKCRldmVudCwgdHJ1ZSlcIiAoY2xpY2spPVwiY2QucmVqZWN0KClcIj48L2J1dHRvbj5cclxuICAgIDwvcC1mb290ZXI+XHJcbjwvcC1jb25maXJtRGlhbG9nPlxyXG48IS0tIDx1c2VyLWFjdGlvbi1tYW5hZ2VyPjwvdXNlci1hY3Rpb24tbWFuYWdlcj4gLS0+XHJcbjxwZXJtaXNzaW9uLXV0aWxzICpuZ0lmPVwicm9vdERhdGEuc2hvd1Blcm1pc3Npb25VdGlsc1wiPjwvcGVybWlzc2lvbi11dGlscz5cclxuPG5nLXRlbXBsYXRlICNxdWVyeUJ1aWxkZXJVc2VyUGlja2VyIGxldC1jb250cm9sIGxldC1kaXNhYmxlZD1cImRpc2FibGVkXCIgbGV0LXF1ZXJ5PVwicXVlcnlcIiBsZXQtbXVsdGlwbGU9XCJtdWx0aXBsZVwiPlxyXG4gICAgPHVzZXItcGlja2VyIFtjb250cm9sXT1cImNvbnRyb2xcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbKG5nTW9kZWwpXT1cInF1ZXJ5LnZhbHVlXCIgW211bHRpcGxlXT1cImNvbnRyb2wubXVsdGlwbGVcIj5cclxuICAgIDwvdXNlci1waWNrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjcXVlcnlCdWlsZGVyQ29DYXVQaWNrZXIgbGV0LWNvbnRyb2wgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIiBsZXQtcXVlcnk9XCJxdWVyeVwiIGxldC1tdWx0aXBsZT1cIm11bHRpcGxlXCI+XHJcbiAgICA8Y29jYXV0b2NodWMtcGlja2VyLWxpc3QgW2NvbnRyb2xdPVwiY29udHJvbFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFsobmdNb2RlbCldPVwicXVlcnkudmFsdWVcIj5cclxuICAgIDwvY29jYXV0b2NodWMtcGlja2VyLWxpc3Q+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjcXVlcnlCdWlsZGVyQXV0b2NvbXBsZXRlUGlja2VyIGxldC1jb250cm9sIGxldC1kaXNhYmxlZD1cImRpc2FibGVkXCIgbGV0LXF1ZXJ5PVwicXVlcnlcIj5cclxuICAgIDxhdXRvY29tcGxldGUtcGlja2VyICpuZ1N3aXRjaENhc2U9XCInZ3JvdXB1c2VyJ1wiIFtjb250cm9sXT1cImNvbnRyb2xcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwicXVlcnkudmFsdWVcIj5cclxuICAgIDwvYXV0b2NvbXBsZXRlLXBpY2tlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbGlzdENvbmdWaWVjQ29uIGxldC1mb3JtU3RhdGU9XCJmb3JtU3RhdGVcIiBsZXQtbG9haURhbmhTYWNoPVwibG9haURhbmhTYWNoXCIgbGV0LWlkQ29uZ1ZpZWM9XCJpZENvbmdWaWVjXCJcclxuICAgIGxldC10ZW1wbGF0ZURldGFpbEZvcm09XCJ0ZW1wbGF0ZURldGFpbEZvcm1cIj5cclxuICAgIDxiYXNlLWNvbmd2aWVjLWxpc3QgW2xvYWREZXRhaWxGcm9tUXVlcnlQYXJhbV09XCJmYWxzZVwiIFtpc0NoaWxkVmlld109XCJ0cnVlXCIgW2Zvcm1TdGF0ZV09XCJmb3JtU3RhdGVcIlxyXG4gICAgICAgIFtsb2FpRGFuaFNhY2hdPVwibG9haURhbmhTYWNoXCIgW2lkQ29uZ1ZpZWNdPVwiaWRDb25nVmllY1wiIFt0ZW1wbGF0ZURldGFpbEZvcm1dPVwidGVtcGxhdGVEZXRhaWxGb3JtXCI+XHJcbiAgICA8L2Jhc2UtY29uZ3ZpZWMtbGlzdD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY3J1ZExpc3RTZXR0aW5nUm93IGxldC1lbnRpdHlNZXRhZGF0YVNlcnZpY2U9XCJlbnRpdHlNZXRhZGF0YVNlcnZpY2VcIiBsZXQtcGFyZW50Q29udGV4dD1cInBhcmVudENvbnRleHRcIlxyXG4gICAgbGV0LXBhcmVudFNldHRpbmc9XCJwYXJlbnRTZXR0aW5nXCIgbGV0LXBhcmVudE1vZGVsPVwicGFyZW50TW9kZWxcIiBsZXQtb25TYXZlPVwib25TYXZlXCIgbGV0LW9uQ2FuY2VsPVwib25DYW5jZWxcIj5cclxuICAgIDxzZXR0aW5ncy1yb3cgW2VudGl0eU1ldGFkYXRhU2VydmljZV09XCJlbnRpdHlNZXRhZGF0YVNlcnZpY2VcIiBbcGFyZW50Q29udGV4dF09XCJwYXJlbnRDb250ZXh0XCJcclxuICAgICAgICBbcGFyZW50U2V0dGluZ109XCJwYXJlbnRTZXR0aW5nXCIgW3BhcmVudE1vZGVsXT1cInBhcmVudE1vZGVsXCIgKG9uU2F2ZSk9XCJvblNhdmUoJGV2ZW50KVwiIChvbkNhbmNlbCk9XCJvbkNhbmNlbFwiPlxyXG4gICAgPC9zZXR0aW5ncy1yb3c+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjY3J1ZExpc3RTZXR0aW5nIGxldC1lbnRpdHlNZXRhZGF0YVNlcnZpY2U9XCJlbnRpdHlNZXRhZGF0YVNlcnZpY2VcIiBsZXQtcGFyZW50Q29udGV4dD1cInBhcmVudENvbnRleHRcIlxyXG4gICAgbGV0LXBhcmVudFNldHRpbmc9XCJwYXJlbnRTZXR0aW5nXCIgbGV0LXBhcmVudE1vZGVsPVwicGFyZW50TW9kZWxcIiBsZXQtb25TYXZlPVwib25TYXZlXCIgbGV0LW9uQ2FuY2VsPVwib25DYW5jZWxcIj5cclxuICAgIDxzZXR0aW5ncyBbZW50aXR5TWV0YWRhdGFTZXJ2aWNlXT1cImVudGl0eU1ldGFkYXRhU2VydmljZVwiIFtwYXJlbnRDb250ZXh0XT1cInBhcmVudENvbnRleHRcIlxyXG4gICAgICAgIFtwYXJlbnRTZXR0aW5nXT1cInBhcmVudFNldHRpbmdcIiBbcGFyZW50TW9kZWxdPVwicGFyZW50TW9kZWxcIiAob25TYXZlKT1cIm9uU2F2ZSgkZXZlbnQpXCIgKG9uQ2FuY2VsKT1cIm9uQ2FuY2VsXCI+XHJcbiAgICA8L3NldHRpbmdzPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2NydWRMaXN0QWR2YW5jZVNlYXJjaCBsZXQtcGFyZW50U2V0dGluZz1cInBhcmVudFNldHRpbmdcIiBsZXQtc2VhcmNoSW5mbz1cInNlYXJjaEluZm9cIiBsZXQtbG9hZGluZz1cImxvYWRpbmdcIlxyXG4gICAgbGV0LW9uU2VhcmNoPVwib25TZWFyY2hcIiBsZXQtb25Jbml0PVwib25Jbml0XCI+XHJcbiAgICA8YWR2YW5jZS1zZWFyY2ggW3BhcmVudFNldHRpbmddPVwicGFyZW50U2V0dGluZ1wiIFtzZWFyY2hJbmZvXT1cInNlYXJjaEluZm9cIiBbbG9hZGluZ109XCJsb2FkaW5nXCJcclxuICAgICAgICAob25TZWFyY2gpPVwib25TZWFyY2goJGV2ZW50KVwiIChvbkluaXQpPVwib25Jbml0KCRldmVudClcIj5cclxuICAgIDwvYWR2YW5jZS1zZWFyY2g+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NydWRGb3JtVGFibGVEZXRhaWxGb3JtIGxldC1zY2hlbWEgbGV0LXBhcmVudFNldHRpbmc9XCJwYXJlbnRTZXR0aW5nXCIgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LW9uSW5pdD1cIm9uSW5pdFwiXHJcbiAgICBsZXQtb25TYXZlZD1cIm9uU2F2ZWRcIiBsZXQtb25DYW5jZWw9XCJvbkNhbmNlbFwiPlxyXG4gICAgPHRhYmxlLWRldGFpbC1mb3JtICNmb3JtQmFzZSBbcGFyZW50U2V0dGluZ109XCJwYXJlbnRTZXR0aW5nXCIgW3NjaGVtYV09XCJzY2hlbWFcIiBbZGF0YV09XCJkYXRhXCIgKG9uSW5pdCk9XCJvbkluaXRcIlxyXG4gICAgICAgIChvblNhdmVkKT1cIm9uU2F2ZWRcIiAob25DYW5jZWwpPVwib25DYW5jZWxcIj5cclxuICAgIDwvdGFibGUtZGV0YWlsLWZvcm0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjY3J1ZEZvcm1Db25nVmllY0Zvcm0gbGV0LWNvbnRyb2w9XCJjb250cm9sXCI+XHJcbiAgICA8YmFzZS1jb25ndmllYy1mb3JtIFtjb250cm9sXT1cImNvbnRyb2xcIiBbcGFyZW50U2V0dGluZ109XCJjb25nVmllY1NldHRpbmdcIiBbdGVuQ29uZ1ZpZWNdPVwiY29udHJvbC5kYXRhLnRlbkNvbmdWaWVjXCI+XHJcbiAgICA8L2Jhc2UtY29uZ3ZpZWMtZm9ybT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNjcnVkRm9ybUFkZHJlc3NDb21wb25lbnQgbGV0LWRhdGEgbGV0LWNvbnRyb2w9XCJjb250cm9sXCIgbGV0LXBhcmVudFBhdGg9XCJwYXJlbnRQYXRoXCJcclxuICAgIGxldC1jaGVja0Rpc2FibGVkPVwiY2hlY2tEaXNhYmxlZFwiIGxldC1oYW5kbGVGaWVsZFZhbHVlQ2hhbmdlPVwiaGFuZGxlRmllbGRWYWx1ZUNoYW5nZVwiXHJcbiAgICBsZXQtaGFuZGxlQ29udHJvbFJlYWR5RXZlbnQ9XCJoYW5kbGVDb250cm9sUmVhZHlFdmVudFwiPlxyXG4gICAgPGFkZHJlc3MtcGlja2VyIFtjb250cm9sXT1cImNvbnRyb2xcIiBbc2hvd1N1YkxhYmVsXT1cImNvbnRyb2wuc2hvd1N1YkxhYmVsXCIgW2Rpc2FibGVkXT1cImNoZWNrRGlzYWJsZWQoZGF0YSwgY29udHJvbClcIlxyXG4gICAgICAgIFsoZGF0YSldPVwiZGF0YVtjb250cm9sLmZpZWxkXVwiIChvblNlbGVjdCk9XCJoYW5kbGVGaWVsZFZhbHVlQ2hhbmdlKGNvbnRyb2wsICRldmVudCwgJ2NoYW5nZScsIGRhdGEsIHBhcmVudFBhdGgpXCJcclxuICAgICAgICAob25SZWFkeSk9XCJoYW5kbGVDb250cm9sUmVhZHlFdmVudChjb250cm9sLCBwYXJlbnRQYXRoKVwiPlxyXG4gICAgPC9hZGRyZXNzLXBpY2tlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNjcnVkRm9ybUZpbGVNYW5hZ2VyQ29tcG9uZW50IGxldC1kYXRhIGxldC1jb250cm9sPVwiY29udHJvbFwiIGxldC1wYXJlbnRQYXRoPVwicGFyZW50UGF0aFwiXHJcbiAgICBsZXQtY2hlY2tEaXNhYmxlZD1cImNoZWNrRGlzYWJsZWRcIiBsZXQtaGFuZGxlRmllbGRWYWx1ZUNoYW5nZT1cImhhbmRsZUZpZWxkVmFsdWVDaGFuZ2VcIlxyXG4gICAgbGV0LWhhbmRsZUNvbnRyb2xSZWFkeUV2ZW50PVwiaGFuZGxlQ29udHJvbFJlYWR5RXZlbnRcIj5cclxuICAgIDxmaWxlLW1hbmFnZXIgW2NvbnRyb2xdPVwiY29udHJvbFwiIFtzZXJ2aWNlQ29kZV09XCJjb250cm9sLnNlcnZpY2VDb2RlXCIgW2VudGl0eV09XCJjb250cm9sLmVudGl0eVwiXHJcbiAgICAgICAgW2VudGl0eUtleV09XCJjb250cm9sLmVudGl0eUtleSA/IGNvbnRyb2wuZW50aXR5S2V5IDogZGF0YVtjb250cm9sLmVudGl0eUtleUZpZWxkXVwiIFtyZWFkb25seV09XCJjb250cm9sLmRpc2FibGVkXCJcclxuICAgICAgICBbbGF5b3V0XT1cImNvbnRyb2wubGF5b3V0XCIgW21heEZpbGVTaXplXT1cImNvbnRyb2wubWF4RmlsZVNpemVcIiBbaW5UYWlMaWV1XT1cImNvbnRyb2wuaW5UYWlMaWV1XCJcclxuICAgICAgICBbaW5UYWlMaWV1Q2h1bmddPVwiY29udHJvbC5pblRhaUxpZXVDaHVuZ1wiIFtjb3B5VG9Gb2xkZXJJZF09XCJjb250cm9sLmNvcHlUb0ZvbGRlcklkXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVTaXplTWVzc2FnZVN1bW1hcnldPVwiY29udHJvbC5pbnZhbGlkRmlsZVNpemVNZXNzYWdlU3VtbWFyeVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWxdPVwiY29udHJvbC5pbnZhbGlkRmlsZVNpemVNZXNzYWdlRGV0YWlsXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZVN1bW1hcnldPVwiY29udHJvbC5pbnZhbGlkRmlsZVR5cGVNZXNzYWdlU3VtbWFyeVwiXHJcbiAgICAgICAgW2ludmFsaWRGaWxlVHlwZU1lc3NhZ2VEZXRhaWxdPVwiY29udHJvbC5pbnZhbGlkRmlsZVR5cGVNZXNzYWdlRGV0YWlsXCJcclxuICAgICAgICBbaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VTdW1tYXJ5XT1cImNvbnRyb2wuaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VTdW1tYXJ5XCJcclxuICAgICAgICBbaW52YWxpZEZpbGVMaW1pdE1lc3NhZ2VEZXRhaWxdPVwiY29udHJvbC5pbnZhbGlkRmlsZUxpbWl0TWVzc2FnZURldGFpbFwiIFsodmFsdWUpXT1cImRhdGFbY29udHJvbC5maWVsZF1cIlxyXG4gICAgICAgIChvblNlbGVjdGVkKT1cImNvbnRyb2wub25TZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgICAob25DaGFuZ2VkKT1cImhhbmRsZUZpZWxkVmFsdWVDaGFuZ2UoY29udHJvbCwgJGV2ZW50LCAnY2hhbmdlJywgZGF0YSwgcGFyZW50UGF0aClcIlxyXG4gICAgICAgIChvblJlYWR5KT1cImhhbmRsZUNvbnRyb2xSZWFkeUV2ZW50KGNvbnRyb2wsIHBhcmVudFBhdGgpXCI+XHJcbiAgICA8L2ZpbGUtbWFuYWdlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNjcnVkRm9ybVNlcnZpY2VGaWxlVXBsb2FkQ29tcG9uZW50IGxldC1kYXRhIGxldC1jb250cm9sPVwiY29udHJvbFwiIGxldC1wYXJlbnRQYXRoPVwicGFyZW50UGF0aFwiXHJcbiAgICBsZXQtcGFyZW50Q29udGV4dD1cInBhcmVudENvbnRleHRcIiBsZXQtY2hlY2tEaXNhYmxlZD1cImNoZWNrRGlzYWJsZWRcIlxyXG4gICAgbGV0LWhhbmRsZUZpZWxkVmFsdWVDaGFuZ2U9XCJoYW5kbGVGaWVsZFZhbHVlQ2hhbmdlXCIgbGV0LWhhbmRsZUNvbnRyb2xSZWFkeUV2ZW50PVwiaGFuZGxlQ29udHJvbFJlYWR5RXZlbnRcIj5cclxuICAgIDxzZXJ2aWNlLWZpbGUtdXBsb2FkIFsobmdNb2RlbCldPVwiZGF0YVtjb250cm9sLmZpZWxkXVwiIFtwYXJlbnRDb250ZXh0XT1cInBhcmVudENvbnRleHRcIlxyXG4gICAgICAgIFtzZXJ2aWNlQ29kZV09XCJjb250cm9sLnNlcnZpY2VDb2RlXCIgW2VudGl0eV09XCJjb250cm9sLmVudGl0eVwiIFtlbnRpdHlLZXldPVwiZGF0YVtjb250cm9sLmVudGl0eUtleUZpZWxkXVwiXHJcbiAgICAgICAgW2NvbnRyb2xdPVwiY29udHJvbFwiIChvbkNoYW5nZWQpPVwiaGFuZGxlRmllbGRWYWx1ZUNoYW5nZShjb250cm9sLCAkZXZlbnQsICdjaGFuZ2UnLCBkYXRhLCBwYXJlbnRQYXRoKVwiPlxyXG4gICAgPC9zZXJ2aWNlLWZpbGUtdXBsb2FkPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2NydWRGb3JtQ29uZ1ZpZWNQaWNrZXJDb21wb25lbnQgbGV0LWRhdGEgbGV0LWNvbnRyb2w9XCJjb250cm9sXCIgbGV0LXBhcmVudFBhdGg9XCJwYXJlbnRQYXRoXCJcclxuICAgIGxldC1jaGVja0Rpc2FibGVkPVwiY2hlY2tEaXNhYmxlZFwiIGxldC1oYW5kbGVGaWVsZFZhbHVlQ2hhbmdlPVwiaGFuZGxlRmllbGRWYWx1ZUNoYW5nZVwiXHJcbiAgICBsZXQtaGFuZGxlQ29udHJvbFJlYWR5RXZlbnQ9XCJoYW5kbGVDb250cm9sUmVhZHlFdmVudFwiPlxyXG4gICAgPGNvbmd2aWVjLXBpY2tlciBbY29udHJvbF09XCJjb250cm9sXCIgW2Rpc2FibGVkXT1cImNoZWNrRGlzYWJsZWQoZGF0YSwgY29udHJvbClcIiBbcmVxdWlyZWRdPVwiY29udHJvbC5yZXF1aXJlZFwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRhW2NvbnRyb2wuZmllbGRdXCJcclxuICAgICAgICAob25DaGFuZ2VkKT1cImhhbmRsZUZpZWxkVmFsdWVDaGFuZ2UoY29udHJvbCwgJGV2ZW50LCAnY2hhbmdlJywgZGF0YSwgcGFyZW50UGF0aClcIj5cclxuICAgIDwvY29uZ3ZpZWMtcGlja2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2NydWRGb3JtVmFuQmFuUGlja2VyQ29tcG9uZW50IGxldC1kYXRhIGxldC1jb250cm9sPVwiY29udHJvbFwiIGxldC1wYXJlbnRQYXRoPVwicGFyZW50UGF0aFwiXHJcbiAgICBsZXQtY2hlY2tEaXNhYmxlZD1cImNoZWNrRGlzYWJsZWRcIiBsZXQtaGFuZGxlRmllbGRWYWx1ZUNoYW5nZT1cImhhbmRsZUZpZWxkVmFsdWVDaGFuZ2VcIlxyXG4gICAgbGV0LWhhbmRsZUNvbnRyb2xSZWFkeUV2ZW50PVwiaGFuZGxlQ29udHJvbFJlYWR5RXZlbnRcIj5cclxuICAgIDx2YW5iYW4tcGlja2VyIFtjb250cm9sXT1cImNvbnRyb2xcIiBbZGlzYWJsZWRdPVwiY2hlY2tEaXNhYmxlZChkYXRhLCBjb250cm9sKVwiIFtyZXF1aXJlZF09XCJjb250cm9sLnJlcXVpcmVkXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cImRhdGFbY29udHJvbC5maWVsZF1cIiBbcmVhZE9ubHldPVwiY29udHJvbC5yZWFkT25seVwiIFtsb2FpVmFuQmFuXT1cImNvbnRyb2wubG9haVZhbkJhblwiXHJcbiAgICAgICAgKG9uQ2hhbmdlZCk9XCJoYW5kbGVGaWVsZFZhbHVlQ2hhbmdlKGNvbnRyb2wsICRldmVudCwgJ2NoYW5nZScsIGRhdGEsIHBhcmVudFBhdGgpXCI+XHJcbiAgICA8L3ZhbmJhbi1waWNrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RpbnlNY2VGaWxlUGlja2VyRGlhbG9nIGxldC1wYXJlbnRNb2RlbD1cInBhcmVudE1vZGVsXCIgbGV0LXBhcmVudENvbnRleHQ9XCJwYXJlbnRDb250ZXh0XCJcclxuICAgIGxldC1jbG9zZUZvcm09XCJjbG9zZUZvcm1cIiBsZXQtb25DYW5jZWw9XCJvbkNhbmNlbFwiIGxldC1vbkNoYW5nZWQ9XCJvbkNoYW5nZWRcIj5cclxuICAgIDxmaWxlLXBpY2tlci1kaWFsb2cgI2Zvcm1CYXNlIFtwYXJlbnRNb2RlbF09XCJwYXJlbnRNb2RlbFwiIFtwYXJlbnRDb250ZXh0XT1cInBhcmVudENvbnRleHRcIiAoY2xvc2VGb3JtKT1cImNsb3NlRm9ybVwiXHJcbiAgICAgICAgKG9uQ2FuY2VsKT1cIm9uQ2FuY2VsXCIgKG9uQ2hhbmdlZCk9XCJvbkNoYW5nZWRcIj5cclxuICAgIDwvZmlsZS1waWNrZXItZGlhbG9nPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI3RpbnlNY2VBZGROZXdzIGxldC1sYW5ndWFnZUNvZGU9XCJsYW5ndWFnZUNvZGVcIiBsZXQtc2hvd0NoYW5nZT1cInNob3dDaGFuZ2VcIj5cclxuICAgIDxhZGQtbmV3cyAjbGlzdEJhc2UgW2xhbmd1YWdlQ29kZV09XCJsYW5ndWFnZUNvZGVcIiAoc2hvd0NoYW5nZSk9XCJzaG93Q2hhbmdlKCRldmVudClcIj48L2FkZC1uZXdzPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkcm9wZG93blF1aWNrQWRkRm9ybSBsZXQtbW9kZWwgbGV0LXBhcmVudE1vZGVsPVwicGFyZW50TW9kZWxcIiBsZXQtcGFyZW50Q29udGV4dD1cInBhcmVudENvbnRleHRcIlxyXG4gICAgbGV0LWNvbnRyb2w9XCJjb250cm9sXCIgbGV0LW9uU2F2ZWQ9XCJvblNhdmVkXCIgbGV0LW9uQ2FuY2VsPVwib25DYW5jZWxcIj5cclxuICAgIDxxdWljay1hZGQtZm9ybSAjZm9ybUJhc2UgW3BhcmVudE1vZGVsXT1cInBhcmVudE1vZGVsXCIgW3BhcmVudENvbnRleHRdPVwicGFyZW50Q29udGV4dFwiIFttb2RlbF09XCJtb2RlbFwiXHJcbiAgICAgICAgW2NvbnRyb2xdPVwiY29udHJvbFwiIFtiYXNlU2VydmljZV09XCJjb250cm9sLmJhc2VTZXJ2aWNlXCIgKG9uU2F2ZWQpPVwib25TYXZlZFwiIChvbkNhbmNlbCk9XCJvbkNhbmNlbFwiPlxyXG4gICAgPC9xdWljay1hZGQtZm9ybT5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
878
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWFwcC1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2NvbW1vbi1hcHAtY29tcG9uZW50L2NvbW1vbi1hcHAtY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29tcG9uZW50cy9jb21tb24tYXBwLWNvbXBvbmVudC9jb21tb24tYXBwLWNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0QsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBMkMsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvTixPQUFPLEVBQWtCLGVBQWUsRUFBaUIsTUFBTSxpQkFBaUIsQ0FBQztBQUdqRixPQUFPLEtBQUssTUFBTSxNQUFNLFVBQVUsQ0FBQztBQUVuQyxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUc3QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBSzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRS9FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBVTNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVc5RSxNQUFNLE9BQU8sMkJBQTJCO0lBbUVwQyxZQUNXLFFBQW1CLEVBQ25CLGNBQTZCLEVBQzdCLGNBQTZCLEVBQzVCLGlCQUFtQyxFQUNuQyxTQUEyQixFQUMzQixhQUEyQixFQUMzQixjQUE2QixFQUM3QixZQUF5QixFQUN6QixPQUFlLEVBQ2YsTUFBYSxFQUNiLGVBQStCLEVBQy9CLHNCQUE2QyxFQUM3QyxtQkFBOEMsRUFDL0Msd0JBQWlELEVBQ2hELGVBQStCLEVBQ2hDLHNCQUE2QyxFQUM1QyxHQUFzQixFQUN0QixnQkFBaUMsRUFDL0IsZ0JBQWlDLEVBQ25DLHNCQUE2QyxFQUM3QyxtQkFBdUMsRUFDdkMsWUFBeUIsRUFDekIsY0FBNkIsRUFDN0IsZUFBK0IsRUFDL0Isa0JBQXFDLEVBQ3JDLG1CQUF1QztRQXpCeEMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQ2Isb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUFDN0Msd0JBQW1CLEdBQW5CLG1CQUFtQixDQUEyQjtRQUMvQyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQXlCO1FBQ2hELG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUNoQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBQzVDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNuQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBQzdDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDdkMsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQWhFMUMsa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFeEIsb0JBQWUsR0FBaUIsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUMzRCw2QkFBNkI7UUFDN0IsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUV4Qiw4QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFDbEMsOEJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBR3BCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRTVCLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFLYixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QiwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFFL0IsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUM5QixzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFFekIsNEJBQXVCLEdBQUcsV0FBVyxDQUFDO1FBQ3RDLHlCQUFvQixHQUFHLENBQUMsQ0FBQztRQWlDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckQsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUN0RixJQUFJLHVCQUF1QixFQUFFO1lBQ3pCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQztTQUMxRDtRQUVELElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxLQUFLLGdCQUFnQixFQUFFO1lBQzVELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ25EO2FBQ0k7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNqRDtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDO1lBQy9CLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztZQUM1RSxhQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7WUFDL0QsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO1lBQzdELFVBQVUsRUFBRTtnQkFDUixTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7YUFDeEk7WUFDRCxlQUFlLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztZQUM1RixLQUFLLEVBQUUsU0FBUztTQUNuQixDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDM0QsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FDbkMsSUFBSSxDQUFDLHdCQUF3QixFQUM3QixlQUFlLENBQ2xCLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ25DLDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV2QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDakQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1NBQ3ZEO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsQ0FDekMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ2hDLEtBQUssRUFBQyxFQUFFLEVBQUMsRUFBRTtZQUNQLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1lBRTNELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtpQkFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFNUMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNyQiwyQ0FBMkM7Z0JBQzNDLGdDQUFnQztnQkFDaEMsNkVBQTZFO2dCQUM3RSxJQUFJO2dCQUVKLGlEQUFpRDtnQkFDakQsb0hBQW9IO2dCQUNwSCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRTFELElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUU7b0JBQzVDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUM5QyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFDO2lCQUNuQztxQkFDSTtvQkFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztvQkFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzlDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUN2QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO2lCQUNuQzthQUNKO2lCQUNJO2dCQUNELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUMxQjtZQUVELHFFQUFxRTtZQUNyRSx1REFBdUQ7WUFDdkQsaUdBQWlHO1lBQ2pHLDZFQUE2RTtZQUM3RSxvQ0FBb0M7WUFDcEMsSUFBSTtZQUVKLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJO2dCQUNBLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQ3RCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDdEMsQ0FBQztvQkFFRixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FDdEIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixJQUFJLENBQUMsRUFBRTt3QkFDSCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFOzRCQUN6RixJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7eUJBQ2hGO29CQUNMLENBQUMsQ0FDSixDQUFDO2dCQUNOLENBQUMsQ0FBQyxDQUFDO2FBQ047WUFDRCxPQUFPLENBQUMsRUFBRTthQUNUO1FBQ0wsQ0FBQyxDQUNKLENBQUM7UUFFRixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO1FBQzdGLElBQUksa0JBQWtCLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFO1lBQ2pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2hELE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUMxQixHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7aUJBQzlCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3pDLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1NBQzlDO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUMvRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDNUQsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDUCxJQUFJLEdBQUcsRUFBRSxDQUFDO2FBQ2I7WUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7YUFDdkQ7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLEVBQUU7WUFDOUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNyRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFFBQVE7UUFDSixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2xJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDL0MsbUJBQW1CO1FBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDakcsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDZCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7YUFDaEY7WUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEcsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNuRixJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUU7Z0JBQzVELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNwQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdEI7aUJBQ0ksSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3RCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNwRixJQUFJLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUU7Z0JBQzVELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNwQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdEI7aUJBQ0ksSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFO2dCQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3RCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2RixJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7YUFDMUQ7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7YUFDekQ7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILG9DQUFvQztRQUNwQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osdURBQXVEO1lBQ3ZELG1EQUFtRDtZQUNuRCxjQUFjO1lBQ2QscURBQXFEO1lBQ3JELDRHQUE0RztZQUM1RyxTQUFTO1lBQ1QsOENBQThDO1lBQzlDLE1BQU07UUFDVixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFHVCw4RkFBOEY7UUFDOUYsb0NBQW9DO1FBQ3BDLE1BQU07UUFFTixJQUFJLENBQUMsd0JBQXdCLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtZQUNwRiwyQ0FBMkM7WUFDM0MsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNsQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUNwRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRTtvQkFDaEQsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQ3JELElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMseUJBQXlCO2lCQUMzQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsd0JBQXdCLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1lBQ3RGLDZDQUE2QztZQUM3QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFO29CQUNoRCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFDckQsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztvQkFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyx5QkFBeUI7aUJBQzNDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDekI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUV0RCxtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLDRCQUE0QixDQUFDLDRCQUE0QixFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDMUYsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILDZCQUE2QjtRQUM3QixJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQy9FLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFlBQVksZUFBZSxFQUFFO2dCQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7YUFDdEM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILCtFQUErRTtRQUMvRSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUVoQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixFQUFFLEVBQUU7d0JBQzNDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7cUJBQ3RDO2dCQUNMLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDdEM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELGtCQUFrQjtRQUNkLDhCQUE4QjtRQUM5QixpQ0FBaUM7UUFFakMsTUFBTTtRQUVOLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxFQUFFLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQzdHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDakcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLG9DQUFvQyxFQUFFLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBQ3JILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDL0csSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQywrQkFBK0IsRUFBRSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUMzRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDckYsSUFBSSxtQkFBbUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN6QyxJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxFQUFFLEVBQUU7b0JBQzVHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDaEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2lCQUNqRjtnQkFDRCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFO29CQUM1RSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztpQkFDMUQ7cUJBQ0k7b0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7aUJBQ3pEO2FBQ0o7aUJBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN2QixJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFO29CQUM1RSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztpQkFDMUQ7cUJBQ0k7b0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7aUJBQ3pEO2FBQ0o7WUFFRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDckYsSUFBSSxtQkFBbUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN6QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUNwRSxJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksbUJBQW1CLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFO29CQUNySCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ2hGLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztpQkFDL0U7Z0JBRUQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQztnQkFDOUQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO29CQUNyQixJQUFJLElBQUksQ0FBQyx5QkFBeUIsSUFBSSxJQUFJLEVBQUU7d0JBQ3hDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTs0QkFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7NEJBQ3BELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQzt5QkFDcEQ7cUJBQ0o7eUJBQ0k7d0JBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFOzRCQUNuQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQzs0QkFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDO3lCQUNyRDtxQkFDSjtpQkFDSjthQUNKO2lCQUNJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7YUFDMUQ7UUFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFVCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRUQscUJBQXFCO1FBQ2pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDL0MsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtZQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQ3JGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3RFLElBQUksQ0FBQyxVQUFVLElBQUksZUFBZSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsRUFBRTtnQkFDOUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7b0JBQ2xCLGVBQWU7aUJBQ2xCLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsT0FBTzthQUNWO1lBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFFOUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssRUFBRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssV0FBVyxDQUFDLEVBQUU7Z0JBQzlGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2FBQzFCO2lCQUNJO2dCQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2FBQzFCO1NBQ0o7YUFDSTtZQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNsRiw2R0FBNkc7WUFDN0csMkdBQTJHO1lBQzNHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDWjtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYTtRQUNmLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN2QixPQUFPO1NBQ1Y7UUFDRCxJQUFJO1lBQ0EsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUM1QjtRQUNELE9BQU8sQ0FBQyxFQUFFO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNsRDtRQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQzthQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDM0MsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1osY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU07UUFDbkIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksTUFBTSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDdkM7YUFDSTtZQUNELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzNDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxPQUFPLENBQUMsT0FBTyxHQUFHLHdCQUF3QixDQUFDO0lBQy9DLENBQUM7SUFFTyx5QkFBeUI7UUFDN0Isa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0QyxJQUNJLEdBQUcsQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEVBQzlCO2dCQUNFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQ3BELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLENBQ3pDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUMvQixJQUFJLENBQUMsY0FBYyxDQUN0QixDQUFDO2FBRUw7aUJBQ0ksSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLGVBQWUsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNqQztpQkFDSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUM1QixrQkFBa0I7Z0JBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsc0JBQXNCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDdkQ7aUJBQ0ksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLG9CQUFvQixFQUFFO2dCQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUNyRCxTQUFTO2dCQUNULElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDaEM7aUJBQ0ksSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLDJCQUEyQixFQUFFO2FBQ2pEO2lCQUNJLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxpQkFBaUIsRUFBRTthQUN2QztpQkFDSTtnQkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNuQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzNDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLENBQ3pDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUMvQixJQUFJLENBQUMsY0FBYyxDQUN0QixDQUFDO1lBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1NBQ3BEO2FBQ0k7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pFO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtvQkFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7d0JBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7cUJBQ3RDO2lCQUNKO1lBQ0wsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO29CQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUN0QztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCx5QkFBeUI7UUFDekIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDdEc7YUFDSTtZQUNELG1DQUFtQztZQUNuQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ2xFO0lBQ0wsQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFlO1FBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxlQUFlO1FBQ25CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNuRSxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzdDLE9BQU8sR0FBRyxDQUFDO1NBQ2Q7YUFDSTtZQUNELEdBQUcsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1lBQzFCLE9BQU8sR0FBRyxDQUFDO1NBQ2Q7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBRztRQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBSztRQUNsQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDL0QsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7U0FDNUYsQ0FBQyxDQUFDLENBQUM7UUFDSixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUNyRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQ3BFLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDbEUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1lBQ25GLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFLO1FBQ2xCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDdkUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlO2VBQ3RELENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7WUFDaEUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFRO2dCQUNwRCxhQUFhLEVBQU8sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFPLEVBQUUsRUFBRSxJQUFJLEVBQU8sRUFBRSxFQUFFO2FBQ3JGLENBQUM7WUFDRixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7U0FDN0U7SUFDTCxDQUFDO0lBRUQscUJBQXFCO1FBQ2pCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUM7SUFDNUUsQ0FBQztJQUVELHFCQUFxQjtRQUNqQixJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDO0lBQzdFLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxJQUFJO1FBQzFCLElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQzthQUN6RDtpQkFDSTtnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztnQkFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7YUFDekQ7U0FDSjthQUNJO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDdkQ7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLGNBQWM7SUFHZCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBSztRQUNwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDL0QsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDckQsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtTQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVKLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDdkUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQUs7UUFDcEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ3RFLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFhO1FBQzdCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLElBQUksQ0FBQztRQUV2QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDL0QsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDckQsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtTQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyx5QkFBeUIsSUFBSSxJQUFJLEVBQUU7Z0JBRXhDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7b0JBQ3BELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztpQkFDcEQ7YUFDSjtpQkFDSTtnQkFDRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO29CQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7aUJBQ3JEO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsT0FBWTtRQUNsQixPQUFPLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUU3QixDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQVk7UUFDckIsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFFL0IsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFZO1FBQ3ZCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBRWhDLENBQUM7SUFFRCxjQUFjO1FBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFPO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsV0FBVztRQUNQLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxjQUFjO0lBQ2QsWUFBWSxDQUFDLEtBQUs7UUFDZCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQ3hCLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxPQUFPO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUVsQixJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFOUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVPLHVCQUF1QixDQUFDLE9BQWUsRUFBRSxTQUFnQixFQUFFLFVBQWlCO1FBQ2hGLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUNqQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDakU7aUJBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUM3RixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3pCO1FBRUwsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsR0FBRztRQUNuQixHQUFHLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hCLDhEQUE4RDtRQUM5RCx5SkFBeUo7UUFDekosK0dBQStHO1FBQy9HLHFFQUFxRTtRQUNyRSx5SkFBeUo7UUFDekosK0dBQStHO1FBQy9HLHFFQUFxRTtRQUNyRSx5Q0FBeUM7UUFDekMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzdELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0IsZ0ZBQWdGO1FBQ2hGLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLHFDQUFxQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMseUJBQXlCO1FBQ3ZGLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1FBQ2hFLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELHNCQUFzQixDQUFDLFdBQVc7UUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUFLO1FBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDcEMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUFLO1FBQ3hCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUdELDhCQUE4QixDQUFDLEtBQW9CO1FBQy9DLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDdkUsSUFBSSxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3RFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO2FBRTVDO2lCQUNJO2dCQUNELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQy9CO1NBQ0o7YUFDSTtZQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRU8sUUFBUSxDQUFDLEtBQVk7UUFDekIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtZQUN6QyxPQUFPO1NBQ1Y7YUFDSTtZQUNELElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtnQkFDcEIsS0FBSyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUM7YUFDekc7aUJBQ0k7Z0JBQ0QsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDckY7U0FDSjtJQUNMLENBQUM7O3dIQTMzQlEsMkJBQTJCOzRHQUEzQiwyQkFBMkIscU5BRnpCLENBQUMsdUJBQXVCLEVBQUUscUJBQXFCLENBQUMseWlFQVkxQyxXQUFXLHduQkFGakIsb0JBQW9CLDZJQ2pEbkMseXVnQkE4T2M7MkZEck1ELDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDSSxzQkFBc0IsYUFHckIsQ0FBQyx1QkFBdUIsRUFBRSxxQkFBcUIsQ0FBQzttMkJBSXBDLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDTSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0MsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNHLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDRSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0MsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNTLFdBQVc7c0JBQTNDLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUNQLGFBQWE7c0JBQXBDLFNBQVM7dUJBQUMsV0FBVztnQkFDUSxRQUFRO3NCQUFyQyxlQUFlO3VCQUFDLFdBQVc7Z0JBQ1kseUJBQXlCO3NCQUFoRSxZQUFZO3VCQUFDLHdCQUF3QjtnQkFDRywwQkFBMEI7c0JBQWxFLFlBQVk7dUJBQUMseUJBQXlCO2dCQUNTLGlDQUFpQztzQkFBaEYsWUFBWTt1QkFBQyxnQ0FBZ0M7Z0JBQ2Isa0JBQWtCO3NCQUFsRCxZQUFZO3VCQUFDLGlCQUFpQjtnQkFDSyxxQkFBcUI7c0JBQXhELFlBQVk7dUJBQUMsb0JBQW9CO2dCQUNELGtCQUFrQjtzQkFBbEQsWUFBWTt1QkFBQyxpQkFBaUI7Z0JBQ1Esd0JBQXdCO3NCQUE5RCxZQUFZO3VCQUFDLHVCQUF1QjtnQkFDSSwwQkFBMEI7c0JBQWxFLFlBQVk7dUJBQUMseUJBQXlCO2dCQUNELHVCQUF1QjtzQkFBNUQsWUFBWTt1QkFBQyxzQkFBc0I7Z0JBQ00sMkJBQTJCO3NCQUFwRSxZQUFZO3VCQUFDLDBCQUEwQjtnQkFDTSwrQkFBK0I7c0JBQTVFLFlBQVk7dUJBQUMsOEJBQThCO2dCQUNRLHFDQUFxQztzQkFBeEYsWUFBWTt1QkFBQyxvQ0FBb0M7Z0JBQ0Qsa0NBQWtDO3NCQUFsRixZQUFZO3VCQUFDLGlDQUFpQztnQkFDQSxnQ0FBZ0M7c0JBQTlFLFlBQVk7dUJBQUMsK0JBQStCO2dCQUNKLDBCQUEwQjtzQkFBbEUsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBQ1AsaUJBQWlCO3NCQUFoRCxZQUFZO3VCQUFDLGdCQUFnQjtnQkFDUSx1QkFBdUI7c0JBQTVELFlBQVk7dUJBQUMsc0JBQXNCO2dCQUUzQixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBaTBCTiw4QkFBOEI7c0JBRDdCLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEF1dGhDb25maWcsIE9BdXRoU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xyXG5pbXBvcnQgKiBhcyBIYW1tZXIgZnJvbSAnaGFtbWVyanMnO1xyXG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFByaW1lTkdDb25maWcgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3J1ZExpc3RTZXR0aW5nIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tcG9uZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21pemVVaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b21pemUtdWkuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW52aXJvbm1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEdlbmVyaWNHdWFyZENoaWxkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dlbmVyaWMtZ3VhcmQtY2hpbGQuc2VydmljZSc7XHJcbmltcG9ydCB7IEdlbmVyaWNHdWFyZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nZW5lcmljLWd1YXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZW51U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21lbnUuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFNpZ25hbFJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2lnbmFsci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RvcmFnZVVwZGF0ZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS11cGRhdGVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRuQ2xpZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RuLWNsaWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXBvcnRRdWV1ZUNvbXBvbmVudCB9IGZyb20gJy4uL3JlcG9ydC1xdWV1ZS9yZXBvcnQtcXVldWUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQgfSBmcm9tICcuLi90bi1jdXN0b20tc2Nyb2xsYmFyL3RuLWN1c3RvbS1zY3JvbGxiYXIuY29tcG9uZW50JztcclxuXHJcbmRlY2xhcmUgbGV0IHRpbnltY2U6IGFueTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjb21tb24tYXBwLWNvbXBvbmVudCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tbW9uLWFwcC1jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb21tb24tYXBwLWNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZSwgRW50aXR5TWV0YWRhdGFTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbW9uQXBwQ29tcG9uZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ29rQnV0dG9uJykgb2tCdXR0b246IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdjYW5jZWxCdXR0b24nKSBjYW5jZWxCdXR0b246IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKCdxdWlja05vdGVCdCcpIHF1aWNrTm90ZUJ0OiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgncXVpY2tOb3RlQnQxJykgcXVpY2tOb3RlQnQxOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgncXVpY2tOb3RlQnQyJykgcXVpY2tOb3RlQnQyOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgncGlubmVkTm90ZXMnKSBwaW5uZWROb3RlczogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoUmVwb3J0UXVldWVDb21wb25lbnQpIHJlcG9ydFF1ZXVlOiBSZXBvcnRRdWV1ZUNvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ3Njcm9sbGJhcicpIHNjcm9sbEJhck1lbnU6IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50O1xyXG4gICAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZVJlZikgY2hpbGRyZW46IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ3F1ZXJ5QnVpbGRlclVzZXJQaWNrZXInKSB0cGxRdWVyeUJ1aWxkZXJVc2VyUGlja2VyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgncXVlcnlCdWlsZGVyQ29DYXVQaWNrZXInKSB0cGxRdWVyeUJ1aWxkZXJDb0NhdVBpY2tlcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ3F1ZXJ5QnVpbGRlckF1dG9jb21wbGV0ZVBpY2tlcicpIHRwbFF1ZXJ5QnVpbGRlckF1dG9jb21wbGV0ZVBpY2tlcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ2xpc3RDb25nVmllY0NvbicpIHRwbExpc3RDb25nVmllY0NvbjogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ2NydWRMaXN0U2V0dGluZ1JvdycpIHRwbENydWRMaXN0U2V0dGluZ1JvdzogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ2NydWRMaXN0U2V0dGluZycpIHRwbENydWRMaXN0U2V0dGluZzogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ2NydWRMaXN0QWR2YW5jZVNlYXJjaCcpIHRwbENydWRMaXN0QWR2YW5jZVNlYXJjaDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ2NydWRGb3JtVGFibGVEZXRhaWxGb3JtJykgdHBsQ3J1ZEZvcm1UYWJsZURldGFpbEZvcm06IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCdjcnVkRm9ybUNvbmdWaWVjRm9ybScpIHRwbENydWRGb3JtQ29uZ1ZpZWNGb3JtOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgnY3J1ZEZvcm1BZGRyZXNzQ29tcG9uZW50JykgdHBsQ3J1ZEZvcm1BZGRyZXNzQ29tcG9uZW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgnY3J1ZEZvcm1GaWxlTWFuYWdlckNvbXBvbmVudCcpIHRwbENydWRGb3JtRmlsZU1hbmFnZXJDb21wb25lbnQ6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCdjcnVkRm9ybVNlcnZpY2VGaWxlVXBsb2FkQ29tcG9uZW50JykgdHBsQ3J1ZEZvcm1TZXJ2aWNlRmlsZVVwbG9hZENvbXBvbmVudDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ2NydWRGb3JtQ29uZ1ZpZWNQaWNrZXJDb21wb25lbnQnKSB0cGxDcnVkRm9ybUNvbmdWaWVjUGlja2VyQ29tcG9uZW50OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgnY3J1ZEZvcm1WYW5CYW5QaWNrZXJDb21wb25lbnQnKSB0cGxDcnVkRm9ybVZhbkJhblBpY2tlckNvbXBvbmVudDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ3RpbnlNY2VGaWxlUGlja2VyRGlhbG9nJykgdHBsVGlueU1jZUZpbGVQaWNrZXJEaWFsb2c6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCd0aW55TWNlQWRkTmV3cycpIHRwbFRpbnlNY2VBZGROZXdzOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgnZHJvcGRvd25RdWlja0FkZEZvcm0nKSB0cGxEcm9wZG93blF1aWNrQWRkRm9ybTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICBASW5wdXQoKSBzaG93UXVpY2tOb3RlID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIGFsbG93QW5vbnltb3VzID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBbGw6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICAgIC8vIHJvb3RWZXJzaW9uRGVwbG95ID0gJzEuMyc7XHJcbiAgICBjdXJyZW50Um91dGUgPSAnJztcclxuICAgIHBhZ2VMb2FkZWQgPSBmYWxzZTtcclxuICAgIGZpcnN0VGltZUxvZ2luID0gZmFsc2U7XHJcbiAgICBzaG93QWRkTm90ZUZvcm0gPSBmYWxzZTtcclxuICAgIHBpbm5lZE5vdGVEYXRhOiBhbnk7XHJcbiAgICBwaW5uZWROb3Rlc01pbmltaXplU3RhdHVzID0gZmFsc2U7XHJcbiAgICBwaW5uZWROb3Rlc01heGltaXplU3RhdHVzID0gbnVsbDtcclxuICAgIGNhcHR1cmVNb2RlID0gZmFsc2U7XHJcbiAgICBwMDogYW55O1xyXG4gICAgcDE6IGFueTtcclxuICAgIGxvZ2dlZEluID0gZmFsc2U7XHJcbiAgICBzdWJzY3JpYmxlOiBTdWJzY3JpcHRpb247XHJcbiAgICBvbmx5U2hvd01haW5Db250ZW50ID0gZmFsc2U7XHJcblxyXG4gICAgYXBwQ29kZSA9ICcnO1xyXG5cclxuICAgIHNlYXJjaE1lbnVSZXN1bHQ6IGFueVtdO1xyXG4gICAgc2VhcmNoTWVudUlucHV0OiBzdHJpbmc7XHJcblxyXG4gICAgc2hvd1Bpbm5lZE1lbnUgPSBmYWxzZTtcclxuICAgIGlzSW5QaW5uZWRNZW51ID0gZmFsc2U7XHJcbiAgICBpc1NlYXJjaE1lbnVJbnB1dEZvY3VzID0gZmFsc2U7XHJcbiAgICBtZW51TW9kZWw6IGFueTtcclxuICAgIHdhaXRpbmcgPSBmYWxzZTtcclxuICAgIG1lc3NhZ2VXYWl0aW5nOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgc2hvd1JlamVjdENvbmZpcm0gPSB0cnVlO1xyXG5cclxuICAgIGtleVByZXNzUGVybWlzc2lvblV0aWxzID0gJ3BwcHBwcHBwcCc7XHJcbiAgICBjdXJyZW50S2V5UHJlc3NJbmRleCA9IDA7XHJcbiAgICByb290RGF0YTogYW55O1xyXG5cclxuICAgIGNvbmdWaWVjU2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgIHB1YmxpYyBfZ2xvYmFsU2VydmljZTogR2xvYmFsU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfY29tcG9uZW50U2VydmljZTogQ29tcG9uZW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9vYXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9hdXRoZW5TZXJ2aWNlOiBBdXRoZW5TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIF90aXRsZTogVGl0bGUsXHJcbiAgICAgICAgcHJpdmF0ZSBfc2lnbmFsUlNlcnZpY2U6IFNpZ25hbFJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3N0b3JhZ2VVcGRhdGVkU2VydmljZTogU3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2FwcGxpY2F0aW9uQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZSxcclxuICAgICAgICBwdWJsaWMgX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlOiBDb21wb25lbnRDb250ZXh0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHVibGljIF9kZXZpY2VEZXRlY3RvclNlcnZpY2U6IERldmljZURldGVjdG9yU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBfdG5DbGllbnRTZXJ2aWNlOiBUbkNsaWVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9lbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9lbnZpcm9ubWVudFNlcnZpY2U6IEVudmlyb25tZW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9tZW51U2VydmljZTogTWVudVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfcHJpbWVuZ0NvbmZpZzogUHJpbWVOR0NvbmZpZyxcclxuICAgICAgICBwcml2YXRlIF9zdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2N1c3RvbWl6ZVVpU2VydmljZTogQ3VzdG9taXplVWlTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmFwcENvZGUgPSB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBwQ29kZSgpO1xyXG4gICAgICAgIGNvbnN0IGtleVByZXNzUGVybWlzc2lvblV0aWxzID0gdGhpcy5fZW52aXJvbm1lbnRTZXJ2aWNlLmdldEtleVByZXNzUGVybWlzc2lvblV0aWxzKCk7XHJcbiAgICAgICAgaWYgKGtleVByZXNzUGVybWlzc2lvblV0aWxzKSB7XHJcbiAgICAgICAgICAgIHRoaXMua2V5UHJlc3NQZXJtaXNzaW9uVXRpbHMgPSBrZXlQcmVzc1Blcm1pc3Npb25VdGlscztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0U3RvcmFnZSgpID09PSAnc2Vzc2lvblN0b3JhZ2UnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldFN0b3JhZ2Uoc2Vzc2lvblN0b3JhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0U3RvcmFnZShsb2NhbFN0b3JhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcHJpbWVuZ0NvbmZpZy5zZXRUcmFuc2xhdGlvbih7XHJcbiAgICAgICAgICAgIGRheU5hbWVzOiBbJ0No4bunIG5o4bqtdCcsICdUaOG7qSAyJywgJ1Ro4bupIDMnLCAnVGjhu6kgNCcsICdUaOG7qSA1JywgJ1Ro4bupIDYnLCAnVGjhu6kgNyddLFxyXG4gICAgICAgICAgICBkYXlOYW1lc1Nob3J0OiBbJ0NOJywgJ1RoMicsICdUaDMnLCAnVGg0JywgJ1RoNScsICdUaDYnLCAnVGg3J10sXHJcbiAgICAgICAgICAgIGRheU5hbWVzTWluOiBbJ0NOJywgJ1RoMicsICdUaDMnLCAnVGg0JywgJ1RoNScsICdUaDYnLCAnVGg3J10sXHJcbiAgICAgICAgICAgIG1vbnRoTmFtZXM6IFtcclxuICAgICAgICAgICAgICAgICdUaMOhbmcgMScsICdUaMOhbmcgMicsICdUaMOhbmcgMycsICdUaMOhbmcgNCcsICdUaMOhbmcgNScsICdUaMOhbmcgNicsICdUaMOhbmcgNycsICdUaMOhbmcgOCcsICdUaMOhbmcgOScsICdUaMOhbmcgMTAnLCAnVGjDoW5nIDExJywgJ1Row6FuZyAxMidcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgbW9udGhOYW1lc1Nob3J0OiBbJ1QxJywgJ1QyJywgJ1QzJywgJ1Q0JywgJ1Q1JywgJ1Q2JywgJ1Q3JywgJ1Q4JywgJ1Q5JywgJ1QxMCcsICdUMTEnLCAnVDEyJ10sXHJcbiAgICAgICAgICAgIHRvZGF5OiAnSMO0bSBuYXknLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBjdXN0b21VaSA9IHRoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRDdXN0b21pemVVaSgpO1xyXG4gICAgICAgIGlmIChjdXN0b21VaSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jdXN0b21pemVVaVNlcnZpY2Uuc2V0Q3VzdG9taXplKGN1c3RvbVVpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5hZGRSb290Q29udGV4dChcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UsXHJcbiAgICAgICAgICAgIF9hY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLl90aXRsZS5zZXRUaXRsZSh0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0VGl0bGUoKSk7XHJcblxyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKCd2bicpO1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZSgndm4nKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0VGlueU1jZSgpO1xyXG5cclxuICAgICAgICBjb25zdCBjZmcgPSB0aGlzLmdldENvbmZpZ0F1dGhlbigpO1xyXG4gICAgICAgIC8vIENodXnhu4NuIHNhbmcgc2Vzc2lvbiBzdG9yYWdlLCBu4bq/dSDhu5VuIHRow6wgeMOzYSBkw7JuZyBuw6B5IMSRaVxyXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5zZXRTdG9yYWdlKHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldFN0b3JhZ2UoKSk7XHJcbiAgICAgICAgdGhpcy5pbmplY3RDb25maWcoY2ZnKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maWd1cmVXaXRoTmV3Q29uZmlnQXBpKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUgPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRPYmplY3RBbnkoJ3BlcnNvbmFsaXplJyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLnBlcnNvbmFsaXplKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnJlcGxheVN1YnNjcmliZShcclxuICAgICAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9MT0FERUQsXHJcbiAgICAgICAgICAgIGFzeW5jIHJzID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5zZXR1cFN5bmNDYWNoZUVudGl0eU1ldGFkYXRhKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcm91dGVyLmNvbmZpZ1xyXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKHJvdXRlID0+IHRoaXMuYWRkR3VhcmQocm91dGUpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maXJzdFRpbWVMb2dpbikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGzhuqduIMSR4bqndSDEkcSDbmcgbmjhuq1wIHRow6wgdsOgbyB0cmFuZyBt4bq3YyDEkeG7i25oXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHRoaXMucm9vdFZlcnNpb25EZXBsb3kpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgndmVyc2lvbkRlcGxveScsIHRoaXMucm9vdFZlcnNpb25EZXBsb3kpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGjDqm0gdsOgbyDEkeG7gyDEkcOhbmggZOG6pXUgbOG6p24gZOG6p3UgbG9naW4gPT4gxJHhu4MgeOG7rSBsw71cclxuICAgICAgICAgICAgICAgICAgICAvLyBVc2VyQSDEkWFnIOG7nyBtw6BuIGjDrG5oIDEgPT4gxJHEg25nIHh14bqldCA9PiDEkcSDbmcgbmjhuq1wIHbDoG8gdMOgaSBraG/huqNuIFVzZXJCIGtow7RuZyBjw7MgcXV54buBbiBtw6BuIGjDrG5oIDEgPT4gcmVkaXJlY3QgduG7gSBcIi9cIlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2N1cnJlbnRfdXNlcl9pbmZvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnZmlyc3RUaW1lTG9naW4nLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbGRVcmwgPSB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdjdXJyZW50VXJsJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbGRVcmwgJiYgb2xkVXJsICE9IHRvcC5sb2NhdGlvbi5ocmVmICsgJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnY3VycmVudFVybCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9IGAke29sZFVybH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjdXJyZW50VXJsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0UmVkaXJlY3QoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgdmVyc2lvbkRlcGxveSA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3ZlcnNpb25EZXBsb3knKTtcclxuICAgICAgICAgICAgICAgIC8vIGxldCB2ZXJzaW9uRnJvbUFwcGxpY2F0aW9uID0gdGhpcy5yb290VmVyc2lvbkRlcGxveTtcclxuICAgICAgICAgICAgICAgIC8vIGlmICh2ZXJzaW9uRnJvbUFwcGxpY2F0aW9uICYmIHZlcnNpb25EZXBsb3kgJiYgKCt2ZXJzaW9uRGVwbG95KSA8ICgrdmVyc2lvbkZyb21BcHBsaWNhdGlvbikpIHtcclxuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5zZXRJdGVtKCd2ZXJzaW9uRGVwbG95JywgdmVyc2lvbkZyb21BcHBsaWNhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5sb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBpbm5lZE5vdGVzKCk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLmluaXQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsUlNlcnZpY2Uuc3RhcnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lzdGVuY3lIdWInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Jyb2FkY2FzdE1lc3NhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckF1dGhvcml6ZUNhY2hlLmJpbmQodGhpcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLnN0YXJ0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vdGlmaWNhdGlvbkh1YicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVmcmVzaEZvclVwZGF0ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5hcHBDb2RlcyAmJiBkYXRhLmFwcENvZGVzLnNvbWUoeCA9PiB4LnRvVXBwZXJDYXNlKCkgPT0gdGhpcy5hcHBDb2RlLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLkZPUkNFX1JFTE9BRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRNb2R1bGVQYWdlcyA9IHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEucGVyc29uYWxpemUuZGVmYXVsdE1vZHVsZVBhZ2VzO1xyXG4gICAgICAgIGlmIChkZWZhdWx0TW9kdWxlUGFnZXMgJiYgZGVmYXVsdE1vZHVsZVBhZ2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0TGlzdEFwcCgpLmZvckVhY2goYXBwID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBkZWZhdWx0TW9kdWxlUGFnZXMuZmluZChwID0+IHAuY29kZSA9PSBhcHAuY29kZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFnZSAmJiBwYWdlLmRlZmF1bHRQYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBwLnVybCA9IHBhZ2UuZGVmYXVsdFBhZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICBkZWxldGUgSGFtbWVyLmRlZmF1bHRzLmNzc1Byb3BzLnVzZXJTZWxlY3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoJ1FVSUNLX05PVEVfUE9QVVAuQ0xPU0VfUE9QVVAnLCByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZWRpdEZvcm1Nb2RlbC5zaG93UXVpY2tOb3RlRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoJ0dPX0hPTUUnLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKTtcclxuICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKCdUT0dHTEVfTEFZT1VUJywgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgZGF0YSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkYXRhLm9ubHlTaG93TWFpbkNvbnRlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gZGF0YS5vbmx5U2hvd01haW5Db250ZW50O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZSgnTUFJTl9DT05URU5UX09OTFknLCBycyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHJzO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuU0hPV19SRUpFQ1RfQ09ORklSTSwgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1JlamVjdENvbmZpcm0gPSBkYXRhO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKTtcclxuICAgICAgICB0aGlzLnJvb3REYXRhID0gcm9vdC5kYXRhO1xyXG4gICAgICAgIHJvb3QuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEgPSB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0T2JqZWN0QXBwKHRoaXMuYXBwQ29kZSk7XHJcbiAgICAgICAgcm9vdC5kYXRhLmFwcE9yaWdpbiA9IHRoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXRFbmFibGVCYXNlSHJlZigpID8gYC8ke3Jvb3QuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEuY29kZS50b0xvd2VyQ2FzZSgpfS9gIDogJy8nO1xyXG4gICAgICAgIHJvb3QuZGF0YS5hbGxvd0Fub255bW91cyA9IHRoaXMuYWxsb3dBbm9ueW1vdXM7XHJcbiAgICAgICAgLy8gZ2V0IGN1cnJlbnQgVXNlclxyXG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlLnBvcHVsYXRlQ3VycmVudFVzZXIoKTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuTkVFRF9DTEVBUl9QRVJNSVNTSU9OX0NBQ0hFLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmNsZWFyUGVybWlzc2lvbkNhY2hlQWxsKCk7XHJcbiAgICAgICAgICAgIGlmICghcmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHRyb25nIGzDumMgY2xlYXIgY2FjaGUgcGjDom4gcXV54buBbicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpLmZpcmVSZXBsYXlFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX0xPQURFRCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULktFWV9ET1dOX0FSUk9XTEVGVCwgKGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMub2tCdXR0b24ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULktFWV9ET1dOX0FSUk9XUklHSFQsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmNhbmNlbEJ1dHRvbi5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuUEVSU09OQUxJWkVfVVBEQVRFRCwgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuc2hvd1F1aWNrTm90ZUJ1dHRvbk9uU2NyZWVuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBzZW5kIGN1cnJlbnQgdmVyc2lvbiB0byB0biBjbGllbnRcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgLy8gdGhpcy5fdG5DbGllbnRTZXJ2aWNlLnNlbmRDb21tYW5kKDxUbkNsaWVudENvbW1hbmQ+e1xyXG4gICAgICAgICAgICAvLyAgICAgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLlN5bmNWZXJpb25UbkNsaWVudCxcclxuICAgICAgICAgICAgLy8gICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgLy8gICAgICAgICB2ZXJzaW9uOiB0aGlzLmVudmlyb25tZW50LnNpZ25hbHIudmVyc2lvbixcclxuICAgICAgICAgICAgLy8gICAgICAgICBlbmRwb2ludDogdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW4uYXBwRG9tYWluICsgJy8nICsgdGhpcy5lbnZpcm9ubWVudC5zaWduYWxyLmVuZHBvaW50VXBkYXRlXHJcbiAgICAgICAgICAgIC8vICAgICB9LFxyXG4gICAgICAgICAgICAvLyAgICAga2V5OiB0aGlzLmVudmlyb25tZW50LnNpZ25hbHIuY2xpZW50S2V5XHJcbiAgICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG5cclxuXHJcbiAgICAgICAgLy8gdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2Uuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5DT01NT04uQ0xPU0VfRURJVF9GT1JNLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNob3dBZGROb3RlRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIC8vIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5yZXBsYXlTdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuUVVJQ0tfTk9URV9QSU4sICgpID0+IHtcclxuICAgICAgICAgICAgLy8gc2V0IHBpbm5lZCBub3RlIGxvY2F0aW9uIGFmdGVyIGNsaWNrIHBpblxyXG4gICAgICAgICAgICBpZiAodGhpcy5waW5uZWROb3Rlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC50b3AgLSByZWN0LmhlaWdodCksXHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogKHJlY3QubGVmdCksXHJcbiAgICAgICAgICAgICAgICAgICAgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBpbm5lZE5vdGVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UucmVwbGF5U3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULlFVSUNLX05PVEVfVU5QSU4sICgpID0+IHtcclxuICAgICAgICAgICAgLy8gc2V0IHBpbm5lZCBub3RlIGxvY2F0aW9uIGFmdGVyIGNsaWNrIHVwcGluXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBpbm5lZE5vdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgncGlubmVkTm90ZXNMb2NhdGlvbicsIHtcclxuICAgICAgICAgICAgICAgICAgICBib3R0b206ICh3aW5kb3cuaW5uZXJIZWlnaHQgLSByZWN0LnRvcCAtIHJlY3QuaGVpZ2h0KSxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAocmVjdC5sZWZ0KSxcclxuICAgICAgICAgICAgICAgICAgICBtaW5pbWl6ZTogdGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGlubmVkTm90ZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmVkaXRGb3JtTW9kZWwgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gc3Vic2NyaWJlIGNoYW5nZSBlbnRpdHkgbWV0YWRhdGFcclxuICAgICAgICB0aGlzLl9zdG9yYWdlVXBkYXRlZFNlcnZpY2Uuc3Vic2NyaWJlQ2hhbmdlZExvY2FsU3RvcmFnZSgnS0VZX0VOVElUWV9NRVREQVRBX1VQREFURUQnLCAocnMpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2VudGl0eSBtZXRhZGF0YSBjaGFuZ2VkJywgcnMpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyB0cmlnZ2VyIHVwZGF0ZSBzdG9yYWdlIGtleVxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5TSE9XX1dBSVRfQk9YLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgdGhpcy53YWl0aW5nID0gZGF0YS5zaG93O1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VXYWl0aW5nID0gWy4uLmRhdGEubWVzc2FnZV07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3JvdXRlci5ldmVudHMuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICBpZiAoeCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb290RGF0YS5odHRwUmVxdWVzdExpc3QgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBu4bq/dSBhbGxvdyBhbm9ueW1vdXMgdGjDrCBsb2FkIHJhIGPDoWMgcGjDom4gaOG7hyBjaG8gcGjDqXAgdsOgbyBraMO0bmcgY+G6p24gxJHEg25nIG5o4bqtcFxyXG4gICAgICAgIGlmICh0aGlzLmFsbG93QW5vbnltb3VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyc3RUaW1lTG9naW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5vbmx5U2hvd01haW5Db250ZW50ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHJvb3Quc3Vic2NyaWJlKCdMT0dJTicsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5sb2FkRGlzY292ZXJ5RG9jdW1lbnRBbmRUcnlMb2dpbigpLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFsbG93QW5vbnltb3VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5pbml0TG9naW5GbG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbml0Rm9yR2xvYmFsVGVtcGxhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gLy8gU2V0IGR5bmFtaWMgYWxsIGNoaWxkcmVuXHJcbiAgICAgICAgLy8gdGhpcy5jaGlsZHJlbi5mb3JFYWNoKHRtcCA9PiB7XHJcblxyXG4gICAgICAgIC8vIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21wb25lbnRTZXJ2aWNlLnNldFRlbXBsYXRlKCdxdWVyeUJ1aWxkZXJVc2VyUGlja2VyJywgdGhpcy50cGxRdWVyeUJ1aWxkZXJVc2VyUGlja2VyKTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRTZXJ2aWNlLnNldFRlbXBsYXRlKCdxdWVyeUJ1aWxkZXJDb0NhdVBpY2tlcicsIHRoaXMudHBsUXVlcnlCdWlsZGVyQ29DYXVQaWNrZXIpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFNlcnZpY2Uuc2V0VGVtcGxhdGUoJ3F1ZXJ5QnVpbGRlckF1dG9jb21wbGV0ZVBpY2tlcicsIHRoaXMudHBsUXVlcnlCdWlsZGVyQXV0b2NvbXBsZXRlUGlja2VyKTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRTZXJ2aWNlLnNldFRlbXBsYXRlKCdsaXN0Q29uZ1ZpZWNDb24nLCB0aGlzLnRwbExpc3RDb25nVmllY0Nvbik7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50U2VydmljZS5zZXRUZW1wbGF0ZSgnY3J1ZExpc3RTZXR0aW5nUm93JywgdGhpcy50cGxDcnVkTGlzdFNldHRpbmdSb3cpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFNlcnZpY2Uuc2V0VGVtcGxhdGUoJ2NydWRMaXN0U2V0dGluZycsIHRoaXMudHBsQ3J1ZExpc3RTZXR0aW5nKTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRTZXJ2aWNlLnNldFRlbXBsYXRlKCdjcnVkTGlzdEFkdmFuY2VTZWFyY2gnLCB0aGlzLnRwbENydWRMaXN0QWR2YW5jZVNlYXJjaCk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50U2VydmljZS5zZXRUZW1wbGF0ZSgnY3J1ZEZvcm1UYWJsZURldGFpbEZvcm0nLCB0aGlzLnRwbENydWRGb3JtVGFibGVEZXRhaWxGb3JtKTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRTZXJ2aWNlLnNldFRlbXBsYXRlKCdjcnVkRm9ybUNvbmdWaWVjRm9ybScsIHRoaXMudHBsQ3J1ZEZvcm1Db25nVmllY0Zvcm0pO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFNlcnZpY2Uuc2V0VGVtcGxhdGUoJ2NydWRGb3JtQWRkcmVzc0NvbXBvbmVudCcsIHRoaXMudHBsQ3J1ZEZvcm1BZGRyZXNzQ29tcG9uZW50KTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRTZXJ2aWNlLnNldFRlbXBsYXRlKCdjcnVkRm9ybUZpbGVNYW5hZ2VyQ29tcG9uZW50JywgdGhpcy50cGxDcnVkRm9ybUZpbGVNYW5hZ2VyQ29tcG9uZW50KTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRTZXJ2aWNlLnNldFRlbXBsYXRlKCdjcnVkRm9ybVNlcnZpY2VGaWxlVXBsb2FkQ29tcG9uZW50JywgdGhpcy50cGxDcnVkRm9ybVNlcnZpY2VGaWxlVXBsb2FkQ29tcG9uZW50KTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRTZXJ2aWNlLnNldFRlbXBsYXRlKCdjcnVkRm9ybUNvbmdWaWVjUGlja2VyQ29tcG9uZW50JywgdGhpcy50cGxDcnVkRm9ybUNvbmdWaWVjUGlja2VyQ29tcG9uZW50KTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRTZXJ2aWNlLnNldFRlbXBsYXRlKCdjcnVkRm9ybVZhbkJhblBpY2tlckNvbXBvbmVudCcsIHRoaXMudHBsQ3J1ZEZvcm1WYW5CYW5QaWNrZXJDb21wb25lbnQpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFNlcnZpY2Uuc2V0VGVtcGxhdGUoJ3RpbnlNY2VGaWxlUGlja2VyRGlhbG9nJywgdGhpcy50cGxUaW55TWNlRmlsZVBpY2tlckRpYWxvZyk7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50U2VydmljZS5zZXRUZW1wbGF0ZSgndGlueU1jZUFkZE5ld3MnLCB0aGlzLnRwbFRpbnlNY2VBZGROZXdzKTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRTZXJ2aWNlLnNldFRlbXBsYXRlKCdkcm9wZG93blF1aWNrQWRkRm9ybScsIHRoaXMudHBsRHJvcGRvd25RdWlja0FkZEZvcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLl9jZC5kZXRhY2goKTtcclxuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcXVpY2tOb3RlQnRMb2NhdGlvbiA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldE9iamVjdEFueSgncXVpY2tOb3RlQnRMb2NhdGlvbicpO1xyXG4gICAgICAgICAgICBpZiAocXVpY2tOb3RlQnRMb2NhdGlvbiAmJiB0aGlzLnF1aWNrTm90ZUJ0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVpY2tOb3RlQnRMb2NhdGlvbi5ib3R0b20gPCB3aW5kb3cuaW5uZXJIZWlnaHQgLSA1MCAmJiBxdWlja05vdGVCdExvY2F0aW9uLnJpZ2h0IDwgd2luZG93LmlubmVyV2lkdGggLSA1MCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQubmF0aXZlRWxlbWVudC5zdHlsZS5ib3R0b20gPSBxdWlja05vdGVCdExvY2F0aW9uLmJvdHRvbSArICdweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdC5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gcXVpY2tOb3RlQnRMb2NhdGlvbi5yaWdodCArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZS5zaG93UXVpY2tOb3RlQnV0dG9uT25TY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnF1aWNrTm90ZUJ0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5wZXJzb25hbGl6ZS5zaG93UXVpY2tOb3RlQnV0dG9uT25TY3JlZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcGlubmVkTm90ZXNMb2NhdGlvbiA9IHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLmdldE9iamVjdEFueSgncGlubmVkTm90ZXNMb2NhdGlvbicpO1xyXG4gICAgICAgICAgICBpZiAocGlubmVkTm90ZXNMb2NhdGlvbiAmJiB0aGlzLnBpbm5lZE5vdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBpbm5lZE5vdGVzTG9jYXRpb24uYm90dG9tIDwgd2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5oZWlnaHQgJiYgcGlubmVkTm90ZXNMb2NhdGlvbi5sZWZ0IDwgd2luZG93LmlubmVyV2lkdGggLSAyNTApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVzLm5hdGl2ZUVsZW1lbnQuc3R5bGUuYm90dG9tID0gcGlubmVkTm90ZXNMb2NhdGlvbi5ib3R0b20gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gcGlubmVkTm90ZXNMb2NhdGlvbi5sZWZ0ICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVzTWluaW1pemVTdGF0dXMgPSBwaW5uZWROb3Rlc0xvY2F0aW9uLm1pbmltaXplO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZURhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5waW5uZWROb3Rlc01pbmltaXplU3RhdHVzID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5waW5uZWROb3RlRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLnRpdGxlUGFkZGluZ0JvdHRvbSA9ICcwcHgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLmNvbnRlbnREaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0udGl0bGVQYWRkaW5nQm90dG9tID0gJzZweCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0uY29udGVudERpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMucGlubmVkTm90ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZXMubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMDApO1xyXG5cclxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCk7XHJcbiAgICAgICAgcm9vdC5yZXBvcnRRdWV1ZSA9IHRoaXMucmVwb3J0UXVldWU7XHJcbiAgICAgICAgdGhpcy5tZW51TW9kZWwgPSB0aGlzLl9tZW51U2VydmljZS5nZXRNZW51SXRlbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0Rm9yR2xvYmFsVGVtcGxhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5jb25nVmllY1NldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XHJcbiAgICAgICAgdGhpcy5jb25nVmllY1NldHRpbmcuaXNXb3JrZmxvd1RyZWUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHRSZWRpcmVjdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBjb25zdCBhcHBTZXR0aW5nID0gdGhpcy5fYXBwbGljYXRpb25Db250ZXh0LmdldFJvb3RDb250ZXh0KCkuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGE7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRSZWRpcmVjdCA9IHRoaXMuX2Vudmlyb25tZW50U2VydmljZS5nZXREZWZhdWx0UmVkaXJlY3QoKTtcclxuICAgICAgICAgICAgaWYgKCFhcHBTZXR0aW5nICYmIGRlZmF1bHRSZWRpcmVjdCAmJiB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0SXNQcm9kdWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJlZGlyZWN0XHJcbiAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBhdGhUb0NoZWNrID0gdGhpcy5fZW52aXJvbm1lbnRTZXJ2aWNlLmdldEVuYWJsZUJhc2VIcmVmKCkgPyBgLyR7YXBwU2V0dGluZy5jb2RlLnRvTG93ZXJDYXNlKCl9L2AgOiAnLyc7XHJcblxyXG4gICAgICAgICAgICBpZiAoKGxvY2F0aW9uLnBhdGhuYW1lID09PSAnLycgfHwgbG9jYXRpb24ucGF0aG5hbWUgPT09ICcnIHx8IGxvY2F0aW9uLnBhdGhuYW1lID09PSBwYXRoVG9DaGVjaykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25seVNob3dNYWluQ29udGVudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3VzZXIgbm90IHZhbGlkIHRva2VuJywgdGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnYWNjZXNzX3Rva2VuJykpO1xyXG4gICAgICAgICAgICAvLyBUT0RPOiBOYW1OSCBY4butIGzDvSB04bqhbSBjaG8gdHLGsOG7nW5nIGjhu6NwIMSRxINuZyBuaOG6rXAgbOG6p24gxJHhuqd1IG5oxrBuZyBjaOG6oXkgxJHhur9uIMSRw6J5IG3DoCBhY2Nlc3MgdG9rZW4gduG6q24ga2jDtG5nIGjhu6NwIGzhu4dcclxuICAgICAgICAgICAgLy8gWOG7rSBsw70gdHJp4buHdCDEkeG7gyBi4bqxbmcgY8OhY2ggdMOsbSBQQSBi4bqvdCBldmVudCBj4bunYSBhbmd1bGFyMiBvaWRjIMSR4buDIHjhu60gbMO9IHRyxrDhu5tjIGtoaSDEkeG6v24gYsaw4bubYyBkZWZhdWx0IHJlZGlyZWN0XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdG9wLmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGV0ZWN0Q2hhbmdlcygpIHtcclxuICAgICAgICBpZiAodGhpcy5fY2RbJ2Rlc3Ryb3llZCddKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdleGNlcHRpb24gb24gZGV0ZWN0IGNoYW5nZScsIGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSwgMTApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xlYXJBdXRob3JpemVDYWNoZSgpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhzZXNzaW9uU3RvcmFnZSlcclxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IC9eQVVUSE9SSVpBVElPTi8udGVzdChpdGVtKSlcclxuICAgICAgICAgICAgLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmb2N1c1RyYXAoZXZlbnQsIGRpcmVjdCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYgKGRpcmVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLm9rQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdFRpbnlNY2UoKSB7XHJcbiAgICAgICAgdGlueW1jZS5iYXNlVVJMID0gJy9hc3NldHMvdmVuZG9yL3RpbnltY2UnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29uZmlndXJlV2l0aE5ld0NvbmZpZ0FwaSgpIHtcclxuICAgICAgICAvLyBmb3IgZmlyc3QgbG9naW5cclxuICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuZXZlbnRzLnN1YnNjcmliZShldnQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBldnQudHlwZSA9PSAndG9rZW5fcmVjZWl2ZWQnXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFudXBMb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhlblNlcnZpY2UuY2xlYW51cFNlc3Npb25TdG9yYWdlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlVXBkYXRlZFNlcnZpY2UuY2xlYW51cFN0b3JhZ2VTZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlUmVwbGF5RXZlbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLlJPT1QuVVNFUl9SRUFEWSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvZ2luXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChldnQudHlwZSA9PT0gJ3Rva2VuX2V4cGlyZXMnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UudHJ5TG9naW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChldnQudHlwZSA9PT0gJ2xvZ291dCcpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNsZWFudXAgc3RvcmFnZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXV0aGVuU2VydmljZS5jbGVhbnVwTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmNsZWFudXBTZXNzaW9uU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcmFnZVVwZGF0ZWRTZXJ2aWNlLmNsZWFudXBTdG9yYWdlU2VydmljZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLnJldm9rZVRva2VuQW5kTG9nb3V0KG51bGwsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09ICdzZXNzaW9uX3Rlcm1pbmF0ZWQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjdXJyZW50X3VzZXJfaW5mbycpO1xyXG4gICAgICAgICAgICAgICAgLy8gbG9nb3V0XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoZW5TZXJ2aWNlLmxvZ291dCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09ICdkaXNjb3ZlcnlfZG9jdW1lbnRfbG9hZGVkJykge1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV2dC50eXBlID09ICd0b2tlbl9yZWZyZXNoZWQnKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbG9naW4gZXZlbnQnLCBldnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX29hdXRoU2VydmljZS5sb2FkRGlzY292ZXJ5RG9jdW1lbnQoKTtcclxuICAgICAgICBpZiAodGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlUmVwbGF5RXZlbnQoXHJcbiAgICAgICAgICAgICAgICBDb21DdHhDb25zdGFudHMuUk9PVC5VU0VSX1JFQURZLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2dpblxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLnNldHVwQXV0b21hdGljU2lsZW50UmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdjdXJyZW50VXJsJykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ2N1cnJlbnRVcmwnLCB0b3AubG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmxvYWREaXNjb3ZlcnlEb2N1bWVudEFuZFRyeUxvZ2luKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dBbm9ueW1vdXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2F1dGhTZXJ2aWNlLmluaXRMb2dpbkZsb3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dBbm9ueW1vdXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuaW5pdExvZ2luRmxvdygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHThu5VuZyBo4bujcCBiaeG6v24gcG9zaXRpb25cclxuICAgICAgICBpZiAodGhpcy5fc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnbXlpdGVtJykpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZmlyZUV2ZW50KCdQT1NJVElPTl9MT0FERUQnLCB0aGlzLl9zdG9yYWdlU2VydmljZS5nZXRJdGVtKCdteWl0ZW0nKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBn4buNaSBhcGkgxJHhu4MgdOG7lW5nIGjhu6NwIGThu68gbGl1ZWplLi4uXHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmZpcmVFdmVudCgnUE9TSVRJT05fTE9BREVEJywge30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluamVjdENvbmZpZyhjZmc6IEF1dGhDb25maWcpIHtcclxuICAgICAgICB0aGlzLl9vYXV0aFNlcnZpY2UuY29uZmlndXJlKGNmZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDb25maWdBdXRoZW4oKSB7XHJcbiAgICAgICAgY29uc3QgY2ZnID0gdGhpcy5fZW52aXJvbm1lbnRTZXJ2aWNlLmdldEF1dGhDb25maWcoKTtcclxuICAgICAgICBjb25zdCB0eXBlTG9naW4gPSB0aGlzLl9lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXV0aGVudGljYXRpb25UeXBlKCk7XHJcbiAgICAgICAgaWYgKHR5cGVMb2dpbiAmJiB0eXBlTG9naW4uaW5jbHVkZXMoJ2ltcGxpY2l0JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNmZztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNmZy5yZXNwb25zZVR5cGUgPSAnY29kZSc7XHJcbiAgICAgICAgICAgIHJldHVybiBjZmc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZU1lbnVBY3RpdmUodG9wKSB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxCYXJNZW51LnNjcm9sbFRvVG9wKHRvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVpY2tOb3RlRHJvcHBlZChldmVudCkge1xyXG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnF1aWNrTm90ZUJ0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgdGhpcy5fc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgncXVpY2tOb3RlQnRMb2NhdGlvbicsIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgYm90dG9tOiAod2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC50b3AgLSA1MCksIHJpZ2h0OiAod2luZG93LmlubmVyV2lkdGggLSByZWN0LmxlZnQgLSA1MClcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlTW92aW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVTdGFydGVkKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVNb3ZpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVByZXNzKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVQcmVzc2luZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5xdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKHRydWUpO1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLnN1YnNjcmliZU9uY2UoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuQk9EWV9NT1VTRV9ET1dOLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlVG9nZ2xlU3ViQnV0dG9ucyhmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVpY2tOb3RlUHJlc3NVcChldmVudCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5kYXRhLmZsYWdzLnF1aWNrTm90ZVByZXNzaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVBZGROb3RlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5mbGFncy5xdWlja05vdGVNb3ZpbmdcclxuICAgICAgICAgICAgJiYgIXRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucXVpY2tOb3RlUHJlc3NpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dFNlcnZpY2UuZGF0YS5ub3RlRGF0YU1vZGVsID0gPGFueT57XHJcbiAgICAgICAgICAgICAgICBlZGl0Rm9ybU1vZGVsOiA8YW55Pnsgc2hvd1F1aWNrTm90ZUZvcm06IHRydWUsIHBvcHVwU2l6ZTogPGFueT57fSwgZGF0YTogPGFueT57fSB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZWRpdEZvcm1Nb2RlbC5zaG93UXVpY2tOb3RlRm9ybSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVNob3dBbGxOb3RlcygpIHtcclxuICAgICAgICB0aGlzLnF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnMoZmFsc2UpO1xyXG4gICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7dGhpcy5nZXRBcHBTd2l0Y2hlclVybCgndXNlcicpfS9tYWluL3F1aWNrLW5vdGVgO1xyXG4gICAgfVxyXG5cclxuICAgIHF1aWNrTm90ZVNob3dTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLnF1aWNrTm90ZVRvZ2dsZVN1YkJ1dHRvbnMoZmFsc2UpO1xyXG4gICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gYCR7dGhpcy5nZXRBcHBTd2l0Y2hlclVybCgndXNlcicpfS9tYWluL3BlcnNvbmFsaXplYDtcclxuICAgIH1cclxuXHJcbiAgICBxdWlja05vdGVUb2dnbGVTdWJCdXR0b25zKHNob3cpIHtcclxuICAgICAgICBpZiAoc2hvdykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0MS5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzU1cHgnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDIubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICcxMDBweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrTm90ZUJ0MS5uYXRpdmVFbGVtZW50LnN0eWxlLnJpZ2h0ID0gJzY1cHgnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDIubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICcxMjBweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucXVpY2tOb3RlQnQxLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmlnaHQgPSAnNXB4JztcclxuICAgICAgICAgICAgdGhpcy5xdWlja05vdGVCdDIubmF0aXZlRWxlbWVudC5zdHlsZS5yaWdodCA9ICc1cHgnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBQaW5uZWQgTm90ZVxyXG4gICAgZ2V0UGlubmVkTm90ZXMoKSB7XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwaW5uZWROb3Rlc0Ryb3BwZWQoZXZlbnQpIHtcclxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLFxyXG4gICAgICAgICAgICBsZWZ0OiAocmVjdC5sZWZ0KSxcclxuICAgICAgICAgICAgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucGlubmVkTm90ZXNNb3ZpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG5cclxuICAgIHBpbm5lZE5vdGVzU3RhcnRlZChldmVudCkge1xyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudENvbnRleHRTZXJ2aWNlLmRhdGEuZmxhZ3MucGlubmVkTm90ZXNNb3ZpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHBpbm5lZE5vdGVzTWluaW1pemUoZGF0YTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9ICFkYXRhO1xyXG5cclxuICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5waW5uZWROb3Rlcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIHRoaXMuX3N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Bpbm5lZE5vdGVzTG9jYXRpb24nLCBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGJvdHRvbTogKHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QudG9wIC0gcmVjdC5oZWlnaHQpLFxyXG4gICAgICAgICAgICBsZWZ0OiAocmVjdC5sZWZ0KSxcclxuICAgICAgICAgICAgbWluaW1pemU6IHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZURhdGEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cyA9PSB0cnVlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5waW5uZWROb3RlRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS50aXRsZVBhZGRpbmdCb3R0b20gPSAnMHB4JztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZE5vdGVEYXRhW2tleV0uY29udGVudERpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnBpbm5lZE5vdGVEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWROb3RlRGF0YVtrZXldLnRpdGxlUGFkZGluZ0JvdHRvbSA9ICc2cHgnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkTm90ZURhdGFba2V5XS5jb250ZW50RGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5QaW5Ob3RlKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHJvd0RhdGEuaXNQaW5uZWQgPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY29tcGxldGVOb3RlKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHJvd0RhdGEuaXNDb21wbGV0ZWQgPSB0cnVlO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpbkNvbXBsZXRlTm90ZShyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICByb3dEYXRhLmlzQ29tcGxldGVkID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlVGFiV2luZG93KCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjbG9zZVRhYldpbmRvdycpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFwcFN3aXRjaGVyVXJsKGFwcENvZGUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZW52aXJvbm1lbnRTZXJ2aWNlLmdldEh0dHBDbGllbnRFbmRwb2ludChhcHBDb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHVzZS1saWZlLWN5Y2xlLWludGVyZmFjZVxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQoMSk7XHJcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcclxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0U2VydmljZS5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuREVTVFJPWV9UQVNLX0RFVEFJTF9DT01QT05FTlQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNlYXJjaCBtZW51XHJcbiAgICBvblNlYXJjaE1lbnUoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaE1lbnVSZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKCFldmVudCB8fCAhZXZlbnQucXVlcnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hNZW51UmVzdWx0ID0gdGhpcy5nZXRTZWFyY2hNZW51UmVzdWx0KGV2ZW50LnF1ZXJ5KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTZWFyY2hNZW51UmVzdWx0KGtleXdvcmQpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWdyb3VwU2VhcmNoTWVudVJlc3VsdChrZXl3b3JkLCB0aGlzLm1lbnVNb2RlbCwgcmVzdWx0KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlZ3JvdXBTZWFyY2hNZW51UmVzdWx0KGtleXdvcmQ6IHN0cmluZywgbGlzdFRvR2V0OiBhbnlbXSwgbGlzdFRvUHVzaDogYW55W10pIHtcclxuICAgICAgICBsaXN0VG9HZXQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbXMgJiYgaXRlbS5pdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVncm91cFNlYXJjaE1lbnVSZXN1bHQoa2V5d29yZCwgaXRlbS5pdGVtcywgbGlzdFRvUHVzaCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoKHRoaXMubm9uQWNjZW50VmlldG5hbWVzZShpdGVtLmxhYmVsKS5pbmRleE9mKHRoaXMubm9uQWNjZW50VmlldG5hbWVzZShrZXl3b3JkKSkgPj0gMCkpIHtcclxuICAgICAgICAgICAgICAgIGxpc3RUb1B1c2gucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBub25BY2NlbnRWaWV0bmFtZXNlKHN0cikge1xyXG4gICAgICAgIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIC8vICAgICBXZSBjYW4gYWxzbyB1c2UgdGhpcyBpbnN0ZWFkIG9mIGZyb20gbGluZSAxMSB0byBsaW5lIDE3XHJcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEUwfFxcdTAwRTF8XFx1MUVBMXxcXHUxRUEzfFxcdTAwRTN8XFx1MDBFMnxcXHUxRUE3fFxcdTFFQTV8XFx1MUVBRHxcXHUxRUE5fFxcdTFFQUJ8XFx1MDEwM3xcXHUxRUIxfFxcdTFFQUZ8XFx1MUVCN3xcXHUxRUIzfFxcdTFFQjUvZywgXCJhXCIpO1xyXG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDBFOHxcXHUwMEU5fFxcdTFFQjl8XFx1MUVCQnxcXHUxRUJEfFxcdTAwRUF8XFx1MUVDMXxcXHUxRUJGfFxcdTFFQzd8XFx1MUVDM3xcXHUxRUM1L2csIFwiZVwiKTtcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAwRUN8XFx1MDBFRHxcXHUxRUNCfFxcdTFFQzl8XFx1MDEyOS9nLCBcImlcIik7XHJcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMEYyfFxcdTAwRjN8XFx1MUVDRHxcXHUxRUNGfFxcdTAwRjV8XFx1MDBGNHxcXHUxRUQzfFxcdTFFRDF8XFx1MUVEOXxcXHUxRUQ1fFxcdTFFRDd8XFx1MDFBMXxcXHUxRUREfFxcdTFFREJ8XFx1MUVFM3xcXHUxRURGfFxcdTFFRTEvZywgXCJvXCIpO1xyXG4gICAgICAgIC8vICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFx1MDBGOXxcXHUwMEZBfFxcdTFFRTV8XFx1MUVFN3xcXHUwMTY5fFxcdTAxQjB8XFx1MUVFQnxcXHUxRUU5fFxcdTFFRjF8XFx1MUVFRHxcXHUxRUVGL2csIFwidVwiKTtcclxuICAgICAgICAvLyAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTFFRjN8XFx1MDBGRHxcXHUxRUY1fFxcdTFFRjd8XFx1MUVGOS9nLCBcInlcIik7XHJcbiAgICAgICAgLy8gICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMTExL2csIFwiZFwiKTtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw6B8w6F84bqhfOG6o3zDo3zDonzhuqd84bqlfOG6rXzhuql84bqrfMSDfOG6sXzhuq984bq3fOG6s3zhurUvZywgJ2EnKTtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvw6h8w6l84bq5fOG6u3zhur18w6p84buBfOG6v3zhu4d84buDfOG7hS9nLCAnZScpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/DrHzDrXzhu4t84buJfMSpL2csICdpJyk7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8OyfMOzfOG7jXzhu498w7V8w7R84buTfOG7kXzhu5l84buVfOG7l3zGoXzhu5184bubfOG7o3zhu5984buhL2csICdvJyk7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL8O5fMO6fOG7pXzhu6d8xal8xrB84burfOG7qXzhu7F84butfOG7ry9nLCAndScpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC/hu7N8w7184bu1fOG7t3zhu7kvZywgJ3knKTtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvxJEvZywgJ2QnKTtcclxuICAgICAgICAvLyBTb21lIHN5c3RlbSBlbmNvZGUgdmlldG5hbWVzZSBjb21iaW5pbmcgYWNjZW50IGFzIGluZGl2aWR1YWwgdXRmLTggY2hhcmFjdGVyc1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXHUwMzAwfFxcdTAzMDF8XFx1MDMwM3xcXHUwMzA5fFxcdTAzMjMvZywgJycpOyAvLyBIdXnhu4FuIHPhuq9jIGjhu49pIG5nw6MgbuG6t25nXHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcdTAyQzZ8XFx1MDMwNnxcXHUwMzFCL2csICcnKTsgLy8gw4IsIMOKLCDEgiwgxqAsIMavXHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH1cclxuXHJcbiAgICBvblNlbGVjdE1lbnVTdWdnZXN0aW9uKG1lbnVJdGVtT2JqKSB7XHJcbiAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwobWVudUl0ZW1PYmoucm91dGVyTGluayk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hNZW51SW5wdXQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zaG93UGlubmVkTWVudSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQmx1clNlYXJjaE1lbnVJbnB1dChldmVudCkge1xyXG4gICAgICAgIHRoaXMuaXNTZWFyY2hNZW51SW5wdXRGb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5QaW5uZWRNZW51KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2VhcmNoTWVudUlucHV0ID0gJyc7XHJcbiAgICAgICAgdGhpcy5zaG93UGlubmVkTWVudSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRm9jdXNTZWFyY2hNZW51SW5wdXQoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmlzU2VhcmNoTWVudUlucHV0Rm9jdXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd1Bpbm5lZE1lbnUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleXByZXNzJywgWyckZXZlbnQnXSlcclxuICAgIGhhbmRsZVNob3dQb3B1cFBlcm1pc3Npb25VdGlscyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLmtleVByZXNzUGVybWlzc2lvblV0aWxzW3RoaXMuY3VycmVudEtleVByZXNzSW5kZXhdID09PSBldmVudC5rZXkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEtleVByZXNzSW5kZXggPT0gdGhpcy5rZXlQcmVzc1Blcm1pc3Npb25VdGlscy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMucm9vdERhdGEuc2hvd1Blcm1pc3Npb25VdGlscyA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50S2V5UHJlc3NJbmRleCsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRLZXlQcmVzc0luZGV4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRHdWFyZChyb3V0ZTogUm91dGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAocm91dGUucGF0aCA9PT0gJycgfHwgcm91dGUucGF0aCA9PT0gJy8nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChyb3V0ZS5sb2FkQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIHJvdXRlLmNhbkFjdGl2YXRlQ2hpbGQgPSByb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkID8gcm91dGUuY2FuQWN0aXZhdGVDaGlsZCA6IFtHZW5lcmljR3VhcmRDaGlsZFNlcnZpY2VdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcm91dGUuY2FuQWN0aXZhdGUgPSByb3V0ZS5jYW5BY3RpdmF0ZSA/IHJvdXRlLmNhbkFjdGl2YXRlIDogW0dlbmVyaWNHdWFyZFNlcnZpY2VdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJwYWdlTG9hZGVkXCIgW3N0eWxlLmRpc3BsYXldPVwicGFnZUxvYWRlZCA/ICcnIDogJ25vbmUnXCIgY2xhc3M9XCJsYXlvdXQtd3JhcHBlclwiXHJcbiAgICAoY2xpY2spPVwiX2NvbW1vblNlcnZpY2Uub25MYXlvdXRDbGljaygpXCIgW25nQ2xhc3NdPVwieydtZW51LWxheW91dC1zdGF0aWMnOiAhX2NvbW1vblNlcnZpY2UuaXNPdmVybGF5KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVudS1sYXlvdXQtb3ZlcmxheSc6IF9jb21tb25TZXJ2aWNlLmlzT3ZlcmxheSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xheW91dC1tZW51LW92ZXJsYXktYWN0aXZlJzogX2NvbW1vblNlcnZpY2Uub3ZlcmxheU1lbnVBY3RpdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVudS1sYXlvdXQtaG9yaXpvbnRhbCc6IF9jb21tb25TZXJ2aWNlLmlzSG9yaXpvbnRhbCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lbnUtbGF5b3V0LXNsaW0nOiBfY29tbW9uU2VydmljZS5pc1NsaW0oKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYXlvdXQtbWVudS1zdGF0aWMtZGVza3RvcC1pbmFjdGl2ZSc6IF9jb21tb25TZXJ2aWNlLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGF5b3V0LW1lbnUtc3RhdGljLWRlc2t0b3AtYWN0aXZlJzogIV9jb21tb25TZXJ2aWNlLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGF5b3V0LW1lbnUtc3RhdGljLW1vYmlsZS1pbmFjdGl2ZSc6ICFfY29tbW9uU2VydmljZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xheW91dC1tZW51LXN0YXRpYy1tb2JpbGUtYWN0aXZlJzogX2NvbW1vblNlcnZpY2Uuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYXlvdXQtbWVudS1zdGF0aWMtaW5hY3RpdmUnOiBfY29tbW9uU2VydmljZS5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xheW91dC1tZW51LXN0YXRpYy1hY3RpdmUnOiBfY29tbW9uU2VydmljZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlfVwiPlxyXG5cclxuICAgIDxhcHAtdG9wYmFyICpuZ0lmPVwiX2dsb2JhbFNlcnZpY2UuZ2V0SGVhZGVyU3RhdGUoKVwiPjwvYXBwLXRvcGJhcj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiX2dsb2JhbFNlcnZpY2UuZ2V0TWVudVN0YXRlKClcIiBjbGFzcz1cImxheW91dC1tZW51LWNvbnRhaW5lclwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydsYXlvdXQtbWVudS1kYXJrJzpfY29tbW9uU2VydmljZS5kYXJrTWVudX1cIiAoY2xpY2spPVwiX2NvbW1vblNlcnZpY2Uub25NZW51Q2xpY2soJGV2ZW50KVwiPlxyXG4gICAgICAgIDxhcHAtcm9vdC1tZW51PjwvYXBwLXJvb3QtbWVudT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LW1lbnUtYmxvY2tcIj5cclxuICAgICAgICAgICAgPHRuLWN1c3RvbS1zY3JvbGxiYXIgI3Njcm9sbGJhciBbc3R5bGVdPVwieydwYWRkaW5nLXRvcCc6ICcxNnB4J31cIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtaW5saW5lLXByb2ZpbGUgKm5nSWY9XCJfY29tbW9uU2VydmljZS5wcm9maWxlTW9kZSA9PSAnaW5saW5lJyAmJiFfY29tbW9uU2VydmljZS5pc0hvcml6b250YWwoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtaW5saW5lLXByb2ZpbGU+XHJcbiAgICAgICAgICAgICAgICA8YXBwLW1lbnUgW3Jlc2V0XT1cIl9jb21tb25TZXJ2aWNlLnJlc2V0TWVudVwiIChvbk1lbnVBY3RpdmUpPVwiaGFuZGxlTWVudUFjdGl2ZSgkZXZlbnQpXCI+PC9hcHAtbWVudT5cclxuICAgICAgICAgICAgPC90bi1jdXN0b20tc2Nyb2xsYmFyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYXJlYSBsYXlvdXQtbWVudS1zZWFyY2gtYXJlYVwiPlxyXG4gICAgICAgICAgICA8cC1hdXRvQ29tcGxldGUgWyhuZ01vZGVsKV09XCJzZWFyY2hNZW51SW5wdXRcIiBbc3R5bGVdPVwieyd3aWR0aCc6JzEwMCUnfVwiIFtzdWdnZXN0aW9uc109XCJzZWFyY2hNZW51UmVzdWx0XCJcclxuICAgICAgICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJvblNlYXJjaE1lbnUoJGV2ZW50KVwiIFthdXRvSGlnaGxpZ2h0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUw6xtIGtp4bq/bSBjaOG7qWMgbsSDbmcnIHwgdHJhbnNsYXRlXCIgW2RlbGF5XT1cIjIwMFwiIFtzY3JvbGxIZWlnaHRdPVwiJzQwMHB4J1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIFtyZWFkb25seV09XCIhKG1lbnVNb2RlbCAmJiBtZW51TW9kZWwubGVuZ3RoKVwiXHJcbiAgICAgICAgICAgICAgICAob25TZWxlY3QpPVwib25TZWxlY3RNZW51U3VnZ2VzdGlvbigkZXZlbnQpXCIgZmllbGQ9XCJsYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlubmVySFRNTD1cInt7IGl0ZW0ubGFiZWwgfCBoaWdobGlnaHQgOiBzZWFyY2hNZW51SW5wdXR9fVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLXNlYXJjaFwiPjxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgW2NsYXNzXT1cIidsYXlvdXQtbWFpbidcIiBbbmdDbGFzc109XCJ7J25vLWhlYWRlcic6IF9nbG9iYWxTZXJ2aWNlLmdldEhlYWRlclN0YXRlKCkgPyBmYWxzZSA6IHRydWV9XCI+XHJcbiAgICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1tYXNrXCI+PC9kaXY+XHJcbiAgICA8ZGl2ICNxdWlja05vdGVCdCAqbmdJZj1cIiFvbmx5U2hvd01haW5Db250ZW50ICYmIHNob3dRdWlja05vdGVcIiBjbGFzcz1cInF1aWNrLW5vdGUtYnV0dG9uLWhvbGRlclwiIGNka0RyYWdcclxuICAgICAgICBjZGtEcmFnQm91bmRhcnk9XCIubGF5b3V0LXdyYXBwZXJcIiBvbmNvbnRleHRtZW51PVwicmV0dXJuIGZhbHNlXCIgKGNka0RyYWdFbmRlZCk9XCJxdWlja05vdGVEcm9wcGVkKCRldmVudClcIlxyXG4gICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJxdWlja05vdGVTdGFydGVkKCRldmVudClcIj5cclxuICAgICAgICA8YSAjcXVpY2tOb3RlQnQxIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImFsbC1ub3RlLWJ1dHRvblwiIHRhYmluZGV4PVwiMFwiIChjbGljayk9XCJxdWlja05vdGVTaG93QWxsTm90ZXMoKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zdGlja3ktbm90ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgPGEgI3F1aWNrTm90ZUJ0MiBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJzZXR0aW5nLW5vdGUtYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgKGNsaWNrKT1cInF1aWNrTm90ZVNob3dTZXR0aW5ncygpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNvZ1wiPjwvaT48L2E+XHJcbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIChwcmVzcyk9XCJxdWlja05vdGVQcmVzcygkZXZlbnQpXCIgKHByZXNzdXApPVwicXVpY2tOb3RlUHJlc3NVcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJxdWljay1ub3RlLWJ1dHRvblwiIHRhYmluZGV4PVwiMFwiIChjbGljayk9XCJxdWlja05vdGVBZGROb3RlKClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1c1wiPjwvaT48L2E+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgI3Bpbm5lZE5vdGVzICpuZ0lmPVwiIW9ubHlTaG93TWFpbkNvbnRlbnRcIiBjbGFzcz1cInBpbm5lZC1ub3Rlcy1ob2xkZXJcIiBjZGtEcmFnIGNka0RyYWdCb3VuZGFyeT1cIi5sYXlvdXQtd3JhcHBlclwiXHJcbiAgICAgICAgb25jb250ZXh0bWVudT1cInJldHVybiBmYWxzZVwiIChjZGtEcmFnRW5kZWQpPVwicGlubmVkTm90ZXNEcm9wcGVkKCRldmVudClcIlxyXG4gICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJwaW5uZWROb3Rlc1N0YXJ0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwaW5uZWQtbm90ZXMgdWktZ1wiIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1c1wiIGNsYXNzPVwicGlubmVkLW5vdGVzLW1pbmltaXplLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGlubmVkTm90ZXNNaW5pbWl6ZShwaW5uZWROb3Rlc01pbmltaXplU3RhdHVzKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS13aW5kb3ctbWF4aW1pemVcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGlubmVkTm90ZXNNYXhpbWl6ZVN0YXR1c1wiIGNsYXNzPVwiIHBpbm5lZC1ub3Rlcy1taW5pbWl6ZS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBpbm5lZE5vdGVzTWluaW1pemUocGlubmVkTm90ZXNNaW5pbWl6ZVN0YXR1cylcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktd2luZG93LW1pbmltaXplXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbm90ZSBvZiBwaW5uZWROb3RlRGF0YVwiIGNsYXNzPVwicGlubmVkLW5vdGUgdWktZy0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpbm5lZC1ub3RlLWhlYWRlci1saW5lXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwibm90ZS5jb2xvckNvZGVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpbm5lZC1ub3RlLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpbm5lZC1ub3RlLWxpbmUtdGl0bGVcIiBbc3R5bGUucGFkZGluZ0JvdHRvbV09XCJub3RlLnRpdGxlUGFkZGluZ0JvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlubmVkLW5vdGUtaGVhZGVyLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpbm5lZC1ub3RlLWhlYWRlci10aW1lXCI+e3tub3RlLmNyZWF0ZWQgfCBkYXRlOiAnZGQvTU0nfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9sYXlvdXQvaW1hZ2VzL2ljby91bnBpbi0xLmljb1wiIGNsYXNzPVwicGlubmVkLW5vdGUtaGVhZGVyLWJ1dHRvbi11bnBpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVuUGluTm90ZShub3RlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhbm90ZS5pc0NvbXBsZXRlZFwiIGNsYXNzPVwiZmFyIGZhLWZsYWcgcGlubmVkLW5vdGUtaGVhZGVyLWJ1dHRvbi1jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbXBsZXRlTm90ZShub3RlKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwibm90ZS5pc0NvbXBsZXRlZFwiIGNsYXNzPVwiZmFzIGZhLWZsYWctY2hlY2tlcmVkIHBpbm5lZC1ub3RlLWhlYWRlci1idXR0b24tY29tcGxldGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpbkNvbXBsZXRlTm90ZShub3RlKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tub3RlLm5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlubmVkLW5vdGUtY29udGVudHNcIiBbc3R5bGUuZGlzcGxheV09XCJub3RlLmNvbnRlbnREaXNwbGF5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBjb250ZW50IG9mIG5vdGUuY29udGVudHNcIiBjbGFzcz1cInBpbm5lZC1ub3RlLWxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29udGVudH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxyZXBvcnQtcXVldWUgW2hlYWRlcl09XCInWHXhuqV0IGThu68gbGnhu4d1J1wiPlxyXG4gICAgPC9yZXBvcnQtcXVldWU+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwid2FpdGluZy1ib3hcIiBbY2xhc3Muc2hvd109XCJ3YWl0aW5nXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPjwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtbG9hZGluZ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZHMtZWxsaXBzaXNcIj5cclxuICAgICAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1sb2FkaW5nXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCB4IG9mIG1lc3NhZ2VXYWl0aW5nXCI+e3t4fX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxwLXRvYXN0IFtwb3NpdGlvbl09XCIndG9wLXJpZ2h0J1wiIFthdXRvWkluZGV4XT1cInRydWVcIj48L3AtdG9hc3Q+XHJcbjxwLWNvbmZpcm1EaWFsb2cgI2NkIFtjbG9zYWJsZV09XCJmYWxzZVwiPlxyXG4gICAgPHAtZm9vdGVyPlxyXG4gICAgICAgIDxidXR0b24gI29rQnV0dG9uIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1jaGVja1wiIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0XCIgbGFiZWw9XCLEkOG7k25nIMO9XCJcclxuICAgICAgICAgICAgKGtleWRvd24uc2hpZnQudGFiKT1cImZvY3VzVHJhcCgkZXZlbnQsIGZhbHNlKVwiIChjbGljayk9XCJjZC5hY2NlcHQoKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93UmVqZWN0Q29uZmlybVwiICNjYW5jZWxCdXR0b24gdHlwZT1cImJ1dHRvblwiIHBCdXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24tc2Vjb25kYXJ5XCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgbGFiZWw9XCJC4buPIHF1YVwiXHJcbiAgICAgICAgICAgIChrZXlkb3duLnRhYik9XCJmb2N1c1RyYXAoJGV2ZW50LCB0cnVlKVwiIChjbGljayk9XCJjZC5yZWplY3QoKVwiPjwvYnV0dG9uPlxyXG4gICAgPC9wLWZvb3Rlcj5cclxuPC9wLWNvbmZpcm1EaWFsb2c+XHJcbjwhLS0gPHVzZXItYWN0aW9uLW1hbmFnZXI+PC91c2VyLWFjdGlvbi1tYW5hZ2VyPiAtLT5cclxuPHBlcm1pc3Npb24tdXRpbHMgKm5nSWY9XCJyb290RGF0YS5zaG93UGVybWlzc2lvblV0aWxzXCI+PC9wZXJtaXNzaW9uLXV0aWxzPlxyXG48bmctdGVtcGxhdGUgI3F1ZXJ5QnVpbGRlclVzZXJQaWNrZXIgbGV0LWNvbnRyb2wgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIiBsZXQtcXVlcnk9XCJxdWVyeVwiIGxldC1tdWx0aXBsZT1cIm11bHRpcGxlXCI+XHJcbiAgICA8dXNlci1waWNrZXIgW2NvbnRyb2xdPVwiY29udHJvbFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFsobmdNb2RlbCldPVwicXVlcnkudmFsdWVcIiBbbXVsdGlwbGVdPVwiY29udHJvbC5tdWx0aXBsZVwiPlxyXG4gICAgPC91c2VyLXBpY2tlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNxdWVyeUJ1aWxkZXJDb0NhdVBpY2tlciBsZXQtY29udHJvbCBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiIGxldC1xdWVyeT1cInF1ZXJ5XCIgbGV0LW11bHRpcGxlPVwibXVsdGlwbGVcIj5cclxuICAgIDxjb2NhdXRvY2h1Yy1waWNrZXItbGlzdCBbY29udHJvbF09XCJjb250cm9sXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgWyhuZ01vZGVsKV09XCJxdWVyeS52YWx1ZVwiPlxyXG4gICAgPC9jb2NhdXRvY2h1Yy1waWNrZXItbGlzdD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNxdWVyeUJ1aWxkZXJBdXRvY29tcGxldGVQaWNrZXIgbGV0LWNvbnRyb2wgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIiBsZXQtcXVlcnk9XCJxdWVyeVwiPlxyXG4gICAgPGF1dG9jb21wbGV0ZS1waWNrZXIgKm5nU3dpdGNoQ2FzZT1cIidncm91cHVzZXInXCIgW2NvbnRyb2xdPVwiY29udHJvbFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJxdWVyeS52YWx1ZVwiPlxyXG4gICAgPC9hdXRvY29tcGxldGUtcGlja2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNsaXN0Q29uZ1ZpZWNDb24gbGV0LWZvcm1TdGF0ZT1cImZvcm1TdGF0ZVwiIGxldC1sb2FpRGFuaFNhY2g9XCJsb2FpRGFuaFNhY2hcIiBsZXQtaWRDb25nVmllYz1cImlkQ29uZ1ZpZWNcIlxyXG4gICAgbGV0LXRlbXBsYXRlRGV0YWlsRm9ybT1cInRlbXBsYXRlRGV0YWlsRm9ybVwiPlxyXG4gICAgPGJhc2UtY29uZ3ZpZWMtbGlzdCBbbG9hZERldGFpbEZyb21RdWVyeVBhcmFtXT1cImZhbHNlXCIgW2lzQ2hpbGRWaWV3XT1cInRydWVcIiBbZm9ybVN0YXRlXT1cImZvcm1TdGF0ZVwiXHJcbiAgICAgICAgW2xvYWlEYW5oU2FjaF09XCJsb2FpRGFuaFNhY2hcIiBbaWRDb25nVmllY109XCJpZENvbmdWaWVjXCIgW3RlbXBsYXRlRGV0YWlsRm9ybV09XCJ0ZW1wbGF0ZURldGFpbEZvcm1cIj5cclxuICAgIDwvYmFzZS1jb25ndmllYy1saXN0PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjcnVkTGlzdFNldHRpbmdSb3cgbGV0LWVudGl0eU1ldGFkYXRhU2VydmljZT1cImVudGl0eU1ldGFkYXRhU2VydmljZVwiIGxldC1wYXJlbnRDb250ZXh0PVwicGFyZW50Q29udGV4dFwiXHJcbiAgICBsZXQtcGFyZW50U2V0dGluZz1cInBhcmVudFNldHRpbmdcIiBsZXQtcGFyZW50TW9kZWw9XCJwYXJlbnRNb2RlbFwiIGxldC1vblNhdmU9XCJvblNhdmVcIiBsZXQtb25DYW5jZWw9XCJvbkNhbmNlbFwiPlxyXG4gICAgPHNldHRpbmdzLXJvdyBbZW50aXR5TWV0YWRhdGFTZXJ2aWNlXT1cImVudGl0eU1ldGFkYXRhU2VydmljZVwiIFtwYXJlbnRDb250ZXh0XT1cInBhcmVudENvbnRleHRcIlxyXG4gICAgICAgIFtwYXJlbnRTZXR0aW5nXT1cInBhcmVudFNldHRpbmdcIiBbcGFyZW50TW9kZWxdPVwicGFyZW50TW9kZWxcIiAob25TYXZlKT1cIm9uU2F2ZSgkZXZlbnQpXCIgKG9uQ2FuY2VsKT1cIm9uQ2FuY2VsXCI+XHJcbiAgICA8L3NldHRpbmdzLXJvdz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNjcnVkTGlzdFNldHRpbmcgbGV0LWVudGl0eU1ldGFkYXRhU2VydmljZT1cImVudGl0eU1ldGFkYXRhU2VydmljZVwiIGxldC1wYXJlbnRDb250ZXh0PVwicGFyZW50Q29udGV4dFwiXHJcbiAgICBsZXQtcGFyZW50U2V0dGluZz1cInBhcmVudFNldHRpbmdcIiBsZXQtcGFyZW50TW9kZWw9XCJwYXJlbnRNb2RlbFwiIGxldC1vblNhdmU9XCJvblNhdmVcIiBsZXQtb25DYW5jZWw9XCJvbkNhbmNlbFwiPlxyXG4gICAgPHNldHRpbmdzIFtlbnRpdHlNZXRhZGF0YVNlcnZpY2VdPVwiZW50aXR5TWV0YWRhdGFTZXJ2aWNlXCIgW3BhcmVudENvbnRleHRdPVwicGFyZW50Q29udGV4dFwiXHJcbiAgICAgICAgW3BhcmVudFNldHRpbmddPVwicGFyZW50U2V0dGluZ1wiIFtwYXJlbnRNb2RlbF09XCJwYXJlbnRNb2RlbFwiIChvblNhdmUpPVwib25TYXZlKCRldmVudClcIiAob25DYW5jZWwpPVwib25DYW5jZWxcIj5cclxuICAgIDwvc2V0dGluZ3M+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjY3J1ZExpc3RBZHZhbmNlU2VhcmNoIGxldC1wYXJlbnRTZXR0aW5nPVwicGFyZW50U2V0dGluZ1wiIGxldC1zZWFyY2hJbmZvPVwic2VhcmNoSW5mb1wiIGxldC1sb2FkaW5nPVwibG9hZGluZ1wiXHJcbiAgICBsZXQtb25TZWFyY2g9XCJvblNlYXJjaFwiIGxldC1vbkluaXQ9XCJvbkluaXRcIj5cclxuICAgIDxhZHZhbmNlLXNlYXJjaCBbcGFyZW50U2V0dGluZ109XCJwYXJlbnRTZXR0aW5nXCIgW3NlYXJjaEluZm9dPVwic2VhcmNoSW5mb1wiIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gICAgICAgIChvblNlYXJjaCk9XCJvblNlYXJjaCgkZXZlbnQpXCIgKG9uSW5pdCk9XCJvbkluaXQoJGV2ZW50KVwiPlxyXG4gICAgPC9hZHZhbmNlLXNlYXJjaD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY3J1ZEZvcm1UYWJsZURldGFpbEZvcm0gbGV0LXNjaGVtYSBsZXQtcGFyZW50U2V0dGluZz1cInBhcmVudFNldHRpbmdcIiBsZXQtZGF0YT1cImRhdGFcIiBsZXQtb25Jbml0PVwib25Jbml0XCJcclxuICAgIGxldC1vblNhdmVkPVwib25TYXZlZFwiIGxldC1vbkNhbmNlbD1cIm9uQ2FuY2VsXCI+XHJcbiAgICA8dGFibGUtZGV0YWlsLWZvcm0gI2Zvcm1CYXNlIFtwYXJlbnRTZXR0aW5nXT1cInBhcmVudFNldHRpbmdcIiBbc2NoZW1hXT1cInNjaGVtYVwiIFtkYXRhXT1cImRhdGFcIiAob25Jbml0KT1cIm9uSW5pdFwiXHJcbiAgICAgICAgKG9uU2F2ZWQpPVwib25TYXZlZFwiIChvbkNhbmNlbCk9XCJvbkNhbmNlbFwiPlxyXG4gICAgPC90YWJsZS1kZXRhaWwtZm9ybT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNjcnVkRm9ybUNvbmdWaWVjRm9ybSBsZXQtY29udHJvbD1cImNvbnRyb2xcIj5cclxuICAgIDxiYXNlLWNvbmd2aWVjLWZvcm0gW2NvbnRyb2xdPVwiY29udHJvbFwiIFtwYXJlbnRTZXR0aW5nXT1cImNvbmdWaWVjU2V0dGluZ1wiIFt0ZW5Db25nVmllY109XCJjb250cm9sLmRhdGEudGVuQ29uZ1ZpZWNcIj5cclxuICAgIDwvYmFzZS1jb25ndmllYy1mb3JtPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2NydWRGb3JtQWRkcmVzc0NvbXBvbmVudCBsZXQtZGF0YSBsZXQtY29udHJvbD1cImNvbnRyb2xcIiBsZXQtcGFyZW50UGF0aD1cInBhcmVudFBhdGhcIlxyXG4gICAgbGV0LWNoZWNrRGlzYWJsZWQ9XCJjaGVja0Rpc2FibGVkXCIgbGV0LWhhbmRsZUZpZWxkVmFsdWVDaGFuZ2U9XCJoYW5kbGVGaWVsZFZhbHVlQ2hhbmdlXCJcclxuICAgIGxldC1oYW5kbGVDb250cm9sUmVhZHlFdmVudD1cImhhbmRsZUNvbnRyb2xSZWFkeUV2ZW50XCI+XHJcbiAgICA8YWRkcmVzcy1waWNrZXIgW2NvbnRyb2xdPVwiY29udHJvbFwiIFtzaG93U3ViTGFiZWxdPVwiY29udHJvbC5zaG93U3ViTGFiZWxcIiBbZGlzYWJsZWRdPVwiY2hlY2tEaXNhYmxlZChkYXRhLCBjb250cm9sKVwiXHJcbiAgICAgICAgWyhkYXRhKV09XCJkYXRhW2NvbnRyb2wuZmllbGRdXCIgKG9uU2VsZWN0KT1cImhhbmRsZUZpZWxkVmFsdWVDaGFuZ2UoY29udHJvbCwgJGV2ZW50LCAnY2hhbmdlJywgZGF0YSwgcGFyZW50UGF0aClcIlxyXG4gICAgICAgIChvblJlYWR5KT1cImhhbmRsZUNvbnRyb2xSZWFkeUV2ZW50KGNvbnRyb2wsIHBhcmVudFBhdGgpXCI+XHJcbiAgICA8L2FkZHJlc3MtcGlja2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2NydWRGb3JtRmlsZU1hbmFnZXJDb21wb25lbnQgbGV0LWRhdGEgbGV0LWNvbnRyb2w9XCJjb250cm9sXCIgbGV0LXBhcmVudFBhdGg9XCJwYXJlbnRQYXRoXCJcclxuICAgIGxldC1jaGVja0Rpc2FibGVkPVwiY2hlY2tEaXNhYmxlZFwiIGxldC1oYW5kbGVGaWVsZFZhbHVlQ2hhbmdlPVwiaGFuZGxlRmllbGRWYWx1ZUNoYW5nZVwiXHJcbiAgICBsZXQtaGFuZGxlQ29udHJvbFJlYWR5RXZlbnQ9XCJoYW5kbGVDb250cm9sUmVhZHlFdmVudFwiPlxyXG4gICAgPGZpbGUtbWFuYWdlciBbY29udHJvbF09XCJjb250cm9sXCIgW3NlcnZpY2VDb2RlXT1cImNvbnRyb2wuc2VydmljZUNvZGVcIiBbZW50aXR5XT1cImNvbnRyb2wuZW50aXR5XCJcclxuICAgICAgICBbZW50aXR5S2V5XT1cImNvbnRyb2wuZW50aXR5S2V5ID8gY29udHJvbC5lbnRpdHlLZXkgOiBkYXRhW2NvbnRyb2wuZW50aXR5S2V5RmllbGRdXCIgW3JlYWRvbmx5XT1cImNvbnRyb2wuZGlzYWJsZWRcIlxyXG4gICAgICAgIFtsYXlvdXRdPVwiY29udHJvbC5sYXlvdXRcIiBbbWF4RmlsZVNpemVdPVwiY29udHJvbC5tYXhGaWxlU2l6ZVwiIFtpblRhaUxpZXVdPVwiY29udHJvbC5pblRhaUxpZXVcIlxyXG4gICAgICAgIFtpblRhaUxpZXVDaHVuZ109XCJjb250cm9sLmluVGFpTGlldUNodW5nXCIgW2NvcHlUb0ZvbGRlcklkXT1cImNvbnRyb2wuY29weVRvRm9sZGVySWRcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVNpemVNZXNzYWdlU3VtbWFyeV09XCJjb250cm9sLmludmFsaWRGaWxlU2l6ZU1lc3NhZ2VTdW1tYXJ5XCJcclxuICAgICAgICBbaW52YWxpZEZpbGVTaXplTWVzc2FnZURldGFpbF09XCJjb250cm9sLmludmFsaWRGaWxlU2l6ZU1lc3NhZ2VEZXRhaWxcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZVR5cGVNZXNzYWdlU3VtbWFyeV09XCJjb250cm9sLmludmFsaWRGaWxlVHlwZU1lc3NhZ2VTdW1tYXJ5XCJcclxuICAgICAgICBbaW52YWxpZEZpbGVUeXBlTWVzc2FnZURldGFpbF09XCJjb250cm9sLmludmFsaWRGaWxlVHlwZU1lc3NhZ2VEZXRhaWxcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZVN1bW1hcnldPVwiY29udHJvbC5pbnZhbGlkRmlsZUxpbWl0TWVzc2FnZVN1bW1hcnlcIlxyXG4gICAgICAgIFtpbnZhbGlkRmlsZUxpbWl0TWVzc2FnZURldGFpbF09XCJjb250cm9sLmludmFsaWRGaWxlTGltaXRNZXNzYWdlRGV0YWlsXCIgWyh2YWx1ZSldPVwiZGF0YVtjb250cm9sLmZpZWxkXVwiXHJcbiAgICAgICAgKG9uU2VsZWN0ZWQpPVwiY29udHJvbC5vblNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgIChvbkNoYW5nZWQpPVwiaGFuZGxlRmllbGRWYWx1ZUNoYW5nZShjb250cm9sLCAkZXZlbnQsICdjaGFuZ2UnLCBkYXRhLCBwYXJlbnRQYXRoKVwiXHJcbiAgICAgICAgKG9uUmVhZHkpPVwiaGFuZGxlQ29udHJvbFJlYWR5RXZlbnQoY29udHJvbCwgcGFyZW50UGF0aClcIj5cclxuICAgIDwvZmlsZS1tYW5hZ2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2NydWRGb3JtU2VydmljZUZpbGVVcGxvYWRDb21wb25lbnQgbGV0LWRhdGEgbGV0LWNvbnRyb2w9XCJjb250cm9sXCIgbGV0LXBhcmVudFBhdGg9XCJwYXJlbnRQYXRoXCJcclxuICAgIGxldC1wYXJlbnRDb250ZXh0PVwicGFyZW50Q29udGV4dFwiIGxldC1jaGVja0Rpc2FibGVkPVwiY2hlY2tEaXNhYmxlZFwiXHJcbiAgICBsZXQtaGFuZGxlRmllbGRWYWx1ZUNoYW5nZT1cImhhbmRsZUZpZWxkVmFsdWVDaGFuZ2VcIiBsZXQtaGFuZGxlQ29udHJvbFJlYWR5RXZlbnQ9XCJoYW5kbGVDb250cm9sUmVhZHlFdmVudFwiPlxyXG4gICAgPHNlcnZpY2UtZmlsZS11cGxvYWQgWyhuZ01vZGVsKV09XCJkYXRhW2NvbnRyb2wuZmllbGRdXCIgW3BhcmVudENvbnRleHRdPVwicGFyZW50Q29udGV4dFwiXHJcbiAgICAgICAgW3NlcnZpY2VDb2RlXT1cImNvbnRyb2wuc2VydmljZUNvZGVcIiBbZW50aXR5XT1cImNvbnRyb2wuZW50aXR5XCIgW2VudGl0eUtleV09XCJkYXRhW2NvbnRyb2wuZW50aXR5S2V5RmllbGRdXCJcclxuICAgICAgICBbY29udHJvbF09XCJjb250cm9sXCIgKG9uQ2hhbmdlZCk9XCJoYW5kbGVGaWVsZFZhbHVlQ2hhbmdlKGNvbnRyb2wsICRldmVudCwgJ2NoYW5nZScsIGRhdGEsIHBhcmVudFBhdGgpXCI+XHJcbiAgICA8L3NlcnZpY2UtZmlsZS11cGxvYWQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjY3J1ZEZvcm1Db25nVmllY1BpY2tlckNvbXBvbmVudCBsZXQtZGF0YSBsZXQtY29udHJvbD1cImNvbnRyb2xcIiBsZXQtcGFyZW50UGF0aD1cInBhcmVudFBhdGhcIlxyXG4gICAgbGV0LWNoZWNrRGlzYWJsZWQ9XCJjaGVja0Rpc2FibGVkXCIgbGV0LWhhbmRsZUZpZWxkVmFsdWVDaGFuZ2U9XCJoYW5kbGVGaWVsZFZhbHVlQ2hhbmdlXCJcclxuICAgIGxldC1oYW5kbGVDb250cm9sUmVhZHlFdmVudD1cImhhbmRsZUNvbnRyb2xSZWFkeUV2ZW50XCI+XHJcbiAgICA8Y29uZ3ZpZWMtcGlja2VyIFtjb250cm9sXT1cImNvbnRyb2xcIiBbZGlzYWJsZWRdPVwiY2hlY2tEaXNhYmxlZChkYXRhLCBjb250cm9sKVwiIFtyZXF1aXJlZF09XCJjb250cm9sLnJlcXVpcmVkXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cImRhdGFbY29udHJvbC5maWVsZF1cIlxyXG4gICAgICAgIChvbkNoYW5nZWQpPVwiaGFuZGxlRmllbGRWYWx1ZUNoYW5nZShjb250cm9sLCAkZXZlbnQsICdjaGFuZ2UnLCBkYXRhLCBwYXJlbnRQYXRoKVwiPlxyXG4gICAgPC9jb25ndmllYy1waWNrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjY3J1ZEZvcm1WYW5CYW5QaWNrZXJDb21wb25lbnQgbGV0LWRhdGEgbGV0LWNvbnRyb2w9XCJjb250cm9sXCIgbGV0LXBhcmVudFBhdGg9XCJwYXJlbnRQYXRoXCJcclxuICAgIGxldC1jaGVja0Rpc2FibGVkPVwiY2hlY2tEaXNhYmxlZFwiIGxldC1oYW5kbGVGaWVsZFZhbHVlQ2hhbmdlPVwiaGFuZGxlRmllbGRWYWx1ZUNoYW5nZVwiXHJcbiAgICBsZXQtaGFuZGxlQ29udHJvbFJlYWR5RXZlbnQ9XCJoYW5kbGVDb250cm9sUmVhZHlFdmVudFwiPlxyXG4gICAgPHZhbmJhbi1waWNrZXIgW2NvbnRyb2xdPVwiY29udHJvbFwiIFtkaXNhYmxlZF09XCJjaGVja0Rpc2FibGVkKGRhdGEsIGNvbnRyb2wpXCIgW3JlcXVpcmVkXT1cImNvbnRyb2wucmVxdWlyZWRcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwiZGF0YVtjb250cm9sLmZpZWxkXVwiIFtyZWFkT25seV09XCJjb250cm9sLnJlYWRPbmx5XCIgW2xvYWlWYW5CYW5dPVwiY29udHJvbC5sb2FpVmFuQmFuXCJcclxuICAgICAgICAob25DaGFuZ2VkKT1cImhhbmRsZUZpZWxkVmFsdWVDaGFuZ2UoY29udHJvbCwgJGV2ZW50LCAnY2hhbmdlJywgZGF0YSwgcGFyZW50UGF0aClcIj5cclxuICAgIDwvdmFuYmFuLXBpY2tlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdGlueU1jZUZpbGVQaWNrZXJEaWFsb2cgbGV0LXBhcmVudE1vZGVsPVwicGFyZW50TW9kZWxcIiBsZXQtcGFyZW50Q29udGV4dD1cInBhcmVudENvbnRleHRcIlxyXG4gICAgbGV0LWNsb3NlRm9ybT1cImNsb3NlRm9ybVwiIGxldC1vbkNhbmNlbD1cIm9uQ2FuY2VsXCIgbGV0LW9uQ2hhbmdlZD1cIm9uQ2hhbmdlZFwiPlxyXG4gICAgPGZpbGUtcGlja2VyLWRpYWxvZyAjZm9ybUJhc2UgW3BhcmVudE1vZGVsXT1cInBhcmVudE1vZGVsXCIgW3BhcmVudENvbnRleHRdPVwicGFyZW50Q29udGV4dFwiIChjbG9zZUZvcm0pPVwiY2xvc2VGb3JtXCJcclxuICAgICAgICAob25DYW5jZWwpPVwib25DYW5jZWxcIiAob25DaGFuZ2VkKT1cIm9uQ2hhbmdlZFwiPlxyXG4gICAgPC9maWxlLXBpY2tlci1kaWFsb2c+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjdGlueU1jZUFkZE5ld3MgbGV0LWxhbmd1YWdlQ29kZT1cImxhbmd1YWdlQ29kZVwiIGxldC1zaG93Q2hhbmdlPVwic2hvd0NoYW5nZVwiPlxyXG4gICAgPGFkZC1uZXdzICNsaXN0QmFzZSBbbGFuZ3VhZ2VDb2RlXT1cImxhbmd1YWdlQ29kZVwiIChzaG93Q2hhbmdlKT1cInNob3dDaGFuZ2UoJGV2ZW50KVwiPjwvYWRkLW5ld3M+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duUXVpY2tBZGRGb3JtIGxldC1tb2RlbCBsZXQtcGFyZW50TW9kZWw9XCJwYXJlbnRNb2RlbFwiIGxldC1wYXJlbnRDb250ZXh0PVwicGFyZW50Q29udGV4dFwiXHJcbiAgICBsZXQtY29udHJvbD1cImNvbnRyb2xcIiBsZXQtb25TYXZlZD1cIm9uU2F2ZWRcIiBsZXQtb25DYW5jZWw9XCJvbkNhbmNlbFwiPlxyXG4gICAgPHF1aWNrLWFkZC1mb3JtICNmb3JtQmFzZSBbcGFyZW50TW9kZWxdPVwicGFyZW50TW9kZWxcIiBbcGFyZW50Q29udGV4dF09XCJwYXJlbnRDb250ZXh0XCIgW21vZGVsXT1cIm1vZGVsXCJcclxuICAgICAgICBbY29udHJvbF09XCJjb250cm9sXCIgW2Jhc2VTZXJ2aWNlXT1cImNvbnRyb2wuYmFzZVNlcnZpY2VcIiAob25TYXZlZCk9XCJvblNhdmVkXCIgKG9uQ2FuY2VsKT1cIm9uQ2FuY2VsXCI+XHJcbiAgICA8L3F1aWNrLWFkZC1mb3JtPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==