@tilde-nlp/ngx-translate 7.0.19 → 7.0.21

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 (47) hide show
  1. package/assets/icons/icons.d.ts +2 -0
  2. package/assets/icons/index.d.ts +1 -0
  3. package/esm2022/assets/icons/icons.mjs +11 -0
  4. package/esm2022/assets/icons/index.mjs +2 -0
  5. package/esm2022/lib/i18n/de.mjs +1 -45
  6. package/esm2022/lib/i18n/en.mjs +10 -48
  7. package/esm2022/lib/i18n/et.mjs +1 -45
  8. package/esm2022/lib/i18n/fi.mjs +1 -45
  9. package/esm2022/lib/i18n/lt.mjs +1 -45
  10. package/esm2022/lib/i18n/lv.mjs +11 -49
  11. package/esm2022/lib/i18n/pl.mjs +1 -45
  12. package/esm2022/lib/modules/tld-common/models/configs/tld-llm-config.model.mjs +1 -1
  13. package/esm2022/lib/modules/tld-common/services/tld-translate-config.service.mjs +1 -3
  14. package/esm2022/lib/modules/tld-document/download-button/download-button.component.mjs +6 -4
  15. package/esm2022/lib/modules/tld-document/tld-document.module.mjs +12 -4
  16. package/esm2022/lib/modules/tld-document/tld-translate-file-multiple/tld-translate-file-multiple.component.mjs +3 -3
  17. package/esm2022/lib/modules/tld-text/components/tld-translate-text/tld-translate-text.component.mjs +62 -22
  18. package/esm2022/lib/modules/tld-text/tld-text.module.mjs +8 -4
  19. package/esm2022/lib/modules/tld-tooltip/tld-tooltip.module.mjs +3 -7
  20. package/esm2022/lib/modules/tld-tooltip/translation-system-picker/dropdown/translation-system-picker-dropdown.component.mjs +4 -11
  21. package/esm2022/lib/modules/tld-tooltip/translation-system-picker/filter/translation-system-picker-filter.component.mjs +3 -3
  22. package/esm2022/lib/modules/tld-tooltip/translation-system-picker/translation-system-picker.component.mjs +7 -15
  23. package/esm2022/lib/tld-translate.component.mjs +8 -4
  24. package/esm2022/lib/tld-translate.module.mjs +2 -8
  25. package/fesm2022/tilde-nlp-ngx-translate.mjs +123 -387
  26. package/fesm2022/tilde-nlp-ngx-translate.mjs.map +1 -1
  27. package/lib/i18n/de.d.ts +0 -44
  28. package/lib/i18n/en.d.ts +6 -44
  29. package/lib/i18n/et.d.ts +0 -44
  30. package/lib/i18n/fi.d.ts +0 -44
  31. package/lib/i18n/lt.d.ts +0 -44
  32. package/lib/i18n/lv.d.ts +6 -44
  33. package/lib/i18n/pl.d.ts +0 -44
  34. package/lib/modules/tld-common/models/configs/tld-llm-config.model.d.ts +0 -4
  35. package/lib/modules/tld-document/tld-document.module.d.ts +3 -1
  36. package/lib/modules/tld-text/components/tld-translate-text/tld-translate-text.component.d.ts +11 -1
  37. package/lib/modules/tld-text/tld-text.module.d.ts +2 -1
  38. package/lib/modules/tld-tooltip/tld-tooltip.module.d.ts +1 -1
  39. package/lib/modules/tld-tooltip/translation-system-picker/dropdown/translation-system-picker-dropdown.component.d.ts +0 -1
  40. package/lib/modules/tld-tooltip/translation-system-picker/translation-system-picker.component.d.ts +2 -5
  41. package/lib/tld-translate.component.d.ts +3 -2
  42. package/package.json +1 -1
  43. package/src/assets/webcomponent/styles.css +1 -1
  44. package/src/assets/webcomponent/tilde-translate-box.js +2 -2
  45. package/src/styles/styles.scss +2 -6
  46. package/esm2022/lib/factories/llm-service-configuration.factory.mjs +0 -9
  47. package/lib/factories/llm-service-configuration.factory.d.ts +0 -3
@@ -1,9 +1,11 @@
1
1
  import { Breakpoints } from '@angular/cdk/layout';
2
2
  import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
3
3
  import { Subject } from 'rxjs';
4
- import { distinctUntilChanged, takeUntil } from 'rxjs/operators';
4
+ import { distinctUntilChanged, finalize, takeUntil } from 'rxjs/operators';
5
5
  import { AudioErrorCase } from '../../../tld-audio/models';
6
6
  import { ConversionHelper } from '@tilde-nlp/ngx-common';
7
+ import { LLMUseCase } from '@tilde-nlp/ngx-services';
8
+ import { marked } from 'marked';
7
9
  import * as i0 from "@angular/core";
8
10
  import * as i1 from "../../services/tld-translate-text.service";
9
11
  import * as i2 from "@angular/cdk/clipboard";
@@ -13,20 +15,22 @@ import * as i5 from "../../../tld-common/services/scroll/tld-scroll.service";
13
15
  import * as i6 from "../../../tld-audio/services";
14
16
  import * as i7 from "../../../tld-document/services";
15
17
  import * as i8 from "@angular/cdk/layout";
16
- import * as i9 from "@angular/common";
17
- import * as i10 from "../../../tld-common/components/source-and-target-wrapper/source-and-target-wrapper.component";
18
- import * as i11 from "../../../tld-audio/tld-dictate/tld-dictate.component";
19
- import * as i12 from "../../../../components/shared/text-to-speech/text-to-speech.component";
20
- import * as i13 from "@angular/material/button";
21
- import * as i14 from "@ngbracket/ngx-layout/flex";
22
- import * as i15 from "@ngbracket/ngx-layout/extended";
23
- import * as i16 from "@angular/material/tooltip";
24
- import * as i17 from "../tld-translate-source/tld-translate-source.component";
25
- import * as i18 from "../tld-translate-suggest/tld-translate-suggest.component";
26
- import * as i19 from "../tld-dictionary/tld-dictionary.component";
27
- import * as i20 from "../highlight-tree/highlight-tree.component";
28
- import * as i21 from "../progress-indicator/progress-indicator.component";
29
- import * as i22 from "@ngx-translate/core";
18
+ import * as i9 from "@tilde-nlp/ngx-services";
19
+ import * as i10 from "@angular/common";
20
+ import * as i11 from "../../../tld-common/components/source-and-target-wrapper/source-and-target-wrapper.component";
21
+ import * as i12 from "../../../tld-audio/tld-dictate/tld-dictate.component";
22
+ import * as i13 from "../../../../components/shared/text-to-speech/text-to-speech.component";
23
+ import * as i14 from "@angular/material/button";
24
+ import * as i15 from "@ngbracket/ngx-layout/flex";
25
+ import * as i16 from "@ngbracket/ngx-layout/extended";
26
+ import * as i17 from "@angular/material/tooltip";
27
+ import * as i18 from "@angular/material/icon";
28
+ import * as i19 from "../tld-translate-source/tld-translate-source.component";
29
+ import * as i20 from "../tld-translate-suggest/tld-translate-suggest.component";
30
+ import * as i21 from "../tld-dictionary/tld-dictionary.component";
31
+ import * as i22 from "../highlight-tree/highlight-tree.component";
32
+ import * as i23 from "../progress-indicator/progress-indicator.component";
33
+ import * as i24 from "@ngx-translate/core";
30
34
  export class TldTranslateTextComponent {
31
35
  translateTextService;
32
36
  clipboard;
@@ -38,6 +42,7 @@ export class TldTranslateTextComponent {
38
42
  voiceInputService;
39
43
  fileService;
40
44
  breakpointObserver;
45
+ llmService;
41
46
  sourceComponent;
42
47
  dictateComponent;
43
48
  filePreviewProgress;
@@ -84,6 +89,7 @@ export class TldTranslateTextComponent {
84
89
  ;
85
90
  get maxDictateLength() { return this.config.audioConfig.maximumRecordTime; }
86
91
  get sourceLanguage() { return this.activeData?.sourceLang.lang; }
92
+ get targetLanguage() { return this.activeData?.targetLang.lang; }
87
93
  get hasTranslatedParagraphs() { return this.targetParagraphs?.length > 0; }
88
94
  get isEmptyTarget() { return !this.hasTranslatedParagraphs && !this.urlToTranslate && !this.hasDictionary; }
89
95
  get showTargetPlaceholder() { return this.config.textConfig.showTargetPlaceholder; }
@@ -96,6 +102,8 @@ export class TldTranslateTextComponent {
96
102
  ;
97
103
  get uploadIconName() { return this.config.coreConfig.uploadIconName; }
98
104
  ;
105
+ get isLlmEnabled() { return this.config.llmConfig.isEnabled; }
106
+ ;
99
107
  audioInputVisible;
100
108
  targetSentenceSelect = true;
101
109
  get urlToTranslate() { return this.translateTextService.urlToTranslate; }
@@ -110,8 +118,11 @@ export class TldTranslateTextComponent {
110
118
  get firstParagraphTranslated() {
111
119
  return this.translateTextService.firstParagraphTranslated;
112
120
  }
121
+ get isTranslating() {
122
+ return this.translateTextService.isTranslating;
123
+ }
113
124
  get translationError() {
114
- return this.source && !this.translateTextService.isTranslating;
125
+ return this.source && !this.isTranslating;
115
126
  }
116
127
  get hasDictionary() { return this.translateTextService.hasDictionary; }
117
128
  get dictionaryEntry() { return this.translateTextService.dictionaryEntry; }
@@ -133,10 +144,12 @@ export class TldTranslateTextComponent {
133
144
  dictateConfig;
134
145
  visibleExtensions;
135
146
  maxSizeMB;
147
+ isSummarazing;
148
+ summarizedText;
136
149
  isMobile;
137
150
  destroy$ = new Subject();
138
151
  mobileBreakpoints = [Breakpoints.XSmall];
139
- constructor(translateTextService, clipboard, alerts, config, tldScrollService, tldSystem, audioService, voiceInputService, fileService, breakpointObserver) {
152
+ constructor(translateTextService, clipboard, alerts, config, tldScrollService, tldSystem, audioService, voiceInputService, fileService, breakpointObserver, llmService) {
140
153
  this.translateTextService = translateTextService;
141
154
  this.clipboard = clipboard;
142
155
  this.alerts = alerts;
@@ -147,9 +160,13 @@ export class TldTranslateTextComponent {
147
160
  this.voiceInputService = voiceInputService;
148
161
  this.fileService = fileService;
149
162
  this.breakpointObserver = breakpointObserver;
163
+ this.llmService = llmService;
150
164
  }
151
165
  ngOnInit() {
152
166
  this.translateTextService.listenOnChanges();
167
+ this.translateTextService.sourceChange.subscribe(() => {
168
+ this.clearSummarization();
169
+ });
153
170
  this.dictateConfig = {
154
171
  appId: this.config.audioConfig.appId,
155
172
  appSecret: this.config.audioConfig.appSecret,
@@ -168,6 +185,7 @@ export class TldTranslateTextComponent {
168
185
  this.activeData = syst;
169
186
  this.audioInputVisible = this.config.audioConfig.audioTextInput && this.config.audioConfig.sourceLanguages?.includes(this.activeData?.sourceLang.lang);
170
187
  if (this.activeData.retranslate) {
188
+ this.clearSummarization();
171
189
  this.translateTextService.retranslate({ systemChanged: true });
172
190
  }
173
191
  });
@@ -190,8 +208,26 @@ export class TldTranslateTextComponent {
190
208
  this.clipboard.copy(this.translatedText);
191
209
  this.alerts.success("TLD_TRANSLATE.TEXT_COPIED", { id: this.copyMessageId, closeButtonId: this.copyMessageCloseButtonId, parentId: this.copyButtonId });
192
210
  }
211
+ copySummarizedText() {
212
+ this.clipboard.copy(this.summarizedText);
213
+ }
193
214
  refresh() {
194
215
  this.translateTextService.onTranslateButtonClick();
216
+ this.clearSummarization();
217
+ }
218
+ createSummary() {
219
+ this.isSummarazing = true;
220
+ setTimeout(() => {
221
+ document.querySelector('.summary-wrapper').scrollIntoView({ behavior: 'smooth' });
222
+ }, 100);
223
+ this.llmService
224
+ .summarize({ language: this.targetLanguage, text: this.translatedText, useCase: LLMUseCase.General })
225
+ .pipe(finalize(() => (this.isSummarazing = false)))
226
+ .subscribe({
227
+ next: (response) => {
228
+ this.summarizedText = marked.parse(response);
229
+ },
230
+ });
195
231
  }
196
232
  switchFocusFromCopy(event) {
197
233
  const copyMessageCloseButton = document.getElementById(this.copyMessageCloseButtonId)?.getElementsByTagName("button")?.item(0);
@@ -257,6 +293,7 @@ export class TldTranslateTextComponent {
257
293
  }
258
294
  clearSource() {
259
295
  this.translateTextService.clearSource();
296
+ this.clearSummarization();
260
297
  }
261
298
  ngOnDestroy() {
262
299
  this.translateTextService.stopListeningToChanges();
@@ -276,13 +313,16 @@ export class TldTranslateTextComponent {
276
313
  this.isMobile = state.matches;
277
314
  });
278
315
  }
279
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TldTranslateTextComponent, deps: [{ token: i1.TldTranslateTextService }, { token: i2.Clipboard }, { token: i3.AlertService }, { token: i4.TldTranslateConfigService }, { token: i5.TldScrollService }, { token: i4.TldTranslateSystemManagementService }, { token: i6.AudioRecordService }, { token: i6.TldVoiceInputService }, { token: i7.TldTranslateFileService }, { token: i8.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
280
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TldTranslateTextComponent, selector: "tld-translate-text", inputs: { filePreviewProgress: "filePreviewProgress" }, outputs: { onFileChange: "onFileChange" }, viewQueries: [{ propertyName: "sourceComponent", first: true, predicate: ["sourceComponent"], descendants: true }, { propertyName: "dictateComponent", first: true, predicate: ["dictate"], descendants: true }], ngImport: i0, template: "<!-- NOTE. tld-source-and-target-wrapper uses multiple content projections, so might seem confusing first, but elements are displayed at their places based on tld-source-and-target-wrapper component\r\nhttps://angular.io/guide/content-projection#multi-slot-content-projection\r\n-->\r\n<tld-source-and-target-wrapper [textToSpeechSourceSettings]=\"textToSpeechSourceSettings\"\r\n [clearSourceVisible]=\"source?.length>0\" (onSourceClear)=\"clearSource()\"\r\n [clearDisabled]=\"textareaDisabled\" [clearSourceTooltip]=\"'TLD_TRANSLATE.CLEAR_SOURCE_TOOLTIP'\"\r\n [ngClass]=\"{'highlight-active': highlight, 'gramcheck-active': gramCheck, 'empty-target': isEmptyTarget}\">\r\n <div sourceMain class=\"source-main\" fxLayout=\"column\">\r\n <tld-translate-source [textareaDisabled]=\"textareaDisabled\" #sourceComponent fxFlex\r\n [sourceParagraphs]=\"sourceParagraphs\"></tld-translate-source>\r\n </div>\r\n <ng-container sourceActions *ngIf=\"!hideSourceActions\">\r\n <div fxLayoutAlign=\"start center\" class=\"basic-padding\" fxLayoutGap=\"1em\">\r\n <ng-container *ngIf=\"audioInputVisible\">\r\n <tld-dictate #dictate [configuration]=\"dictateConfig\" [ngClass]=\"{'full-width' : !fileUpload}\"\r\n (isDictating)=\"dictateStartStop($event)\" (result)=\"dictateResult($event)\"\r\n (partialResult)=\"dictatePartialResult($event)\" (onError)=\"dictateError($event)\" [language]=\"sourceLanguage\">\r\n </tld-dictate>\r\n </ng-container>\r\n <div *ngIf=\"fileUpload\" class=\"file-upload-wrapper\">\r\n <lib-file-upload (fileChange)=\"fileChange($event)\" [accept]=\"allowedFileTypes\" [maxSize]=\"maxFileUploadSize\" [uploadIconName]=\"uploadIconName\"\r\n [extendedAcceptList]=\"extendedFileTypes\" [multiple]=\"multipleFiles\" (errorEvent)=\"fileUploadError($event)\"\r\n [filePreviewProgress]=\"filePreviewProgress\" [disabled]=\"fileUploadDisabled\">\r\n <span class=\"upload-file-text\">\r\n <div fxLayout=\"row\">\r\n <span class=\"info text-l-semi-bold\">\r\n <span [innerHTML]=\"'FILE_UPLOAD.UPLOAD' | translate\" class=\"accent-color\"></span>\r\n <span>&nbsp;</span>\r\n <span [innerHTML]=\"'FILE_UPLOAD.DRAG_AND_DROP' | translate\" fxHide.lt-sm></span>\r\n <span [innerHTML]=\"'FILE_UPLOAD.'+ (multipleFiles? 'FILES' : 'FILE') | translate\"\r\n [ngClass.lt-sm]=\"'accent-color'\"></span>\r\n </span>\r\n </div>\r\n <div fxLayout=\"row\">\r\n <span class=\"file-upload-extensions text-m\">\r\n (\r\n <span>{{visibleExtensions}}. </span>\r\n <span *ngIf=\"maxSizeMB\" [innerHTML]=\"'FILE_UPLOAD.LIMITS_MB' | translate: {maxSizeMB: maxSizeMB}\"></span>\r\n )\r\n </span>\r\n </div>\r\n </span>\r\n </lib-file-upload>\r\n <lib-open-extension-dialog *ngIf=\"showExtensionPopup\" [extensions]=\"allowedTypesWithoutDots\">\r\n </lib-open-extension-dialog>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div targetMain class=\"target-main\">\r\n <ng-container *ngIf=\"isEmptyTarget; else translatedTextBlock\">\r\n <p *ngIf=\"showTargetPlaceholder\" class=\"description-text target-empty\"\r\n [innerHtml]=\"'TLD_TRANSLATE.TARGET_DESCRIPTION' | translate\">\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container targetActions>\r\n <div class=\"tld-translate-target-footer basic-padding\" *ngIf=\"showSuggestions || showProgressIndicator\">\r\n <tld-translate-suggest *ngIf=\"showSuggestions\" [systemId]=\"systemId\" [target]=\"targetParagraphs\"\r\n [source]=\"sourceParagraphs\">\r\n </tld-translate-suggest>\r\n <progress-indicator (onClose)=\"closeProgressIndicator()\" *ngIf=\"showProgressIndicator\"></progress-indicator>\r\n </div>\r\n </ng-container>\r\n</tld-source-and-target-wrapper>\r\n\r\n\r\n<!-- templates used for else blocks in target container -->\r\n<ng-template #translatedTextBlock>\r\n <div [class.translated-source-overflow]=\"targetWrapperOverflow\" class=\"translated-source\" [class.selectable-sentence]=\"showSuggestions\">\r\n <ng-container *ngIf=\"!urlToTranslate\">\r\n <div class=\"target-wrapper-action-buttons\">\r\n <button *ngIf=\"firstParagraphTranslated\" mat-icon-button class=\"tld-copy-translation\" (click)=\"copy()\"\r\n matTooltip=\"{{'TOOLTIPS.COPY' | translate}}\" [attr.aria-describedby]=\"copyMessageId\"\r\n (keydown.Tab)=\"switchFocusFromCopy($event)\" [attr.Id]=\"copyButtonId\">\r\n <span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.COPY' | translate\">\r\n content_copy\r\n </span>\r\n </button>\r\n <button *ngIf=\"firstParagraphTranslated || translationError\" mat-icon-button class=\"tld-refresh-translation\" (click)=\"refresh()\"\r\n matTooltip=\"{{'TOOLTIPS.REFRESH' | translate}}\"\r\n >\r\n <span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.REFRESH' | translate\">\r\n refresh\r\n </span>\r\n </button>\r\n <tld-text-to-speech *ngIf=\"textToSpeechTargetSettings && firstParagraphTranslated\" [settings]=\"textToSpeechTargetSettings\">\r\n </tld-text-to-speech>\r\n </div>\r\n <div *ngFor=\"let paragraph of targetParagraphs\">\r\n <tld-highlight-tree [highlight]=\"highlight\" [tree]=\"paragraph\" [selectSentence]=\"showSuggestions\">\r\n </tld-highlight-tree>\r\n </div>\r\n\r\n <div *ngIf=\"firstParagraphTranslated\" class=\"dictionary-wrapper\">\r\n <tld-dictionary [dictionary]=\"dictionaryEntry\"></tld-dictionary>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"urlToTranslate\" class=\"target-url-container\">\r\n <a [attr.href]=\"translateUrlRedirect\" target=\"_blank\" fxLayoutAlign=\"start center\" class=\"go-to-webtranslate\">\r\n {{urlToTranslate}}\r\n <span class=\"material-icons\" color=\"accent\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.OPEN_IN_NEW'\">\r\n open_in_new\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".go-to-webtranslate{word-break:break-all;display:inline}.basic-padding,.target-empty,.target-translated-text{padding:1em}.source-container{border-right:1px solid #cbd2d9;padding:0;overflow:auto}.target-description{margin-top:0}.target-container{position:relative}.translated-source{overflow-y:auto;overflow-x:hidden;flex:1 1 0!important;padding:1em 3.5em 1em 2em!important}.translated-source.selectable-sentence{cursor:pointer}::ng-deep .target-highlight .tld-highlight-container{padding:1em}.target-wrapper-action-buttons{position:absolute;top:.2em;right:.2em}.target-wrapper-action-buttons .tld-copy-translation,.target-wrapper-action-buttons .tld-refresh-translation,.target-wrapper-action-buttons tld-text-to-speech{display:block}.target-empty,.target-translated-text{margin:0}tld-dictionary{overflow-y:auto;flex:1 1 0!important}.source-main,.target-main{height:100%}.upload-file-text{display:inline-block;text-align:left}.file-upload-wrapper{width:100%}.file-upload-wrapper .file-upload-extensions{font-weight:400}.dictionary-wrapper{margin-top:2rem}@media (max-width: 768px){.translated-source{padding:1em 3em 1em 1em!important}}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.SourceAndTargetWrapperComponent, selector: "tld-source-and-target-wrapper", inputs: ["clearSourceVisible", "clearSourceTooltip", "clearDisabled", "textToSpeechSourceSettings"], outputs: ["onSourceClear"] }, { kind: "component", type: i11.TldDictateComponent, selector: "tld-dictate", inputs: ["configuration", "language"], outputs: ["result", "partialResult", "isDictating", "onError"] }, { kind: "component", type: i3.OpenExtensionDialogComponent, selector: "lib-open-extension-dialog", inputs: ["extensions"] }, { kind: "component", type: i12.TextToSpeechComponent, selector: "tld-text-to-speech", inputs: ["settings"] }, { kind: "component", type: i3.FileUploadComponent, selector: "lib-file-upload", inputs: ["accept", "useCompactUpload", "maxSize", "multiple", "filePreviewProgress", "allowEmpty", "disabled", "dragZoneLabel", "uploadIconName", "uploadButtonLabel", "openExtensionPopupLabel", "minSupportedFormatCount", "extendedAcceptList"], outputs: ["fileChange", "errorEvent"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i14.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i14.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i14.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i14.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i15.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i15.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i16.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i17.TldTranslateSourceComponent, selector: "tld-translate-source", inputs: ["textareaDisabled", "sourceParagraphs"] }, { kind: "component", type: i18.TldTranslateSuggestComponent, selector: "tld-translate-suggest", inputs: ["target", "source", "dictionary", "systemId", "options", "selectedSentence"] }, { kind: "component", type: i19.TldDictionaryComponent, selector: "tld-dictionary", inputs: ["dictionary"] }, { kind: "component", type: i20.HighlightTreeComponent, selector: "tld-highlight-tree", inputs: ["tree", "isSource", "correctionsEnabled", "highlight", "gramCheck", "selectSentence"], outputs: ["onReplace"] }, { kind: "component", type: i21.ProgressIndicatorComponent, selector: "progress-indicator", outputs: ["onClose"] }, { kind: "pipe", type: i22.TranslatePipe, name: "translate" }] });
316
+ clearSummarization() {
317
+ this.summarizedText = null;
318
+ }
319
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TldTranslateTextComponent, deps: [{ token: i1.TldTranslateTextService }, { token: i2.Clipboard }, { token: i3.AlertService }, { token: i4.TldTranslateConfigService }, { token: i5.TldScrollService }, { token: i4.TldTranslateSystemManagementService }, { token: i6.AudioRecordService }, { token: i6.TldVoiceInputService }, { token: i7.TldTranslateFileService }, { token: i8.BreakpointObserver }, { token: i9.LLMService }], target: i0.ɵɵFactoryTarget.Component });
320
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TldTranslateTextComponent, selector: "tld-translate-text", inputs: { filePreviewProgress: "filePreviewProgress" }, outputs: { onFileChange: "onFileChange" }, viewQueries: [{ propertyName: "sourceComponent", first: true, predicate: ["sourceComponent"], descendants: true }, { propertyName: "dictateComponent", first: true, predicate: ["dictate"], descendants: true }], ngImport: i0, template: "<!-- NOTE. tld-source-and-target-wrapper uses multiple content projections, so might seem confusing first, but elements are displayed at their places based on tld-source-and-target-wrapper component\r\nhttps://angular.io/guide/content-projection#multi-slot-content-projection\r\n-->\r\n<tld-source-and-target-wrapper\r\n\t[textToSpeechSourceSettings]=\"textToSpeechSourceSettings\"\r\n\t[clearSourceVisible]=\"source?.length > 0\"\r\n\t(onSourceClear)=\"clearSource()\"\r\n\t[clearDisabled]=\"textareaDisabled\"\r\n\t[clearSourceTooltip]=\"'TLD_TRANSLATE.CLEAR_SOURCE_TOOLTIP'\"\r\n\t[ngClass]=\"{ 'highlight-active': highlight, 'gramcheck-active': gramCheck, 'empty-target': isEmptyTarget }\"\r\n>\r\n\t<div sourceMain class=\"source-main\" fxLayout=\"column\">\r\n\t\t<tld-translate-source [textareaDisabled]=\"textareaDisabled\" #sourceComponent fxFlex [sourceParagraphs]=\"sourceParagraphs\"></tld-translate-source>\r\n\t</div>\r\n\t<ng-container sourceActions *ngIf=\"!hideSourceActions\">\r\n\t\t<div fxLayoutAlign=\"start center\" class=\"basic-padding\" fxLayoutGap=\"1em\">\r\n\t\t\t<ng-container *ngIf=\"audioInputVisible\">\r\n\t\t\t\t<tld-dictate\r\n\t\t\t\t\t#dictate\r\n\t\t\t\t\t[configuration]=\"dictateConfig\"\r\n\t\t\t\t\t[ngClass]=\"{ 'full-width': !fileUpload }\"\r\n\t\t\t\t\t(isDictating)=\"dictateStartStop($event)\"\r\n\t\t\t\t\t(result)=\"dictateResult($event)\"\r\n\t\t\t\t\t(partialResult)=\"dictatePartialResult($event)\"\r\n\t\t\t\t\t(onError)=\"dictateError($event)\"\r\n\t\t\t\t\t[language]=\"sourceLanguage\"\r\n\t\t\t\t>\r\n\t\t\t\t</tld-dictate>\r\n\t\t\t</ng-container>\r\n\t\t\t<div *ngIf=\"fileUpload\" class=\"file-upload-wrapper\">\r\n\t\t\t\t<lib-file-upload\r\n\t\t\t\t\t(fileChange)=\"fileChange($event)\"\r\n\t\t\t\t\t[accept]=\"allowedFileTypes\"\r\n\t\t\t\t\t[maxSize]=\"maxFileUploadSize\"\r\n\t\t\t\t\t[uploadIconName]=\"uploadIconName\"\r\n\t\t\t\t\t[extendedAcceptList]=\"extendedFileTypes\"\r\n\t\t\t\t\t[multiple]=\"multipleFiles\"\r\n\t\t\t\t\t(errorEvent)=\"fileUploadError($event)\"\r\n\t\t\t\t\t[filePreviewProgress]=\"filePreviewProgress\"\r\n\t\t\t\t\t[disabled]=\"fileUploadDisabled\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class=\"upload-file-text\">\r\n\t\t\t\t\t\t\t<span class=\"info\">\r\n\t\t\t\t\t\t\t\t<span [innerHTML]=\"'FILE_UPLOAD.UPLOAD' | translate\" class=\"accent-color\"></span>\r\n\t\t\t\t\t\t\t\t<span>&nbsp;</span>\r\n\t\t\t\t\t\t\t\t<span [innerHTML]=\"'FILE_UPLOAD.DRAG_AND_DROP' | translate\" fxHide.lt-sm></span>\r\n\t\t\t\t\t\t\t\t<span [innerHTML]=\"'FILE_UPLOAD.' + (multipleFiles ? 'FILES' : 'FILE') | translate\" [ngClass.lt-sm]=\"'accent-color'\"></span>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t<span class=\"file-upload-extensions text-m\">\r\n\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t<span>{{ visibleExtensions }}. </span>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"maxSizeMB\" [innerHTML]=\"'FILE_UPLOAD.LIMITS_MB' | translate : { maxSizeMB: maxSizeMB }\"></span>\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</lib-file-upload>\r\n\t\t\t\t<lib-open-extension-dialog *ngIf=\"showExtensionPopup\" [extensions]=\"allowedTypesWithoutDots\"> </lib-open-extension-dialog>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-container>\r\n\r\n\t<div targetMain class=\"target-main\">\r\n\t\t<ng-container *ngIf=\"isEmptyTarget; else translatedTextBlock\">\r\n\t\t\t<p *ngIf=\"showTargetPlaceholder\" class=\"description-text target-empty\" [innerHtml]=\"'TLD_TRANSLATE.TARGET_DESCRIPTION' | translate\"></p>\r\n\t\t</ng-container>\r\n\t</div>\r\n\r\n\t<ng-container targetActions>\r\n\t\t<div class=\"tld-translate-target-footer basic-padding\" *ngIf=\"showSuggestions || showProgressIndicator\">\r\n\t\t\t<tld-translate-suggest *ngIf=\"showSuggestions\" [systemId]=\"systemId\" [target]=\"targetParagraphs\" [source]=\"sourceParagraphs\"> </tld-translate-suggest>\r\n\t\t\t<progress-indicator (onClose)=\"closeProgressIndicator()\" *ngIf=\"showProgressIndicator\"></progress-indicator>\r\n\t\t</div>\r\n\t</ng-container>\r\n</tld-source-and-target-wrapper>\r\n\r\n<!-- templates used for else blocks in target container -->\r\n<ng-template #translatedTextBlock>\r\n\t<div [class.translated-source-overflow]=\"targetWrapperOverflow\" class=\"translated-source\" [class.selectable-sentence]=\"showSuggestions\">\r\n\t\t<ng-container *ngIf=\"!urlToTranslate\">\r\n\t\t\t<div class=\"target-wrapper-action-buttons\">\r\n\t\t\t\t<button\r\n\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t*ngIf=\"firstParagraphTranslated\"\r\n\t\t\t\t\tclass=\"tld-copy-translation\"\r\n\t\t\t\t\t(click)=\"copy()\"\r\n\t\t\t\t\t[matTooltip]=\"'TOOLTIPS.COPY' | translate\"\r\n\t\t\t\t\t[attr.aria-describedby]=\"copyMessageId\"\r\n\t\t\t\t\t[attr.Id]=\"copyButtonId\"\r\n\t\t\t\t\t(keydown.Tab)=\"switchFocusFromCopy($event)\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.COPY' | translate\"> content_copy </span>\r\n\t\t\t\t</button>\r\n\r\n\t\t\t\t<button\r\n\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t*ngIf=\"firstParagraphTranslated || translationError\"\r\n\t\t\t\t\tclass=\"tld-refresh-translation\"\r\n\t\t\t\t\t[matTooltip]=\"'TOOLTIPS.REFRESH' | translate\"\r\n\t\t\t\t\t(click)=\"refresh()\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.REFRESH' | translate\"> refresh </span>\r\n\t\t\t\t</button>\r\n\r\n\t\t\t\t<button\r\n\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t*ngIf=\"firstParagraphTranslated && isLlmEnabled\"\r\n\t\t\t\t\tclass=\"tld-create-summary\"\r\n\t\t\t\t\t[matTooltip]=\"'TOOLTIPS.CREATE_SUMMARY' | translate\"\r\n\t\t\t\t\t[disabled]=\"isTranslating || isSummarazing || summarizedText\"\r\n\t\t\t\t\t(click)=\"createSummary()\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<mat-icon [svgIcon]=\"'summarize'\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.CREATE_SUMMARY' | translate\"></mat-icon>\r\n\t\t\t\t</button>\r\n\r\n\t\t\t\t<tld-text-to-speech *ngIf=\"textToSpeechTargetSettings && firstParagraphTranslated\" [settings]=\"textToSpeechTargetSettings\"> </tld-text-to-speech>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div *ngFor=\"let paragraph of targetParagraphs\">\r\n\t\t\t\t<tld-highlight-tree [highlight]=\"highlight\" [tree]=\"paragraph\" [selectSentence]=\"showSuggestions\"> </tld-highlight-tree>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div *ngIf=\"isSummarazing || summarizedText\" class=\"summary-wrapper\">\r\n\t\t\t\t<p>{{ \"TLD_TRANSLATE.SUMMARY.TITLE\" | translate }}</p>\r\n\r\n\t\t\t\t<p *ngIf=\"isSummarazing\" class=\"creating-progress\">{{ \"TLD_TRANSLATE.SUMMARY.CREATING\" | translate }}<span class=\"dot-loading\">...</span></p>\r\n\r\n\t\t\t\t<p [innerHTML]=\"summarizedText\"></p>\r\n\r\n\t\t\t\t<button\r\n\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t*ngIf=\"summarizedText\"\r\n\t\t\t\t\t[ngClass.lt-sm]=\"'summary-mobile'\"\r\n\t\t\t\t\tclass=\"summary-copy-btn\"\r\n\t\t\t\t\t(click)=\"copySummarizedText()\"\r\n\t\t\t\t\t[matTooltip]=\"'TOOLTIPS.COPY' | translate\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.COPY' | translate\"> content_copy </span>\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div *ngIf=\"firstParagraphTranslated\" class=\"dictionary-wrapper\">\r\n\t\t\t\t<tld-dictionary [dictionary]=\"dictionaryEntry\"></tld-dictionary>\r\n\t\t\t</div>\r\n\t\t</ng-container>\r\n\r\n\t\t<div *ngIf=\"urlToTranslate\" class=\"target-url-container\">\r\n\t\t\t<a [attr.href]=\"translateUrlRedirect\" target=\"_blank\" fxLayoutAlign=\"start center\" class=\"go-to-webtranslate\">\r\n\t\t\t\t{{ urlToTranslate }}\r\n\t\t\t\t<span class=\"material-icons\" color=\"accent\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.OPEN_IN_NEW'\"> open_in_new </span>\r\n\t\t\t</a>\r\n\t\t</div>\r\n\t</div>\r\n</ng-template>\r\n", styles: [".go-to-webtranslate{word-break:break-all;display:inline}.basic-padding,.target-empty,.target-translated-text{padding:1em}.source-container{border-right:1px solid #cbd2d9;padding:0;overflow:auto}.target-description{margin-top:0}.translated-source{position:relative;overflow-y:auto;overflow-x:hidden;flex:1 1 0!important;padding:1em 3.5em 1em 2em!important}.translated-source.selectable-sentence{cursor:pointer}::ng-deep .target-highlight .tld-highlight-container{padding:1em}.target-wrapper-action-buttons{position:absolute;top:0;right:0}.target-wrapper-action-buttons .tld-copy-translation,.target-wrapper-action-buttons .tld-refresh-translation,.target-wrapper-action-buttons tld-text-to-speech{display:block}.target-empty,.target-translated-text{margin:0}tld-dictionary{overflow-y:auto;flex:1 1 0!important}.source-main,.target-main{height:100%}.upload-file-text{color:var(--base-40);font-size:14px;display:inline-block;text-align:left}.file-upload-wrapper{width:100%}.file-upload-wrapper .file-upload-extensions{font-weight:400}.dictionary-wrapper{margin-top:2rem}.summary-wrapper{position:relative;padding-top:12px;border-top:1px solid var(--base-70)}.summary-wrapper p{margin-bottom:.5rem;font-weight:500}.creating-progress{color:var(--base-40)}.dot-loading{clip-path:inset(0 100% 0 0);animation:loading 1.5s steps(4) infinite}.summary-copy-btn{position:absolute;right:-53px;top:20px}.summary-mobile{right:-46px}@media (max-width: 768px){.translated-source{padding:1em 3em 1em 1em!important}}@keyframes loading{to{clip-path:inset(0 -34% 0 0)}}\n"], dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i11.SourceAndTargetWrapperComponent, selector: "tld-source-and-target-wrapper", inputs: ["clearSourceVisible", "clearSourceTooltip", "clearDisabled", "textToSpeechSourceSettings"], outputs: ["onSourceClear"] }, { kind: "component", type: i12.TldDictateComponent, selector: "tld-dictate", inputs: ["configuration", "language"], outputs: ["result", "partialResult", "isDictating", "onError"] }, { kind: "component", type: i3.OpenExtensionDialogComponent, selector: "lib-open-extension-dialog", inputs: ["extensions"] }, { kind: "component", type: i13.TextToSpeechComponent, selector: "tld-text-to-speech", inputs: ["settings"] }, { kind: "component", type: i3.FileUploadComponent, selector: "lib-file-upload", inputs: ["accept", "useCompactUpload", "maxSize", "multiple", "filePreviewProgress", "allowEmpty", "disabled", "dragZoneLabel", "uploadIconName", "uploadButtonLabel", "openExtensionPopupLabel", "minSupportedFormatCount", "extendedAcceptList"], outputs: ["fileChange", "errorEvent"] }, { kind: "component", type: i14.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i15.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i15.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i15.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i15.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i16.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i16.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "directive", type: i17.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i18.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i19.TldTranslateSourceComponent, selector: "tld-translate-source", inputs: ["textareaDisabled", "sourceParagraphs"] }, { kind: "component", type: i20.TldTranslateSuggestComponent, selector: "tld-translate-suggest", inputs: ["target", "source", "dictionary", "systemId", "options", "selectedSentence"] }, { kind: "component", type: i21.TldDictionaryComponent, selector: "tld-dictionary", inputs: ["dictionary"] }, { kind: "component", type: i22.HighlightTreeComponent, selector: "tld-highlight-tree", inputs: ["tree", "isSource", "correctionsEnabled", "highlight", "gramCheck", "selectSentence"], outputs: ["onReplace"] }, { kind: "component", type: i23.ProgressIndicatorComponent, selector: "progress-indicator", outputs: ["onClose"] }, { kind: "pipe", type: i24.TranslatePipe, name: "translate" }] });
281
321
  }
282
322
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TldTranslateTextComponent, decorators: [{
283
323
  type: Component,
284
- args: [{ selector: 'tld-translate-text', template: "<!-- NOTE. tld-source-and-target-wrapper uses multiple content projections, so might seem confusing first, but elements are displayed at their places based on tld-source-and-target-wrapper component\r\nhttps://angular.io/guide/content-projection#multi-slot-content-projection\r\n-->\r\n<tld-source-and-target-wrapper [textToSpeechSourceSettings]=\"textToSpeechSourceSettings\"\r\n [clearSourceVisible]=\"source?.length>0\" (onSourceClear)=\"clearSource()\"\r\n [clearDisabled]=\"textareaDisabled\" [clearSourceTooltip]=\"'TLD_TRANSLATE.CLEAR_SOURCE_TOOLTIP'\"\r\n [ngClass]=\"{'highlight-active': highlight, 'gramcheck-active': gramCheck, 'empty-target': isEmptyTarget}\">\r\n <div sourceMain class=\"source-main\" fxLayout=\"column\">\r\n <tld-translate-source [textareaDisabled]=\"textareaDisabled\" #sourceComponent fxFlex\r\n [sourceParagraphs]=\"sourceParagraphs\"></tld-translate-source>\r\n </div>\r\n <ng-container sourceActions *ngIf=\"!hideSourceActions\">\r\n <div fxLayoutAlign=\"start center\" class=\"basic-padding\" fxLayoutGap=\"1em\">\r\n <ng-container *ngIf=\"audioInputVisible\">\r\n <tld-dictate #dictate [configuration]=\"dictateConfig\" [ngClass]=\"{'full-width' : !fileUpload}\"\r\n (isDictating)=\"dictateStartStop($event)\" (result)=\"dictateResult($event)\"\r\n (partialResult)=\"dictatePartialResult($event)\" (onError)=\"dictateError($event)\" [language]=\"sourceLanguage\">\r\n </tld-dictate>\r\n </ng-container>\r\n <div *ngIf=\"fileUpload\" class=\"file-upload-wrapper\">\r\n <lib-file-upload (fileChange)=\"fileChange($event)\" [accept]=\"allowedFileTypes\" [maxSize]=\"maxFileUploadSize\" [uploadIconName]=\"uploadIconName\"\r\n [extendedAcceptList]=\"extendedFileTypes\" [multiple]=\"multipleFiles\" (errorEvent)=\"fileUploadError($event)\"\r\n [filePreviewProgress]=\"filePreviewProgress\" [disabled]=\"fileUploadDisabled\">\r\n <span class=\"upload-file-text\">\r\n <div fxLayout=\"row\">\r\n <span class=\"info text-l-semi-bold\">\r\n <span [innerHTML]=\"'FILE_UPLOAD.UPLOAD' | translate\" class=\"accent-color\"></span>\r\n <span>&nbsp;</span>\r\n <span [innerHTML]=\"'FILE_UPLOAD.DRAG_AND_DROP' | translate\" fxHide.lt-sm></span>\r\n <span [innerHTML]=\"'FILE_UPLOAD.'+ (multipleFiles? 'FILES' : 'FILE') | translate\"\r\n [ngClass.lt-sm]=\"'accent-color'\"></span>\r\n </span>\r\n </div>\r\n <div fxLayout=\"row\">\r\n <span class=\"file-upload-extensions text-m\">\r\n (\r\n <span>{{visibleExtensions}}. </span>\r\n <span *ngIf=\"maxSizeMB\" [innerHTML]=\"'FILE_UPLOAD.LIMITS_MB' | translate: {maxSizeMB: maxSizeMB}\"></span>\r\n )\r\n </span>\r\n </div>\r\n </span>\r\n </lib-file-upload>\r\n <lib-open-extension-dialog *ngIf=\"showExtensionPopup\" [extensions]=\"allowedTypesWithoutDots\">\r\n </lib-open-extension-dialog>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div targetMain class=\"target-main\">\r\n <ng-container *ngIf=\"isEmptyTarget; else translatedTextBlock\">\r\n <p *ngIf=\"showTargetPlaceholder\" class=\"description-text target-empty\"\r\n [innerHtml]=\"'TLD_TRANSLATE.TARGET_DESCRIPTION' | translate\">\r\n </p>\r\n </ng-container>\r\n </div>\r\n\r\n <ng-container targetActions>\r\n <div class=\"tld-translate-target-footer basic-padding\" *ngIf=\"showSuggestions || showProgressIndicator\">\r\n <tld-translate-suggest *ngIf=\"showSuggestions\" [systemId]=\"systemId\" [target]=\"targetParagraphs\"\r\n [source]=\"sourceParagraphs\">\r\n </tld-translate-suggest>\r\n <progress-indicator (onClose)=\"closeProgressIndicator()\" *ngIf=\"showProgressIndicator\"></progress-indicator>\r\n </div>\r\n </ng-container>\r\n</tld-source-and-target-wrapper>\r\n\r\n\r\n<!-- templates used for else blocks in target container -->\r\n<ng-template #translatedTextBlock>\r\n <div [class.translated-source-overflow]=\"targetWrapperOverflow\" class=\"translated-source\" [class.selectable-sentence]=\"showSuggestions\">\r\n <ng-container *ngIf=\"!urlToTranslate\">\r\n <div class=\"target-wrapper-action-buttons\">\r\n <button *ngIf=\"firstParagraphTranslated\" mat-icon-button class=\"tld-copy-translation\" (click)=\"copy()\"\r\n matTooltip=\"{{'TOOLTIPS.COPY' | translate}}\" [attr.aria-describedby]=\"copyMessageId\"\r\n (keydown.Tab)=\"switchFocusFromCopy($event)\" [attr.Id]=\"copyButtonId\">\r\n <span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.COPY' | translate\">\r\n content_copy\r\n </span>\r\n </button>\r\n <button *ngIf=\"firstParagraphTranslated || translationError\" mat-icon-button class=\"tld-refresh-translation\" (click)=\"refresh()\"\r\n matTooltip=\"{{'TOOLTIPS.REFRESH' | translate}}\"\r\n >\r\n <span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.REFRESH' | translate\">\r\n refresh\r\n </span>\r\n </button>\r\n <tld-text-to-speech *ngIf=\"textToSpeechTargetSettings && firstParagraphTranslated\" [settings]=\"textToSpeechTargetSettings\">\r\n </tld-text-to-speech>\r\n </div>\r\n <div *ngFor=\"let paragraph of targetParagraphs\">\r\n <tld-highlight-tree [highlight]=\"highlight\" [tree]=\"paragraph\" [selectSentence]=\"showSuggestions\">\r\n </tld-highlight-tree>\r\n </div>\r\n\r\n <div *ngIf=\"firstParagraphTranslated\" class=\"dictionary-wrapper\">\r\n <tld-dictionary [dictionary]=\"dictionaryEntry\"></tld-dictionary>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"urlToTranslate\" class=\"target-url-container\">\r\n <a [attr.href]=\"translateUrlRedirect\" target=\"_blank\" fxLayoutAlign=\"start center\" class=\"go-to-webtranslate\">\r\n {{urlToTranslate}}\r\n <span class=\"material-icons\" color=\"accent\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.OPEN_IN_NEW'\">\r\n open_in_new\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".go-to-webtranslate{word-break:break-all;display:inline}.basic-padding,.target-empty,.target-translated-text{padding:1em}.source-container{border-right:1px solid #cbd2d9;padding:0;overflow:auto}.target-description{margin-top:0}.target-container{position:relative}.translated-source{overflow-y:auto;overflow-x:hidden;flex:1 1 0!important;padding:1em 3.5em 1em 2em!important}.translated-source.selectable-sentence{cursor:pointer}::ng-deep .target-highlight .tld-highlight-container{padding:1em}.target-wrapper-action-buttons{position:absolute;top:.2em;right:.2em}.target-wrapper-action-buttons .tld-copy-translation,.target-wrapper-action-buttons .tld-refresh-translation,.target-wrapper-action-buttons tld-text-to-speech{display:block}.target-empty,.target-translated-text{margin:0}tld-dictionary{overflow-y:auto;flex:1 1 0!important}.source-main,.target-main{height:100%}.upload-file-text{display:inline-block;text-align:left}.file-upload-wrapper{width:100%}.file-upload-wrapper .file-upload-extensions{font-weight:400}.dictionary-wrapper{margin-top:2rem}@media (max-width: 768px){.translated-source{padding:1em 3em 1em 1em!important}}\n"] }]
285
- }], ctorParameters: () => [{ type: i1.TldTranslateTextService }, { type: i2.Clipboard }, { type: i3.AlertService }, { type: i4.TldTranslateConfigService }, { type: i5.TldScrollService }, { type: i4.TldTranslateSystemManagementService }, { type: i6.AudioRecordService }, { type: i6.TldVoiceInputService }, { type: i7.TldTranslateFileService }, { type: i8.BreakpointObserver }], propDecorators: { sourceComponent: [{
324
+ args: [{ selector: 'tld-translate-text', template: "<!-- NOTE. tld-source-and-target-wrapper uses multiple content projections, so might seem confusing first, but elements are displayed at their places based on tld-source-and-target-wrapper component\r\nhttps://angular.io/guide/content-projection#multi-slot-content-projection\r\n-->\r\n<tld-source-and-target-wrapper\r\n\t[textToSpeechSourceSettings]=\"textToSpeechSourceSettings\"\r\n\t[clearSourceVisible]=\"source?.length > 0\"\r\n\t(onSourceClear)=\"clearSource()\"\r\n\t[clearDisabled]=\"textareaDisabled\"\r\n\t[clearSourceTooltip]=\"'TLD_TRANSLATE.CLEAR_SOURCE_TOOLTIP'\"\r\n\t[ngClass]=\"{ 'highlight-active': highlight, 'gramcheck-active': gramCheck, 'empty-target': isEmptyTarget }\"\r\n>\r\n\t<div sourceMain class=\"source-main\" fxLayout=\"column\">\r\n\t\t<tld-translate-source [textareaDisabled]=\"textareaDisabled\" #sourceComponent fxFlex [sourceParagraphs]=\"sourceParagraphs\"></tld-translate-source>\r\n\t</div>\r\n\t<ng-container sourceActions *ngIf=\"!hideSourceActions\">\r\n\t\t<div fxLayoutAlign=\"start center\" class=\"basic-padding\" fxLayoutGap=\"1em\">\r\n\t\t\t<ng-container *ngIf=\"audioInputVisible\">\r\n\t\t\t\t<tld-dictate\r\n\t\t\t\t\t#dictate\r\n\t\t\t\t\t[configuration]=\"dictateConfig\"\r\n\t\t\t\t\t[ngClass]=\"{ 'full-width': !fileUpload }\"\r\n\t\t\t\t\t(isDictating)=\"dictateStartStop($event)\"\r\n\t\t\t\t\t(result)=\"dictateResult($event)\"\r\n\t\t\t\t\t(partialResult)=\"dictatePartialResult($event)\"\r\n\t\t\t\t\t(onError)=\"dictateError($event)\"\r\n\t\t\t\t\t[language]=\"sourceLanguage\"\r\n\t\t\t\t>\r\n\t\t\t\t</tld-dictate>\r\n\t\t\t</ng-container>\r\n\t\t\t<div *ngIf=\"fileUpload\" class=\"file-upload-wrapper\">\r\n\t\t\t\t<lib-file-upload\r\n\t\t\t\t\t(fileChange)=\"fileChange($event)\"\r\n\t\t\t\t\t[accept]=\"allowedFileTypes\"\r\n\t\t\t\t\t[maxSize]=\"maxFileUploadSize\"\r\n\t\t\t\t\t[uploadIconName]=\"uploadIconName\"\r\n\t\t\t\t\t[extendedAcceptList]=\"extendedFileTypes\"\r\n\t\t\t\t\t[multiple]=\"multipleFiles\"\r\n\t\t\t\t\t(errorEvent)=\"fileUploadError($event)\"\r\n\t\t\t\t\t[filePreviewProgress]=\"filePreviewProgress\"\r\n\t\t\t\t\t[disabled]=\"fileUploadDisabled\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class=\"upload-file-text\">\r\n\t\t\t\t\t\t\t<span class=\"info\">\r\n\t\t\t\t\t\t\t\t<span [innerHTML]=\"'FILE_UPLOAD.UPLOAD' | translate\" class=\"accent-color\"></span>\r\n\t\t\t\t\t\t\t\t<span>&nbsp;</span>\r\n\t\t\t\t\t\t\t\t<span [innerHTML]=\"'FILE_UPLOAD.DRAG_AND_DROP' | translate\" fxHide.lt-sm></span>\r\n\t\t\t\t\t\t\t\t<span [innerHTML]=\"'FILE_UPLOAD.' + (multipleFiles ? 'FILES' : 'FILE') | translate\" [ngClass.lt-sm]=\"'accent-color'\"></span>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t<span class=\"file-upload-extensions text-m\">\r\n\t\t\t\t\t\t\t\t(\r\n\t\t\t\t\t\t\t\t<span>{{ visibleExtensions }}. </span>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"maxSizeMB\" [innerHTML]=\"'FILE_UPLOAD.LIMITS_MB' | translate : { maxSizeMB: maxSizeMB }\"></span>\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</lib-file-upload>\r\n\t\t\t\t<lib-open-extension-dialog *ngIf=\"showExtensionPopup\" [extensions]=\"allowedTypesWithoutDots\"> </lib-open-extension-dialog>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-container>\r\n\r\n\t<div targetMain class=\"target-main\">\r\n\t\t<ng-container *ngIf=\"isEmptyTarget; else translatedTextBlock\">\r\n\t\t\t<p *ngIf=\"showTargetPlaceholder\" class=\"description-text target-empty\" [innerHtml]=\"'TLD_TRANSLATE.TARGET_DESCRIPTION' | translate\"></p>\r\n\t\t</ng-container>\r\n\t</div>\r\n\r\n\t<ng-container targetActions>\r\n\t\t<div class=\"tld-translate-target-footer basic-padding\" *ngIf=\"showSuggestions || showProgressIndicator\">\r\n\t\t\t<tld-translate-suggest *ngIf=\"showSuggestions\" [systemId]=\"systemId\" [target]=\"targetParagraphs\" [source]=\"sourceParagraphs\"> </tld-translate-suggest>\r\n\t\t\t<progress-indicator (onClose)=\"closeProgressIndicator()\" *ngIf=\"showProgressIndicator\"></progress-indicator>\r\n\t\t</div>\r\n\t</ng-container>\r\n</tld-source-and-target-wrapper>\r\n\r\n<!-- templates used for else blocks in target container -->\r\n<ng-template #translatedTextBlock>\r\n\t<div [class.translated-source-overflow]=\"targetWrapperOverflow\" class=\"translated-source\" [class.selectable-sentence]=\"showSuggestions\">\r\n\t\t<ng-container *ngIf=\"!urlToTranslate\">\r\n\t\t\t<div class=\"target-wrapper-action-buttons\">\r\n\t\t\t\t<button\r\n\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t*ngIf=\"firstParagraphTranslated\"\r\n\t\t\t\t\tclass=\"tld-copy-translation\"\r\n\t\t\t\t\t(click)=\"copy()\"\r\n\t\t\t\t\t[matTooltip]=\"'TOOLTIPS.COPY' | translate\"\r\n\t\t\t\t\t[attr.aria-describedby]=\"copyMessageId\"\r\n\t\t\t\t\t[attr.Id]=\"copyButtonId\"\r\n\t\t\t\t\t(keydown.Tab)=\"switchFocusFromCopy($event)\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.COPY' | translate\"> content_copy </span>\r\n\t\t\t\t</button>\r\n\r\n\t\t\t\t<button\r\n\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t*ngIf=\"firstParagraphTranslated || translationError\"\r\n\t\t\t\t\tclass=\"tld-refresh-translation\"\r\n\t\t\t\t\t[matTooltip]=\"'TOOLTIPS.REFRESH' | translate\"\r\n\t\t\t\t\t(click)=\"refresh()\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.REFRESH' | translate\"> refresh </span>\r\n\t\t\t\t</button>\r\n\r\n\t\t\t\t<button\r\n\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t*ngIf=\"firstParagraphTranslated && isLlmEnabled\"\r\n\t\t\t\t\tclass=\"tld-create-summary\"\r\n\t\t\t\t\t[matTooltip]=\"'TOOLTIPS.CREATE_SUMMARY' | translate\"\r\n\t\t\t\t\t[disabled]=\"isTranslating || isSummarazing || summarizedText\"\r\n\t\t\t\t\t(click)=\"createSummary()\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<mat-icon [svgIcon]=\"'summarize'\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.CREATE_SUMMARY' | translate\"></mat-icon>\r\n\t\t\t\t</button>\r\n\r\n\t\t\t\t<tld-text-to-speech *ngIf=\"textToSpeechTargetSettings && firstParagraphTranslated\" [settings]=\"textToSpeechTargetSettings\"> </tld-text-to-speech>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div *ngFor=\"let paragraph of targetParagraphs\">\r\n\t\t\t\t<tld-highlight-tree [highlight]=\"highlight\" [tree]=\"paragraph\" [selectSentence]=\"showSuggestions\"> </tld-highlight-tree>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div *ngIf=\"isSummarazing || summarizedText\" class=\"summary-wrapper\">\r\n\t\t\t\t<p>{{ \"TLD_TRANSLATE.SUMMARY.TITLE\" | translate }}</p>\r\n\r\n\t\t\t\t<p *ngIf=\"isSummarazing\" class=\"creating-progress\">{{ \"TLD_TRANSLATE.SUMMARY.CREATING\" | translate }}<span class=\"dot-loading\">...</span></p>\r\n\r\n\t\t\t\t<p [innerHTML]=\"summarizedText\"></p>\r\n\r\n\t\t\t\t<button\r\n\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t*ngIf=\"summarizedText\"\r\n\t\t\t\t\t[ngClass.lt-sm]=\"'summary-mobile'\"\r\n\t\t\t\t\tclass=\"summary-copy-btn\"\r\n\t\t\t\t\t(click)=\"copySummarizedText()\"\r\n\t\t\t\t\t[matTooltip]=\"'TOOLTIPS.COPY' | translate\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.COPY' | translate\"> content_copy </span>\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div *ngIf=\"firstParagraphTranslated\" class=\"dictionary-wrapper\">\r\n\t\t\t\t<tld-dictionary [dictionary]=\"dictionaryEntry\"></tld-dictionary>\r\n\t\t\t</div>\r\n\t\t</ng-container>\r\n\r\n\t\t<div *ngIf=\"urlToTranslate\" class=\"target-url-container\">\r\n\t\t\t<a [attr.href]=\"translateUrlRedirect\" target=\"_blank\" fxLayoutAlign=\"start center\" class=\"go-to-webtranslate\">\r\n\t\t\t\t{{ urlToTranslate }}\r\n\t\t\t\t<span class=\"material-icons\" color=\"accent\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.OPEN_IN_NEW'\"> open_in_new </span>\r\n\t\t\t</a>\r\n\t\t</div>\r\n\t</div>\r\n</ng-template>\r\n", styles: [".go-to-webtranslate{word-break:break-all;display:inline}.basic-padding,.target-empty,.target-translated-text{padding:1em}.source-container{border-right:1px solid #cbd2d9;padding:0;overflow:auto}.target-description{margin-top:0}.translated-source{position:relative;overflow-y:auto;overflow-x:hidden;flex:1 1 0!important;padding:1em 3.5em 1em 2em!important}.translated-source.selectable-sentence{cursor:pointer}::ng-deep .target-highlight .tld-highlight-container{padding:1em}.target-wrapper-action-buttons{position:absolute;top:0;right:0}.target-wrapper-action-buttons .tld-copy-translation,.target-wrapper-action-buttons .tld-refresh-translation,.target-wrapper-action-buttons tld-text-to-speech{display:block}.target-empty,.target-translated-text{margin:0}tld-dictionary{overflow-y:auto;flex:1 1 0!important}.source-main,.target-main{height:100%}.upload-file-text{color:var(--base-40);font-size:14px;display:inline-block;text-align:left}.file-upload-wrapper{width:100%}.file-upload-wrapper .file-upload-extensions{font-weight:400}.dictionary-wrapper{margin-top:2rem}.summary-wrapper{position:relative;padding-top:12px;border-top:1px solid var(--base-70)}.summary-wrapper p{margin-bottom:.5rem;font-weight:500}.creating-progress{color:var(--base-40)}.dot-loading{clip-path:inset(0 100% 0 0);animation:loading 1.5s steps(4) infinite}.summary-copy-btn{position:absolute;right:-53px;top:20px}.summary-mobile{right:-46px}@media (max-width: 768px){.translated-source{padding:1em 3em 1em 1em!important}}@keyframes loading{to{clip-path:inset(0 -34% 0 0)}}\n"] }]
325
+ }], ctorParameters: () => [{ type: i1.TldTranslateTextService }, { type: i2.Clipboard }, { type: i3.AlertService }, { type: i4.TldTranslateConfigService }, { type: i5.TldScrollService }, { type: i4.TldTranslateSystemManagementService }, { type: i6.AudioRecordService }, { type: i6.TldVoiceInputService }, { type: i7.TldTranslateFileService }, { type: i8.BreakpointObserver }, { type: i9.LLMService }], propDecorators: { sourceComponent: [{
286
326
  type: ViewChild,
287
327
  args: ["sourceComponent"]
288
328
  }], dictateComponent: [{
@@ -293,4 +333,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
293
333
  }], onFileChange: [{
294
334
  type: Output
295
335
  }] } });
296
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RsZC10cmFuc2xhdGUvc3JjL2xpYi9tb2R1bGVzL3RsZC10ZXh0L2NvbXBvbmVudHMvdGxkLXRyYW5zbGF0ZS10ZXh0L3RsZC10cmFuc2xhdGUtdGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9jb21wb25lbnRzL3RsZC10cmFuc2xhdGUtdGV4dC90bGQtdHJhbnNsYXRlLXRleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFzQixXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBNkIsTUFBTSwyQkFBMkIsQ0FBQztBQVF0RixPQUFPLEVBQTRCLGdCQUFnQixFQUFtQixNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTcEcsTUFBTSxPQUFPLHlCQUF5QjtJQXlGakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFqR1csZUFBZSxDQUE4QjtJQUNyRCxnQkFBZ0IsQ0FBc0I7SUFFbkQsbUJBQW1CLENBQVM7SUFDM0IsWUFBWSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO0lBRTFFLFVBQVUsQ0FBYTtJQUN2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NkI7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7YUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQzt3R0E5UFUseUJBQXlCOzRGQUF6Qix5QkFBeUIsK1dDdEJ0Qyxrdk1BNkdBOzs0RkR2RmEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLG9CQUFvQjttWkFLQSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDTixnQkFBZ0I7c0JBQXJDLFNBQVM7dUJBQUMsU0FBUztnQkFFWCxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQXVkaW9FcnJvckNhc2UsIElUcmFuc2NyaXB0aW9uVXBkYXRlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi90bGQtYXVkaW8vbW9kZWxzJztcclxuaW1wb3J0IHsgSURpY3RhdGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vdGxkLWF1ZGlvL21vZGVscy9kaWN0YXRlLWNvbmZpZ3VyYXRpb25pLm1vZGVsJztcclxuaW1wb3J0IHsgQXVkaW9SZWNvcmRTZXJ2aWNlLCBUbGRWb2ljZUlucHV0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RsZC1hdWRpby9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLCBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdGxkLWNvbW1vbi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRsZFNjcm9sbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzL3Njcm9sbC90bGQtc2Nyb2xsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVGaWxlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RsZC1kb2N1bWVudC9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGxkLXRyYW5zbGF0ZS10ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVTb3VyY2VDb21wb25lbnQgfSBmcm9tICcuLi90bGQtdHJhbnNsYXRlLXNvdXJjZS90bGQtdHJhbnNsYXRlLXNvdXJjZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3RpdmVEYXRhLCBBbGVydFNlcnZpY2UsIENvbnZlcnNpb25IZWxwZXIsIEZpbGVVcGxvYWRFcnJvciB9IGZyb20gJ0B0aWxkZS1ubHAvbmd4LWNvbW1vbic7XHJcbmltcG9ydCB7IFRsZERpY3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi90bGQtYXVkaW8nO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGxkLXRyYW5zbGF0ZS10ZXh0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGxkLXRyYW5zbGF0ZS10ZXh0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90bGQtdHJhbnNsYXRlLXRleHQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGxkVHJhbnNsYXRlVGV4dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKFwic291cmNlQ29tcG9uZW50XCIpIHNvdXJjZUNvbXBvbmVudDogVGxkVHJhbnNsYXRlU291cmNlQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWN0YXRlXCIpIGRpY3RhdGVDb21wb25lbnQ6IFRsZERpY3RhdGVDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIGZpbGVQcmV2aWV3UHJvZ3Jlc3M6IG51bWJlcjtcclxuICBAT3V0cHV0KCkgb25GaWxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsZVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZVtdPigpO1xyXG5cclxuICBhY3RpdmVEYXRhOiBBY3RpdmVEYXRhO1xyXG4gIGdldCBzeXN0ZW1JZCgpIHsgcmV0dXJuIHRoaXMuYWN0aXZlRGF0YT8uc3lzdGVtSWQ7IH07XHJcbiAgLy9wYXJhbXMgZnJvbSBjb25maWcgc2VydmljZS5cclxuICBnZXQgYWxsb3dlZEZpbGVUeXBlcygpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLmFsbG93ZWRGaWxlVHlwZXM7IH07XHJcbiAgZ2V0IGV4dGVuZGVkRmlsZVR5cGVzKCk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMuY29uZmlnLmZpbGVDb25maWcuZXh0ZW5kZWRGaWxlVHlwZXM7IH07XHJcbiAgZ2V0IGFwcElkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZy5jb3JlQ29uZmlnLmFwcElkOyB9O1xyXG4gIGdldCBoaWdobGlnaHQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLmhpZ2hsaWdodDsgfTtcclxuICBnZXQgZ3JhbUNoZWNrKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy5jaGVja1NvdXJjZUdyYW1tYXI7IH07XHJcbiAgZ2V0IGZpbGVVcGxvYWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLmZpbGVVcGxvYWQgJiYgISh0aGlzLmlzRGljdGF0aW5nIHx8IHRoaXMuYXVkaW9TZXJ2aWNlPy5pc1JlY29yZGluZyB8fCB0aGlzLnZvaWNlSW5wdXRTZXJ2aWNlLmlzUHJvY2Vzc2luZyk7IH07XHJcbiAgZ2V0IGlzQXV0aCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmNvcmVDb25maWcuaXNBdXRoOyB9O1xyXG4gIGdldCBtYXhGaWxlVXBsb2FkU2l6ZSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb25maWcuZmlsZUNvbmZpZy5tYXhTaXplOyB9O1xyXG4gIGdldCBtdWx0aXBsZUZpbGVzKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWcuZmlsZUNvbmZpZy5udW1iZXJPZkZpbGVzQWxsb3dlZCA+IDE7IH07XHJcbiAgZ2V0IHVwZGF0ZVRyYW5zbGF0aW9uVXJsKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLnVwZGF0ZVRyYW5zbGF0aW9uVXJsOyB9O1xyXG4gIGdldCBhbGxvd1dlYnNpdGVUcmFuc2xhdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcuYWxsb3dXZWJzaXRlVHJhbnNsYXRpb247IH07XHJcbiAgZ2V0IGF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy5hdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZTsgfTtcclxuICBnZXQgd2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXg7IH07XHJcbiAgZ2V0IHdlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLndlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4OyB9O1xyXG4gIGdldCBzaG93U3VnZ2VzdGlvbnMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmhhc1RyYW5zbGF0ZWRQYXJhZ3JhcGhzICYmIHRoaXMuY29uZmlnLnRleHRDb25maWcuc2hvd1N1Z2dlc3Rpb25zICYmICF0aGlzLnVybFRvVHJhbnNsYXRlIH07XHJcbiAgZ2V0IHRleHRhcmVhRGlzYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmF1ZGlvU2VydmljZS5pc1JlY29yZGluZyB8fCB0aGlzLnZvaWNlSW5wdXRTZXJ2aWNlLmlzUHJvY2Vzc2luZyB8fCB0aGlzLmlzRGljdGF0aW5nIHx8IHRoaXMudGxkU3lzdGVtLm5vU3lzdGVtc0Vycm9yIH07XHJcbiAgZ2V0IGZpbGVVcGxvYWREaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGxkU3lzdGVtLm5vU3lzdGVtc0Vycm9yIH07XHJcbiAgZ2V0IGlzRGljdGF0aW5nKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5pc0RpY3RhdGluZzsgfTtcclxuICBnZXQgbWF4RGljdGF0ZUxlbmd0aCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLm1heGltdW1SZWNvcmRUaW1lOyB9XHJcbiAgZ2V0IHNvdXJjZUxhbmd1YWdlKCkgeyByZXR1cm4gdGhpcy5hY3RpdmVEYXRhPy5zb3VyY2VMYW5nLmxhbmc7IH1cclxuICBnZXQgaGFzVHJhbnNsYXRlZFBhcmFncmFwaHMoKSB7IHJldHVybiB0aGlzLnRhcmdldFBhcmFncmFwaHM/Lmxlbmd0aCA+IDAgfVxyXG4gIGdldCBpc0VtcHR5VGFyZ2V0KCkgeyByZXR1cm4gIXRoaXMuaGFzVHJhbnNsYXRlZFBhcmFncmFwaHMgJiYgIXRoaXMudXJsVG9UcmFuc2xhdGUgJiYgIXRoaXMuaGFzRGljdGlvbmFyeSB9XHJcbiAgZ2V0IHNob3dUYXJnZXRQbGFjZWhvbGRlcigpIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcuc2hvd1RhcmdldFBsYWNlaG9sZGVyIH1cclxuICBnZXQgc2hvd0V4dGVuc2lvblBvcHVwKCkgeyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy5zaG93RXh0ZW5zaW9uUG9wdXAgJiYgdGhpcy52aXNpYmxlRXh0ZW5zaW9uQ291bnQgPCB0aGlzLmFsbG93ZWRGaWxlVHlwZXMubGVuZ3RoIH1cclxuICBnZXQgdmlzaWJsZUV4dGVuc2lvbkNvdW50KCkgeyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy52aXNpYmxlRXh0ZW5zaW9uQ291bnQgfTtcclxuICBnZXQgdGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3MoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzIH07XHJcbiAgZ2V0IHRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5ncyB9O1xyXG4gIGdldCB1cGxvYWRJY29uTmFtZSgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmNvcmVDb25maWcudXBsb2FkSWNvbk5hbWUgfTtcclxuXHJcbiAgYXVkaW9JbnB1dFZpc2libGU6IGJvb2xlYW47XHJcbiAgdGFyZ2V0U2VudGVuY2VTZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGdldCB1cmxUb1RyYW5zbGF0ZSgpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UudXJsVG9UcmFuc2xhdGU7IH07XHJcblxyXG4gIGFsbG93ZWRUeXBlc1dpdGhvdXREb3RzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICByZWFkb25seSBjb3B5TWVzc2FnZUlkID0gXCJ0bGQtY29weS1zdWNjZXNzXCI7XHJcbiAgcmVhZG9ubHkgY29weU1lc3NhZ2VDbG9zZUJ1dHRvbklkID0gXCJ0bGQtY29weS1zdWNjZXNzLWNsb3NlXCI7XHJcbiAgcmVhZG9ubHkgY29weUJ1dHRvbklkID0gXCJ0bGQtY29weS10by1jbGlwYm9hcmRcIjtcclxuXHJcbiAgZ2V0IHRyYW5zbGF0ZWRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50cmFuc2xhdGVkVGV4dDtcclxuICB9XHJcblxyXG4gIGdldCBmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhbnNsYXRpb25FcnJvcigpIHtcclxuICAgIHJldHVybiB0aGlzLnNvdXJjZSAmJiAhdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5pc1RyYW5zbGF0aW5nO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0RpY3Rpb25hcnkoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmhhc0RpY3Rpb25hcnk7IH1cclxuICBnZXQgZGljdGlvbmFyeUVudHJ5KCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5kaWN0aW9uYXJ5RW50cnk7IH1cclxuICBnZXQgc291cmNlKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5zb3VyY2VUZXh0OyB9XHJcbiAgZ2V0IHRyYW5zbGF0ZVVybFJlZGlyZWN0KCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50cmFuc2xhdGVVcmxSZWRpcmVjdDsgfVxyXG4gIGdldCBzaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNob3VsZFNob3dQcm9ncmVzc0luZGljYXRvcjsgfVxyXG4gIGdldCBoaWRlU291cmNlQWN0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLnNvdXJjZSAmJiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLmhpZGVTb3VyY2VBY3Rpb25zV2hlbkhhc1RleHRNb2JpbGUgJiYgdGhpcy5pc01vYmlsZSAmJiAhdGhpcy5kaWN0YXRlQ29tcG9uZW50Py5pc1JlY29yZGluZztcclxuICB9XHJcbiAgZ2V0IHBhcmFncmFwaHMoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnBhcmFncmFwaHM7IH07XHJcbiAgZ2V0IHNvdXJjZVBhcmFncmFwaHMoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZVBhcmFncmFwaHM7IH1cclxuICBnZXQgdGFyZ2V0UGFyYWdyYXBocygpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UudGFyZ2V0UGFyYWdyYXBoczsgfVxyXG5cclxuICBnZXQgdGFyZ2V0V3JhcHBlck92ZXJmbG93KCkge1xyXG4gICAgY29uc3QgdGFyZ2V0V3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YXJnZXQtbWFpbicpO1xyXG4gICAgY29uc3QgdGFyZ2V0V3JhcHBlck92ZXJmbG93ID0gdGFyZ2V0V3JhcHBlci5zY3JvbGxIZWlnaHQgPiB0YXJnZXRXcmFwcGVyLmNsaWVudEhlaWdodDsgXHJcbiAgICByZXR1cm4gdGFyZ2V0V3JhcHBlck92ZXJmbG93O1xyXG4gIH1cclxuXHJcbiAgZGljdGF0ZUNvbmZpZzogSURpY3RhdGVDb25maWd1cmF0aW9uO1xyXG4gIHZpc2libGVFeHRlbnNpb25zOiBzdHJpbmc7XHJcbiAgbWF4U2l6ZU1COiBudW1iZXI7XHJcblxyXG4gIHByaXZhdGUgaXNNb2JpbGU6IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbW9iaWxlQnJlYWtwb2ludHMgPSBbQnJlYWtwb2ludHMuWFNtYWxsXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVRleHRTZXJ2aWNlOiBUbGRUcmFuc2xhdGVUZXh0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2xpcGJvYXJkOiBDbGlwYm9hcmQsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0czogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRsZFNjcm9sbFNlcnZpY2U6IFRsZFNjcm9sbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRsZFN5c3RlbTogVGxkVHJhbnNsYXRlU3lzdGVtTWFuYWdlbWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1ZGlvU2VydmljZTogQXVkaW9SZWNvcmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB2b2ljZUlucHV0U2VydmljZTogVGxkVm9pY2VJbnB1dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVTZXJ2aWNlOiBUbGRUcmFuc2xhdGVGaWxlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5saXN0ZW5PbkNoYW5nZXMoKTtcclxuICAgIHRoaXMuZGljdGF0ZUNvbmZpZyA9IHtcclxuICAgICAgYXBwSWQ6IHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLmFwcElkLFxyXG4gICAgICBhcHBTZWNyZXQ6IHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLmFwcFNlY3JldCxcclxuICAgICAgbWF4TGVuZ3RoOiB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5tYXhpbXVtUmVjb3JkVGltZSxcclxuICAgICAgYXBpVXJsOiB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5kaWN0YXRlQXBpVXJsXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aXNpYmxlRXh0ZW5zaW9ucyA9IHRoaXMuYWxsb3dlZEZpbGVUeXBlcy5zbGljZSgwLCB0aGlzLnZpc2libGVFeHRlbnNpb25Db3VudCkuam9pbihcIiwgXCIpO1xyXG4gICAgdGhpcy5hbGxvd2VkRmlsZVR5cGVzLmZvckVhY2goKGVsKSA9PiB0aGlzLmFsbG93ZWRUeXBlc1dpdGhvdXREb3RzLnB1c2goZWwucmVwbGFjZSgnLicsICcnKSkpO1xyXG5cclxuICAgIHRoaXMubWF4U2l6ZU1CID0gQ29udmVyc2lvbkhlbHBlci5ieXRlc1RvTWIodGhpcy5jb25maWcuZmlsZUNvbmZpZy5tYXhTaXplKTtcclxuXHJcbiAgICB0aGlzLnRsZFN5c3RlbS5nZXRBY3RpdmVEYXRhKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgoeCwgeSkgPT4geCAmJiB5ICYmIHgubGFuZ3VhZ2VJZCA9PSB5Lmxhbmd1YWdlSWQpKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHN5c3QpID0+IHtcclxuICAgICAgICBpZiAoIXN5c3QpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRhID0gc3lzdDtcclxuICAgICAgICB0aGlzLmF1ZGlvSW5wdXRWaXNpYmxlID0gdGhpcy5jb25maWcuYXVkaW9Db25maWcuYXVkaW9UZXh0SW5wdXQgJiYgdGhpcy5jb25maWcuYXVkaW9Db25maWcuc291cmNlTGFuZ3VhZ2VzPy5pbmNsdWRlcyh0aGlzLmFjdGl2ZURhdGE/LnNvdXJjZUxhbmcubGFuZyk7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRGF0YS5yZXRyYW5zbGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5yZXRyYW5zbGF0ZSh7IHN5c3RlbUNoYW5nZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgdGhpcy50bGRTY3JvbGxTZXJ2aWNlLnN1YnNjcmliZVRvU2Nyb2xsKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLmF1ZGlvVGV4dElucHV0KSB7XHJcbiAgICAgIHRoaXMuYXVkaW9TZXJ2aWNlLm9uUmVjb3JkU3RhcnQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jaGFuZ2VTb3VyY2UoeyBwaHJhc2U6IFwiXCIgfSk7XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLnZvaWNlSW5wdXRTZXJ2aWNlLm9uVHJhbnNjcmlidGlvblRleHRVcGRhdGVkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBJVHJhbnNjcmlwdGlvblVwZGF0ZU1vZGVsKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNoYW5nZVNvdXJjZSh7IHBocmFzZTogZXZlbnQudGV4dCwgc3dhcFN5c3RlbXM6IGZhbHNlLCBkaXNhYmxlQXV0b21hdGljVHJhbnNsYXRpb246ICFldmVudC5jb21wbGV0ZWQgfSk7XHJcbiAgICAgICAgICBpZiAoZXZlbnQuY29tcGxldGVkICYmICghZXZlbnQudGV4dCB8fCBldmVudC50ZXh0ID09PSBcIlwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0cy53YXJuaW5nKGBFUlJPUlMuQVVESU8uJHtBdWRpb0Vycm9yQ2FzZS5OT19URVhUX1JFQ09HTklaRUR9YClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlVG9CcmVha3BvaW50T2JzZXJ2ZXIoKTtcclxuICB9XHJcblxyXG4gIGNvcHkoKSB7XHJcbiAgICB0aGlzLmNsaXBib2FyZC5jb3B5KHRoaXMudHJhbnNsYXRlZFRleHQpO1xyXG4gICAgdGhpcy5hbGVydHMuc3VjY2VzcyhcIlRMRF9UUkFOU0xBVEUuVEVYVF9DT1BJRURcIiwgeyBpZDogdGhpcy5jb3B5TWVzc2FnZUlkLCBjbG9zZUJ1dHRvbklkOiB0aGlzLmNvcHlNZXNzYWdlQ2xvc2VCdXR0b25JZCwgcGFyZW50SWQ6IHRoaXMuY29weUJ1dHRvbklkIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uub25UcmFuc2xhdGVCdXR0b25DbGljaygpO1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoRm9jdXNGcm9tQ29weShldmVudCkge1xyXG4gICAgY29uc3QgY29weU1lc3NhZ2VDbG9zZUJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuY29weU1lc3NhZ2VDbG9zZUJ1dHRvbklkKT8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJidXR0b25cIik/Lml0ZW0oMCk7XHJcbiAgICBpZiAoY29weU1lc3NhZ2VDbG9zZUJ1dHRvbikge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBjb3B5TWVzc2FnZUNsb3NlQnV0dG9uLmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaWxlQ2hhbmdlKGZpbGVzOiBGaWxlW10pIHtcclxuICAgIHRoaXMub25GaWxlQ2hhbmdlLmVtaXQoZmlsZXMpO1xyXG4gIH1cclxuXHJcbiAgZmlsZVVwbG9hZEVycm9yKGVycm9yOiBhbnkpIHtcclxuICAgIHRoaXMuZmlsZVNlcnZpY2UuZmlsZVVwbG9hZEVycm9yKGVycm9yIGFzIEZpbGVVcGxvYWRFcnJvcik7XHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZVRvVHJhbnNsYXRlZFVybCgpIHtcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHRoaXMudHJhbnNsYXRlVXJsUmVkaXJlY3QpO1xyXG4gIH1cclxuXHJcbiAgZGljdGF0ZVN0YXJ0U3RvcChpc0RpY3RhdGluZzogYm9vbGVhbikge1xyXG4gICAgY29uc3QgcGhyYXNlID0gYCR7dGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5zb3VyY2VUZXh0fSR7dGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5zb3VyY2VUZXh0Py5sZW5ndGggPiAwID8gXCIgXCIgOiBcIlwifSR7dGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5zb3VyY2VUZXh0SHlwb3RoZXNpc31gO1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5pc0RpY3RhdGluZyA9IGlzRGljdGF0aW5nO1xyXG4gICAgLy8gVHJhbnNsYXRpb24gaGFzIGVuZGVkLlxyXG4gICAgaWYgKCFpc0RpY3RhdGluZykge1xyXG4gICAgICBpZiAodGhpcy5jb25maWcuYXVkaW9Db25maWcucHVuY3R1YXRpb25NZXNzYWdlICYmIHBocmFzZT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRzLndhcm5pbmcoXCJBVURJTy5QVU5DVFVBVElPTl9NRVNTQUdFXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNoYW5nZVNvdXJjZShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwaHJhc2UsXHJcbiAgICAgICAgICBkaXNhYmxlQXV0b21hdGljVHJhbnNsYXRpb246IHRoaXMuaXNEaWN0YXRpbmcgfHwgdGhpcy5jb25maWcuYXVkaW9Db25maWcuZGlzYWJsZUF1dG9tYXRpY1RyYW5zbGF0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2hhbmdlU291cmNlSHlwb3RoZXNpcyhcIlwiKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNsZWFyU291cmNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaWN0YXRlUmVzdWx0KHJlc3VsdDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNoYW5nZVNvdXJjZUh5cG90aGVzaXMoXCJcIik7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNoYW5nZVNvdXJjZSh7IHBocmFzZTogcmVzdWx0LCBkaXNhYmxlQXV0b21hdGljVHJhbnNsYXRpb246IHRoaXMuaXNEaWN0YXRpbmcgfSlcclxuICB9XHJcblxyXG4gIGRpY3RhdGVQYXJ0aWFsUmVzdWx0KHBhcnRpYWxSZXN1bHQ6IHN0cmluZykge1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jaGFuZ2VTb3VyY2VIeXBvdGhlc2lzKHBhcnRpYWxSZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgZGljdGF0ZUVycm9yKGVycm9yOiBBdWRpb0Vycm9yQ2FzZSkge1xyXG4gICAgaWYgKGVycm9yID09PSBBdWRpb0Vycm9yQ2FzZS5NQVhfVElNRV9FWENFRURFRCkge1xyXG4gICAgICBsZXQgdGltZVN0cmluZyA9IFwiXCI7XHJcbiAgICAgIGNvbnN0IG1heExlbmd0aFRpbWUgPSBuZXcgRGF0ZSgwLCAwLCAwLCAwLCAwLCB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5tYXhpbXVtUmVjb3JkVGltZSk7XHJcblxyXG4gICAgICBjb25zdCBtaW51dGVzID0gbWF4TGVuZ3RoVGltZS5nZXRNaW51dGVzKCk7XHJcbiAgICAgIGlmIChtaW51dGVzID4gMCkge1xyXG4gICAgICAgIHRpbWVTdHJpbmcgKz0gYCR7bWludXRlc30gbWludXRlc2A7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHNlY29uZHMgPSBtYXhMZW5ndGhUaW1lLmdldFNlY29uZHMoKTtcclxuICAgICAgaWYgKHNlY29uZHMgPiAwKSB7XHJcbiAgICAgICAgdGltZVN0cmluZyArPSBgJHtzZWNvbmRzfSBzZWNvbmRzYFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWxlcnRzLndhcm5pbmcoYEVSUk9SUy5BVURJTy4ke2Vycm9yfWAsIHsgdGltZVN0cmluZyB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGVycm9yID09PSBBdWRpb0Vycm9yQ2FzZS5OT19TUEVFQ0gpIHtcclxuICAgICAgdGhpcy5hbGVydHMud2FybmluZyhgRVJST1JTLkFVRElPLiR7ZXJyb3J9YCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5hbGVydHMudW5oYW5kZWxlZEVycm9yKHsgRXJyb3JDb2RlOiBlcnJvciB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyU291cmNlKCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jbGVhclNvdXJjZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnN0b3BMaXN0ZW5pbmdUb0NoYW5nZXMoKTtcclxuICAgIHRoaXMudGxkU2Nyb2xsU2VydmljZS51bnN1YnNjcmliZVRvU2Nyb2xsKCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQobnVsbClcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlUHJvZ3Jlc3NJbmRpY2F0b3IoKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmhpZGVQcm9ncmVzc0luZGljYXRvcigpO1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5zdG9wVHJhbnNsYXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vIG5lZWQgdG8gc3Vic2NyaWJlIHRvIGdldCBpZiBpcyBtb2JpbGUgdmlldyBzbyBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBoaWRlIHNvdXJjZSBhY3Rpb24gcm93LlxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9CcmVha3BvaW50T2JzZXJ2ZXIoKSB7XHJcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMubW9iaWxlQnJlYWtwb2ludHMpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcclxuICAgICAgICB0aGlzLmlzTW9iaWxlID0gc3RhdGUubWF0Y2hlcztcclxuICAgICAgfSlcclxuICB9XHJcblxyXG59XHJcbiIsIjwhLS0gTk9URS4gdGxkLXNvdXJjZS1hbmQtdGFyZ2V0LXdyYXBwZXIgdXNlcyBtdWx0aXBsZSBjb250ZW50IHByb2plY3Rpb25zLCBzbyBtaWdodCBzZWVtIGNvbmZ1c2luZyBmaXJzdCwgYnV0IGVsZW1lbnRzIGFyZSBkaXNwbGF5ZWQgYXQgdGhlaXIgcGxhY2VzIGJhc2VkIG9uIHRsZC1zb3VyY2UtYW5kLXRhcmdldC13cmFwcGVyIGNvbXBvbmVudFxyXG5odHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvY29udGVudC1wcm9qZWN0aW9uI211bHRpLXNsb3QtY29udGVudC1wcm9qZWN0aW9uXHJcbi0tPlxyXG48dGxkLXNvdXJjZS1hbmQtdGFyZ2V0LXdyYXBwZXIgW3RleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzXT1cInRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzXCJcclxuICBbY2xlYXJTb3VyY2VWaXNpYmxlXT1cInNvdXJjZT8ubGVuZ3RoPjBcIiAob25Tb3VyY2VDbGVhcik9XCJjbGVhclNvdXJjZSgpXCJcclxuICBbY2xlYXJEaXNhYmxlZF09XCJ0ZXh0YXJlYURpc2FibGVkXCIgW2NsZWFyU291cmNlVG9vbHRpcF09XCInVExEX1RSQU5TTEFURS5DTEVBUl9TT1VSQ0VfVE9PTFRJUCdcIlxyXG4gIFtuZ0NsYXNzXT1cInsnaGlnaGxpZ2h0LWFjdGl2ZSc6IGhpZ2hsaWdodCwgJ2dyYW1jaGVjay1hY3RpdmUnOiBncmFtQ2hlY2ssICdlbXB0eS10YXJnZXQnOiBpc0VtcHR5VGFyZ2V0fVwiPlxyXG4gIDxkaXYgc291cmNlTWFpbiBjbGFzcz1cInNvdXJjZS1tYWluXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICAgIDx0bGQtdHJhbnNsYXRlLXNvdXJjZSBbdGV4dGFyZWFEaXNhYmxlZF09XCJ0ZXh0YXJlYURpc2FibGVkXCIgI3NvdXJjZUNvbXBvbmVudCBmeEZsZXhcclxuICAgICAgW3NvdXJjZVBhcmFncmFwaHNdPVwic291cmNlUGFyYWdyYXBoc1wiPjwvdGxkLXRyYW5zbGF0ZS1zb3VyY2U+XHJcbiAgPC9kaXY+XHJcbiAgPG5nLWNvbnRhaW5lciBzb3VyY2VBY3Rpb25zICpuZ0lmPVwiIWhpZGVTb3VyY2VBY3Rpb25zXCI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBjbGFzcz1cImJhc2ljLXBhZGRpbmdcIiBmeExheW91dEdhcD1cIjFlbVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXVkaW9JbnB1dFZpc2libGVcIj5cclxuICAgICAgICA8dGxkLWRpY3RhdGUgI2RpY3RhdGUgW2NvbmZpZ3VyYXRpb25dPVwiZGljdGF0ZUNvbmZpZ1wiIFtuZ0NsYXNzXT1cInsnZnVsbC13aWR0aCcgOiAhZmlsZVVwbG9hZH1cIlxyXG4gICAgICAgICAgKGlzRGljdGF0aW5nKT1cImRpY3RhdGVTdGFydFN0b3AoJGV2ZW50KVwiIChyZXN1bHQpPVwiZGljdGF0ZVJlc3VsdCgkZXZlbnQpXCJcclxuICAgICAgICAgIChwYXJ0aWFsUmVzdWx0KT1cImRpY3RhdGVQYXJ0aWFsUmVzdWx0KCRldmVudClcIiAob25FcnJvcik9XCJkaWN0YXRlRXJyb3IoJGV2ZW50KVwiIFtsYW5ndWFnZV09XCJzb3VyY2VMYW5ndWFnZVwiPlxyXG4gICAgICAgIDwvdGxkLWRpY3RhdGU+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiZmlsZVVwbG9hZFwiIGNsYXNzPVwiZmlsZS11cGxvYWQtd3JhcHBlclwiPlxyXG4gICAgICAgIDxsaWItZmlsZS11cGxvYWQgKGZpbGVDaGFuZ2UpPVwiZmlsZUNoYW5nZSgkZXZlbnQpXCIgW2FjY2VwdF09XCJhbGxvd2VkRmlsZVR5cGVzXCIgW21heFNpemVdPVwibWF4RmlsZVVwbG9hZFNpemVcIiBbdXBsb2FkSWNvbk5hbWVdPVwidXBsb2FkSWNvbk5hbWVcIlxyXG4gICAgICAgICAgW2V4dGVuZGVkQWNjZXB0TGlzdF09XCJleHRlbmRlZEZpbGVUeXBlc1wiIFttdWx0aXBsZV09XCJtdWx0aXBsZUZpbGVzXCIgKGVycm9yRXZlbnQpPVwiZmlsZVVwbG9hZEVycm9yKCRldmVudClcIlxyXG4gICAgICAgICAgW2ZpbGVQcmV2aWV3UHJvZ3Jlc3NdPVwiZmlsZVByZXZpZXdQcm9ncmVzc1wiIFtkaXNhYmxlZF09XCJmaWxlVXBsb2FkRGlzYWJsZWRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXBsb2FkLWZpbGUtdGV4dFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvIHRleHQtbC1zZW1pLWJvbGRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiJ0ZJTEVfVVBMT0FELlVQTE9BRCcgfCB0cmFuc2xhdGVcIiBjbGFzcz1cImFjY2VudC1jb2xvclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPiZuYnNwOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiJ0ZJTEVfVVBMT0FELkRSQUdfQU5EX0RST1AnIHwgdHJhbnNsYXRlXCIgZnhIaWRlLmx0LXNtPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiJ0ZJTEVfVVBMT0FELicrIChtdWx0aXBsZUZpbGVzPyAnRklMRVMnIDogJ0ZJTEUnKSB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzLmx0LXNtXT1cIidhY2NlbnQtY29sb3InXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtdXBsb2FkLWV4dGVuc2lvbnMgdGV4dC1tXCI+XHJcbiAgICAgICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e3Zpc2libGVFeHRlbnNpb25zfX0uIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWF4U2l6ZU1CXCIgW2lubmVySFRNTF09XCInRklMRV9VUExPQUQuTElNSVRTX01CJyB8IHRyYW5zbGF0ZToge21heFNpemVNQjogbWF4U2l6ZU1CfVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbGliLWZpbGUtdXBsb2FkPlxyXG4gICAgICAgIDxsaWItb3Blbi1leHRlbnNpb24tZGlhbG9nICpuZ0lmPVwic2hvd0V4dGVuc2lvblBvcHVwXCIgW2V4dGVuc2lvbnNdPVwiYWxsb3dlZFR5cGVzV2l0aG91dERvdHNcIj5cclxuICAgICAgICA8L2xpYi1vcGVuLWV4dGVuc2lvbi1kaWFsb2c+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxkaXYgdGFyZ2V0TWFpbiBjbGFzcz1cInRhcmdldC1tYWluXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFbXB0eVRhcmdldDsgZWxzZSB0cmFuc2xhdGVkVGV4dEJsb2NrXCI+XHJcbiAgICAgIDxwICpuZ0lmPVwic2hvd1RhcmdldFBsYWNlaG9sZGVyXCIgY2xhc3M9XCJkZXNjcmlwdGlvbi10ZXh0IHRhcmdldC1lbXB0eVwiXHJcbiAgICAgICAgW2lubmVySHRtbF09XCInVExEX1RSQU5TTEFURS5UQVJHRVRfREVTQ1JJUFRJT04nIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgIDwvcD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bmctY29udGFpbmVyIHRhcmdldEFjdGlvbnM+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGxkLXRyYW5zbGF0ZS10YXJnZXQtZm9vdGVyIGJhc2ljLXBhZGRpbmdcIiAqbmdJZj1cInNob3dTdWdnZXN0aW9ucyB8fCBzaG93UHJvZ3Jlc3NJbmRpY2F0b3JcIj5cclxuICAgICAgPHRsZC10cmFuc2xhdGUtc3VnZ2VzdCAqbmdJZj1cInNob3dTdWdnZXN0aW9uc1wiIFtzeXN0ZW1JZF09XCJzeXN0ZW1JZFwiIFt0YXJnZXRdPVwidGFyZ2V0UGFyYWdyYXBoc1wiXHJcbiAgICAgICAgW3NvdXJjZV09XCJzb3VyY2VQYXJhZ3JhcGhzXCI+XHJcbiAgICAgIDwvdGxkLXRyYW5zbGF0ZS1zdWdnZXN0PlxyXG4gICAgICA8cHJvZ3Jlc3MtaW5kaWNhdG9yIChvbkNsb3NlKT1cImNsb3NlUHJvZ3Jlc3NJbmRpY2F0b3IoKVwiICpuZ0lmPVwic2hvd1Byb2dyZXNzSW5kaWNhdG9yXCI+PC9wcm9ncmVzcy1pbmRpY2F0b3I+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC90bGQtc291cmNlLWFuZC10YXJnZXQtd3JhcHBlcj5cclxuXHJcblxyXG48IS0tIHRlbXBsYXRlcyB1c2VkIGZvciBlbHNlIGJsb2NrcyBpbiB0YXJnZXQgY29udGFpbmVyIC0tPlxyXG48bmctdGVtcGxhdGUgI3RyYW5zbGF0ZWRUZXh0QmxvY2s+XHJcbiAgPGRpdiBbY2xhc3MudHJhbnNsYXRlZC1zb3VyY2Utb3ZlcmZsb3ddPVwidGFyZ2V0V3JhcHBlck92ZXJmbG93XCIgY2xhc3M9XCJ0cmFuc2xhdGVkLXNvdXJjZVwiIFtjbGFzcy5zZWxlY3RhYmxlLXNlbnRlbmNlXT1cInNob3dTdWdnZXN0aW9uc1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF1cmxUb1RyYW5zbGF0ZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFyZ2V0LXdyYXBwZXItYWN0aW9uLWJ1dHRvbnNcIj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkXCIgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwidGxkLWNvcHktdHJhbnNsYXRpb25cIiAoY2xpY2spPVwiY29weSgpXCJcclxuICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eydUT09MVElQUy5DT1BZJyB8IHRyYW5zbGF0ZX19XCIgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJjb3B5TWVzc2FnZUlkXCJcclxuICAgICAgICAgIChrZXlkb3duLlRhYik9XCJzd2l0Y2hGb2N1c0Zyb21Db3B5KCRldmVudClcIiBbYXR0ci5JZF09XCJjb3B5QnV0dG9uSWRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuQ09QWScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgY29udGVudF9jb3B5XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCB8fCB0cmFuc2xhdGlvbkVycm9yXCIgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwidGxkLXJlZnJlc2gtdHJhbnNsYXRpb25cIiAoY2xpY2spPVwicmVmcmVzaCgpXCJcclxuICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eydUT09MVElQUy5SRUZSRVNIJyB8IHRyYW5zbGF0ZX19XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCIgYXJpYS1oaWRkZW49XCJmYWxzZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FSSUFfTEFCRUxTLlJFRlJFU0gnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgIHJlZnJlc2hcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8dGxkLXRleHQtdG8tc3BlZWNoICpuZ0lmPVwidGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3MgJiYgZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkXCIgW3NldHRpbmdzXT1cInRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzXCI+XHJcbiAgICAgICAgPC90bGQtdGV4dC10by1zcGVlY2g+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwYXJhZ3JhcGggb2YgdGFyZ2V0UGFyYWdyYXBoc1wiPlxyXG4gICAgICAgIDx0bGQtaGlnaGxpZ2h0LXRyZWUgW2hpZ2hsaWdodF09XCJoaWdobGlnaHRcIiBbdHJlZV09XCJwYXJhZ3JhcGhcIiBbc2VsZWN0U2VudGVuY2VdPVwic2hvd1N1Z2dlc3Rpb25zXCI+XHJcbiAgICAgICAgPC90bGQtaGlnaGxpZ2h0LXRyZWU+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cImZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZFwiIGNsYXNzPVwiZGljdGlvbmFyeS13cmFwcGVyXCI+XHJcbiAgICAgICAgPHRsZC1kaWN0aW9uYXJ5IFtkaWN0aW9uYXJ5XT1cImRpY3Rpb25hcnlFbnRyeVwiPjwvdGxkLWRpY3Rpb25hcnk+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwidXJsVG9UcmFuc2xhdGVcIiBjbGFzcz1cInRhcmdldC11cmwtY29udGFpbmVyXCI+XHJcbiAgICAgIDxhIFthdHRyLmhyZWZdPVwidHJhbnNsYXRlVXJsUmVkaXJlY3RcIiB0YXJnZXQ9XCJfYmxhbmtcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgY2xhc3M9XCJnby10by13ZWJ0cmFuc2xhdGVcIj5cclxuICAgICAgICB7e3VybFRvVHJhbnNsYXRlfX1cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCIgY29sb3I9XCJhY2NlbnRcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuT1BFTl9JTl9ORVcnXCI+XHJcbiAgICAgICAgICBvcGVuX2luX25ld1xyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9hPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RsZC10cmFuc2xhdGUvc3JjL2xpYi9tb2R1bGVzL3RsZC10ZXh0L2NvbXBvbmVudHMvdGxkLXRyYW5zbGF0ZS10ZXh0L3RsZC10cmFuc2xhdGUtdGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9jb21wb25lbnRzL3RsZC10cmFuc2xhdGUtdGV4dC90bGQtdHJhbnNsYXRlLXRleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFzQixXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQTZCLE1BQU0sMkJBQTJCLENBQUM7QUFRdEYsT0FBTyxFQUE0QixnQkFBZ0IsRUFBbUIsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRyxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRaEMsTUFBTSxPQUFPLHlCQUF5QjtJQWtHakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQTNHVyxlQUFl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YXJkJztcclxuaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaW5hbGl6ZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBdWRpb0Vycm9yQ2FzZSwgSVRyYW5zY3JpcHRpb25VcGRhdGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3RsZC1hdWRpby9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJRGljdGF0ZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi8uLi8uLi90bGQtYXVkaW8vbW9kZWxzL2RpY3RhdGUtY29uZmlndXJhdGlvbmkubW9kZWwnO1xyXG5pbXBvcnQgeyBBdWRpb1JlY29yZFNlcnZpY2UsIFRsZFZvaWNlSW5wdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdGxkLWF1ZGlvL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlU3lzdGVtTWFuYWdlbWVudFNlcnZpY2UsIFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkU2Nyb2xsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMvc2Nyb2xsL3RsZC1zY3JvbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZUZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdGxkLWRvY3VtZW50L3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlVGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVNvdXJjZUNvbXBvbmVudCB9IGZyb20gJy4uL3RsZC10cmFuc2xhdGUtc291cmNlL3RsZC10cmFuc2xhdGUtc291cmNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFjdGl2ZURhdGEsIEFsZXJ0U2VydmljZSwgQ29udmVyc2lvbkhlbHBlciwgRmlsZVVwbG9hZEVycm9yIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgVGxkRGljdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RsZC1hdWRpbyc7XHJcbmltcG9ydCB7IExMTVNlcnZpY2UsIExMTVVzZUNhc2UgfSBmcm9tICdAdGlsZGUtbmxwL25neC1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IG1hcmtlZCB9IGZyb20gJ21hcmtlZCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0bGQtdHJhbnNsYXRlLXRleHQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90bGQtdHJhbnNsYXRlLXRleHQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RsZC10cmFuc2xhdGUtdGV4dC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUbGRUcmFuc2xhdGVUZXh0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoXCJzb3VyY2VDb21wb25lbnRcIikgc291cmNlQ29tcG9uZW50OiBUbGRUcmFuc2xhdGVTb3VyY2VDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChcImRpY3RhdGVcIikgZGljdGF0ZUNvbXBvbmVudDogVGxkRGljdGF0ZUNvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KCkgZmlsZVByZXZpZXdQcm9ncmVzczogbnVtYmVyO1xyXG4gIEBPdXRwdXQoKSBvbkZpbGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWxlW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlW10+KCk7XHJcblxyXG4gIGFjdGl2ZURhdGE6IEFjdGl2ZURhdGE7XHJcbiAgZ2V0IHN5c3RlbUlkKCkgeyByZXR1cm4gdGhpcy5hY3RpdmVEYXRhPy5zeXN0ZW1JZDsgfTtcclxuICAvL3BhcmFtcyBmcm9tIGNvbmZpZyBzZXJ2aWNlLlxyXG4gIGdldCBhbGxvd2VkRmlsZVR5cGVzKCk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMuY29uZmlnLmZpbGVDb25maWcuYWxsb3dlZEZpbGVUeXBlczsgfTtcclxuICBnZXQgZXh0ZW5kZWRGaWxlVHlwZXMoKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5jb25maWcuZmlsZUNvbmZpZy5leHRlbmRlZEZpbGVUeXBlczsgfTtcclxuICBnZXQgYXBwSWQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnLmNvcmVDb25maWcuYXBwSWQ7IH07XHJcbiAgZ2V0IGhpZ2hsaWdodCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcuaGlnaGxpZ2h0OyB9O1xyXG4gIGdldCBncmFtQ2hlY2soKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLmNoZWNrU291cmNlR3JhbW1hcjsgfTtcclxuICBnZXQgZmlsZVVwbG9hZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnLmZpbGVDb25maWcuZmlsZVVwbG9hZCAmJiAhKHRoaXMuaXNEaWN0YXRpbmcgfHwgdGhpcy5hdWRpb1NlcnZpY2U/LmlzUmVjb3JkaW5nIHx8IHRoaXMudm9pY2VJbnB1dFNlcnZpY2UuaXNQcm9jZXNzaW5nKTsgfTtcclxuICBnZXQgaXNBdXRoKCkgeyByZXR1cm4gdGhpcy5jb25maWcuY29yZUNvbmZpZy5pc0F1dGg7IH07XHJcbiAgZ2V0IG1heEZpbGVVcGxvYWRTaXplKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLm1heFNpemU7IH07XHJcbiAgZ2V0IG11bHRpcGxlRmlsZXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLm51bWJlck9mRmlsZXNBbGxvd2VkID4gMTsgfTtcclxuICBnZXQgdXBkYXRlVHJhbnNsYXRpb25VcmwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcudXBkYXRlVHJhbnNsYXRpb25Vcmw7IH07XHJcbiAgZ2V0IGFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy5hbGxvd1dlYnNpdGVUcmFuc2xhdGlvbjsgfTtcclxuICBnZXQgYXV0b1JlZGlyZWN0VG9XZWJUcmFuc2xhdGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLmF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlOyB9O1xyXG4gIGdldCB3ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy53ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeDsgfTtcclxuICBnZXQgd2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcud2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXg7IH07XHJcbiAgZ2V0IHNob3dTdWdnZXN0aW9ucygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuaGFzVHJhbnNsYXRlZFBhcmFncmFwaHMgJiYgdGhpcy5jb25maWcudGV4dENvbmZpZy5zaG93U3VnZ2VzdGlvbnMgJiYgIXRoaXMudXJsVG9UcmFuc2xhdGUgfTtcclxuICBnZXQgdGV4dGFyZWFEaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuYXVkaW9TZXJ2aWNlLmlzUmVjb3JkaW5nIHx8IHRoaXMudm9pY2VJbnB1dFNlcnZpY2UuaXNQcm9jZXNzaW5nIHx8IHRoaXMuaXNEaWN0YXRpbmcgfHwgdGhpcy50bGRTeXN0ZW0ubm9TeXN0ZW1zRXJyb3IgfTtcclxuICBnZXQgZmlsZVVwbG9hZERpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50bGRTeXN0ZW0ubm9TeXN0ZW1zRXJyb3IgfTtcclxuICBnZXQgaXNEaWN0YXRpbmcoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmlzRGljdGF0aW5nOyB9O1xyXG4gIGdldCBtYXhEaWN0YXRlTGVuZ3RoKCkgeyByZXR1cm4gdGhpcy5jb25maWcuYXVkaW9Db25maWcubWF4aW11bVJlY29yZFRpbWU7IH1cclxuICBnZXQgc291cmNlTGFuZ3VhZ2UoKSB7IHJldHVybiB0aGlzLmFjdGl2ZURhdGE/LnNvdXJjZUxhbmcubGFuZzsgfVxyXG4gIGdldCB0YXJnZXRMYW5ndWFnZSgpIHsgcmV0dXJuIHRoaXMuYWN0aXZlRGF0YT8udGFyZ2V0TGFuZy5sYW5nOyB9XHJcbiAgZ2V0IGhhc1RyYW5zbGF0ZWRQYXJhZ3JhcGhzKCkgeyByZXR1cm4gdGhpcy50YXJnZXRQYXJhZ3JhcGhzPy5sZW5ndGggPiAwIH1cclxuICBnZXQgaXNFbXB0eVRhcmdldCgpIHsgcmV0dXJuICF0aGlzLmhhc1RyYW5zbGF0ZWRQYXJhZ3JhcGhzICYmICF0aGlzLnVybFRvVHJhbnNsYXRlICYmICF0aGlzLmhhc0RpY3Rpb25hcnkgfVxyXG4gIGdldCBzaG93VGFyZ2V0UGxhY2Vob2xkZXIoKSB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLnNob3dUYXJnZXRQbGFjZWhvbGRlciB9XHJcbiAgZ2V0IHNob3dFeHRlbnNpb25Qb3B1cCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcuc2hvd0V4dGVuc2lvblBvcHVwICYmIHRoaXMudmlzaWJsZUV4dGVuc2lvbkNvdW50IDwgdGhpcy5hbGxvd2VkRmlsZVR5cGVzLmxlbmd0aCB9XHJcbiAgZ2V0IHZpc2libGVFeHRlbnNpb25Db3VudCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcudmlzaWJsZUV4dGVuc2lvbkNvdW50IH07XHJcbiAgZ2V0IHRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5ncyB9O1xyXG4gIGdldCB0ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5ncygpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UudGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3MgfTtcclxuICBnZXQgdXBsb2FkSWNvbk5hbWUoKSB7IHJldHVybiB0aGlzLmNvbmZpZy5jb3JlQ29uZmlnLnVwbG9hZEljb25OYW1lIH07XHJcbiAgZ2V0IGlzTGxtRW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmxsbUNvbmZpZy5pc0VuYWJsZWQgfTtcclxuXHJcbiAgYXVkaW9JbnB1dFZpc2libGU6IGJvb2xlYW47XHJcbiAgdGFyZ2V0U2VudGVuY2VTZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGdldCB1cmxUb1RyYW5zbGF0ZSgpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UudXJsVG9UcmFuc2xhdGU7IH07XHJcblxyXG4gIGFsbG93ZWRUeXBlc1dpdGhvdXREb3RzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICByZWFkb25seSBjb3B5TWVzc2FnZUlkID0gXCJ0bGQtY29weS1zdWNjZXNzXCI7XHJcbiAgcmVhZG9ubHkgY29weU1lc3NhZ2VDbG9zZUJ1dHRvbklkID0gXCJ0bGQtY29weS1zdWNjZXNzLWNsb3NlXCI7XHJcbiAgcmVhZG9ubHkgY29weUJ1dHRvbklkID0gXCJ0bGQtY29weS10by1jbGlwYm9hcmRcIjtcclxuXHJcbiAgZ2V0IHRyYW5zbGF0ZWRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50cmFuc2xhdGVkVGV4dDtcclxuICB9XHJcblxyXG4gIGdldCBmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNUcmFuc2xhdGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmlzVHJhbnNsYXRpbmc7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhbnNsYXRpb25FcnJvcigpIHtcclxuICAgIHJldHVybiB0aGlzLnNvdXJjZSAmJiAhdGhpcy5pc1RyYW5zbGF0aW5nO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0RpY3Rpb25hcnkoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmhhc0RpY3Rpb25hcnk7IH1cclxuICBnZXQgZGljdGlvbmFyeUVudHJ5KCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5kaWN0aW9uYXJ5RW50cnk7IH1cclxuICBnZXQgc291cmNlKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5zb3VyY2VUZXh0OyB9XHJcbiAgZ2V0IHRyYW5zbGF0ZVVybFJlZGlyZWN0KCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50cmFuc2xhdGVVcmxSZWRpcmVjdDsgfVxyXG4gIGdldCBzaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNob3VsZFNob3dQcm9ncmVzc0luZGljYXRvcjsgfVxyXG4gIGdldCBoaWRlU291cmNlQWN0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLnNvdXJjZSAmJiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLmhpZGVTb3VyY2VBY3Rpb25zV2hlbkhhc1RleHRNb2JpbGUgJiYgdGhpcy5pc01vYmlsZSAmJiAhdGhpcy5kaWN0YXRlQ29tcG9uZW50Py5pc1JlY29yZGluZztcclxuICB9XHJcbiAgZ2V0IHBhcmFncmFwaHMoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnBhcmFncmFwaHM7IH07XHJcbiAgZ2V0IHNvdXJjZVBhcmFncmFwaHMoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZVBhcmFncmFwaHM7IH1cclxuICBnZXQgdGFyZ2V0UGFyYWdyYXBocygpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UudGFyZ2V0UGFyYWdyYXBoczsgfVxyXG5cclxuICBnZXQgdGFyZ2V0V3JhcHBlck92ZXJmbG93KCkge1xyXG4gICAgY29uc3QgdGFyZ2V0V3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YXJnZXQtbWFpbicpO1xyXG4gICAgY29uc3QgdGFyZ2V0V3JhcHBlck92ZXJmbG93ID0gdGFyZ2V0V3JhcHBlci5zY3JvbGxIZWlnaHQgPiB0YXJnZXRXcmFwcGVyLmNsaWVudEhlaWdodDsgXHJcbiAgICByZXR1cm4gdGFyZ2V0V3JhcHBlck92ZXJmbG93O1xyXG4gIH1cclxuXHJcbiAgZGljdGF0ZUNvbmZpZzogSURpY3RhdGVDb25maWd1cmF0aW9uO1xyXG4gIHZpc2libGVFeHRlbnNpb25zOiBzdHJpbmc7XHJcbiAgbWF4U2l6ZU1COiBudW1iZXI7XHJcblxyXG4gIGlzU3VtbWFyYXppbmchOiBib29sZWFuO1xyXG4gIHN1bW1hcml6ZWRUZXh0ITogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIGlzTW9iaWxlOiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IG1vYmlsZUJyZWFrcG9pbnRzID0gW0JyZWFrcG9pbnRzLlhTbWFsbF07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVUZXh0U2VydmljZTogVGxkVHJhbnNsYXRlVGV4dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsaXBib2FyZDogQ2xpcGJvYXJkLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydHM6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0bGRTY3JvbGxTZXJ2aWNlOiBUbGRTY3JvbGxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0bGRTeXN0ZW06IFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdWRpb1NlcnZpY2U6IEF1ZGlvUmVjb3JkU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdm9pY2VJbnB1dFNlcnZpY2U6IFRsZFZvaWNlSW5wdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWxlU2VydmljZTogVGxkVHJhbnNsYXRlRmlsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJyZWFrcG9pbnRPYnNlcnZlcjogQnJlYWtwb2ludE9ic2VydmVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsbG1TZXJ2aWNlOiBMTE1TZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UubGlzdGVuT25DaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZUNoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNsZWFyU3VtbWFyaXphdGlvbigpO1xyXG4gICAgfSlcclxuICAgIHRoaXMuZGljdGF0ZUNvbmZpZyA9IHtcclxuICAgICAgYXBwSWQ6IHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLmFwcElkLFxyXG4gICAgICBhcHBTZWNyZXQ6IHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLmFwcFNlY3JldCxcclxuICAgICAgbWF4TGVuZ3RoOiB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5tYXhpbXVtUmVjb3JkVGltZSxcclxuICAgICAgYXBpVXJsOiB0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5kaWN0YXRlQXBpVXJsXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aXNpYmxlRXh0ZW5zaW9ucyA9IHRoaXMuYWxsb3dlZEZpbGVUeXBlcy5zbGljZSgwLCB0aGlzLnZpc2libGVFeHRlbnNpb25Db3VudCkuam9pbihcIiwgXCIpO1xyXG4gICAgdGhpcy5hbGxvd2VkRmlsZVR5cGVzLmZvckVhY2goKGVsKSA9PiB0aGlzLmFsbG93ZWRUeXBlc1dpdGhvdXREb3RzLnB1c2goZWwucmVwbGFjZSgnLicsICcnKSkpO1xyXG5cclxuICAgIHRoaXMubWF4U2l6ZU1CID0gQ29udmVyc2lvbkhlbHBlci5ieXRlc1RvTWIodGhpcy5jb25maWcuZmlsZUNvbmZpZy5tYXhTaXplKTtcclxuXHJcbiAgICB0aGlzLnRsZFN5c3RlbS5nZXRBY3RpdmVEYXRhKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgoeCwgeSkgPT4geCAmJiB5ICYmIHgubGFuZ3VhZ2VJZCA9PSB5Lmxhbmd1YWdlSWQpKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHN5c3QpID0+IHtcclxuICAgICAgICBpZiAoIXN5c3QpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRhID0gc3lzdDtcclxuICAgICAgICB0aGlzLmF1ZGlvSW5wdXRWaXNpYmxlID0gdGhpcy5jb25maWcuYXVkaW9Db25maWcuYXVkaW9UZXh0SW5wdXQgJiYgdGhpcy5jb25maWcuYXVkaW9Db25maWcuc291cmNlTGFuZ3VhZ2VzPy5pbmNsdWRlcyh0aGlzLmFjdGl2ZURhdGE/LnNvdXJjZUxhbmcubGFuZyk7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRGF0YS5yZXRyYW5zbGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5jbGVhclN1bW1hcml6YXRpb24oKTtcclxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UucmV0cmFuc2xhdGUoeyBzeXN0ZW1DaGFuZ2VkOiB0cnVlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG5cclxuICAgIHRoaXMudGxkU2Nyb2xsU2VydmljZS5zdWJzY3JpYmVUb1Njcm9sbCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5hdWRpb0NvbmZpZy5hdWRpb1RleHRJbnB1dCkge1xyXG4gICAgICB0aGlzLmF1ZGlvU2VydmljZS5vblJlY29yZFN0YXJ0LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2hhbmdlU291cmNlKHsgcGhyYXNlOiBcIlwiIH0pO1xyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy52b2ljZUlucHV0U2VydmljZS5vblRyYW5zY3JpYnRpb25UZXh0VXBkYXRlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChldmVudDogSVRyYW5zY3JpcHRpb25VcGRhdGVNb2RlbCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jaGFuZ2VTb3VyY2UoeyBwaHJhc2U6IGV2ZW50LnRleHQsIHN3YXBTeXN0ZW1zOiBmYWxzZSwgZGlzYWJsZUF1dG9tYXRpY1RyYW5zbGF0aW9uOiAhZXZlbnQuY29tcGxldGVkIH0pO1xyXG4gICAgICAgICAgaWYgKGV2ZW50LmNvbXBsZXRlZCAmJiAoIWV2ZW50LnRleHQgfHwgZXZlbnQudGV4dCA9PT0gXCJcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydHMud2FybmluZyhgRVJST1JTLkFVRElPLiR7QXVkaW9FcnJvckNhc2UuTk9fVEVYVF9SRUNPR05JWkVEfWApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZVRvQnJlYWtwb2ludE9ic2VydmVyKCk7XHJcbiAgfVxyXG5cclxuICBjb3B5KCkge1xyXG4gICAgdGhpcy5jbGlwYm9hcmQuY29weSh0aGlzLnRyYW5zbGF0ZWRUZXh0KTtcclxuICAgIHRoaXMuYWxlcnRzLnN1Y2Nlc3MoXCJUTERfVFJBTlNMQVRFLlRFWFRfQ09QSUVEXCIsIHsgaWQ6IHRoaXMuY29weU1lc3NhZ2VJZCwgY2xvc2VCdXR0b25JZDogdGhpcy5jb3B5TWVzc2FnZUNsb3NlQnV0dG9uSWQsIHBhcmVudElkOiB0aGlzLmNvcHlCdXR0b25JZCB9KTtcclxuICB9XHJcblxyXG4gIGNvcHlTdW1tYXJpemVkVGV4dCgpIHtcclxuICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkodGhpcy5zdW1tYXJpemVkVGV4dCk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5vblRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCk7XHJcbiAgICB0aGlzLmNsZWFyU3VtbWFyaXphdGlvbigpO1xyXG4gIH1cclxuXHJcblx0Y3JlYXRlU3VtbWFyeSgpIHtcclxuXHRcdHRoaXMuaXNTdW1tYXJhemluZyA9IHRydWU7XHJcblxyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdW1tYXJ5LXdyYXBwZXInKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuXHRcdH0sIDEwMCk7XHJcblxyXG5cdFx0dGhpcy5sbG1TZXJ2aWNlXHJcblx0XHRcdC5zdW1tYXJpemUoeyBsYW5ndWFnZTogdGhpcy50YXJnZXRMYW5ndWFnZSwgdGV4dDogdGhpcy50cmFuc2xhdGVkVGV4dCwgdXNlQ2FzZTogTExNVXNlQ2FzZS5HZW5lcmFsIH0pXHJcblx0XHRcdC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmlzU3VtbWFyYXppbmcgPSBmYWxzZSkpKVxyXG5cdFx0XHQuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuc3VtbWFyaXplZFRleHQgPSBtYXJrZWQucGFyc2UocmVzcG9uc2UpIGFzIHN0cmluZztcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG4gIHN3aXRjaEZvY3VzRnJvbUNvcHkoZXZlbnQpIHtcclxuICAgIGNvbnN0IGNvcHlNZXNzYWdlQ2xvc2VCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNvcHlNZXNzYWdlQ2xvc2VCdXR0b25JZCk/LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYnV0dG9uXCIpPy5pdGVtKDApO1xyXG4gICAgaWYgKGNvcHlNZXNzYWdlQ2xvc2VCdXR0b24pIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgY29weU1lc3NhZ2VDbG9zZUJ1dHRvbi5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmlsZUNoYW5nZShmaWxlczogRmlsZVtdKSB7XHJcbiAgICB0aGlzLm9uRmlsZUNoYW5nZS5lbWl0KGZpbGVzKTtcclxuICB9XHJcblxyXG4gIGZpbGVVcGxvYWRFcnJvcihlcnJvcjogYW55KSB7XHJcbiAgICB0aGlzLmZpbGVTZXJ2aWNlLmZpbGVVcGxvYWRFcnJvcihlcnJvciBhcyBGaWxlVXBsb2FkRXJyb3IpO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVUb1RyYW5zbGF0ZWRVcmwoKSB7XHJcbiAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh0aGlzLnRyYW5zbGF0ZVVybFJlZGlyZWN0KTtcclxuICB9XHJcblxyXG4gIGRpY3RhdGVTdGFydFN0b3AoaXNEaWN0YXRpbmc6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IHBocmFzZSA9IGAke3RoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uuc291cmNlVGV4dH0ke3RoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uuc291cmNlVGV4dD8ubGVuZ3RoID4gMCA/IFwiIFwiIDogXCJcIn0ke3RoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uuc291cmNlVGV4dEh5cG90aGVzaXN9YDtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuaXNEaWN0YXRpbmcgPSBpc0RpY3RhdGluZztcclxuICAgIC8vIFRyYW5zbGF0aW9uIGhhcyBlbmRlZC5cclxuICAgIGlmICghaXNEaWN0YXRpbmcpIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLnB1bmN0dWF0aW9uTWVzc2FnZSAmJiBwaHJhc2U/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmFsZXJ0cy53YXJuaW5nKFwiQVVESU8uUFVOQ1RVQVRJT05fTUVTU0FHRVwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jaGFuZ2VTb3VyY2UoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcGhyYXNlLFxyXG4gICAgICAgICAgZGlzYWJsZUF1dG9tYXRpY1RyYW5zbGF0aW9uOiB0aGlzLmlzRGljdGF0aW5nIHx8IHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLmRpc2FibGVBdXRvbWF0aWNUcmFuc2xhdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNoYW5nZVNvdXJjZUh5cG90aGVzaXMoXCJcIik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jbGVhclNvdXJjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGljdGF0ZVJlc3VsdChyZXN1bHQ6IHN0cmluZykge1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jaGFuZ2VTb3VyY2VIeXBvdGhlc2lzKFwiXCIpO1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jaGFuZ2VTb3VyY2UoeyBwaHJhc2U6IHJlc3VsdCwgZGlzYWJsZUF1dG9tYXRpY1RyYW5zbGF0aW9uOiB0aGlzLmlzRGljdGF0aW5nIH0pXHJcbiAgfVxyXG5cclxuICBkaWN0YXRlUGFydGlhbFJlc3VsdChwYXJ0aWFsUmVzdWx0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2hhbmdlU291cmNlSHlwb3RoZXNpcyhwYXJ0aWFsUmVzdWx0KTtcclxuICB9XHJcblxyXG4gIGRpY3RhdGVFcnJvcihlcnJvcjogQXVkaW9FcnJvckNhc2UpIHtcclxuICAgIGlmIChlcnJvciA9PT0gQXVkaW9FcnJvckNhc2UuTUFYX1RJTUVfRVhDRUVERUQpIHtcclxuICAgICAgbGV0IHRpbWVTdHJpbmcgPSBcIlwiO1xyXG4gICAgICBjb25zdCBtYXhMZW5ndGhUaW1lID0gbmV3IERhdGUoMCwgMCwgMCwgMCwgMCwgdGhpcy5jb25maWcuYXVkaW9Db25maWcubWF4aW11bVJlY29yZFRpbWUpO1xyXG5cclxuICAgICAgY29uc3QgbWludXRlcyA9IG1heExlbmd0aFRpbWUuZ2V0TWludXRlcygpO1xyXG4gICAgICBpZiAobWludXRlcyA+IDApIHtcclxuICAgICAgICB0aW1lU3RyaW5nICs9IGAke21pbnV0ZXN9IG1pbnV0ZXNgO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzZWNvbmRzID0gbWF4TGVuZ3RoVGltZS5nZXRTZWNvbmRzKCk7XHJcbiAgICAgIGlmIChzZWNvbmRzID4gMCkge1xyXG4gICAgICAgIHRpbWVTdHJpbmcgKz0gYCR7c2Vjb25kc30gc2Vjb25kc2BcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFsZXJ0cy53YXJuaW5nKGBFUlJPUlMuQVVESU8uJHtlcnJvcn1gLCB7IHRpbWVTdHJpbmcgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChlcnJvciA9PT0gQXVkaW9FcnJvckNhc2UuTk9fU1BFRUNIKSB7XHJcbiAgICAgIHRoaXMuYWxlcnRzLndhcm5pbmcoYEVSUk9SUy5BVURJTy4ke2Vycm9yfWApO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxlcnRzLnVuaGFuZGVsZWRFcnJvcih7IEVycm9yQ29kZTogZXJyb3IgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhclNvdXJjZSgpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2xlYXJTb3VyY2UoKTtcclxuICAgIHRoaXMuY2xlYXJTdW1tYXJpemF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uuc3RvcExpc3RlbmluZ1RvQ2hhbmdlcygpO1xyXG4gICAgdGhpcy50bGRTY3JvbGxTZXJ2aWNlLnVuc3Vic2NyaWJlVG9TY3JvbGwoKTtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dChudWxsKVxyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VQcm9ncmVzc0luZGljYXRvcigpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuaGlkZVByb2dyZXNzSW5kaWNhdG9yKCk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnN0b3BUcmFuc2xhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gbmVlZCB0byBzdWJzY3JpYmUgdG8gZ2V0IGlmIGlzIG1vYmlsZSB2aWV3IHNvIGl0IHdvdWxkIGJlIHBvc3NpYmxlIHRvIGhpZGUgc291cmNlIGFjdGlvbiByb3cuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0JyZWFrcG9pbnRPYnNlcnZlcigpIHtcclxuICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLm9ic2VydmUodGhpcy5tb2JpbGVCcmVha3BvaW50cylcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNNb2JpbGUgPSBzdGF0ZS5tYXRjaGVzO1xyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclN1bW1hcml6YXRpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1bW1hcml6ZWRUZXh0ID0gbnVsbDtcclxuICB9XHJcbn1cclxuIiwiPCEtLSBOT1RFLiB0bGQtc291cmNlLWFuZC10YXJnZXQtd3JhcHBlciB1c2VzIG11bHRpcGxlIGNvbnRlbnQgcHJvamVjdGlvbnMsIHNvIG1pZ2h0IHNlZW0gY29uZnVzaW5nIGZpcnN0LCBidXQgZWxlbWVudHMgYXJlIGRpc3BsYXllZCBhdCB0aGVpciBwbGFjZXMgYmFzZWQgb24gdGxkLXNvdXJjZS1hbmQtdGFyZ2V0LXdyYXBwZXIgY29tcG9uZW50XHJcbmh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9jb250ZW50LXByb2plY3Rpb24jbXVsdGktc2xvdC1jb250ZW50LXByb2plY3Rpb25cclxuLS0+XHJcbjx0bGQtc291cmNlLWFuZC10YXJnZXQtd3JhcHBlclxyXG5cdFt0ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5nc109XCJ0ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5nc1wiXHJcblx0W2NsZWFyU291cmNlVmlzaWJsZV09XCJzb3VyY2U/Lmxlbmd0aCA+IDBcIlxyXG5cdChvblNvdXJjZUNsZWFyKT1cImNsZWFyU291cmNlKClcIlxyXG5cdFtjbGVhckRpc2FibGVkXT1cInRleHRhcmVhRGlzYWJsZWRcIlxyXG5cdFtjbGVhclNvdXJjZVRvb2x0aXBdPVwiJ1RMRF9UUkFOU0xBVEUuQ0xFQVJfU09VUkNFX1RPT0xUSVAnXCJcclxuXHRbbmdDbGFzc109XCJ7ICdoaWdobGlnaHQtYWN0aXZlJzogaGlnaGxpZ2h0LCAnZ3JhbWNoZWNrLWFjdGl2ZSc6IGdyYW1DaGVjaywgJ2VtcHR5LXRhcmdldCc6IGlzRW1wdHlUYXJnZXQgfVwiXHJcbj5cclxuXHQ8ZGl2IHNvdXJjZU1haW4gY2xhc3M9XCJzb3VyY2UtbWFpblwiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcblx0XHQ8dGxkLXRyYW5zbGF0ZS1zb3VyY2UgW3RleHRhcmVhRGlzYWJsZWRdPVwidGV4dGFyZWFEaXNhYmxlZFwiICNzb3VyY2VDb21wb25lbnQgZnhGbGV4IFtzb3VyY2VQYXJhZ3JhcGhzXT1cInNvdXJjZVBhcmFncmFwaHNcIj48L3RsZC10cmFuc2xhdGUtc291cmNlPlxyXG5cdDwvZGl2PlxyXG5cdDxuZy1jb250YWluZXIgc291cmNlQWN0aW9ucyAqbmdJZj1cIiFoaWRlU291cmNlQWN0aW9uc1wiPlxyXG5cdFx0PGRpdiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgY2xhc3M9XCJiYXNpYy1wYWRkaW5nXCIgZnhMYXlvdXRHYXA9XCIxZW1cIj5cclxuXHRcdFx0PG5nLWNvbnRhaW5lciAqbmdJZj1cImF1ZGlvSW5wdXRWaXNpYmxlXCI+XHJcblx0XHRcdFx0PHRsZC1kaWN0YXRlXHJcblx0XHRcdFx0XHQjZGljdGF0ZVxyXG5cdFx0XHRcdFx0W2NvbmZpZ3VyYXRpb25dPVwiZGljdGF0ZUNvbmZpZ1wiXHJcblx0XHRcdFx0XHRbbmdDbGFzc109XCJ7ICdmdWxsLXdpZHRoJzogIWZpbGVVcGxvYWQgfVwiXHJcblx0XHRcdFx0XHQoaXNEaWN0YXRpbmcpPVwiZGljdGF0ZVN0YXJ0U3RvcCgkZXZlbnQpXCJcclxuXHRcdFx0XHRcdChyZXN1bHQpPVwiZGljdGF0ZVJlc3VsdCgkZXZlbnQpXCJcclxuXHRcdFx0XHRcdChwYXJ0aWFsUmVzdWx0KT1cImRpY3RhdGVQYXJ0aWFsUmVzdWx0KCRldmVudClcIlxyXG5cdFx0XHRcdFx0KG9uRXJyb3IpPVwiZGljdGF0ZUVycm9yKCRldmVudClcIlxyXG5cdFx0XHRcdFx0W2xhbmd1YWdlXT1cInNvdXJjZUxhbmd1YWdlXCJcclxuXHRcdFx0XHQ+XHJcblx0XHRcdFx0PC90bGQtZGljdGF0ZT5cclxuXHRcdFx0PC9uZy1jb250YWluZXI+XHJcblx0XHRcdDxkaXYgKm5nSWY9XCJmaWxlVXBsb2FkXCIgY2xhc3M9XCJmaWxlLXVwbG9hZC13cmFwcGVyXCI+XHJcblx0XHRcdFx0PGxpYi1maWxlLXVwbG9hZFxyXG5cdFx0XHRcdFx0KGZpbGVDaGFuZ2UpPVwiZmlsZUNoYW5nZSgkZXZlbnQpXCJcclxuXHRcdFx0XHRcdFthY2NlcHRdPVwiYWxsb3dlZEZpbGVUeXBlc1wiXHJcblx0XHRcdFx0XHRbbWF4U2l6ZV09XCJtYXhGaWxlVXBsb2FkU2l6ZVwiXHJcblx0XHRcdFx0XHRbdXBsb2FkSWNvbk5hbWVdPVwidXBsb2FkSWNvbk5hbWVcIlxyXG5cdFx0XHRcdFx0W2V4dGVuZGVkQWNjZXB0TGlzdF09XCJleHRlbmRlZEZpbGVUeXBlc1wiXHJcblx0XHRcdFx0XHRbbXVsdGlwbGVdPVwibXVsdGlwbGVGaWxlc1wiXHJcblx0XHRcdFx0XHQoZXJyb3JFdmVudCk9XCJmaWxlVXBsb2FkRXJyb3IoJGV2ZW50KVwiXHJcblx0XHRcdFx0XHRbZmlsZVByZXZpZXdQcm9ncmVzc109XCJmaWxlUHJldmlld1Byb2dyZXNzXCJcclxuXHRcdFx0XHRcdFtkaXNhYmxlZF09XCJmaWxlVXBsb2FkRGlzYWJsZWRcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidXBsb2FkLWZpbGUtdGV4dFwiPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiaW5mb1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gW2lubmVySFRNTF09XCInRklMRV9VUExPQUQuVVBMT0FEJyB8IHRyYW5zbGF0ZVwiIGNsYXNzPVwiYWNjZW50LWNvbG9yXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4+Jm5ic3A7PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gW2lubmVySFRNTF09XCInRklMRV9VUExPQUQuRFJBR19BTkRfRFJPUCcgfCB0cmFuc2xhdGVcIiBmeEhpZGUubHQtc20+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gW2lubmVySFRNTF09XCInRklMRV9VUExPQUQuJyArIChtdWx0aXBsZUZpbGVzID8gJ0ZJTEVTJyA6ICdGSUxFJykgfCB0cmFuc2xhdGVcIiBbbmdDbGFzcy5sdC1zbV09XCInYWNjZW50LWNvbG9yJ1wiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8L3NwYW4+XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZpbGUtdXBsb2FkLWV4dGVuc2lvbnMgdGV4dC1tXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQoXHJcblx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj57eyB2aXNpYmxlRXh0ZW5zaW9ucyB9fS4gPC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gKm5nSWY9XCJtYXhTaXplTUJcIiBbaW5uZXJIVE1MXT1cIidGSUxFX1VQTE9BRC5MSU1JVFNfTUInIHwgdHJhbnNsYXRlIDogeyBtYXhTaXplTUI6IG1heFNpemVNQiB9XCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHQ8L2xpYi1maWxlLXVwbG9hZD5cclxuXHRcdFx0XHQ8bGliLW9wZW4tZXh0ZW5zaW9uLWRpYWxvZyAqbmdJZj1cInNob3dFeHRlbnNpb25Qb3B1cFwiIFtleHRlbnNpb25zXT1cImFsbG93ZWRUeXBlc1dpdGhvdXREb3RzXCI+IDwvbGliLW9wZW4tZXh0ZW5zaW9uLWRpYWxvZz5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L25nLWNvbnRhaW5lcj5cclxuXHJcblx0PGRpdiB0YXJnZXRNYWluIGNsYXNzPVwidGFyZ2V0LW1haW5cIj5cclxuXHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0VtcHR5VGFyZ2V0OyBlbHNlIHRyYW5zbGF0ZWRUZXh0QmxvY2tcIj5cclxuXHRcdFx0PHAgKm5nSWY9XCJzaG93VGFyZ2V0UGxhY2Vob2xkZXJcIiBjbGFzcz1cImRlc2NyaXB0aW9uLXRleHQgdGFyZ2V0LWVtcHR5XCIgW2lubmVySHRtbF09XCInVExEX1RSQU5TTEFURS5UQVJHRVRfREVTQ1JJUFRJT04nIHwgdHJhbnNsYXRlXCI+PC9wPlxyXG5cdFx0PC9uZy1jb250YWluZXI+XHJcblx0PC9kaXY+XHJcblxyXG5cdDxuZy1jb250YWluZXIgdGFyZ2V0QWN0aW9ucz5cclxuXHRcdDxkaXYgY2xhc3M9XCJ0bGQtdHJhbnNsYXRlLXRhcmdldC1mb290ZXIgYmFzaWMtcGFkZGluZ1wiICpuZ0lmPVwic2hvd1N1Z2dlc3Rpb25zIHx8IHNob3dQcm9ncmVzc0luZGljYXRvclwiPlxyXG5cdFx0XHQ8dGxkLXRyYW5zbGF0ZS1zdWdnZXN0ICpuZ0lmPVwic2hvd1N1Z2dlc3Rpb25zXCIgW3N5c3RlbUlkXT1cInN5c3RlbUlkXCIgW3RhcmdldF09XCJ0YXJnZXRQYXJhZ3JhcGhzXCIgW3NvdXJjZV09XCJzb3VyY2VQYXJhZ3JhcGhzXCI+IDwvdGxkLXRyYW5zbGF0ZS1zdWdnZXN0PlxyXG5cdFx0XHQ8cHJvZ3Jlc3MtaW5kaWNhdG9yIChvbkNsb3NlKT1cImNsb3NlUHJvZ3Jlc3NJbmRpY2F0b3IoKVwiICpuZ0lmPVwic2hvd1Byb2dyZXNzSW5kaWNhdG9yXCI+PC9wcm9ncmVzcy1pbmRpY2F0b3I+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L25nLWNvbnRhaW5lcj5cclxuPC90bGQtc291cmNlLWFuZC10YXJnZXQtd3JhcHBlcj5cclxuXHJcbjwhLS0gdGVtcGxhdGVzIHVzZWQgZm9yIGVsc2UgYmxvY2tzIGluIHRhcmdldCBjb250YWluZXIgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjdHJhbnNsYXRlZFRleHRCbG9jaz5cclxuXHQ8ZGl2IFtjbGFzcy50cmFuc2xhdGVkLXNvdXJjZS1vdmVyZmxvd109XCJ0YXJnZXRXcmFwcGVyT3ZlcmZsb3dcIiBjbGFzcz1cInRyYW5zbGF0ZWQtc291cmNlXCIgW2NsYXNzLnNlbGVjdGFibGUtc2VudGVuY2VdPVwic2hvd1N1Z2dlc3Rpb25zXCI+XHJcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIXVybFRvVHJhbnNsYXRlXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ0YXJnZXQtd3JhcHBlci1hY3Rpb24tYnV0dG9uc1wiPlxyXG5cdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdG1hdC1pY29uLWJ1dHRvblxyXG5cdFx0XHRcdFx0Km5nSWY9XCJmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWRcIlxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJ0bGQtY29weS10cmFuc2xhdGlvblwiXHJcblx0XHRcdFx0XHQoY2xpY2spPVwiY29weSgpXCJcclxuXHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidUT09MVElQUy5DT1BZJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNvcHlNZXNzYWdlSWRcIlxyXG5cdFx0XHRcdFx0W2F0dHIuSWRdPVwiY29weUJ1dHRvbklkXCJcclxuXHRcdFx0XHRcdChrZXlkb3duLlRhYik9XCJzd2l0Y2hGb2N1c0Zyb21Db3B5KCRldmVudClcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuQ09QWScgfCB0cmFuc2xhdGVcIj4gY29udGVudF9jb3B5IDwvc3Bhbj5cclxuXHRcdFx0XHQ8L2J1dHRvbj5cclxuXHJcblx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0bWF0LWljb24tYnV0dG9uXHJcblx0XHRcdFx0XHQqbmdJZj1cImZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCB8fCB0cmFuc2xhdGlvbkVycm9yXCJcclxuXHRcdFx0XHRcdGNsYXNzPVwidGxkLXJlZnJlc2gtdHJhbnNsYXRpb25cIlxyXG5cdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ1RPT0xUSVBTLlJFRlJFU0gnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdChjbGljayk9XCJyZWZyZXNoKClcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuUkVGUkVTSCcgfCB0cmFuc2xhdGVcIj4gcmVmcmVzaCA8L3NwYW4+XHJcblx0XHRcdFx0PC9idXR0b24+XHJcblxyXG5cdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdG1hdC1pY29uLWJ1dHRvblxyXG5cdFx0XHRcdFx0Km5nSWY9XCJmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQgJiYgaXNMbG1FbmFibGVkXCJcclxuXHRcdFx0XHRcdGNsYXNzPVwidGxkLWNyZWF0ZS1zdW1tYXJ5XCJcclxuXHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidUT09MVElQUy5DUkVBVEVfU1VNTUFSWScgfCB0cmFuc2xhdGVcIlxyXG5cdFx0XHRcdFx0W2Rpc2FibGVkXT1cImlzVHJhbnNsYXRpbmcgfHwgaXNTdW1tYXJhemluZyB8fCBzdW1tYXJpemVkVGV4dFwiXHJcblx0XHRcdFx0XHQoY2xpY2spPVwiY3JlYXRlU3VtbWFyeSgpXCJcclxuXHRcdFx0XHQ+XHJcblx0XHRcdFx0XHQ8bWF0LWljb24gW3N2Z0ljb25dPVwiJ3N1bW1hcml6ZSdcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuQ1JFQVRFX1NVTU1BUlknIHwgdHJhbnNsYXRlXCI+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHQ8L2J1dHRvbj5cclxuXHJcblx0XHRcdFx0PHRsZC10ZXh0LXRvLXNwZWVjaCAqbmdJZj1cInRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzICYmIGZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZFwiIFtzZXR0aW5nc109XCJ0ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5nc1wiPiA8L3RsZC10ZXh0LXRvLXNwZWVjaD5cclxuXHRcdFx0PC9kaXY+XHJcblxyXG5cdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBwYXJhZ3JhcGggb2YgdGFyZ2V0UGFyYWdyYXBoc1wiPlxyXG5cdFx0XHRcdDx0bGQtaGlnaGxpZ2h0LXRyZWUgW2hpZ2hsaWdodF09XCJoaWdobGlnaHRcIiBbdHJlZV09XCJwYXJhZ3JhcGhcIiBbc2VsZWN0U2VudGVuY2VdPVwic2hvd1N1Z2dlc3Rpb25zXCI+IDwvdGxkLWhpZ2hsaWdodC10cmVlPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdDxkaXYgKm5nSWY9XCJpc1N1bW1hcmF6aW5nIHx8IHN1bW1hcml6ZWRUZXh0XCIgY2xhc3M9XCJzdW1tYXJ5LXdyYXBwZXJcIj5cclxuXHRcdFx0XHQ8cD57eyBcIlRMRF9UUkFOU0xBVEUuU1VNTUFSWS5USVRMRVwiIHwgdHJhbnNsYXRlIH19PC9wPlxyXG5cclxuXHRcdFx0XHQ8cCAqbmdJZj1cImlzU3VtbWFyYXppbmdcIiBjbGFzcz1cImNyZWF0aW5nLXByb2dyZXNzXCI+e3sgXCJUTERfVFJBTlNMQVRFLlNVTU1BUlkuQ1JFQVRJTkdcIiB8IHRyYW5zbGF0ZSB9fTxzcGFuIGNsYXNzPVwiZG90LWxvYWRpbmdcIj4uLi48L3NwYW4+PC9wPlxyXG5cclxuXHRcdFx0XHQ8cCBbaW5uZXJIVE1MXT1cInN1bW1hcml6ZWRUZXh0XCI+PC9wPlxyXG5cclxuXHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRtYXQtaWNvbi1idXR0b25cclxuXHRcdFx0XHRcdCpuZ0lmPVwic3VtbWFyaXplZFRleHRcIlxyXG5cdFx0XHRcdFx0W25nQ2xhc3MubHQtc21dPVwiJ3N1bW1hcnktbW9iaWxlJ1wiXHJcblx0XHRcdFx0XHRjbGFzcz1cInN1bW1hcnktY29weS1idG5cIlxyXG5cdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlTdW1tYXJpemVkVGV4dCgpXCJcclxuXHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidUT09MVElQUy5DT1BZJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidBUklBX0xBQkVMUy5DT1BZJyB8IHRyYW5zbGF0ZVwiPiBjb250ZW50X2NvcHkgPC9zcGFuPlxyXG5cdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdDxkaXYgKm5nSWY9XCJmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWRcIiBjbGFzcz1cImRpY3Rpb25hcnktd3JhcHBlclwiPlxyXG5cdFx0XHRcdDx0bGQtZGljdGlvbmFyeSBbZGljdGlvbmFyeV09XCJkaWN0aW9uYXJ5RW50cnlcIj48L3RsZC1kaWN0aW9uYXJ5PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvbmctY29udGFpbmVyPlxyXG5cclxuXHRcdDxkaXYgKm5nSWY9XCJ1cmxUb1RyYW5zbGF0ZVwiIGNsYXNzPVwidGFyZ2V0LXVybC1jb250YWluZXJcIj5cclxuXHRcdFx0PGEgW2F0dHIuaHJlZl09XCJ0cmFuc2xhdGVVcmxSZWRpcmVjdFwiIHRhcmdldD1cIl9ibGFua1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBjbGFzcz1cImdvLXRvLXdlYnRyYW5zbGF0ZVwiPlxyXG5cdFx0XHRcdHt7IHVybFRvVHJhbnNsYXRlIH19XHJcblx0XHRcdFx0PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiIGNvbG9yPVwiYWNjZW50XCIgYXJpYS1oaWRkZW49XCJmYWxzZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FSSUFfTEFCRUxTLk9QRU5fSU5fTkVXJ1wiPiBvcGVuX2luX25ldyA8L3NwYW4+XHJcblx0XHRcdDwvYT5cclxuXHRcdDwvZGl2PlxyXG5cdDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
@@ -25,6 +25,7 @@ import { MatInputModule } from '@angular/material/input';
25
25
  import { MatFormFieldModule } from '@angular/material/form-field';
26
26
  import { MatDialogModule } from '@angular/material/dialog';
27
27
  import { MatTooltipModule } from '@angular/material/tooltip';
28
+ import { MatIconModule } from '@angular/material/icon';
28
29
  import * as i0 from "@angular/core";
29
30
  export class TldTextModule {
30
31
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TldTextModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -54,7 +55,8 @@ export class TldTextModule {
54
55
  MatInputModule,
55
56
  MatFormFieldModule,
56
57
  MatDialogModule,
57
- MatTooltipModule], exports: [TldTranslateSourceComponent,
58
+ MatTooltipModule,
59
+ MatIconModule], exports: [TldTranslateSourceComponent,
58
60
  TldTranslateSuggestComponent,
59
61
  TldTranslateTextComponent] });
60
62
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TldTextModule, imports: [CommonModule,
@@ -76,7 +78,8 @@ export class TldTextModule {
76
78
  MatInputModule,
77
79
  MatFormFieldModule,
78
80
  MatDialogModule,
79
- MatTooltipModule] });
81
+ MatTooltipModule,
82
+ MatIconModule] });
80
83
  }
81
84
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TldTextModule, decorators: [{
82
85
  type: NgModule,
@@ -109,7 +112,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
109
112
  MatInputModule,
110
113
  MatFormFieldModule,
111
114
  MatDialogModule,
112
- MatTooltipModule
115
+ MatTooltipModule,
116
+ MatIconModule
113
117
  ],
114
118
  exports: [
115
119
  TldTranslateSourceComponent,
@@ -118,4 +122,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
118
122
  ]
119
123
  }]
120
124
  }] });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRleHQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLXRleHQvdGxkLXRleHQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUM1RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUMzSCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUMvRyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxrRkFBa0YsQ0FBQztBQUN0SSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBeUM3RCxNQUFNLE9BQU8sYUFBYTt3R0FBYixhQUFhO3lHQUFiLGFBQWEsaUJBbkNULDJCQUEyQjtZQUN4Qyw0QkFBNEI7WUFDNUIsa0NBQWtDO1lBQ2xDLHlCQUF5QjtZQUN6QixzQkFBc0I7WUFDdEIsK0JBQStCO1lBQy9CLHNCQUFzQjtZQUN0QiwwQkFBMEIsYUFFMUIsWUFBWTtZQUNaLGVBQWU7WUFDZixXQUFXO1lBQ1gsZUFBZTtZQUNmLGVBQWU7WUFDZixjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLHFCQUFxQjtZQUNyQixZQUFZO1lBQ1osb0JBQW9CO1lBQ3BCLHNCQUFzQjtZQUN0QixrQkFBa0I7WUFDbEIsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLGNBQWM7WUFDZCxrQkFBa0I7WUFDbEIsZUFBZTtZQUNmLGdCQUFnQixhQUdoQiwyQkFBMkI7WUFDM0IsNEJBQTRCO1lBQzVCLHlCQUF5Qjt5R0FFaEIsYUFBYSxZQTFCdEIsWUFBWTtZQUNaLGVBQWU7WUFDZixXQUFXO1lBQ1gsZUFBZTtZQUNmLGVBQWU7WUFDZixjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLHFCQUFxQjtZQUNyQixZQUFZO1lBQ1osb0JBQW9CO1lBQ3BCLHNCQUFzQjtZQUN0QixrQkFBa0I7WUFDbEIsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLGNBQWM7WUFDZCxrQkFBa0I7WUFDbEIsZUFBZTtZQUNmLGdCQUFnQjs7NEZBT1AsYUFBYTtrQkFwQ3pCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsMkJBQTJCO3dCQUN4Qyw0QkFBNEI7d0JBQzVCLGtDQUFrQzt3QkFDbEMseUJBQXlCO3dCQUN6QixzQkFBc0I7d0JBQ3RCLCtCQUErQjt3QkFDL0Isc0JBQXNCO3dCQUN0QiwwQkFBMEIsQ0FBQztvQkFDN0IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixXQUFXO3dCQUNYLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQixZQUFZO3dCQUNaLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3dCQUN0QixrQkFBa0I7d0JBQ2xCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLGVBQWU7d0JBQ2YsZ0JBQWdCO3FCQUNqQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsMkJBQTJCO3dCQUMzQiw0QkFBNEI7d0JBQzVCLHlCQUF5QjtxQkFBQztpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbGlwYm9hcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvY2xpcGJvYXJkJztcclxuaW1wb3J0IHsgTGF5b3V0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBDbG9zZUJ1dHRvbk1vZHVsZSwgRXh0ZW5zaW9uRGlhbG9nTW9kdWxlLCBGaWxlVXBsb2FkTW9kdWxlIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgVGV4dFRvU3BlZWNoTW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zaGFyZWQvdGV4dC10by1zcGVlY2gvdGV4dC10by1zcGVlY2gubW9kdWxlJztcclxuaW1wb3J0IHsgVmVuZG9yRGlzY2xhaW1lck1vZHVsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2hhcmVkL3ZlbmRvci1kaXNjbGFpbWVyL3ZlbmRvci1kaXNjbGFpbWVyLm1vZHVsZSc7XHJcbmltcG9ydCB7IFRsZEF1ZGlvTW9kdWxlIH0gZnJvbSAnLi4vdGxkLWF1ZGlvJztcclxuaW1wb3J0IHsgVGxkQ29tbW9uTW9kdWxlIH0gZnJvbSAnLi4vdGxkLWNvbW1vbi90bGQtY29tbW9uLm1vZHVsZSc7XHJcbmltcG9ydCB7IEhpZ2hsaWdodFRyZWVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvaGlnaGxpZ2h0LXRyZWUvaGlnaGxpZ2h0LXRyZWUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJvZ3Jlc3NJbmRpY2F0b3JDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcHJvZ3Jlc3MtaW5kaWNhdG9yL3Byb2dyZXNzLWluZGljYXRvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUZXh0YXJlYVdpdGhCYWNrZ3JvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RleHRhcmVhLXdpdGgtYmFja2dyb3VuZC90ZXh0YXJlYS13aXRoLWJhY2tncm91bmQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGxkRGljdGlvbmFyeUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90bGQtZGljdGlvbmFyeS90bGQtZGljdGlvbmFyeS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVTb3VyY2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGxkLXRyYW5zbGF0ZS1zb3VyY2UvdGxkLXRyYW5zbGF0ZS1zb3VyY2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlU3VnZ2VzdERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90bGQtdHJhbnNsYXRlLXN1Z2dlc3QvZGlhbG9nL3RsZC10cmFuc2xhdGUtc3VnZ2VzdC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlU3VnZ2VzdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90bGQtdHJhbnNsYXRlLXN1Z2dlc3QvdGxkLXRyYW5zbGF0ZS1zdWdnZXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVRleHRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGxkLXRyYW5zbGF0ZS10ZXh0L3RsZC10cmFuc2xhdGUtdGV4dC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IEZsZXhMYXlvdXRNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuXHJcblxyXG5cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbVGxkVHJhbnNsYXRlU291cmNlQ29tcG9uZW50LFxyXG4gICAgVGxkVHJhbnNsYXRlU3VnZ2VzdENvbXBvbmVudCxcclxuICAgIFRsZFRyYW5zbGF0ZVN1Z2dlc3REaWFsb2dDb21wb25lbnQsXHJcbiAgICBUbGRUcmFuc2xhdGVUZXh0Q29tcG9uZW50LFxyXG4gICAgVGxkRGljdGlvbmFyeUNvbXBvbmVudCxcclxuICAgIFRleHRhcmVhV2l0aEJhY2tncm91bmRDb21wb25lbnQsXHJcbiAgICBIaWdobGlnaHRUcmVlQ29tcG9uZW50LFxyXG4gICAgUHJvZ3Jlc3NJbmRpY2F0b3JDb21wb25lbnRdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgVGxkQ29tbW9uTW9kdWxlLFxyXG4gICAgQ2xpcGJvYXJkTW9kdWxlLFxyXG4gICAgVGxkQXVkaW9Nb2R1bGUsXHJcbiAgICBDbG9zZUJ1dHRvbk1vZHVsZSxcclxuICAgIEV4dGVuc2lvbkRpYWxvZ01vZHVsZSxcclxuICAgIExheW91dE1vZHVsZSxcclxuICAgIE1hdFByb2dyZXNzQmFyTW9kdWxlLFxyXG4gICAgVmVuZG9yRGlzY2xhaW1lck1vZHVsZSxcclxuICAgIFRleHRUb1NwZWVjaE1vZHVsZSxcclxuICAgIEZpbGVVcGxvYWRNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRNZW51TW9kdWxlLFxyXG4gICAgRmxleExheW91dE1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgVGxkVHJhbnNsYXRlU291cmNlQ29tcG9uZW50LFxyXG4gICAgVGxkVHJhbnNsYXRlU3VnZ2VzdENvbXBvbmVudCxcclxuICAgIFRsZFRyYW5zbGF0ZVRleHRDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUbGRUZXh0TW9kdWxlIHsgfVxyXG4iXX0=
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRleHQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLXRleHQvdGxkLXRleHQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUM1RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUMzSCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUMvRyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxrRkFBa0YsQ0FBQztBQUN0SSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNsSCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQTBDdkQsTUFBTSxPQUFPLGFBQWE7d0dBQWIsYUFBYTt5R0FBYixhQUFhLGlCQXBDVCwyQkFBMkI7WUFDeEMsNEJBQTRCO1lBQzVCLGtDQUFrQztZQUNsQyx5QkFBeUI7WUFDekIsc0JBQXNCO1lBQ3RCLCtCQUErQjtZQUMvQixzQkFBc0I7WUFDdEIsMEJBQTBCLGFBRTFCLFlBQVk7WUFDWixlQUFlO1lBQ2YsV0FBVztZQUNYLGVBQWU7WUFDZixlQUFlO1lBQ2YsY0FBYztZQUNkLGlCQUFpQjtZQUNqQixxQkFBcUI7WUFDckIsWUFBWTtZQUNaLG9CQUFvQjtZQUNwQixzQkFBc0I7WUFDdEIsa0JBQWtCO1lBQ2xCLGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixjQUFjO1lBQ2Qsa0JBQWtCO1lBQ2xCLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsYUFBYSxhQUdiLDJCQUEyQjtZQUMzQiw0QkFBNEI7WUFDNUIseUJBQXlCO3lHQUVoQixhQUFhLFlBM0J0QixZQUFZO1lBQ1osZUFBZTtZQUNmLFdBQVc7WUFDWCxlQUFlO1lBQ2YsZUFBZTtZQUNmLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIscUJBQXFCO1lBQ3JCLFlBQVk7WUFDWixvQkFBb0I7WUFDcEIsc0JBQXNCO1lBQ3RCLGtCQUFrQjtZQUNsQixnQkFBZ0I7WUFDaEIsZUFBZTtZQUNmLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsY0FBYztZQUNkLGtCQUFrQjtZQUNsQixlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLGFBQWE7OzRGQU9KLGFBQWE7a0JBckN6QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLDJCQUEyQjt3QkFDeEMsNEJBQTRCO3dCQUM1QixrQ0FBa0M7d0JBQ2xDLHlCQUF5Qjt3QkFDekIsc0JBQXNCO3dCQUN0QiwrQkFBK0I7d0JBQy9CLHNCQUFzQjt3QkFDdEIsMEJBQTBCLENBQUM7b0JBQzdCLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsV0FBVzt3QkFDWCxlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLHFCQUFxQjt3QkFDckIsWUFBWTt3QkFDWixvQkFBb0I7d0JBQ3BCLHNCQUFzQjt3QkFDdEIsa0JBQWtCO3dCQUNsQixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsYUFBYTtxQkFDZDtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsMkJBQTJCO3dCQUMzQiw0QkFBNEI7d0JBQzVCLHlCQUF5QjtxQkFBQztpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbGlwYm9hcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvY2xpcGJvYXJkJztcclxuaW1wb3J0IHsgTGF5b3V0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBDbG9zZUJ1dHRvbk1vZHVsZSwgRXh0ZW5zaW9uRGlhbG9nTW9kdWxlLCBGaWxlVXBsb2FkTW9kdWxlIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgVGV4dFRvU3BlZWNoTW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zaGFyZWQvdGV4dC10by1zcGVlY2gvdGV4dC10by1zcGVlY2gubW9kdWxlJztcclxuaW1wb3J0IHsgVmVuZG9yRGlzY2xhaW1lck1vZHVsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2hhcmVkL3ZlbmRvci1kaXNjbGFpbWVyL3ZlbmRvci1kaXNjbGFpbWVyLm1vZHVsZSc7XHJcbmltcG9ydCB7IFRsZEF1ZGlvTW9kdWxlIH0gZnJvbSAnLi4vdGxkLWF1ZGlvJztcclxuaW1wb3J0IHsgVGxkQ29tbW9uTW9kdWxlIH0gZnJvbSAnLi4vdGxkLWNvbW1vbi90bGQtY29tbW9uLm1vZHVsZSc7XHJcbmltcG9ydCB7IEhpZ2hsaWdodFRyZWVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvaGlnaGxpZ2h0LXRyZWUvaGlnaGxpZ2h0LXRyZWUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJvZ3Jlc3NJbmRpY2F0b3JDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcHJvZ3Jlc3MtaW5kaWNhdG9yL3Byb2dyZXNzLWluZGljYXRvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUZXh0YXJlYVdpdGhCYWNrZ3JvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RleHRhcmVhLXdpdGgtYmFja2dyb3VuZC90ZXh0YXJlYS13aXRoLWJhY2tncm91bmQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGxkRGljdGlvbmFyeUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90bGQtZGljdGlvbmFyeS90bGQtZGljdGlvbmFyeS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVTb3VyY2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGxkLXRyYW5zbGF0ZS1zb3VyY2UvdGxkLXRyYW5zbGF0ZS1zb3VyY2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlU3VnZ2VzdERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90bGQtdHJhbnNsYXRlLXN1Z2dlc3QvZGlhbG9nL3RsZC10cmFuc2xhdGUtc3VnZ2VzdC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlU3VnZ2VzdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90bGQtdHJhbnNsYXRlLXN1Z2dlc3QvdGxkLXRyYW5zbGF0ZS1zdWdnZXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVRleHRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGxkLXRyYW5zbGF0ZS10ZXh0L3RsZC10cmFuc2xhdGUtdGV4dC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IEZsZXhMYXlvdXRNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5cclxuXHJcblxyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtUbGRUcmFuc2xhdGVTb3VyY2VDb21wb25lbnQsXHJcbiAgICBUbGRUcmFuc2xhdGVTdWdnZXN0Q29tcG9uZW50LFxyXG4gICAgVGxkVHJhbnNsYXRlU3VnZ2VzdERpYWxvZ0NvbXBvbmVudCxcclxuICAgIFRsZFRyYW5zbGF0ZVRleHRDb21wb25lbnQsXHJcbiAgICBUbGREaWN0aW9uYXJ5Q29tcG9uZW50LFxyXG4gICAgVGV4dGFyZWFXaXRoQmFja2dyb3VuZENvbXBvbmVudCxcclxuICAgIEhpZ2hsaWdodFRyZWVDb21wb25lbnQsXHJcbiAgICBQcm9ncmVzc0luZGljYXRvckNvbXBvbmVudF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBUbGRDb21tb25Nb2R1bGUsXHJcbiAgICBDbGlwYm9hcmRNb2R1bGUsXHJcbiAgICBUbGRBdWRpb01vZHVsZSxcclxuICAgIENsb3NlQnV0dG9uTW9kdWxlLFxyXG4gICAgRXh0ZW5zaW9uRGlhbG9nTW9kdWxlLFxyXG4gICAgTGF5b3V0TW9kdWxlLFxyXG4gICAgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUsXHJcbiAgICBWZW5kb3JEaXNjbGFpbWVyTW9kdWxlLFxyXG4gICAgVGV4dFRvU3BlZWNoTW9kdWxlLFxyXG4gICAgRmlsZVVwbG9hZE1vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBGbGV4TGF5b3V0TW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXREaWFsb2dNb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgVGxkVHJhbnNsYXRlU291cmNlQ29tcG9uZW50LFxyXG4gICAgVGxkVHJhbnNsYXRlU3VnZ2VzdENvbXBvbmVudCxcclxuICAgIFRsZFRyYW5zbGF0ZVRleHRDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUbGRUZXh0TW9kdWxlIHsgfVxyXG4iXX0=