@flogeez/angular-tiptap-editor 3.6.1 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +6 -2
  3. package/esm2022/lib/components/bubble-menus/base/ate-base-bubble-menu.mjs +3 -3
  4. package/esm2022/lib/components/bubble-menus/base/ate-base-sub-bubble-menu.mjs +3 -3
  5. package/esm2022/lib/components/color-picker/ate-color-picker.component.mjs +3 -3
  6. package/esm2022/lib/components/editor/angular-tiptap-editor.component.mjs +52 -13
  7. package/esm2022/lib/components/editor/ate-block-controls.component.mjs +3 -3
  8. package/esm2022/lib/components/slash-commands/ate-slash-commands.component.mjs +3 -3
  9. package/esm2022/lib/components/table-of-contents/ate-table-of-contents.component.mjs +3 -3
  10. package/esm2022/lib/components/toolbar/ate-toolbar.component.mjs +3 -3
  11. package/esm2022/lib/config/ate-editor.config.mjs +7 -1
  12. package/esm2022/lib/config/ate-slash-commands.config.mjs +1 -1
  13. package/esm2022/lib/extensions/ate-paste.extension.mjs +125 -0
  14. package/esm2022/lib/extensions/ate-resizable-image.extension.mjs +44 -3
  15. package/esm2022/lib/models/ate-editor-config.model.mjs +1 -1
  16. package/esm2022/lib/models/ate-image.model.mjs +1 -1
  17. package/esm2022/lib/models/ate-paste.model.mjs +2 -0
  18. package/esm2022/lib/services/ate-editor-commands.service.mjs +7 -1
  19. package/esm2022/lib/services/ate-editor-i18n.service.mjs +36 -0
  20. package/esm2022/lib/services/ate-image.service.mjs +12 -5
  21. package/esm2022/lib/utils/ate-extensions.utils.mjs +3 -1
  22. package/esm2022/lib/utils/ate-image-src-resolver.utils.mjs +21 -0
  23. package/esm2022/public-api.mjs +2 -1
  24. package/fesm2022/flogeez-angular-tiptap-editor.mjs +297 -27
  25. package/fesm2022/flogeez-angular-tiptap-editor.mjs.map +1 -1
  26. package/lib/components/bubble-menus/base/ate-base-bubble-menu.d.ts +2 -2
  27. package/lib/components/bubble-menus/base/ate-base-sub-bubble-menu.d.ts +2 -2
  28. package/lib/components/bubble-menus/table/ate-cell-bubble-menu.component.d.ts +1 -1
  29. package/lib/components/editor/angular-tiptap-editor.component.d.ts +18 -2
  30. package/lib/components/editor/ate-block-controls.component.d.ts +2 -2
  31. package/lib/components/slash-commands/ate-slash-commands.component.d.ts +2 -2
  32. package/lib/config/ate-editor.config.d.ts +3 -0
  33. package/lib/config/ate-slash-commands.config.d.ts +2 -2
  34. package/lib/extensions/ate-paste.extension.d.ts +24 -0
  35. package/lib/extensions/ate-resizable-image.extension.d.ts +10 -1
  36. package/lib/models/ate-editor-config.model.d.ts +6 -1
  37. package/lib/models/ate-image.model.d.ts +12 -0
  38. package/lib/models/ate-paste.model.d.ts +36 -0
  39. package/lib/services/ate-editor-commands.service.d.ts +3 -1
  40. package/lib/services/ate-editor-i18n.service.d.ts +208 -0
  41. package/lib/services/ate-image.service.d.ts +3 -1
  42. package/lib/utils/ate-image-src-resolver.utils.d.ts +2 -0
  43. package/package.json +12 -12
  44. package/public-api.d.ts +1 -0
@@ -1,6 +1,7 @@
1
1
  import { Injectable, signal, computed, inject } from "@angular/core";
2
2
  import { isObservable, firstValueFrom } from "rxjs";
3
- import { AteI18nService } from "./ate-i18n.service";
3
+ import { AteEditorI18n } from "./ate-editor-i18n.service";
4
+ import { ateResolveImageSrc } from "../utils/ate-image-src-resolver.utils";
4
5
  import { AteImageValidationError, } from "../models/ate-image.model";
5
6
  import * as i0 from "@angular/core";
6
7
  export class AteImageService {
@@ -10,7 +11,7 @@ export class AteImageService {
10
11
  this.isImageSelected = computed(() => this.selectedImage() !== null);
11
12
  /** Resizing state */
12
13
  this.isResizing = signal(false);
13
- this.i18n = inject(AteI18nService);
14
+ this.i18n = inject(AteEditorI18n);
14
15
  this.t = this.i18n.imageUpload;
15
16
  /** Upload state signals */
16
17
  this.isUploading = signal(false);
@@ -21,6 +22,7 @@ export class AteImageService {
21
22
  * If set, this handler replaces the default base64 conversion.
22
23
  */
23
24
  this.uploadHandler = null;
25
+ this.srcResolver = null;
24
26
  this.currentEditor = null;
25
27
  }
26
28
  /** Select and track an image from the editor */
@@ -117,7 +119,10 @@ export class AteImageService {
117
119
  img.onload = () => {
118
120
  this.resizeImage(editor, { width: img.naturalWidth, height: img.naturalHeight });
119
121
  };
120
- img.src = editor.getAttributes("resizableImage")["src"];
122
+ const storedSrc = editor.getAttributes("resizableImage")["src"];
123
+ ateResolveImageSrc(this.srcResolver, storedSrc).then(src => {
124
+ img.src = src;
125
+ });
121
126
  }
122
127
  /** Get current image dimensions */
123
128
  getImageDimensions(editor) {
@@ -143,8 +148,10 @@ export class AteImageService {
143
148
  if (!attrs || !attrs["src"]) {
144
149
  return;
145
150
  }
146
- const src = attrs["src"];
147
151
  const fileName = attrs["alt"] || "image";
152
+ ateResolveImageSrc(this.srcResolver, attrs["src"]).then(src => this.downloadResolvedImage(src, fileName));
153
+ }
154
+ downloadResolvedImage(src, fileName) {
148
155
  // Detect if it's base64 or remote URL
149
156
  if (src.startsWith("data:") ||
150
157
  src.startsWith("blob:") ||
@@ -493,4 +500,4 @@ export class AteImageService {
493
500
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AteImageService, decorators: [{
494
501
  type: Injectable
495
502
  }] });
496
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWltYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRpcHRhcC1lZGl0b3Ivc3JjL2xpYi9zZXJ2aWNlcy9hdGUtaW1hZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBUUwsdUJBQXVCLEdBRXhCLE1BQU0sMkJBQTJCLENBQUM7O0FBR25DLE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBS0UsOEJBQThCO1FBQzlCLGtCQUFhLEdBQUcsTUFBTSxDQUFzQixJQUFJLENBQUMsQ0FBQztRQUNsRCxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7UUFFaEUscUJBQXFCO1FBQ3JCLGVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbkIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyQixNQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFM0MsMkJBQTJCO1FBQzNCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLGtCQUFhLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTNCOzs7V0FHRztRQUNILGtCQUFhLEdBQWlDLElBQUksQ0FBQztRQUUzQyxrQkFBYSxHQUFrQixJQUFJLENB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SSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBcm1CVSxlQUFlO21IQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwsIGNvbXB1dGVkLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBBdGVJMThuU2VydmljZSB9IGZyb20gXCIuL2F0ZS1pMThuLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIEF0ZVJlc2l6ZU9wdGlvbnMsXG4gIEF0ZUltYWdlVXBsb2FkT3B0aW9ucyxcbiAgQXRlSW1hZ2VVcGxvYWRIYW5kbGVyLFxuICBBdGVJbWFnZVVwbG9hZFJlc3VsdCxcbiAgQXRlSW1hZ2VEYXRhLFxuICBBdGVJbWFnZVJlamVjdGlvbixcbiAgQXRlSW1hZ2VTb3VyY2UsXG4gIEF0ZUltYWdlVmFsaWRhdGlvbkVycm9yLFxuICBBdGVJbWFnZVZhbGlkYXRpb25SZWFzb24sXG59IGZyb20gXCIuLi9tb2RlbHMvYXRlLWltYWdlLm1vZGVsXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBdGVJbWFnZVNlcnZpY2Uge1xuICBvbkltYWdlVXBsb2FkZWRDYWxsYmFjaz86IChyZXN1bHQ6IEF0ZUltYWdlVXBsb2FkUmVzdWx0KSA9PiB2b2lkO1xuICBvbkltYWdlUmVqZWN0ZWRDYWxsYmFjaz86IChyZWplY3Rpb246IEF0ZUltYWdlUmVqZWN0aW9uKSA9PiB2b2lkO1xuXG4gIC8qKiBTaWduYWxzIGZvciBpbWFnZSBzdGF0ZSAqL1xuICBzZWxlY3RlZEltYWdlID0gc2lnbmFsPEF0ZUltYWdlRGF0YSB8IG51bGw+KG51bGwpO1xuICBpc0ltYWdlU2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnNlbGVjdGVkSW1hZ2UoKSAhPT0gbnVsbCk7XG5cbiAgLyoqIFJlc2l6aW5nIHN0YXRlICovXG4gIGlzUmVzaXppbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgaTE4biA9IGluamVjdChBdGVJMThuU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdCA9IHRoaXMuaTE4bi5pbWFnZVVwbG9hZDtcblxuICAvKiogVXBsb2FkIHN0YXRlIHNpZ25hbHMgKi9cbiAgaXNVcGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICB1cGxvYWRQcm9ncmVzcyA9IHNpZ25hbCgwKTtcbiAgdXBsb2FkTWVzc2FnZSA9IHNpZ25hbChcIlwiKTtcblxuICAvKipcbiAgICogQ3VzdG9tIHVwbG9hZCBoYW5kbGVyLlxuICAgKiBJZiBzZXQsIHRoaXMgaGFuZGxlciByZXBsYWNlcyB0aGUgZGVmYXVsdCBiYXNlNjQgY29udmVyc2lvbi5cbiAgICovXG4gIHVwbG9hZEhhbmRsZXI6IEF0ZUltYWdlVXBsb2FkSGFuZGxlciB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgY3VycmVudEVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFNlbGVjdCBhbmQgdHJhY2sgYW4gaW1hZ2UgZnJvbSB0aGUgZWRpdG9yICovXG4gIHNlbGVjdEltYWdlKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKGVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICBjb25zdCBhdHRycyA9IGVkaXRvci5nZXRBdHRyaWJ1dGVzKFwicmVzaXphYmxlSW1hZ2VcIik7XG4gICAgICB0aGlzLnNlbGVjdGVkSW1hZ2Uuc2V0KHtcbiAgICAgICAgc3JjOiBhdHRyc1tcInNyY1wiXSxcbiAgICAgICAgYWx0OiBhdHRyc1tcImFsdFwiXSxcbiAgICAgICAgdGl0bGU6IGF0dHJzW1widGl0bGVcIl0sXG4gICAgICAgIHdpZHRoOiBhdHRyc1tcIndpZHRoXCJdLFxuICAgICAgICBoZWlnaHQ6IGF0dHJzW1wiaGVpZ2h0XCJdLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5zZXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEltYWdlLnNldChudWxsKTtcbiAgfVxuXG4gIC8qKiBJbnNlcnQgYSBuZXcgaW1hZ2UgYW5kIGVuc3VyZSBpdCdzIHNlbGVjdGVkICovXG4gIGluc2VydEltYWdlKGVkaXRvcjogRWRpdG9yLCBpbWFnZURhdGE6IEF0ZUltYWdlRGF0YSk6IHZvaWQge1xuICAgIGVkaXRvclxuICAgICAgLmNoYWluKClcbiAgICAgIC5mb2N1cygpXG4gICAgICAuc2V0UmVzaXphYmxlSW1hZ2UoaW1hZ2VEYXRhKVxuICAgICAgLmNvbW1hbmQoKHsgdHIsIGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgLy8gU2VsZWN0aW9uIGlzIHVzdWFsbHkgYWZ0ZXIgdGhlIG5vZGUuIE5vZGUgaXMgYXQgdHIuc2VsZWN0aW9uLmZyb20gLSAxLlxuICAgICAgICBjb25zdCB7IGZyb20gfSA9IHRyLnNlbGVjdGlvbjtcbiAgICAgICAgLy8gVHJ5IHRvIHNlbGVjdCBub2RlIGF0IGN1cnJlbnQgcG9zIChpZiBpdCB3YXMgYWxyZWFkeSBzZWxlY3RlZCkgb3IgcHJldmlvdXMgcG9zXG4gICAgICAgIHJldHVybiBjb21tYW5kcy5zZXROb2RlU2VsZWN0aW9uKGZyb20pIHx8IGNvbW1hbmRzLnNldE5vZGVTZWxlY3Rpb24oZnJvbSAtIDEpIHx8IHRydWU7XG4gICAgICB9KVxuICAgICAgLnJ1bigpO1xuICB9XG5cbiAgLyoqIFVwZGF0ZSBhdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGltYWdlICovXG4gIHVwZGF0ZUltYWdlQXR0cmlidXRlcyhlZGl0b3I6IEVkaXRvciwgYXR0cmlidXRlczogUGFydGlhbDxBdGVJbWFnZURhdGE+KTogdm9pZCB7XG4gICAgaWYgKGVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICBjb25zdCBwb3MgPSBlZGl0b3Iuc3RhdGUuc2VsZWN0aW9uLmZyb207XG4gICAgICBlZGl0b3JcbiAgICAgICAgLmNoYWluKClcbiAgICAgICAgLmZvY3VzKClcbiAgICAgICAgLnVwZGF0ZUF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiLCBhdHRyaWJ1dGVzKVxuICAgICAgICAuc2V0Tm9kZVNlbGVjdGlvbihwb3MpXG4gICAgICAgIC5ydW4oKTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRJbWFnZShhdHRyaWJ1dGVzKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVzaXplIGltYWdlIHdpdGggb3B0aW9uYWwgYXNwZWN0IHJhdGlvIG1haW50ZW5hbmNlICovXG4gIHJlc2l6ZUltYWdlKGVkaXRvcjogRWRpdG9yLCBvcHRpb25zOiBBdGVSZXNpemVPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRBdHRycyA9IGVkaXRvci5nZXRBdHRyaWJ1dGVzKFwicmVzaXphYmxlSW1hZ2VcIik7XG4gICAgbGV0IG5ld1dpZHRoID0gb3B0aW9ucy53aWR0aDtcbiAgICBsZXQgbmV3SGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQ7XG5cbiAgICAvLyBNYWludGFpbiBhc3BlY3QgcmF0aW8gaWYgcmVxdWVzdGVkXG4gICAgaWYgKG9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbyAhPT0gZmFsc2UgJiYgY3VycmVudEF0dHJzW1wid2lkdGhcIl0gJiYgY3VycmVudEF0dHJzW1wiaGVpZ2h0XCJdKSB7XG4gICAgICBjb25zdCBhc3BlY3RSYXRpbyA9IGN1cnJlbnRBdHRyc1tcIndpZHRoXCJdIC8gY3VycmVudEF0dHJzW1wiaGVpZ2h0XCJdO1xuXG4gICAgICBpZiAobmV3V2lkdGggJiYgIW5ld0hlaWdodCkge1xuICAgICAgICBuZXdIZWlnaHQgPSBNYXRoLnJvdW5kKG5ld1dpZHRoIC8gYXNwZWN0UmF0aW8pO1xuICAgICAgfSBlbHNlIGlmIChuZXdIZWlnaHQgJiYgIW5ld1dpZHRoKSB7XG4gICAgICAgIG5ld1dpZHRoID0gTWF0aC5yb3VuZChuZXdIZWlnaHQgKiBhc3BlY3RSYXRpbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgbWluaW11bSBsaW1pdHNcbiAgICBpZiAobmV3V2lkdGgpIHtcbiAgICAgIG5ld1dpZHRoID0gTWF0aC5tYXgoNTAsIG5ld1dpZHRoKTtcbiAgICB9XG4gICAgaWYgKG5ld0hlaWdodCkge1xuICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5tYXgoNTAsIG5ld0hlaWdodCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVJbWFnZUF0dHJpYnV0ZXMoZWRpdG9yLCB7XG4gICAgICB3aWR0aDogbmV3V2lkdGgsXG4gICAgICBoZWlnaHQ6IG5ld0hlaWdodCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBQcmVkZXRlcm1pbmVkIHJlc2l6ZSBoZWxwZXJzIHVzZWQgYnkgVUkgKi9cbiAgcmVzaXplSW1hZ2VUb1NtYWxsKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVJbWFnZShlZGl0b3IsIHsgd2lkdGg6IDMwMCwgaGVpZ2h0OiAyMDAsIG1haW50YWluQXNwZWN0UmF0aW86IHRydWUgfSk7XG4gIH1cblxuICByZXNpemVJbWFnZVRvTWVkaXVtKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVJbWFnZShlZGl0b3IsIHsgd2lkdGg6IDUwMCwgaGVpZ2h0OiAzNTAsIG1haW50YWluQXNwZWN0UmF0aW86IHRydWUgfSk7XG4gIH1cblxuICByZXNpemVJbWFnZVRvTGFyZ2UoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZUltYWdlKGVkaXRvciwgeyB3aWR0aDogODAwLCBoZWlnaHQ6IDYwMCwgbWFpbnRhaW5Bc3BlY3RSYXRpbzogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlc2l6ZUltYWdlVG9PcmlnaW5hbChlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmICghZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVzaXplSW1hZ2UoZWRpdG9yLCB7IHdpZHRoOiBpbWcubmF0dXJhbFdpZHRoLCBoZWlnaHQ6IGltZy5uYXR1cmFsSGVpZ2h0IH0pO1xuICAgIH07XG4gICAgaW1nLnNyYyA9IGVkaXRvci5nZXRBdHRyaWJ1dGVzKFwicmVzaXphYmxlSW1hZ2VcIilbXCJzcmNcIl07XG4gIH1cblxuICAvKiogR2V0IGN1cnJlbnQgaW1hZ2UgZGltZW5zaW9ucyAqL1xuICBnZXRJbWFnZURpbWVuc2lvbnMoZWRpdG9yOiBFZGl0b3IpOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICBpZiAoIWVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgYXR0cnMgPSBlZGl0b3IuZ2V0QXR0cmlidXRlcyhcInJlc2l6YWJsZUltYWdlXCIpO1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogYXR0cnNbXCJ3aWR0aFwiXSB8fCAwLFxuICAgICAgaGVpZ2h0OiBhdHRyc1tcImhlaWdodFwiXSB8fCAwLFxuICAgIH07XG4gIH1cblxuICAvKiogUmVtb3ZlIHRoZSBzZWxlY3RlZCBpbWFnZSAqL1xuICBkZWxldGVJbWFnZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmIChlZGl0b3IuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKSkge1xuICAgICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5kZWxldGVTZWxlY3Rpb24oKS5ydW4oKTtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKiogRG93bmxvYWQgdGhlIGN1cnJlbnQgaW1hZ2UgKi9cbiAgZG93bmxvYWRJbWFnZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGNvbnN0IGF0dHJzID0gZWRpdG9yLmdldEF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiKTtcbiAgICBpZiAoIWF0dHJzIHx8ICFhdHRyc1tcInNyY1wiXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNyYyA9IGF0dHJzW1wic3JjXCJdO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gYXR0cnNbXCJhbHRcIl0gfHwgXCJpbWFnZVwiO1xuXG4gICAgLy8gRGV0ZWN0IGlmIGl0J3MgYmFzZTY0IG9yIHJlbW90ZSBVUkxcbiAgICBpZiAoXG4gICAgICBzcmMuc3RhcnRzV2l0aChcImRhdGE6XCIpIHx8XG4gICAgICBzcmMuc3RhcnRzV2l0aChcImJsb2I6XCIpIHx8XG4gICAgICAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzcmMuc3RhcnRzV2l0aCh3aW5kb3cubG9jYXRpb24ub3JpZ2luKSlcbiAgICApIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgIGxpbmsuaHJlZiA9IHNyYztcbiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgcmVtb3RlIFVSTHMsIHdlIHRyeSB0byBmZXRjaCBpdCB0byBieXBhc3MgY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9ucyBvbiAnZG93bmxvYWQnIGF0dHJpYnV0ZVxuICAgICAgZmV0Y2goc3JjKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5ibG9iKCkpXG4gICAgICAgIC50aGVuKGJsb2IgPT4ge1xuICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lO1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGRvd25sb2FkaW5nIGltYWdlOlwiLCBlcnIpO1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIG9wZW5pbmcgaW4gbmV3IHRhYlxuICAgICAgICAgIHdpbmRvdy5vcGVuKHNyYywgXCJfYmxhbmtcIik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRJbWFnZShhdHRyaWJ1dGVzOiBQYXJ0aWFsPEF0ZUltYWdlRGF0YT4pOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZEltYWdlKCk7XG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5zZXQoeyAuLi5jdXJyZW50LCAuLi5hdHRyaWJ1dGVzIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBWYWxpZGF0ZSBmaWxlIHR5cGUgYW5kIHNpemUgKi9cbiAgdmFsaWRhdGVJbWFnZShcbiAgICBmaWxlOiBGaWxlLFxuICAgIG9wdGlvbnM/OiB7IG1heFNpemU/OiBudW1iZXI7IGFsbG93ZWRUeXBlcz86IHN0cmluZ1tdIH1cbiAgKTogeyB2YWxpZDogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmc7IHJlYXNvbj86IEF0ZUltYWdlVmFsaWRhdGlvblJlYXNvbiB9IHtcbiAgICBjb25zdCBtYXhTaXplID0gb3B0aW9ucz8ubWF4U2l6ZSB8fCAxMCAqIDEwMjQgKiAxMDI0O1xuICAgIGNvbnN0IGFsbG93ZWRUeXBlcyA9IG9wdGlvbnM/LmFsbG93ZWRUeXBlcyB8fCBbXTtcblxuICAgIGlmIChhbGxvd2VkVHlwZXMubGVuZ3RoID4gMCAmJiAhYWxsb3dlZFR5cGVzLmluY2x1ZGVzKGZpbGUudHlwZSkpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IHRoaXMudCgpLmludmFsaWRGaWxlVHlwZSwgcmVhc29uOiBcImludmFsaWQtdHlwZVwiIH07XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuc2l6ZSA+IG1heFNpemUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGAke3RoaXMudCgpLmltYWdlVG9vTGFyZ2V9IChtYXggJHtNYXRoLnJvdW5kKG1heFNpemUgLyAxMDI0IC8gMTAyNCl9TUIpYCxcbiAgICAgICAgcmVhc29uOiBcInRvby1sYXJnZVwiLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbiAgfVxuXG4gIC8qKiBDb21wcmVzcyBhbmQgcHJvY2VzcyBpbWFnZSBvbiBjbGllbnQgc2lkZSAqL1xuICBhc3luYyBjb21wcmVzc0ltYWdlKFxuICAgIGZpbGU6IEZpbGUsXG4gICAgcXVhbGl0eSA9IDAuOCxcbiAgICBtYXhXaWR0aCA9IDE5MjAsXG4gICAgbWF4SGVpZ2h0ID0gMTIwMFxuICApOiBQcm9taXNlPEF0ZUltYWdlVXBsb2FkUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG5cbiAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nKCkpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldCg0MCk7XG4gICAgICAgICAgdGhpcy51cGxvYWRNZXNzYWdlLnNldCh0aGlzLnQoKS5yZXNpemluZyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgeyB3aWR0aCwgaGVpZ2h0IH0gPSBpbWc7XG4gICAgICAgIGlmICh3aWR0aCA+IG1heFdpZHRoIHx8IGhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgICAgIGNvbnN0IHJhdGlvID0gTWF0aC5taW4obWF4V2lkdGggLyB3aWR0aCwgbWF4SGVpZ2h0IC8gaGVpZ2h0KTtcbiAgICAgICAgICB3aWR0aCAqPSByYXRpbztcbiAgICAgICAgICBoZWlnaHQgKj0gcmF0aW87XG4gICAgICAgIH1cblxuICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgY3R4Py5kcmF3SW1hZ2UoaW1nLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBpZiAodGhpcy5pc1VwbG9hZGluZygpKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoNjApO1xuICAgICAgICAgIHRoaXMudXBsb2FkTWVzc2FnZS5zZXQodGhpcy50KCkuY29tcHJlc3NpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FudmFzLnRvQmxvYihcbiAgICAgICAgICBibG9iID0+IHtcbiAgICAgICAgICAgIGlmIChibG9iKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlNjQgPSBlLnRhcmdldD8ucmVzdWx0IGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgIHNyYzogYmFzZTY0LFxuICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgc2l6ZTogYmxvYi5zaXplLFxuICAgICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IE1hdGgucm91bmQod2lkdGgpLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLnJvdW5kKGhlaWdodCksXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbFNpemU6IGZpbGUuc2l6ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMudCgpLmNvbXByZXNzaW9uRXJyb3IpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpbGUudHlwZSxcbiAgICAgICAgICBxdWFsaXR5XG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICBpbWcub25lcnJvciA9ICgpID0+IHJlamVjdChuZXcgRXJyb3IodGhpcy50KCkubG9hZEVycm9yKSk7XG4gICAgICBpbWcuc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDb3JlIHVwbG9hZCBsb2dpYyB3aXRoIHByb2dyZXNzIHRyYWNraW5nICovXG4gIHByaXZhdGUgYXN5bmMgdXBsb2FkSW1hZ2VXaXRoUHJvZ3Jlc3MoXG4gICAgZWRpdG9yOiBFZGl0b3IsXG4gICAgZmlsZTogRmlsZSxcbiAgICBpbnNlcnRpb25TdHJhdGVneTogKGVkaXRvcjogRWRpdG9yLCByZXN1bHQ6IEF0ZUltYWdlVXBsb2FkUmVzdWx0KSA9PiB2b2lkLFxuICAgIGFjdGlvbk1lc3NhZ2U6IHN0cmluZyxcbiAgICBvcHRpb25zOiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMgfCB1bmRlZmluZWQsXG4gICAgc291cmNlOiBBdGVJbWFnZVNvdXJjZVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5jdXJyZW50RWRpdG9yID0gZWRpdG9yO1xuICAgICAgdGhpcy5pc1VwbG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldCgxMCk7XG4gICAgICB0aGlzLnVwbG9hZE1lc3NhZ2Uuc2V0KHRoaXMudCgpLnZhbGlkYXRpbmcpO1xuICAgICAgdGhpcy5mb3JjZUVkaXRvclVwZGF0ZSgpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnByb2Nlc3NJbWFnZShmaWxlLCBvcHRpb25zLCAocHJvZ3Jlc3MsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgaWYgKHByb2dyZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldChwcm9ncmVzcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMudXBsb2FkTWVzc2FnZS5zZXQobWVzc2FnZSk7XG4gICAgICAgICAgdGhpcy5mb3JjZUVkaXRvclVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoOTApO1xuICAgICAgdGhpcy51cGxvYWRNZXNzYWdlLnNldChhY3Rpb25NZXNzYWdlKTtcbiAgICAgIHRoaXMuZm9yY2VFZGl0b3JVcGRhdGUoKTtcblxuICAgICAgLy8gRmluYWwgaW5zZXJ0aW9uXG4gICAgICBpbnNlcnRpb25TdHJhdGVneShlZGl0b3IsIHJlc3VsdCk7XG5cbiAgICAgIGlmICh0aGlzLm9uSW1hZ2VVcGxvYWRlZENhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMub25JbWFnZVVwbG9hZGVkQ2FsbGJhY2socmVzdWx0KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXNldFVwbG9hZFN0YXRlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucmVzZXRVcGxvYWRTdGF0ZSgpO1xuICAgICAgY29uc29sZS5lcnJvcih0aGlzLnQoKS51cGxvYWRFcnJvciwgZXJyb3IpO1xuICAgICAgdGhpcy5vbkltYWdlUmVqZWN0ZWRDYWxsYmFjaz8uKHtcbiAgICAgICAgcmVhc29uOiBlcnJvciBpbnN0YW5jZW9mIEF0ZUltYWdlVmFsaWRhdGlvbkVycm9yID8gZXJyb3IucmVhc29uIDogXCJ1cGxvYWQtZmFpbGVkXCIsXG4gICAgICAgIGZpbGUsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqIFZhbGlkYXRlLCBjb21wcmVzcyBhbmQgKHdoZW4gY29uZmlndXJlZCkgc2VuZCBhbiBpbWFnZSB0byB0aGUgdXBsb2FkIGhhbmRsZXIgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzSW1hZ2UoXG4gICAgZmlsZTogRmlsZSxcbiAgICBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zLFxuICAgIG9uU3RlcD86IChwcm9ncmVzcz86IG51bWJlciwgbWVzc2FnZT86IHN0cmluZykgPT4gdm9pZFxuICApOiBQcm9taXNlPEF0ZUltYWdlVXBsb2FkUmVzdWx0PiB7XG4gICAgY29uc3QgdmFsaWRhdGlvbiA9IHRoaXMudmFsaWRhdGVJbWFnZShmaWxlLCB7XG4gICAgICBtYXhTaXplOiBvcHRpb25zPy5tYXhTaXplLFxuICAgICAgYWxsb3dlZFR5cGVzOiBvcHRpb25zPy5hbGxvd2VkVHlwZXMsXG4gICAgfSk7XG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgQXRlSW1hZ2VWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIHZhbGlkYXRpb24ucmVhc29uID8/IFwiaW52YWxpZC10eXBlXCIsXG4gICAgICAgIHZhbGlkYXRpb24uZXJyb3IgPz8gXCJcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBvblN0ZXA/LigzMCwgdGhpcy50KCkuY29tcHJlc3NpbmcpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb21wcmVzc0ltYWdlKFxuICAgICAgZmlsZSxcbiAgICAgIG9wdGlvbnM/LnF1YWxpdHkgfHwgMC44LFxuICAgICAgb3B0aW9ucz8ubWF4V2lkdGggfHwgMTkyMCxcbiAgICAgIG9wdGlvbnM/Lm1heEhlaWdodCB8fCAxMjAwXG4gICAgKTtcblxuICAgIG9uU3RlcD8uKDcwKTtcblxuICAgIC8vIEhhbmRsZSBjdXN0b20gdXBsb2FkIGlmIGhhbmRsZXIgaXMgcHJvdmlkZWRcbiAgICBpZiAodGhpcy51cGxvYWRIYW5kbGVyKSB7XG4gICAgICBvblN0ZXA/Lih1bmRlZmluZWQsIHRoaXMudCgpLnVwbG9hZGluZ1RvU2VydmVyKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGFuZGxlclJlc3BvbnNlID0gdGhpcy51cGxvYWRIYW5kbGVyKHtcbiAgICAgICAgICBmaWxlLFxuICAgICAgICAgIHdpZHRoOiByZXN1bHQud2lkdGggfHwgMCxcbiAgICAgICAgICBoZWlnaHQ6IHJlc3VsdC5oZWlnaHQgfHwgMCxcbiAgICAgICAgICB0eXBlOiByZXN1bHQudHlwZSxcbiAgICAgICAgICBiYXNlNjQ6IHJlc3VsdC5zcmMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGhhbmRsZXJSZXN1bHQgPSBpc09ic2VydmFibGUoaGFuZGxlclJlc3BvbnNlKVxuICAgICAgICAgID8gYXdhaXQgZmlyc3RWYWx1ZUZyb20oaGFuZGxlclJlc3BvbnNlKVxuICAgICAgICAgIDogYXdhaXQgaGFuZGxlclJlc3BvbnNlO1xuXG4gICAgICAgIHJlc3VsdC5zcmMgPSBoYW5kbGVyUmVzdWx0LnNyYztcbiAgICAgICAgaWYgKGhhbmRsZXJSZXN1bHQuYWx0KSB7XG4gICAgICAgICAgcmVzdWx0Lm5hbWUgPSBoYW5kbGVyUmVzdWx0LmFsdDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoaGFuZGxlckVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IodGhpcy50KCkudXBsb2FkRXJyb3IsIGhhbmRsZXJFcnJvcik7XG4gICAgICAgIHRocm93IGhhbmRsZXJFcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBhbiBpbWFnZSB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIGRvY3VtZW50IChlLmcuIGJhc2U2NCBmcm9tIHBhc3RlZCBIVE1MKVxuICAgKiB0aHJvdWdoIHZhbGlkYXRpb24sIGNvbXByZXNzaW9uIGFuZCB0aGUgdXBsb2FkIGhhbmRsZXIsIGFuZCByZXNvbHZlIHRvIGl0cyBuZXcgYHNyY2AuXG4gICAqL1xuICBhc3luYyByZWhvc3RJbWFnZShmaWxlOiBGaWxlLCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcm9jZXNzSW1hZ2UoZmlsZSwgb3B0aW9ucyk7XG4gICAgICBpZiAodGhpcy5vbkltYWdlVXBsb2FkZWRDYWxsYmFjaykge1xuICAgICAgICB0aGlzLm9uSW1hZ2VVcGxvYWRlZENhbGxiYWNrKHJlc3VsdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0LnNyYztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcih0aGlzLnQoKS51cGxvYWRFcnJvciwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldFVwbG9hZFN0YXRlKCkge1xuICAgIHRoaXMuaXNVcGxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldCgwKTtcbiAgICB0aGlzLnVwbG9hZE1lc3NhZ2Uuc2V0KFwiXCIpO1xuICAgIHRoaXMuZm9yY2VFZGl0b3JVcGRhdGUoKTtcbiAgICB0aGlzLmN1cnJlbnRFZGl0b3IgPSBudWxsO1xuICB9XG5cbiAgLyoqIE1haW4gZW50cnkgcG9pbnQgZm9yIGZpbGUgdXBsb2FkIGFuZCBpbnNlcnRpb24gKi9cbiAgYXN5bmMgdXBsb2FkQW5kSW5zZXJ0SW1hZ2UoXG4gICAgZWRpdG9yOiBFZGl0b3IsXG4gICAgZmlsZTogRmlsZSxcbiAgICBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zLFxuICAgIHNvdXJjZTogQXRlSW1hZ2VTb3VyY2UgPSBcImFwaVwiXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnVwbG9hZEltYWdlV2l0aFByb2dyZXNzKFxuICAgICAgZWRpdG9yLFxuICAgICAgZmlsZSxcbiAgICAgIChlZCwgcmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMuaW5zZXJ0SW1hZ2UoZWQsIHtcbiAgICAgICAgICBzcmM6IHJlc3VsdC5zcmMsXG4gICAgICAgICAgYWx0OiByZXN1bHQubmFtZSxcbiAgICAgICAgICB0aXRsZTogYCR7cmVzdWx0Lm5hbWV9ICgke3Jlc3VsdC53aWR0aH3DlyR7cmVzdWx0LmhlaWdodH0pYCxcbiAgICAgICAgICB3aWR0aDogcmVzdWx0LndpZHRoLFxuICAgICAgICAgIGhlaWdodDogcmVzdWx0LmhlaWdodCxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgdGhpcy50KCkuaW5zZXJ0aW5nSW1hZ2UsXG4gICAgICBvcHRpb25zLFxuICAgICAgc291cmNlXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBUcmlnZ2VyIGFuIGVkaXRvciB0cmFuc2FjdGlvbiB0byBmb3JjZSBkZWNvcmF0aW9uIHVwZGF0ZSAqL1xuICBwcml2YXRlIGZvcmNlRWRpdG9yVXBkYXRlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRFZGl0b3IpIHtcbiAgICAgIGNvbnN0IHsgdHIgfSA9IHRoaXMuY3VycmVudEVkaXRvci5zdGF0ZTtcbiAgICAgIHRoaXMuY3VycmVudEVkaXRvci52aWV3LmRpc3BhdGNoKHRyKTtcbiAgICB9XG4gIH1cblxuICAvKiogR2VuZXJpYyBoZWxwZXIgdG8gb3BlbiBmaWxlIHBpY2tlciBhbmQgcHJvY2VzcyBzZWxlY3Rpb24gKi9cbiAgcHJpdmF0ZSBhc3luYyBzZWxlY3RGaWxlQW5kUHJvY2VzcyhcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICB1cGxvYWRNZXRob2Q6IChcbiAgICAgIGVkaXRvcjogRWRpdG9yLFxuICAgICAgZmlsZTogRmlsZSxcbiAgICAgIG9wdGlvbnM6IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyB8IHVuZGVmaW5lZCxcbiAgICAgIHNvdXJjZTogQXRlSW1hZ2VTb3VyY2VcbiAgICApID0+IFByb21pc2U8dm9pZD4sXG4gICAgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9uc1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICBpbnB1dC50eXBlID0gXCJmaWxlXCI7XG5cbiAgICAgIC8vIFVzZSBhbGxvd2VkVHlwZXMgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBkZWZhdWx0IHRvIGltYWdlLypcbiAgICAgIGlmIChvcHRpb25zPy5hbGxvd2VkVHlwZXMgJiYgb3B0aW9ucy5hbGxvd2VkVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLmFsbG93ZWRUeXBlcy5qb2luKFwiLFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlucHV0LmFjY2VwdCA9IFwiaW1hZ2UvKlwiO1xuICAgICAgfVxuXG4gICAgICBpbnB1dC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgYXN5bmMgZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSAoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuZmlsZXM/LlswXTtcbiAgICAgICAgaWYgKGZpbGUgJiYgZmlsZS50eXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdXBsb2FkTWV0aG9kKGVkaXRvciwgZmlsZSwgb3B0aW9ucywgXCJwaWNrZXJcIik7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy50KCkubm9GaWxlU2VsZWN0ZWQpKTtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlucHV0KTtcbiAgICAgIH0pO1xuXG4gICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbnB1dCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy50KCkuc2VsZWN0aW9uQ2FuY2VsbGVkKSk7XG4gICAgICB9KTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbnB1dCk7XG4gICAgICBpbnB1dC5jbGljaygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFNlbGVjdCBmaWxlIGFuZCB1cGxvYWQgYXMgbmV3IGltYWdlICovXG4gIGFzeW5jIHNlbGVjdEFuZFVwbG9hZEltYWdlKGVkaXRvcjogRWRpdG9yLCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0RmlsZUFuZFByb2Nlc3MoZWRpdG9yLCB0aGlzLnVwbG9hZEFuZEluc2VydEltYWdlLmJpbmQodGhpcyksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIFNlbGVjdCBmaWxlIGFuZCByZXBsYWNlIGN1cnJlbnRseSBzZWxlY3RlZCBpbWFnZSAqL1xuICBhc3luYyBzZWxlY3RBbmRSZXBsYWNlSW1hZ2UoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBObyBuZWVkIGZvciBjb21wbGljYXRlZCBiYWNrdXAvcmVzdG9yZSBub3cgdGhhdCB3ZSBkb24ndCBkZWxldGUgcHJlbWF0dXJlbHkuXG4gICAgLy8gVGhlIHVwbG9hZEFuZFJlcGxhY2VJbWFnZSB3aWxsIGhhbmRsZSB0aGUgYXRvbWljIHJlcGxhY2VtZW50LlxuICAgIHJldHVybiB0aGlzLnNlbGVjdEZpbGVBbmRQcm9jZXNzKGVkaXRvciwgdGhpcy51cGxvYWRBbmRSZXBsYWNlSW1hZ2UuYmluZCh0aGlzKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogSW50ZXJuYWwgaGVscGVyIHVzZWQgYnkgcmVwbGFjZW1lbnQgbG9naWMgKi9cbiAgYXN5bmMgdXBsb2FkQW5kUmVwbGFjZUltYWdlKFxuICAgIGVkaXRvcjogRWRpdG9yLFxuICAgIGZpbGU6IEZpbGUsXG4gICAgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyxcbiAgICBzb3VyY2U6IEF0ZUltYWdlU291cmNlID0gXCJhcGlcIlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBTdG9yZSBjdXJyZW50IHBvc2l0aW9uIHRvIGVuc3VyZSB3ZSBjYW4gcmUtc2VsZWN0IHRoZSBpbWFnZSBldmVuIGlmIHNlbGVjdGlvbiBibHVycyBkdXJpbmcgdXBsb2FkXG4gICAgY29uc3Qgd2FzQWN0aXZlID0gZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIik7XG5cbiAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlV2l0aFByb2dyZXNzKFxuICAgICAgZWRpdG9yLFxuICAgICAgZmlsZSxcbiAgICAgIChlZCwgcmVzdWx0KSA9PiB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IHtcbiAgICAgICAgICBzcmM6IHJlc3VsdC5zcmMsXG4gICAgICAgICAgYWx0OiByZXN1bHQubmFtZSxcbiAgICAgICAgICB0aXRsZTogYCR7cmVzdWx0Lm5hbWV9ICgke3Jlc3VsdC53aWR0aH3DlyR7cmVzdWx0LmhlaWdodH0pYCxcbiAgICAgICAgICB3aWR0aDogcmVzdWx0LndpZHRoLFxuICAgICAgICAgIGhlaWdodDogcmVzdWx0LmhlaWdodCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJZiB0aGUgaW1hZ2Ugd2FzIGFjdGl2ZSBvciBpcyBzdGlsbCBhY3RpdmUsIHVwZGF0ZSBpdCBhdG9taWNhbGx5XG4gICAgICAgIGlmICh3YXNBY3RpdmUgfHwgZWQuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKSkge1xuICAgICAgICAgIGVkLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAudXBkYXRlQXR0cmlidXRlcyhcInJlc2l6YWJsZUltYWdlXCIsIGltYWdlRGF0YSlcbiAgICAgICAgICAgIC5jb21tYW5kKCh7IHRyLCBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgZnJvbSB9ID0gdHIuc2VsZWN0aW9uO1xuICAgICAgICAgICAgICAvLyBSZS1zZWxlY3QgdGhlIG5vZGUgYXQgaXRzIG1hcHBlZCBwb3NpdGlvbiBvciBjdXJyZW50IHNlbGVjdGlvblxuICAgICAgICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0Tm9kZVNlbGVjdGlvbihmcm9tKSB8fCBjb21tYW5kcy5zZXROb2RlU2VsZWN0aW9uKGZyb20gLSAxKSB8fCB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5ydW4oKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkSW1hZ2UoaW1hZ2VEYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgcmVwbGFjZSB3aGF0ZXZlciBpcyBzZWxlY3RlZCAob3IgaW5zZXJ0IGF0IGN1cnNvcilcbiAgICAgICAgICB0aGlzLmluc2VydEltYWdlKGVkLCBpbWFnZURhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWZ0ZXIgcmVwbGFjZW1lbnQsIGVuc3VyZSB0aGUgaW1hZ2UgaXMgdHJhY2tlZCBpbiBvdXIgc2lnbmFsc1xuICAgICAgICB0aGlzLnNlbGVjdEltYWdlKGVkKTtcbiAgICAgIH0sXG4gICAgICB0aGlzLnQoKS5yZXBsYWNpbmdJbWFnZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzb3VyY2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBpbWFnZSBkcm9wIGV2ZW50LlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwb3NpdGlvbiBmcm9tIGNvb3JkaW5hdGVzIGFuZCBzZXRzIHRoZSBzZWxlY3Rpb24gYWNjb3JkaW5nbHkuXG4gICAqL1xuICBoYW5kbGVEcm9wKGVkaXRvcjogRWRpdG9yLCBldmVudDogRHJhZ0V2ZW50LCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xuICAgIGlmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IEFycmF5LmZyb20oZmlsZXMpLmZpbmQoZiA9PiBmLnR5cGUuc3RhcnRzV2l0aChcImltYWdlL1wiKSk7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBkcm9wIHBvc2l0aW9uIGZyb20gY29vcmRpbmF0ZXNcbiAgICBjb25zdCBwb3MgPSBlZGl0b3Iudmlldy5wb3NBdENvb3Jkcyh7IGxlZnQ6IGV2ZW50LmNsaWVudFgsIHRvcDogZXZlbnQuY2xpZW50WSB9KTtcbiAgICBpZiAocG9zKSB7XG4gICAgICBlZGl0b3IuY29tbWFuZHMuc2V0VGV4dFNlbGVjdGlvbihwb3MucG9zKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwbG9hZEFuZEluc2VydEltYWdlKGVkaXRvciwgZmlsZSwgb3B0aW9ucywgXCJkcm9wXCIpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGltYWdlIHBhc3RlIGV2ZW50LlxuICAgKi9cbiAgaGFuZGxlUGFzdGUoZWRpdG9yOiBFZGl0b3IsIGV2ZW50OiBDbGlwYm9hcmRFdmVudCwgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNsaXBib2FyZEZpbGVzID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZmlsZXM7XG4gICAgaWYgKCFjbGlwYm9hcmRGaWxlcyB8fCBjbGlwYm9hcmRGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZUZpbGUgPSBBcnJheS5mcm9tKGNsaXBib2FyZEZpbGVzKS5maW5kKGZpbGUgPT4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpO1xuICAgIGlmICghaW1hZ2VGaWxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnVwbG9hZEFuZEluc2VydEltYWdlKGVkaXRvciwgaW1hZ2VGaWxlLCBvcHRpb25zLCBcInBhc3RlXCIpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
503
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWltYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRpcHRhcC1lZGl0b3Ivc3JjL2xpYi9zZXJ2aWNlcy9hdGUtaW1hZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBU0wsdUJBQXVCLEdBRXhCLE1BQU0sMkJBQTJCLENBQUM7O0FBR25DLE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBS0UsOEJBQThCO1FBQzlCLGtCQUFhLEdBQUcsTUFBTSxDQUFzQixJQUFJLENBQUMsQ0FBQztRQUNsRCxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7UUFFaEUscUJBQXFCO1FBQ3JCLGVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbkIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwQixNQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFM0MsMkJBQTJCO1FBQzNCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLGtCQUFhLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTNCOzs7V0FHRztRQUNILGtCQUFhLEdBQWlDLElBQUksQ0FBQztRQUVuRCxnQkFBVyxHQUErQixJQUFJLENBQUM7UUFFdkMsa0JBQWEsR0FBa0IsSUFBSSxDQUFDO0tBcWxCN0M7SUFubEJDLGdEQUFnRDtJQUNoRCxXQUFXLENBQUMsTUFBYztRQUN4QixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQztnQkFDckIsR0FBRyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQ2pCLEdBQUcsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUNqQixLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDckIsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQ3JCLE1BQU0sRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDO2FBQ3hCLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxXQUFXLENBQUMsTUFBYyxFQUFFLFNBQXVCO1FBQ2pELE1BQU07YUFDSCxLQUFLLEVBQUU7YUFDUCxLQUFLLEVBQUU7YUFDUCxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7YUFDNUIsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtZQUM1Qix5RUFBeUU7WUFDekUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDOUIsaUZBQWlGO1lBQ2pGLE9BQU8sUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3hGLENBQUMsQ0FBQzthQUNELEdBQUcsRUFBRSxDQUFDO0lBQ1gsQ0FBQztJQUVELHNEQUFzRDtJQUN0RCxxQkFBcUIsQ0FBQyxNQUFjLEVBQUUsVUFBaUM7UUFDckUsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDeEMsTUFBTTtpQkFDSCxLQUFLLEVBQUU7aUJBQ1AsS0FBSyxFQUFFO2lCQUNQLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLFVBQVUsQ0FBQztpQkFDOUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO2lCQUNyQixHQUFHLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVELDBEQUEwRDtJQUMxRCxXQUFXLENBQUMsTUFBYyxFQUFFLE9BQXlCO1FBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUN2QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RCxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzdCLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFFL0IscUNBQXFDO1FBQ3JDLElBQUksT0FBTyxDQUFDLG1CQUFtQixLQUFLLEtBQUssSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDN0YsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVuRSxJQUFJLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMzQixTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLENBQUM7WUFDakQsQ0FBQztpQkFBTSxJQUFJLFNBQVMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNsQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRTtZQUNqQyxLQUFLLEVBQUUsUUFBUTtZQUNmLE1BQU0sRUFBRSxTQUFTO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsa0JBQWtCLENBQUMsTUFBYztRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFjO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQWM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBYztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLENBQUMsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6RCxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsa0JBQWtCLENBQUMsTUFBYztRQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JELE9BQU87WUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDMUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQzdCLENBQUM7SUFDSixDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLFdBQVcsQ0FBQyxNQUFjO1FBQ3hCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxhQUFhLENBQUMsTUFBYztRQUMxQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQztRQUV6QyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUM1RCxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVPLHFCQUFxQixDQUFDLEdBQVcsRUFBRSxRQUFnQjtRQUN6RCxzQ0FBc0M7UUFDdEMsSUFDRSxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUN2QixHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUN2QixDQUFDLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDekUsQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDekIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTixrR0FBa0c7WUFDbEcsS0FBSyxDQUFDLEdBQUcsQ0FBQztpQkFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDWCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO2dCQUN6QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQy9DLGlDQUFpQztnQkFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFVBQWlDO1FBQzNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsYUFBYSxDQUNYLElBQVUsRUFDVixPQUF1RDtRQUV2RCxNQUFNLE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JELE1BQU0sWUFBWSxHQUFHLE9BQU8sRUFBRSxZQUFZLElBQUksRUFBRSxDQUFDO1FBRWpELElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQztRQUNuRixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sRUFBRSxDQUFDO1lBQ3hCLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLGFBQWEsU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUs7Z0JBQy9FLE1BQU0sRUFBRSxXQUFXO2FBQ3BCLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELEtBQUssQ0FBQyxhQUFhLENBQ2pCLElBQVUsRUFDVixPQUFPLEdBQUcsR0FBRyxFQUNiLFFBQVEsR0FBRyxJQUFJLEVBQ2YsU0FBUyxHQUFHLElBQUk7UUFFaEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUV4QixHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDaEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUMsQ0FBQztnQkFFRCxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQztnQkFDNUIsSUFBSSxLQUFLLEdBQUcsUUFBUSxJQUFJLE1BQU0sR0FBRyxTQUFTLEVBQUUsQ0FBQztvQkFDM0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxFQUFFLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQztvQkFDN0QsS0FBSyxJQUFJLEtBQUssQ0FBQztvQkFDZixNQUFNLElBQUksS0FBSyxDQUFDO2dCQUNsQixDQUFDO2dCQUVELE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDdkIsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRXpDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQy9DLENBQUM7Z0JBRUQsTUFBTSxDQUFDLE1BQU0sQ0FDWCxJQUFJLENBQUMsRUFBRTtvQkFDTCxJQUFJLElBQUksRUFBRSxDQUFDO3dCQUNULE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7NEJBQ2xCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBZ0IsQ0FBQzs0QkFDMUMsT0FBTyxDQUFDO2dDQUNOLEdBQUcsRUFBRSxNQUFNO2dDQUNYLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQ0FDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0NBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dDQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztnQ0FDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2dDQUMxQixZQUFZLEVBQUUsSUFBSSxDQUFDLElBQUk7NkJBQ3hCLENBQUMsQ0FBQzt3QkFDTCxDQUFDLENBQUM7d0JBQ0YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0IsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO29CQUMvQyxDQUFDO2dCQUNILENBQUMsRUFDRCxJQUFJLENBQUMsSUFBSSxFQUNULE9BQU8sQ0FDUixDQUFDO1lBQ0osQ0FBQyxDQUFDO1lBRUYsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDMUQsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELCtDQUErQztJQUN2QyxLQUFLLENBQUMsdUJBQXVCLENBQ25DLE1BQWMsRUFDZCxJQUFVLEVBQ1YsaUJBQXlFLEVBQ3pFLGFBQXFCLEVBQ3JCLE9BQTBDLEVBQzFDLE1BQXNCO1FBRXRCLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUV6QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRTtnQkFDMUUsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO2dCQUNELElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzNCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRXpCLGtCQUFrQjtZQUNsQixpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFbEMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxFQUFFLEtBQUssWUFBWSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZTtnQkFDakYsSUFBSTtnQkFDSixNQUFNO2FBQ1AsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1GQUFtRjtJQUMzRSxLQUFLLENBQUMsWUFBWSxDQUN4QixJQUFVLEVBQ1YsT0FBK0IsRUFDL0IsTUFBc0Q7UUFFdEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7WUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPO1lBQ3pCLFlBQVksRUFBRSxPQUFPLEVBQUUsWUFBWTtTQUNwQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSx1QkFBdUIsQ0FDL0IsVUFBVSxDQUFDLE1BQU0sSUFBSSxjQUFjLEVBQ25DLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUN2QixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUNyQyxJQUFJLEVBQ0osT0FBTyxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQ3ZCLE9BQU8sRUFBRSxRQUFRLElBQUksSUFBSSxFQUN6QixPQUFPLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FDM0IsQ0FBQztRQUVGLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWIsOENBQThDO1FBQzlDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUVoRCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztvQkFDekMsSUFBSTtvQkFDSixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDO29CQUN4QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDO29CQUMxQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7b0JBQ2pCLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRztpQkFDbkIsQ0FBQyxDQUFDO2dCQUVILE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUM7b0JBQ2pELENBQUMsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxlQUFlLENBQUM7b0JBQ3ZDLENBQUMsQ0FBQyxNQUFNLGVBQWUsQ0FBQztnQkFFMUIsTUFBTSxDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDO2dCQUMvQixJQUFJLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDdEIsTUFBTSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDO2dCQUNsQyxDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sWUFBWSxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDbEQsTUFBTSxZQUFZLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFVLEVBQUUsT0FBK0I7UUFDM0QsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0RCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUNwQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsS0FBSyxDQUFDLG9CQUFvQixDQUN4QixNQUFjLEVBQ2QsSUFBVSxFQUNWLE9BQStCLEVBQy9CLFNBQXlCLEtBQUs7UUFFOUIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQ2pDLE1BQU0sRUFDTixJQUFJLEVBQ0osQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRTtnQkFDbkIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHO2dCQUNmLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDaEIsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUc7Z0JBQzFELEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2FBQ3RCLENBQUMsQ0FBQztRQUNMLENBQUMsRUFDRCxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUN2QixPQUFPLEVBQ1AsTUFBTSxDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQsK0RBQStEO0lBQ3ZELGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRUQsK0RBQStEO0lBQ3ZELEtBQUssQ0FBQyxvQkFBb0IsQ0FDaEMsTUFBYyxFQUNkLFlBS2tCLEVBQ2xCLE9BQStCO1FBRS9CLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUVwQiw2REFBNkQ7WUFDN0QsSUFBSSxPQUFPLEVBQUUsWUFBWSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztZQUMzQixDQUFDO1lBRUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBRTdCLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFDLENBQUMsRUFBQyxFQUFFO2dCQUN6QyxNQUFNLElBQUksR0FBSSxDQUFDLENBQUMsTUFBMkIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDM0MsSUFBSSxDQUFDO3dCQUNILE1BQU0sWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO3dCQUNwRCxPQUFPLEVBQUUsQ0FBQztvQkFDWixDQUFDO29CQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7d0JBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoQixDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLENBQUM7Z0JBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFFSCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDcEMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBQ2pELENBQUMsQ0FBQyxDQUFDO1lBRUgsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsTUFBYyxFQUFFLE9BQStCO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCx1REFBdUQ7SUFDdkQsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE1BQWMsRUFBRSxPQUErQjtRQUN6RSwrRUFBK0U7UUFDL0UsZ0VBQWdFO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsS0FBSyxDQUFDLHFCQUFxQixDQUN6QixNQUFjLEVBQ2QsSUFBVSxFQUNWLE9BQStCLEVBQy9CLFNBQXlCLEtBQUs7UUFFOUIsb0dBQW9HO1FBQ3BHLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUVwRCxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FDaEMsTUFBTSxFQUNOLElBQUksRUFDSixDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNiLE1BQU0sU0FBUyxHQUFHO2dCQUNoQixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7Z0JBQ2YsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNoQixLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRztnQkFDMUQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07YUFDdEIsQ0FBQztZQUVGLG1FQUFtRTtZQUNuRSxJQUFJLFNBQVMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztnQkFDL0MsRUFBRSxDQUFDLEtBQUssRUFBRTtxQkFDUCxLQUFLLEVBQUU7cUJBQ1AsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDO3FCQUM3QyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO29CQUM1QixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztvQkFDOUIsaUVBQWlFO29CQUNqRSxPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztnQkFDeEYsQ0FBQyxDQUFDO3FCQUNELEdBQUcsRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sK0RBQStEO2dCQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNsQyxDQUFDO1lBRUQsZ0VBQWdFO1lBQ2hFLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkIsQ0FBQyxFQUNELElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQ3ZCLE9BQU8sRUFDUCxNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsTUFBYyxFQUFFLEtBQWdCLEVBQUUsT0FBK0I7UUFDMUUsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUM7UUFDeEMsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLGlEQUFpRDtRQUNqRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNqRixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsTUFBYyxFQUFFLEtBQXFCLEVBQUUsT0FBK0I7UUFDaEYsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7UUFDbEQsSUFBSSxDQUFDLGNBQWMsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25ELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7K0dBL21CVSxlQUFlO21IQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwsIGNvbXB1dGVkLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBmaXJzdFZhbHVlRnJvbSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBBdGVFZGl0b3JJMThuIH0gZnJvbSBcIi4vYXRlLWVkaXRvci1pMThuLnNlcnZpY2VcIjtcbmltcG9ydCB7IGF0ZVJlc29sdmVJbWFnZVNyYyB9IGZyb20gXCIuLi91dGlscy9hdGUtaW1hZ2Utc3JjLXJlc29sdmVyLnV0aWxzXCI7XG5pbXBvcnQge1xuICBBdGVSZXNpemVPcHRpb25zLFxuICBBdGVJbWFnZVVwbG9hZE9wdGlvbnMsXG4gIEF0ZUltYWdlVXBsb2FkSGFuZGxlcixcbiAgQXRlSW1hZ2VTcmNSZXNvbHZlcixcbiAgQXRlSW1hZ2VVcGxvYWRSZXN1bHQsXG4gIEF0ZUltYWdlRGF0YSxcbiAgQXRlSW1hZ2VSZWplY3Rpb24sXG4gIEF0ZUltYWdlU291cmNlLFxuICBBdGVJbWFnZVZhbGlkYXRpb25FcnJvcixcbiAgQXRlSW1hZ2VWYWxpZGF0aW9uUmVhc29uLFxufSBmcm9tIFwiLi4vbW9kZWxzL2F0ZS1pbWFnZS5tb2RlbFwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXRlSW1hZ2VTZXJ2aWNlIHtcbiAgb25JbWFnZVVwbG9hZGVkQ2FsbGJhY2s/OiAocmVzdWx0OiBBdGVJbWFnZVVwbG9hZFJlc3VsdCkgPT4gdm9pZDtcbiAgb25JbWFnZVJlamVjdGVkQ2FsbGJhY2s/OiAocmVqZWN0aW9uOiBBdGVJbWFnZVJlamVjdGlvbikgPT4gdm9pZDtcblxuICAvKiogU2lnbmFscyBmb3IgaW1hZ2Ugc3RhdGUgKi9cbiAgc2VsZWN0ZWRJbWFnZSA9IHNpZ25hbDxBdGVJbWFnZURhdGEgfCBudWxsPihudWxsKTtcbiAgaXNJbWFnZVNlbGVjdGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZEltYWdlKCkgIT09IG51bGwpO1xuXG4gIC8qKiBSZXNpemluZyBzdGF0ZSAqL1xuICBpc1Jlc2l6aW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoQXRlRWRpdG9ySTE4bik7XG4gIHByaXZhdGUgcmVhZG9ubHkgdCA9IHRoaXMuaTE4bi5pbWFnZVVwbG9hZDtcblxuICAvKiogVXBsb2FkIHN0YXRlIHNpZ25hbHMgKi9cbiAgaXNVcGxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICB1cGxvYWRQcm9ncmVzcyA9IHNpZ25hbCgwKTtcbiAgdXBsb2FkTWVzc2FnZSA9IHNpZ25hbChcIlwiKTtcblxuICAvKipcbiAgICogQ3VzdG9tIHVwbG9hZCBoYW5kbGVyLlxuICAgKiBJZiBzZXQsIHRoaXMgaGFuZGxlciByZXBsYWNlcyB0aGUgZGVmYXVsdCBiYXNlNjQgY29udmVyc2lvbi5cbiAgICovXG4gIHVwbG9hZEhhbmRsZXI6IEF0ZUltYWdlVXBsb2FkSGFuZGxlciB8IG51bGwgPSBudWxsO1xuXG4gIHNyY1Jlc29sdmVyOiBBdGVJbWFnZVNyY1Jlc29sdmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBjdXJyZW50RWRpdG9yOiBFZGl0b3IgfCBudWxsID0gbnVsbDtcblxuICAvKiogU2VsZWN0IGFuZCB0cmFjayBhbiBpbWFnZSBmcm9tIHRoZSBlZGl0b3IgKi9cbiAgc2VsZWN0SW1hZ2UoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICBpZiAoZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIikpIHtcbiAgICAgIGNvbnN0IGF0dHJzID0gZWRpdG9yLmdldEF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5zZXQoe1xuICAgICAgICBzcmM6IGF0dHJzW1wic3JjXCJdLFxuICAgICAgICBhbHQ6IGF0dHJzW1wiYWx0XCJdLFxuICAgICAgICB0aXRsZTogYXR0cnNbXCJ0aXRsZVwiXSxcbiAgICAgICAgd2lkdGg6IGF0dHJzW1wid2lkdGhcIl0sXG4gICAgICAgIGhlaWdodDogYXR0cnNbXCJoZWlnaHRcIl0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLnNldChudWxsKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2Uuc2V0KG51bGwpO1xuICB9XG5cbiAgLyoqIEluc2VydCBhIG5ldyBpbWFnZSBhbmQgZW5zdXJlIGl0J3Mgc2VsZWN0ZWQgKi9cbiAgaW5zZXJ0SW1hZ2UoZWRpdG9yOiBFZGl0b3IsIGltYWdlRGF0YTogQXRlSW1hZ2VEYXRhKTogdm9pZCB7XG4gICAgZWRpdG9yXG4gICAgICAuY2hhaW4oKVxuICAgICAgLmZvY3VzKClcbiAgICAgIC5zZXRSZXNpemFibGVJbWFnZShpbWFnZURhdGEpXG4gICAgICAuY29tbWFuZCgoeyB0ciwgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAvLyBTZWxlY3Rpb24gaXMgdXN1YWxseSBhZnRlciB0aGUgbm9kZS4gTm9kZSBpcyBhdCB0ci5zZWxlY3Rpb24uZnJvbSAtIDEuXG4gICAgICAgIGNvbnN0IHsgZnJvbSB9ID0gdHIuc2VsZWN0aW9uO1xuICAgICAgICAvLyBUcnkgdG8gc2VsZWN0IG5vZGUgYXQgY3VycmVudCBwb3MgKGlmIGl0IHdhcyBhbHJlYWR5IHNlbGVjdGVkKSBvciBwcmV2aW91cyBwb3NcbiAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnNldE5vZGVTZWxlY3Rpb24oZnJvbSkgfHwgY29tbWFuZHMuc2V0Tm9kZVNlbGVjdGlvbihmcm9tIC0gMSkgfHwgdHJ1ZTtcbiAgICAgIH0pXG4gICAgICAucnVuKCk7XG4gIH1cblxuICAvKiogVXBkYXRlIGF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgaW1hZ2UgKi9cbiAgdXBkYXRlSW1hZ2VBdHRyaWJ1dGVzKGVkaXRvcjogRWRpdG9yLCBhdHRyaWJ1dGVzOiBQYXJ0aWFsPEF0ZUltYWdlRGF0YT4pOiB2b2lkIHtcbiAgICBpZiAoZWRpdG9yLmlzQWN0aXZlKFwicmVzaXphYmxlSW1hZ2VcIikpIHtcbiAgICAgIGNvbnN0IHBvcyA9IGVkaXRvci5zdGF0ZS5zZWxlY3Rpb24uZnJvbTtcbiAgICAgIGVkaXRvclxuICAgICAgICAuY2hhaW4oKVxuICAgICAgICAuZm9jdXMoKVxuICAgICAgICAudXBkYXRlQXR0cmlidXRlcyhcInJlc2l6YWJsZUltYWdlXCIsIGF0dHJpYnV0ZXMpXG4gICAgICAgIC5zZXROb2RlU2VsZWN0aW9uKHBvcylcbiAgICAgICAgLnJ1bigpO1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEltYWdlKGF0dHJpYnV0ZXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXNpemUgaW1hZ2Ugd2l0aCBvcHRpb25hbCBhc3BlY3QgcmF0aW8gbWFpbnRlbmFuY2UgKi9cbiAgcmVzaXplSW1hZ2UoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnM6IEF0ZVJlc2l6ZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIWVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudEF0dHJzID0gZWRpdG9yLmdldEF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiKTtcbiAgICBsZXQgbmV3V2lkdGggPSBvcHRpb25zLndpZHRoO1xuICAgIGxldCBuZXdIZWlnaHQgPSBvcHRpb25zLmhlaWdodDtcblxuICAgIC8vIE1haW50YWluIGFzcGVjdCByYXRpbyBpZiByZXF1ZXN0ZWRcbiAgICBpZiAob3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvICE9PSBmYWxzZSAmJiBjdXJyZW50QXR0cnNbXCJ3aWR0aFwiXSAmJiBjdXJyZW50QXR0cnNbXCJoZWlnaHRcIl0pIHtcbiAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gY3VycmVudEF0dHJzW1wid2lkdGhcIl0gLyBjdXJyZW50QXR0cnNbXCJoZWlnaHRcIl07XG5cbiAgICAgIGlmIChuZXdXaWR0aCAmJiAhbmV3SGVpZ2h0KSB7XG4gICAgICAgIG5ld0hlaWdodCA9IE1hdGgucm91bmQobmV3V2lkdGggLyBhc3BlY3RSYXRpbyk7XG4gICAgICB9IGVsc2UgaWYgKG5ld0hlaWdodCAmJiAhbmV3V2lkdGgpIHtcbiAgICAgICAgbmV3V2lkdGggPSBNYXRoLnJvdW5kKG5ld0hlaWdodCAqIGFzcGVjdFJhdGlvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSBtaW5pbXVtIGxpbWl0c1xuICAgIGlmIChuZXdXaWR0aCkge1xuICAgICAgbmV3V2lkdGggPSBNYXRoLm1heCg1MCwgbmV3V2lkdGgpO1xuICAgIH1cbiAgICBpZiAobmV3SGVpZ2h0KSB7XG4gICAgICBuZXdIZWlnaHQgPSBNYXRoLm1heCg1MCwgbmV3SGVpZ2h0KTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUltYWdlQXR0cmlidXRlcyhlZGl0b3IsIHtcbiAgICAgIHdpZHRoOiBuZXdXaWR0aCxcbiAgICAgIGhlaWdodDogbmV3SGVpZ2h0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFByZWRldGVybWluZWQgcmVzaXplIGhlbHBlcnMgdXNlZCBieSBVSSAqL1xuICByZXNpemVJbWFnZVRvU21hbGwoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZUltYWdlKGVkaXRvciwgeyB3aWR0aDogMzAwLCBoZWlnaHQ6IDIwMCwgbWFpbnRhaW5Bc3BlY3RSYXRpbzogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlc2l6ZUltYWdlVG9NZWRpdW0oZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZUltYWdlKGVkaXRvciwgeyB3aWR0aDogNTAwLCBoZWlnaHQ6IDM1MCwgbWFpbnRhaW5Bc3BlY3RSYXRpbzogdHJ1ZSB9KTtcbiAgfVxuXG4gIHJlc2l6ZUltYWdlVG9MYXJnZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIHRoaXMucmVzaXplSW1hZ2UoZWRpdG9yLCB7IHdpZHRoOiA4MDAsIGhlaWdodDogNjAwLCBtYWludGFpbkFzcGVjdFJhdGlvOiB0cnVlIH0pO1xuICB9XG5cbiAgcmVzaXplSW1hZ2VUb09yaWdpbmFsKGVkaXRvcjogRWRpdG9yKTogdm9pZCB7XG4gICAgaWYgKCFlZGl0b3IuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgdGhpcy5yZXNpemVJbWFnZShlZGl0b3IsIHsgd2lkdGg6IGltZy5uYXR1cmFsV2lkdGgsIGhlaWdodDogaW1nLm5hdHVyYWxIZWlnaHQgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzdG9yZWRTcmMgPSBlZGl0b3IuZ2V0QXR0cmlidXRlcyhcInJlc2l6YWJsZUltYWdlXCIpW1wic3JjXCJdO1xuICAgIGF0ZVJlc29sdmVJbWFnZVNyYyh0aGlzLnNyY1Jlc29sdmVyLCBzdG9yZWRTcmMpLnRoZW4oc3JjID0+IHtcbiAgICAgIGltZy5zcmMgPSBzcmM7XG4gICAgfSk7XG4gIH1cblxuICAvKiogR2V0IGN1cnJlbnQgaW1hZ2UgZGltZW5zaW9ucyAqL1xuICBnZXRJbWFnZURpbWVuc2lvbnMoZWRpdG9yOiBFZGl0b3IpOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICBpZiAoIWVkaXRvci5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgYXR0cnMgPSBlZGl0b3IuZ2V0QXR0cmlidXRlcyhcInJlc2l6YWJsZUltYWdlXCIpO1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogYXR0cnNbXCJ3aWR0aFwiXSB8fCAwLFxuICAgICAgaGVpZ2h0OiBhdHRyc1tcImhlaWdodFwiXSB8fCAwLFxuICAgIH07XG4gIH1cblxuICAvKiogUmVtb3ZlIHRoZSBzZWxlY3RlZCBpbWFnZSAqL1xuICBkZWxldGVJbWFnZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGlmIChlZGl0b3IuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKSkge1xuICAgICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5kZWxldGVTZWxlY3Rpb24oKS5ydW4oKTtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKiogRG93bmxvYWQgdGhlIGN1cnJlbnQgaW1hZ2UgKi9cbiAgZG93bmxvYWRJbWFnZShlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIGNvbnN0IGF0dHJzID0gZWRpdG9yLmdldEF0dHJpYnV0ZXMoXCJyZXNpemFibGVJbWFnZVwiKTtcbiAgICBpZiAoIWF0dHJzIHx8ICFhdHRyc1tcInNyY1wiXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVOYW1lID0gYXR0cnNbXCJhbHRcIl0gfHwgXCJpbWFnZVwiO1xuXG4gICAgYXRlUmVzb2x2ZUltYWdlU3JjKHRoaXMuc3JjUmVzb2x2ZXIsIGF0dHJzW1wic3JjXCJdKS50aGVuKHNyYyA9PlxuICAgICAgdGhpcy5kb3dubG9hZFJlc29sdmVkSW1hZ2Uoc3JjLCBmaWxlTmFtZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkb3dubG9hZFJlc29sdmVkSW1hZ2Uoc3JjOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBEZXRlY3QgaWYgaXQncyBiYXNlNjQgb3IgcmVtb3RlIFVSTFxuICAgIGlmIChcbiAgICAgIHNyYy5zdGFydHNXaXRoKFwiZGF0YTpcIikgfHxcbiAgICAgIHNyYy5zdGFydHNXaXRoKFwiYmxvYjpcIikgfHxcbiAgICAgICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHNyYy5zdGFydHNXaXRoKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pKVxuICAgICkge1xuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgbGluay5ocmVmID0gc3JjO1xuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciByZW1vdGUgVVJMcywgd2UgdHJ5IHRvIGZldGNoIGl0IHRvIGJ5cGFzcyBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zIG9uICdkb3dubG9hZCcgYXR0cmlidXRlXG4gICAgICBmZXRjaChzcmMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmJsb2IoKSlcbiAgICAgICAgLnRoZW4oYmxvYiA9PiB7XG4gICAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAgICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZG93bmxvYWRpbmcgaW1hZ2U6XCIsIGVycik7XG4gICAgICAgICAgLy8gRmFsbGJhY2sgdG8gb3BlbmluZyBpbiBuZXcgdGFiXG4gICAgICAgICAgd2luZG93Lm9wZW4oc3JjLCBcIl9ibGFua1wiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZEltYWdlKGF0dHJpYnV0ZXM6IFBhcnRpYWw8QXRlSW1hZ2VEYXRhPik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnNlbGVjdGVkSW1hZ2UoKTtcbiAgICBpZiAoY3VycmVudCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLnNldCh7IC4uLmN1cnJlbnQsIC4uLmF0dHJpYnV0ZXMgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFZhbGlkYXRlIGZpbGUgdHlwZSBhbmQgc2l6ZSAqL1xuICB2YWxpZGF0ZUltYWdlKFxuICAgIGZpbGU6IEZpbGUsXG4gICAgb3B0aW9ucz86IHsgbWF4U2l6ZT86IG51bWJlcjsgYWxsb3dlZFR5cGVzPzogc3RyaW5nW10gfVxuICApOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZzsgcmVhc29uPzogQXRlSW1hZ2VWYWxpZGF0aW9uUmVhc29uIH0ge1xuICAgIGNvbnN0IG1heFNpemUgPSBvcHRpb25zPy5tYXhTaXplIHx8IDEwICogMTAyNCAqIDEwMjQ7XG4gICAgY29uc3QgYWxsb3dlZFR5cGVzID0gb3B0aW9ucz8uYWxsb3dlZFR5cGVzIHx8IFtdO1xuXG4gICAgaWYgKGFsbG93ZWRUeXBlcy5sZW5ndGggPiAwICYmICFhbGxvd2VkVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSkge1xuICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogdGhpcy50KCkuaW52YWxpZEZpbGVUeXBlLCByZWFzb246IFwiaW52YWxpZC10eXBlXCIgfTtcbiAgICB9XG5cbiAgICBpZiAoZmlsZS5zaXplID4gbWF4U2l6ZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICBlcnJvcjogYCR7dGhpcy50KCkuaW1hZ2VUb29MYXJnZX0gKG1heCAke01hdGgucm91bmQobWF4U2l6ZSAvIDEwMjQgLyAxMDI0KX1NQilgLFxuICAgICAgICByZWFzb246IFwidG9vLWxhcmdlXCIsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9O1xuICB9XG5cbiAgLyoqIENvbXByZXNzIGFuZCBwcm9jZXNzIGltYWdlIG9uIGNsaWVudCBzaWRlICovXG4gIGFzeW5jIGNvbXByZXNzSW1hZ2UoXG4gICAgZmlsZTogRmlsZSxcbiAgICBxdWFsaXR5ID0gMC44LFxuICAgIG1heFdpZHRoID0gMTkyMCxcbiAgICBtYXhIZWlnaHQgPSAxMjAwXG4gICk6IFByb21pc2U8QXRlSW1hZ2VVcGxvYWRSZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcblxuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNVcGxvYWRpbmcoKSkge1xuICAgICAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KDQwKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZE1lc3NhZ2Uuc2V0KHRoaXMudCgpLnJlc2l6aW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB7IHdpZHRoLCBoZWlnaHQgfSA9IGltZztcbiAgICAgICAgaWYgKHdpZHRoID4gbWF4V2lkdGggfHwgaGVpZ2h0ID4gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgY29uc3QgcmF0aW8gPSBNYXRoLm1pbihtYXhXaWR0aCAvIHdpZHRoLCBtYXhIZWlnaHQgLyBoZWlnaHQpO1xuICAgICAgICAgIHdpZHRoICo9IHJhdGlvO1xuICAgICAgICAgIGhlaWdodCAqPSByYXRpbztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBjdHg/LmRyYXdJbWFnZShpbWcsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzVXBsb2FkaW5nKCkpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldCg2MCk7XG4gICAgICAgICAgdGhpcy51cGxvYWRNZXNzYWdlLnNldCh0aGlzLnQoKS5jb21wcmVzc2luZyk7XG4gICAgICAgIH1cblxuICAgICAgICBjYW52YXMudG9CbG9iKFxuICAgICAgICAgIGJsb2IgPT4ge1xuICAgICAgICAgICAgaWYgKGJsb2IpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IGUudGFyZ2V0Py5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgc3JjOiBiYXNlNjQsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICBzaXplOiBibG9iLnNpemUsXG4gICAgICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogTWF0aC5yb3VuZCh3aWR0aCksXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IE1hdGgucm91bmQoaGVpZ2h0KSxcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU2l6ZTogZmlsZS5zaXplLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy50KCkuY29tcHJlc3Npb25FcnJvcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmlsZS50eXBlLFxuICAgICAgICAgIHF1YWxpdHlcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIGltZy5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcih0aGlzLnQoKS5sb2FkRXJyb3IpKTtcbiAgICAgIGltZy5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIENvcmUgdXBsb2FkIGxvZ2ljIHdpdGggcHJvZ3Jlc3MgdHJhY2tpbmcgKi9cbiAgcHJpdmF0ZSBhc3luYyB1cGxvYWRJbWFnZVdpdGhQcm9ncmVzcyhcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICBmaWxlOiBGaWxlLFxuICAgIGluc2VydGlvblN0cmF0ZWd5OiAoZWRpdG9yOiBFZGl0b3IsIHJlc3VsdDogQXRlSW1hZ2VVcGxvYWRSZXN1bHQpID0+IHZvaWQsXG4gICAgYWN0aW9uTWVzc2FnZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyB8IHVuZGVmaW5lZCxcbiAgICBzb3VyY2U6IEF0ZUltYWdlU291cmNlXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmN1cnJlbnRFZGl0b3IgPSBlZGl0b3I7XG4gICAgICB0aGlzLmlzVXBsb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KDEwKTtcbiAgICAgIHRoaXMudXBsb2FkTWVzc2FnZS5zZXQodGhpcy50KCkudmFsaWRhdGluZyk7XG4gICAgICB0aGlzLmZvcmNlRWRpdG9yVXBkYXRlKCk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHJvY2Vzc0ltYWdlKGZpbGUsIG9wdGlvbnMsIChwcm9ncmVzcywgbWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAocHJvZ3Jlc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KHByb2dyZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVzc2FnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWRNZXNzYWdlLnNldChtZXNzYWdlKTtcbiAgICAgICAgICB0aGlzLmZvcmNlRWRpdG9yVXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnVwbG9hZFByb2dyZXNzLnNldCg5MCk7XG4gICAgICB0aGlzLnVwbG9hZE1lc3NhZ2Uuc2V0KGFjdGlvbk1lc3NhZ2UpO1xuICAgICAgdGhpcy5mb3JjZUVkaXRvclVwZGF0ZSgpO1xuXG4gICAgICAvLyBGaW5hbCBpbnNlcnRpb25cbiAgICAgIGluc2VydGlvblN0cmF0ZWd5KGVkaXRvciwgcmVzdWx0KTtcblxuICAgICAgaWYgKHRoaXMub25JbWFnZVVwbG9hZGVkQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5vbkltYWdlVXBsb2FkZWRDYWxsYmFjayhyZXN1bHQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlc2V0VXBsb2FkU3RhdGUoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5yZXNldFVwbG9hZFN0YXRlKCk7XG4gICAgICBjb25zb2xlLmVycm9yKHRoaXMudCgpLnVwbG9hZEVycm9yLCBlcnJvcik7XG4gICAgICB0aGlzLm9uSW1hZ2VSZWplY3RlZENhbGxiYWNrPy4oe1xuICAgICAgICByZWFzb246IGVycm9yIGluc3RhbmNlb2YgQXRlSW1hZ2VWYWxpZGF0aW9uRXJyb3IgPyBlcnJvci5yZWFzb24gOiBcInVwbG9hZC1mYWlsZWRcIixcbiAgICAgICAgZmlsZSxcbiAgICAgICAgc291cmNlLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKiogVmFsaWRhdGUsIGNvbXByZXNzIGFuZCAod2hlbiBjb25maWd1cmVkKSBzZW5kIGFuIGltYWdlIHRvIHRoZSB1cGxvYWQgaGFuZGxlciAqL1xuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NJbWFnZShcbiAgICBmaWxlOiBGaWxlLFxuICAgIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMsXG4gICAgb25TdGVwPzogKHByb2dyZXNzPzogbnVtYmVyLCBtZXNzYWdlPzogc3RyaW5nKSA9PiB2b2lkXG4gICk6IFByb21pc2U8QXRlSW1hZ2VVcGxvYWRSZXN1bHQ+IHtcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy52YWxpZGF0ZUltYWdlKGZpbGUsIHtcbiAgICAgIG1heFNpemU6IG9wdGlvbnM/Lm1heFNpemUsXG4gICAgICBhbGxvd2VkVHlwZXM6IG9wdGlvbnM/LmFsbG93ZWRUeXBlcyxcbiAgICB9KTtcbiAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBBdGVJbWFnZVZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgdmFsaWRhdGlvbi5yZWFzb24gPz8gXCJpbnZhbGlkLXR5cGVcIixcbiAgICAgICAgdmFsaWRhdGlvbi5lcnJvciA/PyBcIlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIG9uU3RlcD8uKDMwLCB0aGlzLnQoKS5jb21wcmVzc2luZyk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbXByZXNzSW1hZ2UoXG4gICAgICBmaWxlLFxuICAgICAgb3B0aW9ucz8ucXVhbGl0eSB8fCAwLjgsXG4gICAgICBvcHRpb25zPy5tYXhXaWR0aCB8fCAxOTIwLFxuICAgICAgb3B0aW9ucz8ubWF4SGVpZ2h0IHx8IDEyMDBcbiAgICApO1xuXG4gICAgb25TdGVwPy4oNzApO1xuXG4gICAgLy8gSGFuZGxlIGN1c3RvbSB1cGxvYWQgaWYgaGFuZGxlciBpcyBwcm92aWRlZFxuICAgIGlmICh0aGlzLnVwbG9hZEhhbmRsZXIpIHtcbiAgICAgIG9uU3RlcD8uKHVuZGVmaW5lZCwgdGhpcy50KCkudXBsb2FkaW5nVG9TZXJ2ZXIpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBoYW5kbGVyUmVzcG9uc2UgPSB0aGlzLnVwbG9hZEhhbmRsZXIoe1xuICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgd2lkdGg6IHJlc3VsdC53aWR0aCB8fCAwLFxuICAgICAgICAgIGhlaWdodDogcmVzdWx0LmhlaWdodCB8fCAwLFxuICAgICAgICAgIHR5cGU6IHJlc3VsdC50eXBlLFxuICAgICAgICAgIGJhc2U2NDogcmVzdWx0LnNyYyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaGFuZGxlclJlc3VsdCA9IGlzT2JzZXJ2YWJsZShoYW5kbGVyUmVzcG9uc2UpXG4gICAgICAgICAgPyBhd2FpdCBmaXJzdFZhbHVlRnJvbShoYW5kbGVyUmVzcG9uc2UpXG4gICAgICAgICAgOiBhd2FpdCBoYW5kbGVyUmVzcG9uc2U7XG5cbiAgICAgICAgcmVzdWx0LnNyYyA9IGhhbmRsZXJSZXN1bHQuc3JjO1xuICAgICAgICBpZiAoaGFuZGxlclJlc3VsdC5hbHQpIHtcbiAgICAgICAgICByZXN1bHQubmFtZSA9IGhhbmRsZXJSZXN1bHQuYWx0O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChoYW5kbGVyRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcih0aGlzLnQoKS51cGxvYWRFcnJvciwgaGFuZGxlckVycm9yKTtcbiAgICAgICAgdGhyb3cgaGFuZGxlckVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUnVuIGFuIGltYWdlIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgZG9jdW1lbnQgKGUuZy4gYmFzZTY0IGZyb20gcGFzdGVkIEhUTUwpXG4gICAqIHRocm91Z2ggdmFsaWRhdGlvbiwgY29tcHJlc3Npb24gYW5kIHRoZSB1cGxvYWQgaGFuZGxlciwgYW5kIHJlc29sdmUgdG8gaXRzIG5ldyBgc3JjYC5cbiAgICovXG4gIGFzeW5jIHJlaG9zdEltYWdlKGZpbGU6IEZpbGUsIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnByb2Nlc3NJbWFnZShmaWxlLCBvcHRpb25zKTtcbiAgICAgIGlmICh0aGlzLm9uSW1hZ2VVcGxvYWRlZENhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMub25JbWFnZVVwbG9hZGVkQ2FsbGJhY2socmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQuc3JjO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHRoaXMudCgpLnVwbG9hZEVycm9yLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0VXBsb2FkU3RhdGUoKSB7XG4gICAgdGhpcy5pc1VwbG9hZGluZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3Muc2V0KDApO1xuICAgIHRoaXMudXBsb2FkTWVzc2FnZS5zZXQoXCJcIik7XG4gICAgdGhpcy5mb3JjZUVkaXRvclVwZGF0ZSgpO1xuICAgIHRoaXMuY3VycmVudEVkaXRvciA9IG51bGw7XG4gIH1cblxuICAvKiogTWFpbiBlbnRyeSBwb2ludCBmb3IgZmlsZSB1cGxvYWQgYW5kIGluc2VydGlvbiAqL1xuICBhc3luYyB1cGxvYWRBbmRJbnNlcnRJbWFnZShcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICBmaWxlOiBGaWxlLFxuICAgIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMsXG4gICAgc291cmNlOiBBdGVJbWFnZVNvdXJjZSA9IFwiYXBpXCJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMudXBsb2FkSW1hZ2VXaXRoUHJvZ3Jlc3MoXG4gICAgICBlZGl0b3IsXG4gICAgICBmaWxlLFxuICAgICAgKGVkLCByZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5pbnNlcnRJbWFnZShlZCwge1xuICAgICAgICAgIHNyYzogcmVzdWx0LnNyYyxcbiAgICAgICAgICBhbHQ6IHJlc3VsdC5uYW1lLFxuICAgICAgICAgIHRpdGxlOiBgJHtyZXN1bHQubmFtZX0gKCR7cmVzdWx0LndpZHRofcOXJHtyZXN1bHQuaGVpZ2h0fSlgLFxuICAgICAgICAgIHdpZHRoOiByZXN1bHQud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiByZXN1bHQuaGVpZ2h0LFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB0aGlzLnQoKS5pbnNlcnRpbmdJbWFnZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzb3VyY2VcbiAgICApO1xuICB9XG5cbiAgLyoqIFRyaWdnZXIgYW4gZWRpdG9yIHRyYW5zYWN0aW9uIHRvIGZvcmNlIGRlY29yYXRpb24gdXBkYXRlICovXG4gIHByaXZhdGUgZm9yY2VFZGl0b3JVcGRhdGUoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudEVkaXRvcikge1xuICAgICAgY29uc3QgeyB0ciB9ID0gdGhpcy5jdXJyZW50RWRpdG9yLnN0YXRlO1xuICAgICAgdGhpcy5jdXJyZW50RWRpdG9yLnZpZXcuZGlzcGF0Y2godHIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBHZW5lcmljIGhlbHBlciB0byBvcGVuIGZpbGUgcGlja2VyIGFuZCBwcm9jZXNzIHNlbGVjdGlvbiAqL1xuICBwcml2YXRlIGFzeW5jIHNlbGVjdEZpbGVBbmRQcm9jZXNzKFxuICAgIGVkaXRvcjogRWRpdG9yLFxuICAgIHVwbG9hZE1ldGhvZDogKFxuICAgICAgZWRpdG9yOiBFZGl0b3IsXG4gICAgICBmaWxlOiBGaWxlLFxuICAgICAgb3B0aW9uczogQXRlSW1hZ2VVcGxvYWRPcHRpb25zIHwgdW5kZWZpbmVkLFxuICAgICAgc291cmNlOiBBdGVJbWFnZVNvdXJjZVxuICAgICkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgIGlucHV0LnR5cGUgPSBcImZpbGVcIjtcblxuICAgICAgLy8gVXNlIGFsbG93ZWRUeXBlcyBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gaW1hZ2UvKlxuICAgICAgaWYgKG9wdGlvbnM/LmFsbG93ZWRUeXBlcyAmJiBvcHRpb25zLmFsbG93ZWRUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlucHV0LmFjY2VwdCA9IG9wdGlvbnMuYWxsb3dlZFR5cGVzLmpvaW4oXCIsXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXQuYWNjZXB0ID0gXCJpbWFnZS8qXCI7XG4gICAgICB9XG5cbiAgICAgIGlucHV0LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblxuICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBhc3luYyBlID0+IHtcbiAgICAgICAgY29uc3QgZmlsZSA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlcz8uWzBdO1xuICAgICAgICBpZiAoZmlsZSAmJiBmaWxlLnR5cGUuc3RhcnRzV2l0aChcImltYWdlL1wiKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB1cGxvYWRNZXRob2QoZWRpdG9yLCBmaWxlLCBvcHRpb25zLCBcInBpY2tlclwiKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcih0aGlzLnQoKS5ub0ZpbGVTZWxlY3RlZCkpO1xuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW5wdXQpO1xuICAgICAgfSk7XG5cbiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlucHV0KTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcih0aGlzLnQoKS5zZWxlY3Rpb25DYW5jZWxsZWQpKTtcbiAgICAgIH0pO1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlucHV0KTtcbiAgICAgIGlucHV0LmNsaWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogU2VsZWN0IGZpbGUgYW5kIHVwbG9hZCBhcyBuZXcgaW1hZ2UgKi9cbiAgYXN5bmMgc2VsZWN0QW5kVXBsb2FkSW1hZ2UoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RGaWxlQW5kUHJvY2VzcyhlZGl0b3IsIHRoaXMudXBsb2FkQW5kSW5zZXJ0SW1hZ2UuYmluZCh0aGlzKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogU2VsZWN0IGZpbGUgYW5kIHJlcGxhY2UgY3VycmVudGx5IHNlbGVjdGVkIGltYWdlICovXG4gIGFzeW5jIHNlbGVjdEFuZFJlcGxhY2VJbWFnZShlZGl0b3I6IEVkaXRvciwgb3B0aW9ucz86IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIE5vIG5lZWQgZm9yIGNvbXBsaWNhdGVkIGJhY2t1cC9yZXN0b3JlIG5vdyB0aGF0IHdlIGRvbid0IGRlbGV0ZSBwcmVtYXR1cmVseS5cbiAgICAvLyBUaGUgdXBsb2FkQW5kUmVwbGFjZUltYWdlIHdpbGwgaGFuZGxlIHRoZSBhdG9taWMgcmVwbGFjZW1lbnQuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0RmlsZUFuZFByb2Nlc3MoZWRpdG9yLCB0aGlzLnVwbG9hZEFuZFJlcGxhY2VJbWFnZS5iaW5kKHRoaXMpLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKiBJbnRlcm5hbCBoZWxwZXIgdXNlZCBieSByZXBsYWNlbWVudCBsb2dpYyAqL1xuICBhc3luYyB1cGxvYWRBbmRSZXBsYWNlSW1hZ2UoXG4gICAgZWRpdG9yOiBFZGl0b3IsXG4gICAgZmlsZTogRmlsZSxcbiAgICBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zLFxuICAgIHNvdXJjZTogQXRlSW1hZ2VTb3VyY2UgPSBcImFwaVwiXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFN0b3JlIGN1cnJlbnQgcG9zaXRpb24gdG8gZW5zdXJlIHdlIGNhbiByZS1zZWxlY3QgdGhlIGltYWdlIGV2ZW4gaWYgc2VsZWN0aW9uIGJsdXJzIGR1cmluZyB1cGxvYWRcbiAgICBjb25zdCB3YXNBY3RpdmUgPSBlZGl0b3IuaXNBY3RpdmUoXCJyZXNpemFibGVJbWFnZVwiKTtcblxuICAgIGF3YWl0IHRoaXMudXBsb2FkSW1hZ2VXaXRoUHJvZ3Jlc3MoXG4gICAgICBlZGl0b3IsXG4gICAgICBmaWxlLFxuICAgICAgKGVkLCByZXN1bHQpID0+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0ge1xuICAgICAgICAgIHNyYzogcmVzdWx0LnNyYyxcbiAgICAgICAgICBhbHQ6IHJlc3VsdC5uYW1lLFxuICAgICAgICAgIHRpdGxlOiBgJHtyZXN1bHQubmFtZX0gKCR7cmVzdWx0LndpZHRofcOXJHtyZXN1bHQuaGVpZ2h0fSlgLFxuICAgICAgICAgIHdpZHRoOiByZXN1bHQud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiByZXN1bHQuaGVpZ2h0LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIElmIHRoZSBpbWFnZSB3YXMgYWN0aXZlIG9yIGlzIHN0aWxsIGFjdGl2ZSwgdXBkYXRlIGl0IGF0b21pY2FsbHlcbiAgICAgICAgaWYgKHdhc0FjdGl2ZSB8fCBlZC5pc0FjdGl2ZShcInJlc2l6YWJsZUltYWdlXCIpKSB7XG4gICAgICAgICAgZWQuY2hhaW4oKVxuICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgIC51cGRhdGVBdHRyaWJ1dGVzKFwicmVzaXphYmxlSW1hZ2VcIiwgaW1hZ2VEYXRhKVxuICAgICAgICAgICAgLmNvbW1hbmQoKHsgdHIsIGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBmcm9tIH0gPSB0ci5zZWxlY3Rpb247XG4gICAgICAgICAgICAgIC8vIFJlLXNlbGVjdCB0aGUgbm9kZSBhdCBpdHMgbWFwcGVkIHBvc2l0aW9uIG9yIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgICAgICAgIHJldHVybiBjb21tYW5kcy5zZXROb2RlU2VsZWN0aW9uKGZyb20pIHx8IGNvbW1hbmRzLnNldE5vZGVTZWxlY3Rpb24oZnJvbSAtIDEpIHx8IHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJ1bigpO1xuICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRJbWFnZShpbWFnZURhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSByZXBsYWNlIHdoYXRldmVyIGlzIHNlbGVjdGVkIChvciBpbnNlcnQgYXQgY3Vyc29yKVxuICAgICAgICAgIHRoaXMuaW5zZXJ0SW1hZ2UoZWQsIGltYWdlRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZnRlciByZXBsYWNlbWVudCwgZW5zdXJlIHRoZSBpbWFnZSBpcyB0cmFja2VkIGluIG91ciBzaWduYWxzXG4gICAgICAgIHRoaXMuc2VsZWN0SW1hZ2UoZWQpO1xuICAgICAgfSxcbiAgICAgIHRoaXMudCgpLnJlcGxhY2luZ0ltYWdlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNvdXJjZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGltYWdlIGRyb3AgZXZlbnQuXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvc2l0aW9uIGZyb20gY29vcmRpbmF0ZXMgYW5kIHNldHMgdGhlIHNlbGVjdGlvbiBhY2NvcmRpbmdseS5cbiAgICovXG4gIGhhbmRsZURyb3AoZWRpdG9yOiBFZGl0b3IsIGV2ZW50OiBEcmFnRXZlbnQsIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXM7XG4gICAgaWYgKCFmaWxlcyB8fCBmaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlID0gQXJyYXkuZnJvbShmaWxlcykuZmluZChmID0+IGYudHlwZS5zdGFydHNXaXRoKFwiaW1hZ2UvXCIpKTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gVHJ5IHRvIGZpbmQgdGhlIGRyb3AgcG9zaXRpb24gZnJvbSBjb29yZGluYXRlc1xuICAgIGNvbnN0IHBvcyA9IGVkaXRvci52aWV3LnBvc0F0Q29vcmRzKHsgbGVmdDogZXZlbnQuY2xpZW50WCwgdG9wOiBldmVudC5jbGllbnRZIH0pO1xuICAgIGlmIChwb3MpIHtcbiAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRUZXh0U2VsZWN0aW9uKHBvcy5wb3MpO1xuICAgIH1cblxuICAgIHRoaXMudXBsb2FkQW5kSW5zZXJ0SW1hZ2UoZWRpdG9yLCBmaWxlLCBvcHRpb25zLCBcImRyb3BcIikuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgaW1hZ2UgcGFzdGUgZXZlbnQuXG4gICAqL1xuICBoYW5kbGVQYXN0ZShlZGl0b3I6IEVkaXRvciwgZXZlbnQ6IENsaXBib2FyZEV2ZW50LCBvcHRpb25zPzogQXRlSW1hZ2VVcGxvYWRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2xpcGJvYXJkRmlsZXMgPSBldmVudC5jbGlwYm9hcmREYXRhPy5maWxlcztcbiAgICBpZiAoIWNsaXBib2FyZEZpbGVzIHx8IGNsaXBib2FyZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGltYWdlRmlsZSA9IEFycmF5LmZyb20oY2xpcGJvYXJkRmlsZXMpLmZpbmQoZmlsZSA9PiBmaWxlLnR5cGUuc3RhcnRzV2l0aChcImltYWdlL1wiKSk7XG4gICAgaWYgKCFpbWFnZUZpbGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMudXBsb2FkQW5kSW5zZXJ0SW1hZ2UoZWRpdG9yLCBpbWFnZUZpbGUsIG9wdGlvbnMsIFwicGFzdGVcIikuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19
@@ -64,6 +64,8 @@ export const ATE_BUILTIN_UI_DEPENDENCIES = {
64
64
  ateLinkShortcut: "Mod+K link editor shortcut",
65
65
  highlight: "toolbar/bubble menu highlight picker, AteMarksCalculator",
66
66
  resizableImage: "image node view, image bubble menu, image upload/resize service, AteImageCalculator",
67
+ atePaste: "paste settings (`paste` input / config): format filters and `transformHTML`",
68
+ atePasteSourceTracker: "paste source detection (`editor` / `office` / `external`) for the `paste` settings",
67
69
  atePastedImage: "pasted HTML image sanitization and base64 re-hosting",
68
70
  ateUploadProgress: "image upload progress overlay",
69
71
  tableExtension: "toolbar/slash menu table insertion, table/cell bubble menus, AteTableCalculator",
@@ -76,4 +78,4 @@ export const ATE_BUILTIN_UI_DEPENDENCIES = {
76
78
  export function getExtensionName(ext) {
77
79
  return ext?.name;
78
80
  }
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWV4dGVuc2lvbnMudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRpcHRhcC1lZGl0b3Ivc3JjL2xpYi91dGlscy9hdGUtZXh0ZW5zaW9ucy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBc0Q7SUFDM0YsVUFBVSxFQUFFLFlBQVk7SUFDeEIsSUFBSSxFQUFFLE1BQU07SUFDWixVQUFVLEVBQUUsWUFBWTtJQUN4QixJQUFJLEVBQUUsTUFBTTtJQUNaLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLEdBQUcsRUFBRSxVQUFVO0lBQ2YsVUFBVSxFQUFFLFlBQVk7SUFDeEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsY0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxNQUFNLEVBQUUsUUFBUTtJQUNoQixRQUFRLEVBQUUsVUFBVTtJQUNwQixVQUFVLEVBQUUsWUFBWTtJQUN4QixJQUFJLEVBQUUsTUFBTTtJQUNaLFdBQVcsRUFBRSxhQUFhO0lBQzFCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLElBQUksRUFBRSxNQUFNO0lBQ1osU0FBUyxFQUFFLFdBQVc7SUFDdEIsWUFBWSxFQUFFLGNBQWM7Q0FDN0IsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFxQztJQUMzRSxVQUFVLEVBQUUsK0RBQStEO0lBQzNFLElBQUksRUFBRSxzREFBc0Q7SUFDNUQsVUFBVSxFQUFFLGdFQUFnRTtJQUM1RSxJQUFJLEVBQUUsNkRBQTZEO0lBQ25FLFNBQVMsRUFBRSwrREFBK0Q7SUFDMUUsR0FBRyxFQUFFLHVDQUF1QztJQUM1QyxVQUFVLEVBQUUsZ0NBQWdDO0lBQzVDLFNBQVMsRUFBRSwrQ0FBK0M7SUFDMUQsU0FBUyxFQUFFLGlDQUFpQztJQUM1QyxPQUFPLEVBQ0wsNEZBQTRGO0lBQzlGLFFBQVEsRUFBRSxtREFBbUQ7SUFDN0QsY0FBYyxFQUFFLDRDQUE0QztJQUM1RCxNQUFNLEVBQUUsd0RBQXdEO0lBQ2hFLFFBQVEsRUFBRSw0Q0FBNEM7SUFDdEQsVUFBVSxFQUFFLDJDQUEyQztJQUN2RCxJQUFJLEVBQUUscUVBQXFFO0lBQzNFLFdBQVcsRUFBRSxpRUFBaUU7SUFDOUUsU0FBUyxFQUFFLGlEQUFpRDtJQUM1RCxNQUFNLEVBQUUsK0RBQStEO0lBQ3ZFLElBQUksRUFBRSx1QkFBdUI7SUFDN0IsU0FBUyxFQUFFLDJEQUEyRDtJQUN0RSxZQUFZLEVBQUUsZ0RBQWdEO0lBQzlELFNBQVMsRUFBRSxrQ0FBa0M7SUFDN0MsS0FBSyxFQUFFLDJEQUEyRDtJQUNsRSxXQUFXLEVBQUUscUNBQXFDO0lBQ2xELFdBQVcsRUFBRSw2REFBNkQ7SUFDMUUsU0FBUyxFQUFFLDJEQUEyRDtJQUN0RSxTQUFTLEVBQUUscUVBQXFFO0lBQ2hGLG9CQUFvQixFQUFFLDBDQUEwQztJQUNoRSxpQkFBaUIsRUFBRSxrREFBa0Q7SUFDckUsZUFBZSxFQUFFLDRCQUE0QjtJQUM3QyxTQUFTLEVBQUUsMERBQTBEO0lBQ3JFLGNBQWMsRUFDWixxRkFBcUY7SUFDdkYsY0FBYyxFQUFFLHNEQUFzRDtJQUN0RSxpQkFBaUIsRUFBRSwrQkFBK0I7SUFDbEQsY0FBYyxFQUFFLGlGQUFpRjtJQUNqRyxlQUFlLEVBQUUsZ0VBQWdFO0lBQ2pGLFdBQVcsRUFBRSw4REFBOEQ7SUFDM0UsYUFBYSxFQUFFLG1DQUFtQztJQUNsRCxXQUFXLEVBQUUsZ0NBQWdDO0lBQzdDLGNBQWMsRUFBRSx3REFBd0Q7Q0FDekUsQ0FBQztBQUVGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUE0QjtJQUMzRCxPQUFRLEdBQXlCLEVBQUUsSUFBSSxDQUFDO0FBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEV4dGVuc2lvbiwgTWFyaywgTm9kZSB9IGZyb20gXCJAdGlwdGFwL2NvcmVcIjtcbmltcG9ydCB0eXBlIHsgU3RhcnRlcktpdE9wdGlvbnMgfSBmcm9tIFwiQHRpcHRhcC9zdGFydGVyLWtpdFwiO1xuXG4vKipcbiAqIE1hcHMgdGhlIHJ1bnRpbWUgYC5uYW1lYCBvZiBlYWNoIGV4dGVuc2lvbiBidW5kbGVkIGluIGBAdGlwdGFwL3N0YXJ0ZXIta2l0YFxuICogdG8gaXRzIGNvcnJlc3BvbmRpbmcgb3B0aW9uIGtleSBpbiBgU3RhcnRlcktpdE9wdGlvbnNgLlxuICovXG5leHBvcnQgY29uc3QgU1RBUlRFUl9LSVRfTkFNRV9UT19PUFRJT046IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIGtleW9mIFN0YXJ0ZXJLaXRPcHRpb25zPj4gPSB7XG4gIGJsb2NrcXVvdGU6IFwiYmxvY2txdW90ZVwiLFxuICBib2xkOiBcImJvbGRcIixcbiAgYnVsbGV0TGlzdDogXCJidWxsZXRMaXN0XCIsXG4gIGNvZGU6IFwiY29kZVwiLFxuICBjb2RlQmxvY2s6IFwiY29kZUJsb2NrXCIsXG4gIGRvYzogXCJkb2N1bWVudFwiLFxuICBkcm9wQ3Vyc29yOiBcImRyb3BjdXJzb3JcIixcbiAgZ2FwQ3Vyc29yOiBcImdhcGN1cnNvclwiLFxuICBoYXJkQnJlYWs6IFwiaGFyZEJyZWFrXCIsXG4gIGhlYWRpbmc6IFwiaGVhZGluZ1wiLFxuICB1bmRvUmVkbzogXCJ1bmRvUmVkb1wiLFxuICBob3Jpem9udGFsUnVsZTogXCJob3Jpem9udGFsUnVsZVwiLFxuICBpdGFsaWM6IFwiaXRhbGljXCIsXG4gIGxpc3RJdGVtOiBcImxpc3RJdGVtXCIsXG4gIGxpc3RLZXltYXA6IFwibGlzdEtleW1hcFwiLFxuICBsaW5rOiBcImxpbmtcIixcbiAgb3JkZXJlZExpc3Q6IFwib3JkZXJlZExpc3RcIixcbiAgcGFyYWdyYXBoOiBcInBhcmFncmFwaFwiLFxuICBzdHJpa2U6IFwic3RyaWtlXCIsXG4gIHRleHQ6IFwidGV4dFwiLFxuICB1bmRlcmxpbmU6IFwidW5kZXJsaW5lXCIsXG4gIHRyYWlsaW5nTm9kZTogXCJ0cmFpbGluZ05vZGVcIixcbn07XG5cbi8qKlxuICogRGVzY3JpYmVzIHdoaWNoIHBhcnRzIG9mIEFuZ3VsYXIgVGlwdGFwIEVkaXRvcidzIFVJIG9yIHN0YXRlIGNhbGN1bGF0b3JzXG4gKiBkZXBlbmQgb24gYSBnaXZlbiBidWlsdC1pbiBvciBTdGFydGVyS2l0IGV4dGVuc2lvbiBuYW1lLlxuICovXG5leHBvcnQgY29uc3QgQVRFX0JVSUxUSU5fVUlfREVQRU5ERU5DSUVTOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHtcbiAgYmxvY2txdW90ZTogXCJ0b29sYmFyL3NsYXNoIG1lbnUgYmxvY2txdW90ZSBidXR0b25zLCBBdGVTdHJ1Y3R1cmVDYWxjdWxhdG9yXCIsXG4gIGJvbGQ6IFwidG9vbGJhci9idWJibGUgbWVudSBib2xkIGJ1dHRvbnMsIEF0ZU1hcmtzQ2FsY3VsYXRvclwiLFxuICBidWxsZXRMaXN0OiBcInRvb2xiYXIvc2xhc2ggbWVudSBidWxsZXQgbGlzdCBidXR0b25zLCBBdGVTdHJ1Y3R1cmVDYWxjdWxhdG9yXCIsXG4gIGNvZGU6IFwidG9vbGJhci9idWJibGUgbWVudSBpbmxpbmUgY29kZSBidXR0b25zLCBBdGVNYXJrc0NhbGN1bGF0b3JcIixcbiAgY29kZUJsb2NrOiBcInRvb2xiYXIvc2xhc2ggbWVudSBjb2RlIGJsb2NrIGJ1dHRvbnMsIEF0ZVN0cnVjdHVyZUNhbGN1bGF0b3JcIixcbiAgZG9jOiBcInRvcC1sZXZlbCBQcm9zZU1pcnJvciBkb2N1bWVudCBzY2hlbWFcIixcbiAgZHJvcEN1cnNvcjogXCJkcmFnLWFuZC1kcm9wIGN1cnNvciBpbmRpY2F0b3JcIixcbiAgZ2FwQ3Vyc29yOiBcImdhcCBjdXJzb3IgbmF2aWdhdGlvbiBhcm91bmQgbGVhZiBibG9jayBub2Rlc1wiLFxuICBoYXJkQnJlYWs6IFwiU2hpZnQrRW50ZXIgbGluZSBicmVhayBzaG9ydGN1dFwiLFxuICBoZWFkaW5nOlxuICAgIFwidG9vbGJhci9idWJibGUgbWVudS9zbGFzaCBtZW51IGhlYWRpbmcgY29udHJvbHMsIHRhYmxlIG9mIGNvbnRlbnRzLCBBdGVTdHJ1Y3R1cmVDYWxjdWxhdG9yXCIsXG4gIHVuZG9SZWRvOiBcInRvb2xiYXIgdW5kby9yZWRvIGJ1dHRvbnMsIEF0ZVN0cnVjdHVyZUNhbGN1bGF0b3JcIixcbiAgaG9yaXpvbnRhbFJ1bGU6IFwidG9vbGJhci9zbGFzaCBtZW51IGhvcml6b250YWwgcnVsZSBidXR0b25zXCIsXG4gIGl0YWxpYzogXCJ0b29sYmFyL2J1YmJsZSBtZW51IGl0YWxpYyBidXR0b25zLCBBdGVNYXJrc0NhbGN1bGF0b3JcIixcbiAgbGlzdEl0ZW06IFwiYnVsbGV0L29yZGVyZWQgbGlzdCBpdGVtcywgYmxvY2sgc2hvcnRjdXRzXCIsXG4gIGxpc3RLZXltYXA6IFwibGlzdCBiYWNrc3BhY2UvZGVsZXRlIGtleWJvYXJkIG5hdmlnYXRpb25cIixcbiAgbGluazogXCJ0b29sYmFyL2J1YmJsZSBtZW51IGxpbmsgZWRpdG9yLCBNb2QrSyBzaG9ydGN1dCwgQXRlTWFya3NDYWxjdWxhdG9yXCIsXG4gIG9yZGVyZWRMaXN0OiBcInRvb2xiYXIvc2xhc2ggbWVudSBvcmRlcmVkIGxpc3QgYnV0dG9ucywgQXRlU3RydWN0dXJlQ2FsY3VsYXRvclwiLFxuICBwYXJhZ3JhcGg6IFwiZGVmYXVsdCB0ZXh0IGJsb2NrIG5vZGUsIEF0ZVN0cnVjdHVyZUNhbGN1bGF0b3JcIixcbiAgc3RyaWtlOiBcInRvb2xiYXIvYnViYmxlIG1lbnUgc3RyaWtldGhyb3VnaCBidXR0b25zLCBBdGVNYXJrc0NhbGN1bGF0b3JcIixcbiAgdGV4dDogXCJjb3JlIGlubGluZSB0ZXh0IG5vZGVcIixcbiAgdW5kZXJsaW5lOiBcInRvb2xiYXIvYnViYmxlIG1lbnUgdW5kZXJsaW5lIGJ1dHRvbnMsIEF0ZU1hcmtzQ2FsY3VsYXRvclwiLFxuICB0cmFpbGluZ05vZGU6IFwiYXV0b21hdGljIHRyYWlsaW5nIHBhcmFncmFwaCBhZnRlciBibG9jayBub2Rlc1wiLFxuICB0ZXh0U3R5bGU6IFwiY29sb3IgcGlja2VyLCBBdGVNYXJrc0NhbGN1bGF0b3JcIixcbiAgY29sb3I6IFwidG9vbGJhci9idWJibGUgbWVudSB0ZXh0IGNvbG9yIHBpY2tlciwgQXRlTWFya3NDYWxjdWxhdG9yXCIsXG4gIHBsYWNlaG9sZGVyOiBcImVtcHR5IGVkaXRvciBwbGFjZWhvbGRlciBkZWNvcmF0aW9uXCIsXG4gIHN1cGVyc2NyaXB0OiBcInRvb2xiYXIvYnViYmxlIG1lbnUgc3VwZXJzY3JpcHQgYnV0dG9ucywgQXRlTWFya3NDYWxjdWxhdG9yXCIsXG4gIHN1YnNjcmlwdDogXCJ0b29sYmFyL2J1YmJsZSBtZW51IHN1YnNjcmlwdCBidXR0b25zLCBBdGVNYXJrc0NhbGN1bGF0b3JcIixcbiAgdGV4dEFsaWduOiBcInRvb2xiYXIvaW1hZ2UgYnViYmxlIG1lbnUgYWxpZ25tZW50IGJ1dHRvbnMsIEF0ZVN0cnVjdHVyZUNhbGN1bGF0b3JcIixcbiAgYXRlTGlua0NsaWNrQmVoYXZpb3I6IFwicmVhZC1vbmx5IGFuZCBDdHJsK2NsaWNrIGxpbmsgbmF2aWdhdGlvblwiLFxuICBhdGVCbG9ja1Nob3J0Y3V0czogXCJNb2QrRCBhbmQgTW9kK1NoaWZ0K0Fycm93VXAvRG93biBibG9jayBzaG9ydGN1dHNcIixcbiAgYXRlTGlua1Nob3J0Y3V0OiBcIk1vZCtLIGxpbmsgZWRpdG9yIHNob3J0Y3V0XCIsXG4gIGhpZ2hsaWdodDogXCJ0b29sYmFyL2J1YmJsZSBtZW51IGhpZ2hsaWdodCBwaWNrZXIsIEF0ZU1hcmtzQ2FsY3VsYXRvclwiLFxuICByZXNpemFibGVJbWFnZTpcbiAgICBcImltYWdlIG5vZGUgdmlldywgaW1hZ2UgYnViYmxlIG1lbnUsIGltYWdlIHVwbG9hZC9yZXNpemUgc2VydmljZSwgQXRlSW1hZ2VDYWxjdWxhdG9yXCIsXG4gIGF0ZVBhc3RlZEltYWdlOiBcInBhc3RlZCBIVE1MIGltYWdlIHNhbml0aXphdGlvbiBhbmQgYmFzZTY0IHJlLWhvc3RpbmdcIixcbiAgYXRlVXBsb2FkUHJvZ3Jlc3M6IFwiaW1hZ2UgdXBsb2FkIHByb2dyZXNzIG92ZXJsYXlcIixcbiAgdGFibGVFeHRlbnNpb246IFwidG9vbGJhci9zbGFzaCBtZW51IHRhYmxlIGluc2VydGlvbiwgdGFibGUvY2VsbCBidWJibGUgbWVudXMsIEF0ZVRhYmxlQ2FsY3VsYXRvclwiLFxuICB0YWJsZU9mQ29udGVudHM6IFwic2xhc2ggbWVudSB0YWJsZSBvZiBjb250ZW50cyBub2RlLCBBdGVUYWJsZU9mQ29udGVudHNDb21wb25lbnRcIixcbiAgdGlwdGFwU3RhdGU6IFwicmVhY3RpdmUgZWRpdG9yIHN0YXRlIGVuZ2luZSAodG9vbGJhciwgYnViYmxlIG1lbnVzLCBmb290ZXIpXCIsXG4gIGJsb2NrQ29udHJvbHM6IFwiYmxvY2sgcGx1cyBidXR0b24gYW5kIGRyYWcgaGFuZGxlXCIsXG4gIG9mZmljZVBhc3RlOiBcIldvcmQvRXhjZWwgcGFzdGUgbm9ybWFsaXphdGlvblwiLFxuICBjaGFyYWN0ZXJDb3VudDogXCJmb290ZXIgY2hhcmFjdGVyL3dvcmQgY291bnRlcnMgYW5kIG1heENoYXJhY3RlcnMgbGltaXRcIixcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25OYW1lKGV4dDogRXh0ZW5zaW9uIHwgTm9kZSB8IE1hcmspOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gKGV4dCBhcyB7IG5hbWU/OiBzdHJpbmcgfSk/Lm5hbWU7XG59XG4iXX0=
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWV4dGVuc2lvbnMudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRpcHRhcC1lZGl0b3Ivc3JjL2xpYi91dGlscy9hdGUtZXh0ZW5zaW9ucy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBc0Q7SUFDM0YsVUFBVSxFQUFFLFlBQVk7SUFDeEIsSUFBSSxFQUFFLE1BQU07SUFDWixVQUFVLEVBQUUsWUFBWTtJQUN4QixJQUFJLEVBQUUsTUFBTTtJQUNaLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLEdBQUcsRUFBRSxVQUFVO0lBQ2YsVUFBVSxFQUFFLFlBQVk7SUFDeEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsU0FBUyxFQUFFLFdBQVc7SUFDdEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsY0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxNQUFNLEVBQUUsUUFBUTtJQUNoQixRQUFRLEVBQUUsVUFBVTtJQUNwQixVQUFVLEVBQUUsWUFBWTtJQUN4QixJQUFJLEVBQUUsTUFBTTtJQUNaLFdBQVcsRUFBRSxhQUFhO0lBQzFCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLElBQUksRUFBRSxNQUFNO0lBQ1osU0FBUyxFQUFFLFdBQVc7SUFDdEIsWUFBWSxFQUFFLGNBQWM7Q0FDN0IsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFxQztJQUMzRSxVQUFVLEVBQUUsK0RBQStEO0lBQzNFLElBQUksRUFBRSxzREFBc0Q7SUFDNUQsVUFBVSxFQUFFLGdFQUFnRTtJQUM1RSxJQUFJLEVBQUUsNkRBQTZEO0lBQ25FLFNBQVMsRUFBRSwrREFBK0Q7SUFDMUUsR0FBRyxFQUFFLHVDQUF1QztJQUM1QyxVQUFVLEVBQUUsZ0NBQWdDO0lBQzVDLFNBQVMsRUFBRSwrQ0FBK0M7SUFDMUQsU0FBUyxFQUFFLGlDQUFpQztJQUM1QyxPQUFPLEVBQ0wsNEZBQTRGO0lBQzlGLFFBQVEsRUFBRSxtREFBbUQ7SUFDN0QsY0FBYyxFQUFFLDRDQUE0QztJQUM1RCxNQUFNLEVBQUUsd0RBQXdEO0lBQ2hFLFFBQVEsRUFBRSw0Q0FBNEM7SUFDdEQsVUFBVSxFQUFFLDJDQUEyQztJQUN2RCxJQUFJLEVBQUUscUVBQXFFO0lBQzNFLFdBQVcsRUFBRSxpRUFBaUU7SUFDOUUsU0FBUyxFQUFFLGlEQUFpRDtJQUM1RCxNQUFNLEVBQUUsK0RBQStEO0lBQ3ZFLElBQUksRUFBRSx1QkFBdUI7SUFDN0IsU0FBUyxFQUFFLDJEQUEyRDtJQUN0RSxZQUFZLEVBQUUsZ0RBQWdEO0lBQzlELFNBQVMsRUFBRSxrQ0FBa0M7SUFDN0MsS0FBSyxFQUFFLDJEQUEyRDtJQUNsRSxXQUFXLEVBQUUscUNBQXFDO0lBQ2xELFdBQVcsRUFBRSw2REFBNkQ7SUFDMUUsU0FBUyxFQUFFLDJEQUEyRDtJQUN0RSxTQUFTLEVBQUUscUVBQXFFO0lBQ2hGLG9CQUFvQixFQUFFLDBDQUEwQztJQUNoRSxpQkFBaUIsRUFBRSxrREFBa0Q7SUFDckUsZUFBZSxFQUFFLDRCQUE0QjtJQUM3QyxTQUFTLEVBQUUsMERBQTBEO0lBQ3JFLGNBQWMsRUFDWixxRkFBcUY7SUFDdkYsUUFBUSxFQUFFLDZFQUE2RTtJQUN2RixxQkFBcUIsRUFDbkIsb0ZBQW9GO0lBQ3RGLGNBQWMsRUFBRSxzREFBc0Q7SUFDdEUsaUJBQWlCLEVBQUUsK0JBQStCO0lBQ2xELGNBQWMsRUFBRSxpRkFBaUY7SUFDakcsZUFBZSxFQUFFLGdFQUFnRTtJQUNqRixXQUFXLEVBQUUsOERBQThEO0lBQzNFLGFBQWEsRUFBRSxtQ0FBbUM7SUFDbEQsV0FBVyxFQUFFLGdDQUFnQztJQUM3QyxjQUFjLEVBQUUsd0RBQXdEO0NBQ3pFLENBQUM7QUFFRixNQUFNLFVBQVUsZ0JBQWdCLENBQUMsR0FBNEI7SUFDM0QsT0FBUSxHQUF5QixFQUFFLElBQUksQ0FBQztBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFeHRlbnNpb24sIE1hcmssIE5vZGUgfSBmcm9tIFwiQHRpcHRhcC9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IFN0YXJ0ZXJLaXRPcHRpb25zIH0gZnJvbSBcIkB0aXB0YXAvc3RhcnRlci1raXRcIjtcblxuLyoqXG4gKiBNYXBzIHRoZSBydW50aW1lIGAubmFtZWAgb2YgZWFjaCBleHRlbnNpb24gYnVuZGxlZCBpbiBgQHRpcHRhcC9zdGFydGVyLWtpdGBcbiAqIHRvIGl0cyBjb3JyZXNwb25kaW5nIG9wdGlvbiBrZXkgaW4gYFN0YXJ0ZXJLaXRPcHRpb25zYC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNUQVJURVJfS0lUX05BTUVfVE9fT1BUSU9OOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBrZXlvZiBTdGFydGVyS2l0T3B0aW9ucz4+ID0ge1xuICBibG9ja3F1b3RlOiBcImJsb2NrcXVvdGVcIixcbiAgYm9sZDogXCJib2xkXCIsXG4gIGJ1bGxldExpc3Q6IFwiYnVsbGV0TGlzdFwiLFxuICBjb2RlOiBcImNvZGVcIixcbiAgY29kZUJsb2NrOiBcImNvZGVCbG9ja1wiLFxuICBkb2M6IFwiZG9jdW1lbnRcIixcbiAgZHJvcEN1cnNvcjogXCJkcm9wY3Vyc29yXCIsXG4gIGdhcEN1cnNvcjogXCJnYXBjdXJzb3JcIixcbiAgaGFyZEJyZWFrOiBcImhhcmRCcmVha1wiLFxuICBoZWFkaW5nOiBcImhlYWRpbmdcIixcbiAgdW5kb1JlZG86IFwidW5kb1JlZG9cIixcbiAgaG9yaXpvbnRhbFJ1bGU6IFwiaG9yaXpvbnRhbFJ1bGVcIixcbiAgaXRhbGljOiBcIml0YWxpY1wiLFxuICBsaXN0SXRlbTogXCJsaXN0SXRlbVwiLFxuICBsaXN0S2V5bWFwOiBcImxpc3RLZXltYXBcIixcbiAgbGluazogXCJsaW5rXCIsXG4gIG9yZGVyZWRMaXN0OiBcIm9yZGVyZWRMaXN0XCIsXG4gIHBhcmFncmFwaDogXCJwYXJhZ3JhcGhcIixcbiAgc3RyaWtlOiBcInN0cmlrZVwiLFxuICB0ZXh0OiBcInRleHRcIixcbiAgdW5kZXJsaW5lOiBcInVuZGVybGluZVwiLFxuICB0cmFpbGluZ05vZGU6IFwidHJhaWxpbmdOb2RlXCIsXG59O1xuXG4vKipcbiAqIERlc2NyaWJlcyB3aGljaCBwYXJ0cyBvZiBBbmd1bGFyIFRpcHRhcCBFZGl0b3IncyBVSSBvciBzdGF0ZSBjYWxjdWxhdG9yc1xuICogZGVwZW5kIG9uIGEgZ2l2ZW4gYnVpbHQtaW4gb3IgU3RhcnRlcktpdCBleHRlbnNpb24gbmFtZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEFURV9CVUlMVElOX1VJX0RFUEVOREVOQ0lFUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7XG4gIGJsb2NrcXVvdGU6IFwidG9vbGJhci9zbGFzaCBtZW51IGJsb2NrcXVvdGUgYnV0dG9ucywgQXRlU3RydWN0dXJlQ2FsY3VsYXRvclwiLFxuICBib2xkOiBcInRvb2xiYXIvYnViYmxlIG1lbnUgYm9sZCBidXR0b25zLCBBdGVNYXJrc0NhbGN1bGF0b3JcIixcbiAgYnVsbGV0TGlzdDogXCJ0b29sYmFyL3NsYXNoIG1lbnUgYnVsbGV0IGxpc3QgYnV0dG9ucywgQXRlU3RydWN0dXJlQ2FsY3VsYXRvclwiLFxuICBjb2RlOiBcInRvb2xiYXIvYnViYmxlIG1lbnUgaW5saW5lIGNvZGUgYnV0dG9ucywgQXRlTWFya3NDYWxjdWxhdG9yXCIsXG4gIGNvZGVCbG9jazogXCJ0b29sYmFyL3NsYXNoIG1lbnUgY29kZSBibG9jayBidXR0b25zLCBBdGVTdHJ1Y3R1cmVDYWxjdWxhdG9yXCIsXG4gIGRvYzogXCJ0b3AtbGV2ZWwgUHJvc2VNaXJyb3IgZG9jdW1lbnQgc2NoZW1hXCIsXG4gIGRyb3BDdXJzb3I6IFwiZHJhZy1hbmQtZHJvcCBjdXJzb3IgaW5kaWNhdG9yXCIsXG4gIGdhcEN1cnNvcjogXCJnYXAgY3Vyc29yIG5hdmlnYXRpb24gYXJvdW5kIGxlYWYgYmxvY2sgbm9kZXNcIixcbiAgaGFyZEJyZWFrOiBcIlNoaWZ0K0VudGVyIGxpbmUgYnJlYWsgc2hvcnRjdXRcIixcbiAgaGVhZGluZzpcbiAgICBcInRvb2xiYXIvYnViYmxlIG1lbnUvc2xhc2ggbWVudSBoZWFkaW5nIGNvbnRyb2xzLCB0YWJsZSBvZiBjb250ZW50cywgQXRlU3RydWN0dXJlQ2FsY3VsYXRvclwiLFxuICB1bmRvUmVkbzogXCJ0b29sYmFyIHVuZG8vcmVkbyBidXR0b25zLCBBdGVTdHJ1Y3R1cmVDYWxjdWxhdG9yXCIsXG4gIGhvcml6b250YWxSdWxlOiBcInRvb2xiYXIvc2xhc2ggbWVudSBob3Jpem9udGFsIHJ1bGUgYnV0dG9uc1wiLFxuICBpdGFsaWM6IFwidG9vbGJhci9idWJibGUgbWVudSBpdGFsaWMgYnV0dG9ucywgQXRlTWFya3NDYWxjdWxhdG9yXCIsXG4gIGxpc3RJdGVtOiBcImJ1bGxldC9vcmRlcmVkIGxpc3QgaXRlbXMsIGJsb2NrIHNob3J0Y3V0c1wiLFxuICBsaXN0S2V5bWFwOiBcImxpc3QgYmFja3NwYWNlL2RlbGV0ZSBrZXlib2FyZCBuYXZpZ2F0aW9uXCIsXG4gIGxpbms6IFwidG9vbGJhci9idWJibGUgbWVudSBsaW5rIGVkaXRvciwgTW9kK0sgc2hvcnRjdXQsIEF0ZU1hcmtzQ2FsY3VsYXRvclwiLFxuICBvcmRlcmVkTGlzdDogXCJ0b29sYmFyL3NsYXNoIG1lbnUgb3JkZXJlZCBsaXN0IGJ1dHRvbnMsIEF0ZVN0cnVjdHVyZUNhbGN1bGF0b3JcIixcbiAgcGFyYWdyYXBoOiBcImRlZmF1bHQgdGV4dCBibG9jayBub2RlLCBBdGVTdHJ1Y3R1cmVDYWxjdWxhdG9yXCIsXG4gIHN0cmlrZTogXCJ0b29sYmFyL2J1YmJsZSBtZW51IHN0cmlrZXRocm91Z2ggYnV0dG9ucywgQXRlTWFya3NDYWxjdWxhdG9yXCIsXG4gIHRleHQ6IFwiY29yZSBpbmxpbmUgdGV4dCBub2RlXCIsXG4gIHVuZGVybGluZTogXCJ0b29sYmFyL2J1YmJsZSBtZW51IHVuZGVybGluZSBidXR0b25zLCBBdGVNYXJrc0NhbGN1bGF0b3JcIixcbiAgdHJhaWxpbmdOb2RlOiBcImF1dG9tYXRpYyB0cmFpbGluZyBwYXJhZ3JhcGggYWZ0ZXIgYmxvY2sgbm9kZXNcIixcbiAgdGV4dFN0eWxlOiBcImNvbG9yIHBpY2tlciwgQXRlTWFya3NDYWxjdWxhdG9yXCIsXG4gIGNvbG9yOiBcInRvb2xiYXIvYnViYmxlIG1lbnUgdGV4dCBjb2xvciBwaWNrZXIsIEF0ZU1hcmtzQ2FsY3VsYXRvclwiLFxuICBwbGFjZWhvbGRlcjogXCJlbXB0eSBlZGl0b3IgcGxhY2Vob2xkZXIgZGVjb3JhdGlvblwiLFxuICBzdXBlcnNjcmlwdDogXCJ0b29sYmFyL2J1YmJsZSBtZW51IHN1cGVyc2NyaXB0IGJ1dHRvbnMsIEF0ZU1hcmtzQ2FsY3VsYXRvclwiLFxuICBzdWJzY3JpcHQ6IFwidG9vbGJhci9idWJibGUgbWVudSBzdWJzY3JpcHQgYnV0dG9ucywgQXRlTWFya3NDYWxjdWxhdG9yXCIsXG4gIHRleHRBbGlnbjogXCJ0b29sYmFyL2ltYWdlIGJ1YmJsZSBtZW51IGFsaWdubWVudCBidXR0b25zLCBBdGVTdHJ1Y3R1cmVDYWxjdWxhdG9yXCIsXG4gIGF0ZUxpbmtDbGlja0JlaGF2aW9yOiBcInJlYWQtb25seSBhbmQgQ3RybCtjbGljayBsaW5rIG5hdmlnYXRpb25cIixcbiAgYXRlQmxvY2tTaG9ydGN1dHM6IFwiTW9kK0QgYW5kIE1vZCtTaGlmdCtBcnJvd1VwL0Rvd24gYmxvY2sgc2hvcnRjdXRzXCIsXG4gIGF0ZUxpbmtTaG9ydGN1dDogXCJNb2QrSyBsaW5rIGVkaXRvciBzaG9ydGN1dFwiLFxuICBoaWdobGlnaHQ6IFwidG9vbGJhci9idWJibGUgbWVudSBoaWdobGlnaHQgcGlja2VyLCBBdGVNYXJrc0NhbGN1bGF0b3JcIixcbiAgcmVzaXphYmxlSW1hZ2U6XG4gICAgXCJpbWFnZSBub2RlIHZpZXcsIGltYWdlIGJ1YmJsZSBtZW51LCBpbWFnZSB1cGxvYWQvcmVzaXplIHNlcnZpY2UsIEF0ZUltYWdlQ2FsY3VsYXRvclwiLFxuICBhdGVQYXN0ZTogXCJwYXN0ZSBzZXR0aW5ncyAoYHBhc3RlYCBpbnB1dCAvIGNvbmZpZyk6IGZvcm1hdCBmaWx0ZXJzIGFuZCBgdHJhbnNmb3JtSFRNTGBcIixcbiAgYXRlUGFzdGVTb3VyY2VUcmFja2VyOlxuICAgIFwicGFzdGUgc291cmNlIGRldGVjdGlvbiAoYGVkaXRvcmAgLyBgb2ZmaWNlYCAvIGBleHRlcm5hbGApIGZvciB0aGUgYHBhc3RlYCBzZXR0aW5nc1wiLFxuICBhdGVQYXN0ZWRJbWFnZTogXCJwYXN0ZWQgSFRNTCBpbWFnZSBzYW5pdGl6YXRpb24gYW5kIGJhc2U2NCByZS1ob3N0aW5nXCIsXG4gIGF0ZVVwbG9hZFByb2dyZXNzOiBcImltYWdlIHVwbG9hZCBwcm9ncmVzcyBvdmVybGF5XCIsXG4gIHRhYmxlRXh0ZW5zaW9uOiBcInRvb2xiYXIvc2xhc2ggbWVudSB0YWJsZSBpbnNlcnRpb24sIHRhYmxlL2NlbGwgYnViYmxlIG1lbnVzLCBBdGVUYWJsZUNhbGN1bGF0b3JcIixcbiAgdGFibGVPZkNvbnRlbnRzOiBcInNsYXNoIG1lbnUgdGFibGUgb2YgY29udGVudHMgbm9kZSwgQXRlVGFibGVPZkNvbnRlbnRzQ29tcG9uZW50XCIsXG4gIHRpcHRhcFN0YXRlOiBcInJlYWN0aXZlIGVkaXRvciBzdGF0ZSBlbmdpbmUgKHRvb2xiYXIsIGJ1YmJsZSBtZW51cywgZm9vdGVyKVwiLFxuICBibG9ja0NvbnRyb2xzOiBcImJsb2NrIHBsdXMgYnV0dG9uIGFuZCBkcmFnIGhhbmRsZVwiLFxuICBvZmZpY2VQYXN0ZTogXCJXb3JkL0V4Y2VsIHBhc3RlIG5vcm1hbGl6YXRpb25cIixcbiAgY2hhcmFjdGVyQ291bnQ6IFwiZm9vdGVyIGNoYXJhY3Rlci93b3JkIGNvdW50ZXJzIGFuZCBtYXhDaGFyYWN0ZXJzIGxpbWl0XCIsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uTmFtZShleHQ6IEV4dGVuc2lvbiB8IE5vZGUgfCBNYXJrKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIChleHQgYXMgeyBuYW1lPzogc3RyaW5nIH0pPy5uYW1lO1xufVxuIl19
@@ -0,0 +1,21 @@
1
+ import { isDevMode } from "@angular/core";
2
+ import { firstValueFrom, isObservable } from "rxjs";
3
+ export async function ateResolveImageSrc(resolver, src) {
4
+ if (!resolver || !src) {
5
+ return src;
6
+ }
7
+ try {
8
+ const result = resolver(src);
9
+ const resolved = isObservable(result) ? await firstValueFrom(result) : await result;
10
+ if (typeof resolved === "string" && resolved) {
11
+ return resolved;
12
+ }
13
+ }
14
+ catch (error) {
15
+ if (isDevMode()) {
16
+ console.warn("[ATE] imageSrcResolver failed, showing the original src instead.", src, error);
17
+ }
18
+ }
19
+ return src;
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWltYWdlLXNyYy1yZXNvbHZlci51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL3V0aWxzL2F0ZS1pbWFnZS1zcmMtcmVzb2x2ZXIudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdwRCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUN0QyxRQUFnRCxFQUNoRCxHQUFXO0lBRVgsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQztRQUNwRixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUM3QyxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0YsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIGlzT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBBdGVJbWFnZVNyY1Jlc29sdmVyIH0gZnJvbSBcIi4uL21vZGVscy9hdGUtaW1hZ2UubW9kZWxcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF0ZVJlc29sdmVJbWFnZVNyYyhcbiAgcmVzb2x2ZXI6IEF0ZUltYWdlU3JjUmVzb2x2ZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBzcmM6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKCFyZXNvbHZlciB8fCAhc3JjKSB7XG4gICAgcmV0dXJuIHNyYztcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVyKHNyYyk7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBpc09ic2VydmFibGUocmVzdWx0KSA/IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlc3VsdCkgOiBhd2FpdCByZXN1bHQ7XG4gICAgaWYgKHR5cGVvZiByZXNvbHZlZCA9PT0gXCJzdHJpbmdcIiAmJiByZXNvbHZlZCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIltBVEVdIGltYWdlU3JjUmVzb2x2ZXIgZmFpbGVkLCBzaG93aW5nIHRoZSBvcmlnaW5hbCBzcmMgaW5zdGVhZC5cIiwgc3JjLCBlcnJvcik7XG4gICAgfVxuICB9XG4gIHJldHVybiBzcmM7XG59XG4iXX0=
@@ -38,6 +38,7 @@ export { AteBlockShortcuts, } from "./lib/extensions/ate-block-shortcuts.extensi
38
38
  // Types and interfaces for configuration
39
39
  export * from "./lib/models/ate-toolbar.model";
40
40
  export * from "./lib/models/ate-image.model";
41
+ export * from "./lib/models/ate-paste.model";
41
42
  export * from "./lib/models/ate-bubble-menu.model";
42
43
  export * from "./lib/models/ate-editor-config.model";
43
44
  export * from "./lib/models/ate-slash-command.model";
@@ -53,4 +54,4 @@ export { AteAngularNodeView } from "./lib/node-view/ate-angular-node-view";
53
54
  export { AteNodeViewRenderer } from "./lib/node-view/ate-node-view.renderer";
54
55
  export { createAngularComponentExtension } from "./lib/node-view/ate-node-view.factory";
55
56
  export { registerAngularComponent } from "./lib/node-view/ate-register-angular-component";
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILDRCQUE0QjtBQUM1QixjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ2pILE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLHNCQUFzQixHQUN2QixNQUFNLDJEQUEyRCxDQUFDO0FBQ25FLGNBQWMsMkJBQTJCLENBQUM7QUFFMUMsUUFBUTtBQUNSLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsNEJBQTRCLEdBRTdCLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEUsYUFBYTtBQUNiLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCxXQUFXO0FBQ1gsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsNkJBQTZCLENBQUM7QUFFNUMscURBQXFEO0FBQ3JELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsbURBQW1ELENBQUM7QUFFbEUsYUFBYTtBQUNiLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixvQkFBb0IsR0FHckIsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsR0FFZixNQUFNLDhDQUE4QyxDQUFDO0FBQ3RELE9BQU8sRUFDTCxpQkFBaUIsR0FFbEIsTUFBTSxnREFBZ0QsQ0FBQztBQUV4RCx5Q0FBeUM7QUFDekMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsNEJBQTRCLENBQUM7QUFFM0MseUJBQXlCO0FBQ3pCLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLHVDQUF1QztBQUN2QyxjQUFjLHdDQUF3QyxDQUFDO0FBS3ZELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdGlwdGFwLWVkaXRvclxuICovXG5cbi8vIE1haW4gY29tcG9uZW50ICYgUHJvdmlkZXJcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL2VkaXRvci9hbmd1bGFyLXRpcHRhcC1lZGl0b3IuY29tcG9uZW50XCI7XG5leHBvcnQgeyBBdGVUYWJsZU9mQ29udGVudHNDb21wb25lbnQgfSBmcm9tIFwiLi9saWIvY29tcG9uZW50cy90YWJsZS1vZi1jb250ZW50cy9hdGUtdGFibGUtb2YtY29udGVudHMuY29tcG9uZW50XCI7XG5leHBvcnQge1xuICBBdGVUb2NOb2RlQ29tcG9uZW50LFxuICBBdGVUb2NOb2RlT3B0aW9ucyxcbiAgZ2V0QXRlVG9jTm9kZUV4dGVuc2lvbixcbn0gZnJvbSBcIi4vbGliL2NvbXBvbmVudHMvdGFibGUtb2YtY29udGVudHMvYXRlLXRvYy1ub2RlLmNvbXBvbmVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2F0ZS1lZGl0b3IucHJvdmlkZXJcIjtcblxuLy8gSWNvbnNcbmV4cG9ydCB7IEF0ZUljb25Db21wb25lbnQgfSBmcm9tIFwiLi9saWIvY29tcG9uZW50cy91aS9hdGUtaWNvbi5jb21wb25lbnRcIjtcbmV4cG9ydCB7XG4gIEFURV9ERUZBVUxUX0lDT05TLFxuICBBVEVfTUFURVJJQUxfU1lNQk9MU19WSUVXQk9YLFxuICB0eXBlIEF0ZUljb25OYW1lLFxufSBmcm9tIFwiLi9saWIvaWNvbnMvYXRlLWRlZmF1bHQtaWNvbnNcIjtcbmV4cG9ydCB7IEFURV9TVFJPS0VfSUNPTlMgfSBmcm9tIFwiLi9saWIvaWNvbnMvYXRlLXN0cm9rZS1pY29uc1wiO1xuXG4vLyBEaXJlY3RpdmVzXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvZGlyZWN0aXZlcy9hdGUtbm9vcC12YWx1ZS1hY2Nlc3Nvci5kaXJlY3RpdmVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9kaXJlY3RpdmVzL2F0ZS10b29sdGlwLmRpcmVjdGl2ZVwiO1xuXG4vLyBTZXJ2aWNlc1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1pMThuLnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zZXJ2aWNlcy9hdGUtZWRpdG9yLWNvbW1hbmRzLnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zZXJ2aWNlcy9hdGUtaW1hZ2Uuc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1jb2xvci1waWNrZXIuc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1saW5rLnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zZXJ2aWNlcy9hdGUtZXhwb3J0LnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zZXJ2aWNlcy9hdGUtZWRpdG9yLXJlZ2lzdHJ5LnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zZXJ2aWNlcy9hdGUtaWNvbi1yZWdpc3RyeS5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kZWxzL2F0ZS1lZGl0b3ItcmVmXCI7XG5cbi8vIFN0YXRlICYgQ2FsY3VsYXRvcnMgKEVzc2VudGlhbCBmb3IgY3VzdG9tIHBsdWdpbnMpXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kZWxzL2F0ZS1lZGl0b3Itc3RhdGUubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1kaXNjb3ZlcnkuY2FsY3VsYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLWltYWdlLmNhbGN1bGF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1tYXJrcy5jYWxjdWxhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvZXh0ZW5zaW9ucy9jYWxjdWxhdG9ycy9hdGUtc2VsZWN0aW9uLmNhbGN1bGF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1zdHJ1Y3R1cmUuY2FsY3VsYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLXRhYmxlLmNhbGN1bGF0b3JcIjtcblxuLy8gRXh0ZW5zaW9uc1xuZXhwb3J0IHtcbiAgQXRlUGFzdGVkSW1hZ2UsXG4gIGNsYXNzaWZ5UGFzdGVkSW1hZ2VTcmMsXG4gIGRhdGFVcmlUb0ZpbGUsXG4gIHNhbml0aXplUGFzdGVkSW1hZ2VzLFxuICB0eXBlIEF0ZVBhc3RlZEltYWdlT3B0aW9ucyxcbiAgdHlwZSBBdGVQYXN0ZWRJbWFnZVNvdXJjZSxcbn0gZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvYXRlLXBhc3RlZC1pbWFnZS5leHRlbnNpb25cIjtcbmV4cG9ydCB7XG4gIEF0ZUxpbmtTaG9ydGN1dCxcbiAgaXNMaW5rU2hvcnRjdXQsXG4gIHR5cGUgQXRlTGlua1Nob3J0Y3V0T3B0aW9ucyxcbn0gZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvYXRlLWxpbmstc2hvcnRjdXQuZXh0ZW5zaW9uXCI7XG5leHBvcnQge1xuICBBdGVCbG9ja1Nob3J0Y3V0cyxcbiAgdHlwZSBBdGVCbG9ja1Nob3J0Y3V0c09wdGlvbnMsXG59IGZyb20gXCIuL2xpYi9leHRlbnNpb25zL2F0ZS1ibG9jay1zaG9ydGN1dHMuZXh0ZW5zaW9uXCI7XG5cbi8vIFR5cGVzIGFuZCBpbnRlcmZhY2VzIGZvciBjb25maWd1cmF0aW9uXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kZWxzL2F0ZS10b29sYmFyLm1vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kZWxzL2F0ZS1pbWFnZS5tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL21vZGVscy9hdGUtYnViYmxlLW1lbnUubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLWVkaXRvci1jb25maWcubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLXNsYXNoLWNvbW1hbmQubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLXRvYy5tb2RlbFwiO1xuXG4vLyBEZWZhdWx0IGNvbmZpZ3VyYXRpb25zXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29uZmlnL2F0ZS1lZGl0b3IuY29uZmlnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29uZmlnL2F0ZS1nbG9iYWwtY29uZmlnLnRva2VuXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29uZmlnL2F0ZS10b2MuY29uZmlnXCI7XG5cbi8vIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBzbGFzaCBjb21tYW5kc1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbmZpZy9hdGUtc2xhc2gtY29tbWFuZHMuY29uZmlnXCI7XG5cbi8vIFRyYW5zbGF0aW9uc1xuZXhwb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi9saWIvaTE4bi9hdGVUcmFuc2xhdGlvbnNNb2RlbFwiO1xuXG4vLyBBbmd1bGFyIE5vZGVWaWV3IEludGVncmF0aW9uXG5leHBvcnQgeyBBdGVBbmd1bGFyTm9kZVZpZXcgfSBmcm9tIFwiLi9saWIvbm9kZS12aWV3L2F0ZS1hbmd1bGFyLW5vZGUtdmlld1wiO1xuZXhwb3J0IHsgQXRlTm9kZVZpZXdSZW5kZXJlciB9IGZyb20gXCIuL2xpYi9ub2RlLXZpZXcvYXRlLW5vZGUtdmlldy5yZW5kZXJlclwiO1xuZXhwb3J0IHsgY3JlYXRlQW5ndWxhckNvbXBvbmVudEV4dGVuc2lvbiB9IGZyb20gXCIuL2xpYi9ub2RlLXZpZXcvYXRlLW5vZGUtdmlldy5mYWN0b3J5XCI7XG5leHBvcnQgeyByZWdpc3RlckFuZ3VsYXJDb21wb25lbnQgfSBmcm9tIFwiLi9saWIvbm9kZS12aWV3L2F0ZS1yZWdpc3Rlci1hbmd1bGFyLWNvbXBvbmVudFwiO1xuXG4vLyBOb2RlIFZpZXcgVHlwZXMgLSBBdGVBbmd1bGFyTm9kZSBpcyB0aGUgcHJpbWFyeSBwdWJsaWMgdHlwZVxuZXhwb3J0IHR5cGUgeyBBdGVBbmd1bGFyTm9kZSB9IGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLWVkaXRvci1jb25maWcubW9kZWxcIjtcbi8vIEFkdmFuY2VkOiBMb3ctbGV2ZWwgb3B0aW9ucyBmb3IgZnVsbCBjb250cm9sIG92ZXIgbm9kZSByZWdpc3RyYXRpb25cbmV4cG9ydCB0eXBlIHtcbiAgUmVnaXN0ZXJBbmd1bGFyQ29tcG9uZW50T3B0aW9ucyxcbiAgQXRlQ29tcG9uZW50UmVuZGVyT3B0aW9ucyxcbn0gZnJvbSBcIi4vbGliL25vZGUtdmlldy9hdGUtbm9kZS12aWV3Lm1vZGVsc1wiO1xuIl19
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILDRCQUE0QjtBQUM1QixjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ2pILE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLHNCQUFzQixHQUN2QixNQUFNLDJEQUEyRCxDQUFDO0FBQ25FLGNBQWMsMkJBQTJCLENBQUM7QUFFMUMsUUFBUTtBQUNSLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsNEJBQTRCLEdBRTdCLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEUsYUFBYTtBQUNiLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCxXQUFXO0FBQ1gsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsNkJBQTZCLENBQUM7QUFFNUMscURBQXFEO0FBQ3JELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsbURBQW1ELENBQUM7QUFFbEUsYUFBYTtBQUNiLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixvQkFBb0IsR0FHckIsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsR0FFZixNQUFNLDhDQUE4QyxDQUFDO0FBQ3RELE9BQU8sRUFDTCxpQkFBaUIsR0FFbEIsTUFBTSxnREFBZ0QsQ0FBQztBQUV4RCx5Q0FBeUM7QUFDekMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyx5QkFBeUI7QUFDekIsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsNkJBQTZCLENBQUM7QUFFNUMsdUNBQXVDO0FBQ3ZDLGNBQWMsd0NBQXdDLENBQUM7QUFLdkQsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB0aXB0YXAtZWRpdG9yXG4gKi9cblxuLy8gTWFpbiBjb21wb25lbnQgJiBQcm92aWRlclxuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbXBvbmVudHMvZWRpdG9yL2FuZ3VsYXItdGlwdGFwLWVkaXRvci5jb21wb25lbnRcIjtcbmV4cG9ydCB7IEF0ZVRhYmxlT2ZDb250ZW50c0NvbXBvbmVudCB9IGZyb20gXCIuL2xpYi9jb21wb25lbnRzL3RhYmxlLW9mLWNvbnRlbnRzL2F0ZS10YWJsZS1vZi1jb250ZW50cy5jb21wb25lbnRcIjtcbmV4cG9ydCB7XG4gIEF0ZVRvY05vZGVDb21wb25lbnQsXG4gIEF0ZVRvY05vZGVPcHRpb25zLFxuICBnZXRBdGVUb2NOb2RlRXh0ZW5zaW9uLFxufSBmcm9tIFwiLi9saWIvY29tcG9uZW50cy90YWJsZS1vZi1jb250ZW50cy9hdGUtdG9jLW5vZGUuY29tcG9uZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvYXRlLWVkaXRvci5wcm92aWRlclwiO1xuXG4vLyBJY29uc1xuZXhwb3J0IHsgQXRlSWNvbkNvbXBvbmVudCB9IGZyb20gXCIuL2xpYi9jb21wb25lbnRzL3VpL2F0ZS1pY29uLmNvbXBvbmVudFwiO1xuZXhwb3J0IHtcbiAgQVRFX0RFRkFVTFRfSUNPTlMsXG4gIEFURV9NQVRFUklBTF9TWU1CT0xTX1ZJRVdCT1gsXG4gIHR5cGUgQXRlSWNvbk5hbWUsXG59IGZyb20gXCIuL2xpYi9pY29ucy9hdGUtZGVmYXVsdC1pY29uc1wiO1xuZXhwb3J0IHsgQVRFX1NUUk9LRV9JQ09OUyB9IGZyb20gXCIuL2xpYi9pY29ucy9hdGUtc3Ryb2tlLWljb25zXCI7XG5cbi8vIERpcmVjdGl2ZXNcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9kaXJlY3RpdmVzL2F0ZS1ub29wLXZhbHVlLWFjY2Vzc29yLmRpcmVjdGl2ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2RpcmVjdGl2ZXMvYXRlLXRvb2x0aXAuZGlyZWN0aXZlXCI7XG5cbi8vIFNlcnZpY2VzXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvc2VydmljZXMvYXRlLWkxOG4uc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1lZGl0b3ItY29tbWFuZHMuc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1pbWFnZS5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvc2VydmljZXMvYXRlLWNvbG9yLXBpY2tlci5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvc2VydmljZXMvYXRlLWxpbmsuc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1leHBvcnQuc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1lZGl0b3ItcmVnaXN0cnkuc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3NlcnZpY2VzL2F0ZS1pY29uLXJlZ2lzdHJ5LnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLWVkaXRvci1yZWZcIjtcblxuLy8gU3RhdGUgJiBDYWxjdWxhdG9ycyAoRXNzZW50aWFsIGZvciBjdXN0b20gcGx1Z2lucylcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLWVkaXRvci1zdGF0ZS5tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLWRpc2NvdmVyeS5jYWxjdWxhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvZXh0ZW5zaW9ucy9jYWxjdWxhdG9ycy9hdGUtaW1hZ2UuY2FsY3VsYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLW1hcmtzLmNhbGN1bGF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1zZWxlY3Rpb24uY2FsY3VsYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLXN0cnVjdHVyZS5jYWxjdWxhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvZXh0ZW5zaW9ucy9jYWxjdWxhdG9ycy9hdGUtdGFibGUuY2FsY3VsYXRvclwiO1xuXG4vLyBFeHRlbnNpb25zXG5leHBvcnQge1xuICBBdGVQYXN0ZWRJbWFnZSxcbiAgY2xhc3NpZnlQYXN0ZWRJbWFnZVNyYyxcbiAgZGF0YVVyaVRvRmlsZSxcbiAgc2FuaXRpemVQYXN0ZWRJbWFnZXMsXG4gIHR5cGUgQXRlUGFzdGVkSW1hZ2VPcHRpb25zLFxuICB0eXBlIEF0ZVBhc3RlZEltYWdlU291cmNlLFxufSBmcm9tIFwiLi9saWIvZXh0ZW5zaW9ucy9hdGUtcGFzdGVkLWltYWdlLmV4dGVuc2lvblwiO1xuZXhwb3J0IHtcbiAgQXRlTGlua1Nob3J0Y3V0LFxuICBpc0xpbmtTaG9ydGN1dCxcbiAgdHlwZSBBdGVMaW5rU2hvcnRjdXRPcHRpb25zLFxufSBmcm9tIFwiLi9saWIvZXh0ZW5zaW9ucy9hdGUtbGluay1zaG9ydGN1dC5leHRlbnNpb25cIjtcbmV4cG9ydCB7XG4gIEF0ZUJsb2NrU2hvcnRjdXRzLFxuICB0eXBlIEF0ZUJsb2NrU2hvcnRjdXRzT3B0aW9ucyxcbn0gZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvYXRlLWJsb2NrLXNob3J0Y3V0cy5leHRlbnNpb25cIjtcblxuLy8gVHlwZXMgYW5kIGludGVyZmFjZXMgZm9yIGNvbmZpZ3VyYXRpb25cbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLXRvb2xiYXIubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLWltYWdlLm1vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kZWxzL2F0ZS1wYXN0ZS5tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL21vZGVscy9hdGUtYnViYmxlLW1lbnUubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLWVkaXRvci1jb25maWcubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLXNsYXNoLWNvbW1hbmQubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLXRvYy5tb2RlbFwiO1xuXG4vLyBEZWZhdWx0IGNvbmZpZ3VyYXRpb25zXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29uZmlnL2F0ZS1lZGl0b3IuY29uZmlnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29uZmlnL2F0ZS1nbG9iYWwtY29uZmlnLnRva2VuXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29uZmlnL2F0ZS10b2MuY29uZmlnXCI7XG5cbi8vIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBzbGFzaCBjb21tYW5kc1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbmZpZy9hdGUtc2xhc2gtY29tbWFuZHMuY29uZmlnXCI7XG5cbi8vIFRyYW5zbGF0aW9uc1xuZXhwb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi9saWIvaTE4bi9hdGVUcmFuc2xhdGlvbnNNb2RlbFwiO1xuXG4vLyBBbmd1bGFyIE5vZGVWaWV3IEludGVncmF0aW9uXG5leHBvcnQgeyBBdGVBbmd1bGFyTm9kZVZpZXcgfSBmcm9tIFwiLi9saWIvbm9kZS12aWV3L2F0ZS1hbmd1bGFyLW5vZGUtdmlld1wiO1xuZXhwb3J0IHsgQXRlTm9kZVZpZXdSZW5kZXJlciB9IGZyb20gXCIuL2xpYi9ub2RlLXZpZXcvYXRlLW5vZGUtdmlldy5yZW5kZXJlclwiO1xuZXhwb3J0IHsgY3JlYXRlQW5ndWxhckNvbXBvbmVudEV4dGVuc2lvbiB9IGZyb20gXCIuL2xpYi9ub2RlLXZpZXcvYXRlLW5vZGUtdmlldy5mYWN0b3J5XCI7XG5leHBvcnQgeyByZWdpc3RlckFuZ3VsYXJDb21wb25lbnQgfSBmcm9tIFwiLi9saWIvbm9kZS12aWV3L2F0ZS1yZWdpc3Rlci1hbmd1bGFyLWNvbXBvbmVudFwiO1xuXG4vLyBOb2RlIFZpZXcgVHlwZXMgLSBBdGVBbmd1bGFyTm9kZSBpcyB0aGUgcHJpbWFyeSBwdWJsaWMgdHlwZVxuZXhwb3J0IHR5cGUgeyBBdGVBbmd1bGFyTm9kZSB9IGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLWVkaXRvci1jb25maWcubW9kZWxcIjtcbi8vIEFkdmFuY2VkOiBMb3ctbGV2ZWwgb3B0aW9ucyBmb3IgZnVsbCBjb250cm9sIG92ZXIgbm9kZSByZWdpc3RyYXRpb25cbmV4cG9ydCB0eXBlIHtcbiAgUmVnaXN0ZXJBbmd1bGFyQ29tcG9uZW50T3B0aW9ucyxcbiAgQXRlQ29tcG9uZW50UmVuZGVyT3B0aW9ucyxcbn0gZnJvbSBcIi4vbGliL25vZGUtdmlldy9hdGUtbm9kZS12aWV3Lm1vZGVsc1wiO1xuIl19