valtech-components 2.0.496 → 2.0.498

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 (35) hide show
  1. package/esm2022/lib/components/molecules/language-selector/language-selector.component.mjs +23 -14
  2. package/esm2022/lib/components/molecules/language-selector/types.mjs +1 -1
  3. package/esm2022/lib/services/auth/auth.service.mjs +16 -3
  4. package/esm2022/lib/services/auth/types.mjs +1 -1
  5. package/esm2022/lib/services/firebase/analytics-types.mjs +7 -0
  6. package/esm2022/lib/services/firebase/types.mjs +1 -1
  7. package/esm2022/lib/services/i18n/config.mjs +50 -0
  8. package/esm2022/lib/services/i18n/i18n.service.mjs +196 -0
  9. package/esm2022/lib/services/i18n/index.mjs +9 -0
  10. package/esm2022/lib/services/i18n/translate.pipe.mjs +50 -0
  11. package/esm2022/lib/services/i18n/types.mjs +14 -0
  12. package/esm2022/lib/services/presets/config.mjs +46 -0
  13. package/esm2022/lib/services/presets/index.mjs +5 -0
  14. package/esm2022/lib/services/presets/preset.service.mjs +104 -0
  15. package/esm2022/lib/services/presets/types.mjs +2 -0
  16. package/esm2022/public-api.mjs +9 -1
  17. package/fesm2022/valtech-components.mjs +526 -54
  18. package/fesm2022/valtech-components.mjs.map +1 -1
  19. package/lib/components/molecules/language-selector/language-selector.component.d.ts +1 -4
  20. package/lib/components/molecules/language-selector/types.d.ts +7 -0
  21. package/lib/services/auth/auth.service.d.ts +4 -2
  22. package/lib/services/auth/types.d.ts +4 -0
  23. package/lib/services/firebase/analytics-types.d.ts +219 -0
  24. package/lib/services/firebase/types.d.ts +11 -0
  25. package/lib/services/i18n/config.d.ts +29 -0
  26. package/lib/services/i18n/i18n.service.d.ts +112 -0
  27. package/lib/services/i18n/index.d.ts +4 -0
  28. package/lib/services/i18n/translate.pipe.d.ts +36 -0
  29. package/lib/services/i18n/types.d.ts +59 -0
  30. package/lib/services/presets/config.d.ts +32 -0
  31. package/lib/services/presets/index.d.ts +3 -0
  32. package/lib/services/presets/preset.service.d.ts +69 -0
  33. package/lib/services/presets/types.d.ts +39 -0
  34. package/package.json +1 -1
  35. package/public-api.d.ts +2 -0
@@ -2,14 +2,15 @@ import { CommonModule } from '@angular/common';
2
2
  import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
3
3
  import { addIcons } from 'ionicons';
4
4
  import { language } from 'ionicons/icons';
5
- import { LocaleService } from '../../../services/locale.service';
5
+ import { I18nService } from '../../../services/i18n';
6
6
  import { PopoverSelectorComponent } from '../popover-selector/popover-selector.component';
7
7
  import * as i0 from "@angular/core";
8
8
  /**
9
9
  * val-language-selector
10
10
  *
11
- * A language selector component that uses LocaleService.
12
- * When the language changes, the page will reload.
11
+ * A language selector component that uses I18nService.
12
+ * By default, language changes are reactive (no page reload).
13
+ * Set forceReload: true in props to reload on change.
13
14
  *
14
15
  * @example
15
16
  * <val-language-selector
@@ -17,7 +18,7 @@ import * as i0 from "@angular/core";
17
18
  * </val-language-selector>
18
19
  *
19
20
  * @input props: LanguageSelectorMetadata - Configuration for the language selector
20
- * @output languageChange: EventEmitter<string> - Emitted when language changes (before reload)
21
+ * @output languageChange: EventEmitter<string> - Emitted when language changes
21
22
  */
22
23
  export class LanguageSelectorComponent {
23
24
  constructor() {
@@ -28,31 +29,35 @@ export class LanguageSelectorComponent {
28
29
  /**
29
30
  * Event emitted when the language selection changes.
30
31
  * Emits the selected language code.
31
- * Note: Page will reload after this event.
32
32
  */
33
33
  this.languageChange = new EventEmitter();
34
- this.localeService = inject(LocaleService);
34
+ this.i18n = inject(I18nService);
35
35
  /** Default language display names */
36
36
  this.defaultLanguageNames = {
37
37
  es: 'Español',
38
38
  en: 'English',
39
+ pt: 'Português',
40
+ fr: 'Français',
41
+ de: 'Deutsch',
39
42
  };
40
43
  /** Default flag icons for languages */
41
44
  this.defaultLanguageFlags = {
42
45
  es: '🇪🇸',
43
46
  en: '🇺🇸',
47
+ pt: '🇧🇷',
48
+ fr: '🇫🇷',
49
+ de: '🇩🇪',
44
50
  };
45
- /** Available languages */
46
- this.availableLanguages = ['es', 'en'];
47
51
  addIcons({ language });
48
52
  }
49
53
  ngOnInit() {
50
54
  this.initializePopoverProps();
51
55
  }
52
56
  initializePopoverProps() {
53
- const currentLanguage = this.localeService.lang;
57
+ const currentLanguage = this.i18n.lang();
58
+ const availableLanguages = this.props.availableLanguages || this.i18n.supportedLanguages();
54
59
  // Convert language codes to popover options
55
- const options = this.availableLanguages.map(lang => ({
60
+ const options = availableLanguages.map(lang => ({
56
61
  value: lang,
57
62
  label: this.getLanguageDisplayName(lang),
58
63
  }));
@@ -95,10 +100,14 @@ export class LanguageSelectorComponent {
95
100
  onLanguageChange(selectedLanguage) {
96
101
  if (typeof selectedLanguage === 'string') {
97
102
  const newLang = selectedLanguage;
98
- // Emit the change event before reload
103
+ // Emit the change event
99
104
  this.languageChange.emit(selectedLanguage);
100
- // Set the new language (this will reload the page)
101
- this.localeService.setLang(newLang);
105
+ // Set the new language (reactive by default, reload if forceReload is true)
106
+ this.i18n.setLanguage(newLang, this.props.forceReload);
107
+ // Update popover selected value for reactive UI
108
+ if (this.popoverProps) {
109
+ this.popoverProps = { ...this.popoverProps, selectedValue: newLang };
110
+ }
102
111
  }
103
112
  }
104
113
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LanguageSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -116,4 +125,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
116
125
  }], languageChange: [{
117
126
  type: Output
118
127
  }] } });
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9sYW5ndWFnZS1zZWxlY3Rvci9sYW5ndWFnZS1zZWxlY3Rvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQWlCLE1BQU0sa0NBQWtDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7O0FBYTFGOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLE9BQU8seUJBQXlCO0lBbUNwQztRQWxDQTs7V0FFRztRQUVILFVBQUssR0FBNkIsRUFBRSxDQUFDO1FBRXJDOzs7O1dBSUc7UUFFSCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFLcEMsa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFOUMscUNBQXFDO1FBQ3BCLHlCQUFvQixHQUEyQjtZQUM5RCxFQUFFLEVBQUUsU0FBUztZQUNiLEVBQUUsRUFBRSxTQUFTO1NBQ2QsQ0FBQztRQUVGLHVDQUF1QztRQUN0Qix5QkFBb0IsR0FBMkI7WUFDOUQsRUFBRSxFQUFFLE1BQU07WUFDVixFQUFFLEVBQUUsTUFBTTtTQUNYLENBQUM7UUFFRiwwQkFBMEI7UUFDVCx1QkFBa0IsR0FBb0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxD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Z0JBQWlDLENBQUM7WUFFbEQsc0NBQXNDO1lBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFFM0MsbURBQW1EO1lBQ25ELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDOytHQXJHVSx5QkFBeUI7bUdBQXpCLHlCQUF5Qiw0SkFuQjFCOztHQUVULCtyREFIUyxZQUFZLCtCQUFFLHdCQUF3Qjs7NEZBb0JyQyx5QkFBeUI7a0JBdkJyQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsd0JBQXdCLENBQUMsWUFDdkM7O0dBRVQ7d0RBc0JELEtBQUs7c0JBREosS0FBSztnQkFTTixjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGxhbmd1YWdlIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgTG9jYWxlU2VydmljZSwgU3VwcG9ydGVkTGFuZyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2xvY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFBvcG92ZXJTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uL3BvcG92ZXItc2VsZWN0b3IvcG9wb3Zlci1zZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3Zlck9wdGlvbiwgUG9wb3ZlclNlbGVjdG9yTWV0YWRhdGEgfSBmcm9tICcuLi9wb3BvdmVyLXNlbGVjdG9yL3R5cGVzJztcbmltcG9ydCB7IExhbmd1YWdlU2VsZWN0b3JNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbGFuZ3VhZ2Utc2VsZWN0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBQb3BvdmVyU2VsZWN0b3JDb21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx2YWwtcG9wb3Zlci1zZWxlY3RvciBbcHJvcHNdPVwicG9wb3ZlclByb3BzXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkxhbmd1YWdlQ2hhbmdlKCRldmVudClcIj4gPC92YWwtcG9wb3Zlci1zZWxlY3Rvcj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vbGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50LnNjc3MnXSxcbn0pXG4vKipcbiAqIHZhbC1sYW5ndWFnZS1zZWxlY3RvclxuICpcbiAqIEEgbGFuZ3VhZ2Ugc2VsZWN0b3IgY29tcG9uZW50IHRoYXQgdXNlcyBMb2NhbGVTZXJ2aWNlLlxuICogV2hlbiB0aGUgbGFuZ3VhZ2UgY2hhbmdlcywgdGhlIHBhZ2Ugd2lsbCByZWxvYWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIDx2YWwtbGFuZ3VhZ2Utc2VsZWN0b3JcbiAqICAgW3Byb3BzXT1cInsgc2hvd0xhYmVsOiB0cnVlLCBzaG93RmxhZ3M6IHRydWUgfVwiPlxuICogPC92YWwtbGFuZ3VhZ2Utc2VsZWN0b3I+XG4gKlxuICogQGlucHV0IHByb3BzOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgbGFuZ3VhZ2Ugc2VsZWN0b3JcbiAqIEBvdXRwdXQgbGFuZ3VhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+IC0gRW1pdHRlZCB3aGVuIGxhbmd1YWdlIGNoYW5nZXMgKGJlZm9yZSByZWxvYWQpXG4gKi9cbmV4cG9ydCBjbGFzcyBMYW5ndWFnZVNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIExhbmd1YWdlIHNlbGVjdG9yIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHJvcHM6IExhbmd1YWdlU2VsZWN0b3JNZXRhZGF0YSA9IHt9O1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGxhbmd1YWdlIHNlbGVjdGlvbiBjaGFuZ2VzLlxuICAgKiBFbWl0cyB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UgY29kZS5cbiAgICogTm90ZTogUGFnZSB3aWxsIHJlbG9hZCBhZnRlciB0aGlzIGV2ZW50LlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGxhbmd1YWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIFBvcG92ZXIgc2VsZWN0b3IgY29uZmlndXJhdGlvbiAqL1xuICBwb3BvdmVyUHJvcHM6IFBvcG92ZXJTZWxlY3Rvck1ldGFkYXRhO1xuXG4gIHByaXZhdGUgbG9jYWxlU2VydmljZSA9IGluamVjdChMb2NhbGVTZXJ2aWNlKTtcblxuICAvKiogRGVmYXVsdCBsYW5ndWFnZSBkaXNwbGF5IG5hbWVzICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdExhbmd1YWdlTmFtZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgZXM6ICdFc3Bhw7FvbCcsXG4gICAgZW46ICdFbmdsaXNoJyxcbiAgfTtcblxuICAvKiogRGVmYXVsdCBmbGFnIGljb25zIGZvciBsYW5ndWFnZXMgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TGFuZ3VhZ2VGbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBlczogJ/Cfh6rwn4e4JyxcbiAgICBlbjogJ/Cfh7rwn4e4JyxcbiAgfTtcblxuICAvKiogQXZhaWxhYmxlIGxhbmd1YWdlcyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGF2YWlsYWJsZUxhbmd1YWdlczogU3VwcG9ydGVkTGFuZ1tdID0gWydlcycsICdlbiddO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFkZEljb25zKHsgbGFuZ3VhZ2UgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVQb3BvdmVyUHJvcHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVBvcG92ZXJQcm9wcygpIHtcbiAgICBjb25zdCBjdXJyZW50TGFuZ3VhZ2UgPSB0aGlzLmxvY2FsZVNlcnZpY2UubGFuZztcblxuICAgIC8vIENvbnZlcnQgbGFuZ3VhZ2UgY29kZXMgdG8gcG9wb3ZlciBvcHRpb25zXG4gICAgY29uc3Qgb3B0aW9uczogUG9wb3Zlck9wdGlvbltdID0gdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMubWFwKGxhbmcgPT4gKHtcbiAgICAgIHZhbHVlOiBsYW5nLFxuICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFuZ3VhZ2VEaXNwbGF5TmFtZShsYW5nKSxcbiAgICB9KSk7XG5cbiAgICAvLyBDcmVhdGUgcG9wb3ZlciBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5wb3BvdmVyUHJvcHMgPSB7XG4gICAgICBvcHRpb25zLFxuICAgICAgc2VsZWN0ZWRWYWx1ZTogY3VycmVudExhbmd1YWdlLFxuICAgICAgbGFiZWw6IHRoaXMucHJvcHMuc2hvd0xhYmVsICE9PSBmYWxzZSA/ICh0aGlzLnByb3BzLmxhYmVsIHx8ICdJZGlvbWEnKSA6IHVuZGVmaW5lZCxcbiAgICAgIGljb246ICdsYW5ndWFnZScsXG4gICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjY2lvbmFyIGlkaW9tYS4uLicsXG4gICAgICBjb2xvcjogdGhpcy5wcm9wcy5jb2xvciB8fCAnbWVkaXVtJyxcbiAgICAgIHNpemU6IHRoaXMucHJvcHMuc2l6ZSB8fCAnZGVmYXVsdCcsXG4gICAgICBmaWxsOiB0aGlzLnByb3BzLmZpbGwgfHwgJ291dGxpbmUnLFxuICAgICAgc2hhcGU6IHRoaXMucHJvcHMuc2hhcGUsXG4gICAgICBleHBhbmQ6IHRoaXMucHJvcHMuZXhwYW5kLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMucHJvcHMuZGlzYWJsZWQgfHwgZmFsc2UsXG4gICAgICBpbnRlcmZhY2U6ICdwb3BvdmVyJyxcbiAgICAgIHNob3dDaGVja21hcms6IHRydWUsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBjYW5jZWxUZXh0OiAnQ2FuY2VsYXInLFxuICAgICAgb2tUZXh0OiAnQWNlcHRhcicsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGFuZ3VhZ2VEaXNwbGF5TmFtZShsYW5ndWFnZUNvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gVXNlIGN1c3RvbSBuYW1lcyBpZiBwcm92aWRlZFxuICAgIGlmICh0aGlzLnByb3BzLmN1c3RvbUxhbmd1YWdlTmFtZXM/LltsYW5ndWFnZUNvZGVdKSB7XG4gICAgICBjb25zdCBjdXN0b21OYW1lID0gdGhpcy5wcm9wcy5jdXN0b21MYW5ndWFnZU5hbWVzW2xhbmd1YWdlQ29kZV07XG4gICAgICBjb25zdCBmbGFnID0gdGhpcy5wcm9wcy5zaG93RmxhZ3MgPyB0aGlzLmRlZmF1bHRMYW5ndWFnZUZsYWdzW2xhbmd1YWdlQ29kZV0gOiAnJztcbiAgICAgIHJldHVybiBmbGFnID8gYCR7ZmxhZ30gJHtjdXN0b21OYW1lfWAgOiBjdXN0b21OYW1lO1xuICAgIH1cblxuICAgIC8vIFVzZSBkZWZhdWx0IG5hbWVzXG4gICAgY29uc3QgZGVmYXVsdE5hbWUgPSB0aGlzLmRlZmF1bHRMYW5ndWFnZU5hbWVzW2xhbmd1YWdlQ29kZV0gfHwgbGFuZ3VhZ2VDb2RlLnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgZmxhZyA9IHRoaXMucHJvcHMuc2hvd0ZsYWdzID8gdGhpcy5kZWZhdWx0TGFuZ3VhZ2VGbGFnc1tsYW5ndWFnZUNvZGVdIDogJyc7XG4gICAgcmV0dXJuIGZsYWcgPyBgJHtmbGFnfSAke2RlZmF1bHROYW1lfWAgOiBkZWZhdWx0TmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgbGFuZ3VhZ2Ugc2VsZWN0aW9uIGNoYW5nZS5cbiAgICogQHBhcmFtIHNlbGVjdGVkTGFuZ3VhZ2UgLSBUaGUgc2VsZWN0ZWQgbGFuZ3VhZ2UgY29kZShzKVxuICAgKi9cbiAgb25MYW5ndWFnZUNoYW5nZShzZWxlY3RlZExhbmd1YWdlOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgIGlmICh0eXBlb2Ygc2VsZWN0ZWRMYW5ndWFnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IG5ld0xhbmcgPSBzZWxlY3RlZExhbmd1YWdlIGFzIFN1cHBvcnRlZExhbmc7XG5cbiAgICAgIC8vIEVtaXQgdGhlIGNoYW5nZSBldmVudCBiZWZvcmUgcmVsb2FkXG4gICAgICB0aGlzLmxhbmd1YWdlQ2hhbmdlLmVtaXQoc2VsZWN0ZWRMYW5ndWFnZSk7XG5cbiAgICAgIC8vIFNldCB0aGUgbmV3IGxhbmd1YWdlICh0aGlzIHdpbGwgcmVsb2FkIHRoZSBwYWdlKVxuICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlLnNldExhbmcobmV3TGFuZyk7XG4gICAgfVxuICB9XG59XG4iXX0=
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9sYW5ndWFnZS1zZWxlY3Rvci9sYW5ndWFnZS1zZWxlY3Rvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7QUFhMUY7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLE9BQU8seUJBQXlCO0lBcUNwQztRQXBDQTs7V0FFRztRQUVILFVBQUssR0FBNkIsRUFBRSxDQUFDO1FBRXJDOzs7V0FHRztRQUVILG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUtwQyxTQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5DLHFDQUFxQztRQUNwQix5QkFBb0IsR0FBMkI7WUFDOUQsRUFBRSxFQUFFLFNBQVM7WUFDYixFQUFFLEVBQUUsU0FBUztZQUNiLEVBQUUsRUFBRSxXQUFXO1lBQ2YsRUFBRSxFQUFFLFVBQVU7WUFDZCxFQUFFLEVBQUUsU0FBUztTQUNkLENBQUM7UUFFRix1Q0FBdUM7UUFDdEIseUJBQW9CLEdBQTJCO1lBQzlELEVBQUUsRUFBRSxNQUFNO1lBQ1YsRUFBRSxFQUFFLE1BQU07WUFD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QVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLGdCQUFtQztRQUNsRCxJQUFJLE9BQU8sZ0JBQWdCLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQUcsZ0JBQTRCLENBQUM7WUFFN0Msd0JBQXdCO1lBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFFM0MsNEVBQTRFO1lBQzVFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXZELGdEQUFnRDtZQUNoRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDdkUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOytHQTdHVSx5QkFBeUI7bUdBQXpCLHlCQUF5Qiw0SkFwQjFCOztHQUVULCtyREFIUyxZQUFZLCtCQUFFLHdCQUF3Qjs7NEZBcUJyQyx5QkFBeUI7a0JBeEJyQyxTQUFTOytCQUNFLHVCQUF1QixjQUNyQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsd0JBQXdCLENBQUMsWUFDdkM7O0dBRVQ7d0RBdUJELEtBQUs7c0JBREosS0FBSztnQkFRTixjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGxhbmd1YWdlIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UsIEkxOG5MYW5nIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBQb3BvdmVyU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9wb3BvdmVyLXNlbGVjdG9yL3BvcG92ZXItc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFBvcG92ZXJPcHRpb24sIFBvcG92ZXJTZWxlY3Rvck1ldGFkYXRhIH0gZnJvbSAnLi4vcG9wb3Zlci1zZWxlY3Rvci90eXBlcyc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWxhbmd1YWdlLXNlbGVjdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUG9wb3ZlclNlbGVjdG9yQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dmFsLXBvcG92ZXItc2VsZWN0b3IgW3Byb3BzXT1cInBvcG92ZXJQcm9wc1wiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25MYW5ndWFnZUNoYW5nZSgkZXZlbnQpXCI+IDwvdmFsLXBvcG92ZXItc2VsZWN0b3I+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2xhbmd1YWdlLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtbGFuZ3VhZ2Utc2VsZWN0b3JcbiAqXG4gKiBBIGxhbmd1YWdlIHNlbGVjdG9yIGNvbXBvbmVudCB0aGF0IHVzZXMgSTE4blNlcnZpY2UuXG4gKiBCeSBkZWZhdWx0LCBsYW5ndWFnZSBjaGFuZ2VzIGFyZSByZWFjdGl2ZSAobm8gcGFnZSByZWxvYWQpLlxuICogU2V0IGZvcmNlUmVsb2FkOiB0cnVlIGluIHByb3BzIHRvIHJlbG9hZCBvbiBjaGFuZ2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIDx2YWwtbGFuZ3VhZ2Utc2VsZWN0b3JcbiAqICAgW3Byb3BzXT1cInsgc2hvd0xhYmVsOiB0cnVlLCBzaG93RmxhZ3M6IHRydWUgfVwiPlxuICogPC92YWwtbGFuZ3VhZ2Utc2VsZWN0b3I+XG4gKlxuICogQGlucHV0IHByb3BzOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgbGFuZ3VhZ2Ugc2VsZWN0b3JcbiAqIEBvdXRwdXQgbGFuZ3VhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+IC0gRW1pdHRlZCB3aGVuIGxhbmd1YWdlIGNoYW5nZXNcbiAqL1xuZXhwb3J0IGNsYXNzIExhbmd1YWdlU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogTGFuZ3VhZ2Ugc2VsZWN0b3IgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAqL1xuICBASW5wdXQoKVxuICBwcm9wczogTGFuZ3VhZ2VTZWxlY3Rvck1ldGFkYXRhID0ge307XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgbGFuZ3VhZ2Ugc2VsZWN0aW9uIGNoYW5nZXMuXG4gICAqIEVtaXRzIHRoZSBzZWxlY3RlZCBsYW5ndWFnZSBjb2RlLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIGxhbmd1YWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIFBvcG92ZXIgc2VsZWN0b3IgY29uZmlndXJhdGlvbiAqL1xuICBwb3BvdmVyUHJvcHM6IFBvcG92ZXJTZWxlY3Rvck1ldGFkYXRhO1xuXG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG5cbiAgLyoqIERlZmF1bHQgbGFuZ3VhZ2UgZGlzcGxheSBuYW1lcyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRMYW5ndWFnZU5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGVzOiAnRXNwYcOxb2wnLFxuICAgIGVuOiAnRW5nbGlzaCcsXG4gICAgcHQ6ICdQb3J0dWd1w6pzJyxcbiAgICBmcjogJ0ZyYW7Dp2FpcycsXG4gICAgZGU6ICdEZXV0c2NoJyxcbiAgfTtcblxuICAvKiogRGVmYXVsdCBmbGFnIGljb25zIGZvciBsYW5ndWFnZXMgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TGFuZ3VhZ2VGbGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBlczogJ/Cfh6rwn4e4JyxcbiAgICBlbjogJ/Cfh7rwn4e4JyxcbiAgICBwdDogJ/Cfh6fwn4e3JyxcbiAgICBmcjogJ/Cfh6vwn4e3JyxcbiAgICBkZTogJ/Cfh6nwn4eqJyxcbiAgfTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBhZGRJY29ucyh7IGxhbmd1YWdlIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplUG9wb3ZlclByb3BzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVQb3BvdmVyUHJvcHMoKSB7XG4gICAgY29uc3QgY3VycmVudExhbmd1YWdlID0gdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCBhdmFpbGFibGVMYW5ndWFnZXMgPSB0aGlzLnByb3BzLmF2YWlsYWJsZUxhbmd1YWdlcyB8fCB0aGlzLmkxOG4uc3VwcG9ydGVkTGFuZ3VhZ2VzKCk7XG5cbiAgICAvLyBDb252ZXJ0IGxhbmd1YWdlIGNvZGVzIHRvIHBvcG92ZXIgb3B0aW9uc1xuICAgIGNvbnN0IG9wdGlvbnM6IFBvcG92ZXJPcHRpb25bXSA9IGF2YWlsYWJsZUxhbmd1YWdlcy5tYXAobGFuZyA9PiAoe1xuICAgICAgdmFsdWU6IGxhbmcsXG4gICAgICBsYWJlbDogdGhpcy5nZXRMYW5ndWFnZURpc3BsYXlOYW1lKGxhbmcpLFxuICAgIH0pKTtcblxuICAgIC8vIENyZWF0ZSBwb3BvdmVyIGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLnBvcG92ZXJQcm9wcyA9IHtcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzZWxlY3RlZFZhbHVlOiBjdXJyZW50TGFuZ3VhZ2UsXG4gICAgICBsYWJlbDogdGhpcy5wcm9wcy5zaG93TGFiZWwgIT09IGZhbHNlID8gKHRoaXMucHJvcHMubGFiZWwgfHwgJ0lkaW9tYScpIDogdW5kZWZpbmVkLFxuICAgICAgaWNvbjogJ2xhbmd1YWdlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWNjaW9uYXIgaWRpb21hLi4uJyxcbiAgICAgIGNvbG9yOiB0aGlzLnByb3BzLmNvbG9yIHx8ICdtZWRpdW0nLFxuICAgICAgc2l6ZTogdGhpcy5wcm9wcy5zaXplIHx8ICdkZWZhdWx0JyxcbiAgICAgIGZpbGw6IHRoaXMucHJvcHMuZmlsbCB8fCAnb3V0bGluZScsXG4gICAgICBzaGFwZTogdGhpcy5wcm9wcy5zaGFwZSxcbiAgICAgIGV4cGFuZDogdGhpcy5wcm9wcy5leHBhbmQsXG4gICAgICBkaXNhYmxlZDogdGhpcy5wcm9wcy5kaXNhYmxlZCB8fCBmYWxzZSxcbiAgICAgIGludGVyZmFjZTogJ3BvcG92ZXInLFxuICAgICAgc2hvd0NoZWNrbWFyazogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIGNhbmNlbFRleHQ6ICdDYW5jZWxhcicsXG4gICAgICBva1RleHQ6ICdBY2VwdGFyJyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYW5ndWFnZURpc3BsYXlOYW1lKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgY3VzdG9tIG5hbWVzIGlmIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMucHJvcHMuY3VzdG9tTGFuZ3VhZ2VOYW1lcz8uW2xhbmd1YWdlQ29kZV0pIHtcbiAgICAgIGNvbnN0IGN1c3RvbU5hbWUgPSB0aGlzLnByb3BzLmN1c3RvbUxhbmd1YWdlTmFtZXNbbGFuZ3VhZ2VDb2RlXTtcbiAgICAgIGNvbnN0IGZsYWcgPSB0aGlzLnByb3BzLnNob3dGbGFncyA/IHRoaXMuZGVmYXVsdExhbmd1YWdlRmxhZ3NbbGFuZ3VhZ2VDb2RlXSA6ICcnO1xuICAgICAgcmV0dXJuIGZsYWcgPyBgJHtmbGFnfSAke2N1c3RvbU5hbWV9YCA6IGN1c3RvbU5hbWU7XG4gICAgfVxuXG4gICAgLy8gVXNlIGRlZmF1bHQgbmFtZXNcbiAgICBjb25zdCBkZWZhdWx0TmFtZSA9IHRoaXMuZGVmYXVsdExhbmd1YWdlTmFtZXNbbGFuZ3VhZ2VDb2RlXSB8fCBsYW5ndWFnZUNvZGUudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBmbGFnID0gdGhpcy5wcm9wcy5zaG93RmxhZ3MgPyB0aGlzLmRlZmF1bHRMYW5ndWFnZUZsYWdzW2xhbmd1YWdlQ29kZV0gOiAnJztcbiAgICByZXR1cm4gZmxhZyA/IGAke2ZsYWd9ICR7ZGVmYXVsdE5hbWV9YCA6IGRlZmF1bHROYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBsYW5ndWFnZSBzZWxlY3Rpb24gY2hhbmdlLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRMYW5ndWFnZSAtIFRoZSBzZWxlY3RlZCBsYW5ndWFnZSBjb2RlKHMpXG4gICAqL1xuICBvbkxhbmd1YWdlQ2hhbmdlKHNlbGVjdGVkTGFuZ3VhZ2U6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgaWYgKHR5cGVvZiBzZWxlY3RlZExhbmd1YWdlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbmV3TGFuZyA9IHNlbGVjdGVkTGFuZ3VhZ2UgYXMgSTE4bkxhbmc7XG5cbiAgICAgIC8vIEVtaXQgdGhlIGNoYW5nZSBldmVudFxuICAgICAgdGhpcy5sYW5ndWFnZUNoYW5nZS5lbWl0KHNlbGVjdGVkTGFuZ3VhZ2UpO1xuXG4gICAgICAvLyBTZXQgdGhlIG5ldyBsYW5ndWFnZSAocmVhY3RpdmUgYnkgZGVmYXVsdCwgcmVsb2FkIGlmIGZvcmNlUmVsb2FkIGlzIHRydWUpXG4gICAgICB0aGlzLmkxOG4uc2V0TGFuZ3VhZ2UobmV3TGFuZywgdGhpcy5wcm9wcy5mb3JjZVJlbG9hZCk7XG5cbiAgICAgIC8vIFVwZGF0ZSBwb3BvdmVyIHNlbGVjdGVkIHZhbHVlIGZvciByZWFjdGl2ZSBVSVxuICAgICAgaWYgKHRoaXMucG9wb3ZlclByb3BzKSB7XG4gICAgICAgIHRoaXMucG9wb3ZlclByb3BzID0geyAuLi50aGlzLnBvcG92ZXJQcm9wcywgc2VsZWN0ZWRWYWx1ZTogbmV3TGFuZyB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2xhbmd1YWdlLXNlbGVjdG9yL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvciB9IGZyb20gJ0Bpb25pYy9jb3JlJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgdmFsLWxhbmd1YWdlLXNlbGVjdG9yIGNvbXBvbmVudC5cbiAqIEEgc3BlY2lhbGl6ZWQgY29tcG9uZW50IGZvciBsYW5ndWFnZSBzZWxlY3Rpb24uXG4gKlxuICogQHByb3BlcnR5IGN1cnJlbnRMYW5ndWFnZSAtIEN1cnJlbnRseSBzZWxlY3RlZCBsYW5ndWFnZSBjb2RlLlxuICogQHByb3BlcnR5IGF2YWlsYWJsZUxhbmd1YWdlcyAtIEFycmF5IG9mIGF2YWlsYWJsZSBsYW5ndWFnZSBjb2Rlcy5cbiAqIEBwcm9wZXJ0eSBzaG93TGFiZWwgLSBXaGV0aGVyIHRvIHNob3cgdGhlIGxhYmVsLlxuICogQHByb3BlcnR5IGxhYmVsIC0gQ3VzdG9tIGxhYmVsIHRleHQgKHN0YXRpYykuXG4gKiBAcHJvcGVydHkgbGFiZWxDb25maWcgLSBSZWFjdGl2ZSBjb250ZW50IGNvbmZpZ3VyYXRpb24gZm9yIGxhYmVsLlxuICogQHByb3BlcnR5IHNob3dGbGFncyAtIFdoZXRoZXIgdG8gc2hvdyBmbGFnIGljb25zIGZvciBsYW5ndWFnZXMuXG4gKiBAcHJvcGVydHkgY29sb3IgLSBCdXR0b24gY29sb3IgKElvbmljIGNvbG9yIHN0cmluZykuXG4gKiBAcHJvcGVydHkgc2l6ZSAtIEJ1dHRvbiBzaXplICgnc21hbGwnIHwgJ2RlZmF1bHQnIHwgJ2xhcmdlJykuXG4gKiBAcHJvcGVydHkgZmlsbCAtIEJ1dHRvbiBmaWxsIHN0eWxlICgnY2xlYXInIHwgJ291dGxpbmUnIHwgJ3NvbGlkJyB8ICdkZWZhdWx0JykuXG4gKiBAcHJvcGVydHkgc2hhcGUgLSBCdXR0b24gc2hhcGUgKCdyb3VuZCcgfCB1bmRlZmluZWQpLlxuICogQHByb3BlcnR5IGV4cGFuZCAtIEJ1dHRvbiBleHBhbnNpb24gKCdmdWxsJyB8ICdibG9jaycgfCB1bmRlZmluZWQpLlxuICogQHByb3BlcnR5IGRpc2FibGVkIC0gV2hldGhlciB0aGUgc2VsZWN0b3IgaXMgZGlzYWJsZWQuXG4gKiBAcHJvcGVydHkgY3VzdG9tTGFuZ3VhZ2VOYW1lcyAtIEN1c3RvbSBkaXNwbGF5IG5hbWVzIGZvciBsYW5ndWFnZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFuZ3VhZ2VTZWxlY3Rvck1ldGFkYXRhIHtcbiAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCBsYW5ndWFnZSBjb2RlICovXG4gIGN1cnJlbnRMYW5ndWFnZT86IHN0cmluZztcbiAgLyoqIEFycmF5IG9mIGF2YWlsYWJsZSBsYW5ndWFnZSBjb2RlcyAqL1xuICBhdmFpbGFibGVMYW5ndWFnZXM/OiBzdHJpbmdbXTtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgbGFiZWwgKi9cbiAgc2hvd0xhYmVsPzogYm9vbGVhbjtcbiAgLyoqIFN0YXRpYyBsYWJlbCB0ZXh0ICh0YWtlcyBwcmVjZWRlbmNlIG92ZXIgbGFiZWxDb25maWcpICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogUmVhY3RpdmUgY29udGVudCBjb25maWd1cmF0aW9uIGZvciBsYWJlbCAqL1xuICBsYWJlbENvbmZpZz86IHtcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgZmFsbGJhY2s/OiBzdHJpbmc7XG4gICAgaW50ZXJwb2xhdGlvbj86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIH07XG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgZmxhZyBpY29ucyBmb3IgbGFuZ3VhZ2VzICovXG4gIHNob3dGbGFncz86IGJvb2xlYW47XG4gIC8qKiBCdXR0b24gY29sb3IgKi9cbiAgY29sb3I/OiBDb2xvcjtcbiAgLyoqIEJ1dHRvbiBzaXplICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ2RlZmF1bHQnIHwgJ2xhcmdlJztcbiAgLyoqIEJ1dHRvbiBmaWxsIHN0eWxlICovXG4gIGZpbGw/OiAnY2xlYXInIHwgJ291dGxpbmUnIHwgJ3NvbGlkJyB8ICdkZWZhdWx0JztcbiAgLyoqIEJ1dHRvbiBzaGFwZSAqL1xuICBzaGFwZT86ICdyb3VuZCc7XG4gIC8qKiBCdXR0b24gZXhwYW5zaW9uICovXG4gIGV4cGFuZD86ICdmdWxsJyB8ICdibG9jayc7XG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3RvciBpcyBkaXNhYmxlZCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBDdXN0b20gZGlzcGxheSBuYW1lcyBmb3IgbGFuZ3VhZ2VzICovXG4gIGN1c3RvbUxhbmd1YWdlTmFtZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2xhbmd1YWdlLXNlbGVjdG9yL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvciB9IGZyb20gJ0Bpb25pYy9jb3JlJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgdmFsLWxhbmd1YWdlLXNlbGVjdG9yIGNvbXBvbmVudC5cbiAqIEEgc3BlY2lhbGl6ZWQgY29tcG9uZW50IGZvciBsYW5ndWFnZSBzZWxlY3Rpb24uXG4gKlxuICogQHByb3BlcnR5IGN1cnJlbnRMYW5ndWFnZSAtIEN1cnJlbnRseSBzZWxlY3RlZCBsYW5ndWFnZSBjb2RlLlxuICogQHByb3BlcnR5IGF2YWlsYWJsZUxhbmd1YWdlcyAtIEFycmF5IG9mIGF2YWlsYWJsZSBsYW5ndWFnZSBjb2Rlcy5cbiAqIEBwcm9wZXJ0eSBzaG93TGFiZWwgLSBXaGV0aGVyIHRvIHNob3cgdGhlIGxhYmVsLlxuICogQHByb3BlcnR5IGxhYmVsIC0gQ3VzdG9tIGxhYmVsIHRleHQgKHN0YXRpYykuXG4gKiBAcHJvcGVydHkgbGFiZWxDb25maWcgLSBSZWFjdGl2ZSBjb250ZW50IGNvbmZpZ3VyYXRpb24gZm9yIGxhYmVsLlxuICogQHByb3BlcnR5IHNob3dGbGFncyAtIFdoZXRoZXIgdG8gc2hvdyBmbGFnIGljb25zIGZvciBsYW5ndWFnZXMuXG4gKiBAcHJvcGVydHkgY29sb3IgLSBCdXR0b24gY29sb3IgKElvbmljIGNvbG9yIHN0cmluZykuXG4gKiBAcHJvcGVydHkgc2l6ZSAtIEJ1dHRvbiBzaXplICgnc21hbGwnIHwgJ2RlZmF1bHQnIHwgJ2xhcmdlJykuXG4gKiBAcHJvcGVydHkgZmlsbCAtIEJ1dHRvbiBmaWxsIHN0eWxlICgnY2xlYXInIHwgJ291dGxpbmUnIHwgJ3NvbGlkJyB8ICdkZWZhdWx0JykuXG4gKiBAcHJvcGVydHkgc2hhcGUgLSBCdXR0b24gc2hhcGUgKCdyb3VuZCcgfCB1bmRlZmluZWQpLlxuICogQHByb3BlcnR5IGV4cGFuZCAtIEJ1dHRvbiBleHBhbnNpb24gKCdmdWxsJyB8ICdibG9jaycgfCB1bmRlZmluZWQpLlxuICogQHByb3BlcnR5IGRpc2FibGVkIC0gV2hldGhlciB0aGUgc2VsZWN0b3IgaXMgZGlzYWJsZWQuXG4gKiBAcHJvcGVydHkgY3VzdG9tTGFuZ3VhZ2VOYW1lcyAtIEN1c3RvbSBkaXNwbGF5IG5hbWVzIGZvciBsYW5ndWFnZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFuZ3VhZ2VTZWxlY3Rvck1ldGFkYXRhIHtcbiAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCBsYW5ndWFnZSBjb2RlICovXG4gIGN1cnJlbnRMYW5ndWFnZT86IHN0cmluZztcbiAgLyoqIEFycmF5IG9mIGF2YWlsYWJsZSBsYW5ndWFnZSBjb2RlcyAqL1xuICBhdmFpbGFibGVMYW5ndWFnZXM/OiBzdHJpbmdbXTtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgbGFiZWwgKi9cbiAgc2hvd0xhYmVsPzogYm9vbGVhbjtcbiAgLyoqIFN0YXRpYyBsYWJlbCB0ZXh0ICh0YWtlcyBwcmVjZWRlbmNlIG92ZXIgbGFiZWxDb25maWcpICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogUmVhY3RpdmUgY29udGVudCBjb25maWd1cmF0aW9uIGZvciBsYWJlbCAqL1xuICBsYWJlbENvbmZpZz86IHtcbiAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgZmFsbGJhY2s/OiBzdHJpbmc7XG4gICAgaW50ZXJwb2xhdGlvbj86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIH07XG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgZmxhZyBpY29ucyBmb3IgbGFuZ3VhZ2VzICovXG4gIHNob3dGbGFncz86IGJvb2xlYW47XG4gIC8qKiBCdXR0b24gY29sb3IgKi9cbiAgY29sb3I/OiBDb2xvcjtcbiAgLyoqIEJ1dHRvbiBzaXplICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ2RlZmF1bHQnIHwgJ2xhcmdlJztcbiAgLyoqIEJ1dHRvbiBmaWxsIHN0eWxlICovXG4gIGZpbGw/OiAnY2xlYXInIHwgJ291dGxpbmUnIHwgJ3NvbGlkJyB8ICdkZWZhdWx0JztcbiAgLyoqIEJ1dHRvbiBzaGFwZSAqL1xuICBzaGFwZT86ICdyb3VuZCc7XG4gIC8qKiBCdXR0b24gZXhwYW5zaW9uICovXG4gIGV4cGFuZD86ICdmdWxsJyB8ICdibG9jayc7XG4gIC8qKiBXaGV0aGVyIHRoZSBzZWxlY3RvciBpcyBkaXNhYmxlZCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBDdXN0b20gZGlzcGxheSBuYW1lcyBmb3IgbGFuZ3VhZ2VzICovXG4gIGN1c3RvbUxhbmd1YWdlTmFtZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKipcbiAgICogRm9yY2UgcGFnZSByZWxvYWQgb24gbGFuZ3VhZ2UgY2hhbmdlLlxuICAgKiBCeSBkZWZhdWx0IChmYWxzZSksIGxhbmd1YWdlIGNoYW5nZXMgYXJlIHJlYWN0aXZlIHdpdGhvdXQgcmVsb2FkLlxuICAgKiBTZXQgdG8gdHJ1ZSBmb3IgbGVnYWN5IGJlaGF2aW9yIG9yIGlmIHJlYWN0aXZlIHVwZGF0ZXMgZG9uJ3Qgd29yay5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZvcmNlUmVsb2FkPzogYm9vbGVhbjtcbn1cbiJdfQ==
@@ -10,6 +10,7 @@ import * as i4 from "./token.service";
10
10
  import * as i5 from "./storage.service";
11
11
  import * as i6 from "./sync.service";
12
12
  import * as i7 from "../firebase";
13
+ import * as i8 from "../i18n";
13
14
  /**
14
15
  * Servicio principal de autenticación.
15
16
  *
@@ -33,7 +34,7 @@ import * as i7 from "../firebase";
33
34
  * ```
34
35
  */
35
36
  export class AuthService {
36
- constructor(config, http, router, stateService, tokenService, storageService, syncService, firebaseService, messagingService) {
37
+ constructor(config, http, router, stateService, tokenService, storageService, syncService, firebaseService, messagingService, i18nService) {
37
38
  this.config = config;
38
39
  this.http = http;
39
40
  this.router = router;
@@ -43,6 +44,7 @@ export class AuthService {
43
44
  this.syncService = syncService;
44
45
  this.firebaseService = firebaseService;
45
46
  this.messagingService = messagingService;
47
+ this.i18nService = i18nService;
46
48
  // Timer para refresh proactivo
47
49
  this.refreshTimerId = null;
48
50
  this.syncSubscription = null;
@@ -493,6 +495,15 @@ export class AuthService {
493
495
  if (this.config.enableDeviceRegistration) {
494
496
  this.registerDeviceIfNeeded(); // fire-and-forget
495
497
  }
498
+ // Sincronizar idioma del usuario con i18n
499
+ if (this.i18nService && 'language' in response && response.language) {
500
+ const userLang = response.language;
501
+ const currentLang = this.i18nService.lang();
502
+ if (userLang !== currentLang) {
503
+ this.i18nService.setLanguage(userLang);
504
+ console.log(`[ValtechAuth] Language synced to: ${userLang}`);
505
+ }
506
+ }
496
507
  }
497
508
  clearState() {
498
509
  this.stopRefreshTimer();
@@ -838,7 +849,7 @@ export class AuthService {
838
849
  }
839
850
  return { platform: 'web', browser, os };
840
851
  }
841
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthService, deps: [{ token: VALTECH_AUTH_CONFIG }, { token: i1.HttpClient }, { token: i2.Router }, { token: i3.AuthStateService }, { token: i4.TokenService }, { token: i5.AuthStorageService }, { token: i6.AuthSyncService }, { token: i7.FirebaseService }, { token: i7.MessagingService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
852
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthService, deps: [{ token: VALTECH_AUTH_CONFIG }, { token: i1.HttpClient }, { token: i2.Router }, { token: i3.AuthStateService }, { token: i4.TokenService }, { token: i5.AuthStorageService }, { token: i6.AuthSyncService }, { token: i7.FirebaseService }, { token: i7.MessagingService, optional: true }, { token: i8.I18nService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
842
853
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthService, providedIn: 'root' }); }
843
854
  }
844
855
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthService, decorators: [{
@@ -849,5 +860,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
849
860
  args: [VALTECH_AUTH_CONFIG]
850
861
  }] }, { type: i1.HttpClient }, { type: i2.Router }, { type: i3.AuthStateService }, { type: i4.TokenService }, { type: i5.AuthStorageService }, { type: i6.AuthSyncService }, { type: i7.FirebaseService }, { type: i7.MessagingService, decorators: [{
851
862
  type: Optional
863
+ }] }, { type: i8.I18nService, decorators: [{
864
+ type: Optional
852
865
  }] }] });
853
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHeEUsT0FBTyxFQUFjLFVBQVUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7O0FBOEMvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFLdEIsWUFDdUMsTUFBeUIsRUFDdEQsSUFBZ0IsRUFDaEIsTUFBYyxFQUNkLFlBQThCLEVBQzlCLFlBQTBCLEVBQzFCLGNBQWtDLEVBQ2xDLFdBQTRCLEVBQzVCLGVBQWdDLEVBQ3BCLGdCQUF5QztRQVJ4QixXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN0RCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQW9CO1FBQ2xDLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDcEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQWIvRCwrQkFBK0I7UUFDdkIsbUJBQWMsR0FBeUMsSUFBSSxDQUFDO1FBQzVELHFCQUFnQixHQUF3QixJQUFJLENBQUM7UUFjckQsZ0RBQWdEO1FBQ2hELG9DQUFvQztRQUNwQyxnREFBZ0Q7UUFFaEQsdUNBQXVDO1FBQzlCLFVBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUV6QywrQkFBK0I7UUFDdEIsb0JBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQztRQUU3RCxzQkFBc0I7UUFDYixjQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFFakQsOEJBQThCO1FBQ3JCLFNBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztRQUV2QyxzQkFBc0I7UUFDYixnQkFBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1FBRXJELHdCQUF3QjtRQUNmLFVBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUV6QywyQkFBMkI7UUFDbEIsZ0JBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUVyRCw2QkFBNkI7UUFDcEIsaUJBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztRQUV2RCw4QkFBOEI7UUFDckIsZUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO1FBRW5ELG1CQUFtQjtRQUNWLFVBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztJQWxDdEMsQ0FBQztJQW9DSixnREFBZ0Q7SUFDaEQsaUJBQWlCO0lBQ2pCLGdEQUFnRDtJQUVoRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsVUFBVTtRQUNkLGlDQUFpQztRQUNqQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXBELElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVCLGtDQUFrQztZQUNsQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUVsRCx5QkFBeUI7Z0JBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDckUsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0QsQ0FBQztnQkFFRCx5Q0FBeUM7Z0JBQ3pDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BDLGdFQUFnRTtnQkFDaEUsSUFBSSxDQUFDO29CQUNILE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7Z0JBQ2xELENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDbEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FDNUIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELGdCQUFnQjtJQUNoQixnREFBZ0Q7SUFFaEQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLE9BQXNCO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFL0IsbURBQW1EO1FBQ25ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLE1BQU0sZUFBZSxHQUFrQjtZQUNyQyxHQUFHLE9BQU87WUFDVixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxZQUFZLENBQUMsUUFBUTtZQUNuRCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsT0FBTztZQUNoRCxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxZQUFZLENBQUMsRUFBRTtTQUNsQyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUNuRixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDYixJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDekIsMENBQTBDO2dCQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztvQkFDOUIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFTO29CQUM1QixNQUFNLEVBQUUsUUFBUSxDQUFDLFNBQVU7aUJBQzVCLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2hDLHdCQUF3QjtnQkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVwQyx1Q0FBdUM7Z0JBQ3ZDLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ2pELENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLE9BQXNCO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFL0IsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxTQUFTLEVBQUUsT0FBTyxDQUFDO2FBQ3ZELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLE9BQTJCO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUN0RixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDYixJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM5QyxpREFBaUQ7Z0JBQ2pELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFxQyxDQUFDLENBQUM7WUFDbkUsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDakQsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxPQUEwQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFxQixHQUFHLElBQUksQ0FBQyxPQUFPLGNBQWMsRUFBRSxPQUFPLENBQUM7YUFDaEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsQ0FBQyxJQUFZO1FBQ3BCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLE9BQU8sRUFBRSxtQ0FBbUM7YUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDTixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBb0IsR0FBRyxJQUFJLENBQUMsT0FBTyxhQUFhLEVBQUU7WUFDckQsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO1lBQzNCLElBQUk7U0FDTCxDQUFDO2FBQ0QsSUFBSSxDQUNILEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDakQsQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0JBQWtCO1FBQ2hCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUM7UUFDL0MsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLE9BQU8sRUFBRSwwQkFBMEI7YUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFDTixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxVQUFVLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdEYsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBRXpELDZEQUE2RDtZQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsZ0NBQWdDO1lBQzdGLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxrQ0FBa0M7WUFFL0YsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7Z0JBQ3pCLElBQUksRUFBRSxlQUFlO2dCQUNyQixPQUFPLEVBQUU7b0JBQ1AsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO29CQUNqQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxnQ0FBZ0M7b0JBQ3JFLFNBQVM7aUJBQ1Y7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQztRQUUvQywwREFBMEQ7UUFDMUQsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUU5Qix5Q0FBeUM7UUFDekMsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsSUFBSTtpQkFDTixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQztpQkFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDaEMsU0FBUyxFQUFFLENBQUM7UUFDakIsQ0FBQztRQUVELDhDQUE4QztRQUM5QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxrQ0FBa0M7SUFDbEMsZ0RBQWdEO0lBRWhEOztPQUVHO0lBQ0gsUUFBUSxDQUFDLE1BQWlCLEVBQUUsS0FBYztRQUN4QyxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFtQixHQUFHLElBQUksQ0FBQyxPQUFPLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUN0RSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLElBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBcUIsR0FBRyxJQUFJLENBQUMsT0FBTyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNqRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLFFBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixJQUFJLENBQXFCLEdBQUcsSUFBSSxDQUFDLE9BQU8sY0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUM7YUFDckUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsa0NBQWtDO0lBQ2xDLGdEQUFnRDtJQUVoRDs7O09BR0c7SUFDSCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBb0IsR0FBRyxJQUFJLENBQUMsT0FBTyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7YUFDN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlLENBQUMsSUFBWTtRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUEwQixHQUFHLElBQUksQ0FBQyxPQUFPLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDMUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBZ0MsR0FBRyxJQUFJLENBQUMsT0FBTyx3QkFBd0IsRUFBRSxFQUFFLENBQUM7YUFDaEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUEyQixHQUFHLElBQUksQ0FBQyxPQUFPLDhCQUE4QixDQUFDO2FBQzVFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsUUFBZ0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxtQkFBbUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDO2FBQzNFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELGlCQUFpQjtJQUNqQixnREFBZ0Q7SUFFaEQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFNBQVMsQ0FBQyxjQUFzQjtRQUM5QixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFvQixHQUFHLElBQUksQ0FBQyxPQUFPLGFBQWEsRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDO2FBQ3pFLElBQUksQ0FDSCxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbkIsK0NBQStDO1lBQy9DLDZEQUE2RDtZQUM3RCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYTtnQkFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRWxCLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FDdkIsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDUCxvQ0FBb0M7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO29CQUN6QixJQUFJLEVBQUUsWUFBWTtvQkFDbEIsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUU7aUJBQzNDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQztZQUNGLDhEQUE4RDtZQUM5RCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQ3BCLENBQUM7UUFDSixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ2pELENBQUM7SUFDTixDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELG9CQUFvQjtJQUNwQixnREFBZ0Q7SUFFaEQ7OztPQUdHO0lBQ0gsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQXFCLEdBQUcsSUFBSSxDQUFDLE9BQU8sVUFBVSxDQUFDO2FBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsT0FBNkI7UUFDekMsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEdBQUcsQ0FBd0IsR0FBRyxJQUFJLENBQUMsT0FBTyxVQUFVLEVBQUUsT0FBTyxDQUFDO2FBQzlELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELDZCQUE2QjtJQUM3QixnREFBZ0Q7SUFFaEQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLE9BQThCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixJQUFJLENBQXlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sa0JBQWtCLEVBQUUsT0FBTyxDQUFDO2FBQ3hFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsT0FBNkI7UUFDekMsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBd0IsR0FBRyxJQUFJLENBQUMsT0FBTyxpQkFBaUIsRUFBRSxPQUFPLENBQUM7YUFDdEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsV0FBVztJQUNYLGdEQUFnRDtJQUVoRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sY0FBYyxDQUFDLENBQUMsSUFBSSxDQUM5RSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUNqQyxRQUFRLENBQUMsS0FBSyxFQUNkLFFBQVEsQ0FBQyxXQUFXLEVBQ3BCLFFBQVEsQ0FBQyxZQUFZLENBQ3RCLENBQUM7WUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNqRCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxVQUFrQjtRQUM5QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztRQUVyQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakQsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxPQUFPLENBQ0wsQ0FBQyxTQUFTLEtBQUssR0FBRyxJQUFJLFNBQVMsS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLE1BQU0sQ0FBQyxDQUN6RixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxXQUFxQjtRQUNwQyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsV0FBcUI7UUFDckMsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxJQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELGtCQUFrQjtJQUNsQixnREFBZ0Q7SUFFaEQsSUFBWSxPQUFPO1FBQ2pCLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxRQUE0QztRQUN2RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLFNBQVUsR0FBRyxJQUFJLENBQUM7UUFDMUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVksQ0FBQyxDQUFDO1FBRXRFLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7WUFDakMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFZO1lBQ2xDLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBYTtZQUNwQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUc7WUFDdEIsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLO1lBQ3ZCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDM0IsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRTtZQUN2QyxZQUFZLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSztZQUM1RCxTQUFTO1NBQ1YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7WUFDNUIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFZO1lBQ2xDLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBYTtZQUNwQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQzNCLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUU7WUFDdkMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUs7WUFDNUQsU0FBUztTQUNWLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFOUMsMkJBQTJCO1FBQzNCLElBQ0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUI7WUFDckMsZUFBZSxJQUFJLFFBQVE7WUFDM0IsUUFBUSxDQUFDLGFBQWEsRUFDdEIsQ0FBQztZQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELDZEQUE2RDtRQUM3RCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQjtRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBRTdCLE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDdkUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUM7UUFDcEQsTUFBTSxLQUFLLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVyQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxDQUFDO29CQUNsQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtpQkFDM0IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ1osQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzlCLCtDQUErQztZQUMvQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQUM7Z0JBQ2xDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2FBQzNCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsS0FBb0I7UUFDMUMsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLGdDQUFnQztnQkFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDOUMsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDL0QsSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDN0QsQ0FBQztvQkFDRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDM0IsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9DLE1BQU07WUFDUixLQUFLLG9CQUFvQixDQUFDLENBQUMsQ0FBQztnQkFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN4RixNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssWUFBWTtnQkFDZixrRkFBa0Y7Z0JBQ2xGLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUF3QjtRQUM5QyxNQUFNLFNBQVMsR0FBYztZQUMzQixJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksZUFBZTtZQUMxQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksb0NBQW9DO1NBQ3RFLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELHVCQUF1QjtJQUN2QixnREFBZ0Q7SUFFeEMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLGFBQXFCO1FBQ3BELElBQUksQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN6QixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2hFLE9BQU8sQ0FBQyxHQUFHLENBQUMsMENBQTBDLENBQUMsQ0FBQztZQUMxRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLElBQUksQ0FDViw2RkFBNkYsQ0FDOUYsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLG1EQUFtRDtZQUNuRCxPQUFPLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWU7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMseUJBQXlCO1lBQUUsT0FBTztRQUVuRCxJQUFJLENBQUM7WUFDSCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7WUFDM0QsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2Ysc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsMkNBQTJDO0lBQzNDLGdEQUFnRDtJQUVoRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0RBQWdELENBQUMsQ0FBQztZQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzlELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUVELG1DQUFtQztRQUNuQyxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCRztJQUNILEtBQUssQ0FBQyxvQkFBb0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzNCLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7WUFDakQsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVix1QkFBdUI7Z0JBQ3ZCLE1BQU0sY0FBYyxDQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEVBQUU7b0JBQ2hGLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRTtpQkFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDcEMsQ0FBQztnQkFFRix3QkFBd0I7Z0JBQ3hCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7Z0JBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUIsQ0FBQztZQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsOEJBQThCO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMzQixPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQWlDLENBQUM7SUFDbkYsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxhQUFzQjtRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7WUFDNUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLHdCQUF3QixFQUFFLENBQUM7UUFDaEUsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILGlEQUFpRDtZQUNqRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMxQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDOUQsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSx1Q0FBdUMsRUFBRSxDQUFDO2dCQUMvRSxDQUFDO1lBQ0gsQ0FBQztZQUVELHNFQUFzRTtZQUN0RSxJQUFJLEtBQUssR0FBRyxhQUFhLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLFlBQVksQ0FBQztZQUVqRSwyREFBMkQ7WUFDM0QsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7b0JBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxvQ0FBb0MsRUFBRSxDQUFDO2dCQUM1RSxDQUFDO2dCQUNELEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqRCxDQUFDO1lBRUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSw4QkFBOEIsRUFBRSxDQUFDO1lBQ3RFLENBQUM7WUFFRCx1QkFBdUI7WUFDdkIsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixFQUMzQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUNqQyxDQUNGLENBQUM7WUFFRixPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkYsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBRXpFLENBQUM7UUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0RBQWtELEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEUsT0FBTztnQkFDTCxVQUFVLEVBQUUsS0FBSztnQkFDakIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLEtBQUssRUFBRSxPQUFPLElBQUksZ0NBQWdDO2FBQ25GLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLEtBQUssQ0FBQyxzQkFBc0I7UUFDbEMsc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHdCQUF3QixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDcEUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUMvQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCxpQ0FBaUM7WUFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDOUQsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sS0FBSyxDQUFDLENBQUMsbUVBQW1FO1lBQ25GLENBQUM7WUFFRCwrQ0FBK0M7WUFDL0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELHVCQUF1QjtZQUN2QixNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1RCxNQUFNLGNBQWMsQ0FDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEVBQzNDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQ2pDLENBQ0YsQ0FBQztZQUVGLE9BQU8sQ0FBQyxHQUFHLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUM1RCxPQUFPLElBQUksQ0FBQztRQUVkLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsZ0RBQWdEO1lBQ2hELE9BQU8sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGdCQUFnQjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3BFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQztZQUNqRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLHdDQUF3QztnQkFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixFQUFFO29CQUNoRixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUU7aUJBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBRWhELGtCQUFrQjtnQkFDbEIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLDZCQUE2QjtRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCO1FBQ3hCLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFFL0IscUJBQXFCO1FBQ3JCLElBQUksT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUN4QixJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMzQixPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLENBQUM7YUFBTSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ25CLENBQUM7YUFBTSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLEdBQUcsUUFBUSxDQUFDO1FBQ3JCLENBQUM7YUFBTSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLEdBQUcsUUFBUSxDQUFDO1FBQ3JCLENBQUM7UUFFRCxjQUFjO1FBQ2QsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBQ25CLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzNCLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDakIsQ0FBQzthQUFNLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2pDLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDZixDQUFDO2FBQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDaEMsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNmLENBQUM7YUFBTSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBQ2pCLENBQUM7YUFBTSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDOUUsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNiLENBQUM7UUFFRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDMUMsQ0FBQzsrR0FuN0JVLFdBQVcsa0JBTVosbUJBQW1CO21IQU5sQixXQUFXLGNBREUsTUFBTTs7NEZBQ25CLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFPN0IsTUFBTTsyQkFBQyxtQkFBbUI7OzBCQVExQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBvZiwgZnJvbSwgZmlyc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwLCBjYXRjaEVycm9yLCBzd2l0Y2hNYXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IEF1dGhTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL2F1dGgtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBUb2tlblNlcnZpY2UgfSBmcm9tICcuL3Rva2VuLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aFN5bmNTZXJ2aWNlIH0gZnJvbSAnLi9zeW5jLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgU2lnbmluUmVxdWVzdCxcbiAgU2lnbmluUmVzcG9uc2UsXG4gIFNpZ251cFJlcXVlc3QsXG4gIFNpZ251cFJlc3BvbnNlLFxuICBWZXJpZnlFbWFpbFJlcXVlc3QsXG4gIFZlcmlmeUVtYWlsUmVzcG9uc2UsXG4gIFJlc2VuZENvZGVSZXF1ZXN0LFxuICBSZXNlbmRDb2RlUmVzcG9uc2UsXG4gIE1GQVZlcmlmeVJlc3BvbnNlLFxuICBSZWZyZXNoUmVzcG9uc2UsXG4gIEdldFBlcm1pc3Npb25zUmVzcG9uc2UsXG4gIEdldFByb2ZpbGVSZXNwb25zZSxcbiAgVXBkYXRlUHJvZmlsZVJlcXVlc3QsXG4gIFVwZGF0ZVByb2ZpbGVSZXNwb25zZSxcbiAgTUZBU2V0dXBSZXNwb25zZSxcbiAgTUZBQ29uZmlybVJlc3BvbnNlLFxuICBNRkFEaXNhYmxlUmVzcG9uc2UsXG4gIEZvcmdvdFBhc3N3b3JkUmVxdWVzdCxcbiAgRm9yZ290UGFzc3dvcmRSZXNwb25zZSxcbiAgUmVzZXRQYXNzd29yZFJlcXVlc3QsXG4gIFJlc2V0UGFzc3dvcmRSZXNwb25zZSxcbiAgU3dpdGNoT3JnUmVzcG9uc2UsXG4gIE1GQU1ldGhvZCxcbiAgQXV0aEVycm9yLFxuICBBdXRoU3luY0V2ZW50LFxuICBWYWx0ZWNoQXV0aENvbmZpZyxcbiAgUmVnaXN0ZXJEZXZpY2VSZXNwb25zZSxcbiAgRW5hYmxlTm90aWZpY2F0aW9uc1Jlc3VsdCxcbiAgTm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlLFxuICBSZWdpc3RlckRldmljZVJlc3VsdCxcbiAgLy8gVE9UUCBNRkEgdHlwZXNcbiAgVE9UUFNldHVwUmVzcG9uc2UsXG4gIFRPVFBWZXJpZnlTZXR1cFJlc3BvbnNlLFxuICBUT1RQRGlzYWJsZVJlc3BvbnNlLFxuICBSZWdlbmVyYXRlQmFja3VwQ29kZXNSZXNwb25zZSxcbiAgQmFja3VwQ29kZXNDb3VudFJlc3BvbnNlLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEZpcmViYXNlU2VydmljZSwgTWVzc2FnaW5nU2VydmljZSB9IGZyb20gJy4uL2ZpcmViYXNlJztcblxuXG4vKipcbiAqIFNlcnZpY2lvIHByaW5jaXBhbCBkZSBhdXRlbnRpY2FjacOzbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgTG9naW5Db21wb25lbnQge1xuICogICBwcml2YXRlIGF1dGggPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICpcbiAqICAgYXN5bmMgbG9naW4oKSB7XG4gKiAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5hdXRoLnNpZ25pbih7IGVtYWlsLCBwYXNzd29yZCB9KSk7XG4gKiAgICAgaWYgKHRoaXMuYXV0aC5tZmFQZW5kaW5nKCkucmVxdWlyZWQpIHtcbiAqICAgICAgIC8vIE1vc3RyYXIgVUkgZGUgTUZBXG4gKiAgICAgfSBlbHNlIHtcbiAqICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLy8gVGltZXIgcGFyYSByZWZyZXNoIHByb2FjdGl2b1xuICBwcml2YXRlIHJlZnJlc2hUaW1lcklkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN5bmNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVkFMVEVDSF9BVVRIX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFZhbHRlY2hBdXRoQ29uZmlnLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgc3RhdGVTZXJ2aWNlOiBBdXRoU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9rZW5TZXJ2aWNlOiBUb2tlblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogQXV0aFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3luY1NlcnZpY2U6IEF1dGhTeW5jU2VydmljZSxcbiAgICBwcml2YXRlIGZpcmViYXNlU2VydmljZTogRmlyZWJhc2VTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgbWVzc2FnaW5nU2VydmljZTogTWVzc2FnaW5nU2VydmljZSB8IG51bGwsXG4gICkge31cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRVNUQURPIFDDmkJMSUNPIChTaWduYWxzIHJlYWRvbmx5KVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKiogRXN0YWRvIGNvbXBsZXRvIGRlIGF1dGVudGljYWNpw7NuICovXG4gIHJlYWRvbmx5IHN0YXRlID0gdGhpcy5zdGF0ZVNlcnZpY2Uuc3RhdGU7XG5cbiAgLyoqIFVzdWFyaW8gZXN0w6EgYXV0ZW50aWNhZG8gKi9cbiAgcmVhZG9ubHkgaXNBdXRoZW50aWNhdGVkID0gdGhpcy5zdGF0ZVNlcnZpY2UuaXNBdXRoZW50aWNhdGVkO1xuXG4gIC8qKiBFc3RhZG8gZGUgY2FyZ2EgKi9cbiAgcmVhZG9ubHkgaXNMb2FkaW5nID0gdGhpcy5zdGF0ZVNlcnZpY2UuaXNMb2FkaW5nO1xuXG4gIC8qKiBJbmZvcm1hY2nDs24gZGVsIHVzdWFyaW8gKi9cbiAgcmVhZG9ubHkgdXNlciA9IHRoaXMuc3RhdGVTZXJ2aWNlLnVzZXI7XG5cbiAgLyoqIFRva2VuIGRlIGFjY2VzbyAqL1xuICByZWFkb25seSBhY2Nlc3NUb2tlbiA9IHRoaXMuc3RhdGVTZXJ2aWNlLmFjY2Vzc1Rva2VuO1xuXG4gIC8qKiBSb2xlcyBkZWwgdXN1YXJpbyAqL1xuICByZWFkb25seSByb2xlcyA9IHRoaXMuc3RhdGVTZXJ2aWNlLnJvbGVzO1xuXG4gIC8qKiBQZXJtaXNvcyBkZWwgdXN1YXJpbyAqL1xuICByZWFkb25seSBwZXJtaXNzaW9ucyA9IHRoaXMuc3RhdGVTZXJ2aWNlLnBlcm1pc3Npb25zO1xuXG4gIC8qKiBVc3VhcmlvIGVzIHN1cGVyIGFkbWluICovXG4gIHJlYWRvbmx5IGlzU3VwZXJBZG1pbiA9IHRoaXMuc3RhdGVTZXJ2aWNlLmlzU3VwZXJBZG1pbjtcblxuICAvKiogRXN0YWRvIGRlIE1GQSBwZW5kaWVudGUgKi9cbiAgcmVhZG9ubHkgbWZhUGVuZGluZyA9IHRoaXMuc3RhdGVTZXJ2aWNlLm1mYVBlbmRpbmc7XG5cbiAgLyoqIEVycm9yIGFjdHVhbCAqL1xuICByZWFkb25seSBlcnJvciA9IHRoaXMuc3RhdGVTZXJ2aWNlLmVycm9yO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJTklDSUFMSVpBQ0nDk05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYWxpemEgZWwgc2VydmljaW8gZGUgYXV0ZW50aWNhY2nDs24uXG4gICAqIExsYW1hZG8gYXV0b23DoXRpY2FtZW50ZSBwb3IgcHJvdmlkZVZhbHRlY2hBdXRoLlxuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyAxLiBDYXJnYXIgZXN0YWRvIGRlc2RlIHN0b3JhZ2VcbiAgICBjb25zdCBzdG9yZWRTdGF0ZSA9IHRoaXMuc3RvcmFnZVNlcnZpY2UubG9hZFN0YXRlKCk7XG5cbiAgICBpZiAoc3RvcmVkU3RhdGUuYWNjZXNzVG9rZW4pIHtcbiAgICAgIC8vIDIuIFZlcmlmaWNhciBzaSB0b2tlbiBlcyB2w6FsaWRvXG4gICAgICBpZiAodGhpcy50b2tlblNlcnZpY2UuaXNUb2tlblZhbGlkKHN0b3JlZFN0YXRlLmFjY2Vzc1Rva2VuKSkge1xuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5yZXN0b3JlRnJvbVN0b3JhZ2Uoc3RvcmVkU3RhdGUpO1xuXG4gICAgICAgIC8vIEV4dHJhZXIgaW5mbyBkZWwgdG9rZW5cbiAgICAgICAgY29uc3QgY2xhaW1zID0gdGhpcy50b2tlblNlcnZpY2UucGFyc2VUb2tlbihzdG9yZWRTdGF0ZS5hY2Nlc3NUb2tlbik7XG4gICAgICAgIGlmIChjbGFpbXMpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS51cGRhdGVVc2VySW5mbyhjbGFpbXMudWlkLCBjbGFpbXMuZW1haWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gSW5pY2lhciB0aW1lciBkZSByZWZyZXNjbyBwcm9hY3Rpdm9cbiAgICAgICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuICAgICAgfSBlbHNlIGlmIChzdG9yZWRTdGF0ZS5yZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgLy8gNC4gVG9rZW4gZXhwaXJhZG8gcGVybyBoYXkgcmVmcmVzaCB0b2tlbiAtIGludGVudGFyIHJlZnJlc2NhclxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuKCkpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB0aGlzLnNpZ25PdXRGaXJlYmFzZSgpO1xuICAgICAgICAgIHRoaXMuY2xlYXJTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNpZ25PdXRGaXJlYmFzZSgpO1xuICAgICAgICB0aGlzLmNsZWFyU3RhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LiBJbmljaWFyIHNpbmNyb25pemFjacOzbiBlbnRyZSBwZXN0YcOxYXNcbiAgICBpZiAodGhpcy5jb25maWcuZW5hYmxlVGFiU3luYykge1xuICAgICAgdGhpcy5zeW5jU2VydmljZS5zdGFydCgpO1xuICAgICAgdGhpcy5zeW5jU3Vic2NyaXB0aW9uID0gdGhpcy5zeW5jU2VydmljZS5vbkV2ZW50JC5zdWJzY3JpYmUoZXZlbnQgPT5cbiAgICAgICAgdGhpcy5oYW5kbGVTeW5jRXZlbnQoZXZlbnQpXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldExvYWRpbmcoZmFsc2UpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgdGhpcy5zeW5jU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEFVVEVOVElDQUNJw5NOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBJbmljaWEgc2VzacOzbiBjb24gZW1haWwgeSBjb250cmFzZcOxYS5cbiAgICogRGV0ZWN0YSBhdXRvbcOhdGljYW1lbnRlIGxhIHBsYXRhZm9ybWEgcGFyYSBpZGVudGlmaWNhciBkaXNwb3NpdGl2b3MgbnVldm9zLlxuICAgKi9cbiAgc2lnbmluKHJlcXVlc3Q6IFNpZ25pblJlcXVlc3QpOiBPYnNlcnZhYmxlPFNpZ25pblJlc3BvbnNlPiB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuY2xlYXJFcnJvcigpO1xuXG4gICAgLy8gQWdyZWdhciBpbmZvIGRlIHBsYXRhZm9ybWEgcGFyYSBkZXZpY2UgZGV0ZWN0aW9uXG4gICAgY29uc3QgcGxhdGZvcm1JbmZvID0gdGhpcy5kZXRlY3RQbGF0Zm9ybUluZm8oKTtcbiAgICBjb25zdCBlbnJpY2hlZFJlcXVlc3Q6IFNpZ25pblJlcXVlc3QgPSB7XG4gICAgICAuLi5yZXF1ZXN0LFxuICAgICAgcGxhdGZvcm06IHJlcXVlc3QucGxhdGZvcm0gPz8gcGxhdGZvcm1JbmZvLnBsYXRmb3JtLFxuICAgICAgYnJvd3NlcjogcmVxdWVzdC5icm93c2VyID8/IHBsYXRmb3JtSW5mby5icm93c2VyLFxuICAgICAgb3M6IHJlcXVlc3Qub3MgPz8gcGxhdGZvcm1JbmZvLm9zLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8U2lnbmluUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vc2lnbmluYCwgZW5yaWNoZWRSZXF1ZXN0KS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLm1mYVJlcXVpcmVkKSB7XG4gICAgICAgICAgLy8gTUZBIHJlcXVlcmlkbyAtIGd1YXJkYXIgZXN0YWRvIHRlbXBvcmFsXG4gICAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0TUZBUGVuZGluZyh7XG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIG1mYVRva2VuOiByZXNwb25zZS5tZmFUb2tlbiEsXG4gICAgICAgICAgICBtZXRob2Q6IHJlc3BvbnNlLm1mYU1ldGhvZCEsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAvLyBMb2dpbiBleGl0b3NvIHNpbiBNRkFcbiAgICAgICAgICB0aGlzLmhhbmRsZVN1Y2Nlc3NmdWxBdXRoKHJlc3BvbnNlKTtcblxuICAgICAgICAgIC8vIE5vdGlmaWNhciBzaSBlcyB1biBkaXNwb3NpdGl2byBudWV2b1xuICAgICAgICAgIGlmIChyZXNwb25zZS5pc05ld0RldmljZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQXV0aF0gTmV3IGRldmljZSBkZXRlY3RlZDonLCByZXNwb25zZS5kZXZpY2VJZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgdW4gbnVldm8gdXN1YXJpby5cbiAgICogRWwgdXN1YXJpbyBxdWVkYSBlbiBlc3RhZG8gUEVORElORyBoYXN0YSB2ZXJpZmljYXIgc3UgZW1haWwuXG4gICAqL1xuICBzaWdudXAocmVxdWVzdDogU2lnbnVwUmVxdWVzdCk6IE9ic2VydmFibGU8U2lnbnVwUmVzcG9uc2U+IHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5jbGVhckVycm9yKCk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxTaWdudXBSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9zaWdudXBgLCByZXF1ZXN0KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBlbWFpbCBjb24gY8OzZGlnbyBkZSA2IGTDrWdpdG9zLlxuICAgKiBTaSBlcyBleGl0b3NvLCBoYWNlIGF1dG8tbG9naW4geSByZXRvcm5hIHRva2Vucy5cbiAgICovXG4gIHZlcmlmeUVtYWlsKHJlcXVlc3Q6IFZlcmlmeUVtYWlsUmVxdWVzdCk6IE9ic2VydmFibGU8VmVyaWZ5RW1haWxSZXNwb25zZT4ge1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmNsZWFyRXJyb3IoKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxWZXJpZnlFbWFpbFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3ZlcmlmeS1lbWFpbGAsIHJlcXVlc3QpLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UudmVyaWZpZWQgJiYgcmVzcG9uc2UuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAvLyBBdXRvLWxvZ2luOiBndWFyZGFyIHRva2VucyB5IGFjdHVhbGl6YXIgZXN0YWRvXG4gICAgICAgICAgdGhpcy5oYW5kbGVTdWNjZXNzZnVsQXV0aChyZXNwb25zZSBhcyB1bmtub3duIGFzIFNpZ25pblJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZW52w61hIGPDs2RpZ28gZGUgdmVyaWZpY2FjacOzbiBhbCBlbWFpbC5cbiAgICovXG4gIHJlc2VuZENvZGUocmVxdWVzdDogUmVzZW5kQ29kZVJlcXVlc3QpOiBPYnNlcnZhYmxlPFJlc2VuZENvZGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PFJlc2VuZENvZGVSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9yZXNlbmQtY29kZWAsIHJlcXVlc3QpXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIGPDs2RpZ28gTUZBLlxuICAgKi9cbiAgdmVyaWZ5TUZBKGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8TUZBVmVyaWZ5UmVzcG9uc2U+IHtcbiAgICBjb25zdCBtZmFTdGF0ZSA9IHRoaXMubWZhUGVuZGluZygpO1xuICAgIGlmICghbWZhU3RhdGUubWZhVG9rZW4pIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICh7XG4gICAgICAgIGNvZGU6ICdNRkFfTk9UX1BFTkRJTkcnLFxuICAgICAgICBtZXNzYWdlOiAnTm8gaGF5IHZlcmlmaWNhY2nDs24gTUZBIHBlbmRpZW50ZScsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8TUZBVmVyaWZ5UmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vbWZhL3ZlcmlmeWAsIHtcbiAgICAgICAgbWZhVG9rZW46IG1mYVN0YXRlLm1mYVRva2VuLFxuICAgICAgICBjb2RlLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmNsZWFyTUZBUGVuZGluZygpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2Vzc2Z1bEF1dGgocmVzcG9uc2UpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2NhIGVsIHRva2VuIGRlIGFjY2Vzby5cbiAgICogSW1wbGVtZW50YSB0b2tlbiByb3RhdGlvbjogY2FkYSByZWZyZXNoIGdlbmVyYSB1biBudWV2byByZWZyZXNoIHRva2VuXG4gICAqIHF1ZSBlbCBjbGllbnRlIGRlYmUgZ3VhcmRhciBwYXJhIGVsIHByw7N4aW1vIHJlZnJlc2guXG4gICAqL1xuICByZWZyZXNoQWNjZXNzVG9rZW4oKTogT2JzZXJ2YWJsZTxSZWZyZXNoUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLnN0YXRlKCkucmVmcmVzaFRva2VuO1xuICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiAoe1xuICAgICAgICBjb2RlOiAnTk9fUkVGUkVTSF9UT0tFTicsXG4gICAgICAgIG1lc3NhZ2U6ICdObyBoYXkgdG9rZW4gZGUgcmVmcmVzY28nLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxSZWZyZXNoUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vcmVmcmVzaGAsIHsgcmVmcmVzaFRva2VuIH0pLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICBjb25zdCBleHBpcmVzQXQgPSBEYXRlLm5vdygpICsgcmVzcG9uc2UuZXhwaXJlc0luICogMTAwMDtcblxuICAgICAgICAvLyBUb2tlbiByb3RhdGlvbjogZ3VhcmRhciBudWV2byBhY2Nlc3MgdG9rZW4gWSByZWZyZXNoIHRva2VuXG4gICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnVwZGF0ZUFjY2Vzc1Rva2VuKHJlc3BvbnNlLmFjY2Vzc1Rva2VuLCByZXNwb25zZS5leHBpcmVzSW4pO1xuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS51cGRhdGVSZWZyZXNoVG9rZW4ocmVzcG9uc2UucmVmcmVzaFRva2VuKTsgLy8gTlVFVk86IGd1YXJkYXIgcmVmcmVzaCByb3RhZG9cbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zYXZlQWNjZXNzVG9rZW4ocmVzcG9uc2UuYWNjZXNzVG9rZW4sIGV4cGlyZXNBdCk7XG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2F2ZVJlZnJlc2hUb2tlbihyZXNwb25zZS5yZWZyZXNoVG9rZW4pOyAvLyBOVUVWTzogcGVyc2lzdGlyIHJlZnJlc2ggcm90YWRvXG5cbiAgICAgICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuICAgICAgICB0aGlzLnN5bmNTZXJ2aWNlLmJyb2FkY2FzdCh7XG4gICAgICAgICAgdHlwZTogJ1RPS0VOX1JFRlJFU0gnLFxuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiByZXNwb25zZS5hY2Nlc3NUb2tlbixcbiAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogcmVzcG9uc2UucmVmcmVzaFRva2VuLCAvLyBOVUVWTzogc2luY3Jvbml6YXIgZW50cmUgdGFic1xuICAgICAgICAgICAgZXhwaXJlc0F0XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLmxvZ291dCgpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2llcnJhIHNlc2nDs24uXG4gICAqL1xuICBhc3luYyBsb2dvdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVmcmVzaFRva2VuID0gdGhpcy5zdGF0ZSgpLnJlZnJlc2hUb2tlbjtcblxuICAgIC8vIEVsaW1pbmFyIGRpc3Bvc2l0aXZvIGRlbCBiYWNrZW5kIGFudGVzIGRlIGNlcnJhciBzZXNpw7NuXG4gICAgYXdhaXQgdGhpcy51bnJlZ2lzdGVyRGV2aWNlKCk7XG5cbiAgICAvLyBOb3RpZmljYXIgYWwgYmFja2VuZCAoZmlyZSBhbmQgZm9yZ2V0KVxuICAgIGlmIChyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHRoaXMuaHR0cFxuICAgICAgICAucG9zdChgJHt0aGlzLmJhc2VVcmx9L2xvZ291dGAsIHsgcmVmcmVzaFRva2VuIH0pXG4gICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLy8gQ2VycmFyIHNlc2nDs24gZGUgRmlyZWJhc2Ugc2kgZXN0w6EgaW50ZWdyYWRvXG4gICAgdGhpcy5zaWduT3V0RmlyZWJhc2UoKTtcblxuICAgIHRoaXMuY2xlYXJTdGF0ZSgpO1xuICAgIHRoaXMuc3luY1NlcnZpY2UuYnJvYWRjYXN0KHsgdHlwZTogJ0xPR09VVCcgfSk7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuY29uZmlnLmxvZ2luUm91dGVdKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNRkEgU0VUVVAgKHVzdWFyaW8gYXV0ZW50aWNhZG8pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmEgTUZBIHBhcmEgZWwgdXN1YXJpby5cbiAgICovXG4gIHNldHVwTUZBKG1ldGhvZDogTUZBTWV0aG9kLCBwaG9uZT86IHN0cmluZyk6IE9ic2VydmFibGU8TUZBU2V0dXBSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PE1GQVNldHVwUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vbWZhL3NldHVwYCwgeyBtZXRob2QsIHBob25lIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1hIGxhIGNvbmZpZ3VyYWNpw7NuIGRlIE1GQS5cbiAgICovXG4gIGNvbmZpcm1NRkEoY29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxNRkFDb25maXJtUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxNRkFDb25maXJtUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vbWZhL2NvbmZpcm1gLCB7IGNvZGUgfSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzaGFiaWxpdGEgTUZBLlxuICAgKi9cbiAgZGlzYWJsZU1GQShwYXNzd29yZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxNRkFEaXNhYmxlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxNRkFEaXNhYmxlUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vbWZhL2Rpc2FibGVgLCB7IHBhc3N3b3JkIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFRPVFAgTUZBIChHb29nbGUgQXV0aGVudGljYXRvcilcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYSBjb25maWd1cmFjacOzbiBkZSBUT1RQIE1GQS5cbiAgICogUmV0b3JuYSBlbCBzZWNyZXRvLCBVUkwgcGFyYSBRUiBjb2RlIHkgY8OzZGlnb3MgZGUgcmVzcGFsZG8uXG4gICAqL1xuICBzZXR1cFRPVFAoKTogT2JzZXJ2YWJsZTxUT1RQU2V0dXBSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PFRPVFBTZXR1cFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS90b3RwL3NldHVwYCwge30pXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIGVsIGPDs2RpZ28gVE9UUCB5IGFjdGl2YSBNRkEuXG4gICAqIERlYmUgbGxhbWFyc2UgZGVzcHXDqXMgZGUgc2V0dXBUT1RQIGNvbiBlbCBjw7NkaWdvIGRlbCBhdXRoZW50aWNhdG9yLlxuICAgKi9cbiAgdmVyaWZ5VE9UUFNldHVwKGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8VE9UUFZlcmlmeVNldHVwUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxUT1RQVmVyaWZ5U2V0dXBSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9tZmEvdG90cC92ZXJpZnlgLCB7IGNvZGUgfSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnZW5lcmEgbG9zIGPDs2RpZ29zIGRlIHJlc3BhbGRvIFRPVFAuXG4gICAqIExvcyBjw7NkaWdvcyBhbnRlcmlvcmVzIHNvbiBpbnZhbGlkYWRvcy5cbiAgICovXG4gIHJlZ2VuZXJhdGVCYWNrdXBDb2RlcygpOiBPYnNlcnZhYmxlPFJlZ2VuZXJhdGVCYWNrdXBDb2Rlc1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8UmVnZW5lcmF0ZUJhY2t1cENvZGVzUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vbWZhL3RvdHAvYmFja3VwLWNvZGVzYCwge30pXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbGEgY2FudGlkYWQgZGUgY8OzZGlnb3MgZGUgcmVzcGFsZG8gcmVzdGFudGVzLlxuICAgKi9cbiAgZ2V0QmFja3VwQ29kZXNDb3VudCgpOiBPYnNlcnZhYmxlPEJhY2t1cENvZGVzQ291bnRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8QmFja3VwQ29kZXNDb3VudFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS90b3RwL2JhY2t1cC1jb2Rlcy9jb3VudGApXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2FjdGl2YSBUT1RQIE1GQSAocmVxdWllcmUgY29udHJhc2XDsWEpLlxuICAgKi9cbiAgZGlzYWJsZVRPVFAocGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8VE9UUERpc2FibGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PFRPVFBEaXNhYmxlUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vbWZhL3RvdHAvZGlzYWJsZWAsIHsgcGFzc3dvcmQgfSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gT1JHQU5JWkFDSU9ORVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIENhbWJpYSBsYSBvcmdhbml6YWNpw7NuIGFjdGl2YSBkZWwgdXN1YXJpby5cbiAgICogR2VuZXJhIHVuIG51ZXZvIEZpcmViYXNlIHRva2VuIGNvbiBlbCBhY3RpdmVPcmcgYWN0dWFsaXphZG8uXG4gICAqXG4gICAqIEBwYXJhbSBvcmdhbml6YXRpb25JZCAtIElEIGRlIGxhIG9yZ2FuaXphY2nDs24gYSBsYSBxdWUgY2FtYmlhclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIGNvbiBlbCBudWV2byBGaXJlYmFzZSB0b2tlbiB5IGFjdGl2ZU9yZ1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYXV0aC5zd2l0Y2hPcmcoJ29yZ194eXo3ODknKSk7XG4gICAqIC8vIEZpcmViYXNlIHlhIGVzdMOhIHJlLWF1dGVudGljYWRvIGNvbiBsYSBudWV2YSBvcmdcbiAgICogY29uc3QgYWN0aXZlT3JnID0gYXdhaXQgdGhpcy5maXJlYmFzZS5nZXRBY3RpdmVPcmcoKTtcbiAgICogYGBgXG4gICAqL1xuICBzd2l0Y2hPcmcob3JnYW5pemF0aW9uSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8U3dpdGNoT3JnUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxTd2l0Y2hPcmdSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9zd2l0Y2gtb3JnYCwgeyBvcmdhbml6YXRpb25JZCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgLy8gUmUtYXV0ZW50aWNhciBlbiBGaXJlYmFzZSBjb24gZWwgbnVldm8gdG9rZW5cbiAgICAgICAgICAvLyBVc2FyIHN3aXRjaE1hcCArIGZyb20gcGFyYSBlc3BlcmFyIGEgcXVlIEZpcmViYXNlIGNvbXBsZXRlXG4gICAgICAgICAgY29uc3QgZmlyZWJhc2VBdXRoJCA9IHJlc3BvbnNlLmZpcmViYXNlVG9rZW5cbiAgICAgICAgICAgID8gZnJvbSh0aGlzLnNpZ25JbldpdGhGaXJlYmFzZShyZXNwb25zZS5maXJlYmFzZVRva2VuKSlcbiAgICAgICAgICAgIDogb2YodW5kZWZpbmVkKTtcblxuICAgICAgICAgIHJldHVybiBmaXJlYmFzZUF1dGgkLnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAvLyBOb3RpZmljYXIgY2FtYmlvIGEgb3RyYXMgcGVzdGHDsWFzXG4gICAgICAgICAgICAgIHRoaXMuc3luY1NlcnZpY2UuYnJvYWRjYXN0KHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnT1JHX1NXSVRDSCcsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogeyBhY3RpdmVPcmc6IHJlc3BvbnNlLmFjdGl2ZU9yZyB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gUmV0b3JuYXIgcmVzcG9uc2Ugb3JpZ2luYWwgZGVzcHXDqXMgZGUgcXVlIEZpcmViYXNlIGNvbXBsZXRlXG4gICAgICAgICAgICBtYXAoKCkgPT4gcmVzcG9uc2UpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKVxuICAgICAgKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQRVJGSUwgREUgVVNVQVJJT1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCBwZXJmaWwgZGVsIHVzdWFyaW8gYXV0ZW50aWNhZG8uXG4gICAqIEluY2x1eWUgaW5mb3JtYWNpw7NuIGRlIE1GQSB5IHRlbMOpZm9uby5cbiAgICovXG4gIGdldFByb2ZpbGUoKTogT2JzZXJ2YWJsZTxHZXRQcm9maWxlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PEdldFByb2ZpbGVSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9wcm9maWxlYClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsaXphIGVsIHBlcmZpbCBkZWwgdXN1YXJpby5cbiAgICovXG4gIHVwZGF0ZVByb2ZpbGUocmVxdWVzdDogVXBkYXRlUHJvZmlsZVJlcXVlc3QpOiBPYnNlcnZhYmxlPFVwZGF0ZVByb2ZpbGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQ8VXBkYXRlUHJvZmlsZVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3Byb2ZpbGVgLCByZXF1ZXN0KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRUNVUEVSQUNJw5NOIERFIENPTlRSQVNFw5FBXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBJbmljaWEgZWwgcHJvY2VzbyBkZSByZWN1cGVyYWNpw7NuIGRlIGNvbnRyYXNlw7FhLlxuICAgKiBFbnbDrWEgdW4gY8OzZGlnbyBhbCBlbWFpbCBkZWwgdXN1YXJpby5cbiAgICovXG4gIGZvcmdvdFBhc3N3b3JkKHJlcXVlc3Q6IEZvcmdvdFBhc3N3b3JkUmVxdWVzdCk6IE9ic2VydmFibGU8Rm9yZ290UGFzc3dvcmRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PEZvcmdvdFBhc3N3b3JkUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vZm9yZ290LXBhc3N3b3JkYCwgcmVxdWVzdClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRlYSBsYSBjb250cmFzZcOxYSB1c2FuZG8gZWwgY8OzZGlnbyBlbnZpYWRvIHBvciBlbWFpbC5cbiAgICovXG4gIHJlc2V0UGFzc3dvcmQocmVxdWVzdDogUmVzZXRQYXNzd29yZFJlcXVlc3QpOiBPYnNlcnZhYmxlPFJlc2V0UGFzc3dvcmRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PFJlc2V0UGFzc3dvcmRSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9yZXNldC1wYXNzd29yZGAsIHJlcXVlc3QpXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBFUk1JU09TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxvcyBwZXJtaXNvcyBhY3R1YWxpemFkb3MgZGVsIGJhY2tlbmQuXG4gICAqL1xuICBmZXRjaFBlcm1pc3Npb25zKCk6IE9ic2VydmFibGU8R2V0UGVybWlzc2lvbnNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEdldFBlcm1pc3Npb25zUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vcGVybWlzc2lvbnNgKS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UudXBkYXRlUGVybWlzc2lvbnMoXG4gICAgICAgICAgcmVzcG9uc2Uucm9sZXMsXG4gICAgICAgICAgcmVzcG9uc2UucGVybWlzc2lvbnMsXG4gICAgICAgICAgcmVzcG9uc2UuaXNTdXBlckFkbWluXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2F2ZVBlcm1pc3Npb25zKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5zeW5jU2VydmljZS5icm9hZGNhc3QoeyB0eXBlOiAnUEVSTUlTU0lPTlNfVVBEQVRFJyB9KTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIHVuIHBlcm1pc28gZXNwZWPDrWZpY28uXG4gICAqIEZvcm1hdG86IFwicmVzb3VyY2U6YWN0aW9uXCIgKGVqOiBcInRlbXBsYXRlczplZGl0XCIpXG4gICAqL1xuICBoYXNQZXJtaXNzaW9uKHBlcm1pc3Npb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzU3VwZXJBZG1pbigpKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IFtyZXNvdXJjZSwgYWN0aW9uXSA9IHBlcm1pc3Npb24uc3BsaXQoJzonKTtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucygpLnNvbWUocCA9PiB7XG4gICAgICBjb25zdCBbcFJlc291cmNlLCBwQWN0aW9uXSA9IHAuc3BsaXQoJzonKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChwUmVzb3VyY2UgPT09ICcqJyB8fCBwUmVzb3VyY2UgPT09IHJlc291cmNlKSAmJiAocEFjdGlvbiA9PT0gJyonIHx8IHBBY3Rpb24gPT09IGFjdGlvbilcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyB0aWVuZSBhbGd1bm8gZGUgbG9zIHBlcm1pc29zIGRhZG9zLlxuICAgKi9cbiAgaGFzQW55UGVybWlzc2lvbihwZXJtaXNzaW9uczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGVybWlzc2lvbnMuc29tZShwID0+IHRoaXMuaGFzUGVybWlzc2lvbihwKSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyB0aWVuZSB0b2RvcyBsb3MgcGVybWlzb3MgZGFkb3MuXG4gICAqL1xuICBoYXNBbGxQZXJtaXNzaW9ucyhwZXJtaXNzaW9uczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGVybWlzc2lvbnMuZXZlcnkocCA9PiB0aGlzLmhhc1Blcm1pc3Npb24ocCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gdGllbmUgdW4gcm9sIGVzcGVjw61maWNvLlxuICAgKi9cbiAgaGFzUm9sZShyb2xlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yb2xlcygpLnNvbWUociA9PiByLnRvTG93ZXJDYXNlKCkgPT09IHJvbGUudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFURSBNRVRIT0RTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgZ2V0IGJhc2VVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5jb25maWcuYXBpVXJsfSR7dGhpcy5jb25maWcuYXV0aFByZWZpeH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTdWNjZXNzZnVsQXV0aChyZXNwb25zZTogU2lnbmluUmVzcG9uc2UgfCBNRkFWZXJpZnlSZXNwb25zZSk6IHZvaWQge1xuICAgIGNvbnN0IGV4cGlyZXNBdCA9IERhdGUubm93KCkgKyByZXNwb25zZS5leHBpcmVzSW4hICogMTAwMDtcbiAgICBjb25zdCB0b2tlbkRhdGEgPSB0aGlzLnRva2VuU2VydmljZS5wYXJzZVRva2VuKHJlc3BvbnNlLmFjY2Vzc1Rva2VuISk7XG5cbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRBdXRoZW50aWNhdGVkKHtcbiAgICAgIGFjY2Vzc1Rva2VuOiByZXNwb25zZS5hY2Nlc3NUb2tlbiEsXG4gICAgICByZWZyZXNoVG9rZW46IHJlc3BvbnNlLnJlZnJlc2hUb2tlbiEsXG4gICAgICB1c2VySWQ6IHRva2VuRGF0YT8udWlkLFxuICAgICAgZW1haWw6IHRva2VuRGF0YT8uZW1haWwsXG4gICAgICByb2xlczogcmVzcG9uc2Uucm9sZXMgfHwgW10sXG4gICAgICBwZXJtaXNzaW9uczogcmVzcG9uc2UucGVybWlzc2lvbnMgfHwgW10sXG4gICAgICBpc1N1cGVyQWRtaW46IHJlc3BvbnNlLnBlcm1pc3Npb25zPy5pbmNsdWRlcygnKjoqJykgfHwgZmFsc2UsXG4gICAgICBleHBpcmVzQXQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNhdmVTdGF0ZSh7XG4gICAgICBhY2Nlc3NUb2tlbjogcmVzcG9uc2UuYWNjZXNzVG9rZW4hLFxuICAgICAgcmVmcmVzaFRva2VuOiByZXNwb25zZS5yZWZyZXNoVG9rZW4hLFxuICAgICAgcm9sZXM6IHJlc3BvbnNlLnJvbGVzIHx8IFtdLFxuICAgICAgcGVybWlzc2lvbnM6IHJlc3BvbnNlLnBlcm1pc3Npb25zIHx8IFtdLFxuICAgICAgaXNTdXBlckFkbWluOiByZXNwb25zZS5wZXJtaXNzaW9ucz8uaW5jbHVkZXMoJyo6KicpIHx8IGZhbHNlLFxuICAgICAgZXhwaXJlc0F0LFxuICAgIH0pO1xuXG4gICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuICAgIHRoaXMuc3luY1NlcnZpY2UuYnJvYWRjYXN0KHsgdHlwZTogJ0xPR0lOJyB9KTtcblxuICAgIC8vIEludGVncmFjacOzbiBjb24gRmlyZWJhc2VcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy5lbmFibGVGaXJlYmFzZUludGVncmF0aW9uICYmXG4gICAgICAnZmlyZWJhc2VUb2tlbicgaW4gcmVzcG9uc2UgJiZcbiAgICAgIHJlc3BvbnNlLmZpcmViYXNlVG9rZW5cbiAgICApIHtcbiAgICAgIHRoaXMuc2lnbkluV2l0aEZpcmViYXNlKHJlc3BvbnNlLmZpcmViYXNlVG9rZW4pO1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdHJvIGF1dG9tw6F0aWNvIGRlIGRpc3Bvc2l0aXZvIHBhcmEgcHVzaCBub3RpZmljYXRpb25zXG4gICAgaWYgKHRoaXMuY29uZmlnLmVuYWJsZURldmljZVJlZ2lzdHJhdGlvbikge1xuICAgICAgdGhpcy5yZWdpc3RlckRldmljZUlmTmVlZGVkKCk7IC8vIGZpcmUtYW5kLWZvcmdldFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSZWZyZXNoVGltZXIoKTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRSZWZyZXNoVGltZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG5cbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGVTZXJ2aWNlLnN0YXRlKCk7XG4gICAgaWYgKCFzdGF0ZS5leHBpcmVzQXQpIHJldHVybjtcblxuICAgIGNvbnN0IHJlZnJlc2hCZWZvcmVNcyA9ICh0aGlzLmNvbmZpZy5yZWZyZXNoQmVmb3JlRXhwaXJ5IHx8IDYwKSAqIDEwMDA7XG4gICAgY29uc3QgcmVmcmVzaEF0ID0gc3RhdGUuZXhwaXJlc0F0IC0gcmVmcmVzaEJlZm9yZU1zO1xuICAgIGNvbnN0IGRlbGF5ID0gcmVmcmVzaEF0IC0gRGF0ZS5ub3coKTtcblxuICAgIGlmIChkZWxheSA+IDApIHtcbiAgICAgIHRoaXMucmVmcmVzaFRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW4oKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIGVycm9yOiAoKSA9PiB0aGlzLmxvZ291dCgpLFxuICAgICAgICB9KTtcbiAgICAgIH0sIGRlbGF5KTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLnJlZnJlc2hUb2tlbikge1xuICAgICAgLy8gVG9rZW4geWEgZGViZXLDrWEgcmVmcmVzY2Fyc2UsIGludGVudGFyIGFob3JhXG4gICAgICB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnN1YnNjcmliZSh7XG4gICAgICAgIGVycm9yOiAoKSA9PiB0aGlzLmxvZ291dCgpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wUmVmcmVzaFRpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlZnJlc2hUaW1lcklkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWZyZXNoVGltZXJJZCk7XG4gICAgICB0aGlzLnJlZnJlc2hUaW1lcklkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVN5bmNFdmVudChldmVudDogQXV0aFN5bmNFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgY2FzZSAnTE9HSU4nOlxuICAgICAgY2FzZSAnVE9LRU5fUkVGUkVTSCc6IHtcbiAgICAgICAgLy8gUmVjYXJnYXIgZXN0YWRvIGRlc2RlIHN0b3JhZ2VcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmxvYWRTdGF0ZSgpO1xuICAgICAgICBpZiAoc3RhdGUuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5yZXN0b3JlRnJvbVN0b3JhZ2Uoc3RhdGUpO1xuICAgICAgICAgIGNvbnN0IGNsYWltcyA9IHRoaXMudG9rZW5TZXJ2aWNlLnBhcnNlVG9rZW4oc3RhdGUuYWNjZXNzVG9rZW4pO1xuICAgICAgICAgIGlmIChjbGFpbXMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnVwZGF0ZVVzZXJJbmZvKGNsYWltcy51aWQsIGNsYWltcy5lbWFpbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc3RhcnRSZWZyZXNoVGltZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0xPR09VVCc6XG4gICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuc3RvcFJlZnJlc2hUaW1lcigpO1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5jb25maWcubG9naW5Sb3V0ZV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1BFUk1JU1NJT05TX1VQREFURSc6IHtcbiAgICAgICAgY29uc3QgcGVybXMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmxvYWRQZXJtaXNzaW9ucygpO1xuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS51cGRhdGVQZXJtaXNzaW9ucyhwZXJtcy5yb2xlcywgcGVybXMucGVybWlzc2lvbnMsIHBlcm1zLmlzU3VwZXJBZG1pbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnT1JHX1NXSVRDSCc6XG4gICAgICAgIC8vIE90cmEgcGVzdGHDsWEgY2FtYmnDsyBkZSBvcmdhbml6YWNpw7NuIC0gcmVjYXJnYXIgcMOhZ2luYSBwYXJhIG9idGVuZXIgbnVldm8gZXN0YWRvXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBdXRoRXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xuICAgIGNvbnN0IGF1dGhFcnJvcjogQXV0aEVycm9yID0ge1xuICAgICAgY29kZTogZXJyb3IuZXJyb3I/LmNvZGUgfHwgJ1VOS05PV05fRVJST1InLFxuICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGRlIGF1dGVudGljYWNpw7NuIGRlc2Nvbm9jaWRvJyxcbiAgICB9O1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldEVycm9yKGF1dGhFcnJvcik7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gYXV0aEVycm9yKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGSVJFQkFTRSBJTlRFR1JBVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIGFzeW5jIHNpZ25JbldpdGhGaXJlYmFzZShmaXJlYmFzZVRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZmlyZWJhc2VTZXJ2aWNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlyZWJhc2VTZXJ2aWNlLnNpZ25JbldpdGhDdXN0b21Ub2tlbihmaXJlYmFzZVRva2VuKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQXV0aF0gRmlyZWJhc2Ugc2lnbmluIHN1Y2Nlc3NmdWwnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnW1ZhbHRlY2hBdXRoXSBGaXJlYmFzZVNlcnZpY2Ugbm90IHByb3ZpZGVkLiBBZGQgcHJvdmlkZVZhbHRlY2hGaXJlYmFzZSgpIHRvIHlvdXIgcHJvdmlkZXJzLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gTm8gYmxvcXVlYXIgZWwgbG9naW4gcHJpbmNpcGFsIHNpIEZpcmViYXNlIGZhbGxhXG4gICAgICBjb25zb2xlLmVycm9yKCdbVmFsdGVjaEF1dGhdIEZpcmViYXNlIHNpZ25pbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2lnbk91dEZpcmViYXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb25maWcuZW5hYmxlRmlyZWJhc2VJbnRlZ3JhdGlvbikgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmZpcmViYXNlU2VydmljZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmZpcmViYXNlU2VydmljZS5zaWduT3V0KCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbVmFsdGVjaEF1dGhdIEZpcmViYXNlIHNpZ25vdXQgc3VjY2Vzc2Z1bCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJZ25vcmFyIGVycm9yZXMgZGUgRmlyZWJhc2Ugc2lnbm91dFxuICAgICAgY29uc29sZS53YXJuKCdbVmFsdGVjaEF1dGhdIEZpcmViYXNlIHNpZ25vdXQgZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gREVWSUNFIFJFR0lTVFJBVElPTiAoUHVzaCBOb3RpZmljYXRpb25zKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogU29saWNpdGEgcGVybWlzb3MgZGUgbm90aWZpY2FjacOzbiB5IHJlZ2lzdHJhIGVsIGRpc3Bvc2l0aXZvLlxuICAgKiBVc2FyIGN1YW5kbyBlbCB1c3VhcmlvIGFjZXB0YSByZWNpYmlyIG5vdGlmaWNhY2lvbmVzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGFzeW5jIG9uRW5hYmxlTm90aWZpY2F0aW9ucygpIHtcbiAgICogICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmF1dGguZW5hYmxlTm90aWZpY2F0aW9ucygpO1xuICAgKiAgIGlmIChyZXN1bHQuZ3JhbnRlZCkge1xuICAgKiAgICAgY29uc29sZS5sb2coJ05vdGlmaWNhY2lvbmVzIGhhYmlsaXRhZGFzJyk7XG4gICAqICAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZW5hYmxlTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPEVuYWJsZU5vdGlmaWNhdGlvbnNSZXN1bHQ+IHtcbiAgICBpZiAoIXRoaXMubWVzc2FnaW5nU2VydmljZSkge1xuICAgICAgY29uc29sZS53YXJuKCdbVmFsdGVjaEF1dGhdIE1lc3NhZ2luZ1NlcnZpY2Ugbm90IGF2YWlsYWJsZScpO1xuICAgICAgcmV0dXJuIHsgZ3JhbnRlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBpZiAoIWF3YWl0IHRoaXMubWVzc2FnaW5nU2VydmljZS5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gUHVzaCBub3RpZmljYXRpb25zIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybiB7IGdyYW50ZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLm1lc3NhZ2luZ1NlcnZpY2UucmVxdWVzdFBlcm1pc3Npb24oKTtcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICByZXR1cm4geyBncmFudGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdHJhciBkaXNwb3NpdGl2byBlbiBiYWNrZW5kXG4gICAgY29uc3QgcmVnaXN0ZXJlZCA9IGF3YWl0IHRoaXMucmVnaXN0ZXJEZXZpY2VJZk5lZWRlZCgpO1xuXG4gICAgcmV0dXJuIHsgZ3JhbnRlZDogdHJ1ZSwgdG9rZW4sIHJlZ2lzdGVyZWQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNhY3RpdmEgbGFzIG5vdGlmaWNhY2lvbmVzIHBhcmEgZXN0ZSBkaXNwb3NpdGl2by5cbiAgICogRWxpbWluYSBlbCB0b2tlbiBkZWwgYmFja2VuZCB5IGRlIEZDTS5cbiAgICogVXNhciBkZXNkZSB1biB0b2dnbGUgZGUgcHJlZmVyZW5jaWFzIGN1YW5kbyBlbCB1c3VhcmlvIGRlc2FjdGl2YSBub3RpZmljYWNpb25lcy5cbiAgICpcbiAgICogTk9UQTogRXN0byBOTyByZXZvY2EgZWwgcGVybWlzbyBkZWwgbmF2ZWdhZG9yIChlbCB1c3VhcmlvIGRlYmUgaGFjZXJsbyBtYW51YWxtZW50ZVxuICAgKiBkZXNkZSBsYSBjb25maWd1cmFjacOzbiBkZWwgbmF2ZWdhZG9yKS4gU29sbyBlbGltaW5hIGVsIHJlZ2lzdHJvIGRlbCBkaXNwb3NpdGl2by5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBhc3luYyBvblRvZ2dsZU5vdGlmaWNhdGlvbnMoZW5hYmxlZDogYm9vbGVhbikge1xuICAgKiAgIGlmIChlbmFibGVkKSB7XG4gICAqICAgICBhd2FpdCB0aGlzLmF1dGguZW5hYmxlTm90aWZpY2F0aW9ucygpO1xuICAgKiAgIH0gZWxzZSB7XG4gICAqICAgICBhd2FpdCB0aGlzLmF1dGguZGlzYWJsZU5vdGlmaWNhdGlvbnMoKTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBkaXNhYmxlTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPHsgZGlzYWJsZWQ6IGJvb2xlYW4gfT4ge1xuICAgIGlmICghdGhpcy5tZXNzYWdpbmdTZXJ2aWNlKSB7XG4gICAgICByZXR1cm4geyBkaXNhYmxlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLm1lc3NhZ2luZ1NlcnZpY2UuY3VycmVudFRva2VuO1xuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIC8vIEVsaW1pbmFyIGRlbCBiYWNrZW5kXG4gICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgIHRoaXMuaHR0cC5yZXF1ZXN0KCdERUxFVEUnLCBgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L3YyL3VzZXJzL21lL2RldmljZXMvYnktdG9rZW5gLCB7XG4gICAgICAgICAgICBib2R5OiB7IHRva2VuIH1cbiAgICAgICAgICB9KS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEVsaW1pbmFyIHRva2VuIGRlIEZDTVxuICAgICAgICBhd2FpdCB0aGlzLm1lc3NhZ2luZ1NlcnZpY2UuZGVsZXRlVG9rZW4oKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQXV0aF0gTm90aWZpY2F0aW9ucyBkaXNhYmxlZCcpO1xuICAgICAgICByZXR1cm4geyBkaXNhYmxlZDogdHJ1ZSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBkaXNhYmxlZDogZmFsc2UgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKCdbVmFsdGVjaEF1dGhdIEZhaWxlZCB0byBkaXNhYmxlIG5vdGlmaWNhdGlvbnM6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHsgZGlzYWJsZWQ6IGZhbHNlIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgZWwgZXN0YWRvIGFjdHVhbCBkZSBwZXJtaXNvcyBkZSBub3RpZmljYWNpw7NuLlxuICAgKlxuICAgKiBAcmV0dXJucyAnZ3JhbnRlZCcgfCAnZGVuaWVkJyB8ICdkZWZhdWx0JyB8ICd1bnN1cHBvcnRlZCdcbiAgICovXG4gIGdldE5vdGlmaWNhdGlvblBlcm1pc3Npb25TdGF0ZSgpOiBOb3RpZmljYXRpb25QZXJtaXNzaW9uU3RhdGUge1xuICAgIGlmICghdGhpcy5tZXNzYWdpbmdTZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gJ3Vuc3VwcG9ydGVkJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnaW5nU2VydmljZS5nZXRQZXJtaXNzaW9uU3RhdGUoKSBhcyBOb3RpZmljYXRpb25QZXJtaXNzaW9uU3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgbWFudWFsbWVudGUgZWwgZGlzcG9zaXRpdm8gZW4gZWwgYmFja2VuZC5cbiAgICogw5p0aWwgcGFyYSBzaW5jcm9uaXphciBkaXNwb3NpdGl2b3MgcXVlIHRpZW5lbiB0b2tlbiBGQ00gcGVybyBubyBlc3TDoW4gcmVnaXN0cmFkb3MuXG4gICAqXG4gICAqIEBwYXJhbSBwcm92aWRlZFRva2VuIFRva2VuIEZDTSBvcGNpb25hbC4gU2kgc2UgcHJvcG9yY2lvbmEsIHNlIHVzYSBkaXJlY3RhbWVudGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgc2luIGRlcGVuZGVyIGRlbCBNZXNzYWdpbmdTZXJ2aWNlIChldml0YSB0aW1pbmcgaXNzdWVzKS5cbiAgICogQHJldHVybnMgUmVzdWx0YWRvIGRlbCByZWdpc3RybyBjb24gZGV2aWNlSWQgc2kgZnVlIGV4aXRvc29cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTaW5jcm9uaXphciBjb24gdG9rZW4gZXhpc3RlbnRlIChyZWNvbWVuZGFkbylcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hdXRoLnJlZ2lzdGVyRGV2aWNlKG15VG9rZW4pO1xuICAgKlxuICAgKiAvLyBTaW4gdG9rZW4sIGludGVudGFyw6Egb2J0ZW5lcmxvIGRlbCBNZXNzYWdpbmdTZXJ2aWNlXG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYXV0aC5yZWdpc3RlckRldmljZSgpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHJlZ2lzdGVyRGV2aWNlKHByb3ZpZGVkVG9rZW4/OiBzdHJpbmcpOiBQcm9taXNlPFJlZ2lzdGVyRGV2aWNlUmVzdWx0PiB7XG4gICAgaWYgKCF0aGlzLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICByZXR1cm4geyByZWdpc3RlcmVkOiBmYWxzZSwgZXJyb3I6ICdVc3VhcmlvIG5vIGF1dGVudGljYWRvJyB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBWZXJpZmljYXIgcGVybWlzb3Mgc2kgdGVuZW1vcyBNZXNzYWdpbmdTZXJ2aWNlXG4gICAgICBpZiAodGhpcy5tZXNzYWdpbmdTZXJ2aWNlKSB7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSB0aGlzLm1lc3NhZ2luZ1NlcnZpY2UuZ2V0UGVybWlzc2lvblN0YXRlKCk7XG4gICAgICAgIGlmIChwZXJtaXNzaW9uICE9PSAnZ3JhbnRlZCcpIHtcbiAgICAgICAgICByZXR1cm4geyByZWdpc3RlcmVkOiBmYWxzZSwgZXJyb3I6ICdQZXJtaXNvIGRlIG5vdGlmaWNhY2lvbmVzIG5vIG90b3JnYWRvJyB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFVzYXIgdG9rZW4gcHJvcG9yY2lvbmFkbyBwcmltZXJvIChldml0YSB0aW1pbmcgaXNzdWVzIGNvbiBJbmplY3RvcilcbiAgICAgIGxldCB0b2tlbiA9IHByb3ZpZGVkVG9rZW4gfHwgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlPy5jdXJyZW50VG9rZW47XG5cbiAgICAgIC8vIFNpIG5vIGhheSB0b2tlbiwgaW50ZW50YXIgb2J0ZW5lcmxvIGRlbCBNZXNzYWdpbmdTZXJ2aWNlXG4gICAgICBpZiAoIXRva2VuICYmIHRoaXMubWVzc2FnaW5nU2VydmljZSkge1xuICAgICAgICBpZiAoIWF3YWl0IHRoaXMubWVzc2FnaW5nU2VydmljZS5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHsgcmVnaXN0ZXJlZDogZmFsc2UsIGVycm9yOiAnRkNNIG5vIHNvcG9ydGFkbyBlbiBlc3RlIG5hdmVnYWRvcicgfTtcbiAgICAgICAgfVxuICAgICAgICB0b2tlbiA9IGF3YWl0IHRoaXMubWVzc2FnaW5nU2VydmljZS5nZXRUb2tlbigpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHJldHVybiB7IHJlZ2lzdGVyZWQ6IGZhbHNlLCBlcnJvcjogJ05vIHNlIHB1ZG8gb2J0ZW5lciB0b2tlbiBGQ00nIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFJlZ2lzdHJhciBlbiBiYWNrZW5kXG4gICAgICBjb25zdCB7IHBsYXRmb3JtLCBicm93c2VyLCBvcyB9ID0gdGhpcy5kZXRlY3RQbGF0Zm9ybUluZm8oKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0PFJlZ2lzdGVyRGV2aWNlUmVzcG9uc2U+KFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaVVybH0vdjIvdXNlcnMvbWUvZGV2aWNlc2AsXG4gICAgICAgICAgeyB0b2tlbiwgcGxhdGZvcm0sIGJyb3dzZXIsIG9zIH1cbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQXV0aF0gRGV2aWNlIHJlZ2lzdGVyZWQgbWFudWFsbHk6JywgcmVzcG9uc2UuZGV2aWNlLmRldmljZUlkKTtcbiAgICAgIHJldHVybiB7IHJlZ2lzdGVyZWQ6IHRydWUsIGRldmljZUlkOiByZXNwb25zZS5kZXZpY2UuZGV2aWNlSWQsIHRva2VuIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gTWFudWFsIGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZ2lzdGVyZWQ6IGZhbHNlLFxuICAgICAgICBlcnJvcjogZXJyb3I/LmVycm9yPy5tZXNzYWdlIHx8IGVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBhbCByZWdpc3RyYXIgZGlzcG9zaXRpdm8nXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBlbCBkaXNwb3NpdGl2byBlbiBlbCBiYWNrZW5kIHNpIHRpZW5lIHBlcm1pc29zIGRlIG5vdGlmaWNhY2nDs24uXG4gICAqIFNlIGxsYW1hIGF1dG9tw6F0aWNhbWVudGUgZGVzcHXDqXMgZGUgdW4gbG9naW4gZXhpdG9zbyBzaSBlbmFibGVEZXZpY2VSZWdpc3RyYXRpb249dHJ1ZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVnaXN0ZXJEZXZpY2VJZk5lZWRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBTb2xvIHNpIGVzdMOhIGhhYmlsaXRhZG8geSBtZXNzYWdpbmcgZXN0w6EgZGlzcG9uaWJsZVxuICAgIGlmICghdGhpcy5jb25maWcuZW5hYmxlRGV2aWNlUmVnaXN0cmF0aW9uIHx8ICF0aGlzLm1lc3NhZ2luZ1NlcnZpY2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVmVyaWZpY2FyIHNpIEZDTSBlc3TDoSBzb3BvcnRhZG9cbiAgICAgIGlmICghYXdhaXQgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgeWEgdGllbmUgcGVybWlzb3NcbiAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSB0aGlzLm1lc3NhZ2luZ1NlcnZpY2UuZ2V0UGVybWlzc2lvblN0YXRlKCk7XG4gICAgICBpZiAocGVybWlzc2lvbiAhPT0gJ2dyYW50ZWQnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gTm8gc29saWNpdGFyIGF1dG9tw6F0aWNhbWVudGUsIHNvbG8gcmVnaXN0cmFyIHNpIHlhIHRpZW5lIHBlcm1pc29cbiAgICAgIH1cblxuICAgICAgLy8gT2J0ZW5lciB0b2tlbiBleGlzdGVudGUgKG5vIHNvbGljaXRhciBudWV2bylcbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmdldFRva2VuKCk7XG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVnaXN0cmFyIGVuIGJhY2tlbmRcbiAgICAgIGNvbnN0IHsgcGxhdGZvcm0sIGJyb3dzZXIsIG9zIH0gPSB0aGlzLmRldGVjdFBsYXRmb3JtSW5mbygpO1xuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0PFJlZ2lzdGVyRGV2aWNlUmVzcG9uc2U+KFxuICAgICAgICAgIGAke3RoaXMuY29uZmlnLmFwaVVybH0vdjIvdXNlcnMvbWUvZGV2aWNlc2AsXG4gICAgICAgICAgeyB0b2tlbiwgcGxhdGZvcm0sIGJyb3dzZXIsIG9zIH1cbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQXV0aF0gRGV2aWNlIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBObyBibG9xdWVhciBhdXRoIHNpIGZhbGxhIGRldmljZSByZWdpc3RyYXRpb25cbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBEZXZpY2UgcmVnaXN0cmF0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVsaW1pbmEgZWwgZGlzcG9zaXRpdm8gZGVsIGJhY2tlbmQgeSBib3JyYSBlbCB0b2tlbiBGQ00uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHVucmVnaXN0ZXJEZXZpY2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVEZXZpY2VSZWdpc3RyYXRpb24gfHwgIXRoaXMubWVzc2FnaW5nU2VydmljZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHRoaXMubWVzc2FnaW5nU2VydmljZS5jdXJyZW50VG9rZW47XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgLy8gRGVsZXRlIGZyb20gYmFja2VuZCAoZmlyZSBhbmQgZm9yZ2V0KVxuICAgICAgICB0aGlzLmh0dHAucmVxdWVzdCgnREVMRVRFJywgYCR7dGhpcy5jb25maWcuYXBpVXJsfS92Mi91c2Vycy9tZS9kZXZpY2VzL2J5LXRva2VuYCwge1xuICAgICAgICAgIGJvZHk6IHsgdG9rZW4gfVxuICAgICAgICB9KS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKS5zdWJzY3JpYmUoKTtcblxuICAgICAgICAvLyBEZWxldGUgZnJvbSBGQ01cbiAgICAgICAgYXdhaXQgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmRlbGV0ZVRva2VuKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbVmFsdGVjaEF1dGhdIERldmljZSB1bnJlZ2lzdGVyZWQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElnbm9yYXIgZXJyb3JlcyBlbiBjbGVhbnVwXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdGEgaW5mb3JtYWNpw7NuIGRlIGxhIHBsYXRhZm9ybWEgZGVsIGRpc3Bvc2l0aXZvLlxuICAgKi9cbiAgcHJpdmF0ZSBkZXRlY3RQbGF0Zm9ybUluZm8oKTogeyBwbGF0Zm9ybTogJ3dlYic7IGJyb3dzZXI6IHN0cmluZzsgb3M6IHN0cmluZyB9IHtcbiAgICBjb25zdCB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbiAgICAvLyBEZXRlY3RhciBuYXZlZ2Fkb3JcbiAgICBsZXQgYnJvd3NlciA9ICdVbmtub3duJztcbiAgICBpZiAodWEuaW5jbHVkZXMoJ0ZpcmVmb3gnKSkge1xuICAgICAgYnJvd3NlciA9ICdGaXJlZm94JztcbiAgICB9IGVsc2UgaWYgKHVhLmluY2x1ZGVzKCdFZGcnKSkge1xuICAgICAgYnJvd3NlciA9ICdFZGdlJztcbiAgICB9IGVsc2UgaWYgKHVhLmluY2x1ZGVzKCdDaHJvbWUnKSkge1xuICAgICAgYnJvd3NlciA9ICdDaHJvbWUnO1xuICAgIH0gZWxzZSBpZiAodWEuaW5jbHVkZXMoJ1NhZmFyaScpKSB7XG4gICAgICBicm93c2VyID0gJ1NhZmFyaSc7XG4gICAgfVxuXG4gICAgLy8gRGV0ZWN0YXIgT1NcbiAgICBsZXQgb3MgPSAnVW5rbm93bic7XG4gICAgaWYgKHVhLmluY2x1ZGVzKCdXaW5kb3dzJykpIHtcbiAgICAgIG9zID0gJ1dpbmRvd3MnO1xuICAgIH0gZWxzZSBpZiAodWEuaW5jbHVkZXMoJ01hYyBPUycpKSB7XG4gICAgICBvcyA9ICdtYWNPUyc7XG4gICAgfSBlbHNlIGlmICh1YS5pbmNsdWRlcygnTGludXgnKSkge1xuICAgICAgb3MgPSAnTGludXgnO1xuICAgIH0gZWxzZSBpZiAodWEuaW5jbHVkZXMoJ0FuZHJvaWQnKSkge1xuICAgICAgb3MgPSAnQW5kcm9pZCc7XG4gICAgfSBlbHNlIGlmICh1YS5pbmNsdWRlcygnaU9TJykgfHwgdWEuaW5jbHVkZXMoJ2lQaG9uZScpIHx8IHVhLmluY2x1ZGVzKCdpUGFkJykpIHtcbiAgICAgIG9zID0gJ2lPUyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcGxhdGZvcm06ICd3ZWInLCBicm93c2VyLCBvcyB9O1xuICB9XG59XG4iXX0=
866
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBYSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHeEUsT0FBTyxFQUFjLFVBQVUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7OztBQStDL0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILE1BQU0sT0FBTyxXQUFXO0lBS3RCLFlBQ3VDLE1BQXlCLEVBQ3RELElBQWdCLEVBQ2hCLE1BQWMsRUFDZCxZQUE4QixFQUM5QixZQUEwQixFQUMxQixjQUFrQyxFQUNsQyxXQUE0QixFQUM1QixlQUFnQyxFQUNwQixnQkFBeUMsRUFDekMsV0FBK0I7UUFUZCxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN0RCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQW9CO1FBQ2xDLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDcEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQUN6QyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFkckQsK0JBQStCO1FBQ3ZCLG1CQUFjLEdBQXlDLElBQUksQ0FBQztR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LEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDakIsQ0FBQzthQUFNLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM5RSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2IsQ0FBQztRQUVELE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMxQyxDQUFDOytHQTk3QlUsV0FBVyxrQkFNWixtQkFBbUI7bUhBTmxCLFdBQVcsY0FERSxNQUFNOzs0RkFDbkIsV0FBVztrQkFEdkIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQU83QixNQUFNOzJCQUFDLG1CQUFtQjs7MEJBUTFCLFFBQVE7OzBCQUNSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9uRGVzdHJveSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIG9mLCBmcm9tLCBmaXJzdFZhbHVlRnJvbSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YXAsIGNhdGNoRXJyb3IsIHN3aXRjaE1hcCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBWQUxURUNIX0FVVEhfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQXV0aFN0YXRlU2VydmljZSB9IGZyb20gJy4vYXV0aC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gJy4vdG9rZW4uc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU3luY1NlcnZpY2UgfSBmcm9tICcuL3N5bmMuc2VydmljZSc7XG5pbXBvcnQge1xuICBTaWduaW5SZXF1ZXN0LFxuICBTaWduaW5SZXNwb25zZSxcbiAgU2lnbnVwUmVxdWVzdCxcbiAgU2lnbnVwUmVzcG9uc2UsXG4gIFZlcmlmeUVtYWlsUmVxdWVzdCxcbiAgVmVyaWZ5RW1haWxSZXNwb25zZSxcbiAgUmVzZW5kQ29kZVJlcXVlc3QsXG4gIFJlc2VuZENvZGVSZXNwb25zZSxcbiAgTUZBVmVyaWZ5UmVzcG9uc2UsXG4gIFJlZnJlc2hSZXNwb25zZSxcbiAgR2V0UGVybWlzc2lvbnNSZXNwb25zZSxcbiAgR2V0UHJvZmlsZVJlc3BvbnNlLFxuICBVcGRhdGVQcm9maWxlUmVxdWVzdCxcbiAgVXBkYXRlUHJvZmlsZVJlc3BvbnNlLFxuICBNRkFTZXR1cFJlc3BvbnNlLFxuICBNRkFDb25maXJtUmVzcG9uc2UsXG4gIE1GQURpc2FibGVSZXNwb25zZSxcbiAgRm9yZ290UGFzc3dvcmRSZXF1ZXN0LFxuICBGb3Jnb3RQYXNzd29yZFJlc3BvbnNlLFxuICBSZXNldFBhc3N3b3JkUmVxdWVzdCxcbiAgUmVzZXRQYXNzd29yZFJlc3BvbnNlLFxuICBTd2l0Y2hPcmdSZXNwb25zZSxcbiAgTUZBTWV0aG9kLFxuICBBdXRoRXJyb3IsXG4gIEF1dGhTeW5jRXZlbnQsXG4gIFZhbHRlY2hBdXRoQ29uZmlnLFxuICBSZWdpc3RlckRldmljZVJlc3BvbnNlLFxuICBFbmFibGVOb3RpZmljYXRpb25zUmVzdWx0LFxuICBOb3RpZmljYXRpb25QZXJtaXNzaW9uU3RhdGUsXG4gIFJlZ2lzdGVyRGV2aWNlUmVzdWx0LFxuICAvLyBUT1RQIE1GQSB0eXBlc1xuICBUT1RQU2V0dXBSZXNwb25zZSxcbiAgVE9UUFZlcmlmeVNldHVwUmVzcG9uc2UsXG4gIFRPVFBEaXNhYmxlUmVzcG9uc2UsXG4gIFJlZ2VuZXJhdGVCYWNrdXBDb2Rlc1Jlc3BvbnNlLFxuICBCYWNrdXBDb2Rlc0NvdW50UmVzcG9uc2UsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgRmlyZWJhc2VTZXJ2aWNlLCBNZXNzYWdpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vZmlyZWJhc2UnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UsIEkxOG5MYW5nIH0gZnJvbSAnLi4vaTE4bic7XG5cblxuLyoqXG4gKiBTZXJ2aWNpbyBwcmluY2lwYWwgZGUgYXV0ZW50aWNhY2nDs24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIExvZ2luQ29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAqXG4gKiAgIGFzeW5jIGxvZ2luKCkge1xuICogICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuYXV0aC5zaWduaW4oeyBlbWFpbCwgcGFzc3dvcmQgfSkpO1xuICogICAgIGlmICh0aGlzLmF1dGgubWZhUGVuZGluZygpLnJlcXVpcmVkKSB7XG4gKiAgICAgICAvLyBNb3N0cmFyIFVJIGRlIE1GQVxuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gKiAgICAgfVxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8vIFRpbWVyIHBhcmEgcmVmcmVzaCBwcm9hY3Rpdm9cbiAgcHJpdmF0ZSByZWZyZXNoVGltZXJJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzeW5jU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFZBTFRFQ0hfQVVUSF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoQXV0aENvbmZpZyxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHN0YXRlU2VydmljZTogQXV0aFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHRva2VuU2VydmljZTogVG9rZW5TZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IEF1dGhTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHN5bmNTZXJ2aWNlOiBBdXRoU3luY1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXJlYmFzZVNlcnZpY2U6IEZpcmViYXNlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIG1lc3NhZ2luZ1NlcnZpY2U6IE1lc3NhZ2luZ1NlcnZpY2UgfCBudWxsLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlIHwgbnVsbCxcbiAgKSB7fVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFU1RBRE8gUMOaQkxJQ08gKFNpZ25hbHMgcmVhZG9ubHkpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKiBFc3RhZG8gY29tcGxldG8gZGUgYXV0ZW50aWNhY2nDs24gKi9cbiAgcmVhZG9ubHkgc3RhdGUgPSB0aGlzLnN0YXRlU2VydmljZS5zdGF0ZTtcblxuICAvKiogVXN1YXJpbyBlc3TDoSBhdXRlbnRpY2FkbyAqL1xuICByZWFkb25seSBpc0F1dGhlbnRpY2F0ZWQgPSB0aGlzLnN0YXRlU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQ7XG5cbiAgLyoqIEVzdGFkbyBkZSBjYXJnYSAqL1xuICByZWFkb25seSBpc0xvYWRpbmcgPSB0aGlzLnN0YXRlU2VydmljZS5pc0xvYWRpbmc7XG5cbiAgLyoqIEluZm9ybWFjacOzbiBkZWwgdXN1YXJpbyAqL1xuICByZWFkb25seSB1c2VyID0gdGhpcy5zdGF0ZVNlcnZpY2UudXNlcjtcblxuICAvKiogVG9rZW4gZGUgYWNjZXNvICovXG4gIHJlYWRvbmx5IGFjY2Vzc1Rva2VuID0gdGhpcy5zdGF0ZVNlcnZpY2UuYWNjZXNzVG9rZW47XG5cbiAgLyoqIFJvbGVzIGRlbCB1c3VhcmlvICovXG4gIHJlYWRvbmx5IHJvbGVzID0gdGhpcy5zdGF0ZVNlcnZpY2Uucm9sZXM7XG5cbiAgLyoqIFBlcm1pc29zIGRlbCB1c3VhcmlvICovXG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zID0gdGhpcy5zdGF0ZVNlcnZpY2UucGVybWlzc2lvbnM7XG5cbiAgLyoqIFVzdWFyaW8gZXMgc3VwZXIgYWRtaW4gKi9cbiAgcmVhZG9ubHkgaXNTdXBlckFkbWluID0gdGhpcy5zdGF0ZVNlcnZpY2UuaXNTdXBlckFkbWluO1xuXG4gIC8qKiBFc3RhZG8gZGUgTUZBIHBlbmRpZW50ZSAqL1xuICByZWFkb25seSBtZmFQZW5kaW5nID0gdGhpcy5zdGF0ZVNlcnZpY2UubWZhUGVuZGluZztcblxuICAvKiogRXJyb3IgYWN0dWFsICovXG4gIHJlYWRvbmx5IGVycm9yID0gdGhpcy5zdGF0ZVNlcnZpY2UuZXJyb3I7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIElOSUNJQUxJWkFDScOTTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBlbCBzZXJ2aWNpbyBkZSBhdXRlbnRpY2FjacOzbi5cbiAgICogTGxhbWFkbyBhdXRvbcOhdGljYW1lbnRlIHBvciBwcm92aWRlVmFsdGVjaEF1dGguXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIDEuIENhcmdhciBlc3RhZG8gZGVzZGUgc3RvcmFnZVxuICAgIGNvbnN0IHN0b3JlZFN0YXRlID0gdGhpcy5zdG9yYWdlU2VydmljZS5sb2FkU3RhdGUoKTtcblxuICAgIGlmIChzdG9yZWRTdGF0ZS5hY2Nlc3NUb2tlbikge1xuICAgICAgLy8gMi4gVmVyaWZpY2FyIHNpIHRva2VuIGVzIHbDoWxpZG9cbiAgICAgIGlmICh0aGlzLnRva2VuU2VydmljZS5pc1Rva2VuVmFsaWQoc3RvcmVkU3RhdGUuYWNjZXNzVG9rZW4pKSB7XG4gICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnJlc3RvcmVGcm9tU3RvcmFnZShzdG9yZWRTdGF0ZSk7XG5cbiAgICAgICAgLy8gRXh0cmFlciBpbmZvIGRlbCB0b2tlblxuICAgICAgICBjb25zdCBjbGFpbXMgPSB0aGlzLnRva2VuU2VydmljZS5wYXJzZVRva2VuKHN0b3JlZFN0YXRlLmFjY2Vzc1Rva2VuKTtcbiAgICAgICAgaWYgKGNsYWltcykge1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnVwZGF0ZVVzZXJJbmZvKGNsYWltcy51aWQsIGNsYWltcy5lbWFpbCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBJbmljaWFyIHRpbWVyIGRlIHJlZnJlc2NvIHByb2FjdGl2b1xuICAgICAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG4gICAgICB9IGVsc2UgaWYgKHN0b3JlZFN0YXRlLnJlZnJlc2hUb2tlbikge1xuICAgICAgICAvLyA0LiBUb2tlbiBleHBpcmFkbyBwZXJvIGhheSByZWZyZXNoIHRva2VuIC0gaW50ZW50YXIgcmVmcmVzY2FyXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5yZWZyZXNoQWNjZXNzVG9rZW4oKSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHRoaXMuc2lnbk91dEZpcmViYXNlKCk7XG4gICAgICAgICAgdGhpcy5jbGVhclN0YXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2lnbk91dEZpcmViYXNlKCk7XG4gICAgICAgIHRoaXMuY2xlYXJTdGF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuIEluaWNpYXIgc2luY3Jvbml6YWNpw7NuIGVudHJlIHBlc3Rhw7Fhc1xuICAgIGlmICh0aGlzLmNvbmZpZy5lbmFibGVUYWJTeW5jKSB7XG4gICAgICB0aGlzLnN5bmNTZXJ2aWNlLnN0YXJ0KCk7XG4gICAgICB0aGlzLnN5bmNTdWJzY3JpcHRpb24gPSB0aGlzLnN5bmNTZXJ2aWNlLm9uRXZlbnQkLnN1YnNjcmliZShldmVudCA9PlxuICAgICAgICB0aGlzLmhhbmRsZVN5bmNFdmVudChldmVudClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0TG9hZGluZyhmYWxzZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSZWZyZXNoVGltZXIoKTtcbiAgICB0aGlzLnN5bmNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQVVURU5USUNBQ0nDk05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYSBzZXNpw7NuIGNvbiBlbWFpbCB5IGNvbnRyYXNlw7FhLlxuICAgKiBEZXRlY3RhIGF1dG9tw6F0aWNhbWVudGUgbGEgcGxhdGFmb3JtYSBwYXJhIGlkZW50aWZpY2FyIGRpc3Bvc2l0aXZvcyBudWV2b3MuXG4gICAqL1xuICBzaWduaW4ocmVxdWVzdDogU2lnbmluUmVxdWVzdCk6IE9ic2VydmFibGU8U2lnbmluUmVzcG9uc2U+IHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5jbGVhckVycm9yKCk7XG5cbiAgICAvLyBBZ3JlZ2FyIGluZm8gZGUgcGxhdGFmb3JtYSBwYXJhIGRldmljZSBkZXRlY3Rpb25cbiAgICBjb25zdCBwbGF0Zm9ybUluZm8gPSB0aGlzLmRldGVjdFBsYXRmb3JtSW5mbygpO1xuICAgIGNvbnN0IGVucmljaGVkUmVxdWVzdDogU2lnbmluUmVxdWVzdCA9IHtcbiAgICAgIC4uLnJlcXVlc3QsXG4gICAgICBwbGF0Zm9ybTogcmVxdWVzdC5wbGF0Zm9ybSA/PyBwbGF0Zm9ybUluZm8ucGxhdGZvcm0sXG4gICAgICBicm93c2VyOiByZXF1ZXN0LmJyb3dzZXIgPz8gcGxhdGZvcm1JbmZvLmJyb3dzZXIsXG4gICAgICBvczogcmVxdWVzdC5vcyA/PyBwbGF0Zm9ybUluZm8ub3MsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxTaWduaW5SZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9zaWduaW5gLCBlbnJpY2hlZFJlcXVlc3QpLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UubWZhUmVxdWlyZWQpIHtcbiAgICAgICAgICAvLyBNRkEgcmVxdWVyaWRvIC0gZ3VhcmRhciBlc3RhZG8gdGVtcG9yYWxcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRNRkFQZW5kaW5nKHtcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgbWZhVG9rZW46IHJlc3BvbnNlLm1mYVRva2VuISxcbiAgICAgICAgICAgIG1ldGhvZDogcmVzcG9uc2UubWZhTWV0aG9kISxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5hY2Nlc3NUb2tlbikge1xuICAgICAgICAgIC8vIExvZ2luIGV4aXRvc28gc2luIE1GQVxuICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2Vzc2Z1bEF1dGgocmVzcG9uc2UpO1xuXG4gICAgICAgICAgLy8gTm90aWZpY2FyIHNpIGVzIHVuIGRpc3Bvc2l0aXZvIG51ZXZvXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmlzTmV3RGV2aWNlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1ZhbHRlY2hBdXRoXSBOZXcgZGV2aWNlIGRldGVjdGVkOicsIHJlc3BvbnNlLmRldmljZUlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSB1biBudWV2byB1c3VhcmlvLlxuICAgKiBFbCB1c3VhcmlvIHF1ZWRhIGVuIGVzdGFkbyBQRU5ESU5HIGhhc3RhIHZlcmlmaWNhciBzdSBlbWFpbC5cbiAgICovXG4gIHNpZ251cChyZXF1ZXN0OiBTaWdudXBSZXF1ZXN0KTogT2JzZXJ2YWJsZTxTaWdudXBSZXNwb25zZT4ge1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmNsZWFyRXJyb3IoKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PFNpZ251cFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3NpZ251cGAsIHJlcXVlc3QpXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIGVtYWlsIGNvbiBjw7NkaWdvIGRlIDYgZMOtZ2l0b3MuXG4gICAqIFNpIGVzIGV4aXRvc28sIGhhY2UgYXV0by1sb2dpbiB5IHJldG9ybmEgdG9rZW5zLlxuICAgKi9cbiAgdmVyaWZ5RW1haWwocmVxdWVzdDogVmVyaWZ5RW1haWxSZXF1ZXN0KTogT2JzZXJ2YWJsZTxWZXJpZnlFbWFpbFJlc3BvbnNlPiB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuY2xlYXJFcnJvcigpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFZlcmlmeUVtYWlsUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vdmVyaWZ5LWVtYWlsYCwgcmVxdWVzdCkucGlwZShcbiAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS52ZXJpZmllZCAmJiByZXNwb25zZS5hY2Nlc3NUb2tlbikge1xuICAgICAgICAgIC8vIEF1dG8tbG9naW46IGd1YXJkYXIgdG9rZW5zIHkgYWN0dWFsaXphciBlc3RhZG9cbiAgICAgICAgICB0aGlzLmhhbmRsZVN1Y2Nlc3NmdWxBdXRoKHJlc3BvbnNlIGFzIHVua25vd24gYXMgU2lnbmluUmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVlbnbDrWEgY8OzZGlnbyBkZSB2ZXJpZmljYWNpw7NuIGFsIGVtYWlsLlxuICAgKi9cbiAgcmVzZW5kQ29kZShyZXF1ZXN0OiBSZXNlbmRDb2RlUmVxdWVzdCk6IE9ic2VydmFibGU8UmVzZW5kQ29kZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8UmVzZW5kQ29kZVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3Jlc2VuZC1jb2RlYCwgcmVxdWVzdClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2EgY8OzZGlnbyBNRkEuXG4gICAqL1xuICB2ZXJpZnlNRkEoY29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxNRkFWZXJpZnlSZXNwb25zZT4ge1xuICAgIGNvbnN0IG1mYVN0YXRlID0gdGhpcy5tZmFQZW5kaW5nKCk7XG4gICAgaWYgKCFtZmFTdGF0ZS5tZmFUb2tlbikge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gKHtcbiAgICAgICAgY29kZTogJ01GQV9OT1RfUEVORElORycsXG4gICAgICAgIG1lc3NhZ2U6ICdObyBoYXkgdmVyaWZpY2FjacOzbiBNRkEgcGVuZGllbnRlJyxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxNRkFWZXJpZnlSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9tZmEvdmVyaWZ5YCwge1xuICAgICAgICBtZmFUb2tlbjogbWZhU3RhdGUubWZhVG9rZW4sXG4gICAgICAgIGNvZGUsXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UuY2xlYXJNRkFQZW5kaW5nKCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVTdWNjZXNzZnVsQXV0aChyZXNwb25zZSk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzY2EgZWwgdG9rZW4gZGUgYWNjZXNvLlxuICAgKiBJbXBsZW1lbnRhIHRva2VuIHJvdGF0aW9uOiBjYWRhIHJlZnJlc2ggZ2VuZXJhIHVuIG51ZXZvIHJlZnJlc2ggdG9rZW5cbiAgICogcXVlIGVsIGNsaWVudGUgZGViZSBndWFyZGFyIHBhcmEgZWwgcHLDs3hpbW8gcmVmcmVzaC5cbiAgICovXG4gIHJlZnJlc2hBY2Nlc3NUb2tlbigpOiBPYnNlcnZhYmxlPFJlZnJlc2hSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuc3RhdGUoKS5yZWZyZXNoVG9rZW47XG4gICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICh7XG4gICAgICAgIGNvZGU6ICdOT19SRUZSRVNIX1RPS0VOJyxcbiAgICAgICAgbWVzc2FnZTogJ05vIGhheSB0b2tlbiBkZSByZWZyZXNjbycsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFJlZnJlc2hSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9yZWZyZXNoYCwgeyByZWZyZXNoVG9rZW4gfSkucGlwZShcbiAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IERhdGUubm93KCkgKyByZXNwb25zZS5leHBpcmVzSW4gKiAxMDAwO1xuXG4gICAgICAgIC8vIFRva2VuIHJvdGF0aW9uOiBndWFyZGFyIG51ZXZvIGFjY2VzcyB0b2tlbiBZIHJlZnJlc2ggdG9rZW5cbiAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UudXBkYXRlQWNjZXNzVG9rZW4ocmVzcG9uc2UuYWNjZXNzVG9rZW4sIHJlc3BvbnNlLmV4cGlyZXNJbik7XG4gICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnVwZGF0ZVJlZnJlc2hUb2tlbihyZXNwb25zZS5yZWZyZXNoVG9rZW4pOyAvLyBOVUVWTzogZ3VhcmRhciByZWZyZXNoIHJvdGFkb1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNhdmVBY2Nlc3NUb2tlbihyZXNwb25zZS5hY2Nlc3NUb2tlbiwgZXhwaXJlc0F0KTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zYXZlUmVmcmVzaFRva2VuKHJlc3BvbnNlLnJlZnJlc2hUb2tlbik7IC8vIE5VRVZPOiBwZXJzaXN0aXIgcmVmcmVzaCByb3RhZG9cblxuICAgICAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG4gICAgICAgIHRoaXMuc3luY1NlcnZpY2UuYnJvYWRjYXN0KHtcbiAgICAgICAgICB0eXBlOiAnVE9LRU5fUkVGUkVTSCcsXG4gICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgYWNjZXNzVG9rZW46IHJlc3BvbnNlLmFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgcmVmcmVzaFRva2VuOiByZXNwb25zZS5yZWZyZXNoVG9rZW4sIC8vIE5VRVZPOiBzaW5jcm9uaXphciBlbnRyZSB0YWJzXG4gICAgICAgICAgICBleHBpcmVzQXRcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaWVycmEgc2VzacOzbi5cbiAgICovXG4gIGFzeW5jIGxvZ291dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLnN0YXRlKCkucmVmcmVzaFRva2VuO1xuXG4gICAgLy8gRWxpbWluYXIgZGlzcG9zaXRpdm8gZGVsIGJhY2tlbmQgYW50ZXMgZGUgY2VycmFyIHNlc2nDs25cbiAgICBhd2FpdCB0aGlzLnVucmVnaXN0ZXJEZXZpY2UoKTtcblxuICAgIC8vIE5vdGlmaWNhciBhbCBiYWNrZW5kIChmaXJlIGFuZCBmb3JnZXQpXG4gICAgaWYgKHJlZnJlc2hUb2tlbikge1xuICAgICAgdGhpcy5odHRwXG4gICAgICAgIC5wb3N0KGAke3RoaXMuYmFzZVVybH0vbG9nb3V0YCwgeyByZWZyZXNoVG9rZW4gfSlcbiAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvLyBDZXJyYXIgc2VzacOzbiBkZSBGaXJlYmFzZSBzaSBlc3TDoSBpbnRlZ3JhZG9cbiAgICB0aGlzLnNpZ25PdXRGaXJlYmFzZSgpO1xuXG4gICAgdGhpcy5jbGVhclN0YXRlKCk7XG4gICAgdGhpcy5zeW5jU2VydmljZS5icm9hZGNhc3QoeyB0eXBlOiAnTE9HT1VUJyB9KTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5jb25maWcubG9naW5Sb3V0ZV0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1GQSBTRVRVUCAodXN1YXJpbyBhdXRlbnRpY2FkbylcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYSBNRkEgcGFyYSBlbCB1c3VhcmlvLlxuICAgKi9cbiAgc2V0dXBNRkEobWV0aG9kOiBNRkFNZXRob2QsIHBob25lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxNRkFTZXR1cFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8TUZBU2V0dXBSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9tZmEvc2V0dXBgLCB7IG1ldGhvZCwgcGhvbmUgfSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybWEgbGEgY29uZmlndXJhY2nDs24gZGUgTUZBLlxuICAgKi9cbiAgY29uZmlybU1GQShjb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1GQUNvbmZpcm1SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PE1GQUNvbmZpcm1SZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9tZmEvY29uZmlybWAsIHsgY29kZSB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNoYWJpbGl0YSBNRkEuXG4gICAqL1xuICBkaXNhYmxlTUZBKHBhc3N3b3JkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1GQURpc2FibGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PE1GQURpc2FibGVSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9tZmEvZGlzYWJsZWAsIHsgcGFzc3dvcmQgfSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVE9UUCBNRkEgKEdvb2dsZSBBdXRoZW50aWNhdG9yKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogSW5pY2lhIGNvbmZpZ3VyYWNpw7NuIGRlIFRPVFAgTUZBLlxuICAgKiBSZXRvcm5hIGVsIHNlY3JldG8sIFVSTCBwYXJhIFFSIGNvZGUgeSBjw7NkaWdvcyBkZSByZXNwYWxkby5cbiAgICovXG4gIHNldHVwVE9UUCgpOiBPYnNlcnZhYmxlPFRPVFBTZXR1cFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8VE9UUFNldHVwUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vbWZhL3RvdHAvc2V0dXBgLCB7fSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2EgZWwgY8OzZGlnbyBUT1RQIHkgYWN0aXZhIE1GQS5cbiAgICogRGViZSBsbGFtYXJzZSBkZXNwdcOpcyBkZSBzZXR1cFRPVFAgY29uIGVsIGPDs2RpZ28gZGVsIGF1dGhlbnRpY2F0b3IuXG4gICAqL1xuICB2ZXJpZnlUT1RQU2V0dXAoY29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxUT1RQVmVyaWZ5U2V0dXBSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PFRPVFBWZXJpZnlTZXR1cFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS90b3RwL3ZlcmlmeWAsIHsgY29kZSB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdlbmVyYSBsb3MgY8OzZGlnb3MgZGUgcmVzcGFsZG8gVE9UUC5cbiAgICogTG9zIGPDs2RpZ29zIGFudGVyaW9yZXMgc29uIGludmFsaWRhZG9zLlxuICAgKi9cbiAgcmVnZW5lcmF0ZUJhY2t1cENvZGVzKCk6IE9ic2VydmFibGU8UmVnZW5lcmF0ZUJhY2t1cENvZGVzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxSZWdlbmVyYXRlQmFja3VwQ29kZXNSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9tZmEvdG90cC9iYWNrdXAtY29kZXNgLCB7fSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBsYSBjYW50aWRhZCBkZSBjw7NkaWdvcyBkZSByZXNwYWxkbyByZXN0YW50ZXMuXG4gICAqL1xuICBnZXRCYWNrdXBDb2Rlc0NvdW50KCk6IE9ic2VydmFibGU8QmFja3VwQ29kZXNDb3VudFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxCYWNrdXBDb2Rlc0NvdW50UmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vbWZhL3RvdHAvYmFja3VwLWNvZGVzL2NvdW50YClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzYWN0aXZhIFRPVFAgTUZBIChyZXF1aWVyZSBjb250cmFzZcOxYSkuXG4gICAqL1xuICBkaXNhYmxlVE9UUChwYXNzd29yZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxUT1RQRGlzYWJsZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8VE9UUERpc2FibGVSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9tZmEvdG90cC9kaXNhYmxlYCwgeyBwYXNzd29yZCB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBPUkdBTklaQUNJT05FU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ2FtYmlhIGxhIG9yZ2FuaXphY2nDs24gYWN0aXZhIGRlbCB1c3VhcmlvLlxuICAgKiBHZW5lcmEgdW4gbnVldm8gRmlyZWJhc2UgdG9rZW4gY29uIGVsIGFjdGl2ZU9yZyBhY3R1YWxpemFkby5cbiAgICpcbiAgICogQHBhcmFtIG9yZ2FuaXphdGlvbklkIC0gSUQgZGUgbGEgb3JnYW5pemFjacOzbiBhIGxhIHF1ZSBjYW1iaWFyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgY29uIGVsIG51ZXZvIEZpcmViYXNlIHRva2VuIHkgYWN0aXZlT3JnXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5hdXRoLnN3aXRjaE9yZygnb3JnX3h5ejc4OScpKTtcbiAgICogLy8gRmlyZWJhc2UgeWEgZXN0w6EgcmUtYXV0ZW50aWNhZG8gY29uIGxhIG51ZXZhIG9yZ1xuICAgKiBjb25zdCBhY3RpdmVPcmcgPSBhd2FpdCB0aGlzLmZpcmViYXNlLmdldEFjdGl2ZU9yZygpO1xuICAgKiBgYGBcbiAgICovXG4gIHN3aXRjaE9yZyhvcmdhbml6YXRpb25JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTd2l0Y2hPcmdSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PFN3aXRjaE9yZ1Jlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3N3aXRjaC1vcmdgLCB7IG9yZ2FuaXphdGlvbklkIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAvLyBSZS1hdXRlbnRpY2FyIGVuIEZpcmViYXNlIGNvbiBlbCBudWV2byB0b2tlblxuICAgICAgICAgIC8vIFVzYXIgc3dpdGNoTWFwICsgZnJvbSBwYXJhIGVzcGVyYXIgYSBxdWUgRmlyZWJhc2UgY29tcGxldGVcbiAgICAgICAgICBjb25zdCBmaXJlYmFzZUF1dGgkID0gcmVzcG9uc2UuZmlyZWJhc2VUb2tlblxuICAgICAgICAgICAgPyBmcm9tKHRoaXMuc2lnbkluV2l0aEZpcmViYXNlKHJlc3BvbnNlLmZpcmViYXNlVG9rZW4pKVxuICAgICAgICAgICAgOiBvZih1bmRlZmluZWQpO1xuXG4gICAgICAgICAgcmV0dXJuIGZpcmViYXNlQXV0aCQucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIE5vdGlmaWNhciBjYW1iaW8gYSBvdHJhcyBwZXN0YcOxYXNcbiAgICAgICAgICAgICAgdGhpcy5zeW5jU2VydmljZS5icm9hZGNhc3Qoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdPUkdfU1dJVENIJyxcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IGFjdGl2ZU9yZzogcmVzcG9uc2UuYWN0aXZlT3JnIH0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyBSZXRvcm5hciByZXNwb25zZSBvcmlnaW5hbCBkZXNwdcOpcyBkZSBxdWUgRmlyZWJhc2UgY29tcGxldGVcbiAgICAgICAgICAgIG1hcCgoKSA9PiByZXNwb25zZSlcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpXG4gICAgICApO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBFUkZJTCBERSBVU1VBUklPXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGVsIHBlcmZpbCBkZWwgdXN1YXJpbyBhdXRlbnRpY2Fkby5cbiAgICogSW5jbHV5ZSBpbmZvcm1hY2nDs24gZGUgTUZBIHkgdGVsw6lmb25vLlxuICAgKi9cbiAgZ2V0UHJvZmlsZSgpOiBPYnNlcnZhYmxlPEdldFByb2ZpbGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8R2V0UHJvZmlsZVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3Byb2ZpbGVgKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgZWwgcGVyZmlsIGRlbCB1c3VhcmlvLlxuICAgKi9cbiAgdXBkYXRlUHJvZmlsZShyZXF1ZXN0OiBVcGRhdGVQcm9maWxlUmVxdWVzdCk6IE9ic2VydmFibGU8VXBkYXRlUHJvZmlsZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnB1dDxVcGRhdGVQcm9maWxlUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vcHJvZmlsZWAsIHJlcXVlc3QpXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFQ1VQRVJBQ0nDk04gREUgQ09OVFJBU0XDkUFcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYSBlbCBwcm9jZXNvIGRlIHJlY3VwZXJhY2nDs24gZGUgY29udHJhc2XDsWEuXG4gICAqIEVudsOtYSB1biBjw7NkaWdvIGFsIGVtYWlsIGRlbCB1c3VhcmlvLlxuICAgKi9cbiAgZm9yZ290UGFzc3dvcmQocmVxdWVzdDogRm9yZ290UGFzc3dvcmRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxGb3Jnb3RQYXNzd29yZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8Rm9yZ290UGFzc3dvcmRSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9mb3Jnb3QtcGFzc3dvcmRgLCByZXF1ZXN0KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldGVhIGxhIGNvbnRyYXNlw7FhIHVzYW5kbyBlbCBjw7NkaWdvIGVudmlhZG8gcG9yIGVtYWlsLlxuICAgKi9cbiAgcmVzZXRQYXNzd29yZChyZXF1ZXN0OiBSZXNldFBhc3N3b3JkUmVxdWVzdCk6IE9ic2VydmFibGU8UmVzZXRQYXNzd29yZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8UmVzZXRQYXNzd29yZFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3Jlc2V0LXBhc3N3b3JkYCwgcmVxdWVzdClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUEVSTUlTT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbG9zIHBlcm1pc29zIGFjdHVhbGl6YWRvcyBkZWwgYmFja2VuZC5cbiAgICovXG4gIGZldGNoUGVybWlzc2lvbnMoKTogT2JzZXJ2YWJsZTxHZXRQZXJtaXNzaW9uc1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8R2V0UGVybWlzc2lvbnNSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9wZXJtaXNzaW9uc2ApLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS51cGRhdGVQZXJtaXNzaW9ucyhcbiAgICAgICAgICByZXNwb25zZS5yb2xlcyxcbiAgICAgICAgICByZXNwb25zZS5wZXJtaXNzaW9ucyxcbiAgICAgICAgICByZXNwb25zZS5pc1N1cGVyQWRtaW5cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zYXZlUGVybWlzc2lvbnMocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLnN5bmNTZXJ2aWNlLmJyb2FkY2FzdCh7IHR5cGU6ICdQRVJNSVNTSU9OU19VUERBVEUnIH0pO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gdGllbmUgdW4gcGVybWlzbyBlc3BlY8OtZmljby5cbiAgICogRm9ybWF0bzogXCJyZXNvdXJjZTphY3Rpb25cIiAoZWo6IFwidGVtcGxhdGVzOmVkaXRcIilcbiAgICovXG4gIGhhc1Blcm1pc3Npb24ocGVybWlzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNTdXBlckFkbWluKCkpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgW3Jlc291cmNlLCBhY3Rpb25dID0gcGVybWlzc2lvbi5zcGxpdCgnOicpO1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zKCkuc29tZShwID0+IHtcbiAgICAgIGNvbnN0IFtwUmVzb3VyY2UsIHBBY3Rpb25dID0gcC5zcGxpdCgnOicpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHBSZXNvdXJjZSA9PT0gJyonIHx8IHBSZXNvdXJjZSA9PT0gcmVzb3VyY2UpICYmIChwQWN0aW9uID09PSAnKicgfHwgcEFjdGlvbiA9PT0gYWN0aW9uKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIGFsZ3VubyBkZSBsb3MgcGVybWlzb3MgZGFkb3MuXG4gICAqL1xuICBoYXNBbnlQZXJtaXNzaW9uKHBlcm1pc3Npb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwZXJtaXNzaW9ucy5zb21lKHAgPT4gdGhpcy5oYXNQZXJtaXNzaW9uKHApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIHRvZG9zIGxvcyBwZXJtaXNvcyBkYWRvcy5cbiAgICovXG4gIGhhc0FsbFBlcm1pc3Npb25zKHBlcm1pc3Npb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwZXJtaXNzaW9ucy5ldmVyeShwID0+IHRoaXMuaGFzUGVybWlzc2lvbihwKSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyB0aWVuZSB1biByb2wgZXNwZWPDrWZpY28uXG4gICAqL1xuICBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJvbGVzKCkuc29tZShyID0+IHIudG9Mb3dlckNhc2UoKSA9PT0gcm9sZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBnZXQgYmFzZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmNvbmZpZy5hcGlVcmx9JHt0aGlzLmNvbmZpZy5hdXRoUHJlZml4fWA7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVN1Y2Nlc3NmdWxBdXRoKHJlc3BvbnNlOiBTaWduaW5SZXNwb25zZSB8IE1GQVZlcmlmeVJlc3BvbnNlKTogdm9pZCB7XG4gICAgY29uc3QgZXhwaXJlc0F0ID0gRGF0ZS5ub3coKSArIHJlc3BvbnNlLmV4cGlyZXNJbiEgKiAxMDAwO1xuICAgIGNvbnN0IHRva2VuRGF0YSA9IHRoaXMudG9rZW5TZXJ2aWNlLnBhcnNlVG9rZW4ocmVzcG9uc2UuYWNjZXNzVG9rZW4hKTtcblxuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldEF1dGhlbnRpY2F0ZWQoe1xuICAgICAgYWNjZXNzVG9rZW46IHJlc3BvbnNlLmFjY2Vzc1Rva2VuISxcbiAgICAgIHJlZnJlc2hUb2tlbjogcmVzcG9uc2UucmVmcmVzaFRva2VuISxcbiAgICAgIHVzZXJJZDogdG9rZW5EYXRhPy51aWQsXG4gICAgICBlbWFpbDogdG9rZW5EYXRhPy5lbWFpbCxcbiAgICAgIHJvbGVzOiByZXNwb25zZS5yb2xlcyB8fCBbXSxcbiAgICAgIHBlcm1pc3Npb25zOiByZXNwb25zZS5wZXJtaXNzaW9ucyB8fCBbXSxcbiAgICAgIGlzU3VwZXJBZG1pbjogcmVzcG9uc2UucGVybWlzc2lvbnM/LmluY2x1ZGVzKCcqOionKSB8fCBmYWxzZSxcbiAgICAgIGV4cGlyZXNBdCxcbiAgICB9KTtcblxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2F2ZVN0YXRlKHtcbiAgICAgIGFjY2Vzc1Rva2VuOiByZXNwb25zZS5hY2Nlc3NUb2tlbiEsXG4gICAgICByZWZyZXNoVG9rZW46IHJlc3BvbnNlLnJlZnJlc2hUb2tlbiEsXG4gICAgICByb2xlczogcmVzcG9uc2Uucm9sZXMgfHwgW10sXG4gICAgICBwZXJtaXNzaW9uczogcmVzcG9uc2UucGVybWlzc2lvbnMgfHwgW10sXG4gICAgICBpc1N1cGVyQWRtaW46IHJlc3BvbnNlLnBlcm1pc3Npb25zPy5pbmNsdWRlcygnKjoqJykgfHwgZmFsc2UsXG4gICAgICBleHBpcmVzQXQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG4gICAgdGhpcy5zeW5jU2VydmljZS5icm9hZGNhc3QoeyB0eXBlOiAnTE9HSU4nIH0pO1xuXG4gICAgLy8gSW50ZWdyYWNpw7NuIGNvbiBGaXJlYmFzZVxuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnLmVuYWJsZUZpcmViYXNlSW50ZWdyYXRpb24gJiZcbiAgICAgICdmaXJlYmFzZVRva2VuJyBpbiByZXNwb25zZSAmJlxuICAgICAgcmVzcG9uc2UuZmlyZWJhc2VUb2tlblxuICAgICkge1xuICAgICAgdGhpcy5zaWduSW5XaXRoRmlyZWJhc2UocmVzcG9uc2UuZmlyZWJhc2VUb2tlbik7XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0cm8gYXV0b23DoXRpY28gZGUgZGlzcG9zaXRpdm8gcGFyYSBwdXNoIG5vdGlmaWNhdGlvbnNcbiAgICBpZiAodGhpcy5jb25maWcuZW5hYmxlRGV2aWNlUmVnaXN0cmF0aW9uKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRGV2aWNlSWZOZWVkZWQoKTsgLy8gZmlyZS1hbmQtZm9yZ2V0XG4gICAgfVxuXG4gICAgLy8gU2luY3Jvbml6YXIgaWRpb21hIGRlbCB1c3VhcmlvIGNvbiBpMThuXG4gICAgaWYgKHRoaXMuaTE4blNlcnZpY2UgJiYgJ2xhbmd1YWdlJyBpbiByZXNwb25zZSAmJiByZXNwb25zZS5sYW5ndWFnZSkge1xuICAgICAgY29uc3QgdXNlckxhbmcgPSByZXNwb25zZS5sYW5ndWFnZSBhcyBJMThuTGFuZztcbiAgICAgIGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy5pMThuU2VydmljZS5sYW5nKCk7XG4gICAgICBpZiAodXNlckxhbmcgIT09IGN1cnJlbnRMYW5nKSB7XG4gICAgICAgIHRoaXMuaTE4blNlcnZpY2Uuc2V0TGFuZ3VhZ2UodXNlckxhbmcpO1xuICAgICAgICBjb25zb2xlLmxvZyhgW1ZhbHRlY2hBdXRoXSBMYW5ndWFnZSBzeW5jZWQgdG86ICR7dXNlckxhbmd9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFJlZnJlc2hUaW1lcigpO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnJlc2V0KCk7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFJlZnJlc2hUaW1lcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSZWZyZXNoVGltZXIoKTtcblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZVNlcnZpY2Uuc3RhdGUoKTtcbiAgICBpZiAoIXN0YXRlLmV4cGlyZXNBdCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVmcmVzaEJlZm9yZU1zID0gKHRoaXMuY29uZmlnLnJlZnJlc2hCZWZvcmVFeHBpcnkgfHwgNjApICogMTAwMDtcbiAgICBjb25zdCByZWZyZXNoQXQgPSBzdGF0ZS5leHBpcmVzQXQgLSByZWZyZXNoQmVmb3JlTXM7XG4gICAgY29uc3QgZGVsYXkgPSByZWZyZXNoQXQgLSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKGRlbGF5ID4gMCkge1xuICAgICAgdGhpcy5yZWZyZXNoVGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnN1YnNjcmliZSh7XG4gICAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMubG9nb3V0KCksXG4gICAgICAgIH0pO1xuICAgICAgfSwgZGVsYXkpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUucmVmcmVzaFRva2VuKSB7XG4gICAgICAvLyBUb2tlbiB5YSBkZWJlcsOtYSByZWZyZXNjYXJzZSwgaW50ZW50YXIgYWhvcmFcbiAgICAgIHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuKCkuc3Vic2NyaWJlKHtcbiAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMubG9nb3V0KCksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0b3BSZWZyZXNoVGltZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVmcmVzaFRpbWVySWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hUaW1lcklkKTtcbiAgICAgIHRoaXMucmVmcmVzaFRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3luY0V2ZW50KGV2ZW50OiBBdXRoU3luY0V2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICBjYXNlICdMT0dJTic6XG4gICAgICBjYXNlICdUT0tFTl9SRUZSRVNIJzoge1xuICAgICAgICAvLyBSZWNhcmdhciBlc3RhZG8gZGVzZGUgc3RvcmFnZVxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RvcmFnZVNlcnZpY2UubG9hZFN0YXRlKCk7XG4gICAgICAgIGlmIChzdGF0ZS5hY2Nlc3NUb2tlbikge1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnJlc3RvcmVGcm9tU3RvcmFnZShzdGF0ZSk7XG4gICAgICAgICAgY29uc3QgY2xhaW1zID0gdGhpcy50b2tlblNlcnZpY2UucGFyc2VUb2tlbihzdGF0ZS5hY2Nlc3NUb2tlbik7XG4gICAgICAgICAgaWYgKGNsYWltcykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UudXBkYXRlVXNlckluZm8oY2xhaW1zLnVpZCwgY2xhaW1zLmVtYWlsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnTE9HT1VUJzpcbiAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UucmVzZXQoKTtcbiAgICAgICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmNvbmZpZy5sb2dpblJvdXRlXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUEVSTUlTU0lPTlNfVVBEQVRFJzoge1xuICAgICAgICBjb25zdCBwZXJtcyA9IHRoaXMuc3RvcmFnZVNlcnZpY2UubG9hZFBlcm1pc3Npb25zKCk7XG4gICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnVwZGF0ZVBlcm1pc3Npb25zKHBlcm1zLnJvbGVzLCBwZXJtcy5wZXJtaXNzaW9ucywgcGVybXMuaXNTdXBlckFkbWluKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdPUkdfU1dJVENIJzpcbiAgICAgICAgLy8gT3RyYSBwZXN0YcOxYSBjYW1iacOzIGRlIG9yZ2FuaXphY2nDs24gLSByZWNhcmdhciBww6FnaW5hIHBhcmEgb2J0ZW5lciBudWV2byBlc3RhZG9cbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUF1dGhFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgY29uc3QgYXV0aEVycm9yOiBBdXRoRXJyb3IgPSB7XG4gICAgICBjb2RlOiBlcnJvci5lcnJvcj8uY29kZSB8fCAnVU5LTk9XTl9FUlJPUicsXG4gICAgICBtZXNzYWdlOiBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3IgZGUgYXV0ZW50aWNhY2nDs24gZGVzY29ub2NpZG8nLFxuICAgIH07XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0RXJyb3IoYXV0aEVycm9yKTtcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBhdXRoRXJyb3IpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZJUkVCQVNFIElOVEVHUkFUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgYXN5bmMgc2lnbkluV2l0aEZpcmViYXNlKGZpcmViYXNlVG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5maXJlYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maXJlYmFzZVNlcnZpY2Uuc2lnbkluV2l0aEN1c3RvbVRva2VuKGZpcmViYXNlVG9rZW4pO1xuICAgICAgICBjb25zb2xlLmxvZygnW1ZhbHRlY2hBdXRoXSBGaXJlYmFzZSBzaWduaW4gc3VjY2Vzc2Z1bCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdbVmFsdGVjaEF1dGhdIEZpcmViYXNlU2VydmljZSBub3QgcHJvdmlkZWQuIEFkZCBwcm92aWRlVmFsdGVjaEZpcmViYXNlKCkgdG8geW91ciBwcm92aWRlcnMuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBObyBibG9xdWVhciBlbCBsb2dpbiBwcmluY2lwYWwgc2kgRmlyZWJhc2UgZmFsbGFcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tWYWx0ZWNoQXV0aF0gRmlyZWJhc2Ugc2lnbmluIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaWduT3V0RmlyZWJhc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVGaXJlYmFzZUludGVncmF0aW9uKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZmlyZWJhc2VTZXJ2aWNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlyZWJhc2VTZXJ2aWNlLnNpZ25PdXQoKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQXV0aF0gRmlyZWJhc2Ugc2lnbm91dCBzdWNjZXNzZnVsJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElnbm9yYXIgZXJyb3JlcyBkZSBGaXJlYmFzZSBzaWdub3V0XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gRmlyZWJhc2Ugc2lnbm91dCBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBERVZJQ0UgUkVHSVNUUkFUSU9OIChQdXNoIE5vdGlmaWNhdGlvbnMpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTb2xpY2l0YSBwZXJtaXNvcyBkZSBub3RpZmljYWNpw7NuIHkgcmVnaXN0cmEgZWwgZGlzcG9zaXRpdm8uXG4gICAqIFVzYXIgY3VhbmRvIGVsIHVzdWFyaW8gYWNlcHRhIHJlY2liaXIgbm90aWZpY2FjaW9uZXMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXN5bmMgb25FbmFibGVOb3RpZmljYXRpb25zKCkge1xuICAgKiAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYXV0aC5lbmFibGVOb3RpZmljYXRpb25zKCk7XG4gICAqICAgaWYgKHJlc3VsdC5ncmFudGVkKSB7XG4gICAqICAgICBjb25zb2xlLmxvZygnTm90aWZpY2FjaW9uZXMgaGFiaWxpdGFkYXMnKTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBlbmFibGVOb3RpZmljYXRpb25zKCk6IFByb21pc2U8RW5hYmxlTm90aWZpY2F0aW9uc1Jlc3VsdD4ge1xuICAgIGlmICghdGhpcy5tZXNzYWdpbmdTZXJ2aWNlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gTWVzc2FnaW5nU2VydmljZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICByZXR1cm4geyBncmFudGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIGlmICghYXdhaXQgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBQdXNoIG5vdGlmaWNhdGlvbnMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuIHsgZ3JhbnRlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMubWVzc2FnaW5nU2VydmljZS5yZXF1ZXN0UGVybWlzc2lvbigpO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiB7IGdyYW50ZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgLy8gUmVnaXN0cmFyIGRpc3Bvc2l0aXZvIGVuIGJhY2tlbmRcbiAgICBjb25zdCByZWdpc3RlcmVkID0gYXdhaXQgdGhpcy5yZWdpc3RlckRldmljZUlmTmVlZGVkKCk7XG5cbiAgICByZXR1cm4geyBncmFudGVkOiB0cnVlLCB0b2tlbiwgcmVnaXN0ZXJlZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2FjdGl2YSBsYXMgbm90aWZpY2FjaW9uZXMgcGFyYSBlc3RlIGRpc3Bvc2l0aXZvLlxuICAgKiBFbGltaW5hIGVsIHRva2VuIGRlbCBiYWNrZW5kIHkgZGUgRkNNLlxuICAgKiBVc2FyIGRlc2RlIHVuIHRvZ2dsZSBkZSBwcmVmZXJlbmNpYXMgY3VhbmRvIGVsIHVzdWFyaW8gZGVzYWN0aXZhIG5vdGlmaWNhY2lvbmVzLlxuICAgKlxuICAgKiBOT1RBOiBFc3RvIE5PIHJldm9jYSBlbCBwZXJtaXNvIGRlbCBuYXZlZ2Fkb3IgKGVsIHVzdWFyaW8gZGViZSBoYWNlcmxvIG1hbnVhbG1lbnRlXG4gICAqIGRlc2RlIGxhIGNvbmZpZ3VyYWNpw7NuIGRlbCBuYXZlZ2Fkb3IpLiBTb2xvIGVsaW1pbmEgZWwgcmVnaXN0cm8gZGVsIGRpc3Bvc2l0aXZvLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGFzeW5jIG9uVG9nZ2xlTm90aWZpY2F0aW9ucyhlbmFibGVkOiBib29sZWFuKSB7XG4gICAqICAgaWYgKGVuYWJsZWQpIHtcbiAgICogICAgIGF3YWl0IHRoaXMuYXV0aC5lbmFibGVOb3RpZmljYXRpb25zKCk7XG4gICAqICAgfSBlbHNlIHtcbiAgICogICAgIGF3YWl0IHRoaXMuYXV0aC5kaXNhYmxlTm90aWZpY2F0aW9ucygpO1xuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGRpc2FibGVOb3RpZmljYXRpb25zKCk6IFByb21pc2U8eyBkaXNhYmxlZDogYm9vbGVhbiB9PiB7XG4gICAgaWYgKCF0aGlzLm1lc3NhZ2luZ1NlcnZpY2UpIHtcbiAgICAgIHJldHVybiB7IGRpc2FibGVkOiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHRoaXMubWVzc2FnaW5nU2VydmljZS5jdXJyZW50VG9rZW47XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgLy8gRWxpbWluYXIgZGVsIGJhY2tlbmRcbiAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgdGhpcy5odHRwLnJlcXVlc3QoJ0RFTEVURScsIGAke3RoaXMuY29uZmlnLmFwaVVybH0vdjIvdXNlcnMvbWUvZGV2aWNlcy9ieS10b2tlbmAsIHtcbiAgICAgICAgICAgIGJvZHk6IHsgdG9rZW4gfVxuICAgICAgICAgIH0pLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gRWxpbWluYXIgdG9rZW4gZGUgRkNNXG4gICAgICAgIGF3YWl0IHRoaXMubWVzc2FnaW5nU2VydmljZS5kZWxldGVUb2tlbigpO1xuICAgICAgICBjb25zb2xlLmxvZygnW1ZhbHRlY2hBdXRoXSBOb3RpZmljYXRpb25zIGRpc2FibGVkJyk7XG4gICAgICAgIHJldHVybiB7IGRpc2FibGVkOiB0cnVlIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGRpc2FibGVkOiBmYWxzZSB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gRmFpbGVkIHRvIGRpc2FibGUgbm90aWZpY2F0aW9uczonLCBlcnJvcik7XG4gICAgICByZXR1cm4geyBkaXNhYmxlZDogZmFsc2UgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSBlbCBlc3RhZG8gYWN0dWFsIGRlIHBlcm1pc29zIGRlIG5vdGlmaWNhY2nDs24uXG4gICAqXG4gICAqIEByZXR1cm5zICdncmFudGVkJyB8ICdkZW5pZWQnIHwgJ2RlZmF1bHQnIHwgJ3Vuc3VwcG9ydGVkJ1xuICAgKi9cbiAgZ2V0Tm90aWZpY2F0aW9uUGVybWlzc2lvblN0YXRlKCk6IE5vdGlmaWNhdGlvblBlcm1pc3Npb25TdGF0ZSB7XG4gICAgaWYgKCF0aGlzLm1lc3NhZ2luZ1NlcnZpY2UpIHtcbiAgICAgIHJldHVybiAndW5zdXBwb3J0ZWQnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmdldFBlcm1pc3Npb25TdGF0ZSgpIGFzIE5vdGlmaWNhdGlvblBlcm1pc3Npb25TdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBtYW51YWxtZW50ZSBlbCBkaXNwb3NpdGl2byBlbiBlbCBiYWNrZW5kLlxuICAgKiDDmnRpbCBwYXJhIHNpbmNyb25pemFyIGRpc3Bvc2l0aXZvcyBxdWUgdGllbmVuIHRva2VuIEZDTSBwZXJvIG5vIGVzdMOhbiByZWdpc3RyYWRvcy5cbiAgICpcbiAgICogQHBhcmFtIHByb3ZpZGVkVG9rZW4gVG9rZW4gRkNNIG9wY2lvbmFsLiBTaSBzZSBwcm9wb3JjaW9uYSwgc2UgdXNhIGRpcmVjdGFtZW50ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICBzaW4gZGVwZW5kZXIgZGVsIE1lc3NhZ2luZ1NlcnZpY2UgKGV2aXRhIHRpbWluZyBpc3N1ZXMpLlxuICAgKiBAcmV0dXJucyBSZXN1bHRhZG8gZGVsIHJlZ2lzdHJvIGNvbiBkZXZpY2VJZCBzaSBmdWUgZXhpdG9zb1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFNpbmNyb25pemFyIGNvbiB0b2tlbiBleGlzdGVudGUgKHJlY29tZW5kYWRvKVxuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmF1dGgucmVnaXN0ZXJEZXZpY2UobXlUb2tlbik7XG4gICAqXG4gICAqIC8vIFNpbiB0b2tlbiwgaW50ZW50YXLDoSBvYnRlbmVybG8gZGVsIE1lc3NhZ2luZ1NlcnZpY2VcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hdXRoLnJlZ2lzdGVyRGV2aWNlKCk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgcmVnaXN0ZXJEZXZpY2UocHJvdmlkZWRUb2tlbj86IHN0cmluZyk6IFByb21pc2U8UmVnaXN0ZXJEZXZpY2VSZXN1bHQ+IHtcbiAgICBpZiAoIXRoaXMuaXNBdXRoZW50aWNhdGVkKCkpIHtcbiAgICAgIHJldHVybiB7IHJlZ2lzdGVyZWQ6IGZhbHNlLCBlcnJvcjogJ1VzdWFyaW8gbm8gYXV0ZW50aWNhZG8nIH07XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFZlcmlmaWNhciBwZXJtaXNvcyBzaSB0ZW5lbW9zIE1lc3NhZ2luZ1NlcnZpY2VcbiAgICAgIGlmICh0aGlzLm1lc3NhZ2luZ1NlcnZpY2UpIHtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbiA9IHRoaXMubWVzc2FnaW5nU2VydmljZS5nZXRQZXJtaXNzaW9uU3RhdGUoKTtcbiAgICAgICAgaWYgKHBlcm1pc3Npb24gIT09ICdncmFudGVkJykge1xuICAgICAgICAgIHJldHVybiB7IHJlZ2lzdGVyZWQ6IGZhbHNlLCBlcnJvcjogJ1Blcm1pc28gZGUgbm90aWZpY2FjaW9uZXMgbm8gb3RvcmdhZG8nIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVXNhciB0b2tlbiBwcm9wb3JjaW9uYWRvIHByaW1lcm8gKGV2aXRhIHRpbWluZyBpc3N1ZXMgY29uIEluamVjdG9yKVxuICAgICAgbGV0IHRva2VuID0gcHJvdmlkZWRUb2tlbiB8fCB0aGlzLm1lc3NhZ2luZ1NlcnZpY2U/LmN1cnJlbnRUb2tlbjtcblxuICAgICAgLy8gU2kgbm8gaGF5IHRva2VuLCBpbnRlbnRhciBvYnRlbmVybG8gZGVsIE1lc3NhZ2luZ1NlcnZpY2VcbiAgICAgIGlmICghdG9rZW4gJiYgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlKSB7XG4gICAgICAgIGlmICghYXdhaXQgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgICAgICByZXR1cm4geyByZWdpc3RlcmVkOiBmYWxzZSwgZXJyb3I6ICdGQ00gbm8gc29wb3J0YWRvIGVuIGVzdGUgbmF2ZWdhZG9yJyB9O1xuICAgICAgICB9XG4gICAgICAgIHRva2VuID0gYXdhaXQgdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmdldFRva2VuKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHsgcmVnaXN0ZXJlZDogZmFsc2UsIGVycm9yOiAnTm8gc2UgcHVkbyBvYnRlbmVyIHRva2VuIEZDTScgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVnaXN0cmFyIGVuIGJhY2tlbmRcbiAgICAgIGNvbnN0IHsgcGxhdGZvcm0sIGJyb3dzZXIsIG9zIH0gPSB0aGlzLmRldGVjdFBsYXRmb3JtSW5mbygpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5odHRwLnBvc3Q8UmVnaXN0ZXJEZXZpY2VSZXNwb25zZT4oXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpVXJsfS92Mi91c2Vycy9tZS9kZXZpY2VzYCxcbiAgICAgICAgICB7IHRva2VuLCBwbGF0Zm9ybSwgYnJvd3Nlciwgb3MgfVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICBjb25zb2xlLmxvZygnW1ZhbHRlY2hBdXRoXSBEZXZpY2UgcmVnaXN0ZXJlZCBtYW51YWxseTonLCByZXNwb25zZS5kZXZpY2UuZGV2aWNlSWQpO1xuICAgICAgcmV0dXJuIHsgcmVnaXN0ZXJlZDogdHJ1ZSwgZGV2aWNlSWQ6IHJlc3BvbnNlLmRldmljZS5kZXZpY2VJZCwgdG9rZW4gfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBNYW51YWwgZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVnaXN0ZXJlZDogZmFsc2UsXG4gICAgICAgIGVycm9yOiBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIHJlZ2lzdHJhciBkaXNwb3NpdGl2bydcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIGVsIGRpc3Bvc2l0aXZvIGVuIGVsIGJhY2tlbmQgc2kgdGllbmUgcGVybWlzb3MgZGUgbm90aWZpY2FjacOzbi5cbiAgICogU2UgbGxhbWEgYXV0b23DoXRpY2FtZW50ZSBkZXNwdcOpcyBkZSB1biBsb2dpbiBleGl0b3NvIHNpIGVuYWJsZURldmljZVJlZ2lzdHJhdGlvbj10cnVlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZWdpc3RlckRldmljZUlmTmVlZGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIFNvbG8gc2kgZXN0w6EgaGFiaWxpdGFkbyB5IG1lc3NhZ2luZyBlc3TDoSBkaXNwb25pYmxlXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVEZXZpY2VSZWdpc3RyYXRpb24gfHwgIXRoaXMubWVzc2FnaW5nU2VydmljZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBWZXJpZmljYXIgc2kgRkNNIGVzdMOhIHNvcG9ydGFkb1xuICAgICAgaWYgKCFhd2FpdCB0aGlzLm1lc3NhZ2luZ1NlcnZpY2UuaXNTdXBwb3J0ZWQoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmaWNhciBzaSB5YSB0aWVuZSBwZXJtaXNvc1xuICAgICAgY29uc3QgcGVybWlzc2lvbiA9IHRoaXMubWVzc2FnaW5nU2VydmljZS5nZXRQZXJtaXNzaW9uU3RhdGUoKTtcbiAgICAgIGlmIChwZXJtaXNzaW9uICE9PSAnZ3JhbnRlZCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBzb2xpY2l0YXIgYXV0b23DoXRpY2FtZW50ZSwgc29sbyByZWdpc3RyYXIgc2kgeWEgdGllbmUgcGVybWlzb1xuICAgICAgfVxuXG4gICAgICAvLyBPYnRlbmVyIHRva2VuIGV4aXN0ZW50ZSAobm8gc29saWNpdGFyIG51ZXZvKVxuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCB0aGlzLm1lc3NhZ2luZ1NlcnZpY2UuZ2V0VG9rZW4oKTtcbiAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWdpc3RyYXIgZW4gYmFja2VuZFxuICAgICAgY29uc3QgeyBwbGF0Zm9ybSwgYnJvd3Nlciwgb3MgfSA9IHRoaXMuZGV0ZWN0UGxhdGZvcm1JbmZvKCk7XG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5odHRwLnBvc3Q8UmVnaXN0ZXJEZXZpY2VSZXNwb25zZT4oXG4gICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpVXJsfS92Mi91c2Vycy9tZS9kZXZpY2VzYCxcbiAgICAgICAgICB7IHRva2VuLCBwbGF0Zm9ybSwgYnJvd3Nlciwgb3MgfVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICBjb25zb2xlLmxvZygnW1ZhbHRlY2hBdXRoXSBEZXZpY2UgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIE5vIGJsb3F1ZWFyIGF1dGggc2kgZmFsbGEgZGV2aWNlIHJlZ2lzdHJhdGlvblxuICAgICAgY29uc29sZS53YXJuKCdbVmFsdGVjaEF1dGhdIERldmljZSByZWdpc3RyYXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSBlbCBkaXNwb3NpdGl2byBkZWwgYmFja2VuZCB5IGJvcnJhIGVsIHRva2VuIEZDTS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdW5yZWdpc3RlckRldmljZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmVuYWJsZURldmljZVJlZ2lzdHJhdGlvbiB8fCAhdGhpcy5tZXNzYWdpbmdTZXJ2aWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5tZXNzYWdpbmdTZXJ2aWNlLmN1cnJlbnRUb2tlbjtcbiAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAvLyBEZWxldGUgZnJvbSBiYWNrZW5kIChmaXJlIGFuZCBmb3JnZXQpXG4gICAgICAgIHRoaXMuaHR0cC5yZXF1ZXN0KCdERUxFVEUnLCBgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L3YyL3VzZXJzL21lL2RldmljZXMvYnktdG9rZW5gLCB7XG4gICAgICAgICAgYm9keTogeyB0b2tlbiB9XG4gICAgICAgIH0pLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSkpLnN1YnNjcmliZSgpO1xuXG4gICAgICAgIC8vIERlbGV0ZSBmcm9tIEZDTVxuICAgICAgICBhd2FpdCB0aGlzLm1lc3NhZ2luZ1NlcnZpY2UuZGVsZXRlVG9rZW4oKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQXV0aF0gRGV2aWNlIHVucmVnaXN0ZXJlZCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWdub3JhciBlcnJvcmVzIGVuIGNsZWFudXBcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0YSBpbmZvcm1hY2nDs24gZGUgbGEgcGxhdGFmb3JtYSBkZWwgZGlzcG9zaXRpdm8uXG4gICAqL1xuICBwcml2YXRlIGRldGVjdFBsYXRmb3JtSW5mbygpOiB7IHBsYXRmb3JtOiAnd2ViJzsgYnJvd3Nlcjogc3RyaW5nOyBvczogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxuICAgIC8vIERldGVjdGFyIG5hdmVnYWRvclxuICAgIGxldCBicm93c2VyID0gJ1Vua25vd24nO1xuICAgIGlmICh1YS5pbmNsdWRlcygnRmlyZWZveCcpKSB7XG4gICAgICBicm93c2VyID0gJ0ZpcmVmb3gnO1xuICAgIH0gZWxzZSBpZiAodWEuaW5jbHVkZXMoJ0VkZycpKSB7XG4gICAgICBicm93c2VyID0gJ0VkZ2UnO1xuICAgIH0gZWxzZSBpZiAodWEuaW5jbHVkZXMoJ0Nocm9tZScpKSB7XG4gICAgICBicm93c2VyID0gJ0Nocm9tZSc7XG4gICAgfSBlbHNlIGlmICh1YS5pbmNsdWRlcygnU2FmYXJpJykpIHtcbiAgICAgIGJyb3dzZXIgPSAnU2FmYXJpJztcbiAgICB9XG5cbiAgICAvLyBEZXRlY3RhciBPU1xuICAgIGxldCBvcyA9ICdVbmtub3duJztcbiAgICBpZiAodWEuaW5jbHVkZXMoJ1dpbmRvd3MnKSkge1xuICAgICAgb3MgPSAnV2luZG93cyc7XG4gICAgfSBlbHNlIGlmICh1YS5pbmNsdWRlcygnTWFjIE9TJykpIHtcbiAgICAgIG9zID0gJ21hY09TJztcbiAgICB9IGVsc2UgaWYgKHVhLmluY2x1ZGVzKCdMaW51eCcpKSB7XG4gICAgICBvcyA9ICdMaW51eCc7XG4gICAgfSBlbHNlIGlmICh1YS5pbmNsdWRlcygnQW5kcm9pZCcpKSB7XG4gICAgICBvcyA9ICdBbmRyb2lkJztcbiAgICB9IGVsc2UgaWYgKHVhLmluY2x1ZGVzKCdpT1MnKSB8fCB1YS5pbmNsdWRlcygnaVBob25lJykgfHwgdWEuaW5jbHVkZXMoJ2lQYWQnKSkge1xuICAgICAgb3MgPSAnaU9TJztcbiAgICB9XG5cbiAgICByZXR1cm4geyBwbGF0Zm9ybTogJ3dlYicsIGJyb3dzZXIsIG9zIH07XG4gIH1cbn1cbiJdfQ==