carbon-components-angular 5.55.0 → 5.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/docs/documentation/components/Dropdown.html +504 -152
  2. package/docs/documentation/coverage.html +3 -3
  3. package/docs/documentation/js/search/search_index.js +2 -2
  4. package/docs/documentation/modules/CodeSnippetModule/dependencies.svg +4 -4
  5. package/docs/documentation/modules/CodeSnippetModule.html +4 -4
  6. package/docs/documentation/modules/ComboBoxModule/dependencies.svg +4 -4
  7. package/docs/documentation/modules/ComboBoxModule.html +4 -4
  8. package/docs/documentation/modules/DatePickerInputModule/dependencies.svg +4 -4
  9. package/docs/documentation/modules/DatePickerInputModule.html +4 -4
  10. package/docs/documentation/modules/DatePickerModule/dependencies.svg +4 -4
  11. package/docs/documentation/modules/DatePickerModule.html +4 -4
  12. package/docs/documentation/modules/FileUploaderModule/dependencies.svg +34 -34
  13. package/docs/documentation/modules/FileUploaderModule.html +34 -34
  14. package/docs/documentation/modules/NFormsModule/dependencies.svg +4 -4
  15. package/docs/documentation/modules/NFormsModule.html +4 -4
  16. package/docs/documentation/modules/NumberModule/dependencies.svg +4 -4
  17. package/docs/documentation/modules/NumberModule.html +4 -4
  18. package/docs/documentation/modules/RadioModule/dependencies.svg +61 -57
  19. package/docs/documentation/modules/RadioModule.html +61 -57
  20. package/docs/documentation/modules/SearchModule/dependencies.svg +4 -4
  21. package/docs/documentation/modules/SearchModule.html +4 -4
  22. package/docs/documentation/modules/SliderModule/dependencies.svg +4 -4
  23. package/docs/documentation/modules/SliderModule.html +4 -4
  24. package/docs/documentation/modules/StructuredListModule/dependencies.svg +66 -66
  25. package/docs/documentation/modules/StructuredListModule.html +66 -66
  26. package/docs/documentation/modules/TagModule/dependencies.svg +37 -37
  27. package/docs/documentation/modules/TagModule.html +37 -37
  28. package/docs/documentation/modules/ThemeModule/dependencies.svg +4 -4
  29. package/docs/documentation/modules/ThemeModule.html +4 -4
  30. package/docs/documentation/modules/TilesModule/dependencies.svg +91 -91
  31. package/docs/documentation/modules/TilesModule.html +91 -91
  32. package/docs/documentation/modules/TimePickerModule/dependencies.svg +4 -4
  33. package/docs/documentation/modules/TimePickerModule.html +4 -4
  34. package/docs/documentation/modules/TimePickerSelectModule/dependencies.svg +46 -42
  35. package/docs/documentation/modules/TimePickerSelectModule.html +46 -42
  36. package/docs/documentation/modules/ToggleModule/dependencies.svg +46 -42
  37. package/docs/documentation/modules/ToggleModule.html +46 -42
  38. package/docs/documentation/modules/ToggletipModule/dependencies.svg +39 -39
  39. package/docs/documentation/modules/ToggletipModule.html +39 -39
  40. package/docs/documentation/modules/TooltipModule/dependencies.svg +28 -28
  41. package/docs/documentation/modules/TooltipModule.html +28 -28
  42. package/docs/documentation/modules/TreeviewModule/dependencies.svg +37 -37
  43. package/docs/documentation/modules/TreeviewModule.html +37 -37
  44. package/docs/documentation.json +288 -155
  45. package/docs/storybook/3224.9896492c.iframe.bundle.js +1 -0
  46. package/docs/storybook/{dropdown-dropdown-stories.03c37214.iframe.bundle.js → dropdown-dropdown-stories.0a8f052e.iframe.bundle.js} +1 -1
  47. package/docs/storybook/iframe.html +2 -2
  48. package/docs/storybook/index.json +1 -1
  49. package/docs/storybook/{main.fd9128ab.iframe.bundle.js → main.848bbb16.iframe.bundle.js} +1 -1
  50. package/docs/storybook/project.json +1 -1
  51. package/docs/storybook/{runtime~main.d4ace00c.iframe.bundle.js → runtime~main.e82ba84b.iframe.bundle.js} +1 -1
  52. package/docs/storybook/stories.json +1 -1
  53. package/dropdown/dropdown.component.d.ts +12 -3
  54. package/esm2020/dropdown/dropdown.component.mjs +79 -37
  55. package/fesm2015/carbon-components-angular-dropdown.mjs +79 -37
  56. package/fesm2015/carbon-components-angular-dropdown.mjs.map +1 -1
  57. package/fesm2020/carbon-components-angular-dropdown.mjs +79 -37
  58. package/fesm2020/carbon-components-angular-dropdown.mjs.map +1 -1
  59. package/package.json +1 -1
  60. package/docs/storybook/3224.c0834124.iframe.bundle.js +0 -1
@@ -55,6 +55,10 @@ export declare class Dropdown implements OnInit, AfterContentInit, AfterViewInit
55
55
  protected dropdownService: DropdownService;
56
56
  protected elementService: ElementService;
57
57
  static dropdownCount: number;
58
+ get fluidInvalidClass(): boolean;
59
+ get fluidFocusClass(): boolean;
60
+ protected get writtenValue(): any[];
61
+ protected set writtenValue(val: any[]);
58
62
  id: string;
59
63
  /**
60
64
  * Label for the dropdown.
@@ -189,6 +193,11 @@ export declare class Dropdown implements OnInit, AfterContentInit, AfterViewInit
189
193
  */
190
194
  dropdownMenu: any;
191
195
  hostClass: boolean;
196
+ hostWrapperClass: boolean;
197
+ /**
198
+ * Experimental: enable fluid state
199
+ */
200
+ fluid: boolean;
192
201
  /**
193
202
  * Set to `true` if the dropdown is closed (not expanded).
194
203
  */
@@ -203,9 +212,8 @@ export declare class Dropdown implements OnInit, AfterContentInit, AfterViewInit
203
212
  keyboardNav: any;
204
213
  protected visibilitySubscription: Subscription;
205
214
  protected onTouchedCallback: () => void;
215
+ protected _isFocused: boolean;
206
216
  private _writtenValue;
207
- protected get writtenValue(): any[];
208
- protected set writtenValue(val: any[]);
209
217
  /**
210
218
  * Creates an instance of Dropdown.
211
219
  */
@@ -310,10 +318,11 @@ export declare class Dropdown implements OnInit, AfterContentInit, AfterViewInit
310
318
  */
311
319
  toggleMenu(): void;
312
320
  isTemplate(value: any): boolean;
321
+ handleFocus(event: FocusEvent): void;
313
322
  /**
314
323
  * Controls when it's needed to apply the selection feedback
315
324
  */
316
325
  protected checkForReorder(): void;
317
326
  static ɵfac: i0.ɵɵFactoryDeclaration<Dropdown, never>;
318
- static ɵcmp: i0.ɵɵComponentDeclaration<Dropdown, "cds-dropdown, ibm-dropdown", never, { "id": "id"; "label": "label"; "hideLabel": "hideLabel"; "helperText": "helperText"; "placeholder": "placeholder"; "displayValue": "displayValue"; "clearText": "clearText"; "size": "size"; "type": "type"; "theme": "theme"; "disabled": "disabled"; "readonly": "readonly"; "skeleton": "skeleton"; "inline": "inline"; "disableArrowKeys": "disableArrowKeys"; "invalid": "invalid"; "invalidText": "invalidText"; "warn": "warn"; "warnText": "warnText"; "appendInline": "appendInline"; "scrollableContainer": "scrollableContainer"; "itemValueKey": "itemValueKey"; "selectionFeedback": "selectionFeedback"; "menuButtonLabel": "menuButtonLabel"; "selectedLabel": "selectedLabel"; "dropUp": "dropUp"; }, { "selected": "selected"; "onClose": "onClose"; "close": "close"; }, ["view"], ["*"], false>;
327
+ static ɵcmp: i0.ɵɵComponentDeclaration<Dropdown, "cds-dropdown, ibm-dropdown", never, { "id": "id"; "label": "label"; "hideLabel": "hideLabel"; "helperText": "helperText"; "placeholder": "placeholder"; "displayValue": "displayValue"; "clearText": "clearText"; "size": "size"; "type": "type"; "theme": "theme"; "disabled": "disabled"; "readonly": "readonly"; "skeleton": "skeleton"; "inline": "inline"; "disableArrowKeys": "disableArrowKeys"; "invalid": "invalid"; "invalidText": "invalidText"; "warn": "warn"; "warnText": "warnText"; "appendInline": "appendInline"; "scrollableContainer": "scrollableContainer"; "itemValueKey": "itemValueKey"; "selectionFeedback": "selectionFeedback"; "menuButtonLabel": "menuButtonLabel"; "selectedLabel": "selectedLabel"; "dropUp": "dropUp"; "fluid": "fluid"; }, { "selected": "selected"; "onClose": "onClose"; "close": "close"; }, ["view"], ["*"], false>;
319
328
  }
@@ -135,6 +135,11 @@ export class Dropdown {
135
135
  */
136
136
  this.close = new EventEmitter();
137
137
  this.hostClass = true;
138
+ this.hostWrapperClass = true;
139
+ /**
140
+ * Experimental: enable fluid state
141
+ */
142
+ this.fluid = false;
138
143
  /**
139
144
  * Set to `true` if the dropdown is closed (not expanded).
140
145
  */
@@ -151,6 +156,7 @@ export class Dropdown {
151
156
  this.keyboardNav = this._keyboardNav.bind(this);
152
157
  this.visibilitySubscription = new Subscription();
153
158
  this.onTouchedCallback = this._noop;
159
+ this._isFocused = false;
154
160
  // primarily used to capture and propagate input to `writeValue` before the content is available
155
161
  this._writtenValue = [];
156
162
  /**
@@ -158,6 +164,12 @@ export class Dropdown {
158
164
  */
159
165
  this.propagateChange = (_) => { };
160
166
  }
167
+ get fluidInvalidClass() {
168
+ return this.invalid && this.fluid;
169
+ }
170
+ get fluidFocusClass() {
171
+ return this.fluid && this._isFocused && this.menuIsClosed;
172
+ }
161
173
  get writtenValue() {
162
174
  return this._writtenValue;
163
175
  }
@@ -583,6 +595,12 @@ export class Dropdown {
583
595
  isTemplate(value) {
584
596
  return value instanceof TemplateRef;
585
597
  }
598
+ handleFocus(event) {
599
+ this._isFocused = event.type === "focus";
600
+ if (event.type === "blur") {
601
+ this.onBlur();
602
+ }
603
+ }
586
604
  /**
587
605
  * Controls when it's needed to apply the selection feedback
588
606
  */
@@ -595,7 +613,7 @@ export class Dropdown {
595
613
  }
596
614
  Dropdown.dropdownCount = 0;
597
615
  Dropdown.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Dropdown, deps: [{ token: i0.ElementRef }, { token: i1.I18n }, { token: i2.DropdownService }, { token: i3.ElementService }], target: i0.ɵɵFactoryTarget.Component });
598
- Dropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: { id: "id", label: "label", hideLabel: "hideLabel", helperText: "helperText", placeholder: "placeholder", displayValue: "displayValue", clearText: "clearText", size: "size", type: "type", theme: "theme", disabled: "disabled", readonly: "readonly", skeleton: "skeleton", inline: "inline", disableArrowKeys: "disableArrowKeys", invalid: "invalid", invalidText: "invalidText", warn: "warn", warnText: "warnText", appendInline: "appendInline", scrollableContainer: "scrollableContainer", itemValueKey: "itemValueKey", selectionFeedback: "selectionFeedback", menuButtonLabel: "menuButtonLabel", selectedLabel: "selectedLabel", dropUp: "dropUp" }, outputs: { selected: "selected", onClose: "onClose", close: "close" }, host: { listeners: { "keydown": "onKeyDown($event)" }, properties: { "class.cds--dropdown__wrapper": "this.hostClass" } }, providers: [
616
+ Dropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: { id: "id", label: "label", hideLabel: "hideLabel", helperText: "helperText", placeholder: "placeholder", displayValue: "displayValue", clearText: "clearText", size: "size", type: "type", theme: "theme", disabled: "disabled", readonly: "readonly", skeleton: "skeleton", inline: "inline", disableArrowKeys: "disableArrowKeys", invalid: "invalid", invalidText: "invalidText", warn: "warn", warnText: "warnText", appendInline: "appendInline", scrollableContainer: "scrollableContainer", itemValueKey: "itemValueKey", selectionFeedback: "selectionFeedback", menuButtonLabel: "menuButtonLabel", selectedLabel: "selectedLabel", dropUp: "dropUp", fluid: "fluid" }, outputs: { selected: "selected", onClose: "onClose", close: "close" }, host: { listeners: { "keydown": "onKeyDown($event)" }, properties: { "class.cds--list-box__wrapper--fluid--invalid": "this.fluidInvalidClass", "class.cds--list-box__wrapper--fluid--focus": "this.fluidFocusClass", "class.cds--dropdown__wrapper": "this.hostClass", "class.cds--list-box__wrapper": "this.hostWrapperClass", "class.cds--list-box__wrapper--fluid": "this.fluid" } }, providers: [
599
617
  {
600
618
  provide: NG_VALUE_ACCESSOR,
601
619
  useExisting: Dropdown,
@@ -616,7 +634,7 @@ Dropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
616
634
  <div
617
635
  class="cds--list-box"
618
636
  [ngClass]="{
619
- 'cds--dropdown': type !== 'multi',
637
+ 'cds--dropdown': type !== 'multi' && !(skeleton && fluid),
620
638
  'cds--multiselect': type === 'multi',
621
639
  'cds--multi-select--selected': type === 'multi' && getSelectedCount() > 0,
622
640
  'cds--dropdown--light': theme === 'light',
@@ -630,8 +648,11 @@ Dropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
630
648
  'cds--dropdown--sm cds--list-box--sm': size === 'sm',
631
649
  'cds--dropdown--md cds--list-box--md': size === 'md',
632
650
  'cds--dropdown--lg cds--list-box--lg': size === 'lg',
633
- 'cds--list-box--expanded': !menuIsClosed
634
- }">
651
+ 'cds--list-box--expanded': !menuIsClosed,
652
+ 'cds--list-box--invalid': invalid
653
+ }"
654
+ [attr.data-invalid]="invalid ? true : null">
655
+ <div *ngIf="skeleton && fluid" class="cds--list-box__label"></div>
635
656
  <button
636
657
  #dropdownButton
637
658
  [id]="id"
@@ -643,7 +664,8 @@ Dropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
643
664
  [attr.aria-readonly]="readonly"
644
665
  aria-haspopup="listbox"
645
666
  (click)="disabled || readonly ? $event.stopPropagation() : toggleMenu()"
646
- (blur)="onBlur()"
667
+ (focus)="fluid ? handleFocus($event) : null"
668
+ (blur)="fluid ? handleFocus($event) : onBlur()"
647
669
  [attr.disabled]="disabled ? true : null">
648
670
  <div
649
671
  (click)="clearSelected()"
@@ -672,18 +694,6 @@ Dropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
672
694
  [ngTemplateOutletContext]="getRenderTemplateContext()"
673
695
  [ngTemplateOutlet]="displayValue">
674
696
  </ng-template>
675
- <svg
676
- *ngIf="invalid"
677
- class="cds--dropdown__invalid-icon"
678
- cdsIcon="warning--filled"
679
- size="16">
680
- </svg>
681
- <svg
682
- *ngIf="!invalid && warn"
683
- cdsIcon="warning--alt--filled"
684
- size="16"
685
- class="cds--list-box__invalid-icon cds--list-box__invalid-icon--warning">
686
- </svg>
687
697
  <span class="cds--list-box__menu-icon">
688
698
  <svg
689
699
  *ngIf="!skeleton"
@@ -694,6 +704,18 @@ Dropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
694
704
  </svg>
695
705
  </span>
696
706
  </button>
707
+ <svg
708
+ *ngIf="invalid"
709
+ class="cds--list-box__invalid-icon"
710
+ cdsIcon="warning--filled"
711
+ size="16">
712
+ </svg>
713
+ <svg
714
+ *ngIf="!invalid && warn"
715
+ cdsIcon="warning--alt--filled"
716
+ size="16"
717
+ class="cds--list-box__invalid-icon cds--list-box__invalid-icon--warning">
718
+ </svg>
697
719
  <div
698
720
  #dropdownMenu
699
721
  [ngClass]="{
@@ -702,8 +724,9 @@ Dropdown.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
702
724
  <ng-content *ngIf="!menuIsClosed"></ng-content>
703
725
  </div>
704
726
  </div>
727
+ <hr *ngIf="fluid" class="cds--list-box__divider" />
705
728
  <div
706
- *ngIf="helperText && !invalid && !warn && !skeleton"
729
+ *ngIf="helperText && !invalid && !warn && !skeleton && !fluid"
707
730
  class="cds--form__helper-text"
708
731
  [ngClass]="{
709
732
  'cds--form__helper-text--disabled': disabled
@@ -739,7 +762,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
739
762
  <div
740
763
  class="cds--list-box"
741
764
  [ngClass]="{
742
- 'cds--dropdown': type !== 'multi',
765
+ 'cds--dropdown': type !== 'multi' && !(skeleton && fluid),
743
766
  'cds--multiselect': type === 'multi',
744
767
  'cds--multi-select--selected': type === 'multi' && getSelectedCount() > 0,
745
768
  'cds--dropdown--light': theme === 'light',
@@ -753,8 +776,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
753
776
  'cds--dropdown--sm cds--list-box--sm': size === 'sm',
754
777
  'cds--dropdown--md cds--list-box--md': size === 'md',
755
778
  'cds--dropdown--lg cds--list-box--lg': size === 'lg',
756
- 'cds--list-box--expanded': !menuIsClosed
757
- }">
779
+ 'cds--list-box--expanded': !menuIsClosed,
780
+ 'cds--list-box--invalid': invalid
781
+ }"
782
+ [attr.data-invalid]="invalid ? true : null">
783
+ <div *ngIf="skeleton && fluid" class="cds--list-box__label"></div>
758
784
  <button
759
785
  #dropdownButton
760
786
  [id]="id"
@@ -766,7 +792,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
766
792
  [attr.aria-readonly]="readonly"
767
793
  aria-haspopup="listbox"
768
794
  (click)="disabled || readonly ? $event.stopPropagation() : toggleMenu()"
769
- (blur)="onBlur()"
795
+ (focus)="fluid ? handleFocus($event) : null"
796
+ (blur)="fluid ? handleFocus($event) : onBlur()"
770
797
  [attr.disabled]="disabled ? true : null">
771
798
  <div
772
799
  (click)="clearSelected()"
@@ -795,18 +822,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
795
822
  [ngTemplateOutletContext]="getRenderTemplateContext()"
796
823
  [ngTemplateOutlet]="displayValue">
797
824
  </ng-template>
798
- <svg
799
- *ngIf="invalid"
800
- class="cds--dropdown__invalid-icon"
801
- cdsIcon="warning--filled"
802
- size="16">
803
- </svg>
804
- <svg
805
- *ngIf="!invalid && warn"
806
- cdsIcon="warning--alt--filled"
807
- size="16"
808
- class="cds--list-box__invalid-icon cds--list-box__invalid-icon--warning">
809
- </svg>
810
825
  <span class="cds--list-box__menu-icon">
811
826
  <svg
812
827
  *ngIf="!skeleton"
@@ -817,6 +832,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
817
832
  </svg>
818
833
  </span>
819
834
  </button>
835
+ <svg
836
+ *ngIf="invalid"
837
+ class="cds--list-box__invalid-icon"
838
+ cdsIcon="warning--filled"
839
+ size="16">
840
+ </svg>
841
+ <svg
842
+ *ngIf="!invalid && warn"
843
+ cdsIcon="warning--alt--filled"
844
+ size="16"
845
+ class="cds--list-box__invalid-icon cds--list-box__invalid-icon--warning">
846
+ </svg>
820
847
  <div
821
848
  #dropdownMenu
822
849
  [ngClass]="{
@@ -825,8 +852,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
825
852
  <ng-content *ngIf="!menuIsClosed"></ng-content>
826
853
  </div>
827
854
  </div>
855
+ <hr *ngIf="fluid" class="cds--list-box__divider" />
828
856
  <div
829
- *ngIf="helperText && !invalid && !warn && !skeleton"
857
+ *ngIf="helperText && !invalid && !warn && !skeleton && !fluid"
830
858
  class="cds--form__helper-text"
831
859
  [ngClass]="{
832
860
  'cds--form__helper-text--disabled': disabled
@@ -851,7 +879,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
851
879
  }
852
880
  ]
853
881
  }]
854
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.I18n }, { type: i2.DropdownService }, { type: i3.ElementService }]; }, propDecorators: { id: [{
882
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.I18n }, { type: i2.DropdownService }, { type: i3.ElementService }]; }, propDecorators: { fluidInvalidClass: [{
883
+ type: HostBinding,
884
+ args: ["class.cds--list-box__wrapper--fluid--invalid"]
885
+ }], fluidFocusClass: [{
886
+ type: HostBinding,
887
+ args: ["class.cds--list-box__wrapper--fluid--focus"]
888
+ }], id: [{
855
889
  type: Input
856
890
  }], label: [{
857
891
  type: Input
@@ -921,8 +955,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
921
955
  }], hostClass: [{
922
956
  type: HostBinding,
923
957
  args: ["class.cds--dropdown__wrapper"]
958
+ }], hostWrapperClass: [{
959
+ type: HostBinding,
960
+ args: ["class.cds--list-box__wrapper"]
961
+ }], fluid: [{
962
+ type: HostBinding,
963
+ args: ["class.cds--list-box__wrapper--fluid"]
964
+ }, {
965
+ type: Input
924
966
  }], onKeyDown: [{
925
967
  type: HostListener,
926
968
  args: ["keydown", ["$event"]]
927
969
  }] } });
928
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLFlBQVksRUFFWixTQUFTLEVBRVQsWUFBWSxFQUVaLFdBQVcsRUFDWCxXQUFXLEVBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBRXpFLHlFQUF5RTtBQUN6RSxPQUFPLEVBRU4sRUFBRSxFQUNGLFlBQVksRUFDWixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSXRFLE9BQU8sRUFBa0Isb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7OztBQUV2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBa0lILE1BQU0sT0FBTyxRQUFRO0lBMktwQjs7T0FFRztJQUNILFlBQ1csVUFBc0IsRUFDdEIsSUFBVSxFQUNWLGVBQWdDLEVBQ2hDLGNBQThCO1FBSDlCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsU0FBSSxHQUFKLElBQUksQ0FBTTtRQUNWLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFoTGhDLE9BQUUsR0FBRyxZQUFZLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBS3JEOztXQUVHO1FBQ00sY0FBUyxHQUFHLEtBQUssQ0FBQztRQUszQjs7V0FFRztRQUNNLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQzFCOztXQUVHO1FBQ00saUJBQVksR0FBOEIsRUFBRSxDQUFD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QjtzQkFBeEIsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUcsV0FBVztzQkFBbkIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQU9HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUtHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBSUcsTUFBTTtzQkFBZCxLQUFLO2dCQUlJLFFBQVE7c0JBQWpCLE1BQU07Z0JBSUcsT0FBTztzQkFBaEIsTUFBTTtnQkFJRyxLQUFLO3NCQUFkLE1BQU07Z0JBSytDLElBQUk7c0JBQXpELFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlMLGNBQWM7c0JBQTVELFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlBLFlBQVk7c0JBQXhELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFRSxTQUFTO3NCQUFyRCxXQUFXO3VCQUFDLDhCQUE4QjtnQkF5TTNDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlcixcblx0RWxlbWVudFJlZixcblx0Q29udGVudENoaWxkLFxuXHRPbkluaXQsXG5cdFZpZXdDaGlsZCxcblx0QWZ0ZXJDb250ZW50SW5pdCxcblx0SG9zdExpc3RlbmVyLFxuXHRPbkRlc3Ryb3ksXG5cdEhvc3RCaW5kaW5nLFxuXHRUZW1wbGF0ZVJlZixcblx0QWZ0ZXJWaWV3SW5pdFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbi8vIE9ic2VydmFibGUgaW1wb3J0IGlzIHJlcXVpcmVkIGhlcmUgc28gdHlwZXNjcmlwdCBjYW4gY29tcGlsZSBjb3JyZWN0bHlcbmltcG9ydCB7XG5cdE9ic2VydmFibGUsXG5cdG9mLFxuXHRTdWJzY3JpcHRpb25cbn0gZnJvbSBcInJ4anNcIjtcblxuaW1wb3J0IHsgQWJzdHJhY3REcm9wZG93blZpZXcgfSBmcm9tIFwiLi9hYnN0cmFjdC1kcm9wZG93bi12aWV3LmNsYXNzXCI7XG5pbXBvcnQgeyBJMThuIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvaTE4blwiO1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tIFwiLi9saXN0LWl0ZW0uaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEcm9wZG93blNlcnZpY2UgfSBmcm9tIFwiLi9kcm9wZG93bi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBFbGVtZW50U2VydmljZSwgZ2V0U2Nyb2xsYWJsZVBhcmVudHMgfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci91dGlsc1wiO1xuaW1wb3J0IHsgaGFzU2Nyb2xsYWJsZVBhcmVudHMgfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci91dGlsc1wiO1xuXG4vKipcbiAqIERyb3AtZG93biBsaXN0cyBlbmFibGUgdXNlcnMgdG8gc2VsZWN0IG9uZSBvciBtb3JlIGl0ZW1zIGZyb20gYSBsaXN0LlxuICpcbiAqICMjIyMgT3BlbmluZyBiZWhhdmlvci9MaXN0IERPTSBwbGFjZW1lbnRcbiAqIEJ5IGRlZmF1bHQgdGhlIGRyb3Bkb3duIHdpbGwgdHJ5IHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgcGxhY2VtZW50IGZvciB0aGUgZHJvcGRvd24gbGlzdC5cbiAqXG4gKiBJZiBpdCdzIG5vdCBjb250YWluZWQgd2l0aGluIGFueSBzY3JvbGxpbmcgZWxlbWVudHMsIGl0IHdpbGwgb3BlbiBpbmxpbmUsIGlmIGl0IF9pc19cbiAqIGNvbnRhaW5lZCB3aXRoaW4gYSBzY3JvbGxpbmcgY29udGFpbmVyIGl0IHdpbGwgdHJ5IHRvIG9wZW4gaW4gdGhlIGJvZHksIG9yIGFuIGBjZHMtcGxhY2Vob2xkZXJgLlxuICpcbiAqIFRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvciB5b3UgY2FuIHVzZSB0aGUgYGFwcGVuZElubGluZWAgaW5wdXQ6XG4gKiAtIGBbYXBwZW5kSW5saW5lXT1cIm51bGxcImAgaXMgdGhlIGRlZmF1bHQgKGF1dG8gZGV0ZWN0aW9uKVxuICogLSBgW2FwcGVuZElubGluZV09XCJmYWxzZVwiYCB3aWxsIGFsd2F5cyBhcHBlbmQgdG8gdGhlIGJvZHkvYGNkcy1wbGFjZWhvbGRlcmBcbiAqIC0gYFthcHBlbmRJbmxpbmVdPVwidHJ1ZVwiYCB3aWxsIGFsd2F5cyBhcHBlbmQgaW5saW5lIChuZXh0IHRvIHRoZSBkcm9wZG93biBidXR0b24pXG4gKlxuICogR2V0IHN0YXJ0ZWQgd2l0aCBpbXBvcnRpbmcgdGhlIG1vZHVsZTpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuICogYGBgXG4gKlxuICogW1NlZSBkZW1vXSguLi8uLi8/cGF0aD0vc3RvcnkvY29tcG9uZW50cy1kcm9wZG93bi0tYmFzaWMpXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtZHJvcGRvd24sIGlibS1kcm9wZG93blwiLFxuXHR0ZW1wbGF0ZTogYFxuXHQ8bGFiZWxcblx0XHQqbmdJZj1cImxhYmVsICYmICFza2VsZXRvblwiXG5cdFx0W2Zvcl09XCJpZFwiXG5cdFx0Y2xhc3M9XCJjZHMtLWxhYmVsXCJcblx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHQnY2RzLS1sYWJlbC0tZGlzYWJsZWQnOiBkaXNhYmxlZCxcblx0XHRcdCdjZHMtLXZpc3VhbGx5LWhpZGRlbic6IGhpZGVMYWJlbFxuXHRcdH1cIj5cblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUobGFiZWwpXCI+e3tsYWJlbH19PC9uZy1jb250YWluZXI+XG5cdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShsYWJlbClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFwiPjwvbmctdGVtcGxhdGU+XG5cdDwvbGFiZWw+XG5cdDxkaXZcblx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hcIlxuXHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdCdjZHMtLWRyb3Bkb3duJzogdHlwZSAhPT0gJ211bHRpJyxcblx0XHRcdCdjZHMtLW11bHRpc2VsZWN0JzogdHlwZSA9PT0gJ211bHRpJyxcblx0XHRcdCdjZHMtLW11bHRpLXNlbGVjdC0tc2VsZWN0ZWQnOiB0eXBlID09PSAnbXVsdGknICYmIGdldFNlbGVjdGVkQ291bnQoKSA+IDAsXG5cdFx0XHQnY2RzLS1kcm9wZG93bi0tbGlnaHQnOiB0aGVtZSA9PT0gJ2xpZ2h0Jyxcblx0XHRcdCdjZHMtLWxpc3QtYm94LS1saWdodCc6IHRoZW1lID09PSAnbGlnaHQnLFxuXHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWlubGluZSc6IGlubGluZSxcblx0XHRcdCdjZHMtLXNrZWxldG9uJzogc2tlbGV0b24sXG5cdFx0XHQnY2RzLS1kcm9wZG93bi0tZGlzYWJsZWQgY2RzLS1saXN0LWJveC0tZGlzYWJsZWQnOiBkaXNhYmxlZCxcblx0XHRcdCdjZHMtLWRyb3Bkb3duLS1yZWFkb25seSc6IHJlYWRvbmx5LFxuXHRcdFx0J2Nkcy0tZHJvcGRvd24tLWludmFsaWQnOiBpbnZhbGlkLFxuXHRcdFx0J2Nkcy0tZHJvcGRvd24tLXdhcm5pbmcgY2RzLS1saXN0LWJveC0td2FybmluZyc6IHdhcm4sXG5cdFx0XHQnY2RzLS1kcm9wZG93bi0tc20gY2RzLS1saXN0LWJveC0tc20nOiBzaXplID09PSAnc20nLFxuXHRcdFx0J2Nkcy0tZHJvcGRvd24tLW1kIGNkcy0tbGlzdC1ib3gtLW1kJzogc2l6ZSA9PT0gJ21kJyxcblx0XHRcdCdjZHMtLWRyb3Bkb3duLS1sZyBjZHMtLWxpc3QtYm94LS1sZyc6IHNpemUgPT09ICdsZycsXG5cdFx0XHQnY2RzLS1saXN0LWJveC0tZXhwYW5kZWQnOiAhbWVudUlzQ2xvc2VkXG5cdFx0fVwiPlxuXHRcdDxidXR0b25cblx0XHRcdCNkcm9wZG93bkJ1dHRvblxuXHRcdFx0W2lkXT1cImlkXCJcblx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19maWVsZFwiXG5cdFx0XHRbbmdDbGFzc109XCJ7J2EnOiAhbWVudUlzQ2xvc2VkfVwiXG5cdFx0XHRbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiFtZW51SXNDbG9zZWRcIlxuXHRcdFx0W2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG5cdFx0XHRbYXR0ci5hcmlhLXJlYWRvbmx5XT1cInJlYWRvbmx5XCJcblx0XHRcdGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcblx0XHRcdChjbGljayk9XCJkaXNhYmxlZCB8fCByZWFkb25seSA/ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKSA6IHRvZ2dsZU1lbnUoKVwiXG5cdFx0XHQoYmx1cik9XCJvbkJsdXIoKVwiXG5cdFx0XHRbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/IHRydWUgOiBudWxsXCI+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdChjbGljayk9XCJjbGVhclNlbGVjdGVkKClcIlxuXHRcdFx0XHQoa2V5ZG93bi5lbnRlcik9XCJjbGVhclNlbGVjdGVkKClcIlxuXHRcdFx0XHQqbmdJZj1cInR5cGUgPT09ICdtdWx0aScgJiYgZ2V0U2VsZWN0ZWRDb3VudCgpID4gMFwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9fc2VsZWN0aW9uIGNkcy0tdGFnLS1maWx0ZXIgY2RzLS1saXN0LWJveF9fc2VsZWN0aW9uLS1tdWx0aVwiXG5cdFx0XHRcdHRhYmluZGV4PVwiMFwiXG5cdFx0XHRcdFt0aXRsZV09XCJjbGVhclRleHRcIj5cblx0XHRcdFx0e3tnZXRTZWxlY3RlZENvdW50KCl9fVxuXHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0Zm9jdXNhYmxlPVwiZmFsc2VcIlxuXHRcdFx0XHRcdHByZXNlcnZlQXNwZWN0UmF0aW89XCJ4TWlkWU1pZCBtZWV0XCJcblx0XHRcdFx0XHRzdHlsZT1cIndpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XCJcblx0XHRcdFx0XHRyb2xlPVwiaW1nXCJcblx0XHRcdFx0XHR4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcblx0XHRcdFx0XHR3aWR0aD1cIjE2XCJcblx0XHRcdFx0XHRoZWlnaHQ9XCIxNlwiXG5cdFx0XHRcdFx0dmlld0JveD1cIjAgMCAxNiAxNlwiXG5cdFx0XHRcdFx0YXJpYS1oaWRkZW49XCJ0cnVlXCI+XG5cdFx0XHRcdFx0PHBhdGggZD1cIk0xMiA0LjdsLS43LS43TDggNy4zIDQuNyA0bC0uNy43TDcuMyA4IDQgMTEuM2wuNy43TDggOC43bDMuMyAzLjMuNy0uN0w4LjcgOHpcIj48L3BhdGg+XG5cdFx0XHRcdDwvc3ZnPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8c3BhbiAqbmdJZj1cImlzUmVuZGVyU3RyaW5nKClcIiBjbGFzcz1cImNkcy0tbGlzdC1ib3hfX2xhYmVsXCI+e3tnZXREaXNwbGF5U3RyaW5nVmFsdWUoKSB8IGFzeW5jfX08L3NwYW4+XG5cdFx0XHQ8bmctdGVtcGxhdGVcblx0XHRcdFx0Km5nSWY9XCIhaXNSZW5kZXJTdHJpbmcoKVwiXG5cdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRSZW5kZXJUZW1wbGF0ZUNvbnRleHQoKVwiXG5cdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRpc3BsYXlWYWx1ZVwiPlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDxzdmdcblx0XHRcdFx0Km5nSWY9XCJpbnZhbGlkXCJcblx0XHRcdFx0Y2xhc3M9XCJjZHMtLWRyb3Bkb3duX19pbnZhbGlkLWljb25cIlxuXHRcdFx0XHRjZHNJY29uPVwid2FybmluZy0tZmlsbGVkXCJcblx0XHRcdFx0c2l6ZT1cIjE2XCI+XG5cdFx0XHQ8L3N2Zz5cblx0XHRcdDxzdmdcblx0XHRcdFx0Km5nSWY9XCIhaW52YWxpZCAmJiB3YXJuXCJcblx0XHRcdFx0Y2RzSWNvbj1cIndhcm5pbmctLWFsdC0tZmlsbGVkXCJcblx0XHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19pbnZhbGlkLWljb24gY2RzLS1saXN0LWJveF9faW52YWxpZC1pY29uLS13YXJuaW5nXCI+XG5cdFx0XHQ8L3N2Zz5cblx0XHRcdDxzcGFuIGNsYXNzPVwiY2RzLS1saXN0LWJveF9fbWVudS1pY29uXCI+XG5cdFx0XHRcdDxzdmdcblx0XHRcdFx0XHQqbmdJZj1cIiFza2VsZXRvblwiXG5cdFx0XHRcdFx0Y2RzSWNvbj1cImNoZXZyb24tLWRvd25cIlxuXHRcdFx0XHRcdHNpemU9XCIxNlwiXG5cdFx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJtZW51QnV0dG9uTGFiZWxcIlxuXHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1saXN0LWJveF9fbWVudS1pY29uLS1vcGVuJzogIW1lbnVJc0Nsb3NlZCB9XCI+XG5cdFx0XHRcdDwvc3ZnPlxuXHRcdFx0PC9zcGFuPlxuXHRcdDwvYnV0dG9uPlxuXHRcdDxkaXZcblx0XHRcdCNkcm9wZG93bk1lbnVcblx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLXVwJzogdGhpcy5kcm9wVXAgIT09IG51bGwgJiYgdGhpcy5kcm9wVXAgIT09IHVuZGVmaW5lZCA/IGRyb3BVcCA6IF9kcm9wVXBcblx0XHRcdH1cIj5cblx0XHRcdDxuZy1jb250ZW50ICpuZ0lmPVwiIW1lbnVJc0Nsb3NlZFwiPjwvbmctY29udGVudD5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cdDxkaXZcblx0XHQqbmdJZj1cImhlbHBlclRleHQgJiYgIWludmFsaWQgJiYgIXdhcm4gJiYgIXNrZWxldG9uXCJcblx0XHRjbGFzcz1cImNkcy0tZm9ybV9faGVscGVyLXRleHRcIlxuXHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdCdjZHMtLWZvcm1fX2hlbHBlci10ZXh0LS1kaXNhYmxlZCc6IGRpc2FibGVkXG5cdFx0fVwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShoZWxwZXJUZXh0KVwiPnt7aGVscGVyVGV4dH19PC9uZy1jb250YWluZXI+XG5cdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShoZWxwZXJUZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlbHBlclRleHRcIj48L25nLXRlbXBsYXRlPlxuXHQ8L2Rpdj5cblx0PGRpdiAqbmdJZj1cImludmFsaWRcIiBjbGFzcz1cImNkcy0tZm9ybS1yZXF1aXJlbWVudFwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShpbnZhbGlkVGV4dClcIj57eyBpbnZhbGlkVGV4dCB9fTwvbmctY29udGFpbmVyPlxuXHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUoaW52YWxpZFRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW52YWxpZFRleHRcIj48L25nLXRlbXBsYXRlPlxuXHQ8L2Rpdj5cblx0PGRpdiAqbmdJZj1cIiFpbnZhbGlkICYmIHdhcm5cIiBjbGFzcz1cImNkcy0tZm9ybS1yZXF1aXJlbWVudFwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZSh3YXJuVGV4dClcIj57e3dhcm5UZXh0fX08L25nLWNvbnRhaW5lcj5cblx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKHdhcm5UZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIndhcm5UZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0PC9kaXY+XG5cdGAsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IERyb3Bkb3duLFxuXHRcdFx0bXVsdGk6IHRydWVcblx0XHR9XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd24gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXHRzdGF0aWMgZHJvcGRvd25Db3VudCA9IDA7XG5cdEBJbnB1dCgpIGlkID0gYGRyb3Bkb3duLSR7RHJvcGRvd24uZHJvcGRvd25Db3VudCsrfWA7XG5cdC8qKlxuXHQgKiBMYWJlbCBmb3IgdGhlIGRyb3Bkb3duLlxuXHQgKi9cblx0QElucHV0KCkgbGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBIaWRlIGxhYmVsIHdoaWxlIGtlZXBpbmcgaXQgYWNjZXNzaWJsZSBmb3Igc2NyZWVuIHJlYWRlcnNcblx0ICovXG5cdEBJbnB1dCgpIGhpZGVMYWJlbCA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0cyB0aGUgb3B0aW9uYWwgaGVscGVyIHRleHQuXG5cdCAqL1xuXHRASW5wdXQoKSBoZWxwZXJUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogVmFsdWUgZGlzcGxheWVkIGlmIG5vIGl0ZW0gaXMgc2VsZWN0ZWQuXG5cdCAqL1xuXHRASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XG5cdC8qKlxuXHQgKiBUaGUgc2VsZWN0ZWQgdmFsdWUgZnJvbSB0aGUgYERyb3Bkb3duYC4gQ2FuIGJlIGEgc3RyaW5nIG9yIHRlbXBsYXRlLlxuXHQgKi9cblx0QElucHV0KCkgZGlzcGxheVZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gXCJcIjtcblx0LyoqXG5cdCAqIFNldHMgdGhlIG9wdGlvbmFsIGNsZWFyIGJ1dHRvbiB0b29sdGlwIHRleHQuXG5cdCAqL1xuXHRASW5wdXQoKSBjbGVhclRleHQ6IHN0cmluZyA9IHRoaXMuaTE4bi5nZXQoKS5EUk9QRE9XTi5DTEVBUjtcblx0LyoqXG5cdCAqIFNpemUgdG8gcmVuZGVyIHRoZSBkcm9wZG93biBmaWVsZC5cblx0ICovXG5cdEBJbnB1dCgpIHNpemU6IFwic21cIiB8IFwibWRcIiB8IFwibGdcIiA9IFwibWRcIjtcblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciBvciBub3QgdGhlIGBEcm9wZG93bmAgc3VwcG9ydHMgc2VsZWN0aW5nIG11bHRpcGxlIGl0ZW1zIGFzIG9wcG9zZWQgdG8gc2luZ2xlXG5cdCAqIGl0ZW0gc2VsZWN0aW9uLlxuXHQgKi9cblx0QElucHV0KCkgdHlwZTogXCJzaW5nbGVcIiB8IFwibXVsdGlcIiA9IFwic2luZ2xlXCI7XG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2NSAtIFVzZSBgY2RzTGF5ZXJgIGRpcmVjdGl2ZSBpbnN0ZWFkXG5cdCAqIGBsaWdodGAgb3IgYGRhcmtgIGRyb3Bkb3duIHRoZW1lXG5cdCAqL1xuXHRASW5wdXQoKSB0aGVtZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgPSBcImRhcmtcIjtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gZGlzYWJsZSB0aGUgZHJvcGRvd24uXG5cdCAqL1xuXHRASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgYSByZWFkb25seSBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciBhIGxvYWRpbmcgZHJvcGRvd24uXG5cdCAqL1xuXHRASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgYW4gaW5saW5lIGRyb3Bkb3duLlxuXHQgKi9cblx0QElucHV0KCkgaW5saW5lID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciBhIGRyb3Bkb3duIHdpdGhvdXQgYXJyb3cga2V5IGFjdGl2YXRpb24uXG5cdCAqL1xuXHRASW5wdXQoKSBkaXNhYmxlQXJyb3dLZXlzID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuXHQvKipcblx0ICogVmFsdWUgZGlzcGxheWVkIGlmIGRyb3Bkb3duIGlzIGluIGludmFsaWQgc3RhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSBpbnZhbGlkVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAgKiBTZXQgdG8gYHRydWVgIHRvIHNob3cgYSB3YXJuaW5nIChjb250ZW50cyBzZXQgYnkgd2FybmluZ1RleHQpXG5cdCAgKi9cblx0QElucHV0KCkgd2FybiA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0cyB0aGUgd2FybmluZyB0ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSB3YXJuVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAqIHNldCB0byBgdHJ1ZWAgdG8gcGxhY2UgdGhlIGRyb3Bkb3duIHZpZXcgaW5saW5lIHdpdGggdGhlIGNvbXBvbmVudFxuXHQgKi9cblx0QElucHV0KCkgYXBwZW5kSW5saW5lOiBib29sZWFuID0gbnVsbDtcblx0LyoqXG5cdCAqIFF1ZXJ5IHN0cmluZyBmb3IgdGhlIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgYERyb3Bkb3duYC5cblx0ICogVXNlZCB0byB0cmlnZ2VyIGNsb3NpbmcgdGhlIGRyb3Bkb3duIGlmIGl0IHNjcm9sbHMgb3V0c2lkZSBvZiB0aGUgdmlld3BvcnQgb2YgdGhlIGBzY3JvbGxhYmxlQ29udGFpbmVyYC5cblx0ICovXG5cdEBJbnB1dCgpIHNjcm9sbGFibGVDb250YWluZXI6IHN0cmluZztcblx0LyoqXG5cdCAqIFNwZWNpZmllcyB0aGUgcHJvcGVydHkgdG8gYmUgdXNlZCBhcyB0aGUgcmV0dXJuIHZhbHVlIHRvIGBuZ01vZGVsYFxuXHQgKi9cblx0QElucHV0KCkgaXRlbVZhbHVlS2V5OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBTcGVjaWZ5IGZlZWRiYWNrIChtb2RlKSBvZiB0aGUgc2VsZWN0aW9uLlxuXHQgKiBgdG9wYDogc2VsZWN0ZWQgaXRlbSBqdW1wcyB0byB0b3Bcblx0ICogYGZpeGVkYDogc2VsZWN0ZWQgaXRlbSBzdGF5cyBhdCBpdCdzIHBvc2l0aW9uXG5cdCAqIGB0b3AtYWZ0ZXItcmVvcGVuYDogc2VsZWN0ZWQgaXRlbSBqdW1wIHRvIHRvcCBhZnRlciByZW9wZW4gZHJvcGRvd25cblx0ICovXG5cdEBJbnB1dCgpIHNlbGVjdGlvbkZlZWRiYWNrOiBcInRvcFwiIHwgXCJmaXhlZFwiIHwgXCJ0b3AtYWZ0ZXItcmVvcGVuXCIgPSBcInRvcC1hZnRlci1yZW9wZW5cIjtcblx0LyoqXG5cdCAqIEFjY2Vzc2libGUgbGFiZWwgZm9yIHRoZSBidXR0b24gdGhhdCBvcGVucyB0aGUgZHJvcGRvd24gbGlzdC5cblx0ICogRGVmYXVsdHMgdG8gdGhlIGBEUk9QRE9XTi5PUEVOYCB2YWx1ZSBmcm9tIHRoZSBpMThuIHNlcnZpY2UuXG5cdCAqL1xuXHRASW5wdXQoKSBtZW51QnV0dG9uTGFiZWwgPSB0aGlzLmkxOG4uZ2V0KCkuRFJPUERPV04uT1BFTjtcblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBsYWJlbCBmb3IgdGhlIFwiIyBzZWxlY3RlZFwiIHRleHQuXG5cdCAqIERlZmF1bHRzIHRvIHRoZSBgRFJPUERPV04uU0VMRUNURURgIHZhbHVlIGZyb20gdGhlIGkxOG4gc2VydmljZS5cblx0ICovXG5cdEBJbnB1dCgpIHNlbGVjdGVkTGFiZWwgPSB0aGlzLmkxOG4uZ2V0KCkuRFJPUERPV04uU0VMRUNURUQ7XG5cdC8qKlxuXHQgKiBPdmVycmlkZXMgdGhlIGF1dG9tYXRpYyBkcm9wVXAuXG5cdCAqL1xuXHRASW5wdXQoKSBkcm9wVXA6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBFbWl0cyBzZWxlY3Rpb24gZXZlbnRzLlxuXHQgKi9cblx0QE91dHB1dCgpIHNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8T2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8T2JqZWN0PigpO1xuXHQvKipcblx0ICogRW1pdHMgZXZlbnQgbm90aWZ5aW5nIHRvIG90aGVyIGNsYXNzZXMgdGhhdCB0aGUgYERyb3Bkb3duYCBoYXMgYmVlbiBjbG9zZWQgKGNvbGxhcHNlZCkuXG5cdCAqL1xuXHRAT3V0cHV0KCkgb25DbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblx0LyoqXG5cdCAqIEVtaXRzIGV2ZW50IG5vdGlmeWluZyB0byBvdGhlciBjbGFzc2VzIHRoYXQgdGhlIGBEcm9wZG93bmAgaGFzIGJlZW4gY2xvc2VkIChjb2xsYXBzZWQpLlxuXHQgKi9cblx0QE91dHB1dCgpIGNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG5cdC8qKlxuXHQgKiBNYWludGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGBBYnN0cmFjdERyb3Bkb3duVmlld2Agb2JqZWN0IHdpdGhpbiB0aGUgY29udGVudCBET00uXG5cdCAqL1xuXHRAQ29udGVudENoaWxkKEFic3RyYWN0RHJvcGRvd25WaWV3LCB7IHN0YXRpYzogdHJ1ZSB9KSB2aWV3OiBBYnN0cmFjdERyb3Bkb3duVmlldztcblx0LyoqXG5cdCAqIE1haW50YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmlldyBET00gZWxlbWVudCBvZiB0aGUgYERyb3Bkb3duYCBidXR0b24uXG5cdCAqL1xuXHRAVmlld0NoaWxkKFwiZHJvcGRvd25CdXR0b25cIiwgeyBzdGF0aWM6IHRydWUgfSkgZHJvcGRvd25CdXR0b247XG5cdC8qKlxuXHQgKiBWaWV3Q2hpZCBvZiB0aGUgZHJvcGRvd24gdmlldy5cblx0ICovXG5cdEBWaWV3Q2hpbGQoXCJkcm9wZG93bk1lbnVcIiwgeyBzdGF0aWM6IHRydWUgfSkgZHJvcGRvd25NZW51O1xuXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tZHJvcGRvd25fX3dyYXBwZXJcIikgaG9zdENsYXNzID0gdHJ1ZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgaWYgdGhlIGRyb3Bkb3duIGlzIGNsb3NlZCAobm90IGV4cGFuZGVkKS5cblx0ICovXG5cdG1lbnVJc0Nsb3NlZCA9IHRydWU7XG5cblx0LyoqXG5cdCAqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGBkcm9wLXVwYCBjbGFzcyBpcyBhcHBsaWVkXG5cdCAqL1xuXHRfZHJvcFVwID0gZmFsc2U7XG5cblx0Ly8gLmJpbmQgY3JlYXRlcyBhIG5ldyBmdW5jdGlvbiwgc28gd2UgZGVjbGFyZSB0aGUgbWV0aG9kcyBiZWxvd1xuXHQvLyBidXQgLmJpbmQgdGhlbSB1cCBoZXJlXG5cdG5vb3AgPSB0aGlzLl9ub29wLmJpbmQodGhpcyk7XG5cdG91dHNpZGVDbGljayA9IHRoaXMuX291dHNpZGVDbGljay5iaW5kKHRoaXMpO1xuXHRvdXRzaWRlS2V5ID0gdGhpcy5fb3V0c2lkZUtleS5iaW5kKHRoaXMpO1xuXHRrZXlib2FyZE5hdiA9IHRoaXMuX2tleWJvYXJkTmF2LmJpbmQodGhpcyk7XG5cblx0cHJvdGVjdGVkIHZpc2liaWxpdHlTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cblx0cHJvdGVjdGVkIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gdGhpcy5fbm9vcDtcblxuXHQvLyBwcmltYXJpbHkgdXNlZCB0byBjYXB0dXJlIGFuZCBwcm9wYWdhdGUgaW5wdXQgdG8gYHdyaXRlVmFsdWVgIGJlZm9yZSB0aGUgY29udGVudCBpcyBhdmFpbGFibGVcblx0cHJpdmF0ZSBfd3JpdHRlblZhbHVlOiBhbnkgPSBbXTtcblx0cHJvdGVjdGVkIGdldCB3cml0dGVuVmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3dyaXR0ZW5WYWx1ZTtcblx0fVxuXHRwcm90ZWN0ZWQgc2V0IHdyaXR0ZW5WYWx1ZSh2YWw6IGFueVtdKSB7XG5cdFx0aWYgKHZhbCAmJiB2YWwubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLmNsZWFyU2VsZWN0ZWQoKTtcblx0XHR9XG5cdFx0dGhpcy5fd3JpdHRlblZhbHVlID0gdmFsO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgRHJvcGRvd24uXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcblx0XHRwcm90ZWN0ZWQgaTE4bjogSTE4bixcblx0XHRwcm90ZWN0ZWQgZHJvcGRvd25TZXJ2aWNlOiBEcm9wZG93blNlcnZpY2UsXG5cdFx0cHJvdGVjdGVkIGVsZW1lbnRTZXJ2aWNlOiBFbGVtZW50U2VydmljZSkge31cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgYHR5cGVgIHByb3BlcnR5IGluIHRoZSBgQENvbnRlbnRDaGlsZGAuXG5cdCAqIFRoZSBgdHlwZWAgcHJvcGVydHkgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGBEcm9wZG93bmAgYWxsb3dzIHNpbmdsZSBzZWxlY3Rpb24gb3IgbXVsdGkgc2VsZWN0aW9uLlxuXHQgKi9cblx0bmdPbkluaXQoKSB7XG5cdFx0aWYgKHRoaXMudmlldykge1xuXHRcdFx0dGhpcy52aWV3LnR5cGUgPSB0aGlzLnR5cGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIGNsYXNzZXMgYW5kIHN1YnNjcmliZXMgdG8gZXZlbnRzIGZvciBzaW5nbGUgb3IgbXVsdGkgc2VsZWN0aW9uLlxuXHQgKi9cblx0bmdBZnRlckNvbnRlbnRJbml0KCkge1xuXHRcdGlmICghdGhpcy52aWV3KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICgodGhpcy53cml0dGVuVmFsdWUgJiYgdGhpcy53cml0dGVuVmFsdWUubGVuZ3RoKSB8fCB0eXBlb2YgdGhpcy53cml0dGVuVmFsdWUgPT09IFwibnVtYmVyXCIpIHtcblx0XHRcdHRoaXMud3JpdGVWYWx1ZSh0aGlzLndyaXR0ZW5WYWx1ZSk7XG5cdFx0fVxuXHRcdHRoaXMudmlldy50eXBlID0gdGhpcy50eXBlO1xuXHRcdHRoaXMudmlldy5zaXplID0gdGhpcy5zaXplO1xuXG5cdFx0Ly8gZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGV2ZW50IGlzIG9yZ2FuaWMgKGlzVXBkYXRlID09PSBmYWxzZSkgb3IgcHJvZ3JhbW1hdGljXG5cdFx0Y29uc3QgaXNVcGRhdGUgPSBldmVudCA9PiBldmVudCAmJiBldmVudC5pc1VwZGF0ZTtcblxuXHRcdHRoaXMudmlldy5zZWxlY3Quc3Vic2NyaWJlKGV2ZW50ID0+IHtcblx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwic2luZ2xlXCIgJiYgIWlzVXBkYXRlKGV2ZW50KSAmJiAhQXJyYXkuaXNBcnJheShldmVudCkpIHtcblx0XHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHRcdFx0aWYgKGV2ZW50Lml0ZW0gJiYgZXZlbnQuaXRlbS5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdGlmICh0aGlzLml0ZW1WYWx1ZUtleSkge1xuXHRcdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UoZXZlbnQuaXRlbVt0aGlzLml0ZW1WYWx1ZUtleV0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZShldmVudC5pdGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UobnVsbCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiICYmICFpc1VwZGF0ZShldmVudCkpIHtcblx0XHRcdFx0Ly8gaWYgd2UgaGF2ZSBhIGB2YWx1ZWAgc2VsZWN0b3IgYW5kIHNlbGVjdGVkIGl0ZW1zIG1hcCB0aGVtIGFwcHJvcHJpYXRlbHlcblx0XHRcdFx0aWYgKHRoaXMuaXRlbVZhbHVlS2V5ICYmIHRoaXMudmlldy5nZXRTZWxlY3RlZCgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVzID0gdGhpcy52aWV3LmdldFNlbGVjdGVkKCkubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLml0ZW1WYWx1ZUtleV0pO1xuXHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKHZhbHVlcyk7XG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIGp1c3QgcGFzcyB1cCB0aGUgdmFsdWVzIGZyb20gYGdldFNlbGVjdGVkYFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmlldy5nZXRTZWxlY3RlZCgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gb25seSBlbWl0IHNlbGVjdGVkIGZvciBcIm9yZ2FuaWNcIiBzZWxlY3Rpb25zXG5cdFx0XHRpZiAoIWlzVXBkYXRlKGV2ZW50KSkge1xuXHRcdFx0XHR0aGlzLmNoZWNrRm9yUmVvcmRlcigpO1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCkge1xuXHRcdC8vIGlmIGFwcGVuZElubGluZSBpcyBkZWZhdWx0IHZhbHVlZCAobnVsbCkgd2Ugc2hvdWxkOlxuXHRcdC8vIDEuIGlmIHRoZXJlIGFyZSBzY3JvbGxhYmxlIHBhcmVudHMgKG5vdCBpbmNsdWRpbmcgYm9keSkgZG9uJ3QgYXBwZW5kIGlubGluZVxuXHRcdC8vICAgIHRoaXMgc2hvdWxkIGFsc28gY292ZXIgdGhlIGNhc2Ugd2hlcmUgdGhlIGRyb3Bkb3duIGlzIGluIGEgbW9kYWxcblx0XHQvLyAgICAod2hlcmUgd2UgX2RvXyB3YW50IHRvIGFwcGVuZCB0byB0aGUgcGxhY2Vob2xkZXIpXG5cdFx0aWYgKHRoaXMuYXBwZW5kSW5saW5lID09PSBudWxsICYmIGhhc1Njcm9sbGFibGVQYXJlbnRzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSkge1xuXHRcdFx0dGhpcy5hcHBlbmRJbmxpbmUgPSBmYWxzZTtcblx0XHRcdC8vIDIuIG90aGVyd2lzZSB3ZSBzaG91bGQgYXBwZW5kIGlubGluZVxuXHRcdH0gZWxzZSBpZiAodGhpcy5hcHBlbmRJbmxpbmUgPT09IG51bGwpIHtcblx0XHRcdHRoaXMuYXBwZW5kSW5saW5lID0gdHJ1ZTtcblx0XHR9XG5cdFx0dGhpcy5jaGVja0ZvclJlb3JkZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmluZyB0aGUgYERyb3Bkb3duYCBmcm9tIHRoZSBib2R5IGlmIGl0IGlzIGFwcGVuZGVkIHRvIHRoZSBib2R5LlxuXHQgKi9cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0aWYgKCF0aGlzLmFwcGVuZElubGluZSkge1xuXHRcdFx0dGhpcy5fYXBwZW5kVG9Ecm9wZG93bigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9wYWdhdGVzIHRoZSBpbmplY3RlZCBgdmFsdWVgLlxuXHQgKi9cblx0d3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG5cdFx0Ly8gY2FjaGUgdGhlIHdyaXR0ZW4gdmFsdWUgc28gd2UgY2FuIHVzZSBpdCBpbiBgQWZ0ZXJDb250ZW50SW5pdGBcblx0XHR0aGlzLndyaXR0ZW5WYWx1ZSA9IHZhbHVlO1xuXHRcdHRoaXMudmlldy5vbkl0ZW1zUmVhZHkoKCkgPT4ge1xuXHRcdFx0Ly8gcHJvcGFnYXRlIG51bGwvZmFsc2V5IGFzIGFuIGFycmF5IChkZXNlbGVjdCBldmVyeXRoaW5nKVxuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQoW3ZhbHVlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gXCJzaW5nbGVcIikge1xuXHRcdFx0XHRpZiAodGhpcy5pdGVtVmFsdWVLZXkpIHtcblx0XHRcdFx0XHQvLyBjbG9uZSB0aGUgc3BlY2lmaWVkIGl0ZW0gYW5kIHVwZGF0ZSBpdHMgc3RhdGVcblx0XHRcdFx0XHRjb25zdCBuZXdWYWx1ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMudmlldy5nZXRMaXN0SXRlbXMoKS5maW5kKGl0ZW0gPT4gaXRlbVt0aGlzLml0ZW1WYWx1ZUtleV0gPT09IHZhbHVlKSk7XG5cdFx0XHRcdFx0bmV3VmFsdWUuc2VsZWN0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMudmlldy5wcm9wYWdhdGVTZWxlY3RlZChbbmV3VmFsdWVdKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBwYXNzIHRoZSBzaW5ndWxhciB2YWx1ZSBhcyBhbiBhcnJheSBvZiBMaXN0SXRlbVxuXHRcdFx0XHRcdHRoaXMudmlldy5wcm9wYWdhdGVTZWxlY3RlZChbdmFsdWVdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHRoaXMuaXRlbVZhbHVlS2V5KSB7XG5cdFx0XHRcdFx0Ly8gY2xvbmUgdGhlIGl0ZW1zIGFuZCB1cGRhdGUgdGhlaXIgc3RhdGUgYmFzZWQgb24gdGhlIHJlY2VpdmVkIHZhbHVlIGFycmF5XG5cdFx0XHRcdFx0Ly8gdGhpcyB3YXkgd2UgZG9uJ3QgbG9zZSBhbnkgYWRkaXRpb25hbCBtZXRhZGF0YSB0aGF0IG1heSBiZSBwYXNzZWQgaW4gdmlhIHRoZSBgaXRlbXNgIElucHV0XG5cdFx0XHRcdFx0bGV0IG5ld1ZhbHVlcyA9IFtdO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgdiBvZiB2YWx1ZSkge1xuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIHRoaXMudmlldy5nZXRMaXN0SXRlbXMoKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbVt0aGlzLml0ZW1WYWx1ZUtleV0gPT09IHYpIHtcblx0XHRcdFx0XHRcdFx0XHRuZXdWYWx1ZXMucHVzaChPYmplY3QuYXNzaWduKHt9LCBpdGVtLCB7IHNlbGVjdGVkOiB0cnVlIH0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQobmV3VmFsdWVzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB3ZSBjYW4gc2FmZWx5IGFzc3VtZSB3ZSdyZSBwYXNzaW5nIGFuIGFycmF5IG9mIGBMaXN0SXRlbWBzXG5cdFx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5jaGVja0ZvclJlb3JkZXIoKTtcblx0XHR9KTtcblx0fVxuXG5cdG9uQmx1cigpIHtcblx0XHR0aGlzLm9uVG91Y2hlZENhbGxiYWNrKCk7XG5cdH1cblxuXHRyZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcblx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyaW5nIHRoZSBmdW5jdGlvbiBpbmplY3RlZCB0byBjb250cm9sIHRoZSB0b3VjaCB1c2Ugb2YgdGhlIGBEcm9wZG93bmAuXG5cdCAqL1xuXHRyZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG5cdFx0dGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuXHR9XG5cblx0LyoqXG5cdCAqIGZ1bmN0aW9uIHBhc3NlZCBpbiBieSBgcmVnaXN0ZXJPbkNoYW5nZWBcblx0ICovXG5cdHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcblxuXHQvKipcblx0ICogYENvbnRyb2xWYWx1ZUFjY2Vzc29yYCBtZXRob2QgdG8gcHJvZ3JhbW1hdGljYWxseSBkaXNhYmxlIHRoZSBkcm9wZG93bi5cblx0ICpcblx0ICogZXg6IGB0aGlzLmZvcm1Hcm91cC5nZXQoXCJteURyb3Bkb3duXCIpLmRpc2FibGUoKTtgXG5cdCAqXG5cdCAqIEBwYXJhbSBpc0Rpc2FibGVkIGB0cnVlYCB0byBkaXNhYmxlIHRoZSBpbnB1dFxuXHQgKi9cblx0c2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG5cdFx0dGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBrZXlib2FyZCBmdW5jdGlvbmFsaXR5IGZvciBuYXZpZ2F0aW9uLCBzZWxlY3Rpb24gYW5kIGNsb3Npbmcgb2YgdGhlIGBEcm9wZG93bmAuXG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKFwia2V5ZG93blwiLCBbXCIkZXZlbnRcIl0pXG5cdG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXHRcdGlmICh0aGlzLnJlYWRvbmx5KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpICYmICF0aGlzLm1lbnVJc0Nsb3NlZCkge1xuXHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7ICAvLyBkb24ndCB1bmludGVudGlvbmFsbHkgY2xvc2Ugb3RoZXIgd2lkZ2V0cyB0aGF0IGxpc3RlbiBmb3IgRXNjYXBlXG5cdFx0fVxuXHRcdGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdFx0dGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLm1lbnVJc0Nsb3NlZCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIgfHwgZXZlbnQua2V5ID09PSBcIkFycm93VXBcIikpIHtcblx0XHRcdGlmICh0aGlzLmRpc2FibGVBcnJvd0tleXMgJiYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5vcGVuTWVudSgpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5tZW51SXNDbG9zZWQgJiYgZXZlbnQua2V5ID09PSBcIlRhYlwiICYmIHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5tZW51SXNDbG9zZWQgJiYgZXZlbnQua2V5ID09PSBcIlRhYlwiICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnR5cGUgPT09IFwibXVsdGlcIikgeyByZXR1cm47IH1cblxuXHRcdGlmICh0aGlzLm1lbnVJc0Nsb3NlZCkge1xuXHRcdFx0dGhpcy5jbG9zZWREcm9wZG93bk5hdmlnYXRpb24oZXZlbnQpO1xuXHRcdH1cblx0fVxuXG5cdGNsb3NlZERyb3Bkb3duTmF2aWdhdGlvbihldmVudCkge1xuXHRcdGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHR0aGlzLnZpZXcuZ2V0Q3VycmVudEl0ZW0oKS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0bGV0IGl0ZW0gPSB0aGlzLnZpZXcuZ2V0TmV4dEl0ZW0oKTtcblx0XHRcdGlmIChpdGVtKSB7IGl0ZW0uc2VsZWN0ZWQgPSB0cnVlOyB9XG5cdFx0fSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy52aWV3LmdldEN1cnJlbnRJdGVtKCkuc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHRcdGxldCBpdGVtID0gdGhpcy52aWV3LmdldFByZXZJdGVtKCk7XG5cdFx0XHRpZiAoaXRlbSkgeyBpdGVtLnNlbGVjdGVkID0gdHJ1ZTsgfVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBkaXNwbGF5IHZhbHVlIGlmIHRoZXJlIGlzIGEgc2VsZWN0aW9uIGFuZCBkaXNwbGF5VmFsdWUgaXMgc2V0LFxuXHQgKiBpZiB0aGVyZSBpcyBqdXN0IGEgc2VsZWN0aW9uIHRoZSBMaXN0SXRlbSBjb250ZW50IHByb3BlcnR5IHdpbGwgYmUgcmV0dXJuZWQsXG5cdCAqIG90aGVyd2lzZSB0aGUgcGxhY2Vob2xkZXIgd2lsbCBiZSByZXR1cm5lZC5cblx0ICovXG5cdGdldERpc3BsYXlTdHJpbmdWYWx1ZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuXHRcdGlmICghdGhpcy52aWV3IHx8IHRoaXMuc2tlbGV0b24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IHNlbGVjdGVkID0gdGhpcy52aWV3LmdldFNlbGVjdGVkKCk7XG5cdFx0aWYgKHNlbGVjdGVkLmxlbmd0aCAmJiAoIXRoaXMuZGlzcGxheVZhbHVlIHx8ICF0aGlzLmlzUmVuZGVyU3RyaW5nKCkpKSB7XG5cdFx0XHRpZiAodGhpcy50eXBlID09PSBcIm11bHRpXCIpIHtcblx0XHRcdFx0cmV0dXJuIG9mKHRoaXMucGxhY2Vob2xkZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIG9mKHNlbGVjdGVkWzBdLmNvbnRlbnQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoc2VsZWN0ZWQubGVuZ3RoICYmIHRoaXMuaXNSZW5kZXJTdHJpbmcoKSkge1xuXHRcdFx0cmV0dXJuIG9mKHRoaXMuZGlzcGxheVZhbHVlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHRcdHJldHVybiBvZih0aGlzLnBsYWNlaG9sZGVyKTtcblx0fVxuXG5cdGlzUmVuZGVyU3RyaW5nKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0eXBlb2YgdGhpcy5kaXNwbGF5VmFsdWUgPT09IFwic3RyaW5nXCI7XG5cdH1cblxuXHRnZXRSZW5kZXJUZW1wbGF0ZUNvbnRleHQoKSB7XG5cdFx0aWYgKCF0aGlzLnZpZXcpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0bGV0IHNlbGVjdGVkID0gdGhpcy52aWV3LmdldFNlbGVjdGVkKCk7XG5cdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiKSB7XG5cdFx0XHRyZXR1cm4geyBpdGVtczogc2VsZWN0ZWQgfTtcblx0XHR9IGVsc2UgaWYgKHNlbGVjdGVkICYmIHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiB7IGl0ZW06IHNlbGVjdGVkWzBdIH07IC8vIHRoaXMgaXMgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBkcm9wZG93bi1saXN0IHRlbXBsYXRlXG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdH1cblxuXHRnZXRTZWxlY3RlZENvdW50KCk6IG51bWJlciB7XG5cdFx0aWYgKHRoaXMudmlldy5nZXRTZWxlY3RlZCgpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy52aWV3LmdldFNlbGVjdGVkKCkubGVuZ3RoO1xuXHRcdH1cblx0fVxuXG5cdGNsZWFyU2VsZWN0ZWQoKSB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5nZXRTZWxlY3RlZENvdW50KCkgPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBpdGVtIG9mIHRoaXMudmlldy5nZXRMaXN0SXRlbXMoKSkge1xuXHRcdFx0aXRlbS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHR0aGlzLnNlbGVjdGVkLmVtaXQoW10pO1xuXHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKFtdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhIHZhbHVlIHNlbGVjdGVkLlxuXHQgKi9cblx0dmFsdWVTZWxlY3RlZCgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy52aWV3LmdldFNlbGVjdGVkKCkpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRfbm9vcCgpIHsgfVxuXHQvKipcblx0ICogSGFuZGxlcyBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgYERyb3Bkb3duYC5cblx0ICovXG5cdF9vdXRzaWRlQ2xpY2soZXZlbnQpIHtcblx0XHRpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcblx0XHRcdC8vIGlmIHdlJ3JlIGFwcGVuZFRvQm9keSB0aGUgbGlzdCBpc24ndCB3aXRoaW4gdGhlIF9lbGVtZW50UmVmLFxuXHRcdFx0Ly8gc28gd2UndmUgZ290IHRvIGNoZWNrIGlmIG91ciB0YXJnZXQgaXMgcG9zc2libHkgaW4gdGhlcmUgdG9vLlxuXHRcdFx0IXRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuXHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHR9XG5cdH1cblx0X291dHNpZGVLZXkoZXZlbnQpIHtcblx0XHRpZiAoIXRoaXMubWVudUlzQ2xvc2VkICYmIGV2ZW50LmtleSA9PT0gXCJUYWJcIiAmJiB0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xuXHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIHNvIHVzZXJzIGFyZSBjb250cm9sbGluZyB0aGUgYERyb3Bkb3duYCBpbnN0ZWFkIG9mIHVuaW50ZW50aW9uYWxseSBjb250cm9sbGluZyBvdXRzaWRlIGVsZW1lbnRzLlxuXHQgKi9cblx0X2tleWJvYXJkTmF2KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIiAmJiAhdGhpcy5tZW51SXNDbG9zZWQpIHtcblx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOyAgLy8gZG9uJ3QgdW5pbnRlbnRpb25hbGx5IGNsb3NlIG1vZGFsIGlmIGluc2lkZSBvZiBpdFxuXHRcdH1cblx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHRcdHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMubWVudUlzQ2xvc2VkICYmIGV2ZW50LmtleSA9PT0gXCJUYWJcIikge1xuXHRcdFx0Ly8gdGhpcyB3YXkgZm9jdXMgd2lsbCBzdGFydCBvbiB0aGUgbmV4dCBmb2N1c2FibGUgaXRlbSBmcm9tIHRoZSBkcm9wZG93blxuXHRcdFx0Ly8gbm90IHRoZSB0b3Agb2YgdGhlIGJvZHkhXG5cdFx0XHR0aGlzLmRyb3Bkb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KFwia2V5ZG93blwiLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGtleTogXCJUYWJcIiB9KSk7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBgRHJvcGRvd25gIGxpc3QgYXBwZW5kaW5nIGl0IHRvIHRoZSBkcm9wZG93biBwYXJlbnQgb2JqZWN0IGluc3RlYWQgb2YgdGhlIGJvZHkuXG5cdCAqL1xuXHRfYXBwZW5kVG9Ecm9wZG93bigpIHtcblx0XHR0aGlzLmRyb3Bkb3duU2VydmljZS5hcHBlbmRUb0Ryb3Bkb3duKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblx0XHR0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMua2V5Ym9hcmROYXYsIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGBEcm9wZG93bmAgbGlzdCBhcyBhbiBlbGVtZW50IHRoYXQgaXMgYXBwZW5kZWQgdG8gdGhlIERPTSBib2R5LlxuXHQgKi9cblx0X2FwcGVuZFRvQm9keSgpIHtcblx0XHRjb25zdCBsaWdodENsYXNzID0gdGhpcy50aGVtZSA9PT0gXCJsaWdodFwiID8gXCIgY2RzLS1saXN0LWJveC0tbGlnaHRcIiA6IFwiXCI7XG5cdFx0Y29uc3QgZXhwYW5kZWRDbGFzcyA9ICF0aGlzLm1lbnVJc0Nsb3NlZCA/IFwiIGNkcy0tbGlzdC1ib3gtLWV4cGFuZGVkXCIgOiBcIlwiO1xuXHRcdHRoaXMuZHJvcGRvd25TZXJ2aWNlLmFwcGVuZFRvQm9keShcblx0XHRcdHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudCxcblx0XHRcdHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRgJHt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc05hbWV9JHtsaWdodENsYXNzfSR7ZXhwYW5kZWRDbGFzc31gKTtcblx0XHR0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMua2V5Ym9hcmROYXYsIHRydWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVjdHMgd2hldGhlciBvciBub3QgdGhlIGBEcm9wZG93bmAgbGlzdCBpcyB2aXNpYmxlIHdpdGhpbiBhbGwgc2Nyb2xsYWJsZSBwYXJlbnRzLlxuXHQgKiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHBhc3NpbmcgaW4gYSB2YWx1ZSB0byB0aGUgYGRyb3BVcGAgaW5wdXQuXG5cdCAqL1xuXHRfc2hvdWxkRHJvcFVwKCkge1xuXHRcdC8vIGNoZWNrIGlmIGRyb3Bkb3duTWVudSBleGlzdHMgZmlyc3QuXG5cdFx0Y29uc3QgbWVudSA9IHRoaXMuZHJvcGRvd25NZW51ICYmIHRoaXMuZHJvcGRvd25NZW51Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5jZHMtLWxpc3QtYm94X19tZW51XCIpO1xuXHRcdC8vIGNoZWNrIGlmIG1lbnUgZXhpc3RzIGZpcnN0LlxuXHRcdGNvbnN0IG1lbnVSZWN0ID0gbWVudSAmJiBtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGlmIChtZW51ICYmIG1lbnVSZWN0KSB7XG5cdFx0XHRjb25zdCBzY3JvbGxhYmxlUGFyZW50cyA9IGdldFNjcm9sbGFibGVQYXJlbnRzKG1lbnUpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGFibGVQYXJlbnRzLnJlZHVjZSgoc2hvdWxkRHJvcFVwOiBib29sZWFuLCBwYXJlbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudFJlY3QgPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdGNvbnN0IGlzQmVsb3dQYXJlbnQgPSAhKG1lbnVSZWN0LmJvdHRvbSA8PSBwYXJlbnRSZWN0LmJvdHRvbSk7XG5cdFx0XHRcdHJldHVybiBzaG91bGREcm9wVXAgfHwgaXNCZWxvd1BhcmVudDtcblx0XHRcdH0sIGZhbHNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogRXhwYW5kcyB0aGUgZHJvcGRvd24gbWVudSBpbiB0aGUgdmlldy5cblx0ICovXG5cdG9wZW5NZW51KCkge1xuXHRcdC8vIHByZXZlbnRzIHRoZSBkcm9wZG93biBmcm9tIG9wZW5pbmcgd2hlbiBsaXN0IG9mIGl0ZW1zIGlzIGVtcHR5XG5cdFx0aWYgKHRoaXMudmlldy5nZXRMaXN0SXRlbXMoKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9kcm9wVXAgPSBmYWxzZTtcblx0XHR0aGlzLm1lbnVJc0Nsb3NlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gbW92ZSB0aGUgZHJvcGRvd24gbGlzdCB0byB0aGUgYm9keSBpZiB3ZSdyZSBub3QgYXBwZW5kaW5nIGlubGluZVxuXHRcdC8vIGFuZCBwb3NpdGlvbiBpdCByZWxhdGl2ZSB0byB0aGUgZHJvcGRvd24gd3JhcHBlclxuXHRcdGlmICghdGhpcy5hcHBlbmRJbmxpbmUpIHtcblx0XHRcdGNvbnN0IHRhcmdldCA9IHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudDtcblx0XHRcdGNvbnN0IHBhcmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXHRcdFx0dGhpcy52aXNpYmlsaXR5U3Vic2NyaXB0aW9uID0gdGhpcy5lbGVtZW50U2VydmljZVxuXHRcdFx0XHQudmlzaWJpbGl0eSh0YXJnZXQsIHBhcmVudClcblx0XHRcdFx0LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG5cdFx0XHRcdFx0aWYgKCF2YWx1ZS52aXNpYmxlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR0aGlzLl9hcHBlbmRUb0JvZHkoKTtcblx0XHR9XG5cblx0XHQvLyBzZXQgdGhlIGRyb3Bkb3duIG1lbnUgdG8gZHJvcCB1cCBpZiBpdCdzIG5lYXIgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuXG5cdFx0Ly8gc2V0VGltZW91dCBsZXRzIHVzIG1lYXN1cmUgYWZ0ZXIgaXQncyB2aXNpYmxlIGluIHRoZSBET01cblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLmRyb3BVcCA9PT0gbnVsbCB8fCB0aGlzLmRyb3BVcCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRoaXMuX2Ryb3BVcCA9IHRoaXMuX3Nob3VsZERyb3BVcCgpO1xuXHRcdFx0fVxuXHRcdH0sIDApO1xuXG5cdFx0Ly8gd2UgYmluZCBub29wIHRvIGRvY3VtZW50LmJvZHkuZmlyc3RFbGVtZW50Q2hpbGQgdG8gYWxsb3cgc2FmYXJpIHRvIGZpcmUgZXZlbnRzXG5cdFx0Ly8gZnJvbSBkb2N1bWVudC4gVGhlbiB3ZSB1bmJpbmQgZXZlcnl0aGluZyBsYXRlciB0byBrZWVwIHRoaW5ncyBsaWdodC5cblx0XHRkb2N1bWVudC5ib2R5LmZpcnN0RWxlbWVudENoaWxkLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLm5vb3AsIHRydWUpO1xuXHRcdGRvY3VtZW50LmJvZHkuZmlyc3RFbGVtZW50Q2hpbGQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5ub29wLCB0cnVlKTtcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5vdXRzaWRlQ2xpY2ssIHRydWUpO1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMub3V0c2lkZUtleSwgdHJ1ZSk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB0aGlzLnZpZXcuaW5pdEZvY3VzKCksIDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbGxhcHNpbmcgdGhlIGRyb3Bkb3duIG1lbnUgYW5kIHJlbW92aW5nIHVubmVjZXNzYXJ5IGBFdmVudExpc3RlbmVyc2AuXG5cdCAqL1xuXHRjbG9zZU1lbnUoKSB7XG5cdFx0Ly8gcmV0dXJuIGVhcmx5IGlmIHRoZSBtZW51IGlzIGFscmVhZHkgY2xvc2VkXG5cdFx0aWYgKHRoaXMubWVudUlzQ2xvc2VkKSB7IHJldHVybjsgfVxuXHRcdHRoaXMubWVudUlzQ2xvc2VkID0gdHJ1ZTtcblx0XHR0aGlzLmNoZWNrRm9yUmVvcmRlcigpO1xuXHRcdHRoaXMub25DbG9zZS5lbWl0KCk7XG5cdFx0dGhpcy5jbG9zZS5lbWl0KCk7XG5cblx0XHQvLyBmb2N1cyB0aGUgdHJpZ2dlciBidXR0b24gd2hlbiB3ZSBjbG9zZSAuLi5cblx0XHR0aGlzLmRyb3Bkb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuXHRcdC8vIHJlbW92ZSB0aGUgY29uZGl0aW9uYWwgb25jZSB0aGlzIGFwaSBpcyBzZXR0bGVkIGFuZCBwYXJ0IG9mIGFic3RyYWN0LWRyb3Bkb3duLXZpZXcuY2xhc3Ncblx0XHRpZiAodGhpcy52aWV3W1wiZGlzYWJsZVNjcm9sbFwiXSkge1xuXHRcdFx0dGhpcy52aWV3W1wiZGlzYWJsZVNjcm9sbFwiXSgpO1xuXHRcdH1cblxuXHRcdC8vIG1vdmUgdGhlIGxpc3QgYmFjayBpbiB0aGUgY29tcG9uZW50IG9uIGNsb3NlXG5cdFx0aWYgKCF0aGlzLmFwcGVuZElubGluZSkge1xuXHRcdFx0dGhpcy52aXNpYmlsaXR5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cdFx0XHR0aGlzLl9hcHBlbmRUb0Ryb3Bkb3duKCk7XG5cdFx0fVxuXHRcdGRvY3VtZW50LmJvZHkuZmlyc3RFbGVtZW50Q2hpbGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMubm9vcCwgdHJ1ZSk7XG5cdFx0ZG9jdW1lbnQuYm9keS5maXJzdEVsZW1lbnRDaGlsZC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLm5vb3AsIHRydWUpO1xuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLm91dHNpZGVDbGljaywgdHJ1ZSk7XG5cdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5vdXRzaWRlS2V5LCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb250cm9scyB0b2dnbGluZyBtZW51IHN0YXRlcyBiZXR3ZWVuIG9wZW4vZXhwYW5kZWQgYW5kIGNsb3NlZC9jb2xsYXBzZWQuXG5cdCAqL1xuXHR0b2dnbGVNZW51KCkge1xuXHRcdGlmICh0aGlzLm1lbnVJc0Nsb3NlZCkge1xuXHRcdFx0dGhpcy5vcGVuTWVudSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmNsb3NlTWVudSgpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBpc1RlbXBsYXRlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG5cdH1cblxuXHQvKipcblx0ICogQ29udHJvbHMgd2hlbiBpdCdzIG5lZWRlZCB0byBhcHBseSB0aGUgc2VsZWN0aW9uIGZlZWRiYWNrXG5cdCAqL1xuXHRwcm90ZWN0ZWQgY2hlY2tGb3JSZW9yZGVyKCkge1xuXHRcdGNvbnN0IHRvcEFmdGVyUmVvcGVuID0gdGhpcy5tZW51SXNDbG9zZWQgJiYgdGhpcy5zZWxlY3Rpb25GZWVkYmFjayA9PT0gXCJ0b3AtYWZ0ZXItcmVvcGVuXCI7XG5cdFx0aWYgKCh0aGlzLnR5cGUgPT09IFwibXVsdGlcIikgJiYgKHRvcEFmdGVyUmVvcGVuIHx8IHRoaXMuc2VsZWN0aW9uRmVlZGJhY2sgPT09IFwidG9wXCIpKSB7XG5cdFx0XHR0aGlzLnZpZXcucmVvcmRlclNlbGVjdGVkKCk7XG5cdFx0fVxuXHR9XG59XG4iXX0=
970
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUVaLFlBQVksRUFFWixTQUFTLEVBRVQsWUFBWSxFQUVaLFdBQVcsRUFDWCxXQUFXLEVBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBRXpFLHlFQUF5RTtBQUN6RSxPQUFPLEVBRU4sRUFBRSxFQUNGLFlBQVksRUFDWixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSXRFLE9BQU8sRUFBa0Isb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7OztBQUV2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBdUlILE1BQU0sT0FBTyxRQUFRO0lBOExwQjs7T0FFRztJQUNILFlBQ1csVUFBc0IsRUFDdEIsSUFBVSxFQUNWLGVBQWdDLEVBQ2hDLGNBQThCO1FBSDlCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsU0FBSSxHQUFKLElBQUksQ0FBTTtRQUNWLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFoTGhDLE9BQUUsR0FBRyxZQUFZLFFBQVEsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBS3JEOztXQUVHO1FBQ00sY0FBUyxHQUFHLEtBQUssQ0FBQztRQUszQjs7V0FFRztRQUNNLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQzFCOztXQUVHO1FBQ00saUJBQVksR0FBOEIsRUFBRSxDQUFDO1FBQ3REOztXQUVHO1FBQ00sY0FBUyxHQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUM1RDs7V0FFRztRQUNNLFNBQUksR0FBdUIsSUFBSSxDQUFDO1FBQ3pDOzs7V0FHRztRQUNNLFNBQUksR0FBdUIsUUFBUSxDQUFDO1FBQzdDOzs7V0FHRztRQUNNLFVBQUssR0FBcUIsTUFBTSxDQUFDO1FBQzFDOztXQUVHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQztRQUMxQjs7V0FFRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDMUI7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzFCOztXQUVHO1FBQ00sV0FBTSxHQUFHLEtBQUssQ0FBQztRQUN4Qjs7V0FFRztRQUNNLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUNsQzs7V0FFRztRQUNNLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFLekI7O1lBRUk7UUFDSyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBS3RCOztXQUVHO1FBQ00saUJBQVksR0FBWSxJQUFJLENBQUM7UUFVdEM7Ozs7O1dBS0c7UUFDTSxzQkFBaUIsR0FBeUMsa0JBQWtCLENBQUM7UUFDdEY7OztXQUdHO1FBQ00sb0JBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDekQ7OztXQUdHO1FBQ00sa0JBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFLM0Q7O1dBRUc7UUFDTyxhQUFRLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFDdEU7O1dBRUc7UUFDTyxZQUFPLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDL0Q7O1dBRUc7UUFDTyxVQUFLLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFlaEIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUVqQixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDckU7O1dBRUc7UUFDMEQsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUUzRTs7V0FFRztRQUNILGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXBCOztXQUVHO1FBQ0gsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQixnRUFBZ0U7UUFDaEUseUJBQXlCO1FBQ3pCLFNBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixpQkFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLGVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxnQkFBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpDLDJCQUFzQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUMsc0JBQWlCLEdBQWUsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUUzQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRTdCLGdHQUFnRztRQUN4RixrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQXFKaEM7O1dBRUc7UUFDSCxvQkFBZSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUEvSVUsQ0FBQztJQW5NN0MsSUFBaUUsaUJBQWlCO1FBQ2pGLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUErRCxlQUFlO1FBQzdFLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQWMsWUFBWTtRQUN6QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQWMsWUFBWSxDQUFDLEdBQVU7UUFDcEMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7SUFDMUIsQ0FBQztJQW9MRDs7O09BR0c7SUFDSCxRQUFRO1FBQ1AsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUMzQjtJQUNGLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNmLE9BQU87U0FDUDtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtZQUM3RixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNuQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUUzQixpRkFBaUY7UUFDakYsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUVsRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3hFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUN0QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7d0JBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztxQkFDcEQ7eUJBQU07d0JBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ2pDO2lCQUNEO3FCQUFNO29CQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzNCO2FBQ0Q7WUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5QywwRUFBMEU7Z0JBQzFFLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztvQkFDNUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDN0IsdURBQXVEO2lCQUN2RDtxQkFBTTtvQkFDTixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztpQkFDOUM7YUFDRDtZQUNELDhDQUE4QztZQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNyQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzFCO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsZUFBZTtRQUNkLHNEQUFzRDtRQUN0RCw4RUFBOEU7UUFDOUUsc0VBQXNFO1FBQ3RFLHVEQUF1RDtRQUN2RCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDdEYsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsdUNBQXVDO1NBQ3ZDO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRTtZQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUN6QjtRQUNELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDekI7SUFDRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsS0FBVTtRQUNwQixpRUFBaUU7UUFDakUsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFO1lBQzNCLDBEQUEwRDtZQUMxRCxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3JDO2lCQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQ2xDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDdEIsZ0RBQWdEO29CQUNoRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDN0csUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUN4QztxQkFBTTtvQkFDTixrREFBa0Q7b0JBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUNyQzthQUNEO2lCQUFNO2dCQUNOLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDdEIsMkVBQTJFO29CQUMzRSw2RkFBNkY7b0JBQzdGLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztvQkFDbkIsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUU7d0JBQ3RCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRTs0QkFDNUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQ0FDbEMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDOzZCQUM1RDt5QkFDRDtxQkFDRDtvQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN2QztxQkFBTTtvQkFDTiw2REFBNkQ7b0JBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ25DO2FBQ0Q7WUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTTtRQUNMLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQixDQUFDLEVBQU87UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBT0Q7Ozs7OztPQU1HO0lBQ0gsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBRUgsU0FBUyxDQUFDLEtBQW9CO1FBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQixPQUFPO1NBQ1A7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkQsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBRSxtRUFBbUU7U0FDdEc7UUFDRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQzNCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDMUM7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxFQUFFO1lBQzVHLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsRUFBRTtnQkFDcEYsT0FBTzthQUNQO1lBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNoQjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBYyxDQUFDLEVBQUU7WUFDaEgsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2pCO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNoRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDakI7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO1lBQUUsT0FBTztTQUFFO1FBRXRDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN0QixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDckM7SUFDRixDQUFDO0lBRUQsd0JBQXdCLENBQUMsS0FBSztRQUM3QixJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxFQUFFO1lBQzlCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDNUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQyxJQUFJLElBQUksRUFBRTtnQkFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzthQUFFO1NBQ25DO2FBQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRTtZQUNuQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQzVDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkMsSUFBSSxJQUFJLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7YUFBRTtTQUNuQztJQUNGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gscUJBQXFCO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEMsT0FBTztTQUNQO1FBQ0QsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRTtZQUN0RSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO2dCQUMxQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDNUI7aUJBQU07Z0JBQ04sT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQy9CO1NBQ0Q7YUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQ3BELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFzQixDQUFDLENBQUM7U0FDdkM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGNBQWM7UUFDYixPQUFPLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRLENBQUM7SUFDOUMsQ0FBQztJQUVELHdCQUF3QjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNmLE9BQU87U0FDUDtRQUNELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtZQUMxQixPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDO1NBQzNCO2FBQU0sSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLDJEQUEyRDtTQUN6RjthQUFNO1lBQ04sT0FBTyxFQUFFLENBQUM7U0FDVjtJQUNGLENBQUM7SUFFRCxnQkFBZ0I7UUFDZixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQztTQUN0QztJQUNGLENBQUM7SUFFRCxhQUFhO1FBQ1osSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNuRCxPQUFPO1NBQ1A7UUFDRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7U0FDdEI7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztTQUFFO1FBQzdDLE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssS0FBSyxDQUFDO0lBQ1g7O09BRUc7SUFDSCxhQUFhLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDeEQsK0RBQStEO1lBQy9ELGdFQUFnRTtZQUNoRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2pCO0lBQ0YsQ0FBQztJQUNELFdBQVcsQ0FBQyxLQUFLO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBYyxDQUFDLEVBQUU7WUFDaEgsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2pCO0lBQ0YsQ0FBQztJQUNEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLEtBQW9CO1FBQ2hDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pELEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUUsb0RBQW9EO1NBQ3ZGO1FBQ0QsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzFDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUU7WUFDckQseUVBQXlFO1lBQ3pFLDJCQUEyQjtZQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0gsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2pCO0lBQ0YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1osTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNFLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQy9CLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFVBQVUsR0FBRyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhO1FBQ1osc0NBQXNDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDeEcsOEJBQThCO1FBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN0RCxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUU7WUFDckIsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRCxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQXFCLEVBQUUsTUFBbUIsRUFBRSxFQUFFO2dCQUM5RSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM5RCxPQUFPLFlBQVksSUFBSSxhQUFhLENBQUM7WUFDdEMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ1Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVE7UUFDUCxpRUFBaUU7UUFDakUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUMsT0FBTztTQUNQO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFFMUIsbUVBQW1FO1FBQ25FLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN2QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQztZQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztZQUM3QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGNBQWM7aUJBQy9DLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO2lCQUMxQixTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO29CQUNuQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQ2pCO1lBQ0YsQ0FBQyxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDckI7UUFFRCx5RUFBeUU7UUFDekUsMkRBQTJEO1FBQzNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO2dCQUN0RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUNwQztRQUNGLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVOLGlGQUFpRjtRQUNqRix1RUFBdUU7UUFDdkUsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRSxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUztRQUNSLDZDQUE2QztRQUM3QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVsQiw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFMUMsMkZBQTJGO1FBQzNGLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7U0FDN0I7UUFFRCwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQ3pCO1FBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM5RSxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hGLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvRCxRQUFRLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVTtRQUNULElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN0QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDaEI7YUFBTTtZQUNOLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNqQjtJQUNGLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBSztRQUN0QixPQUFPLEtBQUssWUFBWSxXQUFXLENBQUM7SUFDckMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFpQjtRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO1FBQ3pDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2Q7SUFDRixDQUFDO0lBRUQ7O09BRUc7SUFDTyxlQUFlO1FBQ3hCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLGtCQUFrQixDQUFDO1FBQzFGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNwRixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzVCO0lBQ0YsQ0FBQzs7QUE3b0JNLHNCQUFhLEdBQUcsQ0FBQyxDQUFDO3FHQURiLFFBQVE7eUZBQVIsUUFBUSwrb0NBUlQ7UUFDVjtZQUNDLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFFBQVE7WUFDckIsS0FBSyxFQUFFLElBQUk7U0FDWDtLQUNELDREQW9KYSxvQkFBb0IsMlNBdFJ4Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMkhUOzJGQVNXLFFBQVE7a0JBdElwQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSw0QkFBNEI7b0JBQ3RDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMkhUO29CQUNELFNBQVMsRUFBRTt3QkFDVjs0QkFDQyxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLFVBQVU7NEJBQ3JCLEtBQUssRUFBRSxJQUFJO3lCQUNYO3FCQUNEO2lCQUNEOytLQUdpRSxpQkFBaUI7c0JBQWpGLFdBQVc7dUJBQUMsOENBQThDO2dCQUlJLGVBQWU7c0JBQTdFLFdBQVc7dUJBQUMsNENBQTRDO2dCQWVoRCxFQUFFO3NCQUFWLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFJRyxXQUFXO3NCQUFuQixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUtHLEtBQUs7c0JBQWIsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxNQUFNO3NCQUFkLEtBQUs7Z0JBSUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFJRyxXQUFXO3NCQUFuQixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBT0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUtHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBS0csYUFBYTtzQkFBckIsS0FBSztnQkFJRyxNQUFNO3NCQUFkLEtBQUs7Z0JBSUksUUFBUTtzQkFBakIsTUFBTTtnQkFJRyxPQUFPO3NCQUFoQixNQUFNO2dCQUlHLEtBQUs7c0JBQWQsTUFBTTtnQkFLK0MsSUFBSTtzQkFBekQsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSUwsY0FBYztzQkFBNUQsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSUEsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVFLFNBQVM7c0JBQXJELFdBQVc7dUJBQUMsOEJBQThCO2dCQUVFLGdCQUFnQjtzQkFBNUQsV0FBVzt1QkFBQyw4QkFBOEI7Z0JBSWtCLEtBQUs7c0JBQWpFLFdBQVc7dUJBQUMscUNBQXFDOztzQkFBRyxLQUFLO2dCQW1NMUQsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRFbGVtZW50UmVmLFxuXHRDb250ZW50Q2hpbGQsXG5cdE9uSW5pdCxcblx0Vmlld0NoaWxkLFxuXHRBZnRlckNvbnRlbnRJbml0LFxuXHRIb3N0TGlzdGVuZXIsXG5cdE9uRGVzdHJveSxcblx0SG9zdEJpbmRpbmcsXG5cdFRlbXBsYXRlUmVmLFxuXHRBZnRlclZpZXdJbml0XG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuLy8gT2JzZXJ2YWJsZSBpbXBvcnQgaXMgcmVxdWlyZWQgaGVyZSBzbyB0eXBlc2NyaXB0IGNhbiBjb21waWxlIGNvcnJlY3RseVxuaW1wb3J0IHtcblx0T2JzZXJ2YWJsZSxcblx0b2YsXG5cdFN1YnNjcmlwdGlvblxufSBmcm9tIFwicnhqc1wiO1xuXG5pbXBvcnQgeyBBYnN0cmFjdERyb3Bkb3duVmlldyB9IGZyb20gXCIuL2Fic3RyYWN0LWRyb3Bkb3duLXZpZXcuY2xhc3NcIjtcbmltcG9ydCB7IEkxOG4gfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9pMThuXCI7XG5pbXBvcnQgeyBMaXN0SXRlbSB9IGZyb20gXCIuL2xpc3QtaXRlbS5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IERyb3Bkb3duU2VydmljZSB9IGZyb20gXCIuL2Ryb3Bkb3duLnNlcnZpY2VcIjtcbmltcG9ydCB7IEVsZW1lbnRTZXJ2aWNlLCBnZXRTY3JvbGxhYmxlUGFyZW50cyB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL3V0aWxzXCI7XG5pbXBvcnQgeyBoYXNTY3JvbGxhYmxlUGFyZW50cyB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL3V0aWxzXCI7XG5cbi8qKlxuICogRHJvcC1kb3duIGxpc3RzIGVuYWJsZSB1c2VycyB0byBzZWxlY3Qgb25lIG9yIG1vcmUgaXRlbXMgZnJvbSBhIGxpc3QuXG4gKlxuICogIyMjIyBPcGVuaW5nIGJlaGF2aW9yL0xpc3QgRE9NIHBsYWNlbWVudFxuICogQnkgZGVmYXVsdCB0aGUgZHJvcGRvd24gd2lsbCB0cnkgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBwbGFjZW1lbnQgZm9yIHRoZSBkcm9wZG93biBsaXN0LlxuICpcbiAqIElmIGl0J3Mgbm90IGNvbnRhaW5lZCB3aXRoaW4gYW55IHNjcm9sbGluZyBlbGVtZW50cywgaXQgd2lsbCBvcGVuIGlubGluZSwgaWYgaXQgX2lzX1xuICogY29udGFpbmVkIHdpdGhpbiBhIHNjcm9sbGluZyBjb250YWluZXIgaXQgd2lsbCB0cnkgdG8gb3BlbiBpbiB0aGUgYm9keSwgb3IgYW4gYGNkcy1wbGFjZWhvbGRlcmAuXG4gKlxuICogVG8gY29udHJvbCB0aGlzIGJlaGF2aW9yIHlvdSBjYW4gdXNlIHRoZSBgYXBwZW5kSW5saW5lYCBpbnB1dDpcbiAqIC0gYFthcHBlbmRJbmxpbmVdPVwibnVsbFwiYCBpcyB0aGUgZGVmYXVsdCAoYXV0byBkZXRlY3Rpb24pXG4gKiAtIGBbYXBwZW5kSW5saW5lXT1cImZhbHNlXCJgIHdpbGwgYWx3YXlzIGFwcGVuZCB0byB0aGUgYm9keS9gY2RzLXBsYWNlaG9sZGVyYFxuICogLSBgW2FwcGVuZElubGluZV09XCJ0cnVlXCJgIHdpbGwgYWx3YXlzIGFwcGVuZCBpbmxpbmUgKG5leHQgdG8gdGhlIGRyb3Bkb3duIGJ1dHRvbilcbiAqXG4gKiBHZXQgc3RhcnRlZCB3aXRoIGltcG9ydGluZyB0aGUgbW9kdWxlOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG4gKiBgYGBcbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLWRyb3Bkb3duLS1iYXNpYylcbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1kcm9wZG93biwgaWJtLWRyb3Bkb3duXCIsXG5cdHRlbXBsYXRlOiBgXG5cdDxsYWJlbFxuXHRcdCpuZ0lmPVwibGFiZWwgJiYgIXNrZWxldG9uXCJcblx0XHRbZm9yXT1cImlkXCJcblx0XHRjbGFzcz1cImNkcy0tbGFiZWxcIlxuXHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdCdjZHMtLWxhYmVsLS1kaXNhYmxlZCc6IGRpc2FibGVkLFxuXHRcdFx0J2Nkcy0tdmlzdWFsbHktaGlkZGVuJzogaGlkZUxhYmVsXG5cdFx0fVwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShsYWJlbClcIj57e2xhYmVsfX08L25nLWNvbnRhaW5lcj5cblx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGxhYmVsKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsXCI+PC9uZy10ZW1wbGF0ZT5cblx0PC9sYWJlbD5cblx0PGRpdlxuXHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveFwiXG5cdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0J2Nkcy0tZHJvcGRvd24nOiB0eXBlICE9PSAnbXVsdGknICYmICEoc2tlbGV0b24gJiYgZmx1aWQpLFxuXHRcdFx0J2Nkcy0tbXVsdGlzZWxlY3QnOiB0eXBlID09PSAnbXVsdGknLFxuXHRcdFx0J2Nkcy0tbXVsdGktc2VsZWN0LS1zZWxlY3RlZCc6IHR5cGUgPT09ICdtdWx0aScgJiYgZ2V0U2VsZWN0ZWRDb3VudCgpID4gMCxcblx0XHRcdCdjZHMtLWRyb3Bkb3duLS1saWdodCc6IHRoZW1lID09PSAnbGlnaHQnLFxuXHRcdFx0J2Nkcy0tbGlzdC1ib3gtLWxpZ2h0JzogdGhlbWUgPT09ICdsaWdodCcsXG5cdFx0XHQnY2RzLS1saXN0LWJveC0taW5saW5lJzogaW5saW5lLFxuXHRcdFx0J2Nkcy0tc2tlbGV0b24nOiBza2VsZXRvbixcblx0XHRcdCdjZHMtLWRyb3Bkb3duLS1kaXNhYmxlZCBjZHMtLWxpc3QtYm94LS1kaXNhYmxlZCc6IGRpc2FibGVkLFxuXHRcdFx0J2Nkcy0tZHJvcGRvd24tLXJlYWRvbmx5JzogcmVhZG9ubHksXG5cdFx0XHQnY2RzLS1kcm9wZG93bi0taW52YWxpZCc6IGludmFsaWQsXG5cdFx0XHQnY2RzLS1kcm9wZG93bi0td2FybmluZyBjZHMtLWxpc3QtYm94LS13YXJuaW5nJzogd2Fybixcblx0XHRcdCdjZHMtLWRyb3Bkb3duLS1zbSBjZHMtLWxpc3QtYm94LS1zbSc6IHNpemUgPT09ICdzbScsXG5cdFx0XHQnY2RzLS1kcm9wZG93bi0tbWQgY2RzLS1saXN0LWJveC0tbWQnOiBzaXplID09PSAnbWQnLFxuXHRcdFx0J2Nkcy0tZHJvcGRvd24tLWxnIGNkcy0tbGlzdC1ib3gtLWxnJzogc2l6ZSA9PT0gJ2xnJyxcblx0XHRcdCdjZHMtLWxpc3QtYm94LS1leHBhbmRlZCc6ICFtZW51SXNDbG9zZWQsXG5cdFx0XHQnY2RzLS1saXN0LWJveC0taW52YWxpZCc6IGludmFsaWRcblx0XHR9XCJcblx0XHRbYXR0ci5kYXRhLWludmFsaWRdPVwiaW52YWxpZCA/IHRydWUgOiBudWxsXCI+XG5cdFx0PGRpdiAqbmdJZj1cInNrZWxldG9uICYmIGZsdWlkXCIgY2xhc3M9XCJjZHMtLWxpc3QtYm94X19sYWJlbFwiPjwvZGl2PlxuXHRcdDxidXR0b25cblx0XHRcdCNkcm9wZG93bkJ1dHRvblxuXHRcdFx0W2lkXT1cImlkXCJcblx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19maWVsZFwiXG5cdFx0XHRbbmdDbGFzc109XCJ7J2EnOiAhbWVudUlzQ2xvc2VkfVwiXG5cdFx0XHRbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiFtZW51SXNDbG9zZWRcIlxuXHRcdFx0W2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG5cdFx0XHRbYXR0ci5hcmlhLXJlYWRvbmx5XT1cInJlYWRvbmx5XCJcblx0XHRcdGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcblx0XHRcdChjbGljayk9XCJkaXNhYmxlZCB8fCByZWFkb25seSA/ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKSA6IHRvZ2dsZU1lbnUoKVwiXG5cdFx0XHQoZm9jdXMpPVwiZmx1aWQgPyBoYW5kbGVGb2N1cygkZXZlbnQpIDogbnVsbFwiXG5cdFx0XHQoYmx1cik9XCJmbHVpZCA/IGhhbmRsZUZvY3VzKCRldmVudCkgOiBvbkJsdXIoKVwiXG5cdFx0XHRbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/IHRydWUgOiBudWxsXCI+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdChjbGljayk9XCJjbGVhclNlbGVjdGVkKClcIlxuXHRcdFx0XHQoa2V5ZG93bi5lbnRlcik9XCJjbGVhclNlbGVjdGVkKClcIlxuXHRcdFx0XHQqbmdJZj1cInR5cGUgPT09ICdtdWx0aScgJiYgZ2V0U2VsZWN0ZWRDb3VudCgpID4gMFwiXG5cdFx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9fc2VsZWN0aW9uIGNkcy0tdGFnLS1maWx0ZXIgY2RzLS1saXN0LWJveF9fc2VsZWN0aW9uLS1tdWx0aVwiXG5cdFx0XHRcdHRhYmluZGV4PVwiMFwiXG5cdFx0XHRcdFt0aXRsZV09XCJjbGVhclRleHRcIj5cblx0XHRcdFx0e3tnZXRTZWxlY3RlZENvdW50KCl9fVxuXHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0Zm9jdXNhYmxlPVwiZmFsc2VcIlxuXHRcdFx0XHRcdHByZXNlcnZlQXNwZWN0UmF0aW89XCJ4TWlkWU1pZCBtZWV0XCJcblx0XHRcdFx0XHRzdHlsZT1cIndpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XCJcblx0XHRcdFx0XHRyb2xlPVwiaW1nXCJcblx0XHRcdFx0XHR4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcblx0XHRcdFx0XHR3aWR0aD1cIjE2XCJcblx0XHRcdFx0XHRoZWlnaHQ9XCIxNlwiXG5cdFx0XHRcdFx0dmlld0JveD1cIjAgMCAxNiAxNlwiXG5cdFx0XHRcdFx0YXJpYS1oaWRkZW49XCJ0cnVlXCI+XG5cdFx0XHRcdFx0PHBhdGggZD1cIk0xMiA0LjdsLS43LS43TDggNy4zIDQuNyA0bC0uNy43TDcuMyA4IDQgMTEuM2wuNy43TDggOC43bDMuMyAzLjMuNy0uN0w4LjcgOHpcIj48L3BhdGg+XG5cdFx0XHRcdDwvc3ZnPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8c3BhbiAqbmdJZj1cImlzUmVuZGVyU3RyaW5nKClcIiBjbGFzcz1cImNkcy0tbGlzdC1ib3hfX2xhYmVsXCI+e3tnZXREaXNwbGF5U3RyaW5nVmFsdWUoKSB8IGFzeW5jfX08L3NwYW4+XG5cdFx0XHQ8bmctdGVtcGxhdGVcblx0XHRcdFx0Km5nSWY9XCIhaXNSZW5kZXJTdHJpbmcoKVwiXG5cdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRSZW5kZXJUZW1wbGF0ZUNvbnRleHQoKVwiXG5cdFx0XHRcdFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRpc3BsYXlWYWx1ZVwiPlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDxzcGFuIGNsYXNzPVwiY2RzLS1saXN0LWJveF9fbWVudS1pY29uXCI+XG5cdFx0XHRcdDxzdmdcblx0XHRcdFx0XHQqbmdJZj1cIiFza2VsZXRvblwiXG5cdFx0XHRcdFx0Y2RzSWNvbj1cImNoZXZyb24tLWRvd25cIlxuXHRcdFx0XHRcdHNpemU9XCIxNlwiXG5cdFx0XHRcdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJtZW51QnV0dG9uTGFiZWxcIlxuXHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnY2RzLS1saXN0LWJveF9fbWVudS1pY29uLS1vcGVuJzogIW1lbnVJc0Nsb3NlZCB9XCI+XG5cdFx0XHRcdDwvc3ZnPlxuXHRcdFx0PC9zcGFuPlxuXHRcdDwvYnV0dG9uPlxuXHRcdDxzdmdcblx0XHRcdCpuZ0lmPVwiaW52YWxpZFwiXG5cdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX2ludmFsaWQtaWNvblwiXG5cdFx0XHRjZHNJY29uPVwid2FybmluZy0tZmlsbGVkXCJcblx0XHRcdHNpemU9XCIxNlwiPlxuXHRcdDwvc3ZnPlxuXHRcdDxzdmdcblx0XHRcdCpuZ0lmPVwiIWludmFsaWQgJiYgd2FyblwiXG5cdFx0XHRjZHNJY29uPVwid2FybmluZy0tYWx0LS1maWxsZWRcIlxuXHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9faW52YWxpZC1pY29uIGNkcy0tbGlzdC1ib3hfX2ludmFsaWQtaWNvbi0td2FybmluZ1wiPlxuXHRcdDwvc3ZnPlxuXHRcdDxkaXZcblx0XHRcdCNkcm9wZG93bk1lbnVcblx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0J2Nkcy0tbGlzdC1ib3gtLXVwJzogdGhpcy5kcm9wVXAgIT09IG51bGwgJiYgdGhpcy5kcm9wVXAgIT09IHVuZGVmaW5lZCA/IGRyb3BVcCA6IF9kcm9wVXBcblx0XHRcdH1cIj5cblx0XHRcdDxuZy1jb250ZW50ICpuZ0lmPVwiIW1lbnVJc0Nsb3NlZFwiPjwvbmctY29udGVudD5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cdDxociAqbmdJZj1cImZsdWlkXCIgY2xhc3M9XCJjZHMtLWxpc3QtYm94X19kaXZpZGVyXCIgLz5cblx0PGRpdlxuXHRcdCpuZ0lmPVwiaGVscGVyVGV4dCAmJiAhaW52YWxpZCAmJiAhd2FybiAmJiAhc2tlbGV0b24gJiYgIWZsdWlkXCJcblx0XHRjbGFzcz1cImNkcy0tZm9ybV9faGVscGVyLXRleHRcIlxuXHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdCdjZHMtLWZvcm1fX2hlbHBlci10ZXh0LS1kaXNhYmxlZCc6IGRpc2FibGVkXG5cdFx0fVwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShoZWxwZXJUZXh0KVwiPnt7aGVscGVyVGV4dH19PC9uZy1jb250YWluZXI+XG5cdFx0PG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShoZWxwZXJUZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlbHBlclRleHRcIj48L25nLXRlbXBsYXRlPlxuXHQ8L2Rpdj5cblx0PGRpdiAqbmdJZj1cImludmFsaWRcIiBjbGFzcz1cImNkcy0tZm9ybS1yZXF1aXJlbWVudFwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShpbnZhbGlkVGV4dClcIj57eyBpbnZhbGlkVGV4dCB9fTwvbmctY29udGFpbmVyPlxuXHRcdDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUoaW52YWxpZFRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW52YWxpZFRleHRcIj48L25nLXRlbXBsYXRlPlxuXHQ8L2Rpdj5cblx0PGRpdiAqbmdJZj1cIiFpbnZhbGlkICYmIHdhcm5cIiBjbGFzcz1cImNkcy0tZm9ybS1yZXF1aXJlbWVudFwiPlxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZSh3YXJuVGV4dClcIj57e3dhcm5UZXh0fX08L25nLWNvbnRhaW5lcj5cblx0XHQ8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKHdhcm5UZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIndhcm5UZXh0XCI+PC9uZy10ZW1wbGF0ZT5cblx0PC9kaXY+XG5cdGAsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IERyb3Bkb3duLFxuXHRcdFx0bXVsdGk6IHRydWVcblx0XHR9XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd24gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXHRzdGF0aWMgZHJvcGRvd25Db3VudCA9IDA7XG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tbGlzdC1ib3hfX3dyYXBwZXItLWZsdWlkLS1pbnZhbGlkXCIpIGdldCBmbHVpZEludmFsaWRDbGFzcygpIHtcblx0XHRyZXR1cm4gdGhpcy5pbnZhbGlkICYmIHRoaXMuZmx1aWQ7XG5cdH1cblxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWxpc3QtYm94X193cmFwcGVyLS1mbHVpZC0tZm9jdXNcIikgZ2V0IGZsdWlkRm9jdXNDbGFzcygpIHtcblx0XHRyZXR1cm4gdGhpcy5mbHVpZCAmJiB0aGlzLl9pc0ZvY3VzZWQgJiYgdGhpcy5tZW51SXNDbG9zZWQ7XG5cdH1cblxuXHRwcm90ZWN0ZWQgZ2V0IHdyaXR0ZW5WYWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fd3JpdHRlblZhbHVlO1xuXHR9XG5cblx0cHJvdGVjdGVkIHNldCB3cml0dGVuVmFsdWUodmFsOiBhbnlbXSkge1xuXHRcdGlmICh2YWwgJiYgdmFsLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5jbGVhclNlbGVjdGVkKCk7XG5cdFx0fVxuXHRcdHRoaXMuX3dyaXR0ZW5WYWx1ZSA9IHZhbDtcblx0fVxuXG5cdEBJbnB1dCgpIGlkID0gYGRyb3Bkb3duLSR7RHJvcGRvd24uZHJvcGRvd25Db3VudCsrfWA7XG5cdC8qKlxuXHQgKiBMYWJlbCBmb3IgdGhlIGRyb3Bkb3duLlxuXHQgKi9cblx0QElucHV0KCkgbGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdC8qKlxuXHQgKiBIaWRlIGxhYmVsIHdoaWxlIGtlZXBpbmcgaXQgYWNjZXNzaWJsZSBmb3Igc2NyZWVuIHJlYWRlcnNcblx0ICovXG5cdEBJbnB1dCgpIGhpZGVMYWJlbCA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0cyB0aGUgb3B0aW9uYWwgaGVscGVyIHRleHQuXG5cdCAqL1xuXHRASW5wdXQoKSBoZWxwZXJUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICogVmFsdWUgZGlzcGxheWVkIGlmIG5vIGl0ZW0gaXMgc2VsZWN0ZWQuXG5cdCAqL1xuXHRASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XG5cdC8qKlxuXHQgKiBUaGUgc2VsZWN0ZWQgdmFsdWUgZnJvbSB0aGUgYERyb3Bkb3duYC4gQ2FuIGJlIGEgc3RyaW5nIG9yIHRlbXBsYXRlLlxuXHQgKi9cblx0QElucHV0KCkgZGlzcGxheVZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gXCJcIjtcblx0LyoqXG5cdCAqIFNldHMgdGhlIG9wdGlvbmFsIGNsZWFyIGJ1dHRvbiB0b29sdGlwIHRleHQuXG5cdCAqL1xuXHRASW5wdXQoKSBjbGVhclRleHQ6IHN0cmluZyA9IHRoaXMuaTE4bi5nZXQoKS5EUk9QRE9XTi5DTEVBUjtcblx0LyoqXG5cdCAqIFNpemUgdG8gcmVuZGVyIHRoZSBkcm9wZG93biBmaWVsZC5cblx0ICovXG5cdEBJbnB1dCgpIHNpemU6IFwic21cIiB8IFwibWRcIiB8IFwibGdcIiA9IFwibWRcIjtcblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciBvciBub3QgdGhlIGBEcm9wZG93bmAgc3VwcG9ydHMgc2VsZWN0aW5nIG11bHRpcGxlIGl0ZW1zIGFzIG9wcG9zZWQgdG8gc2luZ2xlXG5cdCAqIGl0ZW0gc2VsZWN0aW9uLlxuXHQgKi9cblx0QElucHV0KCkgdHlwZTogXCJzaW5nbGVcIiB8IFwibXVsdGlcIiA9IFwic2luZ2xlXCI7XG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSB2NSAtIFVzZSBgY2RzTGF5ZXJgIGRpcmVjdGl2ZSBpbnN0ZWFkXG5cdCAqIGBsaWdodGAgb3IgYGRhcmtgIGRyb3Bkb3duIHRoZW1lXG5cdCAqL1xuXHRASW5wdXQoKSB0aGVtZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgPSBcImRhcmtcIjtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gZGlzYWJsZSB0aGUgZHJvcGRvd24uXG5cdCAqL1xuXHRASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgYSByZWFkb25seSBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciBhIGxvYWRpbmcgZHJvcGRvd24uXG5cdCAqL1xuXHRASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCBmb3IgYW4gaW5saW5lIGRyb3Bkb3duLlxuXHQgKi9cblx0QElucHV0KCkgaW5saW5lID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciBhIGRyb3Bkb3duIHdpdGhvdXQgYXJyb3cga2V5IGFjdGl2YXRpb24uXG5cdCAqL1xuXHRASW5wdXQoKSBkaXNhYmxlQXJyb3dLZXlzID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIGZvciBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuXHQvKipcblx0ICogVmFsdWUgZGlzcGxheWVkIGlmIGRyb3Bkb3duIGlzIGluIGludmFsaWQgc3RhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSBpbnZhbGlkVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAgKiBTZXQgdG8gYHRydWVgIHRvIHNob3cgYSB3YXJuaW5nIChjb250ZW50cyBzZXQgYnkgd2FybmluZ1RleHQpXG5cdCAgKi9cblx0QElucHV0KCkgd2FybiA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0cyB0aGUgd2FybmluZyB0ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSB3YXJuVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAqIHNldCB0byBgdHJ1ZWAgdG8gcGxhY2UgdGhlIGRyb3Bkb3duIHZpZXcgaW5saW5lIHdpdGggdGhlIGNvbXBvbmVudFxuXHQgKi9cblx0QElucHV0KCkgYXBwZW5kSW5saW5lOiBib29sZWFuID0gbnVsbDtcblx0LyoqXG5cdCAqIFF1ZXJ5IHN0cmluZyBmb3IgdGhlIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgYERyb3Bkb3duYC5cblx0ICogVXNlZCB0byB0cmlnZ2VyIGNsb3NpbmcgdGhlIGRyb3Bkb3duIGlmIGl0IHNjcm9sbHMgb3V0c2lkZSBvZiB0aGUgdmlld3BvcnQgb2YgdGhlIGBzY3JvbGxhYmxlQ29udGFpbmVyYC5cblx0ICovXG5cdEBJbnB1dCgpIHNjcm9sbGFibGVDb250YWluZXI6IHN0cmluZztcblx0LyoqXG5cdCAqIFNwZWNpZmllcyB0aGUgcHJvcGVydHkgdG8gYmUgdXNlZCBhcyB0aGUgcmV0dXJuIHZhbHVlIHRvIGBuZ01vZGVsYFxuXHQgKi9cblx0QElucHV0KCkgaXRlbVZhbHVlS2V5OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBTcGVjaWZ5IGZlZWRiYWNrIChtb2RlKSBvZiB0aGUgc2VsZWN0aW9uLlxuXHQgKiBgdG9wYDogc2VsZWN0ZWQgaXRlbSBqdW1wcyB0byB0b3Bcblx0ICogYGZpeGVkYDogc2VsZWN0ZWQgaXRlbSBzdGF5cyBhdCBpdCdzIHBvc2l0aW9uXG5cdCAqIGB0b3AtYWZ0ZXItcmVvcGVuYDogc2VsZWN0ZWQgaXRlbSBqdW1wIHRvIHRvcCBhZnRlciByZW9wZW4gZHJvcGRvd25cblx0ICovXG5cdEBJbnB1dCgpIHNlbGVjdGlvbkZlZWRiYWNrOiBcInRvcFwiIHwgXCJmaXhlZFwiIHwgXCJ0b3AtYWZ0ZXItcmVvcGVuXCIgPSBcInRvcC1hZnRlci1yZW9wZW5cIjtcblx0LyoqXG5cdCAqIEFjY2Vzc2libGUgbGFiZWwgZm9yIHRoZSBidXR0b24gdGhhdCBvcGVucyB0aGUgZHJvcGRvd24gbGlzdC5cblx0ICogRGVmYXVsdHMgdG8gdGhlIGBEUk9QRE9XTi5PUEVOYCB2YWx1ZSBmcm9tIHRoZSBpMThuIHNlcnZpY2UuXG5cdCAqL1xuXHRASW5wdXQoKSBtZW51QnV0dG9uTGFiZWwgPSB0aGlzLmkxOG4uZ2V0KCkuRFJPUERPV04uT1BFTjtcblx0LyoqXG5cdCAqIFByb3ZpZGVzIHRoZSBsYWJlbCBmb3IgdGhlIFwiIyBzZWxlY3RlZFwiIHRleHQuXG5cdCAqIERlZmF1bHRzIHRvIHRoZSBgRFJPUERPV04uU0VMRUNURURgIHZhbHVlIGZyb20gdGhlIGkxOG4gc2VydmljZS5cblx0ICovXG5cdEBJbnB1dCgpIHNlbGVjdGVkTGFiZWwgPSB0aGlzLmkxOG4uZ2V0KCkuRFJPUERPV04uU0VMRUNURUQ7XG5cdC8qKlxuXHQgKiBPdmVycmlkZXMgdGhlIGF1dG9tYXRpYyBkcm9wVXAuXG5cdCAqL1xuXHRASW5wdXQoKSBkcm9wVXA6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBFbWl0cyBzZWxlY3Rpb24gZXZlbnRzLlxuXHQgKi9cblx0QE91dHB1dCgpIHNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8T2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8T2JqZWN0PigpO1xuXHQvKipcblx0ICogRW1pdHMgZXZlbnQgbm90aWZ5aW5nIHRvIG90aGVyIGNsYXNzZXMgdGhhdCB0aGUgYERyb3Bkb3duYCBoYXMgYmVlbiBjbG9zZWQgKGNvbGxhcHNlZCkuXG5cdCAqL1xuXHRAT3V0cHV0KCkgb25DbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblx0LyoqXG5cdCAqIEVtaXRzIGV2ZW50IG5vdGlmeWluZyB0byBvdGhlciBjbGFzc2VzIHRoYXQgdGhlIGBEcm9wZG93bmAgaGFzIGJlZW4gY2xvc2VkIChjb2xsYXBzZWQpLlxuXHQgKi9cblx0QE91dHB1dCgpIGNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG5cdC8qKlxuXHQgKiBNYWludGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGBBYnN0cmFjdERyb3Bkb3duVmlld2Agb2JqZWN0IHdpdGhpbiB0aGUgY29udGVudCBET00uXG5cdCAqL1xuXHRAQ29udGVudENoaWxkKEFic3RyYWN0RHJvcGRvd25WaWV3LCB7IHN0YXRpYzogdHJ1ZSB9KSB2aWV3OiBBYnN0cmFjdERyb3Bkb3duVmlldztcblx0LyoqXG5cdCAqIE1haW50YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmlldyBET00gZWxlbWVudCBvZiB0aGUgYERyb3Bkb3duYCBidXR0b24uXG5cdCAqL1xuXHRAVmlld0NoaWxkKFwiZHJvcGRvd25CdXR0b25cIiwgeyBzdGF0aWM6IHRydWUgfSkgZHJvcGRvd25CdXR0b247XG5cdC8qKlxuXHQgKiBWaWV3Q2hpZCBvZiB0aGUgZHJvcGRvd24gdmlldy5cblx0ICovXG5cdEBWaWV3Q2hpbGQoXCJkcm9wZG93bk1lbnVcIiwgeyBzdGF0aWM6IHRydWUgfSkgZHJvcGRvd25NZW51O1xuXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tZHJvcGRvd25fX3dyYXBwZXJcIikgaG9zdENsYXNzID0gdHJ1ZTtcblxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy5jZHMtLWxpc3QtYm94X193cmFwcGVyXCIpIGhvc3RXcmFwcGVyQ2xhc3MgPSB0cnVlO1xuXHQvKipcblx0ICogRXhwZXJpbWVudGFsOiBlbmFibGUgZmx1aWQgc3RhdGVcblx0ICovXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tbGlzdC1ib3hfX3dyYXBwZXItLWZsdWlkXCIpIEBJbnB1dCgpIGZsdWlkID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgaWYgdGhlIGRyb3Bkb3duIGlzIGNsb3NlZCAobm90IGV4cGFuZGVkKS5cblx0ICovXG5cdG1lbnVJc0Nsb3NlZCA9IHRydWU7XG5cblx0LyoqXG5cdCAqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGBkcm9wLXVwYCBjbGFzcyBpcyBhcHBsaWVkXG5cdCAqL1xuXHRfZHJvcFVwID0gZmFsc2U7XG5cblx0Ly8gLmJpbmQgY3JlYXRlcyBhIG5ldyBmdW5jdGlvbiwgc28gd2UgZGVjbGFyZSB0aGUgbWV0aG9kcyBiZWxvd1xuXHQvLyBidXQgLmJpbmQgdGhlbSB1cCBoZXJlXG5cdG5vb3AgPSB0aGlzLl9ub29wLmJpbmQodGhpcyk7XG5cdG91dHNpZGVDbGljayA9IHRoaXMuX291dHNpZGVDbGljay5iaW5kKHRoaXMpO1xuXHRvdXRzaWRlS2V5ID0gdGhpcy5fb3V0c2lkZUtleS5iaW5kKHRoaXMpO1xuXHRrZXlib2FyZE5hdiA9IHRoaXMuX2tleWJvYXJkTmF2LmJpbmQodGhpcyk7XG5cblx0cHJvdGVjdGVkIHZpc2liaWxpdHlTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cblx0cHJvdGVjdGVkIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gdGhpcy5fbm9vcDtcblxuXHRwcm90ZWN0ZWQgX2lzRm9jdXNlZCA9IGZhbHNlO1xuXG5cdC8vIHByaW1hcmlseSB1c2VkIHRvIGNhcHR1cmUgYW5kIHByb3BhZ2F0ZSBpbnB1dCB0byBgd3JpdGVWYWx1ZWAgYmVmb3JlIHRoZSBjb250ZW50IGlzIGF2YWlsYWJsZVxuXHRwcml2YXRlIF93cml0dGVuVmFsdWU6IGFueSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIERyb3Bkb3duLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG5cdFx0cHJvdGVjdGVkIGkxOG46IEkxOG4sXG5cdFx0cHJvdGVjdGVkIGRyb3Bkb3duU2VydmljZTogRHJvcGRvd25TZXJ2aWNlLFxuXHRcdHByb3RlY3RlZCBlbGVtZW50U2VydmljZTogRWxlbWVudFNlcnZpY2UpIHt9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGB0eXBlYCBwcm9wZXJ0eSBpbiB0aGUgYEBDb250ZW50Q2hpbGRgLlxuXHQgKiBUaGUgYHR5cGVgIHByb3BlcnR5IHNwZWNpZmllcyB3aGV0aGVyIHRoZSBgRHJvcGRvd25gIGFsbG93cyBzaW5nbGUgc2VsZWN0aW9uIG9yIG11bHRpIHNlbGVjdGlvbi5cblx0ICovXG5cdG5nT25Jbml0KCkge1xuXHRcdGlmICh0aGlzLnZpZXcpIHtcblx0XHRcdHRoaXMudmlldy50eXBlID0gdGhpcy50eXBlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBjbGFzc2VzIGFuZCBzdWJzY3JpYmVzIHRvIGV2ZW50cyBmb3Igc2luZ2xlIG9yIG11bHRpIHNlbGVjdGlvbi5cblx0ICovXG5cdG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcblx0XHRpZiAoIXRoaXMudmlldykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoKHRoaXMud3JpdHRlblZhbHVlICYmIHRoaXMud3JpdHRlblZhbHVlLmxlbmd0aCkgfHwgdHlwZW9mIHRoaXMud3JpdHRlblZhbHVlID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHR0aGlzLndyaXRlVmFsdWUodGhpcy53cml0dGVuVmFsdWUpO1xuXHRcdH1cblx0XHR0aGlzLnZpZXcudHlwZSA9IHRoaXMudHlwZTtcblx0XHR0aGlzLnZpZXcuc2l6ZSA9IHRoaXMuc2l6ZTtcblxuXHRcdC8vIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBldmVudCBpcyBvcmdhbmljIChpc1VwZGF0ZSA9PT0gZmFsc2UpIG9yIHByb2dyYW1tYXRpY1xuXHRcdGNvbnN0IGlzVXBkYXRlID0gZXZlbnQgPT4gZXZlbnQgJiYgZXZlbnQuaXNVcGRhdGU7XG5cblx0XHR0aGlzLnZpZXcuc2VsZWN0LnN1YnNjcmliZShldmVudCA9PiB7XG5cdFx0XHRpZiAodGhpcy50eXBlID09PSBcInNpbmdsZVwiICYmICFpc1VwZGF0ZShldmVudCkgJiYgIUFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG5cdFx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0XHRcdGlmIChldmVudC5pdGVtICYmIGV2ZW50Lml0ZW0uc2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5pdGVtVmFsdWVLZXkpIHtcblx0XHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKGV2ZW50Lml0ZW1bdGhpcy5pdGVtVmFsdWVLZXldKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UoZXZlbnQuaXRlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnR5cGUgPT09IFwibXVsdGlcIiAmJiAhaXNVcGRhdGUoZXZlbnQpKSB7XG5cdFx0XHRcdC8vIGlmIHdlIGhhdmUgYSBgdmFsdWVgIHNlbGVjdG9yIGFuZCBzZWxlY3RlZCBpdGVtcyBtYXAgdGhlbSBhcHByb3ByaWF0ZWx5XG5cdFx0XHRcdGlmICh0aGlzLml0ZW1WYWx1ZUtleSAmJiB0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlcyA9IHRoaXMudmlldy5nZXRTZWxlY3RlZCgpLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5pdGVtVmFsdWVLZXldKTtcblx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSh2YWx1ZXMpO1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSBqdXN0IHBhc3MgdXAgdGhlIHZhbHVlcyBmcm9tIGBnZXRTZWxlY3RlZGBcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIG9ubHkgZW1pdCBzZWxlY3RlZCBmb3IgXCJvcmdhbmljXCIgc2VsZWN0aW9uc1xuXHRcdFx0aWYgKCFpc1VwZGF0ZShldmVudCkpIHtcblx0XHRcdFx0dGhpcy5jaGVja0ZvclJlb3JkZXIoKTtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZC5lbWl0KGV2ZW50KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHQvLyBpZiBhcHBlbmRJbmxpbmUgaXMgZGVmYXVsdCB2YWx1ZWQgKG51bGwpIHdlIHNob3VsZDpcblx0XHQvLyAxLiBpZiB0aGVyZSBhcmUgc2Nyb2xsYWJsZSBwYXJlbnRzIChub3QgaW5jbHVkaW5nIGJvZHkpIGRvbid0IGFwcGVuZCBpbmxpbmVcblx0XHQvLyAgICB0aGlzIHNob3VsZCBhbHNvIGNvdmVyIHRoZSBjYXNlIHdoZXJlIHRoZSBkcm9wZG93biBpcyBpbiBhIG1vZGFsXG5cdFx0Ly8gICAgKHdoZXJlIHdlIF9kb18gd2FudCB0byBhcHBlbmQgdG8gdGhlIHBsYWNlaG9sZGVyKVxuXHRcdGlmICh0aGlzLmFwcGVuZElubGluZSA9PT0gbnVsbCAmJiBoYXNTY3JvbGxhYmxlUGFyZW50cyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpIHtcblx0XHRcdHRoaXMuYXBwZW5kSW5saW5lID0gZmFsc2U7XG5cdFx0XHQvLyAyLiBvdGhlcndpc2Ugd2Ugc2hvdWxkIGFwcGVuZCBpbmxpbmVcblx0XHR9IGVsc2UgaWYgKHRoaXMuYXBwZW5kSW5saW5lID09PSBudWxsKSB7XG5cdFx0XHR0aGlzLmFwcGVuZElubGluZSA9IHRydWU7XG5cdFx0fVxuXHRcdHRoaXMuY2hlY2tGb3JSZW9yZGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZpbmcgdGhlIGBEcm9wZG93bmAgZnJvbSB0aGUgYm9keSBpZiBpdCBpcyBhcHBlbmRlZCB0byB0aGUgYm9keS5cblx0ICovXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdGlmICghdGhpcy5hcHBlbmRJbmxpbmUpIHtcblx0XHRcdHRoaXMuX2FwcGVuZFRvRHJvcGRvd24oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJvcGFnYXRlcyB0aGUgaW5qZWN0ZWQgYHZhbHVlYC5cblx0ICovXG5cdHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuXHRcdC8vIGNhY2hlIHRoZSB3cml0dGVuIHZhbHVlIHNvIHdlIGNhbiB1c2UgaXQgaW4gYEFmdGVyQ29udGVudEluaXRgXG5cdFx0dGhpcy53cml0dGVuVmFsdWUgPSB2YWx1ZTtcblx0XHR0aGlzLnZpZXcub25JdGVtc1JlYWR5KCgpID0+IHtcblx0XHRcdC8vIHByb3BhZ2F0ZSBudWxsL2ZhbHNleSBhcyBhbiBhcnJheSAoZGVzZWxlY3QgZXZlcnl0aGluZylcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKFt2YWx1ZV0pO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IFwic2luZ2xlXCIpIHtcblx0XHRcdFx0aWYgKHRoaXMuaXRlbVZhbHVlS2V5KSB7XG5cdFx0XHRcdFx0Ly8gY2xvbmUgdGhlIHNwZWNpZmllZCBpdGVtIGFuZCB1cGRhdGUgaXRzIHN0YXRlXG5cdFx0XHRcdFx0Y29uc3QgbmV3VmFsdWUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnZpZXcuZ2V0TGlzdEl0ZW1zKCkuZmluZChpdGVtID0+IGl0ZW1bdGhpcy5pdGVtVmFsdWVLZXldID09PSB2YWx1ZSkpO1xuXHRcdFx0XHRcdG5ld1ZhbHVlLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQoW25ld1ZhbHVlXSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gcGFzcyB0aGUgc2luZ3VsYXIgdmFsdWUgYXMgYW4gYXJyYXkgb2YgTGlzdEl0ZW1cblx0XHRcdFx0XHR0aGlzLnZpZXcucHJvcGFnYXRlU2VsZWN0ZWQoW3ZhbHVlXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICh0aGlzLml0ZW1WYWx1ZUtleSkge1xuXHRcdFx0XHRcdC8vIGNsb25lIHRoZSBpdGVtcyBhbmQgdXBkYXRlIHRoZWlyIHN0YXRlIGJhc2VkIG9uIHRoZSByZWNlaXZlZCB2YWx1ZSBhcnJheVxuXHRcdFx0XHRcdC8vIHRoaXMgd2F5IHdlIGRvbid0IGxvc2UgYW55IGFkZGl0aW9uYWwgbWV0YWRhdGEgdGhhdCBtYXkgYmUgcGFzc2VkIGluIHZpYSB0aGUgYGl0ZW1zYCBJbnB1dFxuXHRcdFx0XHRcdGxldCBuZXdWYWx1ZXMgPSBbXTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHYgb2YgdmFsdWUpIHtcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnZpZXcuZ2V0TGlzdEl0ZW1zKCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW1bdGhpcy5pdGVtVmFsdWVLZXldID09PSB2KSB7XG5cdFx0XHRcdFx0XHRcdFx0bmV3VmFsdWVzLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgaXRlbSwgeyBzZWxlY3RlZDogdHJ1ZSB9KSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy52aWV3LnByb3BhZ2F0ZVNlbGVjdGVkKG5ld1ZhbHVlcyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gd2UgY2FuIHNhZmVseSBhc3N1bWUgd2UncmUgcGFzc2luZyBhbiBhcnJheSBvZiBgTGlzdEl0ZW1gc1xuXHRcdFx0XHRcdHRoaXMudmlldy5wcm9wYWdhdGVTZWxlY3RlZCh2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuY2hlY2tGb3JSZW9yZGVyKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRvbkJsdXIoKSB7XG5cdFx0dGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xuXHR9XG5cblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcmluZyB0aGUgZnVuY3Rpb24gaW5qZWN0ZWQgdG8gY29udHJvbCB0aGUgdG91Y2ggdXNlIG9mIHRoZSBgRHJvcGRvd25gLlxuXHQgKi9cblx0cmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuXHRcdHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBmdW5jdGlvbiBwYXNzZWQgaW4gYnkgYHJlZ2lzdGVyT25DaGFuZ2VgXG5cdCAqL1xuXHRwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG5cblx0LyoqXG5cdCAqIGBDb250cm9sVmFsdWVBY2Nlc3NvcmAgbWV0aG9kIHRvIHByb2dyYW1tYXRpY2FsbHkgZGlzYWJsZSB0aGUgZHJvcGRvd24uXG5cdCAqXG5cdCAqIGV4OiBgdGhpcy5mb3JtR3JvdXAuZ2V0KFwibXlEcm9wZG93blwiKS5kaXNhYmxlKCk7YFxuXHQgKlxuXHQgKiBAcGFyYW0gaXNEaXNhYmxlZCBgdHJ1ZWAgdG8gZGlzYWJsZSB0aGUgaW5wdXRcblx0ICovXG5cdHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuXHRcdHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMga2V5Ym9hcmQgZnVuY3Rpb25hbGl0eSBmb3IgbmF2aWdhdGlvbiwgc2VsZWN0aW9uIGFuZCBjbG9zaW5nIG9mIHRoZSBgRHJvcGRvd25gLlxuXHQgKi9cblx0QEhvc3RMaXN0ZW5lcihcImtleWRvd25cIiwgW1wiJGV2ZW50XCJdKVxuXHRvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblx0XHRpZiAodGhpcy5yZWFkb25seSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSAmJiAhdGhpcy5tZW51SXNDbG9zZWQpIHtcblx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOyAgLy8gZG9uJ3QgdW5pbnRlbnRpb25hbGx5IGNsb3NlIG90aGVyIHdpZGdldHMgdGhhdCBsaXN0ZW4gZm9yIEVzY2FwZVxuXHRcdH1cblx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHRcdHRoaXMuZHJvcGRvd25CdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5tZW51SXNDbG9zZWQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkFycm93RG93blwiIHx8IGV2ZW50LmtleSA9PT0gXCJBcnJvd1VwXCIpKSB7XG5cdFx0XHRpZiAodGhpcy5kaXNhYmxlQXJyb3dLZXlzICYmIChldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIgfHwgZXZlbnQua2V5ID09PSBcIkFycm93VXBcIikpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMub3Blbk1lbnUoKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMubWVudUlzQ2xvc2VkICYmIGV2ZW50LmtleSA9PT0gXCJUYWJcIiAmJiB0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xuXHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMubWVudUlzQ2xvc2VkICYmIGV2ZW50LmtleSA9PT0gXCJUYWJcIiAmJiBldmVudC5zaGlmdEtleSkge1xuXHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy50eXBlID09PSBcIm11bHRpXCIpIHsgcmV0dXJuOyB9XG5cblx0XHRpZiAodGhpcy5tZW51SXNDbG9zZWQpIHtcblx0XHRcdHRoaXMuY2xvc2VkRHJvcGRvd25OYXZpZ2F0aW9uKGV2ZW50KTtcblx0XHR9XG5cdH1cblxuXHRjbG9zZWREcm9wZG93bk5hdmlnYXRpb24oZXZlbnQpIHtcblx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkFycm93RG93blwiKSB7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0dGhpcy52aWV3LmdldEN1cnJlbnRJdGVtKCkuc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHRcdGxldCBpdGVtID0gdGhpcy52aWV3LmdldE5leHRJdGVtKCk7XG5cdFx0XHRpZiAoaXRlbSkgeyBpdGVtLnNlbGVjdGVkID0gdHJ1ZTsgfVxuXHRcdH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBcIkFycm93VXBcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMudmlldy5nZXRDdXJyZW50SXRlbSgpLnNlbGVjdGVkID0gZmFsc2U7XG5cdFx0XHRsZXQgaXRlbSA9IHRoaXMudmlldy5nZXRQcmV2SXRlbSgpO1xuXHRcdFx0aWYgKGl0ZW0pIHsgaXRlbS5zZWxlY3RlZCA9IHRydWU7IH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgZGlzcGxheSB2YWx1ZSBpZiB0aGVyZSBpcyBhIHNlbGVjdGlvbiBhbmQgZGlzcGxheVZhbHVlIGlzIHNldCxcblx0ICogaWYgdGhlcmUgaXMganVzdCBhIHNlbGVjdGlvbiB0aGUgTGlzdEl0ZW0gY29udGVudCBwcm9wZXJ0eSB3aWxsIGJlIHJldHVybmVkLFxuXHQgKiBvdGhlcndpc2UgdGhlIHBsYWNlaG9sZGVyIHdpbGwgYmUgcmV0dXJuZWQuXG5cdCAqL1xuXHRnZXREaXNwbGF5U3RyaW5nVmFsdWUoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcblx0XHRpZiAoIXRoaXMudmlldyB8fCB0aGlzLnNrZWxldG9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGxldCBzZWxlY3RlZCA9IHRoaXMudmlldy5nZXRTZWxlY3RlZCgpO1xuXHRcdGlmIChzZWxlY3RlZC5sZW5ndGggJiYgKCF0aGlzLmRpc3BsYXlWYWx1ZSB8fCAhdGhpcy5pc1JlbmRlclN0cmluZygpKSkge1xuXHRcdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiKSB7XG5cdFx0XHRcdHJldHVybiBvZih0aGlzLnBsYWNlaG9sZGVyKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBvZihzZWxlY3RlZFswXS5jb250ZW50KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHNlbGVjdGVkLmxlbmd0aCAmJiB0aGlzLmlzUmVuZGVyU3RyaW5nKCkpIHtcblx0XHRcdHJldHVybiBvZih0aGlzLmRpc3BsYXlWYWx1ZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0XHRyZXR1cm4gb2YodGhpcy5wbGFjZWhvbGRlcik7XG5cdH1cblxuXHRpc1JlbmRlclN0cmluZygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHlwZW9mIHRoaXMuZGlzcGxheVZhbHVlID09PSBcInN0cmluZ1wiO1xuXHR9XG5cblx0Z2V0UmVuZGVyVGVtcGxhdGVDb250ZXh0KCkge1xuXHRcdGlmICghdGhpcy52aWV3KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGxldCBzZWxlY3RlZCA9IHRoaXMudmlldy5nZXRTZWxlY3RlZCgpO1xuXHRcdGlmICh0aGlzLnR5cGUgPT09IFwibXVsdGlcIikge1xuXHRcdFx0cmV0dXJuIHsgaXRlbXM6IHNlbGVjdGVkIH07XG5cdFx0fSBlbHNlIGlmIChzZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4geyBpdGVtOiBzZWxlY3RlZFswXSB9OyAvLyB0aGlzIGlzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgZHJvcGRvd24tbGlzdCB0ZW1wbGF0ZVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXHR9XG5cblx0Z2V0U2VsZWN0ZWRDb3VudCgpOiBudW1iZXIge1xuXHRcdGlmICh0aGlzLnZpZXcuZ2V0U2VsZWN0ZWQoKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMudmlldy5nZXRTZWxlY3RlZCgpLmxlbmd0aDtcblx0XHR9XG5cdH1cblxuXHRjbGVhclNlbGVjdGVkKCkge1xuXHRcdGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuZ2V0U2VsZWN0ZWRDb3VudCgpID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnZpZXcuZ2V0TGlzdEl0ZW1zKCkpIHtcblx0XHRcdGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0dGhpcy5zZWxlY3RlZC5lbWl0KFtdKTtcblx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZShbXSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYSB2YWx1ZSBzZWxlY3RlZC5cblx0ICovXG5cdHZhbHVlU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMudmlldy5nZXRTZWxlY3RlZCgpKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0X25vb3AoKSB7IH1cblx0LyoqXG5cdCAqIEhhbmRsZXMgY2xpY2tzIG91dHNpZGUgb2YgdGhlIGBEcm9wZG93bmAuXG5cdCAqL1xuXHRfb3V0c2lkZUNsaWNrKGV2ZW50KSB7XG5cdFx0aWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG5cdFx0XHQvLyBpZiB3ZSdyZSBhcHBlbmRUb0JvZHkgdGhlIGxpc3QgaXNuJ3Qgd2l0aGluIHRoZSBfZWxlbWVudFJlZixcblx0XHRcdC8vIHNvIHdlJ3ZlIGdvdCB0byBjaGVjayBpZiBvdXIgdGFyZ2V0IGlzIHBvc3NpYmx5IGluIHRoZXJlIHRvby5cblx0XHRcdCF0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0fVxuXHR9XG5cdF9vdXRzaWRlS2V5KGV2ZW50KSB7XG5cdFx0aWYgKCF0aGlzLm1lbnVJc0Nsb3NlZCAmJiBldmVudC5rZXkgPT09IFwiVGFiXCIgJiYgdGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBIYW5kbGVzIGtleWJvYXJkIGV2ZW50cyBzbyB1c2VycyBhcmUgY29udHJvbGxpbmcgdGhlIGBEcm9wZG93bmAgaW5zdGVhZCBvZiB1bmludGVudGlvbmFsbHkgY29udHJvbGxpbmcgb3V0c2lkZSBlbGVtZW50cy5cblx0ICovXG5cdF9rZXlib2FyZE5hdihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXHRcdGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIgJiYgIXRoaXMubWVudUlzQ2xvc2VkKSB7XG5cdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsgIC8vIGRvbid0IHVuaW50ZW50aW9uYWxseSBjbG9zZSBtb2RhbCBpZiBpbnNpZGUgb2YgaXRcblx0XHR9XG5cdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHRoaXMuY2xvc2VNZW51KCk7XG5cdFx0XHR0aGlzLmRyb3Bkb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblx0XHR9IGVsc2UgaWYgKCF0aGlzLm1lbnVJc0Nsb3NlZCAmJiBldmVudC5rZXkgPT09IFwiVGFiXCIpIHtcblx0XHRcdC8vIHRoaXMgd2F5IGZvY3VzIHdpbGwgc3RhcnQgb24gdGhlIG5leHQgZm9jdXNhYmxlIGl0ZW0gZnJvbSB0aGUgZHJvcGRvd25cblx0XHRcdC8vIG5vdCB0aGUgdG9wIG9mIHRoZSBib2R5IVxuXHRcdFx0dGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHR0aGlzLmRyb3Bkb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudChcImtleWRvd25cIiwgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBrZXk6IFwiVGFiXCIgfSkpO1xuXHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgYERyb3Bkb3duYCBsaXN0IGFwcGVuZGluZyBpdCB0byB0aGUgZHJvcGRvd24gcGFyZW50IG9iamVjdCBpbnN0ZWFkIG9mIHRoZSBib2R5LlxuXHQgKi9cblx0X2FwcGVuZFRvRHJvcGRvd24oKSB7XG5cdFx0dGhpcy5kcm9wZG93blNlcnZpY2UuYXBwZW5kVG9Ecm9wZG93bih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG5cdFx0dGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmtleWJvYXJkTmF2LCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBgRHJvcGRvd25gIGxpc3QgYXMgYW4gZWxlbWVudCB0aGF0IGlzIGFwcGVuZGVkIHRvIHRoZSBET00gYm9keS5cblx0ICovXG5cdF9hcHBlbmRUb0JvZHkoKSB7XG5cdFx0Y29uc3QgbGlnaHRDbGFzcyA9IHRoaXMudGhlbWUgPT09IFwibGlnaHRcIiA/IFwiIGNkcy0tbGlzdC1ib3gtLWxpZ2h0XCIgOiBcIlwiO1xuXHRcdGNvbnN0IGV4cGFuZGVkQ2xhc3MgPSAhdGhpcy5tZW51SXNDbG9zZWQgPyBcIiBjZHMtLWxpc3QtYm94LS1leHBhbmRlZFwiIDogXCJcIjtcblx0XHR0aGlzLmRyb3Bkb3duU2VydmljZS5hcHBlbmRUb0JvZHkoXG5cdFx0XHR0aGlzLmRyb3Bkb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHR0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LFxuXHRcdFx0YCR7dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lfSR7bGlnaHRDbGFzc30ke2V4cGFuZGVkQ2xhc3N9YCk7XG5cdFx0dGhpcy5kcm9wZG93bk1lbnUubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmtleWJvYXJkTmF2LCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBgRHJvcGRvd25gIGxpc3QgaXMgdmlzaWJsZSB3aXRoaW4gYWxsIHNjcm9sbGFibGUgcGFyZW50cy5cblx0ICogVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIGluIGEgdmFsdWUgdG8gdGhlIGBkcm9wVXBgIGlucHV0LlxuXHQgKi9cblx0X3Nob3VsZERyb3BVcCgpIHtcblx0XHQvLyBjaGVjayBpZiBkcm9wZG93bk1lbnUgZXhpc3RzIGZpcnN0LlxuXHRcdGNvbnN0IG1lbnUgPSB0aGlzLmRyb3Bkb3duTWVudSAmJiB0aGlzLmRyb3Bkb3duTWVudS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY2RzLS1saXN0LWJveF9fbWVudVwiKTtcblx0XHQvLyBjaGVjayBpZiBtZW51IGV4aXN0cyBmaXJzdC5cblx0XHRjb25zdCBtZW51UmVjdCA9IG1lbnUgJiYgbWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRpZiAobWVudSAmJiBtZW51UmVjdCkge1xuXHRcdFx0Y29uc3Qgc2Nyb2xsYWJsZVBhcmVudHMgPSBnZXRTY3JvbGxhYmxlUGFyZW50cyhtZW51KTtcblx0XHRcdHJldHVybiBzY3JvbGxhYmxlUGFyZW50cy5yZWR1Y2UoKHNob3VsZERyb3BVcDogYm9vbGVhbiwgcGFyZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXJlbnRSZWN0ID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0XHRjb25zdCBpc0JlbG93UGFyZW50ID0gIShtZW51UmVjdC5ib3R0b20gPD0gcGFyZW50UmVjdC5ib3R0b20pO1xuXHRcdFx0XHRyZXR1cm4gc2hvdWxkRHJvcFVwIHx8IGlzQmVsb3dQYXJlbnQ7XG5cdFx0XHR9LCBmYWxzZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4cGFuZHMgdGhlIGRyb3Bkb3duIG1lbnUgaW4gdGhlIHZpZXcuXG5cdCAqL1xuXHRvcGVuTWVudSgpIHtcblx0XHQvLyBwcmV2ZW50cyB0aGUgZHJvcGRvd24gZnJvbSBvcGVuaW5nIHdoZW4gbGlzdCBvZiBpdGVtcyBpcyBlbXB0eVxuXHRcdGlmICh0aGlzLnZpZXcuZ2V0TGlzdEl0ZW1zKCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fZHJvcFVwID0gZmFsc2U7XG5cdFx0dGhpcy5tZW51SXNDbG9zZWQgPSBmYWxzZTtcblxuXHRcdC8vIG1vdmUgdGhlIGRyb3Bkb3duIGxpc3QgdG8gdGhlIGJvZHkgaWYgd2UncmUgbm90IGFwcGVuZGluZyBpbmxpbmVcblx0XHQvLyBhbmQgcG9zaXRpb24gaXQgcmVsYXRpdmUgdG8gdGhlIGRyb3Bkb3duIHdyYXBwZXJcblx0XHRpZiAoIXRoaXMuYXBwZW5kSW5saW5lKSB7XG5cdFx0XHRjb25zdCB0YXJnZXQgPSB0aGlzLmRyb3Bkb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblx0XHRcdHRoaXMudmlzaWJpbGl0eVN1YnNjcmlwdGlvbiA9IHRoaXMuZWxlbWVudFNlcnZpY2Vcblx0XHRcdFx0LnZpc2liaWxpdHkodGFyZ2V0LCBwYXJlbnQpXG5cdFx0XHRcdC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuXHRcdFx0XHRcdGlmICghdmFsdWUudmlzaWJsZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0dGhpcy5fYXBwZW5kVG9Cb2R5KCk7XG5cdFx0fVxuXG5cdFx0Ly8gc2V0IHRoZSBkcm9wZG93biBtZW51IHRvIGRyb3AgdXAgaWYgaXQncyBuZWFyIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlblxuXHRcdC8vIHNldFRpbWVvdXQgbGV0cyB1cyBtZWFzdXJlIGFmdGVyIGl0J3MgdmlzaWJsZSBpbiB0aGUgRE9NXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5kcm9wVXAgPT09IG51bGwgfHwgdGhpcy5kcm9wVXAgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aGlzLl9kcm9wVXAgPSB0aGlzLl9zaG91bGREcm9wVXAoKTtcblx0XHRcdH1cblx0XHR9LCAwKTtcblxuXHRcdC8vIHdlIGJpbmQgbm9vcCB0byBkb2N1bWVudC5ib2R5LmZpcnN0RWxlbWVudENoaWxkIHRvIGFsbG93IHNhZmFyaSB0byBmaXJlIGV2ZW50c1xuXHRcdC8vIGZyb20gZG9jdW1lbnQuIFRoZW4gd2UgdW5iaW5kIGV2ZXJ5dGhpbmcgbGF0ZXIgdG8ga2VlcCB0aGluZ3MgbGlnaHQuXG5cdFx0ZG9jdW1lbnQuYm9keS5maXJzdEVsZW1lbnRDaGlsZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5ub29wLCB0cnVlKTtcblx0XHRkb2N1bWVudC5ib2R5LmZpcnN0RWxlbWVudENoaWxkLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMubm9vcCwgdHJ1ZSk7XG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMub3V0c2lkZUNsaWNrLCB0cnVlKTtcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLm91dHNpZGVLZXksIHRydWUpO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4gdGhpcy52aWV3LmluaXRGb2N1cygpLCAwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb2xsYXBzaW5nIHRoZSBkcm9wZG93biBtZW51IGFuZCByZW1vdmluZyB1bm5lY2Vzc2FyeSBgRXZlbnRMaXN0ZW5lcnNgLlxuXHQgKi9cblx0Y2xvc2VNZW51KCkge1xuXHRcdC8vIHJldHVybiBlYXJseSBpZiB0aGUgbWVudSBpcyBhbHJlYWR5IGNsb3NlZFxuXHRcdGlmICh0aGlzLm1lbnVJc0Nsb3NlZCkgeyByZXR1cm47IH1cblx0XHR0aGlzLm1lbnVJc0Nsb3NlZCA9IHRydWU7XG5cdFx0dGhpcy5jaGVja0ZvclJlb3JkZXIoKTtcblx0XHR0aGlzLm9uQ2xvc2UuZW1pdCgpO1xuXHRcdHRoaXMuY2xvc2UuZW1pdCgpO1xuXG5cdFx0Ly8gZm9jdXMgdGhlIHRyaWdnZXIgYnV0dG9uIHdoZW4gd2UgY2xvc2UgLi4uXG5cdFx0dGhpcy5kcm9wZG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cblx0XHQvLyByZW1vdmUgdGhlIGNvbmRpdGlvbmFsIG9uY2UgdGhpcyBhcGkgaXMgc2V0dGxlZCBhbmQgcGFydCBvZiBhYnN0cmFjdC1kcm9wZG93bi12aWV3LmNsYXNzXG5cdFx0aWYgKHRoaXMudmlld1tcImRpc2FibGVTY3JvbGxcIl0pIHtcblx0XHRcdHRoaXMudmlld1tcImRpc2FibGVTY3JvbGxcIl0oKTtcblx0XHR9XG5cblx0XHQvLyBtb3ZlIHRoZSBsaXN0IGJhY2sgaW4gdGhlIGNvbXBvbmVudCBvbiBjbG9zZVxuXHRcdGlmICghdGhpcy5hcHBlbmRJbmxpbmUpIHtcblx0XHRcdHRoaXMudmlzaWJpbGl0eVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXHRcdFx0dGhpcy5fYXBwZW5kVG9Ecm9wZG93bigpO1xuXHRcdH1cblx0XHRkb2N1bWVudC5ib2R5LmZpcnN0RWxlbWVudENoaWxkLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLm5vb3AsIHRydWUpO1xuXHRcdGRvY3VtZW50LmJvZHkuZmlyc3RFbGVtZW50Q2hpbGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5ub29wLCB0cnVlKTtcblx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5vdXRzaWRlQ2xpY2ssIHRydWUpO1xuXHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMub3V0c2lkZUtleSwgdHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udHJvbHMgdG9nZ2xpbmcgbWVudSBzdGF0ZXMgYmV0d2VlbiBvcGVuL2V4cGFuZGVkIGFuZCBjbG9zZWQvY29sbGFwc2VkLlxuXHQgKi9cblx0dG9nZ2xlTWVudSgpIHtcblx0XHRpZiAodGhpcy5tZW51SXNDbG9zZWQpIHtcblx0XHRcdHRoaXMub3Blbk1lbnUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5jbG9zZU1lbnUoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgaXNUZW1wbGF0ZSh2YWx1ZSkge1xuXHRcdHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuXHR9XG5cblx0aGFuZGxlRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcblx0XHR0aGlzLl9pc0ZvY3VzZWQgPSBldmVudC50eXBlID09PSBcImZvY3VzXCI7XG5cdFx0aWYgKGV2ZW50LnR5cGUgPT09IFwiYmx1clwiKSB7XG5cdFx0XHR0aGlzLm9uQmx1cigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDb250cm9scyB3aGVuIGl0J3MgbmVlZGVkIHRvIGFwcGx5IHRoZSBzZWxlY3Rpb24gZmVlZGJhY2tcblx0ICovXG5cdHByb3RlY3RlZCBjaGVja0ZvclJlb3JkZXIoKSB7XG5cdFx0Y29uc3QgdG9wQWZ0ZXJSZW9wZW4gPSB0aGlzLm1lbnVJc0Nsb3NlZCAmJiB0aGlzLnNlbGVjdGlvbkZlZWRiYWNrID09PSBcInRvcC1hZnRlci1yZW9wZW5cIjtcblx0XHRpZiAoKHRoaXMudHlwZSA9PT0gXCJtdWx0aVwiKSAmJiAodG9wQWZ0ZXJSZW9wZW4gfHwgdGhpcy5zZWxlY3Rpb25GZWVkYmFjayA9PT0gXCJ0b3BcIikpIHtcblx0XHRcdHRoaXMudmlldy5yZW9yZGVyU2VsZWN0ZWQoKTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==