@ogidor/dashboard 1.0.16 → 1.0.17

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.
@@ -64,7 +64,7 @@ export declare class CustomGridComponent implements OnInit, OnDestroy, OnChanges
64
64
  private boundMouseUp;
65
65
  constructor(zone: NgZone, cdr: ChangeDetectorRef);
66
66
  ngOnInit(): void;
67
- ngOnChanges(_changes: SimpleChanges): void;
67
+ ngOnChanges(changes: SimpleChanges): void;
68
68
  ngOnDestroy(): void;
69
69
  trackByFn(_index: number, item: Widget): string;
70
70
  private get cellWidth();
@@ -87,6 +87,7 @@ export declare class CustomGridComponent implements OnInit, OnDestroy, OnChanges
87
87
  private handleResizeMove;
88
88
  private finalizeResize;
89
89
  private compactAndApply;
90
+ private applyCompactionAndSync;
90
91
  private updateContainerHeight;
91
92
  static ɵfac: i0.ɵɵFactoryDeclaration<CustomGridComponent, never>;
92
93
  static ɵcmp: i0.ɵɵComponentDeclaration<CustomGridComponent, "app-grid", never, { "widgets": "widgets"; "columns": "columns"; "gap": "gap"; "rowHeight": "rowHeight"; "minItemCols": "minItemCols"; "minItemRows": "minItemRows"; }, { "itemChanged": "itemChanged"; "layoutChanged": "layoutChanged"; }, ["cellTemplate"], never, false, never>;
@@ -140,15 +140,23 @@ export class CustomGridComponent {
140
140
  this.boundMouseUp = this.onMouseUp.bind(this);
141
141
  }
142
142
  ngOnInit() {
143
- this.compactAndApply();
143
+ this.applyCompactionAndSync();
144
144
  this.updateContainerHeight();
145
145
  this.zone.runOutsideAngular(() => {
146
146
  window.addEventListener('mousemove', this.boundMouseMove);
147
147
  window.addEventListener('mouseup', this.boundMouseUp);
148
148
  });
149
149
  }
150
- ngOnChanges(_changes) {
150
+ ngOnChanges(changes) {
151
+ if (this.dragging || this.resizing) {
152
+ this.updateContainerHeight();
153
+ return;
154
+ }
155
+ if (changes['widgets'] || changes['columns']) {
156
+ this.applyCompactionAndSync();
157
+ }
151
158
  this.updateContainerHeight();
159
+ this.cdr.markForCheck();
152
160
  }
153
161
  ngOnDestroy() {
154
162
  window.removeEventListener('mousemove', this.boundMouseMove);
@@ -367,15 +375,32 @@ export class CustomGridComponent {
367
375
  // ── Utilities ──
368
376
  compactAndApply() {
369
377
  if (!this.widgets?.length)
370
- return;
378
+ return [];
371
379
  const compacted = GridEngine.compact(this.widgets.map(w => ({ id: w.id, x: w.x, y: w.y, cols: w.cols, rows: w.rows })), this.columns);
380
+ const changedWidgets = [];
372
381
  for (const rw of compacted) {
373
382
  const w = this.widgets.find(ww => ww.id === rw.id);
374
- if (w) {
383
+ if (!w)
384
+ continue;
385
+ const changed = w.x !== rw.x || w.y !== rw.y || w.cols !== rw.cols || w.rows !== rw.rows;
386
+ if (changed) {
375
387
  w.x = rw.x;
376
388
  w.y = rw.y;
389
+ w.cols = rw.cols;
390
+ w.rows = rw.rows;
391
+ changedWidgets.push(w);
377
392
  }
378
393
  }
394
+ return changedWidgets;
395
+ }
396
+ applyCompactionAndSync() {
397
+ const changedWidgets = this.compactAndApply();
398
+ if (!changedWidgets.length)
399
+ return;
400
+ for (const widget of changedWidgets) {
401
+ this.itemChanged.emit(widget);
402
+ }
403
+ this.layoutChanged.emit(this.widgets);
379
404
  }
380
405
  updateContainerHeight() {
381
406
  if (!this.widgets?.length) {
@@ -506,4 +531,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
506
531
  type: ContentChild,
507
532
  args: [GridCellDirective, { read: TemplateRef }]
508
533
  }] } });
509
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9jdXN0b20tZ3JpZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFDdEMsU0FBUyxFQUNULFlBQVksRUFBRSxXQUFXLEVBQ3pCLFNBQVMsRUFBRSx1QkFBdUIsRUFDbkMsTUFBTSxlQUFlLENBQUM7OztBQUd2Qjs7Ozs7Ozs7R0FRRztBQUVILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFBbUIsV0FBNEM7UUFBNUMsZ0JBQVcsR0FBWCxXQUFXLENBQWlDO0lBQUcsQ0FBQzs7K0dBRHhELGlCQUFpQjttR0FBakIsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBRDdCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFOztBQW1CckMsTUFBTSxVQUFVO0lBRWQ7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQVcsRUFBRSxDQUFXO1FBQ3RDLE9BQU8sQ0FBQyxDQUNOLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQW1CLEVBQUUsSUFBYztRQUN6RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUs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OztHQThDVCxtQkEyRGdCLHVCQUF1QixDQUFDLE1BQU07NkhBR3RDLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFFdUMsYUFBYTtzQkFBMUQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdZLFlBQVk7c0JBQW5FLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZCwgT25EZXN0cm95LCBPbkluaXQsIE5nWm9uZSwgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZCwgVGVtcGxhdGVSZWYsXG4gIERpcmVjdGl2ZSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdpZGdldCB9IGZyb20gJy4vbW9kZWxzJztcblxuLyoqXG4gKiBEaXJlY3RpdmUgYXBwbGllZCB0byB0aGUgdGVtcGxhdGUgdGhhdCBzaG91bGQgYmUgc3RhbXBlZCBpbnNpZGUgZWFjaCBncmlkIGNlbGwuXG4gKiBVc2FnZTpcbiAqICAgPGFwcC1ncmlkIFt3aWRnZXRzXT1cIi4uLlwiPlxuICogICAgIDxuZy10ZW1wbGF0ZSBncmlkQ2VsbCBsZXQtd2lkZ2V0PVwid2lkZ2V0XCI+XG4gKiAgICAgICA8YXBwLXdpZGdldC1yZW5kZXJlciBbd2lkZ2V0XT1cIndpZGdldFwiIC4uLj48L2FwcC13aWRnZXQtcmVuZGVyZXI+XG4gKiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgPC9hcHAtZ3JpZD5cbiAqL1xuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2dyaWRDZWxsXScgfSlcbmV4cG9ydCBjbGFzcyBHcmlkQ2VsbERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8eyB3aWRnZXQ6IFdpZGdldCB9Pikge31cbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBHUklEIEVOR0lORSDigJQgcHVyZSBkYXRhLCB6ZXJvIERPTVxuICAgSGFuZGxlcyBjb2xsaXNpb24gZGV0ZWN0aW9uLCByZXNvbHV0aW9uLCBhbmQgY29tcGFjdGlvbi5cbiAgIEluc3BpcmVkIGJ5IHJlYWN0LWdyaWQtbGF5b3V0IC8gZ3JpZHN0ZXIgYWxnb3JpdGhtcy5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG5pbnRlcmZhY2UgR3JpZFJlY3Qge1xuICBpZDogc3RyaW5nO1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgY29sczogbnVtYmVyO1xuICByb3dzOiBudW1iZXI7XG59XG5cbmNsYXNzIEdyaWRFbmdpbmUge1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gcmVjdHMgb3ZlcmxhcC5cbiAgICovXG4gIHN0YXRpYyBjb2xsaWRlcyhhOiBHcmlkUmVjdCwgYjogR3JpZFJlY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIShcbiAgICAgIGEueCArIGEuY29scyA8PSBiLnggfHxcbiAgICAgIGIueCArIGIuY29scyA8PSBhLnggfHxcbiAgICAgIGEueSArIGEucm93cyA8PSBiLnkgfHxcbiAgICAgIGIueSArIGIucm93cyA8PSBhLnlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBBTEwgd2lkZ2V0cyB0aGF0IGNvbGxpZGUgd2l0aCBgcmVjdGAuXG4gICAqL1xuICBzdGF0aWMgZ2V0QWxsQ29sbGlzaW9ucyh3aWRnZXRzOiBHcmlkUmVjdFtdLCByZWN0OiBHcmlkUmVjdCk6IEdyaWRSZWN0W10ge1xuICAgIHJldHVybiB3aWRnZXRzLmZpbHRlcih3ID0+IHcuaWQgIT09IHJlY3QuaWQgJiYgR3JpZEVuZ2luZS5jb2xsaWRlcyh3LCByZWN0KSk7XG4gIH1cblxuICAvKipcbiAgICogU29ydCB3aWRnZXRzIHRvcC10by1ib3R0b20sIGxlZnQtdG8tcmlnaHQuXG4gICAqL1xuICBzdGF0aWMgc29ydEJ5UG9zaXRpb24od2lkZ2V0czogR3JpZFJlY3RbXSk6IEdyaWRSZWN0W10ge1xuICAgIHJldHVybiBbLi4ud2lkZ2V0c10uc29ydCgoYSwgYikgPT4gYS55IC0gYi55IHx8IGEueCAtIGIueCk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBhIHdpZGdldCB0byAoeCwgeSkgYW5kIHB1c2ggYW55IGNvbGxpZGluZyB3aWRnZXRzIGRvd253YXJkLlxuICAgKiBSZXR1cm5zIHRoZSBmdWxsIGxpc3Qgd2l0aCByZXNvbHZlZCBwb3NpdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgbW92ZVdpZGdldChcbiAgICBhbGxXaWRnZXRzOiBHcmlkUmVjdFtdLFxuICAgIHdpZGdldDogR3JpZFJlY3QsXG4gICAgbmV3WDogbnVtYmVyLFxuICAgIG5ld1k6IG51bWJlcixcbiAgICBjb2x1bW5zOiBudW1iZXJcbiAgKTogR3JpZFJlY3RbXSB7XG4gICAgY29uc3Qgd2lkZ2V0cyA9IGFsbFdpZGdldHMubWFwKHcgPT4gKHsgLi4udyB9KSk7XG4gICAgY29uc3QgbW92aW5nID0gd2lkZ2V0cy5maW5kKHcgPT4gdy5pZCA9PT0gd2lkZ2V0LmlkKTtcbiAgICBpZiAoIW1vdmluZykgcmV0dXJuIHdpZGdldHM7XG5cbiAgICBtb3ZpbmcueCA9IE1hdGgubWF4KDAsIE1hdGgubWluKG5ld1gsIGNvbHVtbnMgLSBtb3ZpbmcuY29scykpO1xuICAgIG1vdmluZy55ID0gTWF0aC5tYXgoMCwgbmV3WSk7XG5cbiAgICBjb25zdCBzb3J0ZWQgPSBHcmlkRW5naW5lLnNvcnRCeVBvc2l0aW9uKHdpZGdldHMpO1xuICAgIEdyaWRFbmdpbmUucmVzb2x2ZUNvbGxpc2lvbnMoc29ydGVkLCBtb3ZpbmcpO1xuICAgIHJldHVybiBHcmlkRW5naW5lLmNvbXBhY3Qoc29ydGVkLCBjb2x1bW5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNpemUgYSB3aWRnZXQgYW5kIHB1c2ggY29sbGlkaW5nIHdpZGdldHMgZG93bi5cbiAgICovXG4gIHN0YXRpYyByZXNpemVXaWRnZXQoXG4gICAgYWxsV2lkZ2V0czogR3JpZFJlY3RbXSxcbiAgICB3aWRnZXQ6IEdyaWRSZWN0LFxuICAgIG5ld0NvbHM6IG51bWJlcixcbiAgICBuZXdSb3dzOiBudW1iZXIsXG4gICAgY29sdW1uczogbnVtYmVyXG4gICk6IEdyaWRSZWN0W10ge1xuICAgIGNvbnN0IHdpZGdldHMgPSBhbGxXaWRnZXRzLm1hcCh3ID0+ICh7IC4uLncgfSkpO1xuICAgIGNvbnN0IHJlc2l6aW5nID0gd2lkZ2V0cy5maW5kKHcgPT4gdy5pZCA9PT0gd2lkZ2V0LmlkKTtcbiAgICBpZiAoIXJlc2l6aW5nKSByZXR1cm4gd2lkZ2V0cztcblxuICAgIHJlc2l6aW5nLmNvbHMgPSBNYXRoLm1heCgxLCBNYXRoLm1pbihuZXdDb2xzLCBjb2x1bW5zIC0gcmVzaXppbmcueCkpO1xuICAgIHJlc2l6aW5nLnJvd3MgPSBNYXRoLm1heCgxLCBuZXdSb3dzKTtcblxuICAgIGNvbnN0IHNvcnRlZCA9IEdyaWRFbmdpbmUuc29ydEJ5UG9zaXRpb24od2lkZ2V0cyk7XG4gICAgR3JpZEVuZ2luZS5yZXNvbHZlQ29sbGlzaW9ucyhzb3J0ZWQsIHJlc2l6aW5nKTtcbiAgICByZXR1cm4gR3JpZEVuZ2luZS5jb21wYWN0KHNvcnRlZCwgY29sdW1ucyk7XG4gIH1cblxuICAvKipcbiAgICogUHVzaCBhbGwgd2lkZ2V0cyB0aGF0IGNvbGxpZGUgd2l0aCBgbW92ZWRXaWRnZXRgIGRvd253YXJkLCByZWN1cnNpdmVseS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlc29sdmVDb2xsaXNpb25zKHdpZGdldHM6IEdyaWRSZWN0W10sIG1vdmVkV2lkZ2V0OiBHcmlkUmVjdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbGxpc2lvbnMgPSBHcmlkRW5naW5lLmdldEFsbENvbGxpc2lvbnMod2lkZ2V0cywgbW92ZWRXaWRnZXQpO1xuICAgIGZvciAoY29uc3QgY29sbGlkZXIgb2YgY29sbGlzaW9ucykge1xuICAgICAgY29sbGlkZXIueSA9IG1vdmVkV2lkZ2V0LnkgKyBtb3ZlZFdpZGdldC5yb3dzO1xuICAgICAgR3JpZEVuZ2luZS5yZXNvbHZlQ29sbGlzaW9ucyh3aWRnZXRzLCBjb2xsaWRlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhY3QgdGhlIGdyaWQ6IG1vdmUgZXZlcnkgd2lkZ2V0IGFzIGZhciB1cCBhcyBwb3NzaWJsZSB3aXRob3V0IG92ZXJsYXBwaW5nLlxuICAgKi9cbiAgc3RhdGljIGNvbXBhY3Qod2lkZ2V0czogR3JpZFJlY3RbXSwgX2NvbHVtbnM6IG51bWJlcik6IEdyaWRSZWN0W10ge1xuICAgIGNvbnN0IHNvcnRlZCA9IEdyaWRFbmdpbmUuc29ydEJ5UG9zaXRpb24od2lkZ2V0cyk7XG4gICAgY29uc3QgcGxhY2VkOiBHcmlkUmVjdFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHdpZGdldCBvZiBzb3J0ZWQpIHtcbiAgICAgIHdpZGdldC55ID0gR3JpZEVuZ2luZS5maW5kQ29tcGFjdFkocGxhY2VkLCB3aWRnZXQpO1xuICAgICAgcGxhY2VkLnB1c2god2lkZ2V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxhY2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGhpZ2hlc3QgWSBwb3NpdGlvbiBhIHdpZGdldCBjYW4gb2NjdXB5IHdpdGhvdXQgb3ZlcmxhcHBpbmcgYW55IGFscmVhZHktcGxhY2VkIHdpZGdldC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZpbmRDb21wYWN0WShwbGFjZWQ6IEdyaWRSZWN0W10sIHdpZGdldDogR3JpZFJlY3QpOiBudW1iZXIge1xuICAgIGxldCB5ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgdGVzdDogR3JpZFJlY3QgPSB7IC4uLndpZGdldCwgeSB9O1xuICAgICAgY29uc3QgY29sbGlzaW9uID0gcGxhY2VkLmZpbmQocCA9PiBHcmlkRW5naW5lLmNvbGxpZGVzKHAsIHRlc3QpKTtcbiAgICAgIGlmICghY29sbGlzaW9uKSByZXR1cm4geTtcbiAgICAgIHkgPSBjb2xsaXNpb24ueSArIGNvbGxpc2lvbi5yb3dzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyB0aGUgZ3JpZCBuZWVkcy5cbiAgICovXG4gIHN0YXRpYyBnZXRHcmlkSGVpZ2h0KHdpZGdldHM6IEdyaWRSZWN0W10pOiBudW1iZXIge1xuICAgIGlmICh3aWRnZXRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLndpZGdldHMubWFwKHcgPT4gdy55ICsgdy5yb3dzKSk7XG4gIH1cbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBDVVNUT00gR1JJRCBDT01QT05FTlRcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZ3JpZCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgI2dyaWRDb250YWluZXJcbiAgICAgIGNsYXNzPVwiZ3JpZC1jb250YWluZXJcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjb250YWluZXJIZWlnaHRcIlxuICAgID5cbiAgICAgIDwhLS0gUGxhY2Vob2xkZXIgcHJldmlldyAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJncmlkLXBsYWNlaG9sZGVyXCJcbiAgICAgICAgKm5nSWY9XCJwbGFjZWhvbGRlclwiXG4gICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cInBsYWNlaG9sZGVyLmxlZnRcIlxuICAgICAgICBbc3R5bGUudG9wLnB4XT1cInBsYWNlaG9sZGVyLnRvcFwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJwbGFjZWhvbGRlci53aWR0aFwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicGxhY2Vob2xkZXIuaGVpZ2h0XCJcbiAgICAgID48L2Rpdj5cblxuICAgICAgPCEtLSBXaWRnZXQgaXRlbXMgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCB3aWRnZXQgb2Ygd2lkZ2V0czsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgY2xhc3M9XCJncmlkLWl0ZW1cIlxuICAgICAgICBbY2xhc3MuaXMtZHJhZ2dpbmddPVwiZHJhZ2dpbmc/LmlkID09PSB3aWRnZXQuaWRcIlxuICAgICAgICBbY2xhc3MuaXMtcmVzaXppbmddPVwicmVzaXppbmc/LmlkID09PSB3aWRnZXQuaWRcIlxuICAgICAgICBbc3R5bGUubGVmdC5weF09XCJnZXRJdGVtTGVmdCh3aWRnZXQpXCJcbiAgICAgICAgW3N0eWxlLnRvcC5weF09XCJnZXRJdGVtVG9wKHdpZGdldClcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiZ2V0SXRlbVdpZHRoKHdpZGdldClcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImdldEl0ZW1IZWlnaHQod2lkZ2V0KVwiXG4gICAgICAgIFtzdHlsZS56LWluZGV4XT1cIihkcmFnZ2luZz8uaWQgPT09IHdpZGdldC5pZCB8fCByZXNpemluZz8uaWQgPT09IHdpZGdldC5pZCkgPyAxMDAgOiAxXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkRyYWdTdGFydCgkZXZlbnQsIHdpZGdldClcIlxuICAgICAgPlxuICAgICAgICA8IS0tIENvbnRlbnQgc3RhbXBlZCBmcm9tIHBhcmVudCB0ZW1wbGF0ZSwgY29udGV4dCBjYXJyaWVzIHRoZSB3aWRnZXQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB3aWRnZXQ6IHdpZGdldCB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gUmVzaXplIGhhbmRsZSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIiAobW91c2Vkb3duKT1cIm9uUmVzaXplU3RhcnQoJGV2ZW50LCB3aWRnZXQpXCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTExIDF2MTBIMVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEgNXY2SDVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTExIDl2Mkg5XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgfVxuXG4gICAgLmdyaWQtY29udGFpbmVyIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjI1cyBlYXNlO1xuICAgIH1cblxuICAgIC5ncmlkLXBsYWNlaG9sZGVyIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRhc2gtcGxhY2Vob2xkZXItY29sb3IsIHZhcigtLWRhc2gtYWNjZW50LWNvbG9yLCAjMGE4NGZmKSk7XG4gICAgICBvcGFjaXR5OiAwLjEyO1xuICAgICAgYm9yZGVyLXJhZGl1czogMjRweDtcbiAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1kYXNoLXBsYWNlaG9sZGVyLWNvbG9yLCB2YXIoLS1kYXNoLWFjY2VudC1jb2xvciwgIzBhODRmZikpO1xuICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE1cyBlYXNlLCB0b3AgMC4xNXMgZWFzZSwgd2lkdGggMC4xNXMgZWFzZSwgaGVpZ2h0IDAuMTVzIGVhc2U7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIHotaW5kZXg6IDA7XG4gICAgfVxuXG4gICAgLmdyaWQtaXRlbSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIHRyYW5zaXRpb246IGxlZnQgMC4yNXMgZWFzZSwgdG9wIDAuMjVzIGVhc2UsIHdpZHRoIDAuMjVzIGVhc2UsIGhlaWdodCAwLjI1cyBlYXNlO1xuICAgICAgYm9yZGVyLXJhZGl1czogMjRweDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLmdyaWQtaXRlbS5pcy1kcmFnZ2luZyxcbiAgICAuZ3JpZC1pdGVtLmlzLXJlc2l6aW5nIHtcbiAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIG9wYWNpdHk6IDAuODg7XG4gICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICB9XG5cbiAgICAvKiBSZXNpemUgSGFuZGxlICovXG4gICAgLnJlc2l6ZS1oYW5kbGUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6IDRweDtcbiAgICAgIGJvdHRvbTogNHB4O1xuICAgICAgd2lkdGg6IDIycHg7XG4gICAgICBoZWlnaHQ6IDIycHg7XG4gICAgICBjdXJzb3I6IG53c2UtcmVzaXplO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGNvbG9yOiB2YXIoLS1kYXNoLXJlc2l6ZS1oYW5kbGUtY29sb3IsIHJnYmEoMjU1LDI1NSwyNTUsMC4yNSkpO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycywgYmFja2dyb3VuZCAwLjJzO1xuICAgICAgei1pbmRleDogMjA7XG4gICAgfVxuICAgIC5yZXNpemUtaGFuZGxlOmhvdmVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1kYXNoLWFjY2VudC1jb2xvciwgIzBhODRmZik7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpO1xuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgd2lkZ2V0czogV2lkZ2V0W10gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uczogbnVtYmVyID0gMTI7XG4gIEBJbnB1dCgpIGdhcDogbnVtYmVyID0gMTY7XG4gIEBJbnB1dCgpIHJvd0hlaWdodDogbnVtYmVyID0gODA7XG4gIEBJbnB1dCgpIG1pbkl0ZW1Db2xzOiBudW1iZXIgPSAxO1xuICBASW5wdXQoKSBtaW5JdGVtUm93czogbnVtYmVyID0gMTtcblxuICBAT3V0cHV0KCkgaXRlbUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFdpZGdldD4oKTtcbiAgQE91dHB1dCgpIGxheW91dENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFdpZGdldFtdPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2dyaWRDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBncmlkQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgLyoqIFRoZSBuZy10ZW1wbGF0ZSBkZWNvcmF0ZWQgd2l0aCBncmlkQ2VsbCBmcm9tIHRoZSBwYXJlbnQgKi9cbiAgQENvbnRlbnRDaGlsZChHcmlkQ2VsbERpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBjZWxsVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjx7IHdpZGdldDogV2lkZ2V0IH0+O1xuXG4gIHBsYWNlaG9sZGVyOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcbiAgY29udGFpbmVySGVpZ2h0ID0gNDAwO1xuXG4gIGRyYWdnaW5nOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBvZmZzZXRYOiBudW1iZXI7XG4gICAgb2Zmc2V0WTogbnVtYmVyO1xuICAgIGN1cnJlbnRQaXhlbFg6IG51bWJlcjtcbiAgICBjdXJyZW50UGl4ZWxZOiBudW1iZXI7XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICByZXNpemluZzoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc3RhcnRNb3VzZVg6IG51bWJlcjtcbiAgICBzdGFydE1vdXNlWTogbnVtYmVyO1xuICAgIHN0YXJ0Q29sczogbnVtYmVyO1xuICAgIHN0YXJ0Um93czogbnVtYmVyO1xuICAgIGN1cnJlbnRQaXhlbFc6IG51bWJlcjtcbiAgICBjdXJyZW50UGl4ZWxIOiBudW1iZXI7XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHByZXZpZXdXaWRnZXRzOiBHcmlkUmVjdFtdID0gW107XG4gIHByaXZhdGUgYm91bmRNb3VzZU1vdmUgPSB0aGlzLm9uTW91c2VNb3ZlLmJpbmQodGhpcyk7XG4gIHByaXZhdGUgYm91bmRNb3VzZVVwID0gdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29tcGFjdEFuZEFwcGx5KCk7XG4gICAgdGhpcy51cGRhdGVDb250YWluZXJIZWlnaHQoKTtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuYm91bmRNb3VzZU1vdmUpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmJvdW5kTW91c2VVcCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhfY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRoaXMudXBkYXRlQ29udGFpbmVySGVpZ2h0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5ib3VuZE1vdXNlTW92ZSk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmJvdW5kTW91c2VVcCk7XG4gIH1cblxuICB0cmFja0J5Rm4oX2luZGV4OiBudW1iZXIsIGl0ZW06IFdpZGdldCkgeyByZXR1cm4gaXRlbS5pZDsgfVxuXG4gIC8vIOKUgOKUgCBHZW9tZXRyeSDilIDilIBcblxuICBwcml2YXRlIGdldCBjZWxsV2lkdGgoKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb250YWluZXJXID0gdGhpcy5ncmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5jbGllbnRXaWR0aCA/PyA4MDA7XG4gICAgcmV0dXJuIChjb250YWluZXJXIC0gKHRoaXMuY29sdW1ucyAtIDEpICogdGhpcy5nYXApIC8gdGhpcy5jb2x1bW5zO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xUb1BpeGVsKGNvbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29sICogKHRoaXMuY2VsbFdpZHRoICsgdGhpcy5nYXApO1xuICB9XG5cbiAgcHJpdmF0ZSByb3dUb1BpeGVsKHJvdzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcm93ICogKHRoaXMucm93SGVpZ2h0ICsgdGhpcy5nYXApO1xuICB9XG5cbiAgcHJpdmF0ZSBwaXhlbFRvQ29sKHB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHB4IC8gKHRoaXMuY2VsbFdpZHRoICsgdGhpcy5nYXApKTtcbiAgfVxuXG4gIHByaXZhdGUgcGl4ZWxUb1JvdyhweDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChweCAvICh0aGlzLnJvd0hlaWdodCArIHRoaXMuZ2FwKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbHNUb1BpeGVsV2lkdGgoY29sczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29scyAqIHRoaXMuY2VsbFdpZHRoICsgKGNvbHMgLSAxKSAqIHRoaXMuZ2FwO1xuICB9XG5cbiAgcHJpdmF0ZSByb3dzVG9QaXhlbEhlaWdodChyb3dzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByb3dzICogdGhpcy5yb3dIZWlnaHQgKyAocm93cyAtIDEpICogdGhpcy5nYXA7XG4gIH1cblxuICBnZXRJdGVtTGVmdCh3OiBXaWRnZXQpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRyYWdnaW5nPy5pZCA9PT0gdy5pZCA/IHRoaXMuZHJhZ2dpbmcuY3VycmVudFBpeGVsWCA6IHRoaXMuY29sVG9QaXhlbCh3LngpO1xuICB9XG5cbiAgZ2V0SXRlbVRvcCh3OiBXaWRnZXQpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRyYWdnaW5nPy5pZCA9PT0gdy5pZCA/IHRoaXMuZHJhZ2dpbmcuY3VycmVudFBpeGVsWSA6IHRoaXMucm93VG9QaXhlbCh3LnkpO1xuICB9XG5cbiAgZ2V0SXRlbVdpZHRoKHc6IFdpZGdldCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmVzaXppbmc/LmlkID09PSB3LmlkID8gdGhpcy5yZXNpemluZy5jdXJyZW50UGl4ZWxXIDogdGhpcy5jb2xzVG9QaXhlbFdpZHRoKHcuY29scyk7XG4gIH1cblxuICBnZXRJdGVtSGVpZ2h0KHc6IFdpZGdldCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmVzaXppbmc/LmlkID09PSB3LmlkID8gdGhpcy5yZXNpemluZy5jdXJyZW50UGl4ZWxIIDogdGhpcy5yb3dzVG9QaXhlbEhlaWdodCh3LnJvd3MpO1xuICB9XG5cbiAgLy8g4pSA4pSAIERyYWcg4pSA4pSAXG5cbiAgb25EcmFnU3RhcnQoZXZlbnQ6IE1vdXNlRXZlbnQsIHdpZGdldDogV2lkZ2V0KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0YXJnZXQuY2xvc2VzdCgnYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYSwgLnJlc2l6ZS1oYW5kbGUnKSkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCByZWN0ID0gdGhpcy5ncmlkQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgaXRlbUxlZnQgPSB0aGlzLmNvbFRvUGl4ZWwod2lkZ2V0LngpO1xuICAgIGNvbnN0IGl0ZW1Ub3AgPSB0aGlzLnJvd1RvUGl4ZWwod2lkZ2V0LnkpO1xuXG4gICAgdGhpcy5kcmFnZ2luZyA9IHtcbiAgICAgIGlkOiB3aWRnZXQuaWQsXG4gICAgICBvZmZzZXRYOiBldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gaXRlbUxlZnQsXG4gICAgICBvZmZzZXRZOiBldmVudC5jbGllbnRZIC0gcmVjdC50b3AgLSBpdGVtVG9wLFxuICAgICAgY3VycmVudFBpeGVsWDogaXRlbUxlZnQsXG4gICAgICBjdXJyZW50UGl4ZWxZOiBpdGVtVG9wLFxuICAgIH07XG4gICAgdGhpcy5wcmV2aWV3V2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5tYXAodyA9PiAoeyBpZDogdy5pZCwgeDogdy54LCB5OiB3LnksIGNvbHM6IHcuY29scywgcm93czogdy5yb3dzIH0pKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0ge1xuICAgICAgbGVmdDogaXRlbUxlZnQsIHRvcDogaXRlbVRvcCxcbiAgICAgIHdpZHRoOiB0aGlzLmNvbHNUb1BpeGVsV2lkdGgod2lkZ2V0LmNvbHMpLFxuICAgICAgaGVpZ2h0OiB0aGlzLnJvd3NUb1BpeGVsSGVpZ2h0KHdpZGdldC5yb3dzKSxcbiAgICB9O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25SZXNpemVTdGFydChldmVudDogTW91c2VFdmVudCwgd2lkZ2V0OiBXaWRnZXQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucmVzaXppbmcgPSB7XG4gICAgICBpZDogd2lkZ2V0LmlkLFxuICAgICAgc3RhcnRNb3VzZVg6IGV2ZW50LmNsaWVudFgsXG4gICAgICBzdGFydE1vdXNlWTogZXZlbnQuY2xpZW50WSxcbiAgICAgIHN0YXJ0Q29sczogd2lkZ2V0LmNvbHMsXG4gICAgICBzdGFydFJvd3M6IHdpZGdldC5yb3dzLFxuICAgICAgY3VycmVudFBpeGVsVzogdGhpcy5jb2xzVG9QaXhlbFdpZHRoKHdpZGdldC5jb2xzKSxcbiAgICAgIGN1cnJlbnRQaXhlbEg6IHRoaXMucm93c1RvUGl4ZWxIZWlnaHQod2lkZ2V0LnJvd3MpLFxuICAgIH07XG4gICAgdGhpcy5wcmV2aWV3V2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5tYXAodyA9PiAoeyBpZDogdy5pZCwgeDogdy54LCB5OiB3LnksIGNvbHM6IHcuY29scywgcm93czogdy5yb3dzIH0pKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0ge1xuICAgICAgbGVmdDogdGhpcy5jb2xUb1BpeGVsKHdpZGdldC54KSwgdG9wOiB0aGlzLnJvd1RvUGl4ZWwod2lkZ2V0LnkpLFxuICAgICAgd2lkdGg6IHRoaXMuY29sc1RvUGl4ZWxXaWR0aCh3aWRnZXQuY29scyksXG4gICAgICBoZWlnaHQ6IHRoaXMucm93c1RvUGl4ZWxIZWlnaHQod2lkZ2V0LnJvd3MpLFxuICAgIH07XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG9uTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHRoaXMuaGFuZGxlRHJhZ01vdmUoZXZlbnQpO1xuICAgIGVsc2UgaWYgKHRoaXMucmVzaXppbmcpIHRoaXMuaGFuZGxlUmVzaXplTW92ZShldmVudCk7XG4gIH1cblxuICBwcml2YXRlIG9uTW91c2VVcChfZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kcmFnZ2luZykgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmZpbmFsaXplRHJhZygpKTtcbiAgICBlbHNlIGlmICh0aGlzLnJlc2l6aW5nKSB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuZmluYWxpemVSZXNpemUoKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURyYWdNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmRyYWdnaW5nKSByZXR1cm47XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuZ3JpZENvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHdpZGdldCA9IHRoaXMud2lkZ2V0cy5maW5kKHcgPT4gdy5pZCA9PT0gdGhpcy5kcmFnZ2luZyEuaWQpITtcbiAgICBpZiAoIXdpZGdldCkgcmV0dXJuO1xuXG4gICAgbGV0IHB4ID0gZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCAtIHRoaXMuZHJhZ2dpbmcub2Zmc2V0WDtcbiAgICBsZXQgcHkgPSBldmVudC5jbGllbnRZIC0gcmVjdC50b3AgLSB0aGlzLmRyYWdnaW5nLm9mZnNldFk7XG4gICAgcHggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihweCwgcmVjdC53aWR0aCAtIHRoaXMuY29sc1RvUGl4ZWxXaWR0aCh3aWRnZXQuY29scykpKTtcbiAgICBweSA9IE1hdGgubWF4KDAsIHB5KTtcblxuICAgIHRoaXMuZHJhZ2dpbmcuY3VycmVudFBpeGVsWCA9IHB4O1xuICAgIHRoaXMuZHJhZ2dpbmcuY3VycmVudFBpeGVsWSA9IHB5O1xuXG4gICAgY29uc3QgdGFyZ2V0Q29sID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5waXhlbFRvQ29sKHB4KSwgdGhpcy5jb2x1bW5zIC0gd2lkZ2V0LmNvbHMpKTtcbiAgICBjb25zdCB0YXJnZXRSb3cgPSBNYXRoLm1heCgwLCB0aGlzLnBpeGVsVG9Sb3cocHkpKTtcblxuICAgIGNvbnN0IHJlc29sdmVkID0gR3JpZEVuZ2luZS5tb3ZlV2lkZ2V0KFxuICAgICAgdGhpcy5wcmV2aWV3V2lkZ2V0cyxcbiAgICAgIHsgaWQ6IHdpZGdldC5pZCwgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCBjb2xzOiB3aWRnZXQuY29scywgcm93czogd2lkZ2V0LnJvd3MgfSxcbiAgICAgIHRhcmdldENvbCwgdGFyZ2V0Um93LCB0aGlzLmNvbHVtbnNcbiAgICApO1xuXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHtcbiAgICAgIGxlZnQ6IHRoaXMuY29sVG9QaXhlbCh0YXJnZXRDb2wpLCB0b3A6IHRoaXMucm93VG9QaXhlbCh0YXJnZXRSb3cpLFxuICAgICAgd2lkdGg6IHRoaXMuY29sc1RvUGl4ZWxXaWR0aCh3aWRnZXQuY29scyksXG4gICAgICBoZWlnaHQ6IHRoaXMucm93c1RvUGl4ZWxIZWlnaHQod2lkZ2V0LnJvd3MpLFxuICAgIH07XG5cbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgIGZvciAoY29uc3Qgcncgb2YgcmVzb2x2ZWQpIHtcbiAgICAgICAgaWYgKHJ3LmlkID09PSB3aWRnZXQuaWQpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCB3ID0gdGhpcy53aWRnZXRzLmZpbmQod3cgPT4gd3cuaWQgPT09IHJ3LmlkKTtcbiAgICAgICAgaWYgKHcpIHsgdy54ID0gcncueDsgdy55ID0gcncueTsgfVxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVDb250YWluZXJIZWlnaHQoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5hbGl6ZURyYWcoKSB7XG4gICAgaWYgKCF0aGlzLmRyYWdnaW5nKSByZXR1cm47XG4gICAgY29uc3Qgd2lkZ2V0ID0gdGhpcy53aWRnZXRzLmZpbmQodyA9PiB3LmlkID09PSB0aGlzLmRyYWdnaW5nIS5pZCkhO1xuICAgIGNvbnN0IHRhcmdldENvbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMucGl4ZWxUb0NvbCh0aGlzLmRyYWdnaW5nLmN1cnJlbnRQaXhlbFgpLCB0aGlzLmNvbHVtbnMgLSB3aWRnZXQuY29scykpO1xuICAgIGNvbnN0IHRhcmdldFJvdyA9IE1hdGgubWF4KDAsIHRoaXMucGl4ZWxUb1Jvdyh0aGlzLmRyYWdnaW5nLmN1cnJlbnRQaXhlbFkpKTtcblxuICAgIGNvbnN0IHJlc29sdmVkID0gR3JpZEVuZ2luZS5tb3ZlV2lkZ2V0KFxuICAgICAgdGhpcy53aWRnZXRzLm1hcCh3ID0+ICh7IGlkOiB3LmlkLCB4OiB3LngsIHk6IHcueSwgY29sczogdy5jb2xzLCByb3dzOiB3LnJvd3MgfSkpLFxuICAgICAgeyBpZDogd2lkZ2V0LmlkLCB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIGNvbHM6IHdpZGdldC5jb2xzLCByb3dzOiB3aWRnZXQucm93cyB9LFxuICAgICAgdGFyZ2V0Q29sLCB0YXJnZXRSb3csIHRoaXMuY29sdW1uc1xuICAgICk7XG4gICAgZm9yIChjb25zdCBydyBvZiByZXNvbHZlZCkge1xuICAgICAgY29uc3QgdyA9IHRoaXMud2lkZ2V0cy5maW5kKHd3ID0+IHd3LmlkID09PSBydy5pZCk7XG4gICAgICBpZiAodykgeyB3LnggPSBydy54OyB3LnkgPSBydy55OyB3LmNvbHMgPSBydy5jb2xzOyB3LnJvd3MgPSBydy5yb3dzOyB0aGlzLml0ZW1DaGFuZ2VkLmVtaXQodyk7IH1cbiAgICB9XG4gICAgdGhpcy5kcmFnZ2luZyA9IG51bGw7XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IG51bGw7XG4gICAgdGhpcy5wcmV2aWV3V2lkZ2V0cyA9IFtdO1xuICAgIHRoaXMudXBkYXRlQ29udGFpbmVySGVpZ2h0KCk7XG4gICAgdGhpcy5sYXlvdXRDaGFuZ2VkLmVtaXQodGhpcy53aWRnZXRzKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVzaXplTW92ZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5yZXNpemluZykgcmV0dXJuO1xuICAgIGNvbnN0IHdpZGdldCA9IHRoaXMud2lkZ2V0cy5maW5kKHcgPT4gdy5pZCA9PT0gdGhpcy5yZXNpemluZyEuaWQpITtcbiAgICBpZiAoIXdpZGdldCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZHggPSBldmVudC5jbGllbnRYIC0gdGhpcy5yZXNpemluZy5zdGFydE1vdXNlWDtcbiAgICBjb25zdCBkeSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLnJlc2l6aW5nLnN0YXJ0TW91c2VZO1xuXG4gICAgbGV0IG5ld0NvbHMgPSBNYXRoLm1heCh0aGlzLm1pbkl0ZW1Db2xzLCBNYXRoLnJvdW5kKCh0aGlzLmNvbHNUb1BpeGVsV2lkdGgodGhpcy5yZXNpemluZy5zdGFydENvbHMpICsgZHgpIC8gKHRoaXMuY2VsbFdpZHRoICsgdGhpcy5nYXApKSk7XG4gICAgbGV0IG5ld1Jvd3MgPSBNYXRoLm1heCh0aGlzLm1pbkl0ZW1Sb3dzLCBNYXRoLnJvdW5kKCh0aGlzLnJvd3NUb1BpeGVsSGVpZ2h0KHRoaXMucmVzaXppbmcuc3RhcnRSb3dzKSArIGR5KSAvICh0aGlzLnJvd0hlaWdodCArIHRoaXMuZ2FwKSkpO1xuICAgIG5ld0NvbHMgPSBNYXRoLm1pbihuZXdDb2xzLCB0aGlzLmNvbHVtbnMgLSB3aWRnZXQueCk7XG5cbiAgICB0aGlzLnJlc2l6aW5nLmN1cnJlbnRQaXhlbFcgPSB0aGlzLmNvbHNUb1BpeGVsV2lkdGgobmV3Q29scyk7XG4gICAgdGhpcy5yZXNpemluZy5jdXJyZW50UGl4ZWxIID0gdGhpcy5yb3dzVG9QaXhlbEhlaWdodChuZXdSb3dzKTtcblxuICAgIGNvbnN0IHJlc29sdmVkID0gR3JpZEVuZ2luZS5yZXNpemVXaWRnZXQoXG4gICAgICB0aGlzLnByZXZpZXdXaWRnZXRzLFxuICAgICAgeyBpZDogd2lkZ2V0LmlkLCB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIGNvbHM6IHdpZGdldC5jb2xzLCByb3dzOiB3aWRnZXQucm93cyB9LFxuICAgICAgbmV3Q29scywgbmV3Um93cywgdGhpcy5jb2x1bW5zXG4gICAgKTtcblxuICAgIHRoaXMucGxhY2Vob2xkZXIgPSB7XG4gICAgICBsZWZ0OiB0aGlzLmNvbFRvUGl4ZWwod2lkZ2V0LngpLCB0b3A6IHRoaXMucm93VG9QaXhlbCh3aWRnZXQueSksXG4gICAgICB3aWR0aDogdGhpcy5jb2xzVG9QaXhlbFdpZHRoKG5ld0NvbHMpLFxuICAgICAgaGVpZ2h0OiB0aGlzLnJvd3NUb1BpeGVsSGVpZ2h0KG5ld1Jvd3MpLFxuICAgIH07XG5cbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgIGZvciAoY29uc3Qgcncgb2YgcmVzb2x2ZWQpIHtcbiAgICAgICAgaWYgKHJ3LmlkID09PSB3aWRnZXQuaWQpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCB3ID0gdGhpcy53aWRnZXRzLmZpbmQod3cgPT4gd3cuaWQgPT09IHJ3LmlkKTtcbiAgICAgICAgaWYgKHcpIHsgdy54ID0gcncueDsgdy55ID0gcncueTsgfVxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVDb250YWluZXJIZWlnaHQoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5hbGl6ZVJlc2l6ZSgpIHtcbiAgICBpZiAoIXRoaXMucmVzaXppbmcpIHJldHVybjtcbiAgICBjb25zdCB3aWRnZXQgPSB0aGlzLndpZGdldHMuZmluZCh3ID0+IHcuaWQgPT09IHRoaXMucmVzaXppbmchLmlkKSE7XG5cbiAgICBsZXQgbmV3Q29scyA9IE1hdGgubWF4KHRoaXMubWluSXRlbUNvbHMsIE1hdGgucm91bmQodGhpcy5yZXNpemluZy5jdXJyZW50UGl4ZWxXIC8gKHRoaXMuY2VsbFdpZHRoICsgdGhpcy5nYXApKSk7XG4gICAgbGV0IG5ld1Jvd3MgPSBNYXRoLm1heCh0aGlzLm1pbkl0ZW1Sb3dzLCBNYXRoLnJvdW5kKHRoaXMucmVzaXppbmcuY3VycmVudFBpeGVsSCAvICh0aGlzLnJvd0hlaWdodCArIHRoaXMuZ2FwKSkpO1xuICAgIG5ld0NvbHMgPSBNYXRoLm1pbihuZXdDb2xzLCB0aGlzLmNvbHVtbnMgLSB3aWRnZXQueCk7XG5cbiAgICBjb25zdCByZXNvbHZlZCA9IEdyaWRFbmdpbmUucmVzaXplV2lkZ2V0KFxuICAgICAgdGhpcy53aWRnZXRzLm1hcCh3ID0+ICh7IGlkOiB3LmlkLCB4OiB3LngsIHk6IHcueSwgY29sczogdy5jb2xzLCByb3dzOiB3LnJvd3MgfSkpLFxuICAgICAgeyBpZDogd2lkZ2V0LmlkLCB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIGNvbHM6IHdpZGdldC5jb2xzLCByb3dzOiB3aWRnZXQucm93cyB9LFxuICAgICAgbmV3Q29scywgbmV3Um93cywgdGhpcy5jb2x1bW5zXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IHJ3IG9mIHJlc29sdmVkKSB7XG4gICAgICBjb25zdCB3ID0gdGhpcy53aWRnZXRzLmZpbmQod3cgPT4gd3cuaWQgPT09IHJ3LmlkKTtcbiAgICAgIGlmICh3KSB7IHcueCA9IHJ3Lng7IHcueSA9IHJ3Lnk7IHcuY29scyA9IHJ3LmNvbHM7IHcucm93cyA9IHJ3LnJvd3M7IHRoaXMuaXRlbUNoYW5nZWQuZW1pdCh3KTsgfVxuICAgIH1cbiAgICB0aGlzLnJlc2l6aW5nID0gbnVsbDtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gbnVsbDtcbiAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gW107XG4gICAgdGhpcy51cGRhdGVDb250YWluZXJIZWlnaHQoKTtcbiAgICB0aGlzLmxheW91dENoYW5nZWQuZW1pdCh0aGlzLndpZGdldHMpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFV0aWxpdGllcyDilIDilIBcblxuICBwcml2YXRlIGNvbXBhY3RBbmRBcHBseSgpIHtcbiAgICBpZiAoIXRoaXMud2lkZ2V0cz8ubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgY29tcGFjdGVkID0gR3JpZEVuZ2luZS5jb21wYWN0KFxuICAgICAgdGhpcy53aWRnZXRzLm1hcCh3ID0+ICh7IGlkOiB3LmlkLCB4OiB3LngsIHk6IHcueSwgY29sczogdy5jb2xzLCByb3dzOiB3LnJvd3MgfSkpLFxuICAgICAgdGhpcy5jb2x1bW5zXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IHJ3IG9mIGNvbXBhY3RlZCkge1xuICAgICAgY29uc3QgdyA9IHRoaXMud2lkZ2V0cy5maW5kKHd3ID0+IHd3LmlkID09PSBydy5pZCk7XG4gICAgICBpZiAodykgeyB3LnggPSBydy54OyB3LnkgPSBydy55OyB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb250YWluZXJIZWlnaHQoKSB7XG4gICAgaWYgKCF0aGlzLndpZGdldHM/Lmxlbmd0aCkgeyB0aGlzLmNvbnRhaW5lckhlaWdodCA9IDQwMDsgcmV0dXJuOyB9XG4gICAgY29uc3QgbWF4Um93ID0gR3JpZEVuZ2luZS5nZXRHcmlkSGVpZ2h0KFxuICAgICAgdGhpcy53aWRnZXRzLm1hcCh3ID0+ICh7IGlkOiB3LmlkLCB4OiB3LngsIHk6IHcueSwgY29sczogdy5jb2xzLCByb3dzOiB3LnJvd3MgfSkpXG4gICAgKTtcbiAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IHRoaXMucm93VG9QaXhlbChtYXhSb3cpICsgdGhpcy5yb3dIZWlnaHQgKyB0aGlzLmdhcDtcbiAgfVxufVxuIl19
534
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9jdXN0b20tZ3JpZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFDdEMsU0FBUyxFQUNULFlBQVksRUFBRSxXQUFXLEVBQ3pCLFNBQVMsRUFBRSx1QkFBdUIsRUFDbkMsTUFBTSxlQUFlLENBQUM7OztBQUd2Qjs7Ozs7Ozs7R0FRRztBQUVILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFBbUIsV0FBNEM7UUFBNUMsZ0JBQVcsR0FBWCxXQUFXLENBQWlDO0lBQUcsQ0FBQzs7K0dBRHhELGlCQUFpQjttR0FBakIsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBRDdCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFOztBQW1CckMsTUFBTSxVQUFVO0lBRWQ7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQVcsRUFBRSxDQUFXO1FBQ3RDLE9BQU8sQ0FBQyxDQUNOLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQW1CLEVBQUUsSUFBYztRQUN6RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQW1CO1FBQ3ZDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FDZixVQUFzQixFQUN0QixNQUFnQixFQUNoQixJQUFZLEVBQ1osSUFBWSxFQUNaLE9BQWU7UUFFZixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sT0FBTyxDQUFDO1FBRTVCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzlELE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFN0IsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FDakIsVUFBc0IsRUFDdEIsTUFBZ0IsRUFDaEIsT0FBZSxFQUNmLE9BQWUsRUFDZixPQUFlO1FBRWYsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLE9BQU8sQ0FBQztRQUU5QixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRSxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXJDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNLLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFtQixFQUFFLFdBQXFCO1FBQ3pFLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckUsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUU7WUFDakMsUUFBUSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDOUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNqRDtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBbUIsRUFBRSxRQUFnQjtRQUNsRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sTUFBTSxHQUFlLEVBQUUsQ0FBQztRQUU5QixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sRUFBRTtZQUMzQixNQUFNLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25ELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckI7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQWtCLEVBQUUsTUFBZ0I7UUFDOUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsT0FBTyxJQUFJLEVBQUU7WUFDWCxNQUFNLElBQUksR0FBYSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3pCLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQW1CO1FBQ3RDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNGO0FBRUQ7OzZFQUU2RTtBQStHN0UsTUFBTSxPQUFPLG1CQUFtQjtJQXlDOUIsWUFBb0IsSUFBWSxFQUFVLEdBQXNCO1FBQTVDLFNBQUksR0FBSixJQUFJLENBQVE7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXhDdkQsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUN2QixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3JCLFFBQUcsR0FBVyxFQUFFLENBQUM7UUFDakIsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUN4QixnQkFBVyxHQUFXLENBQUMsQ0FBQztRQUV2QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDekMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBT3ZELGdCQUFXLEdBQXdFLElBQUksQ0FBQztRQUN4RixvQkFBZSxHQUFHLEdBQUcsQ0FBQztRQUV0QixhQUFRLEdBTUcsSUFBSSxDQUFDO1FBRWhCLGFBQVEsR0FRRyxJQUFJLENBQUM7UUFFUixtQkFBYyxHQUFlLEVBQUUsQ0FBQztRQUNoQyxtQkFBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLGlCQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFa0IsQ0FBQztJQUVwRSxRQUFRO1FBQ04sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDMUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLE9BQU87U0FDUjtRQUVELElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUMvQjtRQUVELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM3RCxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQWMsRUFBRSxJQUFZLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUzRCxpQkFBaUI7SUFFakIsSUFBWSxTQUFTO1FBQ25CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsSUFBSSxHQUFHLENBQUM7UUFDekUsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDckUsQ0FBQztJQUVPLFVBQVUsQ0FBQyxHQUFXO1FBQzVCLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVPLFVBQVUsQ0FBQyxHQUFXO1FBQzVCLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVPLFVBQVUsQ0FBQyxFQUFVO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTyxVQUFVLENBQUMsRUFBVTtRQUMzQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsSUFBWTtRQUNuQyxPQUFPLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDdkQsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQVk7UUFDcEMsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxXQUFXLENBQUMsQ0FBUztRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRUQsVUFBVSxDQUFDLENBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELFlBQVksQ0FBQyxDQUFTO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVELGFBQWEsQ0FBQyxDQUFTO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVELGFBQWE7SUFFYixXQUFXLENBQUMsS0FBaUIsRUFBRSxNQUFjO1FBQzNDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO1FBQzNDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxvREFBb0QsQ0FBQztZQUFFLE9BQU87UUFDakYsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3RFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDYixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVE7WUFDN0MsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPO1lBQzNDLGFBQWEsRUFBRSxRQUFRO1lBQ3ZCLGFBQWEsRUFBRSxPQUFPO1NBQ3ZCLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hHLElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDakIsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTztZQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDekMsTUFBTSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1NBQzVDLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBaUIsRUFBRSxNQUFjO1FBQzdDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNkLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNiLFdBQVcsRUFBRSxLQUFLLENBQUMsT0FBTztZQUMxQixXQUFXLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDMUIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ3RCLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSTtZQUN0QixhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDakQsYUFBYSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1NBQ25ELENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hHLElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDL0QsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3pDLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztTQUM1QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQWlCO1FBQ25DLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3pDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVPLFNBQVMsQ0FBQyxNQUFrQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7YUFDdkQsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBaUI7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsUUFBUyxDQUFDLEVBQUUsQ0FBRSxDQUFDO1FBQ25FLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUVwQixJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDM0QsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQzFELEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVyQixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBRWpDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVuRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUNwQyxJQUFJLENBQUMsY0FBYyxFQUNuQixFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQ2pGLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FDbkMsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQ2pFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUN6QyxNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDNUMsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNqQixLQUFLLE1BQU0sRUFBRSxJQUFJLFFBQVEsRUFBRTtnQkFDekIsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFO29CQUFFLFNBQVM7Z0JBQ2xDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxFQUFFO29CQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQUU7YUFDbkM7WUFDRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVMsQ0FBQyxFQUFFLENBQUUsQ0FBQztRQUNuRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBRTVFLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUNqRixFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQ2pGLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FDbkMsQ0FBQztRQUNGLEtBQUssTUFBTSxFQUFFLElBQUksUUFBUSxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLEVBQUU7Z0JBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQUU7U0FDakc7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBaUI7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVMsQ0FBQyxFQUFFLENBQUUsQ0FBQztRQUNuRSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFcEIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztRQUNyRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBRXJELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUksSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5RCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUN0QyxJQUFJLENBQUMsY0FBYyxFQUNuQixFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQ2pGLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FDL0IsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLEdBQUc7WUFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDL0QsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7WUFDckMsTUFBTSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7U0FDeEMsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNqQixLQUFLLE1BQU0sRUFBRSxJQUFJLFFBQVEsRUFBRTtnQkFDekIsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFO29CQUFFLFNBQVM7Z0JBQ2xDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxFQUFFO29CQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQUU7YUFDbkM7WUFDRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVMsQ0FBQyxFQUFFLENBQUUsQ0FBQztRQUVuRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoSCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoSCxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQ2pGLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFDakYsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUMvQixDQUFDO1FBQ0YsS0FBSyxNQUFNLEVBQUUsSUFBSSxRQUFRLEVBQUU7WUFDekIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsRUFBRTtnQkFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztnQkFBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFBRTtTQUNqRztRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxrQkFBa0I7SUFFVixlQUFlO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFDakYsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO1FBQ3BDLEtBQUssTUFBTSxFQUFFLElBQUksU0FBUyxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLENBQUM7Z0JBQUUsU0FBUztZQUVqQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDekYsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNYLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDWCxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDakIsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4QjtTQUNGO1FBRUQsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUVuQyxLQUFLLE1BQU0sTUFBTSxJQUFJLGNBQWMsRUFBRTtZQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQjtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRTtZQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQztZQUMzQixPQUFPO1NBQ1I7UUFFRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsYUFBYSxDQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDbEYsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDN0UsQ0FBQzs7aUhBaFdVLG1CQUFtQjtxR0FBbkIsbUJBQW1CLG1UQWNoQixpQkFBaUIsMkJBQVUsV0FBVyxnTEF6SDFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOENUOzRGQTZEVSxtQkFBbUI7a0JBN0cvQixTQUFTOytCQUNFLFVBQVUsWUFDVjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThDVCxtQkEyRGdCLHVCQUF1QixDQUFDLE1BQU07NkhBR3RDLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFFdUMsYUFBYTtzQkFBMUQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdZLFlBQVk7c0JBQW5FLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZCwgT25EZXN0cm95LCBPbkluaXQsIE5nWm9uZSwgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZCwgVGVtcGxhdGVSZWYsXG4gIERpcmVjdGl2ZSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdpZGdldCB9IGZyb20gJy4vbW9kZWxzJztcblxuLyoqXG4gKiBEaXJlY3RpdmUgYXBwbGllZCB0byB0aGUgdGVtcGxhdGUgdGhhdCBzaG91bGQgYmUgc3RhbXBlZCBpbnNpZGUgZWFjaCBncmlkIGNlbGwuXG4gKiBVc2FnZTpcbiAqICAgPGFwcC1ncmlkIFt3aWRnZXRzXT1cIi4uLlwiPlxuICogICAgIDxuZy10ZW1wbGF0ZSBncmlkQ2VsbCBsZXQtd2lkZ2V0PVwid2lkZ2V0XCI+XG4gKiAgICAgICA8YXBwLXdpZGdldC1yZW5kZXJlciBbd2lkZ2V0XT1cIndpZGdldFwiIC4uLj48L2FwcC13aWRnZXQtcmVuZGVyZXI+XG4gKiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgPC9hcHAtZ3JpZD5cbiAqL1xuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2dyaWRDZWxsXScgfSlcbmV4cG9ydCBjbGFzcyBHcmlkQ2VsbERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8eyB3aWRnZXQ6IFdpZGdldCB9Pikge31cbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBHUklEIEVOR0lORSDigJQgcHVyZSBkYXRhLCB6ZXJvIERPTVxuICAgSGFuZGxlcyBjb2xsaXNpb24gZGV0ZWN0aW9uLCByZXNvbHV0aW9uLCBhbmQgY29tcGFjdGlvbi5cbiAgIEluc3BpcmVkIGJ5IHJlYWN0LWdyaWQtbGF5b3V0IC8gZ3JpZHN0ZXIgYWxnb3JpdGhtcy5cbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG5pbnRlcmZhY2UgR3JpZFJlY3Qge1xuICBpZDogc3RyaW5nO1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgY29sczogbnVtYmVyO1xuICByb3dzOiBudW1iZXI7XG59XG5cbmNsYXNzIEdyaWRFbmdpbmUge1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gcmVjdHMgb3ZlcmxhcC5cbiAgICovXG4gIHN0YXRpYyBjb2xsaWRlcyhhOiBHcmlkUmVjdCwgYjogR3JpZFJlY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIShcbiAgICAgIGEueCArIGEuY29scyA8PSBiLnggfHxcbiAgICAgIGIueCArIGIuY29scyA8PSBhLnggfHxcbiAgICAgIGEueSArIGEucm93cyA8PSBiLnkgfHxcbiAgICAgIGIueSArIGIucm93cyA8PSBhLnlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBBTEwgd2lkZ2V0cyB0aGF0IGNvbGxpZGUgd2l0aCBgcmVjdGAuXG4gICAqL1xuICBzdGF0aWMgZ2V0QWxsQ29sbGlzaW9ucyh3aWRnZXRzOiBHcmlkUmVjdFtdLCByZWN0OiBHcmlkUmVjdCk6IEdyaWRSZWN0W10ge1xuICAgIHJldHVybiB3aWRnZXRzLmZpbHRlcih3ID0+IHcuaWQgIT09IHJlY3QuaWQgJiYgR3JpZEVuZ2luZS5jb2xsaWRlcyh3LCByZWN0KSk7XG4gIH1cblxuICAvKipcbiAgICogU29ydCB3aWRnZXRzIHRvcC10by1ib3R0b20sIGxlZnQtdG8tcmlnaHQuXG4gICAqL1xuICBzdGF0aWMgc29ydEJ5UG9zaXRpb24od2lkZ2V0czogR3JpZFJlY3RbXSk6IEdyaWRSZWN0W10ge1xuICAgIHJldHVybiBbLi4ud2lkZ2V0c10uc29ydCgoYSwgYikgPT4gYS55IC0gYi55IHx8IGEueCAtIGIueCk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZSBhIHdpZGdldCB0byAoeCwgeSkgYW5kIHB1c2ggYW55IGNvbGxpZGluZyB3aWRnZXRzIGRvd253YXJkLlxuICAgKiBSZXR1cm5zIHRoZSBmdWxsIGxpc3Qgd2l0aCByZXNvbHZlZCBwb3NpdGlvbnMuXG4gICAqL1xuICBzdGF0aWMgbW92ZVdpZGdldChcbiAgICBhbGxXaWRnZXRzOiBHcmlkUmVjdFtdLFxuICAgIHdpZGdldDogR3JpZFJlY3QsXG4gICAgbmV3WDogbnVtYmVyLFxuICAgIG5ld1k6IG51bWJlcixcbiAgICBjb2x1bW5zOiBudW1iZXJcbiAgKTogR3JpZFJlY3RbXSB7XG4gICAgY29uc3Qgd2lkZ2V0cyA9IGFsbFdpZGdldHMubWFwKHcgPT4gKHsgLi4udyB9KSk7XG4gICAgY29uc3QgbW92aW5nID0gd2lkZ2V0cy5maW5kKHcgPT4gdy5pZCA9PT0gd2lkZ2V0LmlkKTtcbiAgICBpZiAoIW1vdmluZykgcmV0dXJuIHdpZGdldHM7XG5cbiAgICBtb3ZpbmcueCA9IE1hdGgubWF4KDAsIE1hdGgubWluKG5ld1gsIGNvbHVtbnMgLSBtb3ZpbmcuY29scykpO1xuICAgIG1vdmluZy55ID0gTWF0aC5tYXgoMCwgbmV3WSk7XG5cbiAgICBjb25zdCBzb3J0ZWQgPSBHcmlkRW5naW5lLnNvcnRCeVBvc2l0aW9uKHdpZGdldHMpO1xuICAgIEdyaWRFbmdpbmUucmVzb2x2ZUNvbGxpc2lvbnMoc29ydGVkLCBtb3ZpbmcpO1xuICAgIHJldHVybiBHcmlkRW5naW5lLmNvbXBhY3Qoc29ydGVkLCBjb2x1bW5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNpemUgYSB3aWRnZXQgYW5kIHB1c2ggY29sbGlkaW5nIHdpZGdldHMgZG93bi5cbiAgICovXG4gIHN0YXRpYyByZXNpemVXaWRnZXQoXG4gICAgYWxsV2lkZ2V0czogR3JpZFJlY3RbXSxcbiAgICB3aWRnZXQ6IEdyaWRSZWN0LFxuICAgIG5ld0NvbHM6IG51bWJlcixcbiAgICBuZXdSb3dzOiBudW1iZXIsXG4gICAgY29sdW1uczogbnVtYmVyXG4gICk6IEdyaWRSZWN0W10ge1xuICAgIGNvbnN0IHdpZGdldHMgPSBhbGxXaWRnZXRzLm1hcCh3ID0+ICh7IC4uLncgfSkpO1xuICAgIGNvbnN0IHJlc2l6aW5nID0gd2lkZ2V0cy5maW5kKHcgPT4gdy5pZCA9PT0gd2lkZ2V0LmlkKTtcbiAgICBpZiAoIXJlc2l6aW5nKSByZXR1cm4gd2lkZ2V0cztcblxuICAgIHJlc2l6aW5nLmNvbHMgPSBNYXRoLm1heCgxLCBNYXRoLm1pbihuZXdDb2xzLCBjb2x1bW5zIC0gcmVzaXppbmcueCkpO1xuICAgIHJlc2l6aW5nLnJvd3MgPSBNYXRoLm1heCgxLCBuZXdSb3dzKTtcblxuICAgIGNvbnN0IHNvcnRlZCA9IEdyaWRFbmdpbmUuc29ydEJ5UG9zaXRpb24od2lkZ2V0cyk7XG4gICAgR3JpZEVuZ2luZS5yZXNvbHZlQ29sbGlzaW9ucyhzb3J0ZWQsIHJlc2l6aW5nKTtcbiAgICByZXR1cm4gR3JpZEVuZ2luZS5jb21wYWN0KHNvcnRlZCwgY29sdW1ucyk7XG4gIH1cblxuICAvKipcbiAgICogUHVzaCBhbGwgd2lkZ2V0cyB0aGF0IGNvbGxpZGUgd2l0aCBgbW92ZWRXaWRnZXRgIGRvd253YXJkLCByZWN1cnNpdmVseS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlc29sdmVDb2xsaXNpb25zKHdpZGdldHM6IEdyaWRSZWN0W10sIG1vdmVkV2lkZ2V0OiBHcmlkUmVjdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbGxpc2lvbnMgPSBHcmlkRW5naW5lLmdldEFsbENvbGxpc2lvbnMod2lkZ2V0cywgbW92ZWRXaWRnZXQpO1xuICAgIGZvciAoY29uc3QgY29sbGlkZXIgb2YgY29sbGlzaW9ucykge1xuICAgICAgY29sbGlkZXIueSA9IG1vdmVkV2lkZ2V0LnkgKyBtb3ZlZFdpZGdldC5yb3dzO1xuICAgICAgR3JpZEVuZ2luZS5yZXNvbHZlQ29sbGlzaW9ucyh3aWRnZXRzLCBjb2xsaWRlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhY3QgdGhlIGdyaWQ6IG1vdmUgZXZlcnkgd2lkZ2V0IGFzIGZhciB1cCBhcyBwb3NzaWJsZSB3aXRob3V0IG92ZXJsYXBwaW5nLlxuICAgKi9cbiAgc3RhdGljIGNvbXBhY3Qod2lkZ2V0czogR3JpZFJlY3RbXSwgX2NvbHVtbnM6IG51bWJlcik6IEdyaWRSZWN0W10ge1xuICAgIGNvbnN0IHNvcnRlZCA9IEdyaWRFbmdpbmUuc29ydEJ5UG9zaXRpb24od2lkZ2V0cyk7XG4gICAgY29uc3QgcGxhY2VkOiBHcmlkUmVjdFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHdpZGdldCBvZiBzb3J0ZWQpIHtcbiAgICAgIHdpZGdldC55ID0gR3JpZEVuZ2luZS5maW5kQ29tcGFjdFkocGxhY2VkLCB3aWRnZXQpO1xuICAgICAgcGxhY2VkLnB1c2god2lkZ2V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxhY2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGhpZ2hlc3QgWSBwb3NpdGlvbiBhIHdpZGdldCBjYW4gb2NjdXB5IHdpdGhvdXQgb3ZlcmxhcHBpbmcgYW55IGFscmVhZHktcGxhY2VkIHdpZGdldC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZpbmRDb21wYWN0WShwbGFjZWQ6IEdyaWRSZWN0W10sIHdpZGdldDogR3JpZFJlY3QpOiBudW1iZXIge1xuICAgIGxldCB5ID0gMDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgdGVzdDogR3JpZFJlY3QgPSB7IC4uLndpZGdldCwgeSB9O1xuICAgICAgY29uc3QgY29sbGlzaW9uID0gcGxhY2VkLmZpbmQocCA9PiBHcmlkRW5naW5lLmNvbGxpZGVzKHAsIHRlc3QpKTtcbiAgICAgIGlmICghY29sbGlzaW9uKSByZXR1cm4geTtcbiAgICAgIHkgPSBjb2xsaXNpb24ueSArIGNvbGxpc2lvbi5yb3dzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyB0aGUgZ3JpZCBuZWVkcy5cbiAgICovXG4gIHN0YXRpYyBnZXRHcmlkSGVpZ2h0KHdpZGdldHM6IEdyaWRSZWN0W10pOiBudW1iZXIge1xuICAgIGlmICh3aWRnZXRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLndpZGdldHMubWFwKHcgPT4gdy55ICsgdy5yb3dzKSk7XG4gIH1cbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBDVVNUT00gR1JJRCBDT01QT05FTlRcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZ3JpZCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgI2dyaWRDb250YWluZXJcbiAgICAgIGNsYXNzPVwiZ3JpZC1jb250YWluZXJcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjb250YWluZXJIZWlnaHRcIlxuICAgID5cbiAgICAgIDwhLS0gUGxhY2Vob2xkZXIgcHJldmlldyAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJncmlkLXBsYWNlaG9sZGVyXCJcbiAgICAgICAgKm5nSWY9XCJwbGFjZWhvbGRlclwiXG4gICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cInBsYWNlaG9sZGVyLmxlZnRcIlxuICAgICAgICBbc3R5bGUudG9wLnB4XT1cInBsYWNlaG9sZGVyLnRvcFwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJwbGFjZWhvbGRlci53aWR0aFwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicGxhY2Vob2xkZXIuaGVpZ2h0XCJcbiAgICAgID48L2Rpdj5cblxuICAgICAgPCEtLSBXaWRnZXQgaXRlbXMgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCB3aWRnZXQgb2Ygd2lkZ2V0czsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgY2xhc3M9XCJncmlkLWl0ZW1cIlxuICAgICAgICBbY2xhc3MuaXMtZHJhZ2dpbmddPVwiZHJhZ2dpbmc/LmlkID09PSB3aWRnZXQuaWRcIlxuICAgICAgICBbY2xhc3MuaXMtcmVzaXppbmddPVwicmVzaXppbmc/LmlkID09PSB3aWRnZXQuaWRcIlxuICAgICAgICBbc3R5bGUubGVmdC5weF09XCJnZXRJdGVtTGVmdCh3aWRnZXQpXCJcbiAgICAgICAgW3N0eWxlLnRvcC5weF09XCJnZXRJdGVtVG9wKHdpZGdldClcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiZ2V0SXRlbVdpZHRoKHdpZGdldClcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImdldEl0ZW1IZWlnaHQod2lkZ2V0KVwiXG4gICAgICAgIFtzdHlsZS56LWluZGV4XT1cIihkcmFnZ2luZz8uaWQgPT09IHdpZGdldC5pZCB8fCByZXNpemluZz8uaWQgPT09IHdpZGdldC5pZCkgPyAxMDAgOiAxXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkRyYWdTdGFydCgkZXZlbnQsIHdpZGdldClcIlxuICAgICAgPlxuICAgICAgICA8IS0tIENvbnRlbnQgc3RhbXBlZCBmcm9tIHBhcmVudCB0ZW1wbGF0ZSwgY29udGV4dCBjYXJyaWVzIHRoZSB3aWRnZXQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB3aWRnZXQ6IHdpZGdldCB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gUmVzaXplIGhhbmRsZSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIiAobW91c2Vkb3duKT1cIm9uUmVzaXplU3RhcnQoJGV2ZW50LCB3aWRnZXQpXCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTExIDF2MTBIMVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEgNXY2SDVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTExIDl2Mkg5XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgfVxuXG4gICAgLmdyaWQtY29udGFpbmVyIHtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjI1cyBlYXNlO1xuICAgIH1cblxuICAgIC5ncmlkLXBsYWNlaG9sZGVyIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRhc2gtcGxhY2Vob2xkZXItY29sb3IsIHZhcigtLWRhc2gtYWNjZW50LWNvbG9yLCAjMGE4NGZmKSk7XG4gICAgICBvcGFjaXR5OiAwLjEyO1xuICAgICAgYm9yZGVyLXJhZGl1czogMjRweDtcbiAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1kYXNoLXBsYWNlaG9sZGVyLWNvbG9yLCB2YXIoLS1kYXNoLWFjY2VudC1jb2xvciwgIzBhODRmZikpO1xuICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE1cyBlYXNlLCB0b3AgMC4xNXMgZWFzZSwgd2lkdGggMC4xNXMgZWFzZSwgaGVpZ2h0IDAuMTVzIGVhc2U7XG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgIHotaW5kZXg6IDA7XG4gICAgfVxuXG4gICAgLmdyaWQtaXRlbSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIHRyYW5zaXRpb246IGxlZnQgMC4yNXMgZWFzZSwgdG9wIDAuMjVzIGVhc2UsIHdpZHRoIDAuMjVzIGVhc2UsIGhlaWdodCAwLjI1cyBlYXNlO1xuICAgICAgYm9yZGVyLXJhZGl1czogMjRweDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgLmdyaWQtaXRlbS5pcy1kcmFnZ2luZyxcbiAgICAuZ3JpZC1pdGVtLmlzLXJlc2l6aW5nIHtcbiAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIG9wYWNpdHk6IDAuODg7XG4gICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICB9XG5cbiAgICAvKiBSZXNpemUgSGFuZGxlICovXG4gICAgLnJlc2l6ZS1oYW5kbGUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6IDRweDtcbiAgICAgIGJvdHRvbTogNHB4O1xuICAgICAgd2lkdGg6IDIycHg7XG4gICAgICBoZWlnaHQ6IDIycHg7XG4gICAgICBjdXJzb3I6IG53c2UtcmVzaXplO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGNvbG9yOiB2YXIoLS1kYXNoLXJlc2l6ZS1oYW5kbGUtY29sb3IsIHJnYmEoMjU1LDI1NSwyNTUsMC4yNSkpO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycywgYmFja2dyb3VuZCAwLjJzO1xuICAgICAgei1pbmRleDogMjA7XG4gICAgfVxuICAgIC5yZXNpemUtaGFuZGxlOmhvdmVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1kYXNoLWFjY2VudC1jb2xvciwgIzBhODRmZik7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpO1xuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgd2lkZ2V0czogV2lkZ2V0W10gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uczogbnVtYmVyID0gMTI7XG4gIEBJbnB1dCgpIGdhcDogbnVtYmVyID0gMTY7XG4gIEBJbnB1dCgpIHJvd0hlaWdodDogbnVtYmVyID0gODA7XG4gIEBJbnB1dCgpIG1pbkl0ZW1Db2xzOiBudW1iZXIgPSAxO1xuICBASW5wdXQoKSBtaW5JdGVtUm93czogbnVtYmVyID0gMTtcblxuICBAT3V0cHV0KCkgaXRlbUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFdpZGdldD4oKTtcbiAgQE91dHB1dCgpIGxheW91dENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFdpZGdldFtdPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2dyaWRDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBncmlkQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgLyoqIFRoZSBuZy10ZW1wbGF0ZSBkZWNvcmF0ZWQgd2l0aCBncmlkQ2VsbCBmcm9tIHRoZSBwYXJlbnQgKi9cbiAgQENvbnRlbnRDaGlsZChHcmlkQ2VsbERpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBjZWxsVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjx7IHdpZGdldDogV2lkZ2V0IH0+O1xuXG4gIHBsYWNlaG9sZGVyOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcbiAgY29udGFpbmVySGVpZ2h0ID0gNDAwO1xuXG4gIGRyYWdnaW5nOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBvZmZzZXRYOiBudW1iZXI7XG4gICAgb2Zmc2V0WTogbnVtYmVyO1xuICAgIGN1cnJlbnRQaXhlbFg6IG51bWJlcjtcbiAgICBjdXJyZW50UGl4ZWxZOiBudW1iZXI7XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICByZXNpemluZzoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc3RhcnRNb3VzZVg6IG51bWJlcjtcbiAgICBzdGFydE1vdXNlWTogbnVtYmVyO1xuICAgIHN0YXJ0Q29sczogbnVtYmVyO1xuICAgIHN0YXJ0Um93czogbnVtYmVyO1xuICAgIGN1cnJlbnRQaXhlbFc6IG51bWJlcjtcbiAgICBjdXJyZW50UGl4ZWxIOiBudW1iZXI7XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHByZXZpZXdXaWRnZXRzOiBHcmlkUmVjdFtdID0gW107XG4gIHByaXZhdGUgYm91bmRNb3VzZU1vdmUgPSB0aGlzLm9uTW91c2VNb3ZlLmJpbmQodGhpcyk7XG4gIHByaXZhdGUgYm91bmRNb3VzZVVwID0gdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYXBwbHlDb21wYWN0aW9uQW5kU3luYygpO1xuICAgIHRoaXMudXBkYXRlQ29udGFpbmVySGVpZ2h0KCk7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmJvdW5kTW91c2VNb3ZlKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5ib3VuZE1vdXNlVXApO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICh0aGlzLmRyYWdnaW5nIHx8IHRoaXMucmVzaXppbmcpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29udGFpbmVySGVpZ2h0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3dpZGdldHMnXSB8fCBjaGFuZ2VzWydjb2x1bW5zJ10pIHtcbiAgICAgIHRoaXMuYXBwbHlDb21wYWN0aW9uQW5kU3luYygpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlQ29udGFpbmVySGVpZ2h0KCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5ib3VuZE1vdXNlTW92ZSk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmJvdW5kTW91c2VVcCk7XG4gIH1cblxuICB0cmFja0J5Rm4oX2luZGV4OiBudW1iZXIsIGl0ZW06IFdpZGdldCkgeyByZXR1cm4gaXRlbS5pZDsgfVxuXG4gIC8vIOKUgOKUgCBHZW9tZXRyeSDilIDilIBcblxuICBwcml2YXRlIGdldCBjZWxsV2lkdGgoKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb250YWluZXJXID0gdGhpcy5ncmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5jbGllbnRXaWR0aCA/PyA4MDA7XG4gICAgcmV0dXJuIChjb250YWluZXJXIC0gKHRoaXMuY29sdW1ucyAtIDEpICogdGhpcy5nYXApIC8gdGhpcy5jb2x1bW5zO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xUb1BpeGVsKGNvbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29sICogKHRoaXMuY2VsbFdpZHRoICsgdGhpcy5nYXApO1xuICB9XG5cbiAgcHJpdmF0ZSByb3dUb1BpeGVsKHJvdzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcm93ICogKHRoaXMucm93SGVpZ2h0ICsgdGhpcy5nYXApO1xuICB9XG5cbiAgcHJpdmF0ZSBwaXhlbFRvQ29sKHB4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHB4IC8gKHRoaXMuY2VsbFdpZHRoICsgdGhpcy5nYXApKTtcbiAgfVxuXG4gIHByaXZhdGUgcGl4ZWxUb1JvdyhweDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChweCAvICh0aGlzLnJvd0hlaWdodCArIHRoaXMuZ2FwKSk7XG4gIH1cblxuICBwcml2YXRlIGNvbHNUb1BpeGVsV2lkdGgoY29sczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29scyAqIHRoaXMuY2VsbFdpZHRoICsgKGNvbHMgLSAxKSAqIHRoaXMuZ2FwO1xuICB9XG5cbiAgcHJpdmF0ZSByb3dzVG9QaXhlbEhlaWdodChyb3dzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByb3dzICogdGhpcy5yb3dIZWlnaHQgKyAocm93cyAtIDEpICogdGhpcy5nYXA7XG4gIH1cblxuICBnZXRJdGVtTGVmdCh3OiBXaWRnZXQpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRyYWdnaW5nPy5pZCA9PT0gdy5pZCA/IHRoaXMuZHJhZ2dpbmcuY3VycmVudFBpeGVsWCA6IHRoaXMuY29sVG9QaXhlbCh3LngpO1xuICB9XG5cbiAgZ2V0SXRlbVRvcCh3OiBXaWRnZXQpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRyYWdnaW5nPy5pZCA9PT0gdy5pZCA/IHRoaXMuZHJhZ2dpbmcuY3VycmVudFBpeGVsWSA6IHRoaXMucm93VG9QaXhlbCh3LnkpO1xuICB9XG5cbiAgZ2V0SXRlbVdpZHRoKHc6IFdpZGdldCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmVzaXppbmc/LmlkID09PSB3LmlkID8gdGhpcy5yZXNpemluZy5jdXJyZW50UGl4ZWxXIDogdGhpcy5jb2xzVG9QaXhlbFdpZHRoKHcuY29scyk7XG4gIH1cblxuICBnZXRJdGVtSGVpZ2h0KHc6IFdpZGdldCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmVzaXppbmc/LmlkID09PSB3LmlkID8gdGhpcy5yZXNpemluZy5jdXJyZW50UGl4ZWxIIDogdGhpcy5yb3dzVG9QaXhlbEhlaWdodCh3LnJvd3MpO1xuICB9XG5cbiAgLy8g4pSA4pSAIERyYWcg4pSA4pSAXG5cbiAgb25EcmFnU3RhcnQoZXZlbnQ6IE1vdXNlRXZlbnQsIHdpZGdldDogV2lkZ2V0KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0YXJnZXQuY2xvc2VzdCgnYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYSwgLnJlc2l6ZS1oYW5kbGUnKSkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCByZWN0ID0gdGhpcy5ncmlkQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgaXRlbUxlZnQgPSB0aGlzLmNvbFRvUGl4ZWwod2lkZ2V0LngpO1xuICAgIGNvbnN0IGl0ZW1Ub3AgPSB0aGlzLnJvd1RvUGl4ZWwod2lkZ2V0LnkpO1xuXG4gICAgdGhpcy5kcmFnZ2luZyA9IHtcbiAgICAgIGlkOiB3aWRnZXQuaWQsXG4gICAgICBvZmZzZXRYOiBldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gaXRlbUxlZnQsXG4gICAgICBvZmZzZXRZOiBldmVudC5jbGllbnRZIC0gcmVjdC50b3AgLSBpdGVtVG9wLFxuICAgICAgY3VycmVudFBpeGVsWDogaXRlbUxlZnQsXG4gICAgICBjdXJyZW50UGl4ZWxZOiBpdGVtVG9wLFxuICAgIH07XG4gICAgdGhpcy5wcmV2aWV3V2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5tYXAodyA9PiAoeyBpZDogdy5pZCwgeDogdy54LCB5OiB3LnksIGNvbHM6IHcuY29scywgcm93czogdy5yb3dzIH0pKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0ge1xuICAgICAgbGVmdDogaXRlbUxlZnQsIHRvcDogaXRlbVRvcCxcbiAgICAgIHdpZHRoOiB0aGlzLmNvbHNUb1BpeGVsV2lkdGgod2lkZ2V0LmNvbHMpLFxuICAgICAgaGVpZ2h0OiB0aGlzLnJvd3NUb1BpeGVsSGVpZ2h0KHdpZGdldC5yb3dzKSxcbiAgICB9O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25SZXNpemVTdGFydChldmVudDogTW91c2VFdmVudCwgd2lkZ2V0OiBXaWRnZXQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMucmVzaXppbmcgPSB7XG4gICAgICBpZDogd2lkZ2V0LmlkLFxuICAgICAgc3RhcnRNb3VzZVg6IGV2ZW50LmNsaWVudFgsXG4gICAgICBzdGFydE1vdXNlWTogZXZlbnQuY2xpZW50WSxcbiAgICAgIHN0YXJ0Q29sczogd2lkZ2V0LmNvbHMsXG4gICAgICBzdGFydFJvd3M6IHdpZGdldC5yb3dzLFxuICAgICAgY3VycmVudFBpeGVsVzogdGhpcy5jb2xzVG9QaXhlbFdpZHRoKHdpZGdldC5jb2xzKSxcbiAgICAgIGN1cnJlbnRQaXhlbEg6IHRoaXMucm93c1RvUGl4ZWxIZWlnaHQod2lkZ2V0LnJvd3MpLFxuICAgIH07XG4gICAgdGhpcy5wcmV2aWV3V2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5tYXAodyA9PiAoeyBpZDogdy5pZCwgeDogdy54LCB5OiB3LnksIGNvbHM6IHcuY29scywgcm93czogdy5yb3dzIH0pKTtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0ge1xuICAgICAgbGVmdDogdGhpcy5jb2xUb1BpeGVsKHdpZGdldC54KSwgdG9wOiB0aGlzLnJvd1RvUGl4ZWwod2lkZ2V0LnkpLFxuICAgICAgd2lkdGg6IHRoaXMuY29sc1RvUGl4ZWxXaWR0aCh3aWRnZXQuY29scyksXG4gICAgICBoZWlnaHQ6IHRoaXMucm93c1RvUGl4ZWxIZWlnaHQod2lkZ2V0LnJvd3MpLFxuICAgIH07XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG9uTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHRoaXMuaGFuZGxlRHJhZ01vdmUoZXZlbnQpO1xuICAgIGVsc2UgaWYgKHRoaXMucmVzaXppbmcpIHRoaXMuaGFuZGxlUmVzaXplTW92ZShldmVudCk7XG4gIH1cblxuICBwcml2YXRlIG9uTW91c2VVcChfZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kcmFnZ2luZykgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmZpbmFsaXplRHJhZygpKTtcbiAgICBlbHNlIGlmICh0aGlzLnJlc2l6aW5nKSB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuZmluYWxpemVSZXNpemUoKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURyYWdNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmRyYWdnaW5nKSByZXR1cm47XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuZ3JpZENvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHdpZGdldCA9IHRoaXMud2lkZ2V0cy5maW5kKHcgPT4gdy5pZCA9PT0gdGhpcy5kcmFnZ2luZyEuaWQpITtcbiAgICBpZiAoIXdpZGdldCkgcmV0dXJuO1xuXG4gICAgbGV0IHB4ID0gZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCAtIHRoaXMuZHJhZ2dpbmcub2Zmc2V0WDtcbiAgICBsZXQgcHkgPSBldmVudC5jbGllbnRZIC0gcmVjdC50b3AgLSB0aGlzLmRyYWdnaW5nLm9mZnNldFk7XG4gICAgcHggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihweCwgcmVjdC53aWR0aCAtIHRoaXMuY29sc1RvUGl4ZWxXaWR0aCh3aWRnZXQuY29scykpKTtcbiAgICBweSA9IE1hdGgubWF4KDAsIHB5KTtcblxuICAgIHRoaXMuZHJhZ2dpbmcuY3VycmVudFBpeGVsWCA9IHB4O1xuICAgIHRoaXMuZHJhZ2dpbmcuY3VycmVudFBpeGVsWSA9IHB5O1xuXG4gICAgY29uc3QgdGFyZ2V0Q29sID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5waXhlbFRvQ29sKHB4KSwgdGhpcy5jb2x1bW5zIC0gd2lkZ2V0LmNvbHMpKTtcbiAgICBjb25zdCB0YXJnZXRSb3cgPSBNYXRoLm1heCgwLCB0aGlzLnBpeGVsVG9Sb3cocHkpKTtcblxuICAgIGNvbnN0IHJlc29sdmVkID0gR3JpZEVuZ2luZS5tb3ZlV2lkZ2V0KFxuICAgICAgdGhpcy5wcmV2aWV3V2lkZ2V0cyxcbiAgICAgIHsgaWQ6IHdpZGdldC5pZCwgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCBjb2xzOiB3aWRnZXQuY29scywgcm93czogd2lkZ2V0LnJvd3MgfSxcbiAgICAgIHRhcmdldENvbCwgdGFyZ2V0Um93LCB0aGlzLmNvbHVtbnNcbiAgICApO1xuXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHtcbiAgICAgIGxlZnQ6IHRoaXMuY29sVG9QaXhlbCh0YXJnZXRDb2wpLCB0b3A6IHRoaXMucm93VG9QaXhlbCh0YXJnZXRSb3cpLFxuICAgICAgd2lkdGg6IHRoaXMuY29sc1RvUGl4ZWxXaWR0aCh3aWRnZXQuY29scyksXG4gICAgICBoZWlnaHQ6IHRoaXMucm93c1RvUGl4ZWxIZWlnaHQod2lkZ2V0LnJvd3MpLFxuICAgIH07XG5cbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgIGZvciAoY29uc3Qgcncgb2YgcmVzb2x2ZWQpIHtcbiAgICAgICAgaWYgKHJ3LmlkID09PSB3aWRnZXQuaWQpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCB3ID0gdGhpcy53aWRnZXRzLmZpbmQod3cgPT4gd3cuaWQgPT09IHJ3LmlkKTtcbiAgICAgICAgaWYgKHcpIHsgdy54ID0gcncueDsgdy55ID0gcncueTsgfVxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVDb250YWluZXJIZWlnaHQoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5hbGl6ZURyYWcoKSB7XG4gICAgaWYgKCF0aGlzLmRyYWdnaW5nKSByZXR1cm47XG4gICAgY29uc3Qgd2lkZ2V0ID0gdGhpcy53aWRnZXRzLmZpbmQodyA9PiB3LmlkID09PSB0aGlzLmRyYWdnaW5nIS5pZCkhO1xuICAgIGNvbnN0IHRhcmdldENvbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMucGl4ZWxUb0NvbCh0aGlzLmRyYWdnaW5nLmN1cnJlbnRQaXhlbFgpLCB0aGlzLmNvbHVtbnMgLSB3aWRnZXQuY29scykpO1xuICAgIGNvbnN0IHRhcmdldFJvdyA9IE1hdGgubWF4KDAsIHRoaXMucGl4ZWxUb1Jvdyh0aGlzLmRyYWdnaW5nLmN1cnJlbnRQaXhlbFkpKTtcblxuICAgIGNvbnN0IHJlc29sdmVkID0gR3JpZEVuZ2luZS5tb3ZlV2lkZ2V0KFxuICAgICAgdGhpcy53aWRnZXRzLm1hcCh3ID0+ICh7IGlkOiB3LmlkLCB4OiB3LngsIHk6IHcueSwgY29sczogdy5jb2xzLCByb3dzOiB3LnJvd3MgfSkpLFxuICAgICAgeyBpZDogd2lkZ2V0LmlkLCB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIGNvbHM6IHdpZGdldC5jb2xzLCByb3dzOiB3aWRnZXQucm93cyB9LFxuICAgICAgdGFyZ2V0Q29sLCB0YXJnZXRSb3csIHRoaXMuY29sdW1uc1xuICAgICk7XG4gICAgZm9yIChjb25zdCBydyBvZiByZXNvbHZlZCkge1xuICAgICAgY29uc3QgdyA9IHRoaXMud2lkZ2V0cy5maW5kKHd3ID0+IHd3LmlkID09PSBydy5pZCk7XG4gICAgICBpZiAodykgeyB3LnggPSBydy54OyB3LnkgPSBydy55OyB3LmNvbHMgPSBydy5jb2xzOyB3LnJvd3MgPSBydy5yb3dzOyB0aGlzLml0ZW1DaGFuZ2VkLmVtaXQodyk7IH1cbiAgICB9XG4gICAgdGhpcy5kcmFnZ2luZyA9IG51bGw7XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IG51bGw7XG4gICAgdGhpcy5wcmV2aWV3V2lkZ2V0cyA9IFtdO1xuICAgIHRoaXMudXBkYXRlQ29udGFpbmVySGVpZ2h0KCk7XG4gICAgdGhpcy5sYXlvdXRDaGFuZ2VkLmVtaXQodGhpcy53aWRnZXRzKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVzaXplTW92ZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5yZXNpemluZykgcmV0dXJuO1xuICAgIGNvbnN0IHdpZGdldCA9IHRoaXMud2lkZ2V0cy5maW5kKHcgPT4gdy5pZCA9PT0gdGhpcy5yZXNpemluZyEuaWQpITtcbiAgICBpZiAoIXdpZGdldCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZHggPSBldmVudC5jbGllbnRYIC0gdGhpcy5yZXNpemluZy5zdGFydE1vdXNlWDtcbiAgICBjb25zdCBkeSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLnJlc2l6aW5nLnN0YXJ0TW91c2VZO1xuXG4gICAgbGV0IG5ld0NvbHMgPSBNYXRoLm1heCh0aGlzLm1pbkl0ZW1Db2xzLCBNYXRoLnJvdW5kKCh0aGlzLmNvbHNUb1BpeGVsV2lkdGgodGhpcy5yZXNpemluZy5zdGFydENvbHMpICsgZHgpIC8gKHRoaXMuY2VsbFdpZHRoICsgdGhpcy5nYXApKSk7XG4gICAgbGV0IG5ld1Jvd3MgPSBNYXRoLm1heCh0aGlzLm1pbkl0ZW1Sb3dzLCBNYXRoLnJvdW5kKCh0aGlzLnJvd3NUb1BpeGVsSGVpZ2h0KHRoaXMucmVzaXppbmcuc3RhcnRSb3dzKSArIGR5KSAvICh0aGlzLnJvd0hlaWdodCArIHRoaXMuZ2FwKSkpO1xuICAgIG5ld0NvbHMgPSBNYXRoLm1pbihuZXdDb2xzLCB0aGlzLmNvbHVtbnMgLSB3aWRnZXQueCk7XG5cbiAgICB0aGlzLnJlc2l6aW5nLmN1cnJlbnRQaXhlbFcgPSB0aGlzLmNvbHNUb1BpeGVsV2lkdGgobmV3Q29scyk7XG4gICAgdGhpcy5yZXNpemluZy5jdXJyZW50UGl4ZWxIID0gdGhpcy5yb3dzVG9QaXhlbEhlaWdodChuZXdSb3dzKTtcblxuICAgIGNvbnN0IHJlc29sdmVkID0gR3JpZEVuZ2luZS5yZXNpemVXaWRnZXQoXG4gICAgICB0aGlzLnByZXZpZXdXaWRnZXRzLFxuICAgICAgeyBpZDogd2lkZ2V0LmlkLCB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIGNvbHM6IHdpZGdldC5jb2xzLCByb3dzOiB3aWRnZXQucm93cyB9LFxuICAgICAgbmV3Q29scywgbmV3Um93cywgdGhpcy5jb2x1bW5zXG4gICAgKTtcblxuICAgIHRoaXMucGxhY2Vob2xkZXIgPSB7XG4gICAgICBsZWZ0OiB0aGlzLmNvbFRvUGl4ZWwod2lkZ2V0LngpLCB0b3A6IHRoaXMucm93VG9QaXhlbCh3aWRnZXQueSksXG4gICAgICB3aWR0aDogdGhpcy5jb2xzVG9QaXhlbFdpZHRoKG5ld0NvbHMpLFxuICAgICAgaGVpZ2h0OiB0aGlzLnJvd3NUb1BpeGVsSGVpZ2h0KG5ld1Jvd3MpLFxuICAgIH07XG5cbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgIGZvciAoY29uc3Qgcncgb2YgcmVzb2x2ZWQpIHtcbiAgICAgICAgaWYgKHJ3LmlkID09PSB3aWRnZXQuaWQpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCB3ID0gdGhpcy53aWRnZXRzLmZpbmQod3cgPT4gd3cuaWQgPT09IHJ3LmlkKTtcbiAgICAgICAgaWYgKHcpIHsgdy54ID0gcncueDsgdy55ID0gcncueTsgfVxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVDb250YWluZXJIZWlnaHQoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5hbGl6ZVJlc2l6ZSgpIHtcbiAgICBpZiAoIXRoaXMucmVzaXppbmcpIHJldHVybjtcbiAgICBjb25zdCB3aWRnZXQgPSB0aGlzLndpZGdldHMuZmluZCh3ID0+IHcuaWQgPT09IHRoaXMucmVzaXppbmchLmlkKSE7XG5cbiAgICBsZXQgbmV3Q29scyA9IE1hdGgubWF4KHRoaXMubWluSXRlbUNvbHMsIE1hdGgucm91bmQodGhpcy5yZXNpemluZy5jdXJyZW50UGl4ZWxXIC8gKHRoaXMuY2VsbFdpZHRoICsgdGhpcy5nYXApKSk7XG4gICAgbGV0IG5ld1Jvd3MgPSBNYXRoLm1heCh0aGlzLm1pbkl0ZW1Sb3dzLCBNYXRoLnJvdW5kKHRoaXMucmVzaXppbmcuY3VycmVudFBpeGVsSCAvICh0aGlzLnJvd0hlaWdodCArIHRoaXMuZ2FwKSkpO1xuICAgIG5ld0NvbHMgPSBNYXRoLm1pbihuZXdDb2xzLCB0aGlzLmNvbHVtbnMgLSB3aWRnZXQueCk7XG5cbiAgICBjb25zdCByZXNvbHZlZCA9IEdyaWRFbmdpbmUucmVzaXplV2lkZ2V0KFxuICAgICAgdGhpcy53aWRnZXRzLm1hcCh3ID0+ICh7IGlkOiB3LmlkLCB4OiB3LngsIHk6IHcueSwgY29sczogdy5jb2xzLCByb3dzOiB3LnJvd3MgfSkpLFxuICAgICAgeyBpZDogd2lkZ2V0LmlkLCB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIGNvbHM6IHdpZGdldC5jb2xzLCByb3dzOiB3aWRnZXQucm93cyB9LFxuICAgICAgbmV3Q29scywgbmV3Um93cywgdGhpcy5jb2x1bW5zXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IHJ3IG9mIHJlc29sdmVkKSB7XG4gICAgICBjb25zdCB3ID0gdGhpcy53aWRnZXRzLmZpbmQod3cgPT4gd3cuaWQgPT09IHJ3LmlkKTtcbiAgICAgIGlmICh3KSB7IHcueCA9IHJ3Lng7IHcueSA9IHJ3Lnk7IHcuY29scyA9IHJ3LmNvbHM7IHcucm93cyA9IHJ3LnJvd3M7IHRoaXMuaXRlbUNoYW5nZWQuZW1pdCh3KTsgfVxuICAgIH1cbiAgICB0aGlzLnJlc2l6aW5nID0gbnVsbDtcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gbnVsbDtcbiAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gW107XG4gICAgdGhpcy51cGRhdGVDb250YWluZXJIZWlnaHQoKTtcbiAgICB0aGlzLmxheW91dENoYW5nZWQuZW1pdCh0aGlzLndpZGdldHMpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFV0aWxpdGllcyDilIDilIBcblxuICBwcml2YXRlIGNvbXBhY3RBbmRBcHBseSgpOiBXaWRnZXRbXSB7XG4gICAgaWYgKCF0aGlzLndpZGdldHM/Lmxlbmd0aCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IGNvbXBhY3RlZCA9IEdyaWRFbmdpbmUuY29tcGFjdChcbiAgICAgIHRoaXMud2lkZ2V0cy5tYXAodyA9PiAoeyBpZDogdy5pZCwgeDogdy54LCB5OiB3LnksIGNvbHM6IHcuY29scywgcm93czogdy5yb3dzIH0pKSxcbiAgICAgIHRoaXMuY29sdW1uc1xuICAgICk7XG5cbiAgICBjb25zdCBjaGFuZ2VkV2lkZ2V0czogV2lkZ2V0W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJ3IG9mIGNvbXBhY3RlZCkge1xuICAgICAgY29uc3QgdyA9IHRoaXMud2lkZ2V0cy5maW5kKHd3ID0+IHd3LmlkID09PSBydy5pZCk7XG4gICAgICBpZiAoIXcpIGNvbnRpbnVlO1xuXG4gICAgICBjb25zdCBjaGFuZ2VkID0gdy54ICE9PSBydy54IHx8IHcueSAhPT0gcncueSB8fCB3LmNvbHMgIT09IHJ3LmNvbHMgfHwgdy5yb3dzICE9PSBydy5yb3dzO1xuICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgdy54ID0gcncueDtcbiAgICAgICAgdy55ID0gcncueTtcbiAgICAgICAgdy5jb2xzID0gcncuY29scztcbiAgICAgICAgdy5yb3dzID0gcncucm93cztcbiAgICAgICAgY2hhbmdlZFdpZGdldHMucHVzaCh3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlZFdpZGdldHM7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q29tcGFjdGlvbkFuZFN5bmMoKSB7XG4gICAgY29uc3QgY2hhbmdlZFdpZGdldHMgPSB0aGlzLmNvbXBhY3RBbmRBcHBseSgpO1xuICAgIGlmICghY2hhbmdlZFdpZGdldHMubGVuZ3RoKSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IHdpZGdldCBvZiBjaGFuZ2VkV2lkZ2V0cykge1xuICAgICAgdGhpcy5pdGVtQ2hhbmdlZC5lbWl0KHdpZGdldCk7XG4gICAgfVxuICAgIHRoaXMubGF5b3V0Q2hhbmdlZC5lbWl0KHRoaXMud2lkZ2V0cyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbnRhaW5lckhlaWdodCgpIHtcbiAgICBpZiAoIXRoaXMud2lkZ2V0cz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IDQwMDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhSb3cgPSBHcmlkRW5naW5lLmdldEdyaWRIZWlnaHQoXG4gICAgICB0aGlzLndpZGdldHMubWFwKHcgPT4gKHsgaWQ6IHcuaWQsIHg6IHcueCwgeTogdy55LCBjb2xzOiB3LmNvbHMsIHJvd3M6IHcucm93cyB9KSlcbiAgICApO1xuICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ID0gdGhpcy5yb3dUb1BpeGVsKG1heFJvdykgKyB0aGlzLnJvd0hlaWdodCArIHRoaXMuZ2FwO1xuICB9XG59XG4iXX0=
@@ -144,15 +144,23 @@ class CustomGridComponent {
144
144
  this.boundMouseUp = this.onMouseUp.bind(this);
145
145
  }
146
146
  ngOnInit() {
147
- this.compactAndApply();
147
+ this.applyCompactionAndSync();
148
148
  this.updateContainerHeight();
149
149
  this.zone.runOutsideAngular(() => {
150
150
  window.addEventListener('mousemove', this.boundMouseMove);
151
151
  window.addEventListener('mouseup', this.boundMouseUp);
152
152
  });
153
153
  }
154
- ngOnChanges(_changes) {
154
+ ngOnChanges(changes) {
155
+ if (this.dragging || this.resizing) {
156
+ this.updateContainerHeight();
157
+ return;
158
+ }
159
+ if (changes['widgets'] || changes['columns']) {
160
+ this.applyCompactionAndSync();
161
+ }
155
162
  this.updateContainerHeight();
163
+ this.cdr.markForCheck();
156
164
  }
157
165
  ngOnDestroy() {
158
166
  window.removeEventListener('mousemove', this.boundMouseMove);
@@ -377,15 +385,32 @@ class CustomGridComponent {
377
385
  compactAndApply() {
378
386
  var _a;
379
387
  if (!((_a = this.widgets) === null || _a === void 0 ? void 0 : _a.length))
380
- return;
388
+ return [];
381
389
  const compacted = GridEngine.compact(this.widgets.map(w => ({ id: w.id, x: w.x, y: w.y, cols: w.cols, rows: w.rows })), this.columns);
390
+ const changedWidgets = [];
382
391
  for (const rw of compacted) {
383
392
  const w = this.widgets.find(ww => ww.id === rw.id);
384
- if (w) {
393
+ if (!w)
394
+ continue;
395
+ const changed = w.x !== rw.x || w.y !== rw.y || w.cols !== rw.cols || w.rows !== rw.rows;
396
+ if (changed) {
385
397
  w.x = rw.x;
386
398
  w.y = rw.y;
399
+ w.cols = rw.cols;
400
+ w.rows = rw.rows;
401
+ changedWidgets.push(w);
387
402
  }
388
403
  }
404
+ return changedWidgets;
405
+ }
406
+ applyCompactionAndSync() {
407
+ const changedWidgets = this.compactAndApply();
408
+ if (!changedWidgets.length)
409
+ return;
410
+ for (const widget of changedWidgets) {
411
+ this.itemChanged.emit(widget);
412
+ }
413
+ this.layoutChanged.emit(this.widgets);
389
414
  }
390
415
  updateContainerHeight() {
391
416
  var _a;