@oneteme/jquery-organizer 0.0.6 → 0.0.7

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.
@@ -22,13 +22,7 @@ export class OrganizerButtonComponent {
22
22
  this.fieldDataCache = new Map();
23
23
  this.destroy$ = new Subject();
24
24
  this.destroyed = false;
25
- }
26
- ngOnInit() {
27
- console.debug('[OrganizerButton] Initialized', {
28
- configFields: this.config?.fields?.length ?? 0,
29
- hasState: !!this.state,
30
- hideMenuValues: this.hideMenuValues
31
- });
25
+ this.sliceRequestId = 0;
32
26
  }
33
27
  ngOnDestroy() {
34
28
  this.destroyed = true;
@@ -48,27 +42,27 @@ export class OrganizerButtonComponent {
48
42
  return `${visible}/${total}`;
49
43
  }
50
44
  onFieldToggle(fieldId, visible) {
51
- console.debug('[OrganizerButton] Field toggled', { fieldId, visible });
52
- const visibleFields = this.state?.visibleFields || [];
53
- const updated = visible
54
- ? [...visibleFields, fieldId]
55
- : visibleFields.filter(f => f !== fieldId);
45
+ const current = this.state?.visibleFields
46
+ ?? (this.config.fields ?? []).filter(f => f.visible !== false).map(f => f.id);
47
+ let updated;
48
+ if (visible) {
49
+ updated = current.includes(fieldId) ? current : [...current, fieldId];
50
+ }
51
+ else {
52
+ updated = current.filter(f => f !== fieldId);
53
+ }
56
54
  this.emitChange('fieldToggled', { visibleFields: updated });
57
55
  }
58
56
  onXFieldSelect(fieldId) {
59
- console.debug('[OrganizerButton] X field selected', { fieldId, current: this.state?.selectedX });
60
57
  // Évite une requête inutile si le X est déjà sélectionné
61
58
  if (this.state?.selectedX === fieldId) {
62
- console.debug('[OrganizerButton] X field already selected, skipping emit');
63
59
  return;
64
60
  }
65
61
  this.emitChange('xSelected', { selectedX: fieldId });
66
62
  }
67
63
  onYFieldSelect(fieldId) {
68
- console.debug('[OrganizerButton] Y field selected', { fieldId, current: this.state?.selectedY });
69
64
  // Évite une requête inutile si le Y est déjà sélectionné
70
65
  if (this.state?.selectedY === fieldId) {
71
- console.debug('[OrganizerButton] Y field already selected, skipping emit');
72
66
  return;
73
67
  }
74
68
  this.emitChange('ySelected', {
@@ -77,10 +71,8 @@ export class OrganizerButtonComponent {
77
71
  });
78
72
  }
79
73
  onYAggregateSelect(yFieldId, aggregateId) {
80
- console.debug('[OrganizerButton] Y aggregate selected', { yFieldId, aggregateId, current: this.state?.selectedYAggregate });
81
74
  // Évite une requête inutile si l'aggregate est déjà sélectionné
82
75
  if (this.state?.selectedYAggregate === aggregateId && this.state?.selectedY === yFieldId) {
83
- console.debug('[OrganizerButton] Y aggregate already selected, skipping emit');
84
76
  return;
85
77
  }
86
78
  this.emitChange('ySelected', {
@@ -89,7 +81,6 @@ export class OrganizerButtonComponent {
89
81
  });
90
82
  }
91
83
  onGroupBySelect(groupId) {
92
- console.debug('[OrganizerButton] Group by selected', { groupId });
93
84
  const current = this.state?.selectedGroupBy;
94
85
  this.emitChange('groupBySelected', { selectedGroupBy: current === groupId ? undefined : groupId });
95
86
  }
@@ -100,7 +91,6 @@ export class OrganizerButtonComponent {
100
91
  this.emitChange('chartTypeSelected', { selectedChartType: chartType });
101
92
  }
102
93
  onTemplateSelect(templateId) {
103
- console.debug('[OrganizerButton] Template selected', { templateId });
104
94
  if (!this.config.templates?.length)
105
95
  return;
106
96
  const template = this.config.templates?.find(t => t.id === templateId);
@@ -111,7 +101,6 @@ export class OrganizerButtonComponent {
111
101
  this.syncSliceState(newState.selectedSlices);
112
102
  }
113
103
  onSliceClick(sliceId) {
114
- console.debug('[OrganizerButton] Slice clicked', { sliceId });
115
104
  if (this.config.onSliceClick) {
116
105
  this.config.onSliceClick();
117
106
  }
@@ -135,6 +124,10 @@ export class OrganizerButtonComponent {
135
124
  });
136
125
  }
137
126
  syncSliceState(selectedSlices, onLoaded) {
127
+ // Une nouvelle demande annule la précédente : seule la réponse la plus récente est prise en compte.
128
+ const requestId = ++this.sliceRequestId;
129
+ this.sliceSubscription?.unsubscribe();
130
+ this.sliceSubscription = undefined;
138
131
  const sliceId = selectedSlices?.[0];
139
132
  if (!sliceId || !this.config.onFetchSliceData) {
140
133
  this.sliceStateChange.emit(null);
@@ -149,7 +142,7 @@ export class OrganizerButtonComponent {
149
142
  }
150
143
  const result = this.config.onFetchSliceData(sliceId);
151
144
  const handleData = (tasks) => {
152
- if (this.destroyed)
145
+ if (this.destroyed || requestId !== this.sliceRequestId)
153
146
  return;
154
147
  this.sliceStateChange.emit({
155
148
  sliceConfigs: [{ title: slice.label ?? sliceId, columnKey: sliceId }],
@@ -159,14 +152,14 @@ export class OrganizerButtonComponent {
159
152
  onLoaded?.();
160
153
  };
161
154
  const handleError = (error) => {
162
- if (this.destroyed)
155
+ if (this.destroyed || requestId !== this.sliceRequestId)
163
156
  return;
164
157
  console.error('[OrganizerButton] Slice data loading failed', error);
165
158
  this.sliceStateChange.emit(null);
166
159
  onLoaded?.();
167
160
  };
168
161
  if (isObservable(result)) {
169
- result.pipe(takeUntil(this.destroy$)).subscribe({ next: handleData, error: handleError });
162
+ this.sliceSubscription = result.pipe(takeUntil(this.destroy$)).subscribe({ next: handleData, error: handleError });
170
163
  }
171
164
  else {
172
165
  void result.then(handleData, handleError);
@@ -386,4 +379,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
386
379
  type: ViewChild,
387
380
  args: ['mainMenuTrigger']
388
381
  }] } });
389
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9vcmdhbml6ZXItYnV0dG9uL29yZ2FuaXplci1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktb3JnYW5pemVyL3NyYy9saWIvb3JnYW5pemVyLWJ1dHRvbi9vcmdhbml6ZXItYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQWEsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BLLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7O0FBVzdELE1BQU0sT0FBTyx3QkFBd0I7SUFlbkMsWUFBb0Is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TCxHQUFHLGVBQWU7Z0JBQ2xCLGdCQUFnQixFQUFFLHlCQUF5QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQ2pHO1lBQ0QsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0FyWVUsd0JBQXdCO21HQUF4Qix3QkFBd0IsNlZDdEJyQyw4eWdCQTZUQSxreEpEOVNhLFlBQVksK1BBQUUsZUFBZSw4QkFBRSxhQUFhLG1MQUFFLGFBQWEsd2VBQUUsZ0JBQWdCOzs0RkFPN0Usd0JBQXdCO2tCQVRwQyxTQUFTO2lDQUNJLElBQUksV0FDUCxDQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBRSxZQUNoRixrQkFBa0IsaUJBR2IsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTt3R0FHdEMsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQVF1QixlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUsIE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBTdWJqZWN0LCBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgT3JnYW5pemVyQ29uZmlnLCBPcmdhbml6ZXJCdXR0b25FdmVudCwgT3JnYW5pemVyU2xpY2VTdGF0ZSwgT3JnYW5pemVyU3RhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3JnYW5pemVyU3RhdGUsIHJlc29sdmVNYXRjaGluZ1RlbXBsYXRlSWQgfSBmcm9tICcuLi9tb2RlbHMvb3JnYW5pemVyLXV0aWxzJztcbmltcG9ydCB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gJy4vdGVtcGxhdGUtbWFuYWdlci51dGlsaXR5JztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFsgQ29tbW9uTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdE1lbnVNb2R1bGUsIE1hdERpdmlkZXJNb2R1bGUgXSxcbiAgc2VsZWN0b3I6ICdvcmdhbml6ZXItYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL29yZ2FuaXplci1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vcmdhbml6ZXItYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE9yZ2FuaXplckJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgY29uZmlnITogT3JnYW5pemVyQ29uZmlnO1xuICBASW5wdXQoKSBzdGF0ZT86IE9yZ2FuaXplclN0YXRlO1xuICBASW5wdXQoKSBoaWRlTWVudVZhbHVlcyA9IGZhbHNlO1xuICBAT3V0cHV0KCkgdmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8T3JnYW5pemVyQnV0dG9uRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBzbGljZVN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxPcmdhbml6ZXJTbGljZVN0YXRlIHwgbnVsbD4oKTtcblxuICBsb2FkaW5nRmllbGRJZD86IHN0cmluZztcblxuICBwcml2YXRlIGZpZWxkRGF0YUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIGFueVtdPigpO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdtYWluTWVudVRyaWdnZXInKSBtYWluTWVudVRyaWdnZXI/OiBNYXRNZW51VHJpZ2dlcjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc29sZS5kZWJ1ZygnW09yZ2FuaXplckJ1dHRvbl0gSW5pdGlhbGl6ZWQnLCB7XG4gICAgICBjb25maWdGaWVsZHM6IHRoaXMuY29uZmlnPy5maWVsZHM/Lmxlbmd0aCA/PyAwLFxuICAgICAgaGFzU3RhdGU6ICEhdGhpcy5zdGF0ZSxcbiAgICAgIGhpZGVNZW51VmFsdWVzOiB0aGlzLmhpZGVNZW51VmFsdWVzXG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgaXNGaWVsZFZpc2libGUoZmllbGRJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmlzaWJsZSA9IHRoaXMuc3RhdGU/LnZpc2libGVGaWVsZHM7XG4gICAgaWYgKCF2aXNpYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZmllbGRzPy5maW5kKGYgPT4gZi5pZCA9PT0gZmllbGRJZCk/LnZpc2libGUgIT09IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZS5pbmNsdWRlcyhmaWVsZElkKTtcbiAgfVxuXG4gIGZpZWxkc1N1bW1hcnkoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMuY29uZmlnLmZpZWxkcz8ubGVuZ3RoID8/IDA7XG4gICAgY29uc3QgdmlzaWJsZSA9IHRoaXMuc3RhdGU/LnZpc2libGVGaWVsZHM/Lmxlbmd0aCA/PyB0b3RhbDtcbiAgICByZXR1cm4gYCR7dmlzaWJsZX0vJHt0b3RhbH1gO1xuICB9XG5cbiAgb25GaWVsZFRvZ2dsZShmaWVsZElkOiBzdHJpbmcsIHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbT3JnYW5pemVyQnV0dG9uXSBGaWVsZCB0b2dnbGVkJywgeyBmaWVsZElkLCB2aXNpYmxlIH0pO1xuICAgIGNvbnN0IHZpc2libGVGaWVsZHMgPSB0aGlzLnN0YXRlPy52aXNpYmxlRmllbGRzIHx8IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSB2aXNpYmxlXG4gICAgICA/IFsuLi52aXNpYmxlRmllbGRzLCBmaWVsZElkXVxuICAgICAgOiB2aXNpYmxlRmllbGRzLmZpbHRlcihmID0+IGYgIT09IGZpZWxkSWQpO1xuICAgIHRoaXMuZW1pdENoYW5nZSgnZmllbGRUb2dnbGVkJywgeyB2aXNpYmxlRmllbGRzOiB1cGRhdGVkIH0pO1xuICB9XG5cbiAgb25YRmllbGRTZWxlY3QoZmllbGRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5kZWJ1ZygnW09yZ2FuaXplckJ1dHRvbl0gWCBmaWVsZCBzZWxlY3RlZCcsIHsgZmllbGRJZCwgY3VycmVudDogdGhpcy5zdGF0ZT8uc2VsZWN0ZWRYIH0pO1xuICAgIC8vIMOJdml0ZSB1bmUgcmVxdcOqdGUgaW51dGlsZSBzaSBsZSBYIGVzdCBkw6lqw6Agc8OpbGVjdGlvbm7DqVxuICAgIGlmICh0aGlzLnN0YXRlPy5zZWxlY3RlZFggPT09IGZpZWxkSWQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tPcmdhbml6ZXJCdXR0b25dIFggZmllbGQgYWxyZWFkeSBzZWxlY3RlZCwgc2tpcHBpbmcgZW1pdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVtaXRDaGFuZ2UoJ3hTZWxlY3RlZCcsIHsgc2VsZWN0ZWRYOiBmaWVsZElkIH0pO1xuICB9XG5cbiAgb25ZRmllbGRTZWxlY3QoZmllbGRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5kZWJ1ZygnW09yZ2FuaXplckJ1dHRvbl0gWSBmaWVsZCBzZWxlY3RlZCcsIHsgZmllbGRJZCwgY3VycmVudDogdGhpcy5zdGF0ZT8uc2VsZWN0ZWRZIH0pO1xuICAgIC8vIMOJdml0ZSB1bmUgcmVxdcOqdGUgaW51dGlsZSBzaSBsZSBZIGVzdCBkw6lqw6Agc8OpbGVjdGlvbm7DqVxuICAgIGlmICh0aGlzLnN0YXRlPy5zZWxlY3RlZFkgPT09IGZpZWxkSWQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tPcmdhbml6ZXJCdXR0b25dIFkgZmllbGQgYWxyZWFkeSBzZWxlY3RlZCwgc2tpcHBpbmcgZW1pdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVtaXRDaGFuZ2UoJ3lTZWxlY3RlZCcsIHtcbiAgICAgIHNlbGVjdGVkWTogZmllbGRJZCxcbiAgICAgIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH1cblxuICBvbllBZ2dyZWdhdGVTZWxlY3QoeUZpZWxkSWQ6IHN0cmluZywgYWdncmVnYXRlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnNvbGUuZGVidWcoJ1tPcmdhbml6ZXJCdXR0b25dIFkgYWdncmVnYXRlIHNlbGVjdGVkJywgeyB5RmllbGRJZCwgYWdncmVnYXRlSWQsIGN1cnJlbnQ6IHRoaXMuc3RhdGU/LnNlbGVjdGVkWUFnZ3JlZ2F0ZSB9KTtcbiAgICAvLyDDiXZpdGUgdW5lIHJlcXXDqnRlIGludXRpbGUgc2kgbCdhZ2dyZWdhdGUgZXN0IGTDqWrDoCBzw6lsZWN0aW9ubsOpXG4gICAgaWYgKHRoaXMuc3RhdGU/LnNlbGVjdGVkWUFnZ3JlZ2F0ZSA9PT0gYWdncmVnYXRlSWQgJiYgdGhpcy5zdGF0ZT8uc2VsZWN0ZWRZID09PSB5RmllbGRJZCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW09yZ2FuaXplckJ1dHRvbl0gWSBhZ2dyZWdhdGUgYWxyZWFkeSBzZWxlY3RlZCwgc2tpcHBpbmcgZW1pdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVtaXRDaGFuZ2UoJ3lTZWxlY3RlZCcsIHtcbiAgICAgIHNlbGVjdGVkWTogeUZpZWxkSWQsXG4gICAgICBzZWxlY3RlZFlBZ2dyZWdhdGU6IGFnZ3JlZ2F0ZUlkXG4gICAgfSk7XG4gIH1cblxuICBvbkdyb3VwQnlTZWxlY3QoZ3JvdXBJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5kZWJ1ZygnW09yZ2FuaXplckJ1dHRvbl0gR3JvdXAgYnkgc2VsZWN0ZWQnLCB7IGdyb3VwSWQgfSk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc3RhdGU/LnNlbGVjdGVkR3JvdXBCeTtcbiAgICB0aGlzLmVtaXRDaGFuZ2UoJ2dyb3VwQnlTZWxlY3RlZCcsIHsgc2VsZWN0ZWRHcm91cEJ5OiBjdXJyZW50ID09PSBncm91cElkID8gdW5kZWZpbmVkIDogZ3JvdXBJZCB9KTtcbiAgfVxuXG4gIG9uQ2hhcnRUeXBlU2VsZWN0KGNoYXJ0VHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5jb25maWcuY2hhcnRUeXBlcz8uZmluZCh0eXBlID0+IHR5cGUuaWQgPT09IGNoYXJ0VHlwZSk7XG4gICAgaWYgKCFvcHRpb24gfHwgb3B0aW9uLmRpc2FibGVkIHx8IHRoaXMuc3RhdGU/LnNlbGVjdGVkQ2hhcnRUeXBlID09PSBjaGFydFR5cGUpIHJldHVybjtcbiAgICB0aGlzLmVtaXRDaGFuZ2UoJ2NoYXJ0VHlwZVNlbGVjdGVkJywgeyBzZWxlY3RlZENoYXJ0VHlwZTogY2hhcnRUeXBlIH0pO1xuICB9XG5cbiAgb25UZW1wbGF0ZVNlbGVjdCh0ZW1wbGF0ZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbT3JnYW5pemVyQnV0dG9uXSBUZW1wbGF0ZSBzZWxlY3RlZCcsIHsgdGVtcGxhdGVJZCB9KTtcbiAgICBpZiAoIXRoaXMuY29uZmlnLnRlbXBsYXRlcz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuY29uZmlnLnRlbXBsYXRlcz8uZmluZCh0ID0+IHQuaWQgPT09IHRlbXBsYXRlSWQpO1xuICAgIGlmICghdGVtcGxhdGUpIHJldHVybjtcblxuICAgIGNvbnN0IG5ld1N0YXRlID0gVGVtcGxhdGVNYW5hZ2VyLmFwcGx5VGVtcGxhdGUodGVtcGxhdGUsIHRoaXMuc3RhdGUsIHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmVtaXRDaGFuZ2UoJ3RlbXBsYXRlU2VsZWN0ZWQnLCBuZXdTdGF0ZSk7XG4gICAgdGhpcy5zeW5jU2xpY2VTdGF0ZShuZXdTdGF0ZS5zZWxlY3RlZFNsaWNlcyk7XG4gIH1cblxuICBvblNsaWNlQ2xpY2soc2xpY2VJZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnNvbGUuZGVidWcoJ1tPcmdhbml6ZXJCdXR0b25dIFNsaWNlIGNsaWNrZWQnLCB7IHNsaWNlSWQgfSk7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9uU2xpY2VDbGljaykge1xuICAgICAgdGhpcy5jb25maWcub25TbGljZUNsaWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRTbGljZXMgPSB0aGlzLnN0YXRlPy5zZWxlY3RlZFNsaWNlcyB8fCBbXTtcbiAgICBsZXQgdXBkYXRlZDogc3RyaW5nW107XG4gICAgaWYgKHNsaWNlSWQpIHtcbiAgICAgIHVwZGF0ZWQgPSBzZWxlY3RlZFNsaWNlcy5pbmNsdWRlcyhzbGljZUlkKVxuICAgICAgICA/IHNlbGVjdGVkU2xpY2VzLmZpbHRlcihpZCA9PiBpZCAhPT0gc2xpY2VJZClcbiAgICAgICAgOiBbLi4uc2VsZWN0ZWRTbGljZXMsIHNsaWNlSWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGVkID0gc2VsZWN0ZWRTbGljZXM7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZWQubGVuZ3RoID09PSAwIHx8ICFzbGljZUlkIHx8ICF0aGlzLmNvbmZpZy5vbkZldGNoU2xpY2VEYXRhKSB7XG4gICAgICB0aGlzLnNsaWNlU3RhdGVDaGFuZ2UuZW1pdChudWxsKTtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgnc2xpY2VTZWxlY3RlZCcsIHsgc2VsZWN0ZWRTbGljZXM6IHVwZGF0ZWQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zeW5jU2xpY2VTdGF0ZSh1cGRhdGVkLCAoKSA9PiB7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UoJ3NsaWNlU2VsZWN0ZWQnLCB7IHNlbGVjdGVkU2xpY2VzOiB1cGRhdGVkIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jU2xpY2VTdGF0ZShzZWxlY3RlZFNsaWNlczogc3RyaW5nW10gfCB1bmRlZmluZWQsIG9uTG9hZGVkPzogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHNsaWNlSWQgPSBzZWxlY3RlZFNsaWNlcz8uWzBdO1xuICAgIGlmICghc2xpY2VJZCB8fCAhdGhpcy5jb25maWcub25GZXRjaFNsaWNlRGF0YSkge1xuICAgICAgdGhpcy5zbGljZVN0YXRlQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgICBvbkxvYWRlZD8uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2xpY2UgPSB0aGlzLmNvbmZpZy5zbGljZXM/LmZpbmQocyA9PiBzLmlkID09PSBzbGljZUlkKTtcbiAgICBpZiAoIXNsaWNlKSB7XG4gICAgICB0aGlzLnNsaWNlU3RhdGVDaGFuZ2UuZW1pdChudWxsKTtcbiAgICAgIG9uTG9hZGVkPy4oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNvbmZpZy5vbkZldGNoU2xpY2VEYXRhKHNsaWNlSWQpO1xuICAgIGNvbnN0IGhhbmRsZURhdGEgPSAodGFza3M6IGFueVtdKSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgIHRoaXMuc2xpY2VTdGF0ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgc2xpY2VDb25maWdzOiBbeyB0aXRsZTogc2xpY2UubGFiZWwgPz8gc2xpY2VJZCwgY29sdW1uS2V5OiBzbGljZUlkIH1dLFxuICAgICAgICB0YXNrcyxcbiAgICAgICAgZmlsdGVyQXBwbGllZDogZmFsc2UgIC8vIFBhbmVsIHZpZW50IGQnw6p0cmUgb3V2ZXJ0LCBwYXMgZGUgZmlsdHJlIHPDqWxlY3Rpb25uw6kgZW5jb3JlXG4gICAgICB9KTtcbiAgICAgIG9uTG9hZGVkPy4oKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUVycm9yID0gKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tPcmdhbml6ZXJCdXR0b25dIFNsaWNlIGRhdGEgbG9hZGluZyBmYWlsZWQnLCBlcnJvcik7XG4gICAgICB0aGlzLnNsaWNlU3RhdGVDaGFuZ2UuZW1pdChudWxsKTtcbiAgICAgIG9uTG9hZGVkPy4oKTtcbiAgICB9O1xuXG4gICAgaWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XG4gICAgICByZXN1bHQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7IG5leHQ6IGhhbmRsZURhdGEsIGVycm9yOiBoYW5kbGVFcnJvciB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm9pZCByZXN1bHQudGhlbihoYW5kbGVEYXRhLCBoYW5kbGVFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZEZpZWxkRGF0YShmaWVsZElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5maWVsZERhdGFDYWNoZS5oYXMoZmllbGRJZCkpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuY29uZmlnLm9uRmV0Y2hGaWVsZERhdGEpIHJldHVybjtcblxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWcuZmllbGRzPy5maW5kKGYgPT4gZi5pZCA9PT0gZmllbGRJZCk7XG4gICAgaWYgKCFmaWVsZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5sb2FkaW5nRmllbGRJZCA9IGZpZWxkSWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuY29uZmlnLm9uRmV0Y2hGaWVsZERhdGEoZmllbGRJZCk7XG4gICAgICB0aGlzLmZpZWxkRGF0YUNhY2hlLnNldChmaWVsZElkLCBkYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignW09yZ2FuaXplckJ1dHRvbl0gRmllbGQgZGF0YSBsb2FkaW5nIGZhaWxlZCcsIGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2FkaW5nRmllbGRJZCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG9uRXhwb3J0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZy5vbkV4cG9ydCkgdGhpcy5jb25maWcub25FeHBvcnQoKTtcbiAgICB0aGlzLm1haW5NZW51VHJpZ2dlcj8uY2xvc2VNZW51KCk7XG4gIH1cblxuICBvbkV4cG9ydFZpc3VhbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcub25FeHBvcnRWaXN1YWwpIHRoaXMuY29uZmlnLm9uRXhwb3J0VmlzdWFsKCk7XG4gICAgdGhpcy5tYWluTWVudVRyaWdnZXI/LmNsb3NlTWVudSgpO1xuICB9XG5cbiAgb25FeHBvcnREYXRhKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZy5vbkV4cG9ydERhdGEpIHRoaXMuY29uZmlnLm9uRXhwb3J0RGF0YSgpO1xuICAgIHRoaXMubWFpbk1lbnVUcmlnZ2VyPy5jbG9zZU1lbnUoKTtcbiAgfVxuXG4gIGhhc0V4cG9ydFN1Yk1lbnUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuY29uZmlnLm9uRXhwb3J0VmlzdWFsIHx8IHRoaXMuY29uZmlnLm9uRXhwb3J0RGF0YSk7XG4gIH1cblxuICBpc0NvcHlBY3Rpb25WaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuY29uZmlnLm9uQ29weVZpc3VhbCAmJiB0aGlzLmNvbmZpZy5hY3Rpb25zPy5zaG93Q29weSAhPT0gZmFsc2U7XG4gIH1cblxuICBpc0Z1bGxzY3JlZW5BY3Rpb25WaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuY29uZmlnLm9uVG9nZ2xlRnVsbHNjcmVlbiAmJiB0aGlzLmNvbmZpZy5hY3Rpb25zPy5zaG93RnVsbHNjcmVlbiAhPT0gZmFsc2U7XG4gIH1cblxuICBoYXNBY3Rpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5zaG93QWN0aW9ucyA9PT0gdHJ1ZSAmJiAodGhpcy5pc0NvcHlBY3Rpb25WaXNpYmxlKCkgfHwgdGhpcy5pc0Z1bGxzY3JlZW5BY3Rpb25WaXNpYmxlKCkpO1xuICB9XG5cbiAgaGFzTWVudUl0ZW1zQmVmb3JlQWN0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNDaGFydEZpZWxkcygpXG4gICAgICB8fCB0aGlzLmhhc1RhYmxlRmllbGRzKClcbiAgICAgIHx8ICh0aGlzLmNvbmZpZy5jaGFydFR5cGVzPy5sZW5ndGggPz8gMCkgPiAwXG4gICAgICB8fCAodGhpcy5jb25maWcuZ3JvdXBzPy5sZW5ndGggPz8gMCkgPiAwXG4gICAgICB8fCAodGhpcy5jb25maWcuc2xpY2VzPy5sZW5ndGggPz8gMCkgPiAwXG4gICAgICB8fCAodGhpcy5jb25maWcudGVtcGxhdGVzPy5sZW5ndGggPz8gMCkgPiAwO1xuICB9XG5cbiAgaGFzT3RoZXJNZW51SXRlbXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzTWVudUl0ZW1zQmVmb3JlQWN0aW9ucygpXG4gICAgICB8fCAhIXRoaXMuY29uZmlnLnNob3dFeHBvcnRcbiAgICAgIHx8ICEhdGhpcy5jb25maWcuc2hvd1ByZWZlcmVuY2VzXG4gICAgICB8fCB0aGlzLmhhc1N3aXRjaFZpZXcoKTtcbiAgfVxuXG4gIGFjdGlvbnNMYWJlbCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmNvbmZpZy5hY3Rpb25zPy5sYWJlbCkgcmV0dXJuIHRoaXMuY29uZmlnLmFjdGlvbnMubGFiZWw7XG4gICAgcmV0dXJuIHRoaXMuaXNDb3B5QWN0aW9uVmlzaWJsZSgpICYmIHRoaXMuaXNGdWxsc2NyZWVuQWN0aW9uVmlzaWJsZSgpID8gJ0FjdGlvbnMnIDogJ0FjdGlvbic7XG4gIH1cblxuICBvbkNvcHlWaXN1YWwoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcub25Db3B5VmlzdWFsPy4oKTtcbiAgICB0aGlzLm1haW5NZW51VHJpZ2dlcj8uY2xvc2VNZW51KCk7XG4gIH1cblxuICBvblRvZ2dsZUZ1bGxzY3JlZW4oKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcub25Ub2dnbGVGdWxsc2NyZWVuPy4oKTtcbiAgICB0aGlzLm1haW5NZW51VHJpZ2dlcj8uY2xvc2VNZW51KCk7XG4gIH1cblxuICBoYXNTd2l0Y2hWaWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuY29uZmlnLnN3aXRjaFZpZXc7XG4gIH1cblxuICBvblN3aXRjaFZpZXcoKTogdm9pZCB7XG4gICAgY29uc3Qgc3YgPSB0aGlzLmNvbmZpZy5zd2l0Y2hWaWV3O1xuICAgIGlmICghc3YpIHJldHVybjtcbiAgICBjb25zdCBuZXdWaWV3OiAnY2hhcnQnIHwgJ3RhYmxlJyA9IHN2LmN1cnJlbnRWaWV3ID09PSAnY2hhcnQnID8gJ3RhYmxlJyA6ICdjaGFydCc7XG4gICAgc3Yub25Td2l0Y2gobmV3Vmlldyk7XG4gICAgdGhpcy5lbWl0Q2hhbmdlKCd2aWV3U3dpdGNoZWQnLCB7IHZpZXdNb2RlOiBuZXdWaWV3IH0pO1xuICAgIHRoaXMubWFpbk1lbnVUcmlnZ2VyPy5jbG9zZU1lbnUoKTtcbiAgfVxuXG4gIG9uUHJlZmVyZW5jZXNFZGl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZy5vblByZWZlcmVuY2VzRWRpdCkgdGhpcy5jb25maWcub25QcmVmZXJlbmNlc0VkaXQoKTtcbiAgICB0aGlzLm1haW5NZW51VHJpZ2dlcj8uY2xvc2VNZW51KCk7XG4gIH1cblxuICBvblByZWZlcmVuY2VzU2F2ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcub25QcmVmZXJlbmNlc1NhdmUpIHRoaXMuY29uZmlnLm9uUHJlZmVyZW5jZXNTYXZlKCk7XG4gICAgdGhpcy5tYWluTWVudVRyaWdnZXI/LmNsb3NlTWVudSgpO1xuICB9XG5cbiAgb25QcmVmZXJlbmNlc0NsZWFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZy5vblByZWZlcmVuY2VzQ2xlYXIpIHRoaXMuY29uZmlnLm9uUHJlZmVyZW5jZXNDbGVhcigpO1xuICAgIHRoaXMubWFpbk1lbnVUcmlnZ2VyPy5jbG9zZU1lbnUoKTtcbiAgfVxuXG4gIG9uUmVzZXQoKTogdm9pZCB7XG4gICAgY29uc3QgdmlzaWJsZUZpZWxkcyA9IHRoaXMuY29uZmlnLmZpZWxkc1xuICAgICAgPy5maWx0ZXIoZmllbGQgPT4gZmllbGQudmlzaWJsZSAhPT0gZmFsc2UpXG4gICAgICAubWFwKGZpZWxkID0+IGZpZWxkLmlkKTtcbiAgICB0aGlzLmVtaXRDaGFuZ2UoJ3Jlc2V0Jywge1xuICAgICAgdmlzaWJsZUZpZWxkcyxcbiAgICAgIHNlbGVjdGVkWDogdW5kZWZpbmVkLFxuICAgICAgc2VsZWN0ZWRZOiB1bmRlZmluZWQsXG4gICAgICBzZWxlY3RlZFlBZ2dyZWdhdGU6IHVuZGVmaW5lZCxcbiAgICAgIHNlbGVjdGVkR3JvdXBCeTogdW5kZWZpbmVkLFxuICAgICAgc2VsZWN0ZWRTbGljZXM6IFtdXG4gICAgfSk7XG4gICAgdGhpcy5tYWluTWVudVRyaWdnZXI/LmNsb3NlTWVudSgpO1xuICB9XG5cbiAgYWN0aXZlWExhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaWQgPSB0aGlzLnN0YXRlPy5zZWxlY3RlZFg7XG4gICAgaWYgKCFpZCkgcmV0dXJuICcnO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy54RmllbGRzPy5maW5kKGYgPT4gZi5pZCA9PT0gaWQpPy5sYWJlbCA/PyBpZDtcbiAgfVxuXG4gIGFjdGl2ZVlMYWJlbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHlJZCA9IHRoaXMuc3RhdGU/LnNlbGVjdGVkWTtcbiAgICBpZiAoIXlJZCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IHlGaWVsZCA9IHRoaXMuY29uZmlnLnlGaWVsZHM/LmZpbmQoZiA9PiBmLmlkID09PSB5SWQpO1xuICAgIGNvbnN0IGJhc2UgPSB5RmllbGQ/LmxhYmVsID8/IHlJZDtcblxuICAgIGlmICh0aGlzLnN0YXRlPy5zZWxlY3RlZFlBZ2dyZWdhdGUpIHtcbiAgICAgIGNvbnN0IGFnZyA9IHlGaWVsZD8uYWdncmVnYXRlcz8uZmluZChhID0+IGEuaWQgPT09IHRoaXMuc3RhdGUhLnNlbGVjdGVkWUFnZ3JlZ2F0ZSk7XG4gICAgICByZXR1cm4gYWdnID8gYCR7YmFzZX0gwrcgJHthZ2cubGFiZWx9YCA6IGJhc2U7XG4gICAgfVxuICAgIHJldHVybiBiYXNlO1xuICB9XG5cbiAgYWN0aXZlR3JvdXBCeUxhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaWQgPSB0aGlzLnN0YXRlPy5zZWxlY3RlZEdyb3VwQnk7XG4gICAgaWYgKCFpZCkgcmV0dXJuICcnO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5ncm91cHM/LmZpbmQoZyA9PiBnLmlkID09PSBpZCk/LmxhYmVsID8/IGlkO1xuICB9XG5cbiAgYWN0aXZlQ2hhcnRUeXBlTGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuc3RhdGU/LnNlbGVjdGVkQ2hhcnRUeXBlO1xuICAgIGlmICghaWQpIHJldHVybiAnJztcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hhcnRUeXBlcz8uZmluZCh0eXBlID0+IHR5cGUuaWQgPT09IGlkKT8ubGFiZWwgPz8gaWQ7XG4gIH1cblxuICBhY3RpdmVTbGljZXNMYWJlbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGlkcyA9IHRoaXMuc3RhdGU/LnNlbGVjdGVkU2xpY2VzO1xuICAgIGlmICghaWRzPy5sZW5ndGgpIHJldHVybiAnJztcbiAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnNsaWNlcz8uZmluZChzID0+IHMuaWQgPT09IGlkc1swXSk/LmxhYmVsID8/IGlkc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGAke2lkcy5sZW5ndGh9IHPDqWxlY3Rpb25uw6lzYDtcbiAgfVxuXG4gIGFjdGl2ZVRlbXBsYXRlTGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuc3RhdGU/LnNlbGVjdGVkVGVtcGxhdGU7XG4gICAgaWYgKCFpZCkgcmV0dXJuICcnO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy50ZW1wbGF0ZXM/LmZpbmQodCA9PiB0LmlkID09PSBpZCk/LmxhYmVsID8/IGlkO1xuICB9XG5cbiAgaGFzQ2hhcnRGaWVsZHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy54RmllbGRzPy5sZW5ndGggPz8gMCkgPiAwIHx8ICh0aGlzLmNvbmZpZy55RmllbGRzPy5sZW5ndGggPz8gMCkgPiAwO1xuICB9XG5cbiAgaGFzQ2hhcnRUeXBlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLmNoYXJ0VHlwZXM/Lmxlbmd0aCA/PyAwKSA+IDA7XG4gIH1cblxuICBoYXNUYWJsZUZpZWxkcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuY29uZmlnLmZpZWxkcz8ubGVuZ3RoID8/IDApID4gMDtcbiAgfVxuXG4gIGlzWUFjdGl2ZSh5RmllbGRJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGU/LnNlbGVjdGVkWSA9PT0geUZpZWxkSWQ7XG4gIH1cblxuICBpc1lBZ2dyZWdhdGVBY3RpdmUoeUZpZWxkSWQ6IHN0cmluZywgYWdncmVnYXRlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlPy5zZWxlY3RlZFkgPT09IHlGaWVsZElkICYmIHRoaXMuc3RhdGU/LnNlbGVjdGVkWUFnZ3JlZ2F0ZSA9PT0gYWdncmVnYXRlSWQ7XG4gIH1cblxuICBpc0NoYXJ0VHlwZUFjdGl2ZShjaGFydFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlPy5zZWxlY3RlZENoYXJ0VHlwZSA9PT0gY2hhcnRUeXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q2hhbmdlKHR5cGU6IE9yZ2FuaXplckJ1dHRvbkV2ZW50Wyd0eXBlJ10sIHN0YXRlVXBkYXRlOiBQYXJ0aWFsPE9yZ2FuaXplclN0YXRlPiB8IE9yZ2FuaXplclN0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgaXNGdWxsU3RhdGUgPSAnc2VsZWN0ZWRYJyBpbiBzdGF0ZVVwZGF0ZSAmJiAnc2VsZWN0ZWRUZW1wbGF0ZScgaW4gc3RhdGVVcGRhdGU7XG4gICAgY29uc3QgcmF3U3RhdGUgPSBpc0Z1bGxTdGF0ZSA/IChzdGF0ZVVwZGF0ZSBhcyBPcmdhbml6ZXJTdGF0ZSkgOiB7IC4uLnRoaXMuc3RhdGUsIC4uLnN0YXRlVXBkYXRlIH07XG4gICAgY29uc3Qgbm9ybWFsaXplZFN0YXRlID0gbm9ybWFsaXplT3JnYW5pemVyU3RhdGUocmF3U3RhdGUsIHRoaXMuY29uZmlnKTtcbiAgICBjb25zdCBldmVudDogT3JnYW5pemVyQnV0dG9uRXZlbnQgPSB7XG4gICAgICB0eXBlLFxuICAgICAgc3RhdGU6IHtcbiAgICAgICAgLi4ubm9ybWFsaXplZFN0YXRlLFxuICAgICAgICBzZWxlY3RlZFRlbXBsYXRlOiByZXNvbHZlTWF0Y2hpbmdUZW1wbGF0ZUlkKHRoaXMuY29uZmlnLnRlbXBsYXRlcywgbm9ybWFsaXplZFN0YXRlLCB0aGlzLmNvbmZpZylcbiAgICAgIH0sXG4gICAgICBzb3VyY2U6ICd1c2VyJ1xuICAgIH07XG4gICAgdGhpcy52aWV3Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG59XG4iLCI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm9yZ2FuaXplci1idG5cIiBbY2xhc3Mub3JnYW5pemVyLWJ0bi0tbGFiZWxlZF09XCIhIWNvbmZpZy5idXR0b25MYWJlbFwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJ2aWV3TWVudVwiICNtYWluTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiIFthdHRyLmFyaWEtbGFiZWxdPVwiY29uZmlnLmJ1dHRvbkxhYmVsIHx8ICdQZXJzb25uYWxpc2VyIGxhIHZ1ZSdcIiBbYXR0ci50aXRsZV09XCJjb25maWcuYnV0dG9uTGFiZWwgfHwgJ1BlcnNvbm5hbGlzZXIgbGEgdnVlJ1wiPlxuICA8bWF0LWljb24gKm5nSWY9XCJjb25maWcuc2hvd0J1dHRvbkljb24gIT09IGZhbHNlXCIgY2xhc3M9XCJvcmdhbml6ZXItYnRuLWljb25cIj57eyBjb25maWcuYnV0dG9uSWNvbiB8fCAnc2V0dGluZ3MnIH19PC9tYXQtaWNvbj5cbiAgPHNwYW4gKm5nSWY9XCJjb25maWcuYnV0dG9uTGFiZWxcIiBjbGFzcz1cIm9yZ2FuaXplci1idG4tbGFiZWxcIj57eyBjb25maWcuYnV0dG9uTGFiZWwgfX08L3NwYW4+XG48L2J1dHRvbj5cblxuPG1hdC1tZW51ICN2aWV3TWVudT1cIm1hdE1lbnVcIiBwYW5lbENsYXNzPVwib3JnYW5pemVyLW1lbnUtcGFuZWxcIj5cblxuICA8IS0tIFR5cGUgLS0+XG4gIDxidXR0b24gKm5nSWY9XCJoYXNDaGFydFR5cGVzKClcIiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJjaGFydFR5cGVzU3ViTWVudVwiIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtdHJpZ2dlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtbGFiZWxcIj5UeXBlPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtdmFsdWVcIiAqbmdJZj1cIiFoaWRlTWVudVZhbHVlcyAmJiBhY3RpdmVDaGFydFR5cGVMYWJlbCgpXCI+e3sgYWN0aXZlQ2hhcnRUeXBlTGFiZWwoKSB9fTwvc3Bhbj5cbiAgPC9idXR0b24+XG5cbiAgPCEtLSBDaGFtcHMgOiBtb2RlIGNoYXJ0IChYICsgWSkgLS0+XG4gIDxidXR0b24gKm5nSWY9XCJoYXNDaGFydEZpZWxkcygpXCIgbWF0LW1lbnUtaXRlbSBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY2hhbXBzU3ViTWVudVwiIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtdHJpZ2dlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtbGFiZWxcIj5DaGFtcHM8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItbWVudS12YWx1ZVwiICpuZ0lmPVwiIWhpZGVNZW51VmFsdWVzICYmIChhY3RpdmVYTGFiZWwoKSB8fCBhY3RpdmVZTGFiZWwoKSlcIj5cbiAgICAgIHt7IGFjdGl2ZVhMYWJlbCgpIH19PG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZVhMYWJlbCgpICYmIGFjdGl2ZVlMYWJlbCgpXCI+IC8gPC9uZy1jb250YWluZXI+e3sgYWN0aXZlWUxhYmVsKCkgfX1cbiAgICA8L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDwhLS0gQ2hhbXBzIDogbW9kZSB0YWJsZSAodG9nZ2xlIGNvbG9ubmVzKSAtLT5cbiAgPGJ1dHRvbiAqbmdJZj1cImhhc1RhYmxlRmllbGRzKClcIiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJmaWVsZHNTdWJNZW51XCIgY2xhc3M9XCJvcmdhbml6ZXItbWVudS10cmlnZ2VyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItbWVudS1sYWJlbFwiPkNoYW1wczwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LXZhbHVlXCIgKm5nSWY9XCIhaGlkZU1lbnVWYWx1ZXNcIj57eyBmaWVsZHNTdW1tYXJ5KCkgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDwhLS0gR3JvdXBlciBwYXIgLS0+XG4gIDxidXR0b24gKm5nSWY9XCJjb25maWcuZ3JvdXBzPy5sZW5ndGhcIiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJncm91cHNTdWJNZW51XCIgY2xhc3M9XCJvcmdhbml6ZXItbWVudS10cmlnZ2VyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItbWVudS1sYWJlbFwiPkdyb3VwZXIgcGFyPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtdmFsdWVcIiAqbmdJZj1cIiFoaWRlTWVudVZhbHVlcyAmJiBhY3RpdmVHcm91cEJ5TGFiZWwoKVwiPnt7IGFjdGl2ZUdyb3VwQnlMYWJlbCgpIH19PC9zcGFuPlxuICA8L2J1dHRvbj5cblxuICA8IS0tIEZpbHRyZXIgcGFyIC0tPlxuICA8YnV0dG9uICpuZ0lmPVwiY29uZmlnLnNsaWNlcz8ubGVuZ3RoXCIgbWF0LW1lbnUtaXRlbSBbbWF0TWVudVRyaWdnZXJGb3JdPVwic2xpY2VzU3ViTWVudVwiIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtdHJpZ2dlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtbGFiZWxcIj5GaWx0cmVyIHBhcjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LXZhbHVlXCIgKm5nSWY9XCIhaGlkZU1lbnVWYWx1ZXMgJiYgYWN0aXZlU2xpY2VzTGFiZWwoKVwiPnt7IGFjdGl2ZVNsaWNlc0xhYmVsKCkgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDwhLS0gVGVtcGxhdGUgLS0+XG4gIDxidXR0b24gKm5nSWY9XCJjb25maWcudGVtcGxhdGVzPy5sZW5ndGhcIiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJ0ZW1wbGF0ZVN1Yk1lbnVcIiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LXRyaWdnZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWxhYmVsXCI+VGVtcGxhdGU8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItbWVudS12YWx1ZVwiICpuZ0lmPVwiIWhpZGVNZW51VmFsdWVzICYmIGFjdGl2ZVRlbXBsYXRlTGFiZWwoKVwiPnt7IGFjdGl2ZVRlbXBsYXRlTGFiZWwoKSB9fTwvc3Bhbj5cbiAgPC9idXR0b24+XG5cbiAgPCEtLSBBY3Rpb25zIGR1IHZpc3VlbCBjb3VyYW50IC0tPlxuICA8bWF0LWRpdmlkZXIgKm5nSWY9XCJoYXNBY3Rpb25zKCkgJiYgaGFzTWVudUl0ZW1zQmVmb3JlQWN0aW9ucygpXCIgY2xhc3M9XCJvcmdhbml6ZXItZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XG4gIDxidXR0b24gKm5nSWY9XCJoYXNBY3Rpb25zKCkgJiYgaGFzT3RoZXJNZW51SXRlbXMoKVwiIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImFjdGlvbnNTdWJNZW51XCIgY2xhc3M9XCJvcmdhbml6ZXItbWVudS10cmlnZ2VyXCI+XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiY29uZmlnLmFjdGlvbnM/Lmljb25cIiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWV4cG9ydC1pY29uXCI+e3sgY29uZmlnLmFjdGlvbnM/Lmljb24gfX08L21hdC1pY29uPlxuICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtbGFiZWxcIj57eyBhY3Rpb25zTGFiZWwoKSB9fTwvc3Bhbj5cbiAgPC9idXR0b24+XG5cbiAgPCEtLSBBY3Rpb25zIGRpcmVjdGVzIGxvcnNxdSdpbCBuJ3kgYSBhdWN1biBhdXRyZSBpdGVtIHByaW5jaXBhbCAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0FjdGlvbnMoKSAmJiAhaGFzT3RoZXJNZW51SXRlbXMoKVwiPlxuICAgIDxidXR0b24gKm5nSWY9XCJpc0NvcHlBY3Rpb25WaXNpYmxlKClcIiBtYXQtbWVudS1pdGVtIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25Db3B5VmlzdWFsKClcIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWV4cG9ydC1pY29uXCI+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtbGFiZWxcIj5Db3BpZXI8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImlzRnVsbHNjcmVlbkFjdGlvblZpc2libGUoKVwiIG1hdC1tZW51LWl0ZW0gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblRvZ2dsZUZ1bGxzY3JlZW4oKVwiPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtZXhwb3J0LWljb25cIj57eyBjb25maWcuaXNGdWxsc2NyZWVuID8gJ2Z1bGxzY3JlZW5fZXhpdCcgOiAnZnVsbHNjcmVlbicgfX08L21hdC1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItbWVudS1sYWJlbFwiPnt7IGNvbmZpZy5pc0Z1bGxzY3JlZW4gPyAnUXVpdHRlciBsZSBwbGVpbiDDqWNyYW4nIDogJ1BsZWluIMOpY3JhbicgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gRXhwb3J0IGRpcmVjdCAobW9kZSB0YWJsZSkgLS0+XG4gIDxtYXQtZGl2aWRlciAqbmdJZj1cImNvbmZpZy5zaG93RXhwb3J0XCIgY2xhc3M9XCJvcmdhbml6ZXItZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XG4gIDxidXR0b24gKm5nSWY9XCJjb25maWcuc2hvd0V4cG9ydCAmJiAhaGFzRXhwb3J0U3ViTWVudSgpXCIgbWF0LW1lbnUtaXRlbSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvcmdhbml6ZXItbWVudS1leHBvcnRcIiAoY2xpY2spPVwib25FeHBvcnQoKVwiPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWV4cG9ydC1pY29uXCI+ZG93bmxvYWQ8L21hdC1pY29uPlxuICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtbGFiZWxcIj5FeHBvcnRlcjwvc3Bhbj5cbiAgPC9idXR0b24+XG5cbiAgPCEtLSBFeHBvcnQgZ3JhcGhpcXVlIChtb2RlIGNoYXJ0KSDigJQgb3V2cmUgdW4gc291cy1tZW51IC0tPlxuICA8YnV0dG9uICpuZ0lmPVwiY29uZmlnLnNob3dFeHBvcnQgJiYgaGFzRXhwb3J0U3ViTWVudSgpXCIgbWF0LW1lbnUtaXRlbSBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZXhwb3J0U3ViTWVudVwiIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtdHJpZ2dlciBvcmdhbml6ZXItbWVudS1leHBvcnRcIj5cbiAgICA8bWF0LWljb24gY2xhc3M9XCJvcmdhbml6ZXItbWVudS1leHBvcnQtaWNvblwiPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWxhYmVsXCI+RXhwb3J0ZXI8L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDwhLS0gUHLDqWbDqXJlbmNlcyAtLT5cbiAgPG1hdC1kaXZpZGVyICpuZ0lmPVwiY29uZmlnLnNob3dQcmVmZXJlbmNlc1wiIGNsYXNzPVwib3JnYW5pemVyLWRpdmlkZXJcIj48L21hdC1kaXZpZGVyPlxuICA8YnV0dG9uICpuZ0lmPVwiY29uZmlnLnNob3dQcmVmZXJlbmNlc1wiIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInByZWZlcmVuY2VzU3ViTWVudVwiIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtdHJpZ2dlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtbGFiZWxcIj5QcsOpZsOpcmVuY2VzPC9zcGFuPlxuICA8L2J1dHRvbj5cblxuICA8bWF0LWRpdmlkZXIgKm5nSWY9XCJjb25maWcuc2hvd1Jlc2V0ID09PSB0cnVlXCIgY2xhc3M9XCJvcmdhbml6ZXItZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XG4gIDxidXR0b24gKm5nSWY9XCJjb25maWcuc2hvd1Jlc2V0ID09PSB0cnVlXCIgbWF0LW1lbnUtaXRlbSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvcmdhbml6ZXItbWVudS1yZXNldFwiIChjbGljayk9XCJvblJlc2V0KClcIj5cbiAgICA8bWF0LWljb24gY2xhc3M9XCJvcmdhbml6ZXItbWVudS1leHBvcnQtaWNvblwiPnJlc3RhcnRfYWx0PC9tYXQtaWNvbj5cbiAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWxhYmVsXCI+UsOpaW5pdGlhbGlzZXIgbGEgdnVlPC9zcGFuPlxuICA8L2J1dHRvbj5cblxuICA8IS0tIFN3aXRjaCBjaGFydCAvIHRhYmxlIC0tPlxuICA8bWF0LWRpdmlkZXIgKm5nSWY9XCJoYXNTd2l0Y2hWaWV3KClcIiBjbGFzcz1cIm9yZ2FuaXplci1kaXZpZGVyXCI+PC9tYXQtZGl2aWRlcj5cbiAgPGJ1dHRvbiAqbmdJZj1cImhhc1N3aXRjaFZpZXcoKVwiIG1hdC1tZW51LWl0ZW0gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtdHJpZ2dlclwiIChjbGljayk9XCJvblN3aXRjaFZpZXcoKVwiPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWV4cG9ydC1pY29uXCI+e3sgY29uZmlnLnN3aXRjaFZpZXc/LmN1cnJlbnRWaWV3ID09PSAnY2hhcnQnID8gJ3RhYmxlX2NoYXJ0JyA6ICdiYXJfY2hhcnQnIH19PC9tYXQtaWNvbj5cbiAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWxhYmVsXCI+e3sgY29uZmlnLnN3aXRjaFZpZXc/LmN1cnJlbnRWaWV3ID09PSAnY2hhcnQnID8gJ1RhYmxlYXUnIDogJ0dyYXBoaXF1ZScgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG48L21hdC1tZW51PlxuXG48IS0tIFNvdXMtbWVudSA6IHR5cGVzIGRlIGdyYXBoaXF1ZSAtLT5cbjxtYXQtbWVudSAjY2hhcnRUeXBlc1N1Yk1lbnU9XCJtYXRNZW51XCIgcGFuZWxDbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LXBhbmVsXCI+XG4gIDxkaXYgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudVwiXG4gICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaXRlbVwiXG4gICAgICAqbmdGb3I9XCJsZXQgY2hhcnRUeXBlIG9mIGNvbmZpZy5jaGFydFR5cGVzXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNDaGFydFR5cGVBY3RpdmUoY2hhcnRUeXBlLmlkKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiY2hhcnRUeXBlLmRpc2FibGVkXCJcbiAgICAgIChjbGljayk9XCJvbkNoYXJ0VHlwZVNlbGVjdChjaGFydFR5cGUuaWQpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWNoZWNrXCI+e3sgaXNDaGFydFR5cGVBY3RpdmUoY2hhcnRUeXBlLmlkKSA/ICfinJMnIDogJycgfX08L3NwYW4+XG4gICAgICA8bWF0LWljb24gKm5nSWY9XCJjaGFydFR5cGUuaWNvblwiIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaWNvblwiPnt7IGNoYXJ0VHlwZS5pY29uIH19PC9tYXQtaWNvbj5cbiAgICAgIHt7IGNoYXJ0VHlwZS5sYWJlbCB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gU291cy1tZW51IDogYWN0aW9ucyBkdSB2aXN1ZWwgLS0+XG48bWF0LW1lbnUgI2FjdGlvbnNTdWJNZW51PVwibWF0TWVudVwiIHBhbmVsQ2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1wYW5lbFwiPlxuICA8ZGl2IGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnVcIlxuICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiaXNDb3B5QWN0aW9uVmlzaWJsZSgpXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaXRlbVwiXG4gICAgICAoY2xpY2spPVwib25Db3B5VmlzdWFsKClcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtY2hlY2tcIj48L3NwYW4+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pY29uXCI+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cbiAgICAgIENvcGllclxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJpc0Z1bGxzY3JlZW5BY3Rpb25WaXNpYmxlKClcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pdGVtXCJcbiAgICAgIChjbGljayk9XCJvblRvZ2dsZUZ1bGxzY3JlZW4oKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1jaGVja1wiPjwvc3Bhbj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWljb25cIj57eyBjb25maWcuaXNGdWxsc2NyZWVuID8gJ2Z1bGxzY3JlZW5fZXhpdCcgOiAnZnVsbHNjcmVlbicgfX08L21hdC1pY29uPlxuICAgICAge3sgY29uZmlnLmlzRnVsbHNjcmVlbiA/ICdRdWl0dGVyIGxlIHBsZWluIMOpY3JhbicgOiAnUGxlaW4gw6ljcmFuJyB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gU291cy1tZW51IDogRXhwb3J0IGdyYXBoaXF1ZSAtLT5cbjxtYXQtbWVudSAjZXhwb3J0U3ViTWVudT1cIm1hdE1lbnVcIiBwYW5lbENsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtcGFuZWxcIj5cbiAgPGRpdiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51XCJcbiAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImNvbmZpZy5vbkV4cG9ydFZpc3VhbFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWl0ZW1cIlxuICAgICAgKGNsaWNrKT1cIm9uRXhwb3J0VmlzdWFsKClcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtY2hlY2tcIj48L3NwYW4+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pY29uXCI+aW1hZ2U8L21hdC1pY29uPlxuICAgICAgVmlzdWVsXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImNvbmZpZy5vbkV4cG9ydERhdGFcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pdGVtXCJcbiAgICAgIChjbGljayk9XCJvbkV4cG9ydERhdGEoKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1jaGVja1wiPjwvc3Bhbj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWljb25cIj50YWJsZV9jaGFydDwvbWF0LWljb24+XG4gICAgICBEb25uw6llc1xuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gU291cy1tZW51IDogQ2hhbXBzIGNoYXJ0IChYICsgWSkgLS0+XG48bWF0LW1lbnUgI2NoYW1wc1N1Yk1lbnU9XCJtYXRNZW51XCIgcGFuZWxDbGFzcz1cIm9yZ2FuaXplci1jaGFtcHMtcGFuZWxcIj5cbiAgPGRpdiBjbGFzcz1cIm9yZ2FuaXplci1jaGFtcHMtd3JhcHBlclwiXG4gICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuXG4gICAgPCEtLSBCbG9jIFggLS0+XG4gICAgPGRpdiBjbGFzcz1cIm9yZ2FuaXplci1jaGFtcHMtYmxvY2tcIiAqbmdJZj1cImNvbmZpZy54RmllbGRzPy5sZW5ndGhcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLWNoYW1wcy1ibG9jay10aXRsZVwiPkF4ZSBob3Jpem9udGFsIOKAlCBYPC9zcGFuPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pdGVtXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHhGaWVsZCBvZiBjb25maWcueEZpZWxkc1wiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic3RhdGU/LnNlbGVjdGVkWCA9PT0geEZpZWxkLmlkXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInhGaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgIChjbGljayk9XCJvblhGaWVsZFNlbGVjdCh4RmllbGQuaWQpXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtY2hlY2tcIj57eyBzdGF0ZT8uc2VsZWN0ZWRYID09PSB4RmllbGQuaWQgPyAn4pyTJyA6ICcnIH19PC9zcGFuPlxuICAgICAgICB7eyB4RmllbGQubGFiZWwgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPG1hdC1kaXZpZGVyICpuZ0lmPVwiY29uZmlnLnhGaWVsZHM/Lmxlbmd0aCAmJiBjb25maWcueUZpZWxkcz8ubGVuZ3RoXCIgY2xhc3M9XCJvcmdhbml6ZXItY2hhbXBzLWRpdmlkZXJcIj48L21hdC1kaXZpZGVyPlxuXG4gICAgPCEtLSBCbG9jIFkgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm9yZ2FuaXplci1jaGFtcHMtYmxvY2tcIiAqbmdJZj1cImNvbmZpZy55RmllbGRzPy5sZW5ndGhcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLWNoYW1wcy1ibG9jay10aXRsZVwiPkF4ZSB2ZXJ0aWNhbCDigJQgWTwvc3Bhbj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHlGaWVsZCBvZiBjb25maWcueUZpZWxkc1wiPlxuXG4gICAgICAgIDwhLS0gWSBzaW1wbGUgKENvdW50IHNhbnMgYWdyw6lnYXQgbmkgc3RhY2spIC0tPlxuICAgICAgICA8IS0tIFkgc2ltcGxlIChDb3VudCBvdSBtw6l0cmlxdWUgZGlyZWN0ZSkgLS0+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIheUZpZWxkLmFnZ3JlZ2F0ZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaXRlbVwiXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc1lBY3RpdmUoeUZpZWxkLmlkKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInlGaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uWUZpZWxkU2VsZWN0KHlGaWVsZC5pZClcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWNoZWNrXCI+e3sgaXNZQWN0aXZlKHlGaWVsZC5pZCkgPyAn4pyTJyA6ICcnIH19PC9zcGFuPlxuICAgICAgICAgIHt7IHlGaWVsZC5sYWJlbCB9fVxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8IS0tIFkgYXZlYyBhZ3LDqWdhdHMg4oaSIHNvdXMtbWVudSAtLT5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInlGaWVsZC5hZ2dyZWdhdGVzPy5sZW5ndGhcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWl0ZW0gb3JnYW5pemVyLXN1Ym1lbnUtaXRlbS0taGFzLWNoaWxkcmVuXCJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImlzWUFjdGl2ZSh5RmllbGQuaWQpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwieUZpZWxkLmRpc2FibGVkXCJcbiAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwieUFnZ1N1Yk1lbnVcIlxuICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwieyB5RmllbGQ6IHlGaWVsZCB9XCJcbiAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtY2hlY2tcIj57eyBpc1lBY3RpdmUoeUZpZWxkLmlkKSA/ICfinJMnIDogJycgfX08L3NwYW4+XG4gICAgICAgICAge3sgeUZpZWxkLmxhYmVsIH19XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtYXJyb3dcIj5jaGV2cm9uX3JpZ2h0PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuPC9tYXQtbWVudT5cblxuPCEtLSBTb3VzLW1lbnUgZHluYW1pcXVlIDogYWdyw6lnYXRzIGQndW4gY2hhbXAgWSAtLT5cbjxtYXQtbWVudSAjeUFnZ1N1Yk1lbnU9XCJtYXRNZW51XCIgcGFuZWxDbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LXBhbmVsXCI+XG4gIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudCBsZXQteUZpZWxkPVwieUZpZWxkXCI+XG4gICAgPGRpdiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51XCJcbiAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWl0ZW1cIlxuICAgICAgICAqbmdGb3I9XCJsZXQgYWdnIG9mIHlGaWVsZC5hZ2dyZWdhdGVzXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc1lBZ2dyZWdhdGVBY3RpdmUoeUZpZWxkLmlkLCBhZ2cuaWQpXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uWUFnZ3JlZ2F0ZVNlbGVjdCh5RmllbGQuaWQsIGFnZy5pZClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1jaGVja1wiPnt7IGlzWUFnZ3JlZ2F0ZUFjdGl2ZSh5RmllbGQuaWQsIGFnZy5pZCkgPyAn4pyTJyA6ICcnIH19PC9zcGFuPlxuICAgICAgICB7eyBhZ2cubGFiZWwgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT5cblxuPCEtLSBTb3VzLW1lbnUgOiBDaGFtcHMgdGFibGUgKHRvZ2dsZSBjb2xvbm5lcykgLS0+XG48bWF0LW1lbnUgI2ZpZWxkc1N1Yk1lbnU9XCJtYXRNZW51XCIgcGFuZWxDbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LXBhbmVsXCI+XG4gIDxkaXYgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudVwiXG4gICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaXRlbVwiXG4gICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgY29uZmlnLmZpZWxkc1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImlzRmllbGRWaXNpYmxlKGZpZWxkLmlkKVwiXG4gICAgICAoY2xpY2spPVwib25GaWVsZFRvZ2dsZShmaWVsZC5pZCwgIWlzRmllbGRWaXNpYmxlKGZpZWxkLmlkKSlcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtY2hlY2tcIj57eyBpc0ZpZWxkVmlzaWJsZShmaWVsZC5pZCkgPyAn4pyTJyA6ICcnIH19PC9zcGFuPiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImZpZWxkLmljb25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWljb25cIj57eyBmaWVsZC5pY29uIH19PC9tYXQtaWNvbj4gICAgICB7eyBmaWVsZC5sYWJlbCB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gU291cy1tZW51IDogR3JvdXBlciBwYXIgLS0+XG48bWF0LW1lbnUgI2dyb3Vwc1N1Yk1lbnU9XCJtYXRNZW51XCIgcGFuZWxDbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LXBhbmVsXCI+XG4gIDxkaXYgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudVwiXG4gICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaXRlbVwiXG4gICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgY29uZmlnLmdyb3Vwc1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cInN0YXRlPy5zZWxlY3RlZEdyb3VwQnkgPT09IGdyb3VwLmlkXCJcbiAgICAgIChjbGljayk9XCJvbkdyb3VwQnlTZWxlY3QoZ3JvdXAuaWQpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWNoZWNrXCI+e3sgc3RhdGU/LnNlbGVjdGVkR3JvdXBCeSA9PT0gZ3JvdXAuaWQgPyAn4pyTJyA6ICcnIH19PC9zcGFuPiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImdyb3VwLmljb25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWljb25cIj57eyBncm91cC5pY29uIH19PC9tYXQtaWNvbj4gICAgICB7eyBncm91cC5sYWJlbCB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gU291cy1tZW51IDogRmlsdHJlciBwYXIgLS0+XG48bWF0LW1lbnUgI3NsaWNlc1N1Yk1lbnU9XCJtYXRNZW51XCIgcGFuZWxDbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LXBhbmVsXCI+XG4gIDxkaXYgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudVwiXG4gICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaXRlbVwiXG4gICAgICAqbmdGb3I9XCJsZXQgc2xpY2Ugb2YgY29uZmlnLnNsaWNlc1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cInN0YXRlPy5zZWxlY3RlZFNsaWNlcz8uaW5jbHVkZXMoc2xpY2UuaWQpXCJcbiAgICAgIChjbGljayk9XCJvblNsaWNlQ2xpY2soc2xpY2UuaWQpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWNoZWNrXCI+e3sgc3RhdGU/LnNlbGVjdGVkU2xpY2VzPy5pbmNsdWRlcyhzbGljZS5pZCkgPyAn4pyTJyA6ICcnIH19PC9zcGFuPiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInNsaWNlLmljb25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWljb25cIj57eyBzbGljZS5pY29uIH19PC9tYXQtaWNvbj4gICAgICB7eyBzbGljZS5sYWJlbCB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gU291cy1tZW51IDogVGVtcGxhdGUgLS0+XG48bWF0LW1lbnUgI3RlbXBsYXRlU3ViTWVudT1cIm1hdE1lbnVcIiBwYW5lbENsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtcGFuZWxcIj5cbiAgPGRpdiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51XCJcbiAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pdGVtXCJcbiAgICAgICpuZ0Zvcj1cImxldCB0bXBsIG9mIGNvbmZpZy50ZW1wbGF0ZXNcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzdGF0ZT8uc2VsZWN0ZWRUZW1wbGF0ZSA9PT0gdG1wbC5pZFwiXG4gICAgICBbdGl0bGVdPVwidG1wbC5kZXNjcmlwdGlvbiB8fCAnJ1wiXG4gICAgICAoY2xpY2spPVwib25UZW1wbGF0ZVNlbGVjdCh0bXBsLmlkKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1jaGVja1wiPnt7IHN0YXRlPy5zZWxlY3RlZFRlbXBsYXRlID09PSB0bXBsLmlkID8gJ+KckycgOiAnJyB9fTwvc3Bhbj5cbiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInRtcGwuaWNvblwiIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaWNvblwiPnt7IHRtcGwuaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICB7eyB0bXBsLmxhYmVsIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9tYXQtbWVudT5cblxuPCEtLSBTb3VzLW1lbnUgOiBQcsOpZsOpcmVuY2VzIC0tPlxuPG1hdC1tZW51ICNwcmVmZXJlbmNlc1N1Yk1lbnU9XCJtYXRNZW51XCIgcGFuZWxDbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LXBhbmVsXCI+XG4gIDxkaXYgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudVwiXG4gICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaXRlbVwiIChjbGljayk9XCJvblByZWZlcmVuY2VzRWRpdCgpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWNoZWNrXCI+PC9zcGFuPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaWNvblwiPmVkaXQ8L21hdC1pY29uPsOJZGl0ZXJcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWl0ZW1cIiAoY2xpY2spPVwib25QcmVmZXJlbmNlc1NhdmUoKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1jaGVja1wiPjwvc3Bhbj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWljb25cIj5zYXZlPC9tYXQtaWNvbj5TYXV2ZWdhcmRlclxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaXRlbVwiIFtkaXNhYmxlZF09XCIhY29uZmlnLmhhc1NhdmVkUHJlZmVyZW5jZXNcIiAoY2xpY2spPVwib25QcmVmZXJlbmNlc0NsZWFyKClcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtY2hlY2tcIj48L3NwYW4+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pY29uXCI+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlLDqWluaXRpYWxpc2VyXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9tYXQtbWVudT5cblxuIl19
382
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9vcmdhbml6ZXItYnV0dG9uL29yZ2FuaXplci1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktb3JnYW5pemVyL3NyYy9saWIvb3JnYW5pemVyLWJ1dHRvbi9vcmdhbml6ZXItYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQWEsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVKLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztBQVc3RCxNQUFNLE9BQU8sd0JBQXdCO0lBaUJuQyxZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWRqQyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN0QixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFDdEQscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQThCLENBQUM7UUFJcEUsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBaUIsQ0FBQztRQUMxQyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUMvQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO0lBS2tCLENBQUM7SUFFOUMsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQWU7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxPQUFPLEtBQUssS0FBSyxDQUFDO1NBQzNFO1FBQ0QsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDO1FBQzNELE9BQU8sR0FBRyxPQUFPLElBQUksS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUFlLEVBQUUsT0FBZ0I7UUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxhQUFhO2VBQ3BDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEYsSUFBSSxPQUFpQixDQUFDO1FBQ3RCLElBQUksT0FBTyxFQUFFO1lBQ1gsT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN2RTthQUFNO1lBQ0wsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUM7U0FDOUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZTtRQUM1Qix5REFBeUQ7UUFDekQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsS0FBSyxPQUFPLEVBQUU7WUFDckMsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQWU7UUFDNUIseURBQXlEO1FBQ3pELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEtBQUssT0FBTyxFQUFFO1lBQ3JDLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQzNCLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLGtCQUFrQixFQUFFLFNBQVM7U0FDOUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLFFBQWdCLEVBQUUsV0FBbUI7UUFDdEQsZ0VBQWdFO1FBQ2hFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEtBQUssUUFBUSxFQUFFO1lBQ3hGLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQzNCLFNBQVMsRUFBRSxRQUFRO1lBQ25CLGtCQUFrQixFQUFFLFdBQVc7U0FDaEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFlO1FBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDO1FBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxlQUFlLEVBQUUsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUFpQjtRQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUFpQixLQUFLLFNBQVM7WUFBRSxPQUFPO1FBQ3RGLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFrQjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTTtZQUFFLE9BQU87UUFFM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFdEIsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQWdCO1FBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUU7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUM1QjtRQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUN4RCxJQUFJLE9BQWlCLENBQUM7UUFDdEIsSUFBSSxPQUFPLEVBQUU7WUFDWCxPQUFPLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQztnQkFDN0MsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNMLE9BQU8sR0FBRyxjQUFjLENBQUM7U0FDMUI7UUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDOUQsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sY0FBYyxDQUFDLGNBQW9DLEVBQUUsUUFBcUI7UUFDaEYsb0dBQW9HO1FBQ3BHLE1BQU0sU0FBUyxHQUFHLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN4QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztRQUVuQyxNQUFNLE9BQU8sR0FBRyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtZQUM3QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDYixPQUFPO1NBQ1I7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDYixPQUFPO1NBQ1I7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsS0FBSyxJQUFJLENBQUMsY0FBYztnQkFBRSxPQUFPO1lBQ2hFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLFlBQVksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDckUsS0FBSztnQkFDTCxhQUFhLEVBQUUsS0FBSyxDQUFFLDhEQUE4RDthQUNyRixDQUFDLENBQUM7WUFDSCxRQUFRLEVBQUUsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtZQUNyQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxjQUFjO2dCQUFFLE9BQU87WUFDaEUsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDZixDQUFDLENBQUM7UUFFRixJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztTQUNwSDthQUFNO1lBQ0wsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQWU7UUFDakMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtZQUFFLE9BQU87UUFFMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFFbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV4QixJQUFJO1lBQ0YsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN4QztRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNyRTtnQkFBUztZQUNSLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO1lBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWM7WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzdELElBQUksQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtZQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxLQUFLLEtBQUssQ0FBQztJQUMvRSxDQUFDO0lBRUQseUJBQXlCO1FBQ3ZCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsY0FBYyxLQUFLLEtBQUssQ0FBQztJQUMzRixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQztJQUM5RyxDQUFDO0lBRUQseUJBQXlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRTtlQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFO2VBQ3JCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUM7ZUFDekMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztlQUNyQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO2VBQ3JDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMseUJBQXlCLEVBQUU7ZUFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtlQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlO2VBQzdCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQy9GLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDbEMsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNsQyxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDaEIsTUFBTSxPQUFPLEdBQXNCLEVBQUUsQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNsRixFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQjtZQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNuRSxJQUFJLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCO1lBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ25FLElBQUksQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCO1lBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDdEMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQzthQUN6QyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUU7WUFDdkIsYUFBYTtZQUNiLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLGtCQUFrQixFQUFFLFNBQVM7WUFDN0IsZUFBZSxFQUFFLFNBQVM7WUFDMUIsY0FBYyxFQUFFLEVBQUU7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDNUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxFQUFFLEtBQUssSUFBSSxHQUFHLENBQUM7UUFFbEMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1lBQ2xDLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDbkYsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQzlDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDM0UsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEU7UUFDRCxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sZUFBZSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQztRQUN4QyxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3BFLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQWdCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEtBQUssUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxRQUFnQixFQUFFLFdBQW1CO1FBQ3RELE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEtBQUssV0FBVyxDQUFDO0lBQzlGLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUFpQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEtBQUssU0FBUyxDQUFDO0lBQ3JELENBQUM7SUFFTyxVQUFVLENBQUMsSUFBa0MsRUFBRSxXQUFxRDtRQUMxRyxNQUFNLFdBQVcsR0FBRyxXQUFXLElBQUksV0FBVyxJQUFJLGtCQUFrQixJQUFJLFdBQVcsQ0FBQztRQUNwRixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFFLFdBQThCLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDbkcsTUFBTSxlQUFlLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RSxNQUFNLEtBQUssR0FBeUI7WUFDbEMsSUFBSTtZQUNKLEtBQUssRUFBRTtnQkFDTCxHQUFHLGVBQWU7Z0JBQ2xCLGdCQUFnQixFQUFFLHlCQUF5QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQ2pHO1lBQ0QsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0E5WFUsd0JBQXdCO21HQUF4Qix3QkFBd0IsNlZDdEJyQyw4eWdCQTZUQSxreEpEOVNhLFlBQVksK1BBQUUsZUFBZSw4QkFBRSxhQUFhLG1MQUFFLGFBQWEsd2VBQUUsZ0JBQWdCOzs0RkFPN0Usd0JBQXdCO2tCQVRwQyxTQUFTO2lDQUNJLElBQUksV0FDUCxDQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBRSxZQUNoRixrQkFBa0IsaUJBR2IsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTt3R0FHdEMsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQVV1QixlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlLCBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgT3JnYW5pemVyQ29uZmlnLCBPcmdhbml6ZXJCdXR0b25FdmVudCwgT3JnYW5pemVyU2xpY2VTdGF0ZSwgT3JnYW5pemVyU3RhdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3JnYW5pemVyU3RhdGUsIHJlc29sdmVNYXRjaGluZ1RlbXBsYXRlSWQgfSBmcm9tICcuLi9tb2RlbHMvb3JnYW5pemVyLXV0aWxzJztcbmltcG9ydCB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gJy4vdGVtcGxhdGUtbWFuYWdlci51dGlsaXR5JztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFsgQ29tbW9uTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdE1lbnVNb2R1bGUsIE1hdERpdmlkZXJNb2R1bGUgXSxcbiAgc2VsZWN0b3I6ICdvcmdhbml6ZXItYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL29yZ2FuaXplci1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vcmdhbml6ZXItYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE9yZ2FuaXplckJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGNvbmZpZyE6IE9yZ2FuaXplckNvbmZpZztcbiAgQElucHV0KCkgc3RhdGU/OiBPcmdhbml6ZXJTdGF0ZTtcbiAgQElucHV0KCkgaGlkZU1lbnVWYWx1ZXMgPSBmYWxzZTtcbiAgQE91dHB1dCgpIHZpZXdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE9yZ2FuaXplckJ1dHRvbkV2ZW50PigpO1xuICBAT3V0cHV0KCkgc2xpY2VTdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8T3JnYW5pemVyU2xpY2VTdGF0ZSB8IG51bGw+KCk7XG5cbiAgbG9hZGluZ0ZpZWxkSWQ/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBmaWVsZERhdGFDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBhbnlbXT4oKTtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XG4gIHByaXZhdGUgc2xpY2VSZXF1ZXN0SWQgPSAwO1xuICBwcml2YXRlIHNsaWNlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIEBWaWV3Q2hpbGQoJ21haW5NZW51VHJpZ2dlcicpIG1haW5NZW51VHJpZ2dlcj86IE1hdE1lbnVUcmlnZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgaXNGaWVsZFZpc2libGUoZmllbGRJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmlzaWJsZSA9IHRoaXMuc3RhdGU/LnZpc2libGVGaWVsZHM7XG4gICAgaWYgKCF2aXNpYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZmllbGRzPy5maW5kKGYgPT4gZi5pZCA9PT0gZmllbGRJZCk/LnZpc2libGUgIT09IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZS5pbmNsdWRlcyhmaWVsZElkKTtcbiAgfVxuXG4gIGZpZWxkc1N1bW1hcnkoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMuY29uZmlnLmZpZWxkcz8ubGVuZ3RoID8/IDA7XG4gICAgY29uc3QgdmlzaWJsZSA9IHRoaXMuc3RhdGU/LnZpc2libGVGaWVsZHM/Lmxlbmd0aCA/PyB0b3RhbDtcbiAgICByZXR1cm4gYCR7dmlzaWJsZX0vJHt0b3RhbH1gO1xuICB9XG5cbiAgb25GaWVsZFRvZ2dsZShmaWVsZElkOiBzdHJpbmcsIHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zdGF0ZT8udmlzaWJsZUZpZWxkc1xuICAgICAgPz8gKHRoaXMuY29uZmlnLmZpZWxkcyA/PyBbXSkuZmlsdGVyKGYgPT4gZi52aXNpYmxlICE9PSBmYWxzZSkubWFwKGYgPT4gZi5pZCk7XG4gICAgbGV0IHVwZGF0ZWQ6IHN0cmluZ1tdO1xuICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICB1cGRhdGVkID0gY3VycmVudC5pbmNsdWRlcyhmaWVsZElkKSA/IGN1cnJlbnQgOiBbLi4uY3VycmVudCwgZmllbGRJZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwZGF0ZWQgPSBjdXJyZW50LmZpbHRlcihmID0+IGYgIT09IGZpZWxkSWQpO1xuICAgIH1cbiAgICB0aGlzLmVtaXRDaGFuZ2UoJ2ZpZWxkVG9nZ2xlZCcsIHsgdmlzaWJsZUZpZWxkczogdXBkYXRlZCB9KTtcbiAgfVxuXG4gIG9uWEZpZWxkU2VsZWN0KGZpZWxkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIMOJdml0ZSB1bmUgcmVxdcOqdGUgaW51dGlsZSBzaSBsZSBYIGVzdCBkw6lqw6Agc8OpbGVjdGlvbm7DqVxuICAgIGlmICh0aGlzLnN0YXRlPy5zZWxlY3RlZFggPT09IGZpZWxkSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbWl0Q2hhbmdlKCd4U2VsZWN0ZWQnLCB7IHNlbGVjdGVkWDogZmllbGRJZCB9KTtcbiAgfVxuXG4gIG9uWUZpZWxkU2VsZWN0KGZpZWxkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIMOJdml0ZSB1bmUgcmVxdcOqdGUgaW51dGlsZSBzaSBsZSBZIGVzdCBkw6lqw6Agc8OpbGVjdGlvbm7DqVxuICAgIGlmICh0aGlzLnN0YXRlPy5zZWxlY3RlZFkgPT09IGZpZWxkSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbWl0Q2hhbmdlKCd5U2VsZWN0ZWQnLCB7XG4gICAgICBzZWxlY3RlZFk6IGZpZWxkSWQsXG4gICAgICBzZWxlY3RlZFlBZ2dyZWdhdGU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9XG5cbiAgb25ZQWdncmVnYXRlU2VsZWN0KHlGaWVsZElkOiBzdHJpbmcsIGFnZ3JlZ2F0ZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyDDiXZpdGUgdW5lIHJlcXXDqnRlIGludXRpbGUgc2kgbCdhZ2dyZWdhdGUgZXN0IGTDqWrDoCBzw6lsZWN0aW9ubsOpXG4gICAgaWYgKHRoaXMuc3RhdGU/LnNlbGVjdGVkWUFnZ3JlZ2F0ZSA9PT0gYWdncmVnYXRlSWQgJiYgdGhpcy5zdGF0ZT8uc2VsZWN0ZWRZID09PSB5RmllbGRJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVtaXRDaGFuZ2UoJ3lTZWxlY3RlZCcsIHtcbiAgICAgIHNlbGVjdGVkWTogeUZpZWxkSWQsXG4gICAgICBzZWxlY3RlZFlBZ2dyZWdhdGU6IGFnZ3JlZ2F0ZUlkXG4gICAgfSk7XG4gIH1cblxuICBvbkdyb3VwQnlTZWxlY3QoZ3JvdXBJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc3RhdGU/LnNlbGVjdGVkR3JvdXBCeTtcbiAgICB0aGlzLmVtaXRDaGFuZ2UoJ2dyb3VwQnlTZWxlY3RlZCcsIHsgc2VsZWN0ZWRHcm91cEJ5OiBjdXJyZW50ID09PSBncm91cElkID8gdW5kZWZpbmVkIDogZ3JvdXBJZCB9KTtcbiAgfVxuXG4gIG9uQ2hhcnRUeXBlU2VsZWN0KGNoYXJ0VHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5jb25maWcuY2hhcnRUeXBlcz8uZmluZCh0eXBlID0+IHR5cGUuaWQgPT09IGNoYXJ0VHlwZSk7XG4gICAgaWYgKCFvcHRpb24gfHwgb3B0aW9uLmRpc2FibGVkIHx8IHRoaXMuc3RhdGU/LnNlbGVjdGVkQ2hhcnRUeXBlID09PSBjaGFydFR5cGUpIHJldHVybjtcbiAgICB0aGlzLmVtaXRDaGFuZ2UoJ2NoYXJ0VHlwZVNlbGVjdGVkJywgeyBzZWxlY3RlZENoYXJ0VHlwZTogY2hhcnRUeXBlIH0pO1xuICB9XG5cbiAgb25UZW1wbGF0ZVNlbGVjdCh0ZW1wbGF0ZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLnRlbXBsYXRlcz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuY29uZmlnLnRlbXBsYXRlcz8uZmluZCh0ID0+IHQuaWQgPT09IHRlbXBsYXRlSWQpO1xuICAgIGlmICghdGVtcGxhdGUpIHJldHVybjtcblxuICAgIGNvbnN0IG5ld1N0YXRlID0gVGVtcGxhdGVNYW5hZ2VyLmFwcGx5VGVtcGxhdGUodGVtcGxhdGUsIHRoaXMuc3RhdGUsIHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmVtaXRDaGFuZ2UoJ3RlbXBsYXRlU2VsZWN0ZWQnLCBuZXdTdGF0ZSk7XG4gICAgdGhpcy5zeW5jU2xpY2VTdGF0ZShuZXdTdGF0ZS5zZWxlY3RlZFNsaWNlcyk7XG4gIH1cblxuICBvblNsaWNlQ2xpY2soc2xpY2VJZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZy5vblNsaWNlQ2xpY2spIHtcbiAgICAgIHRoaXMuY29uZmlnLm9uU2xpY2VDbGljaygpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkU2xpY2VzID0gdGhpcy5zdGF0ZT8uc2VsZWN0ZWRTbGljZXMgfHwgW107XG4gICAgbGV0IHVwZGF0ZWQ6IHN0cmluZ1tdO1xuICAgIGlmIChzbGljZUlkKSB7XG4gICAgICB1cGRhdGVkID0gc2VsZWN0ZWRTbGljZXMuaW5jbHVkZXMoc2xpY2VJZClcbiAgICAgICAgPyBzZWxlY3RlZFNsaWNlcy5maWx0ZXIoaWQgPT4gaWQgIT09IHNsaWNlSWQpXG4gICAgICAgIDogWy4uLnNlbGVjdGVkU2xpY2VzLCBzbGljZUlkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlZCA9IHNlbGVjdGVkU2xpY2VzO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVkLmxlbmd0aCA9PT0gMCB8fCAhc2xpY2VJZCB8fCAhdGhpcy5jb25maWcub25GZXRjaFNsaWNlRGF0YSkge1xuICAgICAgdGhpcy5zbGljZVN0YXRlQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UoJ3NsaWNlU2VsZWN0ZWQnLCB7IHNlbGVjdGVkU2xpY2VzOiB1cGRhdGVkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3luY1NsaWNlU3RhdGUodXBkYXRlZCwgKCkgPT4ge1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlKCdzbGljZVNlbGVjdGVkJywgeyBzZWxlY3RlZFNsaWNlczogdXBkYXRlZCB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1NsaWNlU3RhdGUoc2VsZWN0ZWRTbGljZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLCBvbkxvYWRlZD86ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAvLyBVbmUgbm91dmVsbGUgZGVtYW5kZSBhbm51bGUgbGEgcHLDqWPDqWRlbnRlIDogc2V1bGUgbGEgcsOpcG9uc2UgbGEgcGx1cyByw6ljZW50ZSBlc3QgcHJpc2UgZW4gY29tcHRlLlxuICAgIGNvbnN0IHJlcXVlc3RJZCA9ICsrdGhpcy5zbGljZVJlcXVlc3RJZDtcbiAgICB0aGlzLnNsaWNlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc2xpY2VTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBzbGljZUlkID0gc2VsZWN0ZWRTbGljZXM/LlswXTtcbiAgICBpZiAoIXNsaWNlSWQgfHwgIXRoaXMuY29uZmlnLm9uRmV0Y2hTbGljZURhdGEpIHtcbiAgICAgIHRoaXMuc2xpY2VTdGF0ZUNoYW5nZS5lbWl0KG51bGwpO1xuICAgICAgb25Mb2FkZWQ/LigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNsaWNlID0gdGhpcy5jb25maWcuc2xpY2VzPy5maW5kKHMgPT4gcy5pZCA9PT0gc2xpY2VJZCk7XG4gICAgaWYgKCFzbGljZSkge1xuICAgICAgdGhpcy5zbGljZVN0YXRlQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgICBvbkxvYWRlZD8uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb25maWcub25GZXRjaFNsaWNlRGF0YShzbGljZUlkKTtcbiAgICBjb25zdCBoYW5kbGVEYXRhID0gKHRhc2tzOiBhbnlbXSkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkIHx8IHJlcXVlc3RJZCAhPT0gdGhpcy5zbGljZVJlcXVlc3RJZCkgcmV0dXJuO1xuICAgICAgdGhpcy5zbGljZVN0YXRlQ2hhbmdlLmVtaXQoe1xuICAgICAgICBzbGljZUNvbmZpZ3M6IFt7IHRpdGxlOiBzbGljZS5sYWJlbCA/PyBzbGljZUlkLCBjb2x1bW5LZXk6IHNsaWNlSWQgfV0sXG4gICAgICAgIHRhc2tzLFxuICAgICAgICBmaWx0ZXJBcHBsaWVkOiBmYWxzZSAgLy8gUGFuZWwgdmllbnQgZCfDqnRyZSBvdXZlcnQsIHBhcyBkZSBmaWx0cmUgc8OpbGVjdGlvbm7DqSBlbmNvcmVcbiAgICAgIH0pO1xuICAgICAgb25Mb2FkZWQ/LigpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlRXJyb3IgPSAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCB8fCByZXF1ZXN0SWQgIT09IHRoaXMuc2xpY2VSZXF1ZXN0SWQpIHJldHVybjtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tPcmdhbml6ZXJCdXR0b25dIFNsaWNlIGRhdGEgbG9hZGluZyBmYWlsZWQnLCBlcnJvcik7XG4gICAgICB0aGlzLnNsaWNlU3RhdGVDaGFuZ2UuZW1pdChudWxsKTtcbiAgICAgIG9uTG9hZGVkPy4oKTtcbiAgICB9O1xuXG4gICAgaWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XG4gICAgICB0aGlzLnNsaWNlU3Vic2NyaXB0aW9uID0gcmVzdWx0LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoeyBuZXh0OiBoYW5kbGVEYXRhLCBlcnJvcjogaGFuZGxlRXJyb3IgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZvaWQgcmVzdWx0LnRoZW4oaGFuZGxlRGF0YSwgaGFuZGxlRXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRGaWVsZERhdGEoZmllbGRJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZmllbGREYXRhQ2FjaGUuaGFzKGZpZWxkSWQpKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5vbkZldGNoRmllbGREYXRhKSByZXR1cm47XG5cbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnLmZpZWxkcz8uZmluZChmID0+IGYuaWQgPT09IGZpZWxkSWQpO1xuICAgIGlmICghZmllbGQpIHJldHVybjtcblxuICAgIHRoaXMubG9hZGluZ0ZpZWxkSWQgPSBmaWVsZElkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNvbmZpZy5vbkZldGNoRmllbGREYXRhKGZpZWxkSWQpO1xuICAgICAgdGhpcy5maWVsZERhdGFDYWNoZS5zZXQoZmllbGRJZCwgZGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tPcmdhbml6ZXJCdXR0b25dIEZpZWxkIGRhdGEgbG9hZGluZyBmYWlsZWQnLCBlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZ0ZpZWxkSWQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBvbkV4cG9ydCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcub25FeHBvcnQpIHRoaXMuY29uZmlnLm9uRXhwb3J0KCk7XG4gICAgdGhpcy5tYWluTWVudVRyaWdnZXI/LmNsb3NlTWVudSgpO1xuICB9XG5cbiAgb25FeHBvcnRWaXN1YWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9uRXhwb3J0VmlzdWFsKSB0aGlzLmNvbmZpZy5vbkV4cG9ydFZpc3VhbCgpO1xuICAgIHRoaXMubWFpbk1lbnVUcmlnZ2VyPy5jbG9zZU1lbnUoKTtcbiAgfVxuXG4gIG9uRXhwb3J0RGF0YSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcub25FeHBvcnREYXRhKSB0aGlzLmNvbmZpZy5vbkV4cG9ydERhdGEoKTtcbiAgICB0aGlzLm1haW5NZW51VHJpZ2dlcj8uY2xvc2VNZW51KCk7XG4gIH1cblxuICBoYXNFeHBvcnRTdWJNZW51KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLmNvbmZpZy5vbkV4cG9ydFZpc3VhbCB8fCB0aGlzLmNvbmZpZy5vbkV4cG9ydERhdGEpO1xuICB9XG5cbiAgaXNDb3B5QWN0aW9uVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbmZpZy5vbkNvcHlWaXN1YWwgJiYgdGhpcy5jb25maWcuYWN0aW9ucz8uc2hvd0NvcHkgIT09IGZhbHNlO1xuICB9XG5cbiAgaXNGdWxsc2NyZWVuQWN0aW9uVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbmZpZy5vblRvZ2dsZUZ1bGxzY3JlZW4gJiYgdGhpcy5jb25maWcuYWN0aW9ucz8uc2hvd0Z1bGxzY3JlZW4gIT09IGZhbHNlO1xuICB9XG5cbiAgaGFzQWN0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuc2hvd0FjdGlvbnMgPT09IHRydWUgJiYgKHRoaXMuaXNDb3B5QWN0aW9uVmlzaWJsZSgpIHx8IHRoaXMuaXNGdWxsc2NyZWVuQWN0aW9uVmlzaWJsZSgpKTtcbiAgfVxuXG4gIGhhc01lbnVJdGVtc0JlZm9yZUFjdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQ2hhcnRGaWVsZHMoKVxuICAgICAgfHwgdGhpcy5oYXNUYWJsZUZpZWxkcygpXG4gICAgICB8fCAodGhpcy5jb25maWcuY2hhcnRUeXBlcz8ubGVuZ3RoID8/IDApID4gMFxuICAgICAgfHwgKHRoaXMuY29uZmlnLmdyb3Vwcz8ubGVuZ3RoID8/IDApID4gMFxuICAgICAgfHwgKHRoaXMuY29uZmlnLnNsaWNlcz8ubGVuZ3RoID8/IDApID4gMFxuICAgICAgfHwgKHRoaXMuY29uZmlnLnRlbXBsYXRlcz8ubGVuZ3RoID8/IDApID4gMDtcbiAgfVxuXG4gIGhhc090aGVyTWVudUl0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc01lbnVJdGVtc0JlZm9yZUFjdGlvbnMoKVxuICAgICAgfHwgISF0aGlzLmNvbmZpZy5zaG93RXhwb3J0XG4gICAgICB8fCAhIXRoaXMuY29uZmlnLnNob3dQcmVmZXJlbmNlc1xuICAgICAgfHwgdGhpcy5oYXNTd2l0Y2hWaWV3KCk7XG4gIH1cblxuICBhY3Rpb25zTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jb25maWcuYWN0aW9ucz8ubGFiZWwpIHJldHVybiB0aGlzLmNvbmZpZy5hY3Rpb25zLmxhYmVsO1xuICAgIHJldHVybiB0aGlzLmlzQ29weUFjdGlvblZpc2libGUoKSAmJiB0aGlzLmlzRnVsbHNjcmVlbkFjdGlvblZpc2libGUoKSA/ICdBY3Rpb25zJyA6ICdBY3Rpb24nO1xuICB9XG5cbiAgb25Db3B5VmlzdWFsKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLm9uQ29weVZpc3VhbD8uKCk7XG4gICAgdGhpcy5tYWluTWVudVRyaWdnZXI/LmNsb3NlTWVudSgpO1xuICB9XG5cbiAgb25Ub2dnbGVGdWxsc2NyZWVuKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLm9uVG9nZ2xlRnVsbHNjcmVlbj8uKCk7XG4gICAgdGhpcy5tYWluTWVudVRyaWdnZXI/LmNsb3NlTWVudSgpO1xuICB9XG5cbiAgaGFzU3dpdGNoVmlldygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbmZpZy5zd2l0Y2hWaWV3O1xuICB9XG5cbiAgb25Td2l0Y2hWaWV3KCk6IHZvaWQge1xuICAgIGNvbnN0IHN2ID0gdGhpcy5jb25maWcuc3dpdGNoVmlldztcbiAgICBpZiAoIXN2KSByZXR1cm47XG4gICAgY29uc3QgbmV3VmlldzogJ2NoYXJ0JyB8ICd0YWJsZScgPSBzdi5jdXJyZW50VmlldyA9PT0gJ2NoYXJ0JyA/ICd0YWJsZScgOiAnY2hhcnQnO1xuICAgIHN2Lm9uU3dpdGNoKG5ld1ZpZXcpO1xuICAgIHRoaXMuZW1pdENoYW5nZSgndmlld1N3aXRjaGVkJywgeyB2aWV3TW9kZTogbmV3VmlldyB9KTtcbiAgICB0aGlzLm1haW5NZW51VHJpZ2dlcj8uY2xvc2VNZW51KCk7XG4gIH1cblxuICBvblByZWZlcmVuY2VzRWRpdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcub25QcmVmZXJlbmNlc0VkaXQpIHRoaXMuY29uZmlnLm9uUHJlZmVyZW5jZXNFZGl0KCk7XG4gICAgdGhpcy5tYWluTWVudVRyaWdnZXI/LmNsb3NlTWVudSgpO1xuICB9XG5cbiAgb25QcmVmZXJlbmNlc1NhdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnLm9uUHJlZmVyZW5jZXNTYXZlKSB0aGlzLmNvbmZpZy5vblByZWZlcmVuY2VzU2F2ZSgpO1xuICAgIHRoaXMubWFpbk1lbnVUcmlnZ2VyPy5jbG9zZU1lbnUoKTtcbiAgfVxuXG4gIG9uUHJlZmVyZW5jZXNDbGVhcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcub25QcmVmZXJlbmNlc0NsZWFyKSB0aGlzLmNvbmZpZy5vblByZWZlcmVuY2VzQ2xlYXIoKTtcbiAgICB0aGlzLm1haW5NZW51VHJpZ2dlcj8uY2xvc2VNZW51KCk7XG4gIH1cblxuICBvblJlc2V0KCk6IHZvaWQge1xuICAgIGNvbnN0IHZpc2libGVGaWVsZHMgPSB0aGlzLmNvbmZpZy5maWVsZHNcbiAgICAgID8uZmlsdGVyKGZpZWxkID0+IGZpZWxkLnZpc2libGUgIT09IGZhbHNlKVxuICAgICAgLm1hcChmaWVsZCA9PiBmaWVsZC5pZCk7XG4gICAgdGhpcy5lbWl0Q2hhbmdlKCdyZXNldCcsIHtcbiAgICAgIHZpc2libGVGaWVsZHMsXG4gICAgICBzZWxlY3RlZFg6IHVuZGVmaW5lZCxcbiAgICAgIHNlbGVjdGVkWTogdW5kZWZpbmVkLFxuICAgICAgc2VsZWN0ZWRZQWdncmVnYXRlOiB1bmRlZmluZWQsXG4gICAgICBzZWxlY3RlZEdyb3VwQnk6IHVuZGVmaW5lZCxcbiAgICAgIHNlbGVjdGVkU2xpY2VzOiBbXVxuICAgIH0pO1xuICAgIHRoaXMubWFpbk1lbnVUcmlnZ2VyPy5jbG9zZU1lbnUoKTtcbiAgfVxuXG4gIGFjdGl2ZVhMYWJlbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGlkID0gdGhpcy5zdGF0ZT8uc2VsZWN0ZWRYO1xuICAgIGlmICghaWQpIHJldHVybiAnJztcbiAgICByZXR1cm4gdGhpcy5jb25maWcueEZpZWxkcz8uZmluZChmID0+IGYuaWQgPT09IGlkKT8ubGFiZWwgPz8gaWQ7XG4gIH1cblxuICBhY3RpdmVZTGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCB5SWQgPSB0aGlzLnN0YXRlPy5zZWxlY3RlZFk7XG4gICAgaWYgKCF5SWQpIHJldHVybiAnJztcbiAgICBjb25zdCB5RmllbGQgPSB0aGlzLmNvbmZpZy55RmllbGRzPy5maW5kKGYgPT4gZi5pZCA9PT0geUlkKTtcbiAgICBjb25zdCBiYXNlID0geUZpZWxkPy5sYWJlbCA/PyB5SWQ7XG5cbiAgICBpZiAodGhpcy5zdGF0ZT8uc2VsZWN0ZWRZQWdncmVnYXRlKSB7XG4gICAgICBjb25zdCBhZ2cgPSB5RmllbGQ/LmFnZ3JlZ2F0ZXM/LmZpbmQoYSA9PiBhLmlkID09PSB0aGlzLnN0YXRlIS5zZWxlY3RlZFlBZ2dyZWdhdGUpO1xuICAgICAgcmV0dXJuIGFnZyA/IGAke2Jhc2V9IMK3ICR7YWdnLmxhYmVsfWAgOiBiYXNlO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIGFjdGl2ZUdyb3VwQnlMYWJlbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGlkID0gdGhpcy5zdGF0ZT8uc2VsZWN0ZWRHcm91cEJ5O1xuICAgIGlmICghaWQpIHJldHVybiAnJztcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZ3JvdXBzPy5maW5kKGcgPT4gZy5pZCA9PT0gaWQpPy5sYWJlbCA/PyBpZDtcbiAgfVxuXG4gIGFjdGl2ZUNoYXJ0VHlwZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaWQgPSB0aGlzLnN0YXRlPy5zZWxlY3RlZENoYXJ0VHlwZTtcbiAgICBpZiAoIWlkKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoYXJ0VHlwZXM/LmZpbmQodHlwZSA9PiB0eXBlLmlkID09PSBpZCk/LmxhYmVsID8/IGlkO1xuICB9XG5cbiAgYWN0aXZlU2xpY2VzTGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBpZHMgPSB0aGlzLnN0YXRlPy5zZWxlY3RlZFNsaWNlcztcbiAgICBpZiAoIWlkcz8ubGVuZ3RoKSByZXR1cm4gJyc7XG4gICAgaWYgKGlkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5zbGljZXM/LmZpbmQocyA9PiBzLmlkID09PSBpZHNbMF0pPy5sYWJlbCA/PyBpZHNbMF07XG4gICAgfVxuICAgIHJldHVybiBgJHtpZHMubGVuZ3RofSBzw6lsZWN0aW9ubsOpc2A7XG4gIH1cblxuICBhY3RpdmVUZW1wbGF0ZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaWQgPSB0aGlzLnN0YXRlPy5zZWxlY3RlZFRlbXBsYXRlO1xuICAgIGlmICghaWQpIHJldHVybiAnJztcbiAgICByZXR1cm4gdGhpcy5jb25maWcudGVtcGxhdGVzPy5maW5kKHQgPT4gdC5pZCA9PT0gaWQpPy5sYWJlbCA/PyBpZDtcbiAgfVxuXG4gIGhhc0NoYXJ0RmllbGRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5jb25maWcueEZpZWxkcz8ubGVuZ3RoID8/IDApID4gMCB8fCAodGhpcy5jb25maWcueUZpZWxkcz8ubGVuZ3RoID8/IDApID4gMDtcbiAgfVxuXG4gIGhhc0NoYXJ0VHlwZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy5jaGFydFR5cGVzPy5sZW5ndGggPz8gMCkgPiAwO1xuICB9XG5cbiAgaGFzVGFibGVGaWVsZHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmNvbmZpZy5maWVsZHM/Lmxlbmd0aCA/PyAwKSA+IDA7XG4gIH1cblxuICBpc1lBY3RpdmUoeUZpZWxkSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlPy5zZWxlY3RlZFkgPT09IHlGaWVsZElkO1xuICB9XG5cbiAgaXNZQWdncmVnYXRlQWN0aXZlKHlGaWVsZElkOiBzdHJpbmcsIGFnZ3JlZ2F0ZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZT8uc2VsZWN0ZWRZID09PSB5RmllbGRJZCAmJiB0aGlzLnN0YXRlPy5zZWxlY3RlZFlBZ2dyZWdhdGUgPT09IGFnZ3JlZ2F0ZUlkO1xuICB9XG5cbiAgaXNDaGFydFR5cGVBY3RpdmUoY2hhcnRUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZT8uc2VsZWN0ZWRDaGFydFR5cGUgPT09IGNoYXJ0VHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdENoYW5nZSh0eXBlOiBPcmdhbml6ZXJCdXR0b25FdmVudFsndHlwZSddLCBzdGF0ZVVwZGF0ZTogUGFydGlhbDxPcmdhbml6ZXJTdGF0ZT4gfCBPcmdhbml6ZXJTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGlzRnVsbFN0YXRlID0gJ3NlbGVjdGVkWCcgaW4gc3RhdGVVcGRhdGUgJiYgJ3NlbGVjdGVkVGVtcGxhdGUnIGluIHN0YXRlVXBkYXRlO1xuICAgIGNvbnN0IHJhd1N0YXRlID0gaXNGdWxsU3RhdGUgPyAoc3RhdGVVcGRhdGUgYXMgT3JnYW5pemVyU3RhdGUpIDogeyAuLi50aGlzLnN0YXRlLCAuLi5zdGF0ZVVwZGF0ZSB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTdGF0ZSA9IG5vcm1hbGl6ZU9yZ2FuaXplclN0YXRlKHJhd1N0YXRlLCB0aGlzLmNvbmZpZyk7XG4gICAgY29uc3QgZXZlbnQ6IE9yZ2FuaXplckJ1dHRvbkV2ZW50ID0ge1xuICAgICAgdHlwZSxcbiAgICAgIHN0YXRlOiB7XG4gICAgICAgIC4uLm5vcm1hbGl6ZWRTdGF0ZSxcbiAgICAgICAgc2VsZWN0ZWRUZW1wbGF0ZTogcmVzb2x2ZU1hdGNoaW5nVGVtcGxhdGVJZCh0aGlzLmNvbmZpZy50ZW1wbGF0ZXMsIG5vcm1hbGl6ZWRTdGF0ZSwgdGhpcy5jb25maWcpXG4gICAgICB9LFxuICAgICAgc291cmNlOiAndXNlcidcbiAgICB9O1xuICAgIHRoaXMudmlld0NoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxufVxuIiwiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvcmdhbml6ZXItYnRuXCIgW2NsYXNzLm9yZ2FuaXplci1idG4tLWxhYmVsZWRdPVwiISFjb25maWcuYnV0dG9uTGFiZWxcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidmlld01lbnVcIiAjbWFpbk1lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbmZpZy5idXR0b25MYWJlbCB8fCAnUGVyc29ubmFsaXNlciBsYSB2dWUnXCIgW2F0dHIudGl0bGVdPVwiY29uZmlnLmJ1dHRvbkxhYmVsIHx8ICdQZXJzb25uYWxpc2VyIGxhIHZ1ZSdcIj5cbiAgPG1hdC1pY29uICpuZ0lmPVwiY29uZmlnLnNob3dCdXR0b25JY29uICE9PSBmYWxzZVwiIGNsYXNzPVwib3JnYW5pemVyLWJ0bi1pY29uXCI+e3sgY29uZmlnLmJ1dHRvbkljb24gfHwgJ3NldHRpbmdzJyB9fTwvbWF0LWljb24+XG4gIDxzcGFuICpuZ0lmPVwiY29uZmlnLmJ1dHRvbkxhYmVsXCIgY2xhc3M9XCJvcmdhbml6ZXItYnRuLWxhYmVsXCI+e3sgY29uZmlnLmJ1dHRvbkxhYmVsIH19PC9zcGFuPlxuPC9idXR0b24+XG5cbjxtYXQtbWVudSAjdmlld01lbnU9XCJtYXRNZW51XCIgcGFuZWxDbGFzcz1cIm9yZ2FuaXplci1tZW51LXBhbmVsXCI+XG5cbiAgPCEtLSBUeXBlIC0tPlxuICA8YnV0dG9uICpuZ0lmPVwiaGFzQ2hhcnRUeXBlcygpXCIgbWF0LW1lbnUtaXRlbSBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY2hhcnRUeXBlc1N1Yk1lbnVcIiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LXRyaWdnZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWxhYmVsXCI+VHlwZTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LXZhbHVlXCIgKm5nSWY9XCIhaGlkZU1lbnVWYWx1ZXMgJiYgYWN0aXZlQ2hhcnRUeXBlTGFiZWwoKVwiPnt7IGFjdGl2ZUNoYXJ0VHlwZUxhYmVsKCkgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDwhLS0gQ2hhbXBzIDogbW9kZSBjaGFydCAoWCArIFkpIC0tPlxuICA8YnV0dG9uICpuZ0lmPVwiaGFzQ2hhcnRGaWVsZHMoKVwiIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNoYW1wc1N1Yk1lbnVcIiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LXRyaWdnZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWxhYmVsXCI+Q2hhbXBzPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtdmFsdWVcIiAqbmdJZj1cIiFoaWRlTWVudVZhbHVlcyAmJiAoYWN0aXZlWExhYmVsKCkgfHwgYWN0aXZlWUxhYmVsKCkpXCI+XG4gICAgICB7eyBhY3RpdmVYTGFiZWwoKSB9fTxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVYTGFiZWwoKSAmJiBhY3RpdmVZTGFiZWwoKVwiPiAvIDwvbmctY29udGFpbmVyPnt7IGFjdGl2ZVlMYWJlbCgpIH19XG4gICAgPC9zcGFuPlxuICA8L2J1dHRvbj5cblxuICA8IS0tIENoYW1wcyA6IG1vZGUgdGFibGUgKHRvZ2dsZSBjb2xvbm5lcykgLS0+XG4gIDxidXR0b24gKm5nSWY9XCJoYXNUYWJsZUZpZWxkcygpXCIgbWF0LW1lbnUtaXRlbSBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZmllbGRzU3ViTWVudVwiIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtdHJpZ2dlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtbGFiZWxcIj5DaGFtcHM8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItbWVudS12YWx1ZVwiICpuZ0lmPVwiIWhpZGVNZW51VmFsdWVzXCI+e3sgZmllbGRzU3VtbWFyeSgpIH19PC9zcGFuPlxuICA8L2J1dHRvbj5cblxuICA8IS0tIEdyb3VwZXIgcGFyIC0tPlxuICA8YnV0dG9uICpuZ0lmPVwiY29uZmlnLmdyb3Vwcz8ubGVuZ3RoXCIgbWF0LW1lbnUtaXRlbSBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZ3JvdXBzU3ViTWVudVwiIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtdHJpZ2dlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtbGFiZWxcIj5Hcm91cGVyIHBhcjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LXZhbHVlXCIgKm5nSWY9XCIhaGlkZU1lbnVWYWx1ZXMgJiYgYWN0aXZlR3JvdXBCeUxhYmVsKClcIj57eyBhY3RpdmVHcm91cEJ5TGFiZWwoKSB9fTwvc3Bhbj5cbiAgPC9idXR0b24+XG5cbiAgPCEtLSBGaWx0cmVyIHBhciAtLT5cbiAgPGJ1dHRvbiAqbmdJZj1cImNvbmZpZy5zbGljZXM/Lmxlbmd0aFwiIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInNsaWNlc1N1Yk1lbnVcIiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LXRyaWdnZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWxhYmVsXCI+RmlsdHJlciBwYXI8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItbWVudS12YWx1ZVwiICpuZ0lmPVwiIWhpZGVNZW51VmFsdWVzICYmIGFjdGl2ZVNsaWNlc0xhYmVsKClcIj57eyBhY3RpdmVTbGljZXNMYWJlbCgpIH19PC9zcGFuPlxuICA8L2J1dHRvbj5cblxuICA8IS0tIFRlbXBsYXRlIC0tPlxuICA8YnV0dG9uICpuZ0lmPVwiY29uZmlnLnRlbXBsYXRlcz8ubGVuZ3RoXCIgbWF0LW1lbnUtaXRlbSBbbWF0TWVudVRyaWdnZXJGb3JdPVwidGVtcGxhdGVTdWJNZW51XCIgY2xhc3M9XCJvcmdhbml6ZXItbWVudS10cmlnZ2VyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItbWVudS1sYWJlbFwiPlRlbXBsYXRlPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtdmFsdWVcIiAqbmdJZj1cIiFoaWRlTWVudVZhbHVlcyAmJiBhY3RpdmVUZW1wbGF0ZUxhYmVsKClcIj57eyBhY3RpdmVUZW1wbGF0ZUxhYmVsKCkgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDwhLS0gQWN0aW9ucyBkdSB2aXN1ZWwgY291cmFudCAtLT5cbiAgPG1hdC1kaXZpZGVyICpuZ0lmPVwiaGFzQWN0aW9ucygpICYmIGhhc01lbnVJdGVtc0JlZm9yZUFjdGlvbnMoKVwiIGNsYXNzPVwib3JnYW5pemVyLWRpdmlkZXJcIj48L21hdC1kaXZpZGVyPlxuICA8YnV0dG9uICpuZ0lmPVwiaGFzQWN0aW9ucygpICYmIGhhc090aGVyTWVudUl0ZW1zKClcIiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJhY3Rpb25zU3ViTWVudVwiIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtdHJpZ2dlclwiPlxuICAgIDxtYXQtaWNvbiAqbmdJZj1cImNvbmZpZy5hY3Rpb25zPy5pY29uXCIgY2xhc3M9XCJvcmdhbml6ZXItbWVudS1leHBvcnQtaWNvblwiPnt7IGNvbmZpZy5hY3Rpb25zPy5pY29uIH19PC9tYXQtaWNvbj5cbiAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWxhYmVsXCI+e3sgYWN0aW9uc0xhYmVsKCkgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDwhLS0gQWN0aW9ucyBkaXJlY3RlcyBsb3JzcXUnaWwgbid5IGEgYXVjdW4gYXV0cmUgaXRlbSBwcmluY2lwYWwgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNBY3Rpb25zKCkgJiYgIWhhc090aGVyTWVudUl0ZW1zKClcIj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiaXNDb3B5QWN0aW9uVmlzaWJsZSgpXCIgbWF0LW1lbnUtaXRlbSB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ29weVZpc3VhbCgpXCI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJvcmdhbml6ZXItbWVudS1leHBvcnQtaWNvblwiPmNvbnRlbnRfY29weTwvbWF0LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWxhYmVsXCI+Q29waWVyPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJpc0Z1bGxzY3JlZW5BY3Rpb25WaXNpYmxlKClcIiBtYXQtbWVudS1pdGVtIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25Ub2dnbGVGdWxsc2NyZWVuKClcIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWV4cG9ydC1pY29uXCI+e3sgY29uZmlnLmlzRnVsbHNjcmVlbiA/ICdmdWxsc2NyZWVuX2V4aXQnIDogJ2Z1bGxzY3JlZW4nIH19PC9tYXQtaWNvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtbGFiZWxcIj57eyBjb25maWcuaXNGdWxsc2NyZWVuID8gJ1F1aXR0ZXIgbGUgcGxlaW4gw6ljcmFuJyA6ICdQbGVpbiDDqWNyYW4nIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIEV4cG9ydCBkaXJlY3QgKG1vZGUgdGFibGUpIC0tPlxuICA8bWF0LWRpdmlkZXIgKm5nSWY9XCJjb25maWcuc2hvd0V4cG9ydFwiIGNsYXNzPVwib3JnYW5pemVyLWRpdmlkZXJcIj48L21hdC1kaXZpZGVyPlxuICA8YnV0dG9uICpuZ0lmPVwiY29uZmlnLnNob3dFeHBvcnQgJiYgIWhhc0V4cG9ydFN1Yk1lbnUoKVwiIG1hdC1tZW51LWl0ZW0gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtZXhwb3J0XCIgKGNsaWNrKT1cIm9uRXhwb3J0KClcIj5cbiAgICA8bWF0LWljb24gY2xhc3M9XCJvcmdhbml6ZXItbWVudS1leHBvcnQtaWNvblwiPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWxhYmVsXCI+RXhwb3J0ZXI8L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDwhLS0gRXhwb3J0IGdyYXBoaXF1ZSAobW9kZSBjaGFydCkg4oCUIG91dnJlIHVuIHNvdXMtbWVudSAtLT5cbiAgPGJ1dHRvbiAqbmdJZj1cImNvbmZpZy5zaG93RXhwb3J0ICYmIGhhc0V4cG9ydFN1Yk1lbnUoKVwiIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImV4cG9ydFN1Yk1lbnVcIiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LXRyaWdnZXIgb3JnYW5pemVyLW1lbnUtZXhwb3J0XCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtZXhwb3J0LWljb25cIj5kb3dubG9hZDwvbWF0LWljb24+XG4gICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItbWVudS1sYWJlbFwiPkV4cG9ydGVyPC9zcGFuPlxuICA8L2J1dHRvbj5cblxuICA8IS0tIFByw6lmw6lyZW5jZXMgLS0+XG4gIDxtYXQtZGl2aWRlciAqbmdJZj1cImNvbmZpZy5zaG93UHJlZmVyZW5jZXNcIiBjbGFzcz1cIm9yZ2FuaXplci1kaXZpZGVyXCI+PC9tYXQtZGl2aWRlcj5cbiAgPGJ1dHRvbiAqbmdJZj1cImNvbmZpZy5zaG93UHJlZmVyZW5jZXNcIiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJwcmVmZXJlbmNlc1N1Yk1lbnVcIiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LXRyaWdnZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LWxhYmVsXCI+UHLDqWbDqXJlbmNlczwvc3Bhbj5cbiAgPC9idXR0b24+XG5cbiAgPG1hdC1kaXZpZGVyICpuZ0lmPVwiY29uZmlnLnNob3dSZXNldCA9PT0gdHJ1ZVwiIGNsYXNzPVwib3JnYW5pemVyLWRpdmlkZXJcIj48L21hdC1kaXZpZGVyPlxuICA8YnV0dG9uICpuZ0lmPVwiY29uZmlnLnNob3dSZXNldCA9PT0gdHJ1ZVwiIG1hdC1tZW51LWl0ZW0gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtcmVzZXRcIiAoY2xpY2spPVwib25SZXNldCgpXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwib3JnYW5pemVyLW1lbnUtZXhwb3J0LWljb25cIj5yZXN0YXJ0X2FsdDwvbWF0LWljb24+XG4gICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItbWVudS1sYWJlbFwiPlLDqWluaXRpYWxpc2VyIGxhIHZ1ZTwvc3Bhbj5cbiAgPC9idXR0b24+XG5cbiAgPCEtLSBTd2l0Y2ggY2hhcnQgLyB0YWJsZSAtLT5cbiAgPG1hdC1kaXZpZGVyICpuZ0lmPVwiaGFzU3dpdGNoVmlldygpXCIgY2xhc3M9XCJvcmdhbml6ZXItZGl2aWRlclwiPjwvbWF0LWRpdmlkZXI+XG4gIDxidXR0b24gKm5nSWY9XCJoYXNTd2l0Y2hWaWV3KClcIiBtYXQtbWVudS1pdGVtIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm9yZ2FuaXplci1tZW51LXRyaWdnZXJcIiAoY2xpY2spPVwib25Td2l0Y2hWaWV3KClcIj5cbiAgICA8bWF0LWljb24gY2xhc3M9XCJvcmdhbml6ZXItbWVudS1leHBvcnQtaWNvblwiPnt7IGNvbmZpZy5zd2l0Y2hWaWV3Py5jdXJyZW50VmlldyA9PT0gJ2NoYXJ0JyA/ICd0YWJsZV9jaGFydCcgOiAnYmFyX2NoYXJ0JyB9fTwvbWF0LWljb24+XG4gICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItbWVudS1sYWJlbFwiPnt7IGNvbmZpZy5zd2l0Y2hWaWV3Py5jdXJyZW50VmlldyA9PT0gJ2NoYXJ0JyA/ICdUYWJsZWF1JyA6ICdHcmFwaGlxdWUnIH19PC9zcGFuPlxuICA8L2J1dHRvbj5cblxuPC9tYXQtbWVudT5cblxuPCEtLSBTb3VzLW1lbnUgOiB0eXBlcyBkZSBncmFwaGlxdWUgLS0+XG48bWF0LW1lbnUgI2NoYXJ0VHlwZXNTdWJNZW51PVwibWF0TWVudVwiIHBhbmVsQ2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1wYW5lbFwiPlxuICA8ZGl2IGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnVcIlxuICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWl0ZW1cIlxuICAgICAgKm5nRm9yPVwibGV0IGNoYXJ0VHlwZSBvZiBjb25maWcuY2hhcnRUeXBlc1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImlzQ2hhcnRUeXBlQWN0aXZlKGNoYXJ0VHlwZS5pZClcIlxuICAgICAgW2Rpc2FibGVkXT1cImNoYXJ0VHlwZS5kaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwib25DaGFydFR5cGVTZWxlY3QoY2hhcnRUeXBlLmlkKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1jaGVja1wiPnt7IGlzQ2hhcnRUeXBlQWN0aXZlKGNoYXJ0VHlwZS5pZCkgPyAn4pyTJyA6ICcnIH19PC9zcGFuPlxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwiY2hhcnRUeXBlLmljb25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWljb25cIj57eyBjaGFydFR5cGUuaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICB7eyBjaGFydFR5cGUubGFiZWwgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L21hdC1tZW51PlxuXG48IS0tIFNvdXMtbWVudSA6IGFjdGlvbnMgZHUgdmlzdWVsIC0tPlxuPG1hdC1tZW51ICNhY3Rpb25zU3ViTWVudT1cIm1hdE1lbnVcIiBwYW5lbENsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtcGFuZWxcIj5cbiAgPGRpdiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51XCJcbiAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImlzQ29weUFjdGlvblZpc2libGUoKVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWl0ZW1cIlxuICAgICAgKGNsaWNrKT1cIm9uQ29weVZpc3VhbCgpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWNoZWNrXCI+PC9zcGFuPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaWNvblwiPmNvbnRlbnRfY29weTwvbWF0LWljb24+XG4gICAgICBDb3BpZXJcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiaXNGdWxsc2NyZWVuQWN0aW9uVmlzaWJsZSgpXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaXRlbVwiXG4gICAgICAoY2xpY2spPVwib25Ub2dnbGVGdWxsc2NyZWVuKClcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtY2hlY2tcIj48L3NwYW4+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pY29uXCI+e3sgY29uZmlnLmlzRnVsbHNjcmVlbiA/ICdmdWxsc2NyZWVuX2V4aXQnIDogJ2Z1bGxzY3JlZW4nIH19PC9tYXQtaWNvbj5cbiAgICAgIHt7IGNvbmZpZy5pc0Z1bGxzY3JlZW4gPyAnUXVpdHRlciBsZSBwbGVpbiDDqWNyYW4nIDogJ1BsZWluIMOpY3JhbicgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L21hdC1tZW51PlxuXG48IS0tIFNvdXMtbWVudSA6IEV4cG9ydCBncmFwaGlxdWUgLS0+XG48bWF0LW1lbnUgI2V4cG9ydFN1Yk1lbnU9XCJtYXRNZW51XCIgcGFuZWxDbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LXBhbmVsXCI+XG4gIDxkaXYgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudVwiXG4gICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgIDxidXR0b24gKm5nSWY9XCJjb25maWcub25FeHBvcnRWaXN1YWxcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pdGVtXCJcbiAgICAgIChjbGljayk9XCJvbkV4cG9ydFZpc3VhbCgpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWNoZWNrXCI+PC9zcGFuPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaWNvblwiPmltYWdlPC9tYXQtaWNvbj5cbiAgICAgIFZpc3VlbFxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJjb25maWcub25FeHBvcnREYXRhXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaXRlbVwiXG4gICAgICAoY2xpY2spPVwib25FeHBvcnREYXRhKClcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtY2hlY2tcIj48L3NwYW4+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pY29uXCI+dGFibGVfY2hhcnQ8L21hdC1pY29uPlxuICAgICAgRG9ubsOpZXNcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L21hdC1tZW51PlxuXG48IS0tIFNvdXMtbWVudSA6IENoYW1wcyBjaGFydCAoWCArIFkpIC0tPlxuPG1hdC1tZW51ICNjaGFtcHNTdWJNZW51PVwibWF0TWVudVwiIHBhbmVsQ2xhc3M9XCJvcmdhbml6ZXItY2hhbXBzLXBhbmVsXCI+XG4gIDxkaXYgY2xhc3M9XCJvcmdhbml6ZXItY2hhbXBzLXdyYXBwZXJcIlxuICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cblxuICAgIDwhLS0gQmxvYyBYIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJvcmdhbml6ZXItY2hhbXBzLWJsb2NrXCIgKm5nSWY9XCJjb25maWcueEZpZWxkcz8ubGVuZ3RoXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1jaGFtcHMtYmxvY2stdGl0bGVcIj5BeGUgaG9yaXpvbnRhbCDigJQgWDwvc3Bhbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaXRlbVwiXG4gICAgICAgICpuZ0Zvcj1cImxldCB4RmllbGQgb2YgY29uZmlnLnhGaWVsZHNcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInN0YXRlPy5zZWxlY3RlZFggPT09IHhGaWVsZC5pZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ4RmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwib25YRmllbGRTZWxlY3QoeEZpZWxkLmlkKVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWNoZWNrXCI+e3sgc3RhdGU/LnNlbGVjdGVkWCA9PT0geEZpZWxkLmlkID8gJ+KckycgOiAnJyB9fTwvc3Bhbj5cbiAgICAgICAge3sgeEZpZWxkLmxhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtZGl2aWRlciAqbmdJZj1cImNvbmZpZy54RmllbGRzPy5sZW5ndGggJiYgY29uZmlnLnlGaWVsZHM/Lmxlbmd0aFwiIGNsYXNzPVwib3JnYW5pemVyLWNoYW1wcy1kaXZpZGVyXCI+PC9tYXQtZGl2aWRlcj5cblxuICAgIDwhLS0gQmxvYyBZIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJvcmdhbml6ZXItY2hhbXBzLWJsb2NrXCIgKm5nSWY9XCJjb25maWcueUZpZWxkcz8ubGVuZ3RoXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1jaGFtcHMtYmxvY2stdGl0bGVcIj5BeGUgdmVydGljYWwg4oCUIFk8L3NwYW4+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB5RmllbGQgb2YgY29uZmlnLnlGaWVsZHNcIj5cblxuICAgICAgICA8IS0tIFkgc2ltcGxlIChDb3VudCBzYW5zIGFncsOpZ2F0IG5pIHN0YWNrKSAtLT5cbiAgICAgICAgPCEtLSBZIHNpbXBsZSAoQ291bnQgb3UgbcOpdHJpcXVlIGRpcmVjdGUpIC0tPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIXlGaWVsZC5hZ2dyZWdhdGVzPy5sZW5ndGhcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWl0ZW1cIlxuICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNZQWN0aXZlKHlGaWVsZC5pZClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ5RmllbGQuZGlzYWJsZWRcIlxuICAgICAgICAgIChjbGljayk9XCJvbllGaWVsZFNlbGVjdCh5RmllbGQuaWQpXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1jaGVja1wiPnt7IGlzWUFjdGl2ZSh5RmllbGQuaWQpID8gJ+KckycgOiAnJyB9fTwvc3Bhbj5cbiAgICAgICAgICB7eyB5RmllbGQubGFiZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPCEtLSBZIGF2ZWMgYWdyw6lnYXRzIOKGkiBzb3VzLW1lbnUgLS0+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJ5RmllbGQuYWdncmVnYXRlcz8ubGVuZ3RoXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pdGVtIG9yZ2FuaXplci1zdWJtZW51LWl0ZW0tLWhhcy1jaGlsZHJlblwiXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc1lBY3RpdmUoeUZpZWxkLmlkKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInlGaWVsZC5kaXNhYmxlZFwiXG4gICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInlBZ2dTdWJNZW51XCJcbiAgICAgICAgICBbbWF0TWVudVRyaWdnZXJEYXRhXT1cInsgeUZpZWxkOiB5RmllbGQgfVwiXG4gICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWNoZWNrXCI+e3sgaXNZQWN0aXZlKHlGaWVsZC5pZCkgPyAn4pyTJyA6ICcnIH19PC9zcGFuPlxuICAgICAgICAgIHt7IHlGaWVsZC5sYWJlbCB9fVxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWFycm93XCI+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICA8L2Rpdj5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gU291cy1tZW51IGR5bmFtaXF1ZSA6IGFncsOpZ2F0cyBkJ3VuIGNoYW1wIFkgLS0+XG48bWF0LW1lbnUgI3lBZ2dTdWJNZW51PVwibWF0TWVudVwiIHBhbmVsQ2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1wYW5lbFwiPlxuICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LXlGaWVsZD1cInlGaWVsZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudVwiXG4gICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pdGVtXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGFnZyBvZiB5RmllbGQuYWdncmVnYXRlc1wiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNZQWdncmVnYXRlQWN0aXZlKHlGaWVsZC5pZCwgYWdnLmlkKVwiXG4gICAgICAgIChjbGljayk9XCJvbllBZ2dyZWdhdGVTZWxlY3QoeUZpZWxkLmlkLCBhZ2cuaWQpXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtY2hlY2tcIj57eyBpc1lBZ2dyZWdhdGVBY3RpdmUoeUZpZWxkLmlkLCBhZ2cuaWQpID8gJ+KckycgOiAnJyB9fTwvc3Bhbj5cbiAgICAgICAge3sgYWdnLmxhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gU291cy1tZW51IDogQ2hhbXBzIHRhYmxlICh0b2dnbGUgY29sb25uZXMpIC0tPlxuPG1hdC1tZW51ICNmaWVsZHNTdWJNZW51PVwibWF0TWVudVwiIHBhbmVsQ2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1wYW5lbFwiPlxuICA8ZGl2IGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnVcIlxuICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWl0ZW1cIlxuICAgICAgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGNvbmZpZy5maWVsZHNcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc0ZpZWxkVmlzaWJsZShmaWVsZC5pZClcIlxuICAgICAgKGNsaWNrKT1cIm9uRmllbGRUb2dnbGUoZmllbGQuaWQsICFpc0ZpZWxkVmlzaWJsZShmaWVsZC5pZCkpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWNoZWNrXCI+e3sgaXNGaWVsZFZpc2libGUoZmllbGQuaWQpID8gJ+KckycgOiAnJyB9fTwvc3Bhbj4gICAgICA8bWF0LWljb24gKm5nSWY9XCJmaWVsZC5pY29uXCIgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pY29uXCI+e3sgZmllbGQuaWNvbiB9fTwvbWF0LWljb24+ICAgICAge3sgZmllbGQubGFiZWwgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L21hdC1tZW51PlxuXG48IS0tIFNvdXMtbWVudSA6IEdyb3VwZXIgcGFyIC0tPlxuPG1hdC1tZW51ICNncm91cHNTdWJNZW51PVwibWF0TWVudVwiIHBhbmVsQ2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1wYW5lbFwiPlxuICA8ZGl2IGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnVcIlxuICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWl0ZW1cIlxuICAgICAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGNvbmZpZy5ncm91cHNcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzdGF0ZT8uc2VsZWN0ZWRHcm91cEJ5ID09PSBncm91cC5pZFwiXG4gICAgICAoY2xpY2spPVwib25Hcm91cEJ5U2VsZWN0KGdyb3VwLmlkKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1jaGVja1wiPnt7IHN0YXRlPy5zZWxlY3RlZEdyb3VwQnkgPT09IGdyb3VwLmlkID8gJ+KckycgOiAnJyB9fTwvc3Bhbj4gICAgICA8bWF0LWljb24gKm5nSWY9XCJncm91cC5pY29uXCIgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pY29uXCI+e3sgZ3JvdXAuaWNvbiB9fTwvbWF0LWljb24+ICAgICAge3sgZ3JvdXAubGFiZWwgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L21hdC1tZW51PlxuXG48IS0tIFNvdXMtbWVudSA6IEZpbHRyZXIgcGFyIC0tPlxuPG1hdC1tZW51ICNzbGljZXNTdWJNZW51PVwibWF0TWVudVwiIHBhbmVsQ2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1wYW5lbFwiPlxuICA8ZGl2IGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnVcIlxuICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWl0ZW1cIlxuICAgICAgKm5nRm9yPVwibGV0IHNsaWNlIG9mIGNvbmZpZy5zbGljZXNcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzdGF0ZT8uc2VsZWN0ZWRTbGljZXM/LmluY2x1ZGVzKHNsaWNlLmlkKVwiXG4gICAgICAoY2xpY2spPVwib25TbGljZUNsaWNrKHNsaWNlLmlkKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1jaGVja1wiPnt7IHN0YXRlPy5zZWxlY3RlZFNsaWNlcz8uaW5jbHVkZXMoc2xpY2UuaWQpID8gJ+KckycgOiAnJyB9fTwvc3Bhbj4gICAgICA8bWF0LWljb24gKm5nSWY9XCJzbGljZS5pY29uXCIgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pY29uXCI+e3sgc2xpY2UuaWNvbiB9fTwvbWF0LWljb24+ICAgICAge3sgc2xpY2UubGFiZWwgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L21hdC1tZW51PlxuXG48IS0tIFNvdXMtbWVudSA6IFRlbXBsYXRlIC0tPlxuPG1hdC1tZW51ICN0ZW1wbGF0ZVN1Yk1lbnU9XCJtYXRNZW51XCIgcGFuZWxDbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LXBhbmVsXCI+XG4gIDxkaXYgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudVwiXG4gICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaXRlbVwiXG4gICAgICAqbmdGb3I9XCJsZXQgdG1wbCBvZiBjb25maWcudGVtcGxhdGVzXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwic3RhdGU/LnNlbGVjdGVkVGVtcGxhdGUgPT09IHRtcGwuaWRcIlxuICAgICAgW3RpdGxlXT1cInRtcGwuZGVzY3JpcHRpb24gfHwgJydcIlxuICAgICAgKGNsaWNrKT1cIm9uVGVtcGxhdGVTZWxlY3QodG1wbC5pZClcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtY2hlY2tcIj57eyBzdGF0ZT8uc2VsZWN0ZWRUZW1wbGF0ZSA9PT0gdG1wbC5pZCA/ICfinJMnIDogJycgfX08L3NwYW4+XG4gICAgICA8bWF0LWljb24gKm5nSWY9XCJ0bXBsLmljb25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWljb25cIj57eyB0bXBsLmljb24gfX08L21hdC1pY29uPlxuICAgICAge3sgdG1wbC5sYWJlbCB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gU291cy1tZW51IDogUHLDqWbDqXJlbmNlcyAtLT5cbjxtYXQtbWVudSAjcHJlZmVyZW5jZXNTdWJNZW51PVwibWF0TWVudVwiIHBhbmVsQ2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1wYW5lbFwiPlxuICA8ZGl2IGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnVcIlxuICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWl0ZW1cIiAoY2xpY2spPVwib25QcmVmZXJlbmNlc0VkaXQoKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1jaGVja1wiPjwvc3Bhbj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWljb25cIj5lZGl0PC9tYXQtaWNvbj7DiWRpdGVyXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pdGVtXCIgKGNsaWNrKT1cIm9uUHJlZmVyZW5jZXNTYXZlKClcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtY2hlY2tcIj48L3NwYW4+XG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJvcmdhbml6ZXItc3VibWVudS1pY29uXCI+c2F2ZTwvbWF0LWljb24+U2F1dmVnYXJkZXJcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWl0ZW1cIiBbZGlzYWJsZWRdPVwiIWNvbmZpZy5oYXNTYXZlZFByZWZlcmVuY2VzXCIgKGNsaWNrKT1cIm9uUHJlZmVyZW5jZXNDbGVhcigpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm9yZ2FuaXplci1zdWJtZW51LWNoZWNrXCI+PC9zcGFuPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwib3JnYW5pemVyLXN1Ym1lbnUtaWNvblwiPmRlbGV0ZV9vdXRsaW5lPC9tYXQtaWNvbj5Sw6lpbml0aWFsaXNlclxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbWF0LW1lbnU+XG5cbiJdfQ==