raise-common-lib-new 0.0.60 → 0.0.61

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.
@@ -55,7 +55,6 @@ export class RichtexteditorComponent {
55
55
  dialogWidth = "800px";
56
56
  dialogHeight = "642px";
57
57
  showZoomBtn = true;
58
- showMsg = false;
59
58
  editorManager;
60
59
  size = "";
61
60
  selectedQuery;
@@ -114,6 +113,7 @@ export class RichtexteditorComponent {
114
113
  ],
115
114
  };
116
115
  translation;
116
+ zoomout = true;
117
117
  constructor(ref, http, dialog, snackBar) {
118
118
  this.ref = ref;
119
119
  this.http = http;
@@ -216,36 +216,12 @@ export class RichtexteditorComponent {
216
216
  }
217
217
  }
218
218
  onContentChange(args) {
219
- // const tables = document.querySelectorAll("table.e-rte-table");
220
- // tables.forEach((table) => {
221
- // const htmlTable = table as HTMLTableElement;
222
- // htmlTable.style.marginBottom = "10px";
223
- // htmlTable.style.borderCollapse = "collapse";
224
- // htmlTable.style.emptyCells = "show";
225
- // const tdElements = table.querySelectorAll("td");
226
- // tdElements.forEach((td) => {
227
- // td.style.border = "1px solid #adb5bd";
228
- // td.style.height = "20px";
229
- // td.style.minWidth = "20px";
230
- // td.style.padding = "2px 5px";
231
- // td.style.boxSizing = "border-box";
232
- // });
233
- // });
234
219
  this.change.emit(args);
235
220
  }
236
221
  onCreate() {
237
- //add the line height
238
- // this.editorManager = this.rteObj.formatter.editorManager;
239
- // let splitButton = new DropDownButton({
240
- // items: lineHeight_items,
241
- // iconCss: "e-icons e-line-spacing",
242
- // select: this.onSelect.bind(this),
243
- // });
244
- // splitButton.appendTo("#lineheight_tbar");
245
- // // ai assist
222
+ // ai assist
246
223
  let aiassistantButton = new DropDownButton({
247
224
  items: this.queryList,
248
- // iconCss: "e-btn-icon e-icons e-assistview-icon e-icon-left",
249
225
  select: (args) => this.aiQuerySelectedMenu(args),
250
226
  });
251
227
  aiassistantButton.appendTo("#ai_assistant_button_tbar_" + this.editorId);
@@ -271,7 +247,7 @@ export class RichtexteditorComponent {
271
247
  if (selectionText) {
272
248
  let range = this.rteObj.formatter.editorManager.nodeSelection.getRange(this.rteObj.contentModule.getDocument());
273
249
  this.rteObj.formatter.editorManager.nodeSelection.save(range, this.rteObj.contentModule.getDocument());
274
- this.dropValIndex = this.queryList.findIndex((q) => q.text.toLowerCase() === selectedQuery.toLowerCase());
250
+ this.dropValIndex = this.queryList.findIndex((q) => q.id.toLowerCase() === selectedQuery.toLowerCase());
275
251
  this.queryCategory.index = this.dropValIndex;
276
252
  this.leftRte.value = this.promptQuery = selectionText;
277
253
  this.leftRte.refreshUI();
@@ -279,11 +255,6 @@ export class RichtexteditorComponent {
279
255
  this.updateAISugesstionsData(selectedQuery);
280
256
  }
281
257
  else {
282
- // this.showMsg = true;
283
- // setTimeout(() => {
284
- // this.showMsg = false;
285
- // }, 3000);
286
- // console.log("Please select the content to perform the AI operation.");
287
258
  this.dialog.showNotification(this.translation.FIRST_SELECT_SOME_TEXT || "First, Select some text", {
288
259
  status: "Warning",
289
260
  });
@@ -293,25 +264,29 @@ export class RichtexteditorComponent {
293
264
  this.isSentimentCheck = false;
294
265
  switch (selectedQuery) {
295
266
  case "Summarize":
296
- this.subQuery = "Summarize the upcoming sentence shortly.";
267
+ this.subQuery =
268
+ "Please summarize the following text. Preserve all HTML tags exactly as they are:";
297
269
  break;
298
270
  case "Elaborate":
299
- this.subQuery = "Elaborate on the upcoming sentence.";
271
+ this.subQuery =
272
+ "Please elaborate and expand on the following text with more details. Preserve all HTML tags exactly as they are:";
300
273
  break;
301
274
  case "Rephrase":
302
- this.subQuery = this.chipValue + " rephrase the upcoming sentence.";
275
+ this.subQuery =
276
+ this.chipValue +
277
+ " Please rephrase the following text while maintaining the same meaning. Preserve all HTML tags exactly as they are:";
303
278
  break;
304
279
  case "Grammar":
305
- this.subQuery = "Correct the grammar of the upcoming sentence.";
280
+ this.subQuery =
281
+ "Please correct any grammar errors in the following text. Preserve all HTML tags exactly as they are:";
306
282
  break;
307
283
  case "Translate":
308
- this.subQuery =
309
- "Translate the upcoming sentence to " + this.translatelanguage + ".";
284
+ this.subQuery = `Please translate the following text to ${this.translatelanguage}. Preserve all HTML tags exactly as they are:`;
310
285
  break;
311
286
  case "SentimentAnalysis":
312
287
  this.isSentimentCheck = true;
313
288
  this.subQuery =
314
- 'Analyze the sentiment and grammar of the following paragraphs and provide the expression score with an emoji followed by the sentiment in the format: "😊 Neutral". \n\nNOTE: Avoid any additional text or explanation:';
289
+ "Please analyze the sentiment of the following text. Preserve all HTML tags in the text when referencing it:";
315
290
  break;
316
291
  }
317
292
  this.updateAISugesstions();
@@ -332,6 +307,7 @@ export class RichtexteditorComponent {
332
307
  }
333
308
  this.apiResultData = this.getResponseFromOpenAI(this.subQuery, this.promptQuery);
334
309
  this.apiResultData.then((result) => {
310
+ this.isDialogVisible = true;
335
311
  this.AIResult = this.isSentimentCheck ? this.promptQuery : result;
336
312
  this.sentimentButton.content = result
337
313
  .toLowerCase()
@@ -343,7 +319,7 @@ export class RichtexteditorComponent {
343
319
  this.sentimentButton.element.style.display = !this.isSentimentCheck
344
320
  ? "none"
345
321
  : "";
346
- this.rightRte.value = this.AIResult;
322
+ //this.rightRte.value = this.AIResult;
347
323
  var noResultsFound = !(this.AIResult || this.promptQuery);
348
324
  document.getElementById("no-results-found").style.display = noResultsFound ? "" : "none";
349
325
  this.regenerateButton.disabled = noResultsFound;
@@ -353,13 +329,12 @@ export class RichtexteditorComponent {
353
329
  });
354
330
  }
355
331
  }
356
- catch {
357
- // this.toastObj.show();
358
- }
332
+ catch { }
359
333
  }
360
- fullResponse = "";
334
+ currentResponse = "";
361
335
  abortController = null;
362
336
  async getResponseFromOpenAI(subQuery, promptQuery) {
337
+ this.zoomout = true;
363
338
  if (this.abortController) {
364
339
  this.abortController.abort();
365
340
  this.abortController = null;
@@ -374,19 +349,19 @@ export class RichtexteditorComponent {
374
349
  },
375
350
  {
376
351
  role: "user",
377
- content: `${subQuery} ${promptQuery}`,
352
+ content: `${subQuery}\n\n${promptQuery}`,
378
353
  },
379
354
  ];
380
355
  const param = {
381
356
  messages: messages,
382
- max_tokens: 1000,
357
+ max_tokens: 16000,
383
358
  temperature: 0.7,
384
359
  top_p: 1,
385
360
  frequency_penalty: 0,
386
361
  presence_penalty: 0,
387
362
  };
388
363
  try {
389
- const response = await fetch("api/ai/chat-stream", {
364
+ const response = await fetch("api/ai/v2/chat/chat-stream", {
390
365
  method: "POST",
391
366
  headers: { "Content-Type": "application/json" },
392
367
  body: JSON.stringify(param),
@@ -399,44 +374,26 @@ export class RichtexteditorComponent {
399
374
  "none";
400
375
  document.getElementById("rightRte").style.display = "";
401
376
  this.ref.detectChanges();
402
- this.fullResponse = "";
377
+ this.currentResponse = "";
378
+ this.updateResponse("");
403
379
  this.rightRte.value = "";
404
380
  const reader = response.body.getReader();
405
381
  const decoder = new TextDecoder();
406
382
  while (true) {
407
383
  const { done, value } = await reader.read();
408
- if (done) {
384
+ if (done)
409
385
  break;
410
- }
411
386
  const chunk = decoder.decode(value, { stream: true });
412
- const lines = chunk.split("\n");
413
- for (const line of lines) {
414
- if (line.startsWith("data: ")) {
415
- const data = line.substring(6).trim();
416
- if (data === "[DONE]") {
417
- //this.showDialog();
418
- return this.fullResponse;
419
- }
420
- try {
421
- const parsed = JSON.parse(data);
422
- const content = parsed.choices?.[0]?.delta?.content;
423
- if (content) {
424
- this.fullResponse += content;
425
- setTimeout(() => this.scrollToBottom(content));
426
- }
427
- }
428
- catch (e) {
429
- console.error("Parse error:", e, "Data:", data);
430
- }
431
- }
432
- }
387
+ const cleanedChunk = chunk.replace(/chunk:/g, "");
388
+ this.currentResponse += cleanedChunk;
389
+ this.updateResponse(this.currentResponse);
433
390
  }
434
- return this.fullResponse;
391
+ return this.currentResponse;
435
392
  }
436
393
  catch (error) {
437
394
  if (error.name === "AbortError") {
438
395
  console.log("The AI request was actively canceled by the user");
439
- return this.fullResponse;
396
+ return this.currentResponse;
440
397
  }
441
398
  console.error("Stream error:", error);
442
399
  throw error;
@@ -478,6 +435,7 @@ export class RichtexteditorComponent {
478
435
  this.selectedQuery = "Rephrase";
479
436
  this.sentimentButton.content = "😊 Neutral";
480
437
  this.size = "";
438
+ this.isDialogVisible = false;
481
439
  }
482
440
  copyTextToClipboard(text) {
483
441
  if (!this.rightRte) {
@@ -504,30 +462,6 @@ export class RichtexteditorComponent {
504
462
  catch (err) {
505
463
  console.error("Failed to copy text: ", err);
506
464
  }
507
- // if (navigator.clipboard) {
508
- // navigator.clipboard
509
- // .writeText(text)
510
- // .then(() => {
511
- // console.log("Text copied to clipboard successfully!");
512
- // })
513
- // .catch((err) => {
514
- // console.error("Failed to copy text: ", err);
515
- // });
516
- // } else {
517
- // // Fallback for browsers that do not support the Clipboard API
518
- // const textarea = document.createElement("textarea");
519
- // textarea.value = text;
520
- // document.body.appendChild(textarea);
521
- // textarea.select();
522
- // try {
523
- // document.execCommand("copy");
524
- // console.log("Text copied to clipboard using execCommand");
525
- // } catch (err) {
526
- // console.error("Failed to copy text: ", err);
527
- // } finally {
528
- // document.body.removeChild(textarea);
529
- // }
530
- // }
531
465
  }
532
466
  onOverlayClick() {
533
467
  let activeEle = this.AIdialog.element.querySelector(".char_block.e-active");
@@ -622,9 +556,6 @@ export class RichtexteditorComponent {
622
556
  .replace(/"/g, '"')
623
557
  .replace(/'/g, "'");
624
558
  }
625
- hideToast() {
626
- this.showMsg = false;
627
- }
628
559
  onZoom() {
629
560
  if (this.size === "largest") {
630
561
  this.size = ""; // 恢复到原始大小
@@ -647,18 +578,30 @@ export class RichtexteditorComponent {
647
578
  });
648
579
  this.closeDialog();
649
580
  }
650
- scrollToBottom(content) {
651
- this.insertHtmlToEditor(content);
581
+ updateResponse(content) {
582
+ this.currentResponse = content;
583
+ const htmlContent = this.extractHTMLFromResponse(content);
584
+ this.rightRte.value = htmlContent;
652
585
  const rteContainer = document.getElementById("rightRte");
653
586
  const scrollableElement = rteContainer?.querySelector(".e-rte-content");
654
587
  if (scrollableElement) {
588
+ // 自动滚动到底部
655
589
  scrollableElement.scrollTop =
656
590
  scrollableElement.scrollHeight - scrollableElement.clientHeight;
657
591
  this.ref.detectChanges();
658
592
  }
659
593
  }
594
+ extractHTMLFromResponse(content) {
595
+ const codeBlockRegex = /```html\s*([\s\S]*?)\s*```/;
596
+ const match = content.match(codeBlockRegex);
597
+ if (match && match[1]) {
598
+ return match[1].trim();
599
+ }
600
+ return content;
601
+ }
660
602
  onMinimize() {
661
603
  this.AIdialog.element.style.display = "none";
604
+ // this.AIdialog.hide();
662
605
  this.dialog.showLoadingNotification({
663
606
  loadingCallback: (callback) => { },
664
607
  message: this.translation.AI_IN_PROGRESS || "AI is in progress",
@@ -666,17 +609,15 @@ export class RichtexteditorComponent {
666
609
  }
667
610
  showDialog() {
668
611
  this.AIdialog.element.style.display = "";
612
+ // this.AIdialog.show();
669
613
  this.snackBar.dismiss();
670
614
  }
671
- insertHtmlToEditor(html) {
672
- this.rightRte.executeCommand("insertText", html);
673
- }
674
615
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RichtexteditorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.HttpClient }, { token: i2.DialogService }, { token: i3.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
675
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RichtexteditorComponent, selector: "rs-richtext-editor", inputs: { placeholder: "placeholder", value: "value", editorId: "editorId", saveInterval: "saveInterval", height: "height", autoSaveOnIdle: "autoSaveOnIdle", disabled: "disabled", target: "target", insertImageSettings: "insertImageSettings", showTicketAttachment: "showTicketAttachment" }, outputs: { toolbarClick: "toolbarClick", change: "change", created: "created", actionBegin: "actionBegin", input: "input", focus: "focus", blur: "blur", actionComplete: "actionComplete", afterPasteCleanup: "afterPasteCleanup" }, viewQueries: [{ propertyName: "rteObj", first: true, predicate: ["editor"], descendants: true }, { propertyName: "queryCategory", first: true, predicate: ["queryCategory"], descendants: true }, { propertyName: "leftRte", first: true, predicate: ["leftRte"], descendants: true }, { propertyName: "rightRte", first: true, predicate: ["rightRte"], descendants: true }, { propertyName: "AIdialog", first: true, predicate: ["AIdialog"], descendants: true, static: true }, { propertyName: "sentimentButton", first: true, predicate: ["sentimentButton"], descendants: true }, { propertyName: "regenerateButton", first: true, predicate: ["regenerateButton"], descendants: true }, { propertyName: "copyButton", first: true, predicate: ["copyButton"], descendants: true }, { propertyName: "replaceButton", first: true, predicate: ["replaceButton"], descendants: true }], ngImport: i0, template: "<div class=\"editor_box\" id=\"container\">\r\n <ejs-richtexteditor\r\n #editor\r\n [id]=\"editorId\"\r\n [height]=\"height\"\r\n [saveInterval]=\"0\"\r\n [autoSaveOnIdle]=\"autoSaveOnIdle\"\r\n [toolbarSettings]=\"tools\"\r\n [bulletFormatList]=\"bulletFormatList\"\r\n [numberFormatList]=\"numberFormatList\"\r\n [fontFamily]=\"family\"\r\n [fontSize]=\"fontSize\"\r\n [disabled]=\"disabled\"\r\n [insertImageSettings]=\"insertImageSettings\"\r\n [(ngModel)]=\"value\"\r\n (actionBegin)=\"_actionBegin($event)\"\r\n (change)=\"onContentChange($event)\"\r\n (created)=\"onCreate()\"\r\n (toolbarClick)=\"_toolbarClick($event)\"\r\n (input)=\"_input($event)\"\r\n (focus)=\"_focus($event)\"\r\n (blur)=\"_blur($event)\"\r\n (actionComplete)=\"_actionComplete($event)\"\r\n (dialogOpen)=\"_dialogOpen($event)\"\r\n (afterPasteCleanup)=\"_afterPasteCleanup($event)\"\r\n >\r\n </ejs-richtexteditor>\r\n <ejs-dialog\r\n #AIdialog\r\n id=\"AIdialog\"\r\n [ngClass]=\"size\"\r\n [visible]=\"false\"\r\n [target]=\"target\"\r\n [isModal]=\"true\"\r\n [height]=\"dialogHeight\"\r\n [width]=\"dialogWidth\"\r\n maxHeight=\"80%\"\r\n cssClass=\"e-rte-elements custom-dialog-rte\"\r\n zIndex=\"1000\"\r\n (close)=\"closeDialog()\"\r\n (overlayClick)=\"onOverlayClick()\"\r\n (open)=\"dialogShow()\"\r\n >\r\n <ng-template #header>\r\n <div class=\"header-title\">\r\n {{ translation.AI_ASSIST || \".AI Assist\" }}\r\n </div>\r\n <div class=\"header-buttons\">\r\n <!-- <div class=\"header-btn\">\r\n <img\r\n src=\"/assets/img/dialog-narrow.svg\"\r\n class=\"header-icon\"\r\n (click)=\"onMinimize()\"\r\n />\r\n </div> -->\r\n <div *ngIf=\"showZoomBtn\" class=\"header-zoom\" (click)=\"onZoom()\">\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size === 'largest'\"\r\n src=\"../../../assets/img/dialog-shrink.svg\"\r\n />\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size !== 'largest'\"\r\n src=\"../../../assets/img/dialog-grow.svg\"\r\n />\r\n </div>\r\n <div class=\"header-btn\" (click)=\"closeDialog()\">\r\n <img class=\"header-icon\" src=\"../../../assets/img/dialog-close.svg\" />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #footerTemplate>\r\n <div id=\"dialog-footer-content\">\r\n <div class=\"custom-row-0\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"width: 100%; align-items: center; justify-content: left\"\r\n ></div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <div style=\"text-align: right; width: 100%\">\r\n <button\r\n ejs-button\r\n #sentimentButton\r\n [content]=\"'\uD83D\uDE0A ' + (translation.NEUTRAL || '.Neutral')\"\r\n disabled=\"false\"\r\n cssClass=\"sentiment\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #copyButton\r\n [content]=\"translation.COPY || '.Copy'\"\r\n disabled=\"false\"\r\n class=\"copy-btn\"\r\n (click)=\"copyClick()\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #replaceButton\r\n [content]=\"translation.REPLACE || '.Replace'\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"replaceClick()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #content>\r\n <div class=\"dialog-content\" style=\"height: 100%\">\r\n <div class=\"custom-row-0\">\r\n <div class=\"cuscol-0\" style=\"width: 100%\">\r\n <ejs-dropdownlist\r\n #queryCategory\r\n style=\"width: 200px\"\r\n id=\"queryCategory\"\r\n [dataSource]=\"queryList\"\r\n index=\"0\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onQuerySelect($event)\"\r\n >\r\n {{ translation.REPHRASE || \".Rephrase\" }}\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Rephrase'\"\r\n id=\"chips-container\"\r\n #chipList\r\n style=\"width: 160px\"\r\n [(ngModel)]=\"chipValue\"\r\n [dataSource]=\"rephraseTyleList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onChipClick($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Translate'\"\r\n #languageCategory\r\n index=\"0\"\r\n id=\"language-Category\"\r\n [dataSource]=\"languageList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onLanguageSelect($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <!-- <ejs-chiplist\r\n id=\"chips-container\"\r\n #chipList\r\n [chips]=\"['Standard', 'Fluent', 'Professional']\"\r\n selection=\"Single\"\r\n cssClass=\"e-outline\"\r\n [selectedChips]=\"[0]\"\r\n (click)=\"onChipClick($event)\"\r\n >\r\n </ejs-chiplist> -->\r\n <button\r\n ejs-button\r\n #regenerateButton\r\n [content]=\"translation.REGENERATE || '.Regenerate'\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"regenerateClick()\"\r\n ></button>\r\n </div>\r\n </div>\r\n <div class=\"custom-row-1\" style=\"height: calc(100% - 40px)\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"\r\n flex: 1;\r\n height: 100%;\r\n align-items: center;\r\n justify-content: left;\r\n overflow: auto;\r\n \"\r\n >\r\n <div style=\"text-align: left; height: 100%\">\r\n <ejs-richtexteditor\r\n #leftRte\r\n id=\"leftRte\"\r\n height=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n [placeholder]=\"\r\n translation.ANALYSIS_OF_AI_SUPPORT ||\r\n '.Analysis of AI Support'\r\n \"\r\n cssClass=\"e-outline\"\r\n >\r\n </ejs-richtexteditor>\r\n </div>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n flex: 1;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden;\r\n \"\r\n >\r\n <div style=\"flex: 1; min-height: 0; overflow: hidden\">\r\n <ejs-richtexteditor\r\n #rightRte\r\n id=\"rightRte\"\r\n height=\"100%\"\r\n width=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n [placeholder]=\"\r\n translation.ANALYSIS_OF_AI_SUPPORT ||\r\n '.Analysis of AI Support'\r\n \"\r\n cssClass=\"e-outline\"\r\n >\r\n </ejs-richtexteditor>\r\n <div\r\n class=\"no-results-found\"\r\n id=\"no-results-found\"\r\n style=\"display: none; height: 244px; align-content: center\"\r\n >\r\n <img\r\n height=\"50\"\r\n width=\"50\"\r\n src=\"https://storage.googleapis.com/cdn-bolddesk/agent-angular-app/images/light/no-records-warning.svg\"\r\n />\r\n <div>\r\n {{ translation.NO_RESULTS_FOUND || \".No results found\" }}\r\n </div>\r\n </div>\r\n <div id=\"skeletonId\">\r\n <ejs-skeleton\r\n #skeletonId1\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"100%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId2\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"90%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId3\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"70%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId4\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"50%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId5\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"30%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId6\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"10%\"\r\n ></ejs-skeleton\r\n ><br />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ejs-dialog>\r\n <!-- <div class=\"toast\" *ngIf=\"showMsg\">\r\n <span class=\"toast_text\">First, Select some text</span\r\n ><span class=\"close_icon\" (click)=\"hideToast()\"></span>\r\n </div> -->\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.editor_box{position:relative;width:100%;height:100%}.editor_box .toast{position:absolute;left:35%;top:110px;z-index:1;width:400px;border-radius:4px;border:1px solid #e8f2ff;background:#f4f8ff;padding:4px 12px;color:#1f3f5c;font-size:12px;font-style:normal;font-weight:400;height:32px;font-family:Arial;display:flex;align-items:center;justify-content:space-between}.editor_box .toast .toast_text:before{content:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2217%22 viewBox%3D%220 0 16 17%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Ccircle cx%3D%228%22 cy%3D%228.5%22 r%3D%226.5%22 stroke%3D%22%236B6B6B%22%2F%3E%0D%3Cpath d%3D%22M8 8.5V11.5%22 stroke%3D%22%236B6B6B%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Ccircle cx%3D%228%22 cy%3D%225.5%22 r%3D%221%22 fill%3D%22%236B6B6B%22%2F%3E%0D%3C%2Fsvg%3E%0D\");display:inline-block;width:16px;height:16px;vertical-align:bottom;margin-right:8px}.editor_box .toast .close_icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cpath d%3D%22M3.50021 12.9999L12.5001 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Cpath d%3D%22M12.4999 12.9999L3.50007 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");cursor:pointer;display:inline-block;width:16px;height:16px}.custom-dialog-rte{padding:0 20px;border-radius:10px}.custom-row-0,.custom-row-1,.custom-row-2{display:flex;align-items:center;padding:12px 24px}.e-rte-dropdown-btn-text{padding-left:4px}.no-results-found{text-align:center}.no-results-found img{display:block;margin:0 auto}.e-custom{margin-right:.5rem;border-radius:25px!important}.custom-dialog-rte .skeleton-rectangle{border-radius:4px}@media (max-width: 767px){.cuscol-0,.cuscol-1,.cuscol-2{justify-content:center!important}.custom-row-0,.custom-row-1,.custom-row-2{flex-direction:column!important}.cuscol-1{border-right:none!important}.cuscol-0{width:100%;align-items:center}::ng-deep:host .e-dialog{max-height:80%!important}.custom-dialog-rte .e-dialog .e-dlg-content{overflow-y:auto!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor{height:100px!important}.cuscol-noresult{padding-bottom:20px!important}.e-chip-list{padding:5px!important}.cuscol{padding-right:.2rem!important;width:auto!important}.custom-row-1{height:auto!important}}.cuscol-1{display:flex;flex-direction:row!important}.cuscol-2{display:flex;flex-direction:column!important}.sentiment{color:#000!important}.custom-dialog-rte .e-dialog .e-dlg-content{padding:0!important;overflow-y:hidden}.custom-dialog-rte .e-dialog .e-dlg-header-content{padding:20px 0!important;border:0!important}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header{display:flex;align-items:center;line-height:18px;justify-content:space-between}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header .header-title{font-family:Arial;font-size:15px;font-weight:700;font-style:normal}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons{display:flex}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons img{width:16px;height:16px;cursor:pointer;padding:2px;margin-left:12px}.custom-dialog-rte .e-dialog .e-footer-content{padding:0!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor.e-rte-tb-expand .e-rte-content,.e-richtexteditor.e-rte-tb-expand .e-source-content{border:0;border-bottom:1px solid #dee2e6;border-top:0px solid #dee2e6!important}.custom-dialog-rte .dialog-content .custom-row-0{border-top:0px solid #ddd!important;padding:0;margin-bottom:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-0{justify-content:left;border-right:none!important;padding:0;display:flex;gap:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1{padding:0;margin-left:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1 .e-primary{color:#44566c;border-radius:4px;border:1px solid #dbe1e7;background:#fff;width:87px;margin:0;padding:2px 12px;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:14px;height:28px}.custom-dialog-rte .dialog-content .custom-row-1{padding:0;height:calc(100% - 40px);gap:12px}.custom-dialog-rte .e-footer-content{border:0}.custom-dialog-rte .e-footer-content .custom-row-0{padding:20px 0}.custom-dialog-rte .e-footer-content .e-control.e-btn{font-family:Arial;font-size:12px;line-height:14px;padding:2px 12px;height:28px;background:#fff;color:#44566c}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn{border-color:#dbe1e7}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn:before{content:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Crect width%3D%2216%22 height%3D%2216%22 fill%3D%22white%22%2F%3E%0D%3Crect x%3D%224.5%22 y%3D%224.5%22 width%3D%229%22 height%3D%229%22 rx%3D%221.5%22 stroke%3D%22%236C7C90%22%2F%3E%0D%3Cpath d%3D%22M11.5 2.5H4.5C3.39543 2.5 2.5 3.39543 2.5 4.5V11.5%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");vertical-align:middle;margin-right:6px}.custom-dialog-rte .e-footer-content .e-control.e-btn.e-primary{color:#fff;background:#1364b3}.e-dialog.largest{width:96vw!important;height:88vh!important;max-height:88vh;max-width:2100px}::ng-deep ol.custom-list{list-style:none!important;counter-reset:list-counter}::ng-deep ol.custom-list li{counter-increment:list-counter}::ng-deep ol.parentheses li::marker{content:\"(\" counter(list-counter) \") \"}::ng-deep .e-tiempos-headline{font-family:Tiempos Headline Semibold!important}::ng-deep .e-avenir-lt-pro-black{font-family:\"Avenir LT Pro 65 Medium\"!important}::ng-deep .e-avenir-lt-pro-black-oblique{font-family:Avenir LT Pro-Black Oblique!important}::ng-deep .e-avenir-lt-pro-heavy{font-family:\"Avenir LT Pro 55 Roman\"!important}::ng-deep .e-avenir-lt-pro-heavy-oblique{font-family:Avenir LT Pro-Heavy Oblique!important}::ng-deep .e-avenir-lt-pro-light{font-family:\"Avenir LT Pro 35 Light\"!important}::ng-deep .e-avenir-lt-pro-light-oblique{font-family:Avenir LT Pro-Light Oblique!important}::ng-deep .e-avenir-lt-pro-medium{font-family:Avenir LT Pro-Medium!important}::ng-deep .e-avenir-lt-pro-medium-oblique{font-family:Avenir LT Pro-Medium Oblique!important}::ng-deep .e-avenir-next-lt-pro-bold{font-family:AvenirNext LT Pro Bold!important}::ng-deep .e-avenir-next-lt-pro-demi{font-family:AvenirNext LT Pro Regular!important}::ng-deep .e-avenir-next-lt-pro-demilt{font-family:Avenir Next LT Pro-Demilt!important}::ng-deep .e-avenir-next-lt-pro-heavy{font-family:AvenirNext LT Pro Heavy!important}::ng-deep .e-avenir-next-lt-pro-heavylt{font-family:AvenirNext LT Pro Heavylt!important}::ng-deep .e-avenir-next-lt-pro-it{font-family:Avenir Next LT Pro-It!important}::ng-deep .e-avenir-next-lt-pro-light{font-family:Avenir Next LT Pro Light!important}::ng-deep .e-avenir-next-lt-pro-mediumlt{font-family:AvenirNext LT Pro Medium!important}::ng-deep .e-avenir-next-lt-pro-regular{font-family:Avenir Next LT Pro-Regular!important}::ng-deep .e-avenir-next-lt-pro-ultlt{font-family:AvenirNext LT Pro UltLight!important}::ng-deep .e-avenir-next-lt-pro-ultltlt{font-family:AvenirNext LT Pro UltLightlt!important}::ng-deep .e-source-han-sans-cn-extralight{font-family:\\601d\\6e90\\9ed1\\4f53 CN ExtraLight!important}::ng-deep .e-source-han-sans-cn-regular{font-family:Source Han Sans CN!important}::ng-deep .e-source-han-sans-cn-medium{font-family:\\601d\\6e90\\9ed1\\4f53 CN Medium!important}::ng-deep .e-source-han-sans-cn-bold{font-family:\\601d\\6e90\\9ed1\\4f53 CN!important}::ng-deep .e-ping-fang-sc-light{font-family:\\82f9\\65b9-\\7b80!important}::ng-deep .e-ping-fang-sc-medium{font-family:Ping Fang SC-Medium!important}::ng-deep .e-ping-fang-sc-regular{font-family:Ping Fang SC-Regular!important}::ng-deep .e-ping-fang-sc-semibold{font-family:Ping Fang SC-Semibold!important}.e-color-palette{width:270px!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.ButtonComponent, selector: "[ejs-button]", inputs: ["content", "cssClass", "disabled", "enableHtmlSanitizer", "enablePersistence", "enableRtl", "iconCss", "iconPosition", "isPrimary", "isToggle", "locale"], outputs: ["created"] }, { kind: "component", type: i7.DialogComponent, selector: "ejs-dialog", inputs: ["allowDragging", "animationSettings", "buttons", "closeOnEscape", "content", "cssClass", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "footerTemplate", "header", "height", "isModal", "locale", "minHeight", "position", "resizeHandles", "showCloseIcon", "target", "visible", "width", "zIndex"], outputs: ["beforeClose", "beforeOpen", "beforeSanitizeHtml", "close", "created", "destroyed", "drag", "dragStart", "dragStop", "open", "overlayClick", "resizeStart", "resizeStop", "resizing", "visibleChange"] }, { kind: "component", type: i8.DropDownListComponent, selector: "ejs-dropdownlist", inputs: ["actionFailureTemplate", "allowFiltering", "allowObjectBinding", "cssClass", "dataSource", "enablePersistence", "enableRtl", "enableVirtualization", "enabled", "fields", "filterBarPlaceholder", "filterType", "floatLabelType", "footerTemplate", "groupTemplate", "headerTemplate", "htmlAttributes", "ignoreAccent", "ignoreCase", "index", "isDeviceFullScreen", "itemTemplate", "locale", "noRecordsTemplate", "placeholder", "popupHeight", "popupWidth", "query", "readonly", "showClearButton", "sortOrder", "text", "value", "valueTemplate", "width", "zIndex"], outputs: ["actionBegin", "actionComplete", "actionFailure", "beforeOpen", "blur", "change", "close", "created", "dataBound", "destroyed", "filtering", "focus", "open", "select", "valueChange"] }, { kind: "component", type: i9.SkeletonComponent, selector: "ejs-skeleton", inputs: ["cssClass", "enablePersistence", "enableRtl", "height", "label", "locale", "shape", "shimmerEffect", "visible", "width"] }, { kind: "component", type: i10.RichTextEditorComponent, selector: "ejs-richtexteditor", inputs: ["autoSaveOnIdle", "backgroundColor", "bulletFormatList", "cssClass", "editorMode", "emojiPickerSettings", "enableAutoUrl", "enableHtmlEncode", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "enableTabKey", "enableXhtml", "enabled", "enterKey", "exportPdf", "exportWord", "fileManagerSettings", "floatingToolbarOffset", "fontColor", "fontFamily", "fontSize", "format", "formatPainterSettings", "formatter", "height", "htmlAttributes", "iframeSettings", "importWord", "inlineMode", "insertAudioSettings", "insertImageSettings", "insertVideoSettings", "keyConfig", "locale", "maxLength", "numberFormatList", "pasteCleanupSettings", "placeholder", "quickToolbarSettings", "readonly", "saveInterval", "shiftEnterKey", "showCharCount", "showTooltip", "slashMenuSettings", "tableSettings", "toolbarSettings", "undoRedoSteps", "undoRedoTimer", "value", "valueTemplate", "width"], outputs: ["actionBegin", "actionComplete", "afterImageDelete", "afterMediaDelete", "afterPasteCleanup", "beforeDialogClose", "beforeDialogOpen", "beforeFileUpload", "beforeImageDrop", "beforeImageUpload", "beforePasteCleanup", "beforeQuickToolbarOpen", "beforeSanitizeHtml", "blur", "change", "created", "destroyed", "dialogClose", "dialogOpen", "fileRemoving", "fileSelected", "fileUploadFailed", "fileUploadSuccess", "fileUploading", "focus", "imageRemoving", "imageSelected", "imageUploadFailed", "imageUploadSuccess", "imageUploading", "quickToolbarClose", "quickToolbarOpen", "resizeStart", "resizeStop", "resizing", "slashMenuItemSelect", "toolbarClick", "toolbarStatusUpdate", "updatedToolbarStatus", "valueChange"] }] });
616
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RichtexteditorComponent, selector: "rs-richtext-editor", inputs: { placeholder: "placeholder", value: "value", editorId: "editorId", saveInterval: "saveInterval", height: "height", autoSaveOnIdle: "autoSaveOnIdle", disabled: "disabled", target: "target", insertImageSettings: "insertImageSettings", showTicketAttachment: "showTicketAttachment" }, outputs: { toolbarClick: "toolbarClick", change: "change", created: "created", actionBegin: "actionBegin", input: "input", focus: "focus", blur: "blur", actionComplete: "actionComplete", afterPasteCleanup: "afterPasteCleanup" }, viewQueries: [{ propertyName: "rteObj", first: true, predicate: ["editor"], descendants: true }, { propertyName: "queryCategory", first: true, predicate: ["queryCategory"], descendants: true }, { propertyName: "leftRte", first: true, predicate: ["leftRte"], descendants: true }, { propertyName: "rightRte", first: true, predicate: ["rightRte"], descendants: true }, { propertyName: "AIdialog", first: true, predicate: ["AIdialog"], descendants: true, static: true }, { propertyName: "sentimentButton", first: true, predicate: ["sentimentButton"], descendants: true }, { propertyName: "regenerateButton", first: true, predicate: ["regenerateButton"], descendants: true }, { propertyName: "copyButton", first: true, predicate: ["copyButton"], descendants: true }, { propertyName: "replaceButton", first: true, predicate: ["replaceButton"], descendants: true }], ngImport: i0, template: "<div class=\"editor_box\" id=\"container\">\r\n <ejs-richtexteditor\r\n #editor\r\n [id]=\"editorId\"\r\n [height]=\"height\"\r\n [saveInterval]=\"0\"\r\n [autoSaveOnIdle]=\"autoSaveOnIdle\"\r\n [toolbarSettings]=\"tools\"\r\n [bulletFormatList]=\"bulletFormatList\"\r\n [numberFormatList]=\"numberFormatList\"\r\n [fontFamily]=\"family\"\r\n [fontSize]=\"fontSize\"\r\n [disabled]=\"disabled\"\r\n [insertImageSettings]=\"insertImageSettings\"\r\n [(ngModel)]=\"value\"\r\n (actionBegin)=\"_actionBegin($event)\"\r\n (change)=\"onContentChange($event)\"\r\n (created)=\"onCreate()\"\r\n (toolbarClick)=\"_toolbarClick($event)\"\r\n (input)=\"_input($event)\"\r\n (focus)=\"_focus($event)\"\r\n (blur)=\"_blur($event)\"\r\n (actionComplete)=\"_actionComplete($event)\"\r\n (dialogOpen)=\"_dialogOpen($event)\"\r\n (afterPasteCleanup)=\"_afterPasteCleanup($event)\"\r\n >\r\n </ejs-richtexteditor>\r\n <ejs-dialog\r\n #AIdialog\r\n id=\"AIdialog\"\r\n [ngClass]=\"size\"\r\n [visible]=\"false\"\r\n [target]=\"target\"\r\n [isModal]=\"true\"\r\n [height]=\"dialogHeight\"\r\n [width]=\"dialogWidth\"\r\n maxHeight=\"80%\"\r\n cssClass=\"e-rte-elements custom-dialog-rte\"\r\n zIndex=\"1000\"\r\n (close)=\"closeDialog()\"\r\n (overlayClick)=\"onOverlayClick()\"\r\n (open)=\"dialogShow()\"\r\n >\r\n <ng-template #header>\r\n <div class=\"header-title\">\r\n {{ translation.AI_ASSIST || \".AI Assist\" }}\r\n </div>\r\n <div class=\"header-buttons\">\r\n <!-- <div class=\"header-btn\" *ngIf=\"zoomout\">\r\n <img\r\n src=\"/assets/img/dialog-narrow.svg\"\r\n class=\"header-icon\"\r\n (click)=\"onMinimize()\"\r\n />\r\n </div> -->\r\n <div *ngIf=\"showZoomBtn\" class=\"header-zoom\" (click)=\"onZoom()\">\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size === 'largest'\"\r\n src=\"../../../assets/img/dialog-shrink.svg\"\r\n />\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size !== 'largest'\"\r\n src=\"../../../assets/img/dialog-grow.svg\"\r\n />\r\n </div>\r\n <div class=\"header-btn\" (click)=\"closeDialog()\">\r\n <img class=\"header-icon\" src=\"../../../assets/img/dialog-close.svg\" />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #footerTemplate>\r\n <div id=\"dialog-footer-content\">\r\n <div class=\"custom-row-0\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"width: 100%; align-items: center; justify-content: left\"\r\n ></div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <div style=\"text-align: right; width: 100%\">\r\n <button\r\n ejs-button\r\n #sentimentButton\r\n [content]=\"'\uD83D\uDE0A ' + (translation.NEUTRAL || '.Neutral')\"\r\n disabled=\"false\"\r\n cssClass=\"sentiment\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #copyButton\r\n [content]=\"translation.COPY || '.Copy'\"\r\n disabled=\"false\"\r\n class=\"copy-btn\"\r\n (click)=\"copyClick()\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #replaceButton\r\n [content]=\"translation.REPLACE || '.Replace'\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"replaceClick()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #content>\r\n <div class=\"dialog-content\" style=\"height: 100%\">\r\n <div class=\"custom-row-0\">\r\n <div class=\"cuscol-0\" style=\"width: 100%\">\r\n <ejs-dropdownlist\r\n #queryCategory\r\n style=\"width: 200px\"\r\n id=\"queryCategory\"\r\n [dataSource]=\"queryList\"\r\n index=\"0\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onQuerySelect($event)\"\r\n >\r\n {{ translation.REPHRASE || \".Rephrase\" }}\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Rephrase'\"\r\n id=\"chips-container\"\r\n #chipList\r\n style=\"width: 160px\"\r\n [(ngModel)]=\"chipValue\"\r\n [dataSource]=\"rephraseTyleList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onChipClick($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Translate'\"\r\n #languageCategory\r\n index=\"0\"\r\n id=\"language-Category\"\r\n [dataSource]=\"languageList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onLanguageSelect($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <!-- <ejs-chiplist\r\n id=\"chips-container\"\r\n #chipList\r\n [chips]=\"['Standard', 'Fluent', 'Professional']\"\r\n selection=\"Single\"\r\n cssClass=\"e-outline\"\r\n [selectedChips]=\"[0]\"\r\n (click)=\"onChipClick($event)\"\r\n >\r\n </ejs-chiplist> -->\r\n <button\r\n ejs-button\r\n #regenerateButton\r\n [content]=\"translation.REGENERATE || '.Regenerate'\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"regenerateClick()\"\r\n ></button>\r\n </div>\r\n </div>\r\n <div class=\"custom-row-1\" style=\"height: calc(100% - 40px)\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"\r\n flex: 1;\r\n height: 100%;\r\n align-items: center;\r\n justify-content: left;\r\n overflow: auto;\r\n \"\r\n >\r\n <div style=\"text-align: left; height: 100%\">\r\n <ejs-richtexteditor\r\n #leftRte\r\n id=\"leftRte\"\r\n height=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n [placeholder]=\"\r\n translation.ANALYSIS_OF_AI_SUPPORT ||\r\n '.Analysis of AI Support'\r\n \"\r\n cssClass=\"e-outline\"\r\n >\r\n </ejs-richtexteditor>\r\n </div>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n flex: 1;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden;\r\n \"\r\n >\r\n <div style=\"flex: 1; min-height: 0; overflow: hidden\">\r\n <ejs-richtexteditor\r\n #rightRte\r\n id=\"rightRte\"\r\n height=\"100%\"\r\n width=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n [placeholder]=\"\r\n translation.ANALYSIS_OF_AI_SUPPORT ||\r\n '.Analysis of AI Support'\r\n \"\r\n cssClass=\"e-outline\"\r\n >\r\n </ejs-richtexteditor>\r\n <div\r\n class=\"no-results-found\"\r\n id=\"no-results-found\"\r\n style=\"display: none; height: 244px; align-content: center\"\r\n >\r\n <img\r\n height=\"50\"\r\n width=\"50\"\r\n src=\"https://storage.googleapis.com/cdn-bolddesk/agent-angular-app/images/light/no-records-warning.svg\"\r\n />\r\n <div>\r\n {{ translation.NO_RESULTS_FOUND || \".No results found\" }}\r\n </div>\r\n </div>\r\n <div id=\"skeletonId\">\r\n <ejs-skeleton\r\n #skeletonId1\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"100%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId2\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"90%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId3\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"70%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId4\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"50%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId5\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"30%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId6\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"10%\"\r\n ></ejs-skeleton\r\n ><br />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ejs-dialog>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.editor_box{position:relative;width:100%;height:100%}.editor_box .toast{position:absolute;left:35%;top:110px;z-index:1;width:400px;border-radius:4px;border:1px solid #e8f2ff;background:#f4f8ff;padding:4px 12px;color:#1f3f5c;font-size:12px;font-style:normal;font-weight:400;height:32px;font-family:Arial;display:flex;align-items:center;justify-content:space-between}.editor_box .toast .toast_text:before{content:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2217%22 viewBox%3D%220 0 16 17%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Ccircle cx%3D%228%22 cy%3D%228.5%22 r%3D%226.5%22 stroke%3D%22%236B6B6B%22%2F%3E%0D%3Cpath d%3D%22M8 8.5V11.5%22 stroke%3D%22%236B6B6B%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Ccircle cx%3D%228%22 cy%3D%225.5%22 r%3D%221%22 fill%3D%22%236B6B6B%22%2F%3E%0D%3C%2Fsvg%3E%0D\");display:inline-block;width:16px;height:16px;vertical-align:bottom;margin-right:8px}.editor_box .toast .close_icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cpath d%3D%22M3.50021 12.9999L12.5001 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Cpath d%3D%22M12.4999 12.9999L3.50007 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");cursor:pointer;display:inline-block;width:16px;height:16px}.custom-dialog-rte{padding:0 20px;border-radius:10px}.custom-row-0,.custom-row-1,.custom-row-2{display:flex;align-items:center;padding:12px 24px}.e-rte-dropdown-btn-text{padding-left:4px}.no-results-found{text-align:center}.no-results-found img{display:block;margin:0 auto}.e-custom{margin-right:.5rem;border-radius:25px!important}.custom-dialog-rte .skeleton-rectangle{border-radius:4px}@media (max-width: 767px){.cuscol-0,.cuscol-1,.cuscol-2{justify-content:center!important}.custom-row-0,.custom-row-1,.custom-row-2{flex-direction:column!important}.cuscol-1{border-right:none!important}.cuscol-0{width:100%;align-items:center}::ng-deep:host .e-dialog{max-height:80%!important}.custom-dialog-rte .e-dialog .e-dlg-content{overflow-y:auto!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor{height:100px!important}.cuscol-noresult{padding-bottom:20px!important}.e-chip-list{padding:5px!important}.cuscol{padding-right:.2rem!important;width:auto!important}.custom-row-1{height:auto!important}}.cuscol-1{display:flex;flex-direction:row!important}.cuscol-2{display:flex;flex-direction:column!important}.sentiment{color:#000!important}.custom-dialog-rte .e-dialog .e-dlg-content{padding:0!important;overflow-y:hidden}.custom-dialog-rte .e-dialog .e-dlg-header-content{padding:20px 0!important;border:0!important}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header{display:flex;align-items:center;line-height:18px;justify-content:space-between}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header .header-title{font-family:Arial;font-size:15px;font-weight:700;font-style:normal}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons{display:flex}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons img{width:16px;height:16px;cursor:pointer;padding:2px;margin-left:12px}.custom-dialog-rte .e-dialog .e-footer-content{padding:0!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor.e-rte-tb-expand .e-rte-content,.e-richtexteditor.e-rte-tb-expand .e-source-content{border:0;border-bottom:1px solid #dee2e6;border-top:0px solid #dee2e6!important}.custom-dialog-rte .dialog-content .custom-row-0{border-top:0px solid #ddd!important;padding:0;margin-bottom:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-0{justify-content:left;border-right:none!important;padding:0;display:flex;gap:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1{padding:0;margin-left:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1 .e-primary{color:#44566c;border-radius:4px;border:1px solid #dbe1e7;background:#fff;width:87px;margin:0;padding:2px 12px;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:14px;height:28px}.custom-dialog-rte .dialog-content .custom-row-1{padding:0;height:calc(100% - 40px);gap:12px}.custom-dialog-rte .e-footer-content{border:0}.custom-dialog-rte .e-footer-content .custom-row-0{padding:20px 0}.custom-dialog-rte .e-footer-content .e-control.e-btn{font-family:Arial;font-size:12px;line-height:14px;padding:2px 12px;height:28px;background:#fff;color:#44566c}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn{border-color:#dbe1e7}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn:before{content:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Crect width%3D%2216%22 height%3D%2216%22 fill%3D%22white%22%2F%3E%0D%3Crect x%3D%224.5%22 y%3D%224.5%22 width%3D%229%22 height%3D%229%22 rx%3D%221.5%22 stroke%3D%22%236C7C90%22%2F%3E%0D%3Cpath d%3D%22M11.5 2.5H4.5C3.39543 2.5 2.5 3.39543 2.5 4.5V11.5%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");vertical-align:middle;margin-right:6px}.custom-dialog-rte .e-footer-content .e-control.e-btn.e-primary{color:#fff;background:#1364b3}.e-dialog.largest{width:96vw!important;height:88vh!important;max-height:88vh;max-width:2100px}::ng-deep ol.custom-list{list-style:none!important;counter-reset:list-counter}::ng-deep ol.custom-list li{counter-increment:list-counter}::ng-deep ol.parentheses li::marker{content:\"(\" counter(list-counter) \") \"}::ng-deep .e-tiempos-headline{font-family:Tiempos Headline Semibold!important}::ng-deep .e-avenir-lt-pro-black{font-family:\"Avenir LT Pro 65 Medium\"!important}::ng-deep .e-avenir-lt-pro-black-oblique{font-family:Avenir LT Pro-Black Oblique!important}::ng-deep .e-avenir-lt-pro-heavy{font-family:\"Avenir LT Pro 55 Roman\"!important}::ng-deep .e-avenir-lt-pro-heavy-oblique{font-family:Avenir LT Pro-Heavy Oblique!important}::ng-deep .e-avenir-lt-pro-light{font-family:\"Avenir LT Pro 35 Light\"!important}::ng-deep .e-avenir-lt-pro-light-oblique{font-family:Avenir LT Pro-Light Oblique!important}::ng-deep .e-avenir-lt-pro-medium{font-family:Avenir LT Pro-Medium!important}::ng-deep .e-avenir-lt-pro-medium-oblique{font-family:Avenir LT Pro-Medium Oblique!important}::ng-deep .e-avenir-next-lt-pro-bold{font-family:AvenirNext LT Pro Bold!important}::ng-deep .e-avenir-next-lt-pro-demi{font-family:AvenirNext LT Pro Regular!important}::ng-deep .e-avenir-next-lt-pro-demilt{font-family:Avenir Next LT Pro-Demilt!important}::ng-deep .e-avenir-next-lt-pro-heavy{font-family:AvenirNext LT Pro Heavy!important}::ng-deep .e-avenir-next-lt-pro-heavylt{font-family:AvenirNext LT Pro Heavylt!important}::ng-deep .e-avenir-next-lt-pro-it{font-family:Avenir Next LT Pro-It!important}::ng-deep .e-avenir-next-lt-pro-light{font-family:Avenir Next LT Pro Light!important}::ng-deep .e-avenir-next-lt-pro-mediumlt{font-family:AvenirNext LT Pro Medium!important}::ng-deep .e-avenir-next-lt-pro-regular{font-family:Avenir Next LT Pro-Regular!important}::ng-deep .e-avenir-next-lt-pro-ultlt{font-family:AvenirNext LT Pro UltLight!important}::ng-deep .e-avenir-next-lt-pro-ultltlt{font-family:AvenirNext LT Pro UltLightlt!important}::ng-deep .e-source-han-sans-cn-extralight{font-family:\\601d\\6e90\\9ed1\\4f53 CN ExtraLight!important}::ng-deep .e-source-han-sans-cn-regular{font-family:Source Han Sans CN!important}::ng-deep .e-source-han-sans-cn-medium{font-family:\\601d\\6e90\\9ed1\\4f53 CN Medium!important}::ng-deep .e-source-han-sans-cn-bold{font-family:\\601d\\6e90\\9ed1\\4f53 CN!important}::ng-deep .e-ping-fang-sc-light{font-family:\\82f9\\65b9-\\7b80!important}::ng-deep .e-ping-fang-sc-medium{font-family:Ping Fang SC-Medium!important}::ng-deep .e-ping-fang-sc-regular{font-family:Ping Fang SC-Regular!important}::ng-deep .e-ping-fang-sc-semibold{font-family:Ping Fang SC-Semibold!important}.e-color-palette{width:270px!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.ButtonComponent, selector: "[ejs-button]", inputs: ["content", "cssClass", "disabled", "enableHtmlSanitizer", "enablePersistence", "enableRtl", "iconCss", "iconPosition", "isPrimary", "isToggle", "locale"], outputs: ["created"] }, { kind: "component", type: i7.DialogComponent, selector: "ejs-dialog", inputs: ["allowDragging", "animationSettings", "buttons", "closeOnEscape", "content", "cssClass", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "footerTemplate", "header", "height", "isModal", "locale", "minHeight", "position", "resizeHandles", "showCloseIcon", "target", "visible", "width", "zIndex"], outputs: ["beforeClose", "beforeOpen", "beforeSanitizeHtml", "close", "created", "destroyed", "drag", "dragStart", "dragStop", "open", "overlayClick", "resizeStart", "resizeStop", "resizing", "visibleChange"] }, { kind: "component", type: i8.DropDownListComponent, selector: "ejs-dropdownlist", inputs: ["actionFailureTemplate", "allowFiltering", "allowObjectBinding", "cssClass", "dataSource", "enablePersistence", "enableRtl", "enableVirtualization", "enabled", "fields", "filterBarPlaceholder", "filterType", "floatLabelType", "footerTemplate", "groupTemplate", "headerTemplate", "htmlAttributes", "ignoreAccent", "ignoreCase", "index", "isDeviceFullScreen", "itemTemplate", "locale", "noRecordsTemplate", "placeholder", "popupHeight", "popupWidth", "query", "readonly", "showClearButton", "sortOrder", "text", "value", "valueTemplate", "width", "zIndex"], outputs: ["actionBegin", "actionComplete", "actionFailure", "beforeOpen", "blur", "change", "close", "created", "dataBound", "destroyed", "filtering", "focus", "open", "select", "valueChange"] }, { kind: "component", type: i9.SkeletonComponent, selector: "ejs-skeleton", inputs: ["cssClass", "enablePersistence", "enableRtl", "height", "label", "locale", "shape", "shimmerEffect", "visible", "width"] }, { kind: "component", type: i10.RichTextEditorComponent, selector: "ejs-richtexteditor", inputs: ["autoSaveOnIdle", "backgroundColor", "bulletFormatList", "cssClass", "editorMode", "emojiPickerSettings", "enableAutoUrl", "enableHtmlEncode", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "enableTabKey", "enableXhtml", "enabled", "enterKey", "exportPdf", "exportWord", "fileManagerSettings", "floatingToolbarOffset", "fontColor", "fontFamily", "fontSize", "format", "formatPainterSettings", "formatter", "height", "htmlAttributes", "iframeSettings", "importWord", "inlineMode", "insertAudioSettings", "insertImageSettings", "insertVideoSettings", "keyConfig", "locale", "maxLength", "numberFormatList", "pasteCleanupSettings", "placeholder", "quickToolbarSettings", "readonly", "saveInterval", "shiftEnterKey", "showCharCount", "showTooltip", "slashMenuSettings", "tableSettings", "toolbarSettings", "undoRedoSteps", "undoRedoTimer", "value", "valueTemplate", "width"], outputs: ["actionBegin", "actionComplete", "afterImageDelete", "afterMediaDelete", "afterPasteCleanup", "beforeDialogClose", "beforeDialogOpen", "beforeFileUpload", "beforeImageDrop", "beforeImageUpload", "beforePasteCleanup", "beforeQuickToolbarOpen", "beforeSanitizeHtml", "blur", "change", "created", "destroyed", "dialogClose", "dialogOpen", "fileRemoving", "fileSelected", "fileUploadFailed", "fileUploadSuccess", "fileUploading", "focus", "imageRemoving", "imageSelected", "imageUploadFailed", "imageUploadSuccess", "imageUploading", "quickToolbarClose", "quickToolbarOpen", "resizeStart", "resizeStop", "resizing", "slashMenuItemSelect", "toolbarClick", "toolbarStatusUpdate", "updatedToolbarStatus", "valueChange"] }] });
676
617
  }
677
618
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RichtexteditorComponent, decorators: [{
678
619
  type: Component,
679
- args: [{ selector: "rs-richtext-editor", template: "<div class=\"editor_box\" id=\"container\">\r\n <ejs-richtexteditor\r\n #editor\r\n [id]=\"editorId\"\r\n [height]=\"height\"\r\n [saveInterval]=\"0\"\r\n [autoSaveOnIdle]=\"autoSaveOnIdle\"\r\n [toolbarSettings]=\"tools\"\r\n [bulletFormatList]=\"bulletFormatList\"\r\n [numberFormatList]=\"numberFormatList\"\r\n [fontFamily]=\"family\"\r\n [fontSize]=\"fontSize\"\r\n [disabled]=\"disabled\"\r\n [insertImageSettings]=\"insertImageSettings\"\r\n [(ngModel)]=\"value\"\r\n (actionBegin)=\"_actionBegin($event)\"\r\n (change)=\"onContentChange($event)\"\r\n (created)=\"onCreate()\"\r\n (toolbarClick)=\"_toolbarClick($event)\"\r\n (input)=\"_input($event)\"\r\n (focus)=\"_focus($event)\"\r\n (blur)=\"_blur($event)\"\r\n (actionComplete)=\"_actionComplete($event)\"\r\n (dialogOpen)=\"_dialogOpen($event)\"\r\n (afterPasteCleanup)=\"_afterPasteCleanup($event)\"\r\n >\r\n </ejs-richtexteditor>\r\n <ejs-dialog\r\n #AIdialog\r\n id=\"AIdialog\"\r\n [ngClass]=\"size\"\r\n [visible]=\"false\"\r\n [target]=\"target\"\r\n [isModal]=\"true\"\r\n [height]=\"dialogHeight\"\r\n [width]=\"dialogWidth\"\r\n maxHeight=\"80%\"\r\n cssClass=\"e-rte-elements custom-dialog-rte\"\r\n zIndex=\"1000\"\r\n (close)=\"closeDialog()\"\r\n (overlayClick)=\"onOverlayClick()\"\r\n (open)=\"dialogShow()\"\r\n >\r\n <ng-template #header>\r\n <div class=\"header-title\">\r\n {{ translation.AI_ASSIST || \".AI Assist\" }}\r\n </div>\r\n <div class=\"header-buttons\">\r\n <!-- <div class=\"header-btn\">\r\n <img\r\n src=\"/assets/img/dialog-narrow.svg\"\r\n class=\"header-icon\"\r\n (click)=\"onMinimize()\"\r\n />\r\n </div> -->\r\n <div *ngIf=\"showZoomBtn\" class=\"header-zoom\" (click)=\"onZoom()\">\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size === 'largest'\"\r\n src=\"../../../assets/img/dialog-shrink.svg\"\r\n />\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size !== 'largest'\"\r\n src=\"../../../assets/img/dialog-grow.svg\"\r\n />\r\n </div>\r\n <div class=\"header-btn\" (click)=\"closeDialog()\">\r\n <img class=\"header-icon\" src=\"../../../assets/img/dialog-close.svg\" />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #footerTemplate>\r\n <div id=\"dialog-footer-content\">\r\n <div class=\"custom-row-0\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"width: 100%; align-items: center; justify-content: left\"\r\n ></div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <div style=\"text-align: right; width: 100%\">\r\n <button\r\n ejs-button\r\n #sentimentButton\r\n [content]=\"'\uD83D\uDE0A ' + (translation.NEUTRAL || '.Neutral')\"\r\n disabled=\"false\"\r\n cssClass=\"sentiment\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #copyButton\r\n [content]=\"translation.COPY || '.Copy'\"\r\n disabled=\"false\"\r\n class=\"copy-btn\"\r\n (click)=\"copyClick()\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #replaceButton\r\n [content]=\"translation.REPLACE || '.Replace'\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"replaceClick()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #content>\r\n <div class=\"dialog-content\" style=\"height: 100%\">\r\n <div class=\"custom-row-0\">\r\n <div class=\"cuscol-0\" style=\"width: 100%\">\r\n <ejs-dropdownlist\r\n #queryCategory\r\n style=\"width: 200px\"\r\n id=\"queryCategory\"\r\n [dataSource]=\"queryList\"\r\n index=\"0\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onQuerySelect($event)\"\r\n >\r\n {{ translation.REPHRASE || \".Rephrase\" }}\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Rephrase'\"\r\n id=\"chips-container\"\r\n #chipList\r\n style=\"width: 160px\"\r\n [(ngModel)]=\"chipValue\"\r\n [dataSource]=\"rephraseTyleList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onChipClick($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Translate'\"\r\n #languageCategory\r\n index=\"0\"\r\n id=\"language-Category\"\r\n [dataSource]=\"languageList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onLanguageSelect($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <!-- <ejs-chiplist\r\n id=\"chips-container\"\r\n #chipList\r\n [chips]=\"['Standard', 'Fluent', 'Professional']\"\r\n selection=\"Single\"\r\n cssClass=\"e-outline\"\r\n [selectedChips]=\"[0]\"\r\n (click)=\"onChipClick($event)\"\r\n >\r\n </ejs-chiplist> -->\r\n <button\r\n ejs-button\r\n #regenerateButton\r\n [content]=\"translation.REGENERATE || '.Regenerate'\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"regenerateClick()\"\r\n ></button>\r\n </div>\r\n </div>\r\n <div class=\"custom-row-1\" style=\"height: calc(100% - 40px)\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"\r\n flex: 1;\r\n height: 100%;\r\n align-items: center;\r\n justify-content: left;\r\n overflow: auto;\r\n \"\r\n >\r\n <div style=\"text-align: left; height: 100%\">\r\n <ejs-richtexteditor\r\n #leftRte\r\n id=\"leftRte\"\r\n height=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n [placeholder]=\"\r\n translation.ANALYSIS_OF_AI_SUPPORT ||\r\n '.Analysis of AI Support'\r\n \"\r\n cssClass=\"e-outline\"\r\n >\r\n </ejs-richtexteditor>\r\n </div>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n flex: 1;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden;\r\n \"\r\n >\r\n <div style=\"flex: 1; min-height: 0; overflow: hidden\">\r\n <ejs-richtexteditor\r\n #rightRte\r\n id=\"rightRte\"\r\n height=\"100%\"\r\n width=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n [placeholder]=\"\r\n translation.ANALYSIS_OF_AI_SUPPORT ||\r\n '.Analysis of AI Support'\r\n \"\r\n cssClass=\"e-outline\"\r\n >\r\n </ejs-richtexteditor>\r\n <div\r\n class=\"no-results-found\"\r\n id=\"no-results-found\"\r\n style=\"display: none; height: 244px; align-content: center\"\r\n >\r\n <img\r\n height=\"50\"\r\n width=\"50\"\r\n src=\"https://storage.googleapis.com/cdn-bolddesk/agent-angular-app/images/light/no-records-warning.svg\"\r\n />\r\n <div>\r\n {{ translation.NO_RESULTS_FOUND || \".No results found\" }}\r\n </div>\r\n </div>\r\n <div id=\"skeletonId\">\r\n <ejs-skeleton\r\n #skeletonId1\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"100%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId2\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"90%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId3\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"70%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId4\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"50%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId5\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"30%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId6\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"10%\"\r\n ></ejs-skeleton\r\n ><br />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ejs-dialog>\r\n <!-- <div class=\"toast\" *ngIf=\"showMsg\">\r\n <span class=\"toast_text\">First, Select some text</span\r\n ><span class=\"close_icon\" (click)=\"hideToast()\"></span>\r\n </div> -->\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.editor_box{position:relative;width:100%;height:100%}.editor_box .toast{position:absolute;left:35%;top:110px;z-index:1;width:400px;border-radius:4px;border:1px solid #e8f2ff;background:#f4f8ff;padding:4px 12px;color:#1f3f5c;font-size:12px;font-style:normal;font-weight:400;height:32px;font-family:Arial;display:flex;align-items:center;justify-content:space-between}.editor_box .toast .toast_text:before{content:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2217%22 viewBox%3D%220 0 16 17%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Ccircle cx%3D%228%22 cy%3D%228.5%22 r%3D%226.5%22 stroke%3D%22%236B6B6B%22%2F%3E%0D%3Cpath d%3D%22M8 8.5V11.5%22 stroke%3D%22%236B6B6B%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Ccircle cx%3D%228%22 cy%3D%225.5%22 r%3D%221%22 fill%3D%22%236B6B6B%22%2F%3E%0D%3C%2Fsvg%3E%0D\");display:inline-block;width:16px;height:16px;vertical-align:bottom;margin-right:8px}.editor_box .toast .close_icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cpath d%3D%22M3.50021 12.9999L12.5001 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Cpath d%3D%22M12.4999 12.9999L3.50007 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");cursor:pointer;display:inline-block;width:16px;height:16px}.custom-dialog-rte{padding:0 20px;border-radius:10px}.custom-row-0,.custom-row-1,.custom-row-2{display:flex;align-items:center;padding:12px 24px}.e-rte-dropdown-btn-text{padding-left:4px}.no-results-found{text-align:center}.no-results-found img{display:block;margin:0 auto}.e-custom{margin-right:.5rem;border-radius:25px!important}.custom-dialog-rte .skeleton-rectangle{border-radius:4px}@media (max-width: 767px){.cuscol-0,.cuscol-1,.cuscol-2{justify-content:center!important}.custom-row-0,.custom-row-1,.custom-row-2{flex-direction:column!important}.cuscol-1{border-right:none!important}.cuscol-0{width:100%;align-items:center}::ng-deep:host .e-dialog{max-height:80%!important}.custom-dialog-rte .e-dialog .e-dlg-content{overflow-y:auto!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor{height:100px!important}.cuscol-noresult{padding-bottom:20px!important}.e-chip-list{padding:5px!important}.cuscol{padding-right:.2rem!important;width:auto!important}.custom-row-1{height:auto!important}}.cuscol-1{display:flex;flex-direction:row!important}.cuscol-2{display:flex;flex-direction:column!important}.sentiment{color:#000!important}.custom-dialog-rte .e-dialog .e-dlg-content{padding:0!important;overflow-y:hidden}.custom-dialog-rte .e-dialog .e-dlg-header-content{padding:20px 0!important;border:0!important}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header{display:flex;align-items:center;line-height:18px;justify-content:space-between}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header .header-title{font-family:Arial;font-size:15px;font-weight:700;font-style:normal}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons{display:flex}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons img{width:16px;height:16px;cursor:pointer;padding:2px;margin-left:12px}.custom-dialog-rte .e-dialog .e-footer-content{padding:0!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor.e-rte-tb-expand .e-rte-content,.e-richtexteditor.e-rte-tb-expand .e-source-content{border:0;border-bottom:1px solid #dee2e6;border-top:0px solid #dee2e6!important}.custom-dialog-rte .dialog-content .custom-row-0{border-top:0px solid #ddd!important;padding:0;margin-bottom:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-0{justify-content:left;border-right:none!important;padding:0;display:flex;gap:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1{padding:0;margin-left:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1 .e-primary{color:#44566c;border-radius:4px;border:1px solid #dbe1e7;background:#fff;width:87px;margin:0;padding:2px 12px;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:14px;height:28px}.custom-dialog-rte .dialog-content .custom-row-1{padding:0;height:calc(100% - 40px);gap:12px}.custom-dialog-rte .e-footer-content{border:0}.custom-dialog-rte .e-footer-content .custom-row-0{padding:20px 0}.custom-dialog-rte .e-footer-content .e-control.e-btn{font-family:Arial;font-size:12px;line-height:14px;padding:2px 12px;height:28px;background:#fff;color:#44566c}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn{border-color:#dbe1e7}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn:before{content:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Crect width%3D%2216%22 height%3D%2216%22 fill%3D%22white%22%2F%3E%0D%3Crect x%3D%224.5%22 y%3D%224.5%22 width%3D%229%22 height%3D%229%22 rx%3D%221.5%22 stroke%3D%22%236C7C90%22%2F%3E%0D%3Cpath d%3D%22M11.5 2.5H4.5C3.39543 2.5 2.5 3.39543 2.5 4.5V11.5%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");vertical-align:middle;margin-right:6px}.custom-dialog-rte .e-footer-content .e-control.e-btn.e-primary{color:#fff;background:#1364b3}.e-dialog.largest{width:96vw!important;height:88vh!important;max-height:88vh;max-width:2100px}::ng-deep ol.custom-list{list-style:none!important;counter-reset:list-counter}::ng-deep ol.custom-list li{counter-increment:list-counter}::ng-deep ol.parentheses li::marker{content:\"(\" counter(list-counter) \") \"}::ng-deep .e-tiempos-headline{font-family:Tiempos Headline Semibold!important}::ng-deep .e-avenir-lt-pro-black{font-family:\"Avenir LT Pro 65 Medium\"!important}::ng-deep .e-avenir-lt-pro-black-oblique{font-family:Avenir LT Pro-Black Oblique!important}::ng-deep .e-avenir-lt-pro-heavy{font-family:\"Avenir LT Pro 55 Roman\"!important}::ng-deep .e-avenir-lt-pro-heavy-oblique{font-family:Avenir LT Pro-Heavy Oblique!important}::ng-deep .e-avenir-lt-pro-light{font-family:\"Avenir LT Pro 35 Light\"!important}::ng-deep .e-avenir-lt-pro-light-oblique{font-family:Avenir LT Pro-Light Oblique!important}::ng-deep .e-avenir-lt-pro-medium{font-family:Avenir LT Pro-Medium!important}::ng-deep .e-avenir-lt-pro-medium-oblique{font-family:Avenir LT Pro-Medium Oblique!important}::ng-deep .e-avenir-next-lt-pro-bold{font-family:AvenirNext LT Pro Bold!important}::ng-deep .e-avenir-next-lt-pro-demi{font-family:AvenirNext LT Pro Regular!important}::ng-deep .e-avenir-next-lt-pro-demilt{font-family:Avenir Next LT Pro-Demilt!important}::ng-deep .e-avenir-next-lt-pro-heavy{font-family:AvenirNext LT Pro Heavy!important}::ng-deep .e-avenir-next-lt-pro-heavylt{font-family:AvenirNext LT Pro Heavylt!important}::ng-deep .e-avenir-next-lt-pro-it{font-family:Avenir Next LT Pro-It!important}::ng-deep .e-avenir-next-lt-pro-light{font-family:Avenir Next LT Pro Light!important}::ng-deep .e-avenir-next-lt-pro-mediumlt{font-family:AvenirNext LT Pro Medium!important}::ng-deep .e-avenir-next-lt-pro-regular{font-family:Avenir Next LT Pro-Regular!important}::ng-deep .e-avenir-next-lt-pro-ultlt{font-family:AvenirNext LT Pro UltLight!important}::ng-deep .e-avenir-next-lt-pro-ultltlt{font-family:AvenirNext LT Pro UltLightlt!important}::ng-deep .e-source-han-sans-cn-extralight{font-family:\\601d\\6e90\\9ed1\\4f53 CN ExtraLight!important}::ng-deep .e-source-han-sans-cn-regular{font-family:Source Han Sans CN!important}::ng-deep .e-source-han-sans-cn-medium{font-family:\\601d\\6e90\\9ed1\\4f53 CN Medium!important}::ng-deep .e-source-han-sans-cn-bold{font-family:\\601d\\6e90\\9ed1\\4f53 CN!important}::ng-deep .e-ping-fang-sc-light{font-family:\\82f9\\65b9-\\7b80!important}::ng-deep .e-ping-fang-sc-medium{font-family:Ping Fang SC-Medium!important}::ng-deep .e-ping-fang-sc-regular{font-family:Ping Fang SC-Regular!important}::ng-deep .e-ping-fang-sc-semibold{font-family:Ping Fang SC-Semibold!important}.e-color-palette{width:270px!important}\n"] }]
620
+ args: [{ selector: "rs-richtext-editor", template: "<div class=\"editor_box\" id=\"container\">\r\n <ejs-richtexteditor\r\n #editor\r\n [id]=\"editorId\"\r\n [height]=\"height\"\r\n [saveInterval]=\"0\"\r\n [autoSaveOnIdle]=\"autoSaveOnIdle\"\r\n [toolbarSettings]=\"tools\"\r\n [bulletFormatList]=\"bulletFormatList\"\r\n [numberFormatList]=\"numberFormatList\"\r\n [fontFamily]=\"family\"\r\n [fontSize]=\"fontSize\"\r\n [disabled]=\"disabled\"\r\n [insertImageSettings]=\"insertImageSettings\"\r\n [(ngModel)]=\"value\"\r\n (actionBegin)=\"_actionBegin($event)\"\r\n (change)=\"onContentChange($event)\"\r\n (created)=\"onCreate()\"\r\n (toolbarClick)=\"_toolbarClick($event)\"\r\n (input)=\"_input($event)\"\r\n (focus)=\"_focus($event)\"\r\n (blur)=\"_blur($event)\"\r\n (actionComplete)=\"_actionComplete($event)\"\r\n (dialogOpen)=\"_dialogOpen($event)\"\r\n (afterPasteCleanup)=\"_afterPasteCleanup($event)\"\r\n >\r\n </ejs-richtexteditor>\r\n <ejs-dialog\r\n #AIdialog\r\n id=\"AIdialog\"\r\n [ngClass]=\"size\"\r\n [visible]=\"false\"\r\n [target]=\"target\"\r\n [isModal]=\"true\"\r\n [height]=\"dialogHeight\"\r\n [width]=\"dialogWidth\"\r\n maxHeight=\"80%\"\r\n cssClass=\"e-rte-elements custom-dialog-rte\"\r\n zIndex=\"1000\"\r\n (close)=\"closeDialog()\"\r\n (overlayClick)=\"onOverlayClick()\"\r\n (open)=\"dialogShow()\"\r\n >\r\n <ng-template #header>\r\n <div class=\"header-title\">\r\n {{ translation.AI_ASSIST || \".AI Assist\" }}\r\n </div>\r\n <div class=\"header-buttons\">\r\n <!-- <div class=\"header-btn\" *ngIf=\"zoomout\">\r\n <img\r\n src=\"/assets/img/dialog-narrow.svg\"\r\n class=\"header-icon\"\r\n (click)=\"onMinimize()\"\r\n />\r\n </div> -->\r\n <div *ngIf=\"showZoomBtn\" class=\"header-zoom\" (click)=\"onZoom()\">\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size === 'largest'\"\r\n src=\"../../../assets/img/dialog-shrink.svg\"\r\n />\r\n <img\r\n class=\"header-icon\"\r\n *ngIf=\"size !== 'largest'\"\r\n src=\"../../../assets/img/dialog-grow.svg\"\r\n />\r\n </div>\r\n <div class=\"header-btn\" (click)=\"closeDialog()\">\r\n <img class=\"header-icon\" src=\"../../../assets/img/dialog-close.svg\" />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #footerTemplate>\r\n <div id=\"dialog-footer-content\">\r\n <div class=\"custom-row-0\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"width: 100%; align-items: center; justify-content: left\"\r\n ></div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <div style=\"text-align: right; width: 100%\">\r\n <button\r\n ejs-button\r\n #sentimentButton\r\n [content]=\"'\uD83D\uDE0A ' + (translation.NEUTRAL || '.Neutral')\"\r\n disabled=\"false\"\r\n cssClass=\"sentiment\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #copyButton\r\n [content]=\"translation.COPY || '.Copy'\"\r\n disabled=\"false\"\r\n class=\"copy-btn\"\r\n (click)=\"copyClick()\"\r\n ></button>\r\n <button\r\n ejs-button\r\n #replaceButton\r\n [content]=\"translation.REPLACE || '.Replace'\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"replaceClick()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template #content>\r\n <div class=\"dialog-content\" style=\"height: 100%\">\r\n <div class=\"custom-row-0\">\r\n <div class=\"cuscol-0\" style=\"width: 100%\">\r\n <ejs-dropdownlist\r\n #queryCategory\r\n style=\"width: 200px\"\r\n id=\"queryCategory\"\r\n [dataSource]=\"queryList\"\r\n index=\"0\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onQuerySelect($event)\"\r\n >\r\n {{ translation.REPHRASE || \".Rephrase\" }}\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Rephrase'\"\r\n id=\"chips-container\"\r\n #chipList\r\n style=\"width: 160px\"\r\n [(ngModel)]=\"chipValue\"\r\n [dataSource]=\"rephraseTyleList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onChipClick($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n <ejs-dropdownlist\r\n *ngIf=\"selectedQuery == 'Translate'\"\r\n #languageCategory\r\n index=\"0\"\r\n id=\"language-Category\"\r\n [dataSource]=\"languageList\"\r\n [fields]=\"{ text: 'text', value: 'id' }\"\r\n (select)=\"onLanguageSelect($event)\"\r\n >\r\n </ejs-dropdownlist>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n \"\r\n >\r\n <!-- <ejs-chiplist\r\n id=\"chips-container\"\r\n #chipList\r\n [chips]=\"['Standard', 'Fluent', 'Professional']\"\r\n selection=\"Single\"\r\n cssClass=\"e-outline\"\r\n [selectedChips]=\"[0]\"\r\n (click)=\"onChipClick($event)\"\r\n >\r\n </ejs-chiplist> -->\r\n <button\r\n ejs-button\r\n #regenerateButton\r\n [content]=\"translation.REGENERATE || '.Regenerate'\"\r\n isPrimary=\"true\"\r\n disabled=\"false\"\r\n (click)=\"regenerateClick()\"\r\n ></button>\r\n </div>\r\n </div>\r\n <div class=\"custom-row-1\" style=\"height: calc(100% - 40px)\">\r\n <div\r\n class=\"cuscol-0\"\r\n style=\"\r\n flex: 1;\r\n height: 100%;\r\n align-items: center;\r\n justify-content: left;\r\n overflow: auto;\r\n \"\r\n >\r\n <div style=\"text-align: left; height: 100%\">\r\n <ejs-richtexteditor\r\n #leftRte\r\n id=\"leftRte\"\r\n height=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n [placeholder]=\"\r\n translation.ANALYSIS_OF_AI_SUPPORT ||\r\n '.Analysis of AI Support'\r\n \"\r\n cssClass=\"e-outline\"\r\n >\r\n </ejs-richtexteditor>\r\n </div>\r\n </div>\r\n <div\r\n class=\"cuscol-1\"\r\n style=\"\r\n flex: 1;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden;\r\n \"\r\n >\r\n <div style=\"flex: 1; min-height: 0; overflow: hidden\">\r\n <ejs-richtexteditor\r\n #rightRte\r\n id=\"rightRte\"\r\n height=\"100%\"\r\n width=\"100%\"\r\n [toolbarSettings]=\"{ enable: false }\"\r\n [placeholder]=\"\r\n translation.ANALYSIS_OF_AI_SUPPORT ||\r\n '.Analysis of AI Support'\r\n \"\r\n cssClass=\"e-outline\"\r\n >\r\n </ejs-richtexteditor>\r\n <div\r\n class=\"no-results-found\"\r\n id=\"no-results-found\"\r\n style=\"display: none; height: 244px; align-content: center\"\r\n >\r\n <img\r\n height=\"50\"\r\n width=\"50\"\r\n src=\"https://storage.googleapis.com/cdn-bolddesk/agent-angular-app/images/light/no-records-warning.svg\"\r\n />\r\n <div>\r\n {{ translation.NO_RESULTS_FOUND || \".No results found\" }}\r\n </div>\r\n </div>\r\n <div id=\"skeletonId\">\r\n <ejs-skeleton\r\n #skeletonId1\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"100%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId2\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"90%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId3\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"70%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId4\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"50%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId5\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"30%\"\r\n ></ejs-skeleton\r\n ><br />\r\n <ejs-skeleton\r\n #skeletonId6\r\n shape=\"Rectangle\"\r\n height=\"16px\"\r\n width=\"10%\"\r\n ></ejs-skeleton\r\n ><br />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ejs-dialog>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.editor_box{position:relative;width:100%;height:100%}.editor_box .toast{position:absolute;left:35%;top:110px;z-index:1;width:400px;border-radius:4px;border:1px solid #e8f2ff;background:#f4f8ff;padding:4px 12px;color:#1f3f5c;font-size:12px;font-style:normal;font-weight:400;height:32px;font-family:Arial;display:flex;align-items:center;justify-content:space-between}.editor_box .toast .toast_text:before{content:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2217%22 viewBox%3D%220 0 16 17%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Ccircle cx%3D%228%22 cy%3D%228.5%22 r%3D%226.5%22 stroke%3D%22%236B6B6B%22%2F%3E%0D%3Cpath d%3D%22M8 8.5V11.5%22 stroke%3D%22%236B6B6B%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Ccircle cx%3D%228%22 cy%3D%225.5%22 r%3D%221%22 fill%3D%22%236B6B6B%22%2F%3E%0D%3C%2Fsvg%3E%0D\");display:inline-block;width:16px;height:16px;vertical-align:bottom;margin-right:8px}.editor_box .toast .close_icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cpath d%3D%22M3.50021 12.9999L12.5001 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3Cpath d%3D%22M12.4999 12.9999L3.50007 4.00007%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");cursor:pointer;display:inline-block;width:16px;height:16px}.custom-dialog-rte{padding:0 20px;border-radius:10px}.custom-row-0,.custom-row-1,.custom-row-2{display:flex;align-items:center;padding:12px 24px}.e-rte-dropdown-btn-text{padding-left:4px}.no-results-found{text-align:center}.no-results-found img{display:block;margin:0 auto}.e-custom{margin-right:.5rem;border-radius:25px!important}.custom-dialog-rte .skeleton-rectangle{border-radius:4px}@media (max-width: 767px){.cuscol-0,.cuscol-1,.cuscol-2{justify-content:center!important}.custom-row-0,.custom-row-1,.custom-row-2{flex-direction:column!important}.cuscol-1{border-right:none!important}.cuscol-0{width:100%;align-items:center}::ng-deep:host .e-dialog{max-height:80%!important}.custom-dialog-rte .e-dialog .e-dlg-content{overflow-y:auto!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor{height:100px!important}.cuscol-noresult{padding-bottom:20px!important}.e-chip-list{padding:5px!important}.cuscol{padding-right:.2rem!important;width:auto!important}.custom-row-1{height:auto!important}}.cuscol-1{display:flex;flex-direction:row!important}.cuscol-2{display:flex;flex-direction:column!important}.sentiment{color:#000!important}.custom-dialog-rte .e-dialog .e-dlg-content{padding:0!important;overflow-y:hidden}.custom-dialog-rte .e-dialog .e-dlg-header-content{padding:20px 0!important;border:0!important}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header{display:flex;align-items:center;line-height:18px;justify-content:space-between}.custom-dialog-rte .e-dialog .e-dlg-header-content .e-dlg-header .header-title{font-family:Arial;font-size:15px;font-weight:700;font-style:normal}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons{display:flex}.custom-dialog-rte .e-dialog .e-dlg-header-content .header-buttons img{width:16px;height:16px;cursor:pointer;padding:2px;margin-left:12px}.custom-dialog-rte .e-dialog .e-footer-content{padding:0!important}.custom-dialog-rte .e-dialog .e-dlg-content .e-richtexteditor.e-rte-tb-expand .e-rte-content,.e-richtexteditor.e-rte-tb-expand .e-source-content{border:0;border-bottom:1px solid #dee2e6;border-top:0px solid #dee2e6!important}.custom-dialog-rte .dialog-content .custom-row-0{border-top:0px solid #ddd!important;padding:0;margin-bottom:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-0{justify-content:left;border-right:none!important;padding:0;display:flex;gap:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1{padding:0;margin-left:12px}.custom-dialog-rte .dialog-content .custom-row-0 .cuscol-1 .e-primary{color:#44566c;border-radius:4px;border:1px solid #dbe1e7;background:#fff;width:87px;margin:0;padding:2px 12px;font-family:Arial;font-size:12px;font-style:normal;font-weight:400;line-height:14px;height:28px}.custom-dialog-rte .dialog-content .custom-row-1{padding:0;height:calc(100% - 40px);gap:12px}.custom-dialog-rte .e-footer-content{border:0}.custom-dialog-rte .e-footer-content .custom-row-0{padding:20px 0}.custom-dialog-rte .e-footer-content .e-control.e-btn{font-family:Arial;font-size:12px;line-height:14px;padding:2px 12px;height:28px;background:#fff;color:#44566c}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn{border-color:#dbe1e7}.custom-dialog-rte .e-footer-content .e-control.e-btn.copy-btn:before{content:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Crect width%3D%2216%22 height%3D%2216%22 fill%3D%22white%22%2F%3E%0D%3Crect x%3D%224.5%22 y%3D%224.5%22 width%3D%229%22 height%3D%229%22 rx%3D%221.5%22 stroke%3D%22%236C7C90%22%2F%3E%0D%3Cpath d%3D%22M11.5 2.5H4.5C3.39543 2.5 2.5 3.39543 2.5 4.5V11.5%22 stroke%3D%22%236C7C90%22 stroke-linecap%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E%0D\");vertical-align:middle;margin-right:6px}.custom-dialog-rte .e-footer-content .e-control.e-btn.e-primary{color:#fff;background:#1364b3}.e-dialog.largest{width:96vw!important;height:88vh!important;max-height:88vh;max-width:2100px}::ng-deep ol.custom-list{list-style:none!important;counter-reset:list-counter}::ng-deep ol.custom-list li{counter-increment:list-counter}::ng-deep ol.parentheses li::marker{content:\"(\" counter(list-counter) \") \"}::ng-deep .e-tiempos-headline{font-family:Tiempos Headline Semibold!important}::ng-deep .e-avenir-lt-pro-black{font-family:\"Avenir LT Pro 65 Medium\"!important}::ng-deep .e-avenir-lt-pro-black-oblique{font-family:Avenir LT Pro-Black Oblique!important}::ng-deep .e-avenir-lt-pro-heavy{font-family:\"Avenir LT Pro 55 Roman\"!important}::ng-deep .e-avenir-lt-pro-heavy-oblique{font-family:Avenir LT Pro-Heavy Oblique!important}::ng-deep .e-avenir-lt-pro-light{font-family:\"Avenir LT Pro 35 Light\"!important}::ng-deep .e-avenir-lt-pro-light-oblique{font-family:Avenir LT Pro-Light Oblique!important}::ng-deep .e-avenir-lt-pro-medium{font-family:Avenir LT Pro-Medium!important}::ng-deep .e-avenir-lt-pro-medium-oblique{font-family:Avenir LT Pro-Medium Oblique!important}::ng-deep .e-avenir-next-lt-pro-bold{font-family:AvenirNext LT Pro Bold!important}::ng-deep .e-avenir-next-lt-pro-demi{font-family:AvenirNext LT Pro Regular!important}::ng-deep .e-avenir-next-lt-pro-demilt{font-family:Avenir Next LT Pro-Demilt!important}::ng-deep .e-avenir-next-lt-pro-heavy{font-family:AvenirNext LT Pro Heavy!important}::ng-deep .e-avenir-next-lt-pro-heavylt{font-family:AvenirNext LT Pro Heavylt!important}::ng-deep .e-avenir-next-lt-pro-it{font-family:Avenir Next LT Pro-It!important}::ng-deep .e-avenir-next-lt-pro-light{font-family:Avenir Next LT Pro Light!important}::ng-deep .e-avenir-next-lt-pro-mediumlt{font-family:AvenirNext LT Pro Medium!important}::ng-deep .e-avenir-next-lt-pro-regular{font-family:Avenir Next LT Pro-Regular!important}::ng-deep .e-avenir-next-lt-pro-ultlt{font-family:AvenirNext LT Pro UltLight!important}::ng-deep .e-avenir-next-lt-pro-ultltlt{font-family:AvenirNext LT Pro UltLightlt!important}::ng-deep .e-source-han-sans-cn-extralight{font-family:\\601d\\6e90\\9ed1\\4f53 CN ExtraLight!important}::ng-deep .e-source-han-sans-cn-regular{font-family:Source Han Sans CN!important}::ng-deep .e-source-han-sans-cn-medium{font-family:\\601d\\6e90\\9ed1\\4f53 CN Medium!important}::ng-deep .e-source-han-sans-cn-bold{font-family:\\601d\\6e90\\9ed1\\4f53 CN!important}::ng-deep .e-ping-fang-sc-light{font-family:\\82f9\\65b9-\\7b80!important}::ng-deep .e-ping-fang-sc-medium{font-family:Ping Fang SC-Medium!important}::ng-deep .e-ping-fang-sc-regular{font-family:Ping Fang SC-Regular!important}::ng-deep .e-ping-fang-sc-semibold{font-family:Ping Fang SC-Semibold!important}.e-color-palette{width:270px!important}\n"] }]
680
621
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.DialogService }, { type: i3.MatSnackBar }]; }, propDecorators: { rteObj: [{
681
622
  type: ViewChild,
682
623
  args: ["editor", { static: false }]
@@ -743,4 +684,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
743
684
  }], afterPasteCleanup: [{
744
685
  type: Output
745
686
  }] } });
746
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vcmljaHRleHRlZGl0b3IvaW5kZXguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vcmljaHRleHRlZGl0b3IvaW5kZXguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBT3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7QUFZakQsTUFBTSxPQUFPLHVCQUF1QjtJQWdIeEI7SUFDQTtJQUNBO0lBQ0E7SUFqSEgsTUFBTSxDQUEwQjtJQUVoQyxhQUFhLENBQXlCO0lBRXRDLE9BQU8sQ0FBMkI7SUFFbEMsUUFBUSxDQUEyQjtJQUNNLFFBQVEsQ0FBbUI7SUFFcEUsZUFBZSxDQUFtQjtJQUVsQyxnQkFBZ0IsQ0FBbUI7SUFFbkMsVUFBVSxDQUFtQjtJQUU3QixhQUFhLENBQW1CO0lBQ3ZDLGlGQUFpRjtJQUV4RSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQ3RCLFlBQVksR0FBRyxHQUFHLENBQUM7SUFDbkIsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUNoQixjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLGNBQWM7SUFDcEMs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QkFBYixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgRHJvcERvd25MaXN0Q29tcG9uZW50IH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWRyb3Bkb3duc1wiO1xyXG5pbXBvcnQge1xyXG4gIFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50LFxyXG4gIFRvb2xiYXJTZXR0aW5nc01vZGVsLFxyXG59IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1yaWNodGV4dGVkaXRvclwiO1xyXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItYnV0dG9uc1wiO1xyXG5pbXBvcnQgeyBEcm9wRG93bkJ1dHRvbiB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1zcGxpdGJ1dHRvbnNcIjtcclxuaW1wb3J0IHsgRGlhbG9nQ29tcG9uZW50IH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXBvcHVwc1wiO1xyXG4vLyBzZXJ2aWNlXHJcbi8vIGltcG9ydCB7IFBiRnVuU2VydmljZSB9IGZyb20gXCJAYXBwL3NlcnZpY2VzL3BiLWZ1bi5zZXJ2aWNlXCI7XHJcbi8vIGltcG9ydCB7IFNoYXJlZFN5bmNmdXNpb25Nb2R1bGUgfSBmcm9tIFwiQGFwcC9tb2R1bGUvc3luY2Z1c2lvbk1vZHVsZVwiO1xyXG5pbXBvcnQgeyBPcGVuQWlNb2RlbFJURSB9IGZyb20gXCIuL29wZW5hcGlcIjtcclxuaW1wb3J0IHsgbGluZUhlaWdodF9pdGVtcyB9IGZyb20gXCIuL2RhdGEtY29uZmlnXCI7XHJcbmltcG9ydCB7IGZvbnRGYW1pbHksIHNpemUgfSBmcm9tIFwiLi9kYXRhLWNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBnZXRBSUNvbmZpZywgaXNBSUNvbmZpZ1ZhbGlkLCBBSUNvbmZpZyB9IGZyb20gXCIuL2FpLWNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2UvZGlhbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJycy1yaWNodGV4dC1lZGl0b3JcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2luZGV4LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2luZGV4LmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIC8vIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgLy8gaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgU2hhcmVkU3luY2Z1c2lvbk1vZHVsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSaWNodGV4dGVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZChcImVkaXRvclwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcnRlT2JqOiBSaWNoVGV4dEVkaXRvckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicXVlcnlDYXRlZ29yeVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcXVlcnlDYXRlZ29yeSE6IERyb3BEb3duTGlzdENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwibGVmdFJ0ZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgbGVmdFJ0ZSE6IFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJyaWdodFJ0ZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmlnaHRSdGUhOiBSaWNoVGV4dEVkaXRvckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiQUlkaWFsb2dcIiwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIEFJZGlhbG9nITogRGlhbG9nQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJzZW50aW1lbnRCdXR0b25cIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgcHVibGljIHNlbnRpbWVudEJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicmVnZW5lcmF0ZUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmVnZW5lcmF0ZUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiY29weUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgY29weUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwicmVwbGFjZUJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgcmVwbGFjZUJ1dHRvbiE6IEJ1dHRvbkNvbXBvbmVudDtcclxuICAvLyBAVmlld0NoaWxkKFwiY2hpcExpc3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBjaGlwTGlzdCE6IENoaXBMaXN0Q29tcG9uZW50O1xyXG5cclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgQElucHV0KCkgdmFsdWUgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIGVkaXRvcklkID0gXCJlZGl0b3JJZFwiO1xyXG4gIEBJbnB1dCgpIHNhdmVJbnRlcnZhbCA9IDUwMDtcclxuICBASW5wdXQoKSBoZWlnaHQgPSBcImF1dG9cIjtcclxuICBASW5wdXQoKSBhdXRvU2F2ZU9uSWRsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSB0YXJnZXQgPSBcIiNtYWluUGFnZVwiOyAvLyBkaWFsb2cg5by556qX54i257qnXHJcbiAgQElucHV0KCkgaW5zZXJ0SW1hZ2VTZXR0aW5ncyA9IHtcclxuICAgIHNhdmVGb3JtYXQ6IFwiQmxvYlwiLFxyXG4gICAgYWxsb3dlZFR5cGVzOiBbXCIuc3ZnXCIsIFwiLnBuZ1wiXSxcclxuICAgIGRpc3BsYXk6IFwibm9uZVwiLFxyXG4gIH07XHJcbiAgQElucHV0KCkgc2hvd1RpY2tldEF0dGFjaG1lbnQgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHRvb2xiYXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25CZWdpbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaW5wdXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25Db21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJQYXN0ZUNsZWFudXAgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGZhbWlseSA9IGZvbnRGYW1pbHk7XHJcbiAgZm9udFNpemUgPSBzaXplO1xyXG4gIGRpYWxvZ1dpZHRoID0gXCI4MDBweFwiO1xyXG4gIGRpYWxvZ0hlaWdodCA9IFwiNjQycHhcIjtcclxuICBzaG93Wm9vbUJ0biA9IHRydWU7XHJcbiAgc2hvd01zZyA9IGZhbHNlO1xyXG4gIGVkaXRvck1hbmFnZXI6IGFueTtcclxuICBzaXplID0gXCJcIjtcclxuICBzZWxlY3RlZFF1ZXJ5O1xyXG4gIHB1YmxpYyBkcm9wVmFsSW5kZXggPSAwO1xyXG4gIHB1YmxpYyBxdWVyeUxpc3Q6IHsgaWQ6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXSA9IFtdO1xyXG4gIHB1YmxpYyByZXBocmFzZVR5bGVMaXN0ID0gW107XHJcbiAgcHVibGljIGxhbmd1YWdlTGlzdDogeyBpZDogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfVtdID0gW107XHJcbiAgcHVibGljIHByb21wdFF1ZXJ5ID0gXCJcIjtcclxuICBwdWJsaWMgaXNTZW50aW1lbnRDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzdWJRdWVyeSA9IFwiXCI7XHJcbiAgcHVibGljIHRyYW5zbGF0ZWxhbmd1YWdlITogc3RyaW5nO1xyXG4gIHB1YmxpYyBjaGlwVmFsdWUgPSBcIlN0YW5kYXJkXCI7XHJcbiAgcHVibGljIGFwaVJlc3VsdERhdGE6IGFueTtcclxuICBwdWJsaWMgQUlSZXN1bHQhOiBzdHJpbmc7XHJcbiAgdG9vbHM6IFRvb2xiYXJTZXR0aW5nc01vZGVsO1xyXG4gIHB1YmxpYyBpc0RpYWxvZ1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIGJ1bGxldEZvcm1hdExpc3QgPSB7XHJcbiAgICB0eXBlczogW1xyXG4gICAgICB7IHRleHQ6IFwiTm9uZVwiLCB2YWx1ZTogXCJub25lXCIgfSxcclxuICAgICAgeyB0ZXh0OiBcIuKXj1wiLCB2YWx1ZTogXCJkaXNjXCIgfSxcclxuICAgICAgeyB0ZXh0OiBcIuKXi1wiLCB2YWx1ZTogXCJjaXJjbGVcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwi4pagXCIsIHZhbHVlOiBcInNxdWFyZVwiIH0sXHJcbiAgICAgIC8vIEFkZCB5b3VyIGN1c3RvbSBidWxsZXQgc3R5bGUgaGVyZVxyXG4gICAgICB7IHRleHQ6IFwiLVwiLCB2YWx1ZTogXCJkYXNoXCIgfSxcclxuICAgIF0sXHJcbiAgfTtcclxuICBwdWJsaWMgbnVtYmVyRm9ybWF0TGlzdCA9IHtcclxuICAgIHR5cGVzOiBbXHJcbiAgICAgIHsgdGV4dDogXCJOb25lXCIsIHZhbHVlOiBcIm5vbmVcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwiMSwgMiwgMywg4oCmXCIsIHZhbHVlOiBcImRlY2ltYWxcIiB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCLOsSwgzrIsIM6zLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJsb3dlckdyZWVrXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcImksIGlpLCBpaWksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcImxvd2VyUm9tYW5cIixcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRleHQ6IFwiQSwgQiwgQywg4oCmXCIsXHJcbiAgICAgICAgdmFsdWU6IFwidXBwZXJBbHBoYVwiLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCJhLCBiLCBjLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJsb3dlckFscGhhXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcIkksIElJLCBJSUksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcInVwcGVyUm9tYW5cIixcclxuICAgICAgfSxcclxuICAgICAgLy8gQWRkIHlvdXIgY3VzdG9tIGJ1bGxldCBzdHlsZSBoZXJlXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcIigxKSwgKDIpLCAoMyksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcInBhcmVudGhlc2VzXCIsXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH07XHJcbiAgdHJhbnNsYXRpb246IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudHJhbnNsYXRpb24gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidHJhbnNsYXRpb25cIikpIHx8IHt9O1xyXG4gICAgdGhpcy5xdWVyeUxpc3QgPSBbXHJcbiAgICAgIHsgaWQ6IFwiUmVwaHJhc2VcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5SRVBIUkFTRSB8fCBcIi5SZXBocmFzZVwiIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogXCJHcmFtbWFyXCIsXHJcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5DT1JSRUNUX0dSQU1NQVIgfHwgXCIuQ29ycmVjdCBHcmFtbWFyXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgaWQ6IFwiU3VtbWFyaXplXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uU1VNTUFSSVpFIHx8IFwiLlN1bW1hcml6ZVwiIH0sXHJcbiAgICAgIHsgaWQ6IFwiRWxhYm9yYXRlXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uRUxBQk9SQVRFIHx8IFwiLkVsYWJvcmF0ZVwiIH0sXHJcbiAgICAgIHsgaWQ6IFwiVHJhbnNsYXRlXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uVFJBTlNMQVRFIHx8IFwiLlRyYW5zbGF0ZVwiIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogXCJTZW50aW1lbnRBbmFseXNpc1wiLFxyXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uU0VOVElNRU5UX0FOQUxZU0lTIHx8IFwiLlNlbnRpbWVudCBBbmFseXNpc1wiLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMucmVwaHJhc2VUeWxlTGlzdCA9IFtcclxuICAgICAgeyBpZDogXCJTdGFuZGFyZFwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLlNUQU5EQVJEIHx8IFwiLlN0YW5kYXJkXCIgfSxcclxuICAgICAgeyBpZDogXCJGbHVlbnRcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5GTFVFTlQgfHwgXCIuRmx1ZW50XCIgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBcIlByb2Zlc3Npb25hbFwiLFxyXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uUFJPRkVTU0lPTkFMIHx8IFwiLlByb2Zlc3Npb25hbFwiLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMubGFuZ3VhZ2VMaXN0ID0gW1xyXG4gICAgICB7IGlkOiBcIkVOXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uRU5HTElTSCB8fCBcIi5FbmdsaXNoXCIgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBcIlpIXCIsXHJcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5DSElORVNFX1NJTVBMSUZJRUQgfHwgXCIuQ2hpbmVzZSAoU2ltcGxpZmllZClcIixcclxuICAgICAgfSxcclxuICAgICAgeyBpZDogXCJFU1wiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLlNQQU5JU0ggfHwgXCIuU3BhbmlzaFwiIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogXCJaSFRcIixcclxuICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkNISU5FU0VfVFJBRElUSU9OQUwgfHwgXCIuQ2hpbmVzZSAoVHJhZGl0aW9uYWwpXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgaWQ6IFwiSElcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5ISU5ESSB8fCBcIi5IaW5kaVwiIH0sXHJcbiAgICAgIHsgaWQ6IFwiQVJcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5BUkFCSUMgfHwgXCIuQXJhYmljXCIgfSxcclxuICAgICAgeyBpZDogXCJCTlwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkJFTkdBTEkgfHwgXCIuQmVuZ2FsaVwiIH0sXHJcbiAgICAgIHsgaWQ6IFwiUFRcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5QT1JUVUdVRVNFIHx8IFwiLlBvcnR1Z3Vlc2VcIiB9LFxyXG4gICAgICB7IGlkOiBcIlJVXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uUlVTU0lBTiB8fCBcIi5SdXNzaWFuXCIgfSxcclxuICAgICAgeyBpZDogXCJKQVwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkpBUEFORVNFIHx8IFwiLkphcGFuZXNlXCIgfSxcclxuICAgICAgeyBpZDogXCJERVwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkdFUk1BTiB8fCBcIi5HZXJtYW5cIiB9LFxyXG4gICAgICB7IGlkOiBcIktPXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uS09SRUFOIHx8IFwiLktvcmVhblwiIH0sXHJcbiAgICAgIHsgaWQ6IFwiRlJcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5GUkVOQ0ggfHwgXCIuRnJlbmNoXCIgfSxcclxuICAgICAgeyBpZDogXCJJVFwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLklUQUxJQU4gfHwgXCIuSXRhbGlhblwiIH0sXHJcbiAgICAgIHsgaWQ6IFwiVFJcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5UVVJLSVNIIHx8IFwiLlR1cmtpc2hcIiB9LFxyXG4gICAgXTtcclxuICAgIGNvbnN0IGR5bmFtaWNBaUJ1dHRvbklkID0gYGFpX2Fzc2lzdGFudF9idXR0b25fdGJhcl8ke3RoaXMuZWRpdG9ySWR9YDtcclxuICAgIHRoaXMudG9vbHMgPSB7XHJcbiAgICAgIGVuYWJsZUZsb2F0aW5nOiBmYWxzZSxcclxuICAgICAgaXRlbXM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0b29sdGlwVGV4dDogdGhpcy50cmFuc2xhdGlvbi5BSV9BU1NJU1QgfHwgXCIuQUkgQXNzaXN0XCIsXHJcbiAgICAgICAgICB0ZW1wbGF0ZTogYDxidXR0b24gY2xhc3M9XCJlLXRiYXItYnRuIGUtYnRuXCIgdGFiaW5kZXg9XCItMVwiIGlkPVwiJHtkeW5hbWljQWlCdXR0b25JZH1cIiBzdHlsZT1cIndpZHRoOjEwMCVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImUtcnRlLWRyb3Bkb3duLWJ0bi10ZXh0XCI+JHtcclxuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLkFJX0FTU0lTVCB8fCBcIi5BSSBBc3Npc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICB9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5gLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJCb2xkXCIsXHJcbiAgICAgICAgXCJJdGFsaWNcIixcclxuICAgICAgICBcIlVuZGVybGluZVwiLFxyXG4gICAgICAgIFwiU3RyaWtlVGhyb3VnaFwiLFxyXG4gICAgICAgIFwiRm9udE5hbWVcIixcclxuICAgICAgICBcIkZvbnRTaXplXCIsXHJcbiAgICAgICAgXCJGb250Q29sb3JcIixcclxuICAgICAgICBcIkJhY2tncm91bmRDb2xvclwiLFxyXG4gICAgICAgIFwiTG93ZXJDYXNlXCIsXHJcbiAgICAgICAgXCJVcHBlckNhc2VcIixcclxuICAgICAgICBcInxcIixcclxuICAgICAgICBcIkNyZWF0ZVRhYmxlXCIsXHJcbiAgICAgICAgXCJGb3JtYXRzXCIsXHJcbiAgICAgICAgXCJBbGlnbm1lbnRzXCIsXHJcbiAgICAgICAgXCJidWxsZXRGb3JtYXRMaXN0XCIsXHJcbiAgICAgICAgXCJOdW1iZXJGb3JtYXRMaXN0XCIsXHJcbiAgICAgICAgXCJPdXRkZW50XCIsXHJcbiAgICAgICAgXCJJbmRlbnRcIixcclxuICAgICAgICBcInxcIixcclxuICAgICAgICBcIkNyZWF0ZUxpbmtcIixcclxuICAgICAgICBcInxcIixcclxuICAgICAgICBcIkZvcm1hdFBhaW50ZXJcIixcclxuICAgICAgICBcIkNsZWFyRm9ybWF0XCIsXHJcbiAgICAgICAgXCJ8XCIsXHJcbiAgICAgICAgXCJVbmRvXCIsXHJcbiAgICAgICAgXCJSZWRvXCIsXHJcbiAgICAgICAgLy8nU291cmNlQ29kZScsXHJcbiAgICAgIF0sXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMuc2hvd1RpY2tldEF0dGFjaG1lbnQpIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHtcclxuICAgICAgICB0b29sdGlwVGV4dDogXCJcIixcclxuICAgICAgICB0ZW1wbGF0ZTpcclxuICAgICAgICAgICc8YnV0dG9uIGNsYXNzPVwiZS10YmFyLWJ0biBlLWJ0blwiIHRhYmluZGV4PVwiLTFcIiBpZD1cImN1c3RvbV90YmFyXCIgIHN0eWxlPVwid2lkdGg6MTAwJVwiPicgK1xyXG4gICAgICAgICAgJzxkaXYgY2xhc3M9XCJlLXRiYXItYnRuLXRleHRcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA1MDA7XCI+PGltZyBzcmM9XCIvYXNzZXRzL2ltZy9maWxlLWljb24uc3ZnXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCIvPjxkaXYgY2xhc3M9XCJ1cGxvYWRBY3Rpb25zXCI+PGRpdiBpZD1cInVwbG9hZEZyb21Vc2VyXCI+Q29tcHV0ZXIgRmlsZTwvZGl2PjxkaXYgaWQ9XCJyZWxhdGlvbkRvbVwiPlRpY2tldCBBdHRhY2htZW50PC9kaXY+PC9kaXY+PC9kaXY+PC9idXR0b24+JyxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy50b29scy5pdGVtcy5zcGxpY2UoMjIsIDAsIGl0ZW0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Db250ZW50Q2hhbmdlKGFyZ3MpIHtcclxuICAgIC8vIGNvbnN0IHRhYmxlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ0YWJsZS5lLXJ0ZS10YWJsZVwiKTtcclxuICAgIC8vIHRhYmxlcy5mb3JFYWNoKCh0YWJsZSkgPT4ge1xyXG4gICAgLy8gICBjb25zdCBodG1sVGFibGUgPSB0YWJsZSBhcyBIVE1MVGFibGVFbGVtZW50O1xyXG4gICAgLy8gICBodG1sVGFibGUuc3R5bGUubWFyZ2luQm90dG9tID0gXCIxMHB4XCI7XHJcbiAgICAvLyAgIGh0bWxUYWJsZS5zdHlsZS5ib3JkZXJDb2xsYXBzZSA9IFwiY29sbGFwc2VcIjtcclxuICAgIC8vICAgaHRtbFRhYmxlLnN0eWxlLmVtcHR5Q2VsbHMgPSBcInNob3dcIjtcclxuICAgIC8vICAgY29uc3QgdGRFbGVtZW50cyA9IHRhYmxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ0ZFwiKTtcclxuICAgIC8vICAgdGRFbGVtZW50cy5mb3JFYWNoKCh0ZCkgPT4ge1xyXG4gICAgLy8gICAgIHRkLnN0eWxlLmJvcmRlciA9IFwiMXB4IHNvbGlkICNhZGI1YmRcIjtcclxuICAgIC8vICAgICB0ZC5zdHlsZS5oZWlnaHQgPSBcIjIwcHhcIjtcclxuICAgIC8vICAgICB0ZC5zdHlsZS5taW5XaWR0aCA9IFwiMjBweFwiO1xyXG4gICAgLy8gICAgIHRkLnN0eWxlLnBhZGRpbmcgPSBcIjJweCA1cHhcIjtcclxuICAgIC8vICAgICB0ZC5zdHlsZS5ib3hTaXppbmcgPSBcImJvcmRlci1ib3hcIjtcclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9KTtcclxuICAgIHRoaXMuY2hhbmdlLmVtaXQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DcmVhdGUoKTogdm9pZCB7XHJcbiAgICAvL2FkZCB0aGUgbGluZSBoZWlnaHRcclxuICAgIC8vIHRoaXMuZWRpdG9yTWFuYWdlciA9IHRoaXMucnRlT2JqLmZvcm1hdHRlci5lZGl0b3JNYW5hZ2VyO1xyXG4gICAgLy8gbGV0IHNwbGl0QnV0dG9uID0gbmV3IERyb3BEb3duQnV0dG9uKHtcclxuICAgIC8vICAgaXRlbXM6IGxpbmVIZWlnaHRfaXRlbXMsXHJcbiAgICAvLyAgIGljb25Dc3M6IFwiZS1pY29ucyBlLWxpbmUtc3BhY2luZ1wiLFxyXG4gICAgLy8gICBzZWxlY3Q6IHRoaXMub25TZWxlY3QuYmluZCh0aGlzKSxcclxuICAgIC8vIH0pO1xyXG4gICAgLy8gc3BsaXRCdXR0b24uYXBwZW5kVG8oXCIjbGluZWhlaWdodF90YmFyXCIpO1xyXG4gICAgLy8gLy8gYWkgYXNzaXN0XHJcbiAgICBsZXQgYWlhc3Npc3RhbnRCdXR0b24gPSBuZXcgRHJvcERvd25CdXR0b24oe1xyXG4gICAgICBpdGVtczogdGhpcy5xdWVyeUxpc3QsXHJcbiAgICAgIC8vIGljb25Dc3M6IFwiZS1idG4taWNvbiBlLWljb25zIGUtYXNzaXN0dmlldy1pY29uIGUtaWNvbi1sZWZ0XCIsXHJcbiAgICAgIHNlbGVjdDogKGFyZ3MpID0+IHRoaXMuYWlRdWVyeVNlbGVjdGVkTWVudShhcmdzKSxcclxuICAgIH0pO1xyXG4gICAgYWlhc3Npc3RhbnRCdXR0b24uYXBwZW5kVG8oXCIjYWlfYXNzaXN0YW50X2J1dHRvbl90YmFyX1wiICsgdGhpcy5lZGl0b3JJZCk7XHJcbiAgICB0aGlzLmNyZWF0ZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblNlbGVjdChhcmdzKSB7XHJcbiAgICBpZiAodGhpcy5ydGVPYmouZm9ybWF0dGVyLmdldFVuZG9SZWRvU3RhY2soKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5ydGVPYmouZm9ybWF0dGVyLnNhdmVEYXRhKCk7XHJcbiAgICB9XHJcbiAgICBsZXQgbm9kZXM6IE5vZGVbXSA9IHRoaXMuZWRpdG9yTWFuYWdlci5kb21Ob2RlLmJsb2NrTm9kZXMoKTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IG5vZGVzLmxlbmd0aCA+IGk7IGkrKykge1xyXG4gICAgICAobm9kZXNbaV0gYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmxpbmVIZWlnaHQgPSBhcmdzLml0ZW0udGV4dDtcclxuICAgIH1cclxuICAgIHRoaXMucnRlT2JqLmZvcm1hdHRlci5zYXZlRGF0YSgpO1xyXG4gICAgdGhpcy5ydGVPYmouZm9ybWF0dGVyLmVuYWJsZVVuZG8odGhpcy5ydGVPYmopO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhaVF1ZXJ5U2VsZWN0ZWRNZW51KGFyZ3M6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFsb2d1ZU9wZW4oYXJncy5pdGVtLmlkKTtcclxuICB9XHJcblxyXG4gIGRpYWxvZ3VlT3BlbihzZWxlY3RlZFF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHZhciBzZWxlY3Rpb25UZXh0ID0gdGhpcy5ydGVPYmouZ2V0U2VsZWN0ZWRIdG1sKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkUXVlcnkgPSBzZWxlY3RlZFF1ZXJ5O1xyXG4gICAgaWYgKHNlbGVjdGlvblRleHQpIHtcclxuICAgICAgbGV0IHJhbmdlOiBSYW5nZSA9IChcclxuICAgICAgICB0aGlzLnJ0ZU9iaiBhcyBhbnlcclxuICAgICAgKS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLmdldFJhbmdlKFxyXG4gICAgICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmNvbnRlbnRNb2R1bGUuZ2V0RG9jdW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLnNhdmUoXHJcbiAgICAgICAgcmFuZ2UsXHJcbiAgICAgICAgKHRoaXMucnRlT2JqIGFzIGFueSkuY29udGVudE1vZHVsZS5nZXREb2N1bWVudCgpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZHJvcFZhbEluZGV4ID0gdGhpcy5xdWVyeUxpc3QuZmluZEluZGV4KFxyXG4gICAgICAgIChxKSA9PiBxLnRleHQudG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWRRdWVyeS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucXVlcnlDYXRlZ29yeS5pbmRleCA9IHRoaXMuZHJvcFZhbEluZGV4O1xyXG4gICAgICB0aGlzLmxlZnRSdGUudmFsdWUgPSB0aGlzLnByb21wdFF1ZXJ5ID0gc2VsZWN0aW9uVGV4dDtcclxuICAgICAgdGhpcy5sZWZ0UnRlLnJlZnJlc2hVSSgpO1xyXG4gICAgICB0aGlzLkFJZGlhbG9nLnNob3coKTtcclxuICAgICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShzZWxlY3RlZFF1ZXJ5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHRoaXMuc2hvd01zZyA9IHRydWU7XHJcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyAgIHRoaXMuc2hvd01zZyA9IGZhbHNlO1xyXG4gICAgICAvLyB9LCAzMDAwKTtcclxuICAgICAgLy8gY29uc29sZS5sb2coXCJQbGVhc2Ugc2VsZWN0IHRoZSBjb250ZW50IHRvIHBlcmZvcm0gdGhlIEFJIG9wZXJhdGlvbi5cIik7XHJcblxyXG4gICAgICB0aGlzLmRpYWxvZy5zaG93Tm90aWZpY2F0aW9uKFxyXG4gICAgICAgIHRoaXMudHJhbnNsYXRpb24uRklSU1RfU0VMRUNUX1NPTUVfVEVYVCB8fCBcIkZpcnN0LCBTZWxlY3Qgc29tZSB0ZXh0XCIsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgc3RhdHVzOiBcIldhcm5pbmdcIixcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShzZWxlY3RlZFF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNTZW50aW1lbnRDaGVjayA9IGZhbHNlO1xyXG4gICAgc3dpdGNoIChzZWxlY3RlZFF1ZXJ5KSB7XHJcbiAgICAgIGNhc2UgXCJTdW1tYXJpemVcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gXCJTdW1tYXJpemUgdGhlIHVwY29taW5nIHNlbnRlbmNlIHNob3J0bHkuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJFbGFib3JhdGVcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gXCJFbGFib3JhdGUgb24gdGhlIHVwY29taW5nIHNlbnRlbmNlLlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUmVwaHJhc2VcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gdGhpcy5jaGlwVmFsdWUgKyBcIiByZXBocmFzZSB0aGUgdXBjb21pbmcgc2VudGVuY2UuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJHcmFtbWFyXCI6XHJcbiAgICAgICAgdGhpcy5zdWJRdWVyeSA9IFwiQ29ycmVjdCB0aGUgZ3JhbW1hciBvZiB0aGUgdXBjb21pbmcgc2VudGVuY2UuXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJUcmFuc2xhdGVcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID1cclxuICAgICAgICAgIFwiVHJhbnNsYXRlIHRoZSB1cGNvbWluZyBzZW50ZW5jZSB0byBcIiArIHRoaXMudHJhbnNsYXRlbGFuZ3VhZ2UgKyBcIi5cIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlNlbnRpbWVudEFuYWx5c2lzXCI6XHJcbiAgICAgICAgdGhpcy5pc1NlbnRpbWVudENoZWNrID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID1cclxuICAgICAgICAgICdBbmFseXplIHRoZSBzZW50aW1lbnQgYW5kIGdyYW1tYXIgb2YgdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGhzIGFuZCBwcm92aWRlIHRoZSBleHByZXNzaW9uIHNjb3JlIHdpdGggYW4gZW1vamkgZm9sbG93ZWQgYnkgdGhlIHNlbnRpbWVudCBpbiB0aGUgZm9ybWF0OiBcIvCfmIogTmV1dHJhbFwiLiBcXG5cXG5OT1RFOiBBdm9pZCBhbnkgYWRkaXRpb25hbCB0ZXh0IG9yIGV4cGxhbmF0aW9uOic7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUFJU3VnZXNzdGlvbnMoKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5wcm9tcHRRdWVyeSkge1xyXG4gICAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNrZWxldG9uSWRcIikgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPVxyXG4gICAgICAgICAgXCJcIjtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyaWdodFJ0ZVwiKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9XHJcbiAgICAgICAgICBcIm5vbmVcIjtcclxuICAgICAgICB0aGlzLnNlbnRpbWVudEJ1dHRvbi5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICB0aGlzLnJlZ2VuZXJhdGVCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29weUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXBsYWNlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5pc0RpYWxvZ1Zpc2libGUpIHtcclxuICAgICAgICAgIHRoaXMucHJvbXB0UXVlcnkgPSB0aGlzLmxlZnRSdGUuZ2V0SHRtbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFwaVJlc3VsdERhdGEgPSB0aGlzLmdldFJlc3BvbnNlRnJvbU9wZW5BSShcclxuICAgICAgICAgIHRoaXMuc3ViUXVlcnksXHJcbiAgICAgICAgICB0aGlzLnByb21wdFF1ZXJ5XHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmFwaVJlc3VsdERhdGEudGhlbigocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuQUlSZXN1bHQgPSB0aGlzLmlzU2VudGltZW50Q2hlY2sgPyB0aGlzLnByb21wdFF1ZXJ5IDogcmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy5zZW50aW1lbnRCdXR0b24uY29udGVudCA9IHJlc3VsdFxyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAuaW5jbHVkZXMoXCJwb3NpdGl2ZVwiKVxyXG4gICAgICAgICAgICA/IFwi8J+YiiBQb3NpdGl2ZVwiXHJcbiAgICAgICAgICAgIDogcmVzdWx0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJuZWdhdGl2ZVwiKVxyXG4gICAgICAgICAgICA/IFwi8J+YniBOZWdhdGl2ZVwiXHJcbiAgICAgICAgICAgIDogXCLwn5iQIE5ldXRyYWxcIjtcclxuICAgICAgICAgIHRoaXMuc2VudGltZW50QnV0dG9uLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICF0aGlzLmlzU2VudGltZW50Q2hlY2tcclxuICAgICAgICAgICAgPyBcIm5vbmVcIlxyXG4gICAgICAgICAgICA6IFwiXCI7XHJcbiAgICAgICAgICB0aGlzLnJpZ2h0UnRlLnZhbHVlID0gdGhpcy5BSVJlc3VsdDtcclxuICAgICAgICAgIHZhciBub1Jlc3VsdHNGb3VuZCA9ICEodGhpcy5BSVJlc3VsdCB8fCB0aGlzLnByb21wdFF1ZXJ5KTtcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuby1yZXN1bHRzLWZvdW5kXCIpIGFzIEhUTUxFbGVtZW50XHJcbiAgICAgICAgICApLnN0eWxlLmRpc3BsYXkgPSBub1Jlc3VsdHNGb3VuZCA/IFwiXCIgOiBcIm5vbmVcIjtcclxuICAgICAgICAgIHRoaXMucmVnZW5lcmF0ZUJ1dHRvbi5kaXNhYmxlZCA9IG5vUmVzdWx0c0ZvdW5kO1xyXG4gICAgICAgICAgdGhpcy5jb3B5QnV0dG9uLmRpc2FibGVkID0gbm9SZXN1bHRzRm91bmQ7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VCdXR0b24uZGlzYWJsZWQgPSBub1Jlc3VsdHNGb3VuZDtcclxuICAgICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgLy8gdGhpcy50b2FzdE9iai5zaG93KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdWxsUmVzcG9uc2UgPSBcIlwiO1xyXG4gIGFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyIHwgbnVsbCA9IG51bGw7XHJcbiAgYXN5bmMgZ2V0UmVzcG9uc2VGcm9tT3BlbkFJKFxyXG4gICAgc3ViUXVlcnk6IHN0cmluZyxcclxuICAgIHByb21wdFF1ZXJ5OiBzdHJpbmdcclxuICApOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgaWYgKHRoaXMuYWJvcnRDb250cm9sbGVyKSB7XHJcbiAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xyXG4gICAgY29uc3QgbWVzc2FnZXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICByb2xlOiBcInN5c3RlbVwiLFxyXG4gICAgICAgIGNvbnRlbnQ6IHN1YlF1ZXJ5LmluY2x1ZGVzKFxyXG4gICAgICAgICAgXCJlbW9qaSBmb2xsb3dlZCBieSB0aGUgc2VudGltZW50IGluIHRoZSBmb3JtYXRcIlxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gXCJZb3UgYXJlIGEgaGVscGZ1bCBhc3Npc3RhbnQuIFBsZWFzZSByZXNwb25kIGluIHN0cmluZyBmb3JtYXQuXCJcclxuICAgICAgICAgIDogXCJOT1RFOiBSZXR1cm4gc2FtZSBodG1sIGZvcm1hdCBqdXN0IGRvIGNoYW5nZXMgY29udGVudCBvbmx5LiBkb24ndCBjaGFuZ2UgaHRtbCBmb3JtYXRzLlwiLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgcm9sZTogXCJ1c2VyXCIsXHJcbiAgICAgICAgY29udGVudDogYCR7c3ViUXVlcnl9ICR7cHJvbXB0UXVlcnl9YCxcclxuICAgICAgfSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3QgcGFyYW0gPSB7XHJcbiAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyxcclxuICAgICAgbWF4X3Rva2VuczogMTAwMCxcclxuICAgICAgdGVtcGVyYXR1cmU6IDAuNyxcclxuICAgICAgdG9wX3A6IDEsXHJcbiAgICAgIGZyZXF1ZW5jeV9wZW5hbHR5OiAwLFxyXG4gICAgICBwcmVzZW5jZV9wZW5hbHR5OiAwLFxyXG4gICAgfTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiYXBpL2FpL2NoYXQtc3RyZWFtXCIsIHtcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXJhbSksXHJcbiAgICAgICAgc2lnbmFsOiB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xyXG4gICAgICB9XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNrZWxldG9uSWRcIikgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPVxyXG4gICAgICAgIFwibm9uZVwiO1xyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyaWdodFJ0ZVwiKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9IFwiXCI7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5mdWxsUmVzcG9uc2UgPSBcIlwiO1xyXG4gICAgICB0aGlzLnJpZ2h0UnRlLnZhbHVlID0gXCJcIjtcclxuICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcclxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xyXG4gICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XHJcbiAgICAgICAgaWYgKGRvbmUpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjaHVuayA9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KTtcclxuICAgICAgICBjb25zdCBsaW5lcyA9IGNodW5rLnNwbGl0KFwiXFxuXCIpO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xyXG4gICAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChcImRhdGE6IFwiKSkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gbGluZS5zdWJzdHJpbmcoNikudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoZGF0YSA9PT0gXCJbRE9ORV1cIikge1xyXG4gICAgICAgICAgICAgIC8vdGhpcy5zaG93RGlhbG9nKCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnVsbFJlc3BvbnNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gcGFyc2VkLmNob2ljZXM/LlswXT8uZGVsdGE/LmNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVsbFJlc3BvbnNlICs9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsVG9Cb3R0b20oY29udGVudCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJQYXJzZSBlcnJvcjpcIiwgZSwgXCJEYXRhOlwiLCBkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5mdWxsUmVzcG9uc2U7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRoZSBBSSByZXF1ZXN0IHdhcyBhY3RpdmVseSBjYW5jZWxlZCBieSB0aGUgdXNlclwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5mdWxsUmVzcG9uc2U7XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5lcnJvcihcIlN0cmVhbSBlcnJvcjpcIiwgZXJyb3IpO1xyXG4gICAgICB0aHJvdyBlcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpYWxvZ1Nob3coKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLnJlZ2VuZXJhdGVCdXR0b24hLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgIC8vICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zKCk7XHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHRoaXMuY29weUJ1dHRvbiEuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLmNvcHlUZXh0VG9DbGlwYm9hcmQodGhpcy5BSVJlc3VsdCk7XHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHRoaXMucmVwbGFjZUJ1dHRvbiEuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgLy8gICBsZXQgcmFuZ2U6IFJhbmdlID0gKFxyXG4gICAgLy8gICAgIHRoaXMucnRlT2JqIGFzIGFueVxyXG4gICAgLy8gICApLmZvcm1hdHRlci5lZGl0b3JNYW5hZ2VyLm5vZGVTZWxlY3Rpb24uZ2V0UmFuZ2UoXHJcbiAgICAvLyAgICAgKHRoaXMucnRlT2JqIGFzIGFueSkuY29udGVudE1vZHVsZS5nZXREb2N1bWVudCgpXHJcbiAgICAvLyAgICk7XHJcbiAgICAvLyAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmZvcm1hdHRlci5lZGl0b3JNYW5hZ2VyLm5vZGVTZWxlY3Rpb24ucmVzdG9yZShyYW5nZSk7XHJcbiAgICAvLyAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmV4ZWN1dGVDb21tYW5kKFwiaW5zZXJ0SFRNTFwiLCB0aGlzLkFJUmVzdWx0LCB7XHJcbiAgICAvLyAgICAgdW5kbzogdHJ1ZSxcclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyAgIHRoaXMuY2xvc2VEaWFsb2coKTtcclxuICAgIC8vIH0pO1xyXG4gICAgKHRoaXMuQUlkaWFsb2cgYXMgRGlhbG9nQ29tcG9uZW50KS5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VEaWFsb2coKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hYm9ydENvbnRyb2xsZXIpIHtcclxuICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcclxuICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5BSWRpYWxvZy5oaWRlKCk7XHJcbiAgICB0aGlzLnJpZ2h0UnRlLnZhbHVlID0gXCJcIjtcclxuICAgIHRoaXMubGVmdFJ0ZS52YWx1ZSA9IFwiXCI7XHJcbiAgICB0aGlzLnByb21wdFF1ZXJ5ID0gXCJcIjtcclxuICAgIHRoaXMuY2hpcFZhbHVlID0gXCJTdGFuZGFyZFwiO1xyXG4gICAgdGhpcy5BSVJlc3VsdCA9IFwiXCI7XHJcbiAgICB0aGlzLmRyb3BWYWxJbmRleCA9IDA7XHJcbiAgICB0aGlzLnNlbGVjdGVkUXVlcnkgPSBcIlJlcGhyYXNlXCI7XHJcbiAgICB0aGlzLnNlbnRpbWVudEJ1dHRvbi5jb250ZW50ID0gXCLwn5iKIE5ldXRyYWxcIjtcclxuICAgIHRoaXMuc2l6ZSA9IFwiXCI7XHJcbiAgfVxyXG5cclxuICBjb3B5VGV4dFRvQ2xpcGJvYXJkKHRleHQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnJpZ2h0UnRlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucmlnaHRSdGUuc2VsZWN0QWxsKCk7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiTm8gc2VsZWN0ZWQgY29udGVudFwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICBjb25zdCBzdWNjZXNzID0gZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xyXG4gICAgICBpZiAoc3VjY2Vzcykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiVGV4dCBjb3BpZWQgdG8gY2xpcGJvYXJkIHN1Y2Nlc3NmdWxseSFcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjb3B5IHRleHRcIik7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNvcHkgdGV4dDogXCIsIGVycik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHtcclxuICAgIC8vICAgbmF2aWdhdG9yLmNsaXBib2FyZFxyXG4gICAgLy8gICAgIC53cml0ZVRleHQodGV4dClcclxuICAgIC8vICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZyhcIlRleHQgY29waWVkIHRvIGNsaXBib2FyZCBzdWNjZXNzZnVsbHkhXCIpO1xyXG4gICAgLy8gICAgIH0pXHJcbiAgICAvLyAgICAgLmNhdGNoKChlcnIpID0+IHtcclxuICAgIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY29weSB0ZXh0OiBcIiwgZXJyKTtcclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIC8vIEZhbGxiYWNrIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHRoZSBDbGlwYm9hcmQgQVBJXHJcbiAgICAvLyAgIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIpO1xyXG4gICAgLy8gICB0ZXh0YXJlYS52YWx1ZSA9IHRleHQ7XHJcbiAgICAvLyAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dGFyZWEpO1xyXG4gICAgLy8gICB0ZXh0YXJlYS5zZWxlY3QoKTtcclxuICAgIC8vICAgdHJ5IHtcclxuICAgIC8vICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJUZXh0IGNvcGllZCB0byBjbGlwYm9hcmQgdXNpbmcgZXhlY0NvbW1hbmRcIik7XHJcbiAgICAvLyAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgLy8gICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY29weSB0ZXh0OiBcIiwgZXJyKTtcclxuICAgIC8vICAgfSBmaW5hbGx5IHtcclxuICAgIC8vICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRleHRhcmVhKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgb25PdmVybGF5Q2xpY2soKTogdm9pZCB7XHJcbiAgICBsZXQgYWN0aXZlRWxlOiBIVE1MRWxlbWVudCB8IG51bGwgPSB0aGlzLkFJZGlhbG9nLmVsZW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgXCIuY2hhcl9ibG9jay5lLWFjdGl2ZVwiXHJcbiAgICApO1xyXG4gICAgaWYgKGFjdGl2ZUVsZSkge1xyXG4gICAgICBhY3RpdmVFbGUuY2xhc3NMaXN0LnJlbW92ZShcImUtYWN0aXZlXCIpO1xyXG4gICAgfVxyXG4gICAgLy90aGlzLmNsb3NlRGlhbG9nKCk7XHJcbiAgfVxyXG5cclxuICBvblF1ZXJ5U2VsZWN0KGFyZ3MpIHtcclxuICAgIC8vIHRoaXMuY2hpcExpc3Quc2VsZWN0ZWRDaGlwcyA9IDA7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZWxhbmd1YWdlID0gXCJFTlwiO1xyXG4gICAgdGhpcy5zZWxlY3RlZFF1ZXJ5ID0gYXJncy5pdGVtRGF0YS5pZDtcclxuICAgIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9uc0RhdGEoYXJncy5pdGVtRGF0YS5pZCk7XHJcbiAgfVxyXG5cclxuICBvbkxhbmd1YWdlU2VsZWN0KGFyZ3M6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy50cmFuc2xhdGVsYW5ndWFnZSA9IGFyZ3MuaXRlbURhdGEuaWQ7XHJcbiAgICB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKFwiVHJhbnNsYXRlXCIpO1xyXG4gIH1cclxuXHJcbiAgb25DaGlwQ2xpY2soYXJnczogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmNoaXBWYWx1ZSA9IGFyZ3MuaXRlbURhdGEudGV4dDtcclxuICAgIC8vIOS6i+S7tuS8muinpuWPkeS4pOasoSDlv4XpobvliKTmlq1hcmdzLnRleHTmmK/lkKbmnInlgLxcclxuICAgIGlmIChhcmdzLml0ZW1EYXRhLnRleHQpIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9uc0RhdGEoXCJSZXBocmFzZVwiKTtcclxuICB9XHJcblxyXG4gIF90b29sYmFyQ2xpY2soYXJncykge1xyXG4gICAgdGhpcy50b29sYmFyQ2xpY2suZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIF9hY3Rpb25CZWdpbihhcmdzKSB7XHJcbiAgICB0aGlzLmFjdGlvbkJlZ2luLmVtaXQoYXJncyk7XHJcbiAgfVxyXG4gIF9pbnB1dChhcmdzKSB7XHJcbiAgICB0aGlzLmlucHV0LmVtaXQoYXJncyk7XHJcbiAgfVxyXG4gIF9hY3Rpb25Db21wbGV0ZShhcmdzKSB7XHJcbiAgICBpZiAoYXJncy5yZXF1ZXN0VHlwZSA9PSBcIlVMXCIpIHtcclxuICAgICAgaWYgKGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5zdHlsZS5saXN0U3R5bGVUeXBlID09IFwiZGFzaFwiKSB7XHJcbiAgICAgICAgLy8gQXBwbHkgY3VzdG9tIHN0eWxpbmcgZm9yIGRhc2ggYnVsbGV0c1xyXG4gICAgICAgIGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5zdHlsZS5saXN0U3R5bGVJbWFnZSA9XHJcbiAgICAgICAgICBcInVybCgnLi4vLi4vLi4vYXNzZXRzL2ltZy9idWxsZXQtZGFzaC5zdmcnKVwiO1xyXG4gICAgICAgIGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5zdHlsZS5saXN0U3R5bGVUeXBlID0gXCJub25lXCI7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoYXJncy5yZXF1ZXN0VHlwZSA9PSBcIk9MXCIpIHtcclxuICAgICAgYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXHJcbiAgICAgICAgXCJjdXN0b20tbGlzdFwiLFxyXG4gICAgICAgIFwicGFyZW50aGVzZXNcIlxyXG4gICAgICApO1xyXG4gICAgICBpZiAoYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LnN0eWxlLmxpc3RTdHlsZVR5cGUgPT0gXCJwYXJlbnRoZXNlc1wiKSB7XHJcbiAgICAgICAgYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdCA9IFwiY3VzdG9tLWxpc3RcIjtcclxuICAgICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInBhcmVudGhlc2VzXCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGlvbkNvbXBsZXRlLmVtaXQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBfZm9jdXMoYXJncykge1xyXG4gICAgdGhpcy5mb2N1cy5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuICBfYmx1cihhcmdzKSB7XHJcbiAgICB0aGlzLmJsdXIuZW1pdChhcmdzKTtcclxuICB9XHJcbiAgX2RpYWxvZ09wZW4oYXJncykge1xyXG4gICAgaWYgKGFyZ3MuZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJlLXJ0ZS1lZGl0LXRhYmxlXCIpKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHZhciByb3dCb3ggPSAoXHJcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmUtdGFibGUtcm93LmUtbnVtZXJpY3RleHRib3hcIilbMF0gYXMgYW55XHJcbiAgICAgICAgKS5lajJfaW5zdGFuY2VzWzBdO1xyXG4gICAgICAgIHZhciBjb2x1bW5Cb3ggPSAoXHJcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgICBcIi5lLXRhYmxlLWNvbHVtbi5lLW51bWVyaWN0ZXh0Ym94XCJcclxuICAgICAgICAgIClbMF0gYXMgYW55XHJcbiAgICAgICAgKS5lajJfaW5zdGFuY2VzWzBdO1xyXG4gICAgICAgIHJvd0JveC5jaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgICBpZiAocm93Qm94LnZhbHVlID4gNTApIHtcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICAgICAgICAgICBcIi5lLXJ0ZS1lbGVtZW50cy5lLWluc2VydC10YWJsZVwiXHJcbiAgICAgICAgICAgICAgKVswXSBhcyBhbnlcclxuICAgICAgICAgICAgKS5lajJfaW5zdGFuY2VzWzBdLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2cuc2hvd05vdGlmaWNhdGlvbihcclxuICAgICAgICAgICAgICBcIlRoZSByb3cgbnVtYmVyIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA1MC5cIixcclxuICAgICAgICAgICAgICB7IHN0YXR1czogXCJXYXJuaW5nXCIgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICAgICAgICAgICBcIi5lLXJ0ZS1lbGVtZW50cy5lLWluc2VydC10YWJsZVwiXHJcbiAgICAgICAgICAgICAgKVswXSBhcyBhbnlcclxuICAgICAgICAgICAgKS5lajJfaW5zdGFuY2VzWzBdLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2x1bW5Cb3guY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbHVtbkJveC52YWx1ZSA+IDI1KSB7XHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgICAgICAgXCIuZS1ydGUtZWxlbWVudHMuZS1pbnNlcnQtdGFibGVcIlxyXG4gICAgICAgICAgICAgIClbMF0gYXMgYW55XHJcbiAgICAgICAgICAgICkuZWoyX2luc3RhbmNlc1swXS5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nLnNob3dOb3RpZmljYXRpb24oXHJcbiAgICAgICAgICAgICAgXCJUaGUgY29sdW1uIG51bWJlciBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjUuXCIsXHJcbiAgICAgICAgICAgICAgeyBzdGF0dXM6IFwiV2FybmluZ1wiIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgICAgICAgXCIuZS1ydGUtZWxlbWVudHMuZS1pbnNlcnQtdGFibGVcIlxyXG4gICAgICAgICAgICAgIClbMF0gYXMgYW55XHJcbiAgICAgICAgICAgICkuZWoyX2luc3RhbmNlc1swXS5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgX2FmdGVyUGFzdGVDbGVhbnVwKGFyZ3MpIHtcclxuICAgIGFyZ3MudmFsdWUgPSB0aGlzLnVuZXNjYXBlSHRtbChhcmdzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHVuZXNjYXBlSHRtbChlc2NhcGVkSHRtbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBlc2NhcGVkSHRtbFxyXG4gICAgICAucmVwbGFjZSgvJmx0Oy9nLCBcIjxcIilcclxuICAgICAgLnJlcGxhY2UoLyZndDsvZywgXCI+XCIpXHJcbiAgICAgIC5yZXBsYWNlKC8mYW1wOy9nLCBcIiZcIilcclxuICAgICAgLnJlcGxhY2UoLyZxdW90Oy9nLCAnXCInKVxyXG4gICAgICAucmVwbGFjZSgvJmFwb3M7L2csIFwiJ1wiKTtcclxuICB9XHJcblxyXG4gIGhpZGVUb2FzdCgpIHtcclxuICAgIHRoaXMuc2hvd01zZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25ab29tKCkge1xyXG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gXCJsYXJnZXN0XCIpIHtcclxuICAgICAgdGhpcy5zaXplID0gXCJcIjsgLy8g5oGi5aSN5Yiw5Y6f5aeL5aSn5bCPXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNpemUgPSBcImxhcmdlc3RcIjsgLy8g6K6+572u5Li65pyA5aSn5YyWXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdlbmVyYXRlQ2xpY2soKSB7XHJcbiAgICB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIGNvcHlDbGljaygpIHtcclxuICAgIHRoaXMuY29weVRleHRUb0NsaXBib2FyZCh0aGlzLkFJUmVzdWx0KTtcclxuICB9XHJcblxyXG4gIHJlcGxhY2VDbGljaygpIHtcclxuICAgIGxldCByYW5nZTogUmFuZ2UgPSAoXHJcbiAgICAgIHRoaXMucnRlT2JqIGFzIGFueVxyXG4gICAgKS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLmdldFJhbmdlKFxyXG4gICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5jb250ZW50TW9kdWxlLmdldERvY3VtZW50KClcclxuICAgICk7XHJcbiAgICAodGhpcy5ydGVPYmogYXMgYW55KS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLnJlc3RvcmUocmFuZ2UpO1xyXG4gICAgKHRoaXMucnRlT2JqIGFzIGFueSkuZXhlY3V0ZUNvbW1hbmQoXCJpbnNlcnRIVE1MXCIsIHRoaXMuQUlSZXN1bHQsIHtcclxuICAgICAgdW5kbzogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jbG9zZURpYWxvZygpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9Cb3R0b20oY29udGVudCkge1xyXG4gICAgdGhpcy5pbnNlcnRIdG1sVG9FZGl0b3IoY29udGVudCk7XHJcbiAgICBjb25zdCBydGVDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJpZ2h0UnRlXCIpO1xyXG4gICAgY29uc3Qgc2Nyb2xsYWJsZUVsZW1lbnQgPSBydGVDb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoXCIuZS1ydGUtY29udGVudFwiKTtcclxuICAgIGlmIChzY3JvbGxhYmxlRWxlbWVudCkge1xyXG4gICAgICBzY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3AgPVxyXG4gICAgICAgIHNjcm9sbGFibGVFbGVtZW50LnNjcm9sbEhlaWdodCAtIHNjcm9sbGFibGVFbGVtZW50LmNsaWVudEhlaWdodDtcclxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25NaW5pbWl6ZSgpIHtcclxuICAgICh0aGlzLkFJZGlhbG9nIGFzIERpYWxvZ0NvbXBvbmVudCkuZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICB0aGlzLmRpYWxvZy5zaG93TG9hZGluZ05vdGlmaWNhdGlvbih7XHJcbiAgICAgIGxvYWRpbmdDYWxsYmFjazogKGNhbGxiYWNrKSA9PiB7fSxcclxuICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGlvbi5BSV9JTl9QUk9HUkVTUyB8fCBcIkFJIGlzIGluIHByb2dyZXNzXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNob3dEaWFsb2coKSB7XHJcbiAgICAodGhpcy5BSWRpYWxvZyBhcyBEaWFsb2dDb21wb25lbnQpLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiXCI7XHJcbiAgICB0aGlzLnNuYWNrQmFyLmRpc21pc3MoKTtcclxuICB9XHJcblxyXG4gIGluc2VydEh0bWxUb0VkaXRvcihodG1sOiBzdHJpbmcpIHtcclxuICAgICh0aGlzLnJpZ2h0UnRlIGFzIGFueSkuZXhlY3V0ZUNvbW1hbmQoXCJpbnNlcnRUZXh0XCIsIGh0bWwpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZWRpdG9yX2JveFwiIGlkPVwiY29udGFpbmVyXCI+XHJcbiAgPGVqcy1yaWNodGV4dGVkaXRvclxyXG4gICAgI2VkaXRvclxyXG4gICAgW2lkXT1cImVkaXRvcklkXCJcclxuICAgIFtoZWlnaHRdPVwiaGVpZ2h0XCJcclxuICAgIFtzYXZlSW50ZXJ2YWxdPVwiMFwiXHJcbiAgICBbYXV0b1NhdmVPbklkbGVdPVwiYXV0b1NhdmVPbklkbGVcIlxyXG4gICAgW3Rvb2xiYXJTZXR0aW5nc109XCJ0b29sc1wiXHJcbiAgICBbYnVsbGV0Rm9ybWF0TGlzdF09XCJidWxsZXRGb3JtYXRMaXN0XCJcclxuICAgIFtudW1iZXJGb3JtYXRMaXN0XT1cIm51bWJlckZvcm1hdExpc3RcIlxyXG4gICAgW2ZvbnRGYW1pbHldPVwiZmFtaWx5XCJcclxuICAgIFtmb250U2l6ZV09XCJmb250U2l6ZVwiXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgW2luc2VydEltYWdlU2V0dGluZ3NdPVwiaW5zZXJ0SW1hZ2VTZXR0aW5nc1wiXHJcbiAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgIChhY3Rpb25CZWdpbik9XCJfYWN0aW9uQmVnaW4oJGV2ZW50KVwiXHJcbiAgICAoY2hhbmdlKT1cIm9uQ29udGVudENoYW5nZSgkZXZlbnQpXCJcclxuICAgIChjcmVhdGVkKT1cIm9uQ3JlYXRlKClcIlxyXG4gICAgKHRvb2xiYXJDbGljayk9XCJfdG9vbGJhckNsaWNrKCRldmVudClcIlxyXG4gICAgKGlucHV0KT1cIl9pbnB1dCgkZXZlbnQpXCJcclxuICAgIChmb2N1cyk9XCJfZm9jdXMoJGV2ZW50KVwiXHJcbiAgICAoYmx1cik9XCJfYmx1cigkZXZlbnQpXCJcclxuICAgIChhY3Rpb25Db21wbGV0ZSk9XCJfYWN0aW9uQ29tcGxldGUoJGV2ZW50KVwiXHJcbiAgICAoZGlhbG9nT3Blbik9XCJfZGlhbG9nT3BlbigkZXZlbnQpXCJcclxuICAgIChhZnRlclBhc3RlQ2xlYW51cCk9XCJfYWZ0ZXJQYXN0ZUNsZWFudXAoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvZWpzLXJpY2h0ZXh0ZWRpdG9yPlxyXG4gIDxlanMtZGlhbG9nXHJcbiAgICAjQUlkaWFsb2dcclxuICAgIGlkPVwiQUlkaWFsb2dcIlxyXG4gICAgW25nQ2xhc3NdPVwic2l6ZVwiXHJcbiAgICBbdmlzaWJsZV09XCJmYWxzZVwiXHJcbiAgICBbdGFyZ2V0XT1cInRhcmdldFwiXHJcbiAgICBbaXNNb2RhbF09XCJ0cnVlXCJcclxuICAgIFtoZWlnaHRdPVwiZGlhbG9nSGVpZ2h0XCJcclxuICAgIFt3aWR0aF09XCJkaWFsb2dXaWR0aFwiXHJcbiAgICBtYXhIZWlnaHQ9XCI4MCVcIlxyXG4gICAgY3NzQ2xhc3M9XCJlLXJ0ZS1lbGVtZW50cyBjdXN0b20tZGlhbG9nLXJ0ZVwiXHJcbiAgICB6SW5kZXg9XCIxMDAwXCJcclxuICAgIChjbG9zZSk9XCJjbG9zZURpYWxvZygpXCJcclxuICAgIChvdmVybGF5Q2xpY2spPVwib25PdmVybGF5Q2xpY2soKVwiXHJcbiAgICAob3Blbik9XCJkaWFsb2dTaG93KClcIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+XHJcbiAgICAgICAge3sgdHJhbnNsYXRpb24uQUlfQVNTSVNUIHx8IFwiLkFJIEFzc2lzdFwiIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWJ1dHRvbnNcIj5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJoZWFkZXItYnRuXCI+XHJcbiAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgIHNyYz1cIi9hc3NldHMvaW1nL2RpYWxvZy1uYXJyb3cuc3ZnXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItaWNvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbk1pbmltaXplKClcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dab29tQnRuXCIgY2xhc3M9XCJoZWFkZXItem9vbVwiIChjbGljayk9XCJvblpvb20oKVwiPlxyXG4gICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICBjbGFzcz1cImhlYWRlci1pY29uXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJzaXplID09PSAnbGFyZ2VzdCdcIlxyXG4gICAgICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvaW1nL2RpYWxvZy1zaHJpbmsuc3ZnXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWljb25cIlxyXG4gICAgICAgICAgICAqbmdJZj1cInNpemUgIT09ICdsYXJnZXN0J1wiXHJcbiAgICAgICAgICAgIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9pbWcvZGlhbG9nLWdyb3cuc3ZnXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1idG5cIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPlxyXG4gICAgICAgICAgPGltZyBjbGFzcz1cImhlYWRlci1pY29uXCIgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL2ltZy9kaWFsb2ctY2xvc2Uuc3ZnXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZT5cclxuICAgICAgPGRpdiBpZD1cImRpYWxvZy1mb290ZXItY29udGVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tcm93LTBcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjdXNjb2wtMFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogbGVmdFwiXHJcbiAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3VzY29sLTFcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7IHdpZHRoOiAxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgZWpzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgI3NlbnRpbWVudEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiJ/CfmIogJyArICh0cmFuc2xhdGlvbi5ORVVUUkFMIHx8ICcuTmV1dHJhbCcpXCJcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJzZW50aW1lbnRcIlxyXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBlanMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAjY29weUJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwidHJhbnNsYXRpb24uQ09QWSB8fCAnLkNvcHknXCJcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3B5LWJ0blwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29weUNsaWNrKClcIlxyXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBlanMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAjcmVwbGFjZUJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwidHJhbnNsYXRpb24uUkVQTEFDRSB8fCAnLlJlcGxhY2UnXCJcclxuICAgICAgICAgICAgICAgIGlzUHJpbWFyeT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVwbGFjZUNsaWNrKClcIlxyXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWNvbnRlbnRcIiBzdHlsZT1cImhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tcm93LTBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXNjb2wtMFwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cclxuICAgICAgICAgICAgPGVqcy1kcm9wZG93bmxpc3RcclxuICAgICAgICAgICAgICAjcXVlcnlDYXRlZ29yeVxyXG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDIwMHB4XCJcclxuICAgICAgICAgICAgICBpZD1cInF1ZXJ5Q2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInF1ZXJ5TGlzdFwiXHJcbiAgICAgICAgICAgICAgaW5kZXg9XCIwXCJcclxuICAgICAgICAgICAgICBbZmllbGRzXT1cInsgdGV4dDogJ3RleHQnLCB2YWx1ZTogJ2lkJyB9XCJcclxuICAgICAgICAgICAgICAoc2VsZWN0KT1cIm9uUXVlcnlTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyB0cmFuc2xhdGlvbi5SRVBIUkFTRSB8fCBcIi5SZXBocmFzZVwiIH19XHJcbiAgICAgICAgICAgIDwvZWpzLWRyb3Bkb3dubGlzdD5cclxuICAgICAgICAgICAgPGVqcy1kcm9wZG93bmxpc3RcclxuICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkUXVlcnkgPT0gJ1JlcGhyYXNlJ1wiXHJcbiAgICAgICAgICAgICAgaWQ9XCJjaGlwcy1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICNjaGlwTGlzdFxyXG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE2MHB4XCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNoaXBWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwicmVwaHJhc2VUeWxlTGlzdFwiXHJcbiAgICAgICAgICAgICAgW2ZpZWxkc109XCJ7IHRleHQ6ICd0ZXh0JywgdmFsdWU6ICdpZCcgfVwiXHJcbiAgICAgICAgICAgICAgKHNlbGVjdCk9XCJvbkNoaXBDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L2Vqcy1kcm9wZG93bmxpc3Q+XHJcbiAgICAgICAgICAgIDxlanMtZHJvcGRvd25saXN0XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFF1ZXJ5ID09ICdUcmFuc2xhdGUnXCJcclxuICAgICAgICAgICAgICAjbGFuZ3VhZ2VDYXRlZ29yeVxyXG4gICAgICAgICAgICAgIGluZGV4PVwiMFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJsYW5ndWFnZS1DYXRlZ29yeVwiXHJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwibGFuZ3VhZ2VMaXN0XCJcclxuICAgICAgICAgICAgICBbZmllbGRzXT1cInsgdGV4dDogJ3RleHQnLCB2YWx1ZTogJ2lkJyB9XCJcclxuICAgICAgICAgICAgICAoc2VsZWN0KT1cIm9uTGFuZ3VhZ2VTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9lanMtZHJvcGRvd25saXN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3VzY29sLTFcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8IS0tIDxlanMtY2hpcGxpc3RcclxuICAgICAgICAgICAgICBpZD1cImNoaXBzLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgI2NoaXBMaXN0XHJcbiAgICAgICAgICAgICAgW2NoaXBzXT1cIlsnU3RhbmRhcmQnLCAnRmx1ZW50JywgJ1Byb2Zlc3Npb25hbCddXCJcclxuICAgICAgICAgICAgICBzZWxlY3Rpb249XCJTaW5nbGVcIlxyXG4gICAgICAgICAgICAgIGNzc0NsYXNzPVwiZS1vdXRsaW5lXCJcclxuICAgICAgICAgICAgICBbc2VsZWN0ZWRDaGlwc109XCJbMF1cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkNoaXBDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L2Vqcy1jaGlwbGlzdD4gLS0+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBlanMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgI3JlZ2VuZXJhdGVCdXR0b25cclxuICAgICAgICAgICAgICBbY29udGVudF09XCJ0cmFuc2xhdGlvbi5SRUdFTkVSQVRFIHx8ICcuUmVnZW5lcmF0ZSdcIlxyXG4gICAgICAgICAgICAgIGlzUHJpbWFyeT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIGRpc2FibGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZWdlbmVyYXRlQ2xpY2soKVwiXHJcbiAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tcm93LTFcIiBzdHlsZT1cImhlaWdodDogY2FsYygxMDAlIC0gNDBweClcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjdXNjb2wtMFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwiXHJcbiAgICAgICAgICAgICAgZmxleDogMTtcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7XHJcbiAgICAgICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0OyBoZWlnaHQ6IDEwMCVcIj5cclxuICAgICAgICAgICAgICA8ZWpzLXJpY2h0ZXh0ZWRpdG9yXHJcbiAgICAgICAgICAgICAgICAjbGVmdFJ0ZVxyXG4gICAgICAgICAgICAgICAgaWQ9XCJsZWZ0UnRlXCJcclxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2xiYXJTZXR0aW5nc109XCJ7IGVuYWJsZTogZmFsc2UgfVwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uLkFOQUxZU0lTX09GX0FJX1NVUFBPUlQgfHxcclxuICAgICAgICAgICAgICAgICAgJy5BbmFseXNpcyBvZiBBSSBTdXBwb3J0J1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIGNzc0NsYXNzPVwiZS1vdXRsaW5lXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9lanMtcmljaHRleHRlZGl0b3I+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3VzY29sLTFcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgIGZsZXg6IDE7XHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMTsgbWluLWhlaWdodDogMDsgb3ZlcmZsb3c6IGhpZGRlblwiPlxyXG4gICAgICAgICAgICAgIDxlanMtcmljaHRleHRlZGl0b3JcclxuICAgICAgICAgICAgICAgICNyaWdodFJ0ZVxyXG4gICAgICAgICAgICAgICAgaWQ9XCJyaWdodFJ0ZVwiXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxMDAlXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbGJhclNldHRpbmdzXT1cInsgZW5hYmxlOiBmYWxzZSB9XCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcclxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24uQU5BTFlTSVNfT0ZfQUlfU1VQUE9SVCB8fFxyXG4gICAgICAgICAgICAgICAgICAnLkFuYWx5c2lzIG9mIEFJIFN1cHBvcnQnXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJlLW91dGxpbmVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L2Vqcy1yaWNodGV4dGVkaXRvcj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5vLXJlc3VsdHMtZm91bmRcIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJuby1yZXN1bHRzLWZvdW5kXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgaGVpZ2h0OiAyNDRweDsgYWxpZ24tY29udGVudDogY2VudGVyXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjUwXCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCI1MFwiXHJcbiAgICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9jZG4tYm9sZGRlc2svYWdlbnQtYW5ndWxhci1hcHAvaW1hZ2VzL2xpZ2h0L25vLXJlY29yZHMtd2FybmluZy5zdmdcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zbGF0aW9uLk5PX1JFU1VMVFNfRk9VTkQgfHwgXCIuTm8gcmVzdWx0cyBmb3VuZFwiIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGlkPVwic2tlbGV0b25JZFwiPlxyXG4gICAgICAgICAgICAgICAgPGVqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAjc2tlbGV0b25JZDFcclxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJSZWN0YW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcclxuICAgICAgICAgICAgICAgID48L2Vqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGVqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAjc2tlbGV0b25JZDJcclxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJSZWN0YW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCI5MCVcIlxyXG4gICAgICAgICAgICAgICAgPjwvZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICAgICNza2VsZXRvbklkM1xyXG4gICAgICAgICAgICAgICAgICBzaGFwZT1cIlJlY3RhbmdsZVwiXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjcwJVwiXHJcbiAgICAgICAgICAgICAgICA+PC9lanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgIDxlanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgICAgI3NrZWxldG9uSWQ0XHJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwiUmVjdGFuZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNTAlXCJcclxuICAgICAgICAgICAgICAgID48L2Vqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGVqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAjc2tlbGV0b25JZDVcclxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJSZWN0YW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIzMCVcIlxyXG4gICAgICAgICAgICAgICAgPjwvZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICAgICNza2VsZXRvbklkNlxyXG4gICAgICAgICAgICAgICAgICBzaGFwZT1cIlJlY3RhbmdsZVwiXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwJVwiXHJcbiAgICAgICAgICAgICAgICA+PC9lanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvZWpzLWRpYWxvZz5cclxuICA8IS0tIDxkaXYgY2xhc3M9XCJ0b2FzdFwiICpuZ0lmPVwic2hvd01zZ1wiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJ0b2FzdF90ZXh0XCI+Rmlyc3QsIFNlbGVjdCBzb21lIHRleHQ8L3NwYW5cclxuICAgID48c3BhbiBjbGFzcz1cImNsb3NlX2ljb25cIiAoY2xpY2spPVwiaGlkZVRvYXN0KClcIj48L3NwYW4+XHJcbiAgPC9kaXY+IC0tPlxyXG48L2Rpdj5cclxuIl19
687
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vcmljaHRleHRlZGl0b3IvaW5kZXguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFpc2UtY29tbW9uLWxpYi9zcmMvbGliL2Zvcm0vcmljaHRleHRlZGl0b3IvaW5kZXguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBT3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7QUFZakQsTUFBTSxPQUFPLHVCQUF1QjtJQThHeEI7SUFDQTtJQUNBO0lBQ0E7SUEvR0gsTUFBTSxDQUEwQjtJQUVoQyxhQUFhLENBQXlCO0lBRXRDLE9BQU8sQ0FBMkI7SUFFbEMsUUFBUSxDQUEyQjtJQUNNLFFBQVEsQ0FBbUI7SUFFcEUsZUFBZSxDQUFtQjtJQUVsQyxnQkFBZ0IsQ0FBbUI7SUFFbkMsVUFBVSxDQUFtQjtJQUU3QixhQUFhLENBQW1CO0lBQ3ZDLGlGQUFpRjtJQUV4RSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQ3RCLFlBQVksR0FBRyxHQUFHLENBQUM7SUFDbkIsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUNoQixjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLGNBQWM7SUFDcEMsbUJBQW1CLEdBQUc7UUFDN0IsVUFBVSxFQUFFLE1BQU07UUFDbEIsWUFBWSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztRQUM5QixPQUFPLEVBQUUsTUFBTTtLQUNoQixDQUFDO0lBQ08sb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBRTVCLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ2xDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzVCLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzdCLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ2pDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzNCLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzNCLElBQUksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzFCLGNBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3BDLGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFakQsTUFBTSxHQUFHLFVBQVUsQ0FBQztJQUNwQixRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLFdBQVcsR0FBRyxPQUFPLENBQUM7SUFDdEIsWUFBWSxHQUFHLE9BQU8sQ0FBQztJQUN2QixXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ25CLGFBQWEsQ0FBTTtJQUNuQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ1YsYUFBYSxDQUFDO0lBQ1AsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNqQixTQUFTLEdBQW1DLEVBQUUsQ0FBQztJQUMvQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDdEIsWUFBWSxHQUFtQyxFQUFFLENBQUM7SUFDbEQsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNqQixnQkFBZ0IsR0FBWSxLQUFLLENBQUM7SUFDbEMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNkLGlCQUFpQixDQUFVO0lBQzNCLFNBQVMsR0FBRyxVQUFVLENBQUM7SUFDdkIsYUFBYSxDQUFNO0lBQ25CLFFBQVEsQ0FBVTtJQUN6QixLQUFLLENBQXVCO0lBQ3JCLGVBQWUsR0FBWSxLQUFLLENBQUM7SUFDakMsZ0JBQWdCLEdBQUc7UUFDeEIsS0FBSyxFQUFFO1lBQ0wsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDL0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDOUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDOUIsb0NBQW9DO1lBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1NBQzdCO0tBQ0YsQ0FBQztJQUNLLGdCQUFnQixHQUFHO1FBQ3hCLEtBQUssRUFBRTtZQUNMLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQy9CLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO1lBQ3hDO2dCQUNFLElBQUksRUFBRSxZQUFZO2dCQUNsQixLQUFLLEVBQUUsWUFBWTthQUNwQjtZQUNEO2dCQUNFLElBQUksRUFBRSxlQUFlO2dCQUNyQixLQUFLLEVBQUUsWUFBWTthQUNwQjtZQUNEO2dCQUNFLElBQUksRUFBRSxZQUFZO2dCQUNsQixLQUFLLEVBQUUsWUFBWTthQUNwQjtZQUNEO2dCQUNFLElBQUksRUFBRSxZQUFZO2dCQUNsQixLQUFLLEVBQUUsWUFBWTthQUNwQjtZQUNEO2dCQUNFLElBQUksRUFBRSxlQUFlO2dCQUNyQixLQUFLLEVBQUUsWUFBWTthQUNwQjtZQUNELG9DQUFvQztZQUNwQztnQkFDRSxJQUFJLEVBQUUsa0JBQWtCO2dCQUN4QixLQUFLLEVBQUUsYUFBYTthQUNyQjtTQUNGO0tBQ0YsQ0FBQztJQUNGLFdBQVcsQ0FBTTtJQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ2YsWUFDVSxHQUFzQixFQUN0QixJQUFnQixFQUNoQixNQUFxQixFQUNyQixRQUFxQjtRQUhyQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtJQUM1QixDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pFLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLFdBQVcsRUFBRTtZQUNsRTtnQkFDRSxFQUFFLEVBQUUsU0FBUztnQkFDYixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLElBQUksa0JBQWtCO2FBQzdEO1lBQ0QsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxZQUFZLEVBQUU7WUFDckUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxZQUFZLEVBQUU7WUFDckUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxZQUFZLEVBQUU7WUFDckU7Z0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtnQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLElBQUkscUJBQXFCO2FBQ25FO1NBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRztZQUN0QixFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLFdBQVcsRUFBRTtZQUNsRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBRTtZQUM1RDtnQkFDRSxFQUFFLEVBQUUsY0FBYztnQkFDbEIsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxJQUFJLGVBQWU7YUFDdkQ7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNsQixFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUFJLFVBQVUsRUFBRTtZQUMxRDtnQkFDRSxFQUFFLEVBQUUsSUFBSTtnQkFDUixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsSUFBSSx1QkFBdUI7YUFDckU7WUFDRCxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUFJLFVBQVUsRUFBRTtZQUMxRDtnQkFDRSxFQUFFLEVBQUUsS0FBSztnQkFDVCxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsSUFBSSx3QkFBd0I7YUFDdkU7WUFDRCxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLFFBQVEsRUFBRTtZQUN0RCxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBRTtZQUN4RCxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUFJLFVBQVUsRUFBRTtZQUMxRCxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxJQUFJLGFBQWEsRUFBRTtZQUNoRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUFJLFVBQVUsRUFBRTtZQUMxRCxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLFdBQVcsRUFBRTtZQUM1RCxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBRTtZQUN4RCxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBRTtZQUN4RCxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBRTtZQUN4RCxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUFJLFVBQVUsRUFBRTtZQUMxRCxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUFJLFVBQVUsRUFBRTtTQUMzRCxDQUFDO1FBQ0YsTUFBTSxpQkFBaUIsR0FBRyw0QkFBNEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RFLElBQUksQ0FBQyxLQUFLLEdBQUc7WUFDWCxjQUFjLEVBQUUsS0FBSztZQUNyQixLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxJQUFJLFlBQVk7b0JBQ3ZELFFBQVEsRUFBRSxzREFBc0QsaUJBQWlCOzREQUVwRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxZQUNoQzs2QkFDUTtpQkFDcEI7Z0JBQ0QsTUFBTTtnQkFDTixRQUFRO2dCQUNSLFdBQVc7Z0JBQ1gsZUFBZTtnQkFDZixVQUFVO2dCQUNWLFVBQVU7Z0JBQ1YsV0FBVztnQkFDWCxpQkFBaUI7Z0JBQ2pCLFdBQVc7Z0JBQ1gsV0FBVztnQkFDWCxHQUFHO2dCQUNILGFBQWE7Z0JBQ2IsU0FBUztnQkFDVCxZQUFZO2dCQUNaLGtCQUFrQjtnQkFDbEIsa0JBQWtCO2dCQUNsQixTQUFTO2dCQUNULFFBQVE7Z0JBQ1IsR0FBRztnQkFDSCxZQUFZO2dCQUNaLEdBQUc7Z0JBQ0gsZUFBZTtnQkFDZixhQUFhO2dCQUNiLEdBQUc7Z0JBQ0gsTUFBTTtnQkFDTixNQUFNO2dCQUNOLGVBQWU7YUFDaEI7U0FDRixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEdBQUc7Z0JBQ1gsV0FBVyxFQUFFLEVBQUU7Z0JBQ2YsUUFBUSxFQUNOLHNGQUFzRjtvQkFDdEYsb1FBQW9RO2FBQ3ZRLENBQUM7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsSUFBSTtRQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRU0sUUFBUTtRQUNiLFlBQVk7UUFDWixJQUFJLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFDO1lBQ3pDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUztZQUNyQixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7U0FDakQsQ0FBQyxDQUFDO1FBQ0gsaUJBQWlCLENBQUMsUUFBUSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxRQUFRLENBQUMsSUFBSTtRQUNuQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNsQztRQUNELElBQUksS0FBSyxHQUFXLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzVELEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVDLEtBQUssQ0FBQyxDQUFDLENBQWlCLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUM3RDtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLG1CQUFtQixDQUFDLElBQVM7UUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUFZLENBQUMsYUFBcUI7UUFDaEMsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLGFBQWEsRUFBRTtZQUNqQixJQUFJLEtBQUssR0FDUCxJQUFJLENBQUMsTUFDTixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FDN0MsSUFBSSxDQUFDLE1BQWMsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQ2pELENBQUM7WUFDRCxJQUFJLENBQUMsTUFBYyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDN0QsS0FBSyxFQUNKLElBQUksQ0FBQyxNQUFjLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUNqRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FDMUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUMxRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQztZQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzdDO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixJQUFJLHlCQUF5QixFQUNwRTtnQkFDRSxNQUFNLEVBQUUsU0FBUzthQUNsQixDQUNGLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxhQUFxQjtRQUMzQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLFFBQVEsYUFBYSxFQUFFO1lBQ3JCLEtBQUssV0FBVztnQkFDZCxJQUFJLENBQUMsUUFBUTtvQkFDWCxrRkFBa0YsQ0FBQztnQkFDckYsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxJQUFJLENBQUMsUUFBUTtvQkFDWCxrSEFBa0gsQ0FBQztnQkFDckgsTUFBTTtZQUNSLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsUUFBUTtvQkFDWCxJQUFJLENBQUMsU0FBUzt3QkFDZCxxSEFBcUgsQ0FBQztnQkFDeEgsTUFBTTtZQUNSLEtBQUssU0FBUztnQkFDWixJQUFJLENBQUMsUUFBUTtvQkFDWCxzR0FBc0csQ0FBQztnQkFDekcsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLDBDQUEwQyxJQUFJLENBQUMsaUJBQWlCLCtDQUErQyxDQUFDO2dCQUNoSSxNQUFNO1lBQ1IsS0FBSyxtQkFBbUI7Z0JBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxRQUFRO29CQUNYLDZHQUE2RyxDQUFDO2dCQUNoSCxNQUFNO1NBQ1Q7UUFDRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUk7WUFDRixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ25CLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPO29CQUNsRSxFQUFFLENBQUM7Z0JBQ0osUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU87b0JBQ2hFLE1BQU0sQ0FBQztnQkFDVCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztnQkFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNuQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7b0JBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDM0M7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQzdDLElBQUksQ0FBQyxRQUFRLEVBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztnQkFDRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO29CQUN0QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztvQkFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDbEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEdBQUcsTUFBTTt5QkFDbEMsV0FBVyxFQUFFO3lCQUNiLFFBQVEsQ0FBQyxVQUFVLENBQUM7d0JBQ3JCLENBQUMsQ0FBQyxhQUFhO3dCQUNmLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzs0QkFDM0MsQ0FBQyxDQUFDLGFBQWE7NEJBQ2YsQ0FBQyxDQUFDLFlBQVksQ0FBQztvQkFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7d0JBQ2pFLENBQUMsQ0FBQyxNQUFNO3dCQUNSLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ1Asc0NBQXNDO29CQUN0QyxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBRXhELFFBQVEsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQzNDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztvQkFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO29CQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUM7b0JBQzdDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzFCLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUFDLE1BQU0sR0FBRTtJQUNaLENBQUM7SUFFRCxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLGVBQWUsR0FBMkIsSUFBSSxDQUFDO0lBQy9DLEtBQUssQ0FBQyxxQkFBcUIsQ0FDekIsUUFBZ0IsRUFDaEIsV0FBbUI7UUFFbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7U0FDN0I7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDN0MsTUFBTSxRQUFRLEdBQUc7WUFDZjtnQkFDRSxJQUFJLEVBQUUsUUFBUTtnQkFDZCxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FDeEIsK0NBQStDLENBQ2hEO29CQUNDLENBQUMsQ0FBQywrREFBK0Q7b0JBQ2pFLENBQUMsQ0FBQyx3RkFBd0Y7YUFDN0Y7WUFDRDtnQkFDRSxJQUFJLEVBQUUsTUFBTTtnQkFDWixPQUFPLEVBQUUsR0FBRyxRQUFRLE9BQU8sV0FBVyxFQUFFO2FBQ3pDO1NBQ0YsQ0FBQztRQUVGLE1BQU0sS0FBSyxHQUFHO1lBQ1osUUFBUSxFQUFFLFFBQVE7WUFDbEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsV0FBVyxFQUFFLEdBQUc7WUFDaEIsS0FBSyxFQUFFLENBQUM7WUFDUixpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLGdCQUFnQixFQUFFLENBQUM7U0FDcEIsQ0FBQztRQUVGLElBQUk7WUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyw0QkFBNEIsRUFBRTtnQkFDekQsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO2dCQUMvQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQzNCLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU07YUFDcEMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2FBQzNEO1lBQ0EsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU87Z0JBQ2xFLE1BQU0sQ0FBQztZQUNSLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ3hFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDekIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxFQUFFO2dCQUNYLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzVDLElBQUksSUFBSTtvQkFBRSxNQUFNO2dCQUNoQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLGVBQWUsSUFBSSxZQUFZLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQzNDO1lBQ0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQzdCO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO2dCQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7Z0JBQ2hFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQzthQUM3QjtZQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sS0FBSyxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLG1FQUFtRTtRQUNuRSxnQ0FBZ0M7UUFDaEMsTUFBTTtRQUNOLDZEQUE2RDtRQUM3RCw2Q0FBNkM7UUFDN0MsTUFBTTtRQUNOLGdFQUFnRTtRQUNoRSx5QkFBeUI7UUFDekIseUJBQXlCO1FBQ3pCLHNEQUFzRDtRQUN0RCx1REFBdUQ7UUFDdkQsT0FBTztRQUNQLCtFQUErRTtRQUMvRSx1RUFBdUU7UUFDdkUsa0JBQWtCO1FBQ2xCLFFBQVE7UUFDUix3QkFBd0I7UUFDeEIsTUFBTTtRQUNMLElBQUksQ0FBQyxRQUE0QixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNoRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1NBQzdCO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFZO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDMUIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUU7WUFDNUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3JDLE9BQU87U0FDUjtRQUNELElBQUk7WUFDRixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM1QixTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO2FBQ3ZEO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQzthQUN0QztTQUNGO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLFNBQVMsR0FBdUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUNyRSxzQkFBc0IsQ0FDdkIsQ0FBQztRQUNGLElBQUksU0FBUyxFQUFFO1lBQ2IsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDeEM7UUFDRCxxQkFBcUI7SUFDdkIsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFJO1FBQ2hCLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVM7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNwQyw0QkFBNEI7UUFDNUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7WUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFJO1FBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBSTtRQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSTtRQUNULElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxlQUFlLENBQUMsSUFBSTtRQUNsQixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxNQUFNLEVBQUU7Z0JBQ2hFLHdDQUF3QztnQkFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGNBQWM7b0JBQ2pELDRDQUE0QyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQzthQUM3RDtTQUNGO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtZQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUM3QyxhQUFhLEVBQ2IsYUFBYSxDQUNkLENBQUM7WUFDRixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksYUFBYSxFQUFFO2dCQUN2RSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDO2dCQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzdEO1NBQ0Y7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUk7UUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0QsV0FBVyxDQUFDLElBQUk7UUFDZCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ3ZELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxNQUFNLEdBQ1IsUUFBUSxDQUFDLGdCQUFnQixDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxDQUM3RCxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxTQUFTLEdBQ1gsUUFBUSxDQUFDLGdCQUFnQixDQUN2QixrQ0FBa0MsQ0FDbkMsQ0FBQyxDQUFDLENBQ0osQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO29CQUNuQixJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxFQUFFO3dCQUVuQixRQUFRLENBQUMsZ0JBQWdCLENBQ3ZCLGdDQUFnQyxDQUNqQyxDQUFDLENBQUMsQ0FDSixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3dCQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUMxQiwwQ0FBMEMsRUFDMUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQ3RCLENBQUM7cUJBQ0g7eUJBQU07d0JBRUgsUUFBUSxDQUFDLGdCQUFnQixDQUN2QixnQ0FBZ0MsQ0FDakMsQ0FBQyxDQUFDLENBQ0osQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztxQkFDckM7Z0JBQ0gsQ0FBQyxDQUFDO2dCQUNGLFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO29CQUN0QixJQUFJLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxFQUFFO3dCQUV0QixRQUFRLENBQUMsZ0JBQWdCLENBQ3ZCLGdDQUFnQyxDQUNqQyxDQUFDLENBQUMsQ0FDSixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3dCQUNuQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUMxQiw2Q0FBNkMsRUFDN0MsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQ3RCLENBQUM7cUJBQ0g7eUJBQU07d0JBRUgsUUFBUSxDQUFDLGdCQUFnQixDQUN2QixnQ0FBZ0MsQ0FDakMsQ0FBQyxDQUFDLENBQ0osQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztxQkFDckM7Z0JBQ0gsQ0FBQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFJO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELFlBQVksQ0FBQyxXQUFtQjtRQUM5QixPQUFPLFdBQVc7YUFDZixPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQzthQUNyQixPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQzthQUNyQixPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQzthQUN0QixPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQzthQUN2QixPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFVBQVU7U0FDM0I7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsU0FBUztTQUNqQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxLQUFLLEdBQ1AsSUFBSSxDQUFDLE1BQ04sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQzdDLElBQUksQ0FBQyxNQUFjLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUNqRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQWMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLE1BQWMsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDL0QsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFPO1FBQ3BCLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQy9CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7UUFDbEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6RCxNQUFNLGlCQUFpQixHQUFHLFlBQVksRUFBRSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RSxJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLFVBQVU7WUFDVixpQkFBaUIsQ0FBQyxTQUFTO2dCQUN6QixpQkFBaUIsQ0FBQyxZQUFZLEdBQUcsaUJBQWlCLENBQUMsWUFBWSxDQUFDO1lBQ2xFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsT0FBTztRQUM3QixNQUFNLGNBQWMsR0FBRyw0QkFBNEIsQ0FBQztRQUNwRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyQixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN4QjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxVQUFVO1FBQ1AsSUFBSSxDQUFDLFFBQTRCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ2xFLHdCQUF3QjtRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDO1lBQ2xDLGVBQWUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLEdBQUUsQ0FBQztZQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLElBQUksbUJBQW1CO1NBQ2hFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ1AsSUFBSSxDQUFDLFFBQTRCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQzlELHdCQUF3QjtRQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzFCLENBQUM7d0dBaHJCVSx1QkFBdUI7NEZBQXZCLHVCQUF1Qiw2NUNDbkNwQyw4MVVBMFNBOzs0RkR2UWEsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNFLG9CQUFvQjt1TEFRdkIsTUFBTTtzQkFEWixTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRy9CLGFBQWE7c0JBRG5CLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHdEMsT0FBTztzQkFEYixTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR2hDLFFBQVE7c0JBRGQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUVRLFFBQVE7c0JBQXZELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFaEMsZUFBZTtzQkFEckIsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR3hDLGdCQUFnQjtzQkFEdEIsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR3pDLFVBQVU7c0JBRGhCLFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHbkMsYUFBYTtzQkFEbkIsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUlwQyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUtHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBPbkluaXQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBEcm9wRG93bkxpc3RDb21wb25lbnQgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItZHJvcGRvd25zXCI7XHJcbmltcG9ydCB7XHJcbiAgUmljaFRleHRFZGl0b3JDb21wb25lbnQsXHJcbiAgVG9vbGJhclNldHRpbmdzTW9kZWwsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXJpY2h0ZXh0ZWRpdG9yXCI7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1idXR0b25zXCI7XHJcbmltcG9ydCB7IERyb3BEb3duQnV0dG9uIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXNwbGl0YnV0dG9uc1wiO1xyXG5pbXBvcnQgeyBEaWFsb2dDb21wb25lbnQgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItcG9wdXBzXCI7XHJcbi8vIHNlcnZpY2VcclxuLy8gaW1wb3J0IHsgUGJGdW5TZXJ2aWNlIH0gZnJvbSBcIkBhcHAvc2VydmljZXMvcGItZnVuLnNlcnZpY2VcIjtcclxuLy8gaW1wb3J0IHsgU2hhcmVkU3luY2Z1c2lvbk1vZHVsZSB9IGZyb20gXCJAYXBwL21vZHVsZS9zeW5jZnVzaW9uTW9kdWxlXCI7XHJcbmltcG9ydCB7IE9wZW5BaU1vZGVsUlRFIH0gZnJvbSBcIi4vb3BlbmFwaVwiO1xyXG5pbXBvcnQgeyBsaW5lSGVpZ2h0X2l0ZW1zIH0gZnJvbSBcIi4vZGF0YS1jb25maWdcIjtcclxuaW1wb3J0IHsgZm9udEZhbWlseSwgc2l6ZSB9IGZyb20gXCIuL2RhdGEtY29uZmlnXCI7XHJcbmltcG9ydCB7IGdldEFJQ29uZmlnLCBpc0FJQ29uZmlnVmFsaWQsIEFJQ29uZmlnIH0gZnJvbSBcIi4vYWktY29uZmlnXCI7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZS9kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXJcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcInJzLXJpY2h0ZXh0LWVkaXRvclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vaW5kZXguY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vaW5kZXguY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgLy8gc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAvLyBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTaGFyZWRTeW5jZnVzaW9uTW9kdWxlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJpY2h0ZXh0ZWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKFwiZWRpdG9yXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyBydGVPYmo6IFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJxdWVyeUNhdGVnb3J5XCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyBxdWVyeUNhdGVnb3J5ITogRHJvcERvd25MaXN0Q29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJsZWZ0UnRlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyBsZWZ0UnRlITogUmljaFRleHRFZGl0b3JDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChcInJpZ2h0UnRlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyByaWdodFJ0ZSE6IFJpY2hUZXh0RWRpdG9yQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJBSWRpYWxvZ1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgQUlkaWFsb2chOiBEaWFsb2dDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChcInNlbnRpbWVudEJ1dHRvblwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBwdWJsaWMgc2VudGltZW50QnV0dG9uITogQnV0dG9uQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJyZWdlbmVyYXRlQnV0dG9uXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyByZWdlbmVyYXRlQnV0dG9uITogQnV0dG9uQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJjb3B5QnV0dG9uXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyBjb3B5QnV0dG9uITogQnV0dG9uQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJyZXBsYWNlQnV0dG9uXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHB1YmxpYyByZXBsYWNlQnV0dG9uITogQnV0dG9uQ29tcG9uZW50O1xyXG4gIC8vIEBWaWV3Q2hpbGQoXCJjaGlwTGlzdFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIGNoaXBMaXN0ITogQ2hpcExpc3RDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gXCJcIjtcclxuICBASW5wdXQoKSB2YWx1ZSA9IFwiXCI7XHJcbiAgQElucHV0KCkgZWRpdG9ySWQgPSBcImVkaXRvcklkXCI7XHJcbiAgQElucHV0KCkgc2F2ZUludGVydmFsID0gNTAwO1xyXG4gIEBJbnB1dCgpIGhlaWdodCA9IFwiYXV0b1wiO1xyXG4gIEBJbnB1dCgpIGF1dG9TYXZlT25JZGxlID0gdHJ1ZTtcclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRhcmdldCA9IFwiI21haW5QYWdlXCI7IC8vIGRpYWxvZyDlvLnnqpfniLbnuqdcclxuICBASW5wdXQoKSBpbnNlcnRJbWFnZVNldHRpbmdzID0ge1xyXG4gICAgc2F2ZUZvcm1hdDogXCJCbG9iXCIsXHJcbiAgICBhbGxvd2VkVHlwZXM6IFtcIi5zdmdcIiwgXCIucG5nXCJdLFxyXG4gICAgZGlzcGxheTogXCJub25lXCIsXHJcbiAgfTtcclxuICBASW5wdXQoKSBzaG93VGlja2V0QXR0YWNobWVudCA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgdG9vbGJhckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGFjdGlvbkJlZ2luID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBpbnB1dCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGFjdGlvbkNvbXBsZXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlclBhc3RlQ2xlYW51cCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgZmFtaWx5ID0gZm9udEZhbWlseTtcclxuICBmb250U2l6ZSA9IHNpemU7XHJcbiAgZGlhbG9nV2lkdGggPSBcIjgwMHB4XCI7XHJcbiAgZGlhbG9nSGVpZ2h0ID0gXCI2NDJweFwiO1xyXG4gIHNob3dab29tQnRuID0gdHJ1ZTtcclxuICBlZGl0b3JNYW5hZ2VyOiBhbnk7XHJcbiAgc2l6ZSA9IFwiXCI7XHJcbiAgc2VsZWN0ZWRRdWVyeTtcclxuICBwdWJsaWMgZHJvcFZhbEluZGV4ID0gMDtcclxuICBwdWJsaWMgcXVlcnlMaXN0OiB7IGlkOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9W10gPSBbXTtcclxuICBwdWJsaWMgcmVwaHJhc2VUeWxlTGlzdCA9IFtdO1xyXG4gIHB1YmxpYyBsYW5ndWFnZUxpc3Q6IHsgaWQ6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXSA9IFtdO1xyXG4gIHB1YmxpYyBwcm9tcHRRdWVyeSA9IFwiXCI7XHJcbiAgcHVibGljIGlzU2VudGltZW50Q2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc3ViUXVlcnkgPSBcIlwiO1xyXG4gIHB1YmxpYyB0cmFuc2xhdGVsYW5ndWFnZSE6IHN0cmluZztcclxuICBwdWJsaWMgY2hpcFZhbHVlID0gXCJTdGFuZGFyZFwiO1xyXG4gIHB1YmxpYyBhcGlSZXN1bHREYXRhOiBhbnk7XHJcbiAgcHVibGljIEFJUmVzdWx0ITogc3RyaW5nO1xyXG4gIHRvb2xzOiBUb29sYmFyU2V0dGluZ3NNb2RlbDtcclxuICBwdWJsaWMgaXNEaWFsb2dWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGJ1bGxldEZvcm1hdExpc3QgPSB7XHJcbiAgICB0eXBlczogW1xyXG4gICAgICB7IHRleHQ6IFwiTm9uZVwiLCB2YWx1ZTogXCJub25lXCIgfSxcclxuICAgICAgeyB0ZXh0OiBcIuKXj1wiLCB2YWx1ZTogXCJkaXNjXCIgfSxcclxuICAgICAgeyB0ZXh0OiBcIuKXi1wiLCB2YWx1ZTogXCJjaXJjbGVcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwi4pagXCIsIHZhbHVlOiBcInNxdWFyZVwiIH0sXHJcbiAgICAgIC8vIEFkZCB5b3VyIGN1c3RvbSBidWxsZXQgc3R5bGUgaGVyZVxyXG4gICAgICB7IHRleHQ6IFwiLVwiLCB2YWx1ZTogXCJkYXNoXCIgfSxcclxuICAgIF0sXHJcbiAgfTtcclxuICBwdWJsaWMgbnVtYmVyRm9ybWF0TGlzdCA9IHtcclxuICAgIHR5cGVzOiBbXHJcbiAgICAgIHsgdGV4dDogXCJOb25lXCIsIHZhbHVlOiBcIm5vbmVcIiB9LFxyXG4gICAgICB7IHRleHQ6IFwiMSwgMiwgMywg4oCmXCIsIHZhbHVlOiBcImRlY2ltYWxcIiB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCLOsSwgzrIsIM6zLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJsb3dlckdyZWVrXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcImksIGlpLCBpaWksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcImxvd2VyUm9tYW5cIixcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRleHQ6IFwiQSwgQiwgQywg4oCmXCIsXHJcbiAgICAgICAgdmFsdWU6IFwidXBwZXJBbHBoYVwiLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGV4dDogXCJhLCBiLCBjLCDigKZcIixcclxuICAgICAgICB2YWx1ZTogXCJsb3dlckFscGhhXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcIkksIElJLCBJSUksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcInVwcGVyUm9tYW5cIixcclxuICAgICAgfSxcclxuICAgICAgLy8gQWRkIHlvdXIgY3VzdG9tIGJ1bGxldCBzdHlsZSBoZXJlXHJcbiAgICAgIHtcclxuICAgICAgICB0ZXh0OiBcIigxKSwgKDIpLCAoMyksIOKAplwiLFxyXG4gICAgICAgIHZhbHVlOiBcInBhcmVudGhlc2VzXCIsXHJcbiAgICAgIH0sXHJcbiAgICBdLFxyXG4gIH07XHJcbiAgdHJhbnNsYXRpb246IGFueTtcclxuICB6b29tb3V0ID0gdHJ1ZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXJcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGlvbiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ0cmFuc2xhdGlvblwiKSkgfHwge307XHJcbiAgICB0aGlzLnF1ZXJ5TGlzdCA9IFtcclxuICAgICAgeyBpZDogXCJSZXBocmFzZVwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLlJFUEhSQVNFIHx8IFwiLlJlcGhyYXNlXCIgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBcIkdyYW1tYXJcIixcclxuICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkNPUlJFQ1RfR1JBTU1BUiB8fCBcIi5Db3JyZWN0IEdyYW1tYXJcIixcclxuICAgICAgfSxcclxuICAgICAgeyBpZDogXCJTdW1tYXJpemVcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5TVU1NQVJJWkUgfHwgXCIuU3VtbWFyaXplXCIgfSxcclxuICAgICAgeyBpZDogXCJFbGFib3JhdGVcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5FTEFCT1JBVEUgfHwgXCIuRWxhYm9yYXRlXCIgfSxcclxuICAgICAgeyBpZDogXCJUcmFuc2xhdGVcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5UUkFOU0xBVEUgfHwgXCIuVHJhbnNsYXRlXCIgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBcIlNlbnRpbWVudEFuYWx5c2lzXCIsXHJcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5TRU5USU1FTlRfQU5BTFlTSVMgfHwgXCIuU2VudGltZW50IEFuYWx5c2lzXCIsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgdGhpcy5yZXBocmFzZVR5bGVMaXN0ID0gW1xyXG4gICAgICB7IGlkOiBcIlN0YW5kYXJkXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uU1RBTkRBUkQgfHwgXCIuU3RhbmRhcmRcIiB9LFxyXG4gICAgICB7IGlkOiBcIkZsdWVudFwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkZMVUVOVCB8fCBcIi5GbHVlbnRcIiB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IFwiUHJvZmVzc2lvbmFsXCIsXHJcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5QUk9GRVNTSU9OQUwgfHwgXCIuUHJvZmVzc2lvbmFsXCIsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgdGhpcy5sYW5ndWFnZUxpc3QgPSBbXHJcbiAgICAgIHsgaWQ6IFwiRU5cIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5FTkdMSVNIIHx8IFwiLkVuZ2xpc2hcIiB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IFwiWkhcIixcclxuICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkNISU5FU0VfU0lNUExJRklFRCB8fCBcIi5DaGluZXNlIChTaW1wbGlmaWVkKVwiLFxyXG4gICAgICB9LFxyXG4gICAgICB7IGlkOiBcIkVTXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uU1BBTklTSCB8fCBcIi5TcGFuaXNoXCIgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBcIlpIVFwiLFxyXG4gICAgICAgIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uQ0hJTkVTRV9UUkFESVRJT05BTCB8fCBcIi5DaGluZXNlIChUcmFkaXRpb25hbClcIixcclxuICAgICAgfSxcclxuICAgICAgeyBpZDogXCJISVwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkhJTkRJIHx8IFwiLkhpbmRpXCIgfSxcclxuICAgICAgeyBpZDogXCJBUlwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkFSQUJJQyB8fCBcIi5BcmFiaWNcIiB9LFxyXG4gICAgICB7IGlkOiBcIkJOXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uQkVOR0FMSSB8fCBcIi5CZW5nYWxpXCIgfSxcclxuICAgICAgeyBpZDogXCJQVFwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLlBPUlRVR1VFU0UgfHwgXCIuUG9ydHVndWVzZVwiIH0sXHJcbiAgICAgIHsgaWQ6IFwiUlVcIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5SVVNTSUFOIHx8IFwiLlJ1c3NpYW5cIiB9LFxyXG4gICAgICB7IGlkOiBcIkpBXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uSkFQQU5FU0UgfHwgXCIuSmFwYW5lc2VcIiB9LFxyXG4gICAgICB7IGlkOiBcIkRFXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uR0VSTUFOIHx8IFwiLkdlcm1hblwiIH0sXHJcbiAgICAgIHsgaWQ6IFwiS09cIiwgdGV4dDogdGhpcy50cmFuc2xhdGlvbi5LT1JFQU4gfHwgXCIuS29yZWFuXCIgfSxcclxuICAgICAgeyBpZDogXCJGUlwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkZSRU5DSCB8fCBcIi5GcmVuY2hcIiB9LFxyXG4gICAgICB7IGlkOiBcIklUXCIsIHRleHQ6IHRoaXMudHJhbnNsYXRpb24uSVRBTElBTiB8fCBcIi5JdGFsaWFuXCIgfSxcclxuICAgICAgeyBpZDogXCJUUlwiLCB0ZXh0OiB0aGlzLnRyYW5zbGF0aW9uLlRVUktJU0ggfHwgXCIuVHVya2lzaFwiIH0sXHJcbiAgICBdO1xyXG4gICAgY29uc3QgZHluYW1pY0FpQnV0dG9uSWQgPSBgYWlfYXNzaXN0YW50X2J1dHRvbl90YmFyXyR7dGhpcy5lZGl0b3JJZH1gO1xyXG4gICAgdGhpcy50b29scyA9IHtcclxuICAgICAgZW5hYmxlRmxvYXRpbmc6IGZhbHNlLFxyXG4gICAgICBpdGVtczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRvb2x0aXBUZXh0OiB0aGlzLnRyYW5zbGF0aW9uLkFJX0FTU0lTVCB8fCBcIi5BSSBBc3Npc3RcIixcclxuICAgICAgICAgIHRlbXBsYXRlOiBgPGJ1dHRvbiBjbGFzcz1cImUtdGJhci1idG4gZS1idG5cIiB0YWJpbmRleD1cIi0xXCIgaWQ9XCIke2R5bmFtaWNBaUJ1dHRvbklkfVwiIHN0eWxlPVwid2lkdGg6MTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZS1ydGUtZHJvcGRvd24tYnRuLXRleHRcIj4ke1xyXG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24uQUlfQVNTSVNUIHx8IFwiLkFJIEFzc2lzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPmAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBcIkJvbGRcIixcclxuICAgICAgICBcIkl0YWxpY1wiLFxyXG4gICAgICAgIFwiVW5kZXJsaW5lXCIsXHJcbiAgICAgICAgXCJTdHJpa2VUaHJvdWdoXCIsXHJcbiAgICAgICAgXCJGb250TmFtZVwiLFxyXG4gICAgICAgIFwiRm9udFNpemVcIixcclxuICAgICAgICBcIkZvbnRDb2xvclwiLFxyXG4gICAgICAgIFwiQmFja2dyb3VuZENvbG9yXCIsXHJcbiAgICAgICAgXCJMb3dlckNhc2VcIixcclxuICAgICAgICBcIlVwcGVyQ2FzZVwiLFxyXG4gICAgICAgIFwifFwiLFxyXG4gICAgICAgIFwiQ3JlYXRlVGFibGVcIixcclxuICAgICAgICBcIkZvcm1hdHNcIixcclxuICAgICAgICBcIkFsaWdubWVudHNcIixcclxuICAgICAgICBcImJ1bGxldEZvcm1hdExpc3RcIixcclxuICAgICAgICBcIk51bWJlckZvcm1hdExpc3RcIixcclxuICAgICAgICBcIk91dGRlbnRcIixcclxuICAgICAgICBcIkluZGVudFwiLFxyXG4gICAgICAgIFwifFwiLFxyXG4gICAgICAgIFwiQ3JlYXRlTGlua1wiLFxyXG4gICAgICAgIFwifFwiLFxyXG4gICAgICAgIFwiRm9ybWF0UGFpbnRlclwiLFxyXG4gICAgICAgIFwiQ2xlYXJGb3JtYXRcIixcclxuICAgICAgICBcInxcIixcclxuICAgICAgICBcIlVuZG9cIixcclxuICAgICAgICBcIlJlZG9cIixcclxuICAgICAgICAvLydTb3VyY2VDb2RlJyxcclxuICAgICAgXSxcclxuICAgIH07XHJcbiAgICBpZiAodGhpcy5zaG93VGlja2V0QXR0YWNobWVudCkge1xyXG4gICAgICBjb25zdCBpdGVtID0ge1xyXG4gICAgICAgIHRvb2x0aXBUZXh0OiBcIlwiLFxyXG4gICAgICAgIHRlbXBsYXRlOlxyXG4gICAgICAgICAgJzxidXR0b24gY2xhc3M9XCJlLXRiYXItYnRuIGUtYnRuXCIgdGFiaW5kZXg9XCItMVwiIGlkPVwiY3VzdG9tX3RiYXJcIiAgc3R5bGU9XCJ3aWR0aDoxMDAlXCI+JyArXHJcbiAgICAgICAgICAnPGRpdiBjbGFzcz1cImUtdGJhci1idG4tdGV4dFwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDUwMDtcIj48aW1nIHNyYz1cIi9hc3NldHMvaW1nL2ZpbGUtaWNvbi5zdmdcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIi8+PGRpdiBjbGFzcz1cInVwbG9hZEFjdGlvbnNcIj48ZGl2IGlkPVwidXBsb2FkRnJvbVVzZXJcIj5Db21wdXRlciBGaWxlPC9kaXY+PGRpdiBpZD1cInJlbGF0aW9uRG9tXCI+VGlja2V0IEF0dGFjaG1lbnQ8L2Rpdj48L2Rpdj48L2Rpdj48L2J1dHRvbj4nLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnRvb2xzLml0ZW1zLnNwbGljZSgyMiwgMCwgaXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNvbnRlbnRDaGFuZ2UoYXJncykge1xyXG4gICAgdGhpcy5jaGFuZ2UuZW1pdChhcmdzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNyZWF0ZSgpOiB2b2lkIHtcclxuICAgIC8vIGFpIGFzc2lzdFxyXG4gICAgbGV0IGFpYXNzaXN0YW50QnV0dG9uID0gbmV3IERyb3BEb3duQnV0dG9uKHtcclxuICAgICAgaXRlbXM6IHRoaXMucXVlcnlMaXN0LFxyXG4gICAgICBzZWxlY3Q6IChhcmdzKSA9PiB0aGlzLmFpUXVlcnlTZWxlY3RlZE1lbnUoYXJncyksXHJcbiAgICB9KTtcclxuICAgIGFpYXNzaXN0YW50QnV0dG9uLmFwcGVuZFRvKFwiI2FpX2Fzc2lzdGFudF9idXR0b25fdGJhcl9cIiArIHRoaXMuZWRpdG9ySWQpO1xyXG4gICAgdGhpcy5jcmVhdGVkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TZWxlY3QoYXJncykge1xyXG4gICAgaWYgKHRoaXMucnRlT2JqLmZvcm1hdHRlci5nZXRVbmRvUmVkb1N0YWNrKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMucnRlT2JqLmZvcm1hdHRlci5zYXZlRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgbGV0IG5vZGVzOiBOb2RlW10gPSB0aGlzLmVkaXRvck1hbmFnZXIuZG9tTm9kZS5ibG9ja05vZGVzKCk7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBub2Rlcy5sZW5ndGggPiBpOyBpKyspIHtcclxuICAgICAgKG5vZGVzW2ldIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5saW5lSGVpZ2h0ID0gYXJncy5pdGVtLnRleHQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJ0ZU9iai5mb3JtYXR0ZXIuc2F2ZURhdGEoKTtcclxuICAgIHRoaXMucnRlT2JqLmZvcm1hdHRlci5lbmFibGVVbmRvKHRoaXMucnRlT2JqKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWlRdWVyeVNlbGVjdGVkTWVudShhcmdzOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9ndWVPcGVuKGFyZ3MuaXRlbS5pZCk7XHJcbiAgfVxyXG5cclxuICBkaWFsb2d1ZU9wZW4oc2VsZWN0ZWRRdWVyeTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB2YXIgc2VsZWN0aW9uVGV4dCA9IHRoaXMucnRlT2JqLmdldFNlbGVjdGVkSHRtbCgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFF1ZXJ5ID0gc2VsZWN0ZWRRdWVyeTtcclxuICAgIGlmIChzZWxlY3Rpb25UZXh0KSB7XHJcbiAgICAgIGxldCByYW5nZTogUmFuZ2UgPSAoXHJcbiAgICAgICAgdGhpcy5ydGVPYmogYXMgYW55XHJcbiAgICAgICkuZm9ybWF0dGVyLmVkaXRvck1hbmFnZXIubm9kZVNlbGVjdGlvbi5nZXRSYW5nZShcclxuICAgICAgICAodGhpcy5ydGVPYmogYXMgYW55KS5jb250ZW50TW9kdWxlLmdldERvY3VtZW50KClcclxuICAgICAgKTtcclxuICAgICAgKHRoaXMucnRlT2JqIGFzIGFueSkuZm9ybWF0dGVyLmVkaXRvck1hbmFnZXIubm9kZVNlbGVjdGlvbi5zYXZlKFxyXG4gICAgICAgIHJhbmdlLFxyXG4gICAgICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmNvbnRlbnRNb2R1bGUuZ2V0RG9jdW1lbnQoKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmRyb3BWYWxJbmRleCA9IHRoaXMucXVlcnlMaXN0LmZpbmRJbmRleChcclxuICAgICAgICAocSkgPT4gcS5pZC50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFF1ZXJ5LnRvTG93ZXJDYXNlKClcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5xdWVyeUNhdGVnb3J5LmluZGV4ID0gdGhpcy5kcm9wVmFsSW5kZXg7XHJcbiAgICAgIHRoaXMubGVmdFJ0ZS52YWx1ZSA9IHRoaXMucHJvbXB0UXVlcnkgPSBzZWxlY3Rpb25UZXh0O1xyXG4gICAgICB0aGlzLmxlZnRSdGUucmVmcmVzaFVJKCk7XHJcbiAgICAgIHRoaXMuQUlkaWFsb2cuc2hvdygpO1xyXG4gICAgICB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKHNlbGVjdGVkUXVlcnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaWFsb2cuc2hvd05vdGlmaWNhdGlvbihcclxuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLkZJUlNUX1NFTEVDVF9TT01FX1RFWFQgfHwgXCJGaXJzdCwgU2VsZWN0IHNvbWUgdGV4dFwiLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHN0YXR1czogXCJXYXJuaW5nXCIsXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlQUlTdWdlc3N0aW9uc0RhdGEoc2VsZWN0ZWRRdWVyeTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzU2VudGltZW50Q2hlY2sgPSBmYWxzZTtcclxuICAgIHN3aXRjaCAoc2VsZWN0ZWRRdWVyeSkge1xyXG4gICAgICBjYXNlIFwiU3VtbWFyaXplXCI6XHJcbiAgICAgICAgdGhpcy5zdWJRdWVyeSA9XHJcbiAgICAgICAgICBcIlBsZWFzZSBzdW1tYXJpemUgdGhlIGZvbGxvd2luZyB0ZXh0LiBQcmVzZXJ2ZSBhbGwgSFRNTCB0YWdzIGV4YWN0bHkgYXMgdGhleSBhcmU6XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJFbGFib3JhdGVcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID1cclxuICAgICAgICAgIFwiUGxlYXNlIGVsYWJvcmF0ZSBhbmQgZXhwYW5kIG9uIHRoZSBmb2xsb3dpbmcgdGV4dCB3aXRoIG1vcmUgZGV0YWlscy4gUHJlc2VydmUgYWxsIEhUTUwgdGFncyBleGFjdGx5IGFzIHRoZXkgYXJlOlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUmVwaHJhc2VcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID1cclxuICAgICAgICAgIHRoaXMuY2hpcFZhbHVlICtcclxuICAgICAgICAgIFwiIFBsZWFzZSByZXBocmFzZSB0aGUgZm9sbG93aW5nIHRleHQgd2hpbGUgbWFpbnRhaW5pbmcgdGhlIHNhbWUgbWVhbmluZy4gUHJlc2VydmUgYWxsIEhUTUwgdGFncyBleGFjdGx5IGFzIHRoZXkgYXJlOlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiR3JhbW1hclwiOlxyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPVxyXG4gICAgICAgICAgXCJQbGVhc2UgY29ycmVjdCBhbnkgZ3JhbW1hciBlcnJvcnMgaW4gdGhlIGZvbGxvd2luZyB0ZXh0LiBQcmVzZXJ2ZSBhbGwgSFRNTCB0YWdzIGV4YWN0bHkgYXMgdGhleSBhcmU6XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJUcmFuc2xhdGVcIjpcclxuICAgICAgICB0aGlzLnN1YlF1ZXJ5ID0gYFBsZWFzZSB0cmFuc2xhdGUgdGhlIGZvbGxvd2luZyB0ZXh0IHRvICR7dGhpcy50cmFuc2xhdGVsYW5ndWFnZX0uIFByZXNlcnZlIGFsbCBIVE1MIHRhZ3MgZXhhY3RseSBhcyB0aGV5IGFyZTpgO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiU2VudGltZW50QW5hbHlzaXNcIjpcclxuICAgICAgICB0aGlzLmlzU2VudGltZW50Q2hlY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3ViUXVlcnkgPVxyXG4gICAgICAgICAgXCJQbGVhc2UgYW5hbHl6ZSB0aGUgc2VudGltZW50IG9mIHRoZSBmb2xsb3dpbmcgdGV4dC4gUHJlc2VydmUgYWxsIEhUTUwgdGFncyBpbiB0aGUgdGV4dCB3aGVuIHJlZmVyZW5jaW5nIGl0OlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBSVN1Z2Vzc3Rpb25zKCk6IHZvaWQge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMucHJvbXB0UXVlcnkpIHtcclxuICAgICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJza2VsZXRvbklkXCIpIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5kaXNwbGF5ID1cclxuICAgICAgICAgIFwiXCI7XHJcbiAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmlnaHRSdGVcIikgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPVxyXG4gICAgICAgICAgXCJub25lXCI7XHJcbiAgICAgICAgdGhpcy5zZW50aW1lbnRCdXR0b24uZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgdGhpcy5yZWdlbmVyYXRlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvcHlCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVwbGFjZUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEaWFsb2dWaXNpYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLnByb21wdFF1ZXJ5ID0gdGhpcy5sZWZ0UnRlLmdldEh0bWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hcGlSZXN1bHREYXRhID0gdGhpcy5nZXRSZXNwb25zZUZyb21PcGVuQUkoXHJcbiAgICAgICAgICB0aGlzLnN1YlF1ZXJ5LFxyXG4gICAgICAgICAgdGhpcy5wcm9tcHRRdWVyeVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5hcGlSZXN1bHREYXRhLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzRGlhbG9nVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLkFJUmVzdWx0ID0gdGhpcy5pc1NlbnRpbWVudENoZWNrID8gdGhpcy5wcm9tcHRRdWVyeSA6IHJlc3VsdDtcclxuICAgICAgICAgIHRoaXMuc2VudGltZW50QnV0dG9uLmNvbnRlbnQgPSByZXN1bHRcclxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLmluY2x1ZGVzKFwicG9zaXRpdmVcIilcclxuICAgICAgICAgICAgPyBcIvCfmIogUG9zaXRpdmVcIlxyXG4gICAgICAgICAgICA6IHJlc3VsdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwibmVnYXRpdmVcIilcclxuICAgICAgICAgICAgPyBcIvCfmJ4gTmVnYXRpdmVcIlxyXG4gICAgICAgICAgICA6IFwi8J+YkCBOZXV0cmFsXCI7XHJcbiAgICAgICAgICB0aGlzLnNlbnRpbWVudEJ1dHRvbi5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAhdGhpcy5pc1NlbnRpbWVudENoZWNrXHJcbiAgICAgICAgICAgID8gXCJub25lXCJcclxuICAgICAgICAgICAgOiBcIlwiO1xyXG4gICAgICAgICAgLy90aGlzLnJpZ2h0UnRlLnZhbHVlID0gdGhpcy5BSVJlc3VsdDtcclxuICAgICAgICAgIHZhciBub1Jlc3VsdHNGb3VuZCA9ICEodGhpcy5BSVJlc3VsdCB8fCB0aGlzLnByb21wdFF1ZXJ5KTtcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuby1yZXN1bHRzLWZvdW5kXCIpIGFzIEhUTUxFbGVtZW50XHJcbiAgICAgICAgICApLnN0eWxlLmRpc3BsYXkgPSBub1Jlc3VsdHNGb3VuZCA/IFwiXCIgOiBcIm5vbmVcIjtcclxuICAgICAgICAgIHRoaXMucmVnZW5lcmF0ZUJ1dHRvbi5kaXNhYmxlZCA9IG5vUmVzdWx0c0ZvdW5kO1xyXG4gICAgICAgICAgdGhpcy5jb3B5QnV0dG9uLmRpc2FibGVkID0gbm9SZXN1bHRzRm91bmQ7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VCdXR0b24uZGlzYWJsZWQgPSBub1Jlc3VsdHNGb3VuZDtcclxuICAgICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHt9XHJcbiAgfVxyXG5cclxuICBjdXJyZW50UmVzcG9uc2UgPSBcIlwiO1xyXG4gIGFib3J0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyIHwgbnVsbCA9IG51bGw7XHJcbiAgYXN5bmMgZ2V0UmVzcG9uc2VGcm9tT3BlbkFJKFxyXG4gICAgc3ViUXVlcnk6IHN0cmluZyxcclxuICAgIHByb21wdFF1ZXJ5OiBzdHJpbmdcclxuICApOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgdGhpcy56b29tb3V0ID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmFib3J0Q29udHJvbGxlcikge1xyXG4gICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgIGNvbnN0IG1lc3NhZ2VzID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgcm9sZTogXCJzeXN0ZW1cIixcclxuICAgICAgICBjb250ZW50OiBzdWJRdWVyeS5pbmNsdWRlcyhcclxuICAgICAgICAgIFwiZW1vamkgZm9sbG93ZWQgYnkgdGhlIHNlbnRpbWVudCBpbiB0aGUgZm9ybWF0XCJcclxuICAgICAgICApXHJcbiAgICAgICAgICA/IFwiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LiBQbGVhc2UgcmVzcG9uZCBpbiBzdHJpbmcgZm9ybWF0LlwiXHJcbiAgICAgICAgICA6IFwiTk9URTogUmV0dXJuIHNhbWUgaHRtbCBmb3JtYXQganVzdCBkbyBjaGFuZ2VzIGNvbnRlbnQgb25seS4gZG9uJ3QgY2hhbmdlIGh0bWwgZm9ybWF0cy5cIixcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHJvbGU6IFwidXNlclwiLFxyXG4gICAgICAgIGNvbnRlbnQ6IGAke3N1YlF1ZXJ5fVxcblxcbiR7cHJvbXB0UXVlcnl9YCxcclxuICAgICAgfSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3QgcGFyYW0gPSB7XHJcbiAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyxcclxuICAgICAgbWF4X3Rva2VuczogMTYwMDAsXHJcbiAgICAgIHRlbXBlcmF0dXJlOiAwLjcsXHJcbiAgICAgIHRvcF9wOiAxLFxyXG4gICAgICBmcmVxdWVuY3lfcGVuYWx0eTogMCxcclxuICAgICAgcHJlc2VuY2VfcGVuYWx0eTogMCxcclxuICAgIH07XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcImFwaS9haS92Mi9jaGF0L2NoYXQtc3RyZWFtXCIsIHtcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwYXJhbSksXHJcbiAgICAgICAgc2lnbmFsOiB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xyXG4gICAgICB9XHJcbiAgICAgIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNrZWxldG9uSWRcIikgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPVxyXG4gICAgICAgIFwibm9uZVwiO1xyXG4gICAgICAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyaWdodFJ0ZVwiKSBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9IFwiXCI7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jdXJyZW50UmVzcG9uc2UgPSBcIlwiO1xyXG4gICAgICB0aGlzLnVwZGF0ZVJlc3BvbnNlKFwiXCIpO1xyXG4gICAgICB0aGlzLnJpZ2h0UnRlLnZhbHVlID0gXCJcIjtcclxuICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcclxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xyXG4gICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XHJcbiAgICAgICAgaWYgKGRvbmUpIGJyZWFrO1xyXG4gICAgICAgIGNvbnN0IGNodW5rID0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pO1xyXG4gICAgICAgIGNvbnN0IGNsZWFuZWRDaHVuayA9IGNodW5rLnJlcGxhY2UoL2NodW5rOi9nLCBcIlwiKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZXNwb25zZSArPSBjbGVhbmVkQ2h1bms7XHJcbiAgICAgICAgdGhpcy51cGRhdGVSZXNwb25zZSh0aGlzLmN1cnJlbnRSZXNwb25zZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFJlc3BvbnNlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJUaGUgQUkgcmVxdWVzdCB3YXMgYWN0aXZlbHkgY2FuY2VsZWQgYnkgdGhlIHVzZXJcIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFJlc3BvbnNlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJTdHJlYW0gZXJyb3I6XCIsIGVycm9yKTtcclxuICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaWFsb2dTaG93KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5yZWdlbmVyYXRlQnV0dG9uIS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9ucygpO1xyXG4gICAgLy8gfSk7XHJcbiAgICAvLyB0aGlzLmNvcHlCdXR0b24hLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgIC8vICAgdGhpcy5jb3B5VGV4dFRvQ2xpcGJvYXJkKHRoaXMuQUlSZXN1bHQpO1xyXG4gICAgLy8gfSk7XHJcbiAgICAvLyB0aGlzLnJlcGxhY2VCdXR0b24hLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgIC8vICAgbGV0IHJhbmdlOiBSYW5nZSA9IChcclxuICAgIC8vICAgICB0aGlzLnJ0ZU9iaiBhcyBhbnlcclxuICAgIC8vICAgKS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLmdldFJhbmdlKFxyXG4gICAgLy8gICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmNvbnRlbnRNb2R1bGUuZ2V0RG9jdW1lbnQoKVxyXG4gICAgLy8gICApO1xyXG4gICAgLy8gICAodGhpcy5ydGVPYmogYXMgYW55KS5mb3JtYXR0ZXIuZWRpdG9yTWFuYWdlci5ub2RlU2VsZWN0aW9uLnJlc3RvcmUocmFuZ2UpO1xyXG4gICAgLy8gICAodGhpcy5ydGVPYmogYXMgYW55KS5leGVjdXRlQ29tbWFuZChcImluc2VydEhUTUxcIiwgdGhpcy5BSVJlc3VsdCwge1xyXG4gICAgLy8gICAgIHVuZG86IHRydWUsXHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gICB0aGlzLmNsb3NlRGlhbG9nKCk7XHJcbiAgICAvLyB9KTtcclxuICAgICh0aGlzLkFJZGlhbG9nIGFzIERpYWxvZ0NvbXBvbmVudCkuZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuICB9XHJcblxyXG4gIGNsb3NlRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYWJvcnRDb250cm9sbGVyKSB7XHJcbiAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuQUlkaWFsb2cuaGlkZSgpO1xyXG4gICAgdGhpcy5yaWdodFJ0ZS52YWx1ZSA9IFwiXCI7XHJcbiAgICB0aGlzLmxlZnRSdGUudmFsdWUgPSBcIlwiO1xyXG4gICAgdGhpcy5wcm9tcHRRdWVyeSA9IFwiXCI7XHJcbiAgICB0aGlzLmNoaXBWYWx1ZSA9IFwiU3RhbmRhcmRcIjtcclxuICAgIHRoaXMuQUlSZXN1bHQgPSBcIlwiO1xyXG4gICAgdGhpcy5kcm9wVmFsSW5kZXggPSAwO1xyXG4gICAgdGhpcy5zZWxlY3RlZFF1ZXJ5ID0gXCJSZXBocmFzZVwiO1xyXG4gICAgdGhpcy5zZW50aW1lbnRCdXR0b24uY29udGVudCA9IFwi8J+YiiBOZXV0cmFsXCI7XHJcbiAgICB0aGlzLnNpemUgPSBcIlwiO1xyXG4gICAgdGhpcy5pc0RpYWxvZ1Zpc2libGUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNvcHlUZXh0VG9DbGlwYm9hcmQodGV4dDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMucmlnaHRSdGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yaWdodFJ0ZS5zZWxlY3RBbGwoKTtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJObyBzZWxlY3RlZCBjb250ZW50XCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XHJcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XHJcbiAgICAgIGlmIChzdWNjZXNzKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJUZXh0IGNvcGllZCB0byBjbGlwYm9hcmQgc3VjY2Vzc2Z1bGx5IVwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGNvcHkgdGV4dFwiKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY29weSB0ZXh0OiBcIiwgZXJyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uT3ZlcmxheUNsaWNrKCk6IHZvaWQge1xyXG4gICAgbGV0IGFjdGl2ZUVsZTogSFRNTEVsZW1lbnQgfCBudWxsID0gdGhpcy5BSWRpYWxvZy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgIFwiLmNoYXJfYmxvY2suZS1hY3RpdmVcIlxyXG4gICAgKTtcclxuICAgIGlmIChhY3RpdmVFbGUpIHtcclxuICAgICAgYWN0aXZlRWxlLmNsYXNzTGlzdC5yZW1vdmUoXCJlLWFjdGl2ZVwiKTtcclxuICAgIH1cclxuICAgIC8vdGhpcy5jbG9zZURpYWxvZygpO1xyXG4gIH1cclxuXHJcbiAgb25RdWVyeVNlbGVjdChhcmdzKSB7XHJcbiAgICAvLyB0aGlzLmNoaXBMaXN0LnNlbGVjdGVkQ2hpcHMgPSAwO1xyXG4gICAgdGhpcy50cmFuc2xhdGVsYW5ndWFnZSA9IFwiRU5cIjtcclxuICAgIHRoaXMuc2VsZWN0ZWRRdWVyeSA9IGFyZ3MuaXRlbURhdGEuaWQ7XHJcbiAgICB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKGFyZ3MuaXRlbURhdGEuaWQpO1xyXG4gIH1cclxuXHJcbiAgb25MYW5ndWFnZVNlbGVjdChhcmdzOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudHJhbnNsYXRlbGFuZ3VhZ2UgPSBhcmdzLml0ZW1EYXRhLmlkO1xyXG4gICAgdGhpcy51cGRhdGVBSVN1Z2Vzc3Rpb25zRGF0YShcIlRyYW5zbGF0ZVwiKTtcclxuICB9XHJcblxyXG4gIG9uQ2hpcENsaWNrKGFyZ3M6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGlwVmFsdWUgPSBhcmdzLml0ZW1EYXRhLnRleHQ7XHJcbiAgICAvLyDkuovku7bkvJrop6blj5HkuKTmrKEg5b+F6aG75Yik5patYXJncy50ZXh05piv5ZCm5pyJ5YC8XHJcbiAgICBpZiAoYXJncy5pdGVtRGF0YS50ZXh0KSB0aGlzLnVwZGF0ZUFJU3VnZXNzdGlvbnNEYXRhKFwiUmVwaHJhc2VcIik7XHJcbiAgfVxyXG5cclxuICBfdG9vbGJhckNsaWNrKGFyZ3MpIHtcclxuICAgIHRoaXMudG9vbGJhckNsaWNrLmVtaXQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBfYWN0aW9uQmVnaW4oYXJncykge1xyXG4gICAgdGhpcy5hY3Rpb25CZWdpbi5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuICBfaW5wdXQoYXJncykge1xyXG4gICAgdGhpcy5pbnB1dC5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuICBfYWN0aW9uQ29tcGxldGUoYXJncykge1xyXG4gICAgaWYgKGFyZ3MucmVxdWVzdFR5cGUgPT0gXCJVTFwiKSB7XHJcbiAgICAgIGlmIChhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuc3R5bGUubGlzdFN0eWxlVHlwZSA9PSBcImRhc2hcIikge1xyXG4gICAgICAgIC8vIEFwcGx5IGN1c3RvbSBzdHlsaW5nIGZvciBkYXNoIGJ1bGxldHNcclxuICAgICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuc3R5bGUubGlzdFN0eWxlSW1hZ2UgPVxyXG4gICAgICAgICAgXCJ1cmwoJy4uLy4uLy4uL2Fzc2V0cy9pbWcvYnVsbGV0LWRhc2guc3ZnJylcIjtcclxuICAgICAgICBhcmdzLmVsZW1lbnRzWzBdLnBhcmVudEVsZW1lbnQuc3R5bGUubGlzdFN0eWxlVHlwZSA9IFwibm9uZVwiO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGFyZ3MucmVxdWVzdFR5cGUgPT0gXCJPTFwiKSB7XHJcbiAgICAgIGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFxyXG4gICAgICAgIFwiY3VzdG9tLWxpc3RcIixcclxuICAgICAgICBcInBhcmVudGhlc2VzXCJcclxuICAgICAgKTtcclxuICAgICAgaWYgKGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5zdHlsZS5saXN0U3R5bGVUeXBlID09IFwicGFyZW50aGVzZXNcIikge1xyXG4gICAgICAgIGFyZ3MuZWxlbWVudHNbMF0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QgPSBcImN1c3RvbS1saXN0XCI7XHJcbiAgICAgICAgYXJncy5lbGVtZW50c1swXS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJwYXJlbnRoZXNlc1wiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5hY3Rpb25Db21wbGV0ZS5lbWl0KGFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgX2ZvY3VzKGFyZ3MpIHtcclxuICAgIHRoaXMuZm9jdXMuZW1pdChhcmdzKTtcclxuICB9XHJcbiAgX2JsdXIoYXJncykge1xyXG4gICAgdGhpcy5ibHVyLmVtaXQoYXJncyk7XHJcbiAgfVxyXG4gIF9kaWFsb2dPcGVuKGFyZ3MpIHtcclxuICAgIGlmIChhcmdzLmVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZS1ydGUtZWRpdC10YWJsZVwiKSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB2YXIgcm93Qm94ID0gKFxyXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5lLXRhYmxlLXJvdy5lLW51bWVyaWN0ZXh0Ym94XCIpWzBdIGFzIGFueVxyXG4gICAgICAgICkuZWoyX2luc3RhbmNlc1swXTtcclxuICAgICAgICB2YXIgY29sdW1uQm94ID0gKFxyXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgXCIuZS10YWJsZS1jb2x1bW4uZS1udW1lcmljdGV4dGJveFwiXHJcbiAgICAgICAgICApWzBdIGFzIGFueVxyXG4gICAgICAgICkuZWoyX2luc3RhbmNlc1swXTtcclxuICAgICAgICByb3dCb3guY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJvd0JveC52YWx1ZSA+IDUwKSB7XHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgICAgICAgXCIuZS1ydGUtZWxlbWVudHMuZS1pbnNlcnQtdGFibGVcIlxyXG4gICAgICAgICAgICAgIClbMF0gYXMgYW55XHJcbiAgICAgICAgICAgICkuZWoyX2luc3RhbmNlc1swXS5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nLnNob3dOb3RpZmljYXRpb24oXHJcbiAgICAgICAgICAgICAgXCJUaGUgcm93IG51bWJlciBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNTAuXCIsXHJcbiAgICAgICAgICAgICAgeyBzdGF0dXM6IFwiV2FybmluZ1wiIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIChcclxuICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgICAgICAgXCIuZS1ydGUtZWxlbWVudHMuZS1pbnNlcnQtdGFibGVcIlxyXG4gICAgICAgICAgICAgIClbMF0gYXMgYW55XHJcbiAgICAgICAgICAgICkuZWoyX2luc3RhbmNlc1swXS5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sdW1uQm94LmNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICAgIGlmIChjb2x1bW5Cb3gudmFsdWUgPiAyNSkge1xyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgICAgIFwiLmUtcnRlLWVsZW1lbnRzLmUtaW5zZXJ0LXRhYmxlXCJcclxuICAgICAgICAgICAgICApWzBdIGFzIGFueVxyXG4gICAgICAgICAgICApLmVqMl9pbnN0YW5jZXNbMF0uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5zaG93Tm90aWZpY2F0aW9uKFxyXG4gICAgICAgICAgICAgIFwiVGhlIGNvbHVtbiBudW1iZXIgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1LlwiLFxyXG4gICAgICAgICAgICAgIHsgc3RhdHVzOiBcIldhcm5pbmdcIiB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAoXHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICAgICAgIFwiLmUtcnRlLWVsZW1lbnRzLmUtaW5zZXJ0LXRhYmxlXCJcclxuICAgICAgICAgICAgICApWzBdIGFzIGFueVxyXG4gICAgICAgICAgICApLmVqMl9pbnN0YW5jZXNbMF0uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9hZnRlclBhc3RlQ2xlYW51cChhcmdzKSB7XHJcbiAgICBhcmdzLnZhbHVlID0gdGhpcy51bmVzY2FwZUh0bWwoYXJncy52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICB1bmVzY2FwZUh0bWwoZXNjYXBlZEh0bWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZXNjYXBlZEh0bWxcclxuICAgICAgLnJlcGxhY2UoLyZsdDsvZywgXCI8XCIpXHJcbiAgICAgIC5yZXBsYWNlKC8mZ3Q7L2csIFwiPlwiKVxyXG4gICAgICAucmVwbGFjZSgvJmFtcDsvZywgXCImXCIpXHJcbiAgICAgIC5yZXBsYWNlKC8mcXVvdDsvZywgJ1wiJylcclxuICAgICAgLnJlcGxhY2UoLyZhcG9zOy9nLCBcIidcIik7XHJcbiAgfVxyXG5cclxuICBvblpvb20oKSB7XHJcbiAgICBpZiAodGhpcy5zaXplID09PSBcImxhcmdlc3RcIikge1xyXG4gICAgICB0aGlzLnNpemUgPSBcIlwiOyAvLyDmgaLlpI3liLDljp/lp4vlpKflsI9cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2l6ZSA9IFwibGFyZ2VzdFwiOyAvLyDorr7nva7kuLrmnIDlpKfljJZcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2VuZXJhdGVDbGljaygpIHtcclxuICAgIHRoaXMudXBkYXRlQUlTdWdlc3N0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgY29weUNsaWNrKCkge1xyXG4gICAgdGhpcy5jb3B5VGV4dFRvQ2xpcGJvYXJkKHRoaXMuQUlSZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgcmVwbGFjZUNsaWNrKCkge1xyXG4gICAgbGV0IHJhbmdlOiBSYW5nZSA9IChcclxuICAgICAgdGhpcy5ydGVPYmogYXMgYW55XHJcbiAgICApLmZvcm1hdHRlci5lZGl0b3JNYW5hZ2VyLm5vZGVTZWxlY3Rpb24uZ2V0UmFuZ2UoXHJcbiAgICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmNvbnRlbnRNb2R1bGUuZ2V0RG9jdW1lbnQoKVxyXG4gICAgKTtcclxuICAgICh0aGlzLnJ0ZU9iaiBhcyBhbnkpLmZvcm1hdHRlci5lZGl0b3JNYW5hZ2VyLm5vZGVTZWxlY3Rpb24ucmVzdG9yZShyYW5nZSk7XHJcbiAgICAodGhpcy5ydGVPYmogYXMgYW55KS5leGVjdXRlQ29tbWFuZChcImluc2VydEhUTUxcIiwgdGhpcy5BSVJlc3VsdCwge1xyXG4gICAgICB1bmRvOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNsb3NlRGlhbG9nKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSZXNwb25zZShjb250ZW50KSB7XHJcbiAgICB0aGlzLmN1cnJlbnRSZXNwb25zZSA9IGNvbnRlbnQ7XHJcbiAgICBjb25zdCBodG1sQ29udGVudCA9IHRoaXMuZXh0cmFjdEhUTUxGcm9tUmVzcG9uc2UoY29udGVudCk7XHJcbiAgICB0aGlzLnJpZ2h0UnRlLnZhbHVlID0gaHRtbENvbnRlbnQ7XHJcbiAgICBjb25zdCBydGVDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJpZ2h0UnRlXCIpO1xyXG4gICAgY29uc3Qgc2Nyb2xsYWJsZUVsZW1lbnQgPSBydGVDb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoXCIuZS1ydGUtY29udGVudFwiKTtcclxuICAgIGlmIChzY3JvbGxhYmxlRWxlbWVudCkge1xyXG4gICAgICAvLyDoh6rliqjmu5rliqjliLDlupXpg6hcclxuICAgICAgc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wID1cclxuICAgICAgICBzY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxIZWlnaHQgLSBzY3JvbGxhYmxlRWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4dHJhY3RIVE1MRnJvbVJlc3BvbnNlKGNvbnRlbnQpIHtcclxuICAgIGNvbnN0IGNvZGVCbG9ja1JlZ2V4ID0gL2BgYGh0bWxcXHMqKFtcXHNcXFNdKj8pXFxzKmBgYC87XHJcbiAgICBjb25zdCBtYXRjaCA9IGNvbnRlbnQubWF0Y2goY29kZUJsb2NrUmVnZXgpO1xyXG4gICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XHJcbiAgICAgIHJldHVybiBtYXRjaFsxXS50cmltKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGVudDtcclxuICB9XHJcblxyXG4gIG9uTWluaW1pemUoKSB7XHJcbiAgICAodGhpcy5BSWRpYWxvZyBhcyBEaWFsb2dDb21wb25lbnQpLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgLy8gdGhpcy5BSWRpYWxvZy5oaWRlKCk7XHJcbiAgICB0aGlzLmRpYWxvZy5zaG93TG9hZGluZ05vdGlmaWNhdGlvbih7XHJcbiAgICAgIGxvYWRpbmdDYWxsYmFjazogKGNhbGxiYWNrKSA9PiB7fSxcclxuICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGlvbi5BSV9JTl9QUk9HUkVTUyB8fCBcIkFJIGlzIGluIHByb2dyZXNzXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNob3dEaWFsb2coKSB7XHJcbiAgICAodGhpcy5BSWRpYWxvZyBhcyBEaWFsb2dDb21wb25lbnQpLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwiXCI7XHJcbiAgICAvLyB0aGlzLkFJZGlhbG9nLnNob3coKTtcclxuICAgIHRoaXMuc25hY2tCYXIuZGlzbWlzcygpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZWRpdG9yX2JveFwiIGlkPVwiY29udGFpbmVyXCI+XHJcbiAgPGVqcy1yaWNodGV4dGVkaXRvclxyXG4gICAgI2VkaXRvclxyXG4gICAgW2lkXT1cImVkaXRvcklkXCJcclxuICAgIFtoZWlnaHRdPVwiaGVpZ2h0XCJcclxuICAgIFtzYXZlSW50ZXJ2YWxdPVwiMFwiXHJcbiAgICBbYXV0b1NhdmVPbklkbGVdPVwiYXV0b1NhdmVPbklkbGVcIlxyXG4gICAgW3Rvb2xiYXJTZXR0aW5nc109XCJ0b29sc1wiXHJcbiAgICBbYnVsbGV0Rm9ybWF0TGlzdF09XCJidWxsZXRGb3JtYXRMaXN0XCJcclxuICAgIFtudW1iZXJGb3JtYXRMaXN0XT1cIm51bWJlckZvcm1hdExpc3RcIlxyXG4gICAgW2ZvbnRGYW1pbHldPVwiZmFtaWx5XCJcclxuICAgIFtmb250U2l6ZV09XCJmb250U2l6ZVwiXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgW2luc2VydEltYWdlU2V0dGluZ3NdPVwiaW5zZXJ0SW1hZ2VTZXR0aW5nc1wiXHJcbiAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgIChhY3Rpb25CZWdpbik9XCJfYWN0aW9uQmVnaW4oJGV2ZW50KVwiXHJcbiAgICAoY2hhbmdlKT1cIm9uQ29udGVudENoYW5nZSgkZXZlbnQpXCJcclxuICAgIChjcmVhdGVkKT1cIm9uQ3JlYXRlKClcIlxyXG4gICAgKHRvb2xiYXJDbGljayk9XCJfdG9vbGJhckNsaWNrKCRldmVudClcIlxyXG4gICAgKGlucHV0KT1cIl9pbnB1dCgkZXZlbnQpXCJcclxuICAgIChmb2N1cyk9XCJfZm9jdXMoJGV2ZW50KVwiXHJcbiAgICAoYmx1cik9XCJfYmx1cigkZXZlbnQpXCJcclxuICAgIChhY3Rpb25Db21wbGV0ZSk9XCJfYWN0aW9uQ29tcGxldGUoJGV2ZW50KVwiXHJcbiAgICAoZGlhbG9nT3Blbik9XCJfZGlhbG9nT3BlbigkZXZlbnQpXCJcclxuICAgIChhZnRlclBhc3RlQ2xlYW51cCk9XCJfYWZ0ZXJQYXN0ZUNsZWFudXAoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvZWpzLXJpY2h0ZXh0ZWRpdG9yPlxyXG4gIDxlanMtZGlhbG9nXHJcbiAgICAjQUlkaWFsb2dcclxuICAgIGlkPVwiQUlkaWFsb2dcIlxyXG4gICAgW25nQ2xhc3NdPVwic2l6ZVwiXHJcbiAgICBbdmlzaWJsZV09XCJmYWxzZVwiXHJcbiAgICBbdGFyZ2V0XT1cInRhcmdldFwiXHJcbiAgICBbaXNNb2RhbF09XCJ0cnVlXCJcclxuICAgIFtoZWlnaHRdPVwiZGlhbG9nSGVpZ2h0XCJcclxuICAgIFt3aWR0aF09XCJkaWFsb2dXaWR0aFwiXHJcbiAgICBtYXhIZWlnaHQ9XCI4MCVcIlxyXG4gICAgY3NzQ2xhc3M9XCJlLXJ0ZS1lbGVtZW50cyBjdXN0b20tZGlhbG9nLXJ0ZVwiXHJcbiAgICB6SW5kZXg9XCIxMDAwXCJcclxuICAgIChjbG9zZSk9XCJjbG9zZURpYWxvZygpXCJcclxuICAgIChvdmVybGF5Q2xpY2spPVwib25PdmVybGF5Q2xpY2soKVwiXHJcbiAgICAob3Blbik9XCJkaWFsb2dTaG93KClcIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+XHJcbiAgICAgICAge3sgdHJhbnNsYXRpb24uQUlfQVNTSVNUIHx8IFwiLkFJIEFzc2lzdFwiIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWJ1dHRvbnNcIj5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJoZWFkZXItYnRuXCIgKm5nSWY9XCJ6b29tb3V0XCI+XHJcbiAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgIHNyYz1cIi9hc3NldHMvaW1nL2RpYWxvZy1uYXJyb3cuc3ZnXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItaWNvblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbk1pbmltaXplKClcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dab29tQnRuXCIgY2xhc3M9XCJoZWFkZXItem9vbVwiIChjbGljayk9XCJvblpvb20oKVwiPlxyXG4gICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICBjbGFzcz1cImhlYWRlci1pY29uXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJzaXplID09PSAnbGFyZ2VzdCdcIlxyXG4gICAgICAgICAgICBzcmM9XCIuLi8uLi8uLi9hc3NldHMvaW1nL2RpYWxvZy1zaHJpbmsuc3ZnXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWljb25cIlxyXG4gICAgICAgICAgICAqbmdJZj1cInNpemUgIT09ICdsYXJnZXN0J1wiXHJcbiAgICAgICAgICAgIHNyYz1cIi4uLy4uLy4uL2Fzc2V0cy9pbWcvZGlhbG9nLWdyb3cuc3ZnXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1idG5cIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPlxyXG4gICAgICAgICAgPGltZyBjbGFzcz1cImhlYWRlci1pY29uXCIgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL2ltZy9kaWFsb2ctY2xvc2Uuc3ZnXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZT5cclxuICAgICAgPGRpdiBpZD1cImRpYWxvZy1mb290ZXItY29udGVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tcm93LTBcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjdXNjb2wtMFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogbGVmdFwiXHJcbiAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3VzY29sLTFcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7IHdpZHRoOiAxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgZWpzLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgI3NlbnRpbWVudEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiJ/CfmIogJyArICh0cmFuc2xhdGlvbi5ORVVUUkFMIHx8ICcuTmV1dHJhbCcpXCJcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJzZW50aW1lbnRcIlxyXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBlanMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAjY29weUJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwidHJhbnNsYXRpb24uQ09QWSB8fCAnLkNvcHknXCJcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3B5LWJ0blwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29weUNsaWNrKClcIlxyXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBlanMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAjcmVwbGFjZUJ1dHRvblxyXG4gICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwidHJhbnNsYXRpb24uUkVQTEFDRSB8fCAnLlJlcGxhY2UnXCJcclxuICAgICAgICAgICAgICAgIGlzUHJpbWFyeT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVwbGFjZUNsaWNrKClcIlxyXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWNvbnRlbnRcIiBzdHlsZT1cImhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tcm93LTBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXNjb2wtMFwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cclxuICAgICAgICAgICAgPGVqcy1kcm9wZG93bmxpc3RcclxuICAgICAgICAgICAgICAjcXVlcnlDYXRlZ29yeVxyXG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDIwMHB4XCJcclxuICAgICAgICAgICAgICBpZD1cInF1ZXJ5Q2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInF1ZXJ5TGlzdFwiXHJcbiAgICAgICAgICAgICAgaW5kZXg9XCIwXCJcclxuICAgICAgICAgICAgICBbZmllbGRzXT1cInsgdGV4dDogJ3RleHQnLCB2YWx1ZTogJ2lkJyB9XCJcclxuICAgICAgICAgICAgICAoc2VsZWN0KT1cIm9uUXVlcnlTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyB0cmFuc2xhdGlvbi5SRVBIUkFTRSB8fCBcIi5SZXBocmFzZVwiIH19XHJcbiAgICAgICAgICAgIDwvZWpzLWRyb3Bkb3dubGlzdD5cclxuICAgICAgICAgICAgPGVqcy1kcm9wZG93bmxpc3RcclxuICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkUXVlcnkgPT0gJ1JlcGhyYXNlJ1wiXHJcbiAgICAgICAgICAgICAgaWQ9XCJjaGlwcy1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICNjaGlwTGlzdFxyXG4gICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE2MHB4XCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNoaXBWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwicmVwaHJhc2VUeWxlTGlzdFwiXHJcbiAgICAgICAgICAgICAgW2ZpZWxkc109XCJ7IHRleHQ6ICd0ZXh0JywgdmFsdWU6ICdpZCcgfVwiXHJcbiAgICAgICAgICAgICAgKHNlbGVjdCk9XCJvbkNoaXBDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L2Vqcy1kcm9wZG93bmxpc3Q+XHJcbiAgICAgICAgICAgIDxlanMtZHJvcGRvd25saXN0XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZFF1ZXJ5ID09ICdUcmFuc2xhdGUnXCJcclxuICAgICAgICAgICAgICAjbGFuZ3VhZ2VDYXRlZ29yeVxyXG4gICAgICAgICAgICAgIGluZGV4PVwiMFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJsYW5ndWFnZS1DYXRlZ29yeVwiXHJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwibGFuZ3VhZ2VMaXN0XCJcclxuICAgICAgICAgICAgICBbZmllbGRzXT1cInsgdGV4dDogJ3RleHQnLCB2YWx1ZTogJ2lkJyB9XCJcclxuICAgICAgICAgICAgICAoc2VsZWN0KT1cIm9uTGFuZ3VhZ2VTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9lanMtZHJvcGRvd25saXN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3VzY29sLTFcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8IS0tIDxlanMtY2hpcGxpc3RcclxuICAgICAgICAgICAgICBpZD1cImNoaXBzLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgI2NoaXBMaXN0XHJcbiAgICAgICAgICAgICAgW2NoaXBzXT1cIlsnU3RhbmRhcmQnLCAnRmx1ZW50JywgJ1Byb2Zlc3Npb25hbCddXCJcclxuICAgICAgICAgICAgICBzZWxlY3Rpb249XCJTaW5nbGVcIlxyXG4gICAgICAgICAgICAgIGNzc0NsYXNzPVwiZS1vdXRsaW5lXCJcclxuICAgICAgICAgICAgICBbc2VsZWN0ZWRDaGlwc109XCJbMF1cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkNoaXBDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L2Vqcy1jaGlwbGlzdD4gLS0+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBlanMtYnV0dG9uXHJcbiAgICAgICAgICAgICAgI3JlZ2VuZXJhdGVCdXR0b25cclxuICAgICAgICAgICAgICBbY29udGVudF09XCJ0cmFuc2xhdGlvbi5SRUdFTkVSQVRFIHx8ICcuUmVnZW5lcmF0ZSdcIlxyXG4gICAgICAgICAgICAgIGlzUHJpbWFyeT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIGRpc2FibGVkPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZWdlbmVyYXRlQ2xpY2soKVwiXHJcbiAgICAgICAgICAgID48L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tcm93LTFcIiBzdHlsZT1cImhlaWdodDogY2FsYygxMDAlIC0gNDBweClcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjdXNjb2wtMFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwiXHJcbiAgICAgICAgICAgICAgZmxleDogMTtcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7XHJcbiAgICAgICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0OyBoZWlnaHQ6IDEwMCVcIj5cclxuICAgICAgICAgICAgICA8ZWpzLXJpY2h0ZXh0ZWRpdG9yXHJcbiAgICAgICAgICAgICAgICAjbGVmdFJ0ZVxyXG4gICAgICAgICAgICAgICAgaWQ9XCJsZWZ0UnRlXCJcclxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2xiYXJTZXR0aW5nc109XCJ7IGVuYWJsZTogZmFsc2UgfVwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uLkFOQUxZU0lTX09GX0FJX1NVUFBPUlQgfHxcclxuICAgICAgICAgICAgICAgICAgJy5BbmFseXNpcyBvZiBBSSBTdXBwb3J0J1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIGNzc0NsYXNzPVwiZS1vdXRsaW5lXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9lanMtcmljaHRleHRlZGl0b3I+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3VzY29sLTFcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgIGZsZXg6IDE7XHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMTsgbWluLWhlaWdodDogMDsgb3ZlcmZsb3c6IGhpZGRlblwiPlxyXG4gICAgICAgICAgICAgIDxlanMtcmljaHRleHRlZGl0b3JcclxuICAgICAgICAgICAgICAgICNyaWdodFJ0ZVxyXG4gICAgICAgICAgICAgICAgaWQ9XCJyaWdodFJ0ZVwiXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxMDAlXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbGJhclNldHRpbmdzXT1cInsgZW5hYmxlOiBmYWxzZSB9XCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcclxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24uQU5BTFlTSVNfT0ZfQUlfU1VQUE9SVCB8fFxyXG4gICAgICAgICAgICAgICAgICAnLkFuYWx5c2lzIG9mIEFJIFN1cHBvcnQnXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJlLW91dGxpbmVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L2Vqcy1yaWNodGV4dGVkaXRvcj5cclxuICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5vLXJlc3VsdHMtZm91bmRcIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJuby1yZXN1bHRzLWZvdW5kXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgaGVpZ2h0OiAyNDRweDsgYWxpZ24tY29udGVudDogY2VudGVyXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjUwXCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCI1MFwiXHJcbiAgICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9jZG4tYm9sZGRlc2svYWdlbnQtYW5ndWxhci1hcHAvaW1hZ2VzL2xpZ2h0L25vLXJlY29yZHMtd2FybmluZy5zdmdcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zbGF0aW9uLk5PX1JFU1VMVFNfRk9VTkQgfHwgXCIuTm8gcmVzdWx0cyBmb3VuZFwiIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGlkPVwic2tlbGV0b25JZFwiPlxyXG4gICAgICAgICAgICAgICAgPGVqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAjc2tlbGV0b25JZDFcclxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJSZWN0YW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcclxuICAgICAgICAgICAgICAgID48L2Vqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGVqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAjc2tlbGV0b25JZDJcclxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJSZWN0YW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCI5MCVcIlxyXG4gICAgICAgICAgICAgICAgPjwvZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICAgICNza2VsZXRvbklkM1xyXG4gICAgICAgICAgICAgICAgICBzaGFwZT1cIlJlY3RhbmdsZVwiXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjcwJVwiXHJcbiAgICAgICAgICAgICAgICA+PC9lanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgIDxlanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgICAgI3NrZWxldG9uSWQ0XHJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwiUmVjdGFuZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNTAlXCJcclxuICAgICAgICAgICAgICAgID48L2Vqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGVqcy1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAjc2tlbGV0b25JZDVcclxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJSZWN0YW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIzMCVcIlxyXG4gICAgICAgICAgICAgICAgPjwvZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZWpzLXNrZWxldG9uXHJcbiAgICAgICAgICAgICAgICAgICNza2VsZXRvbklkNlxyXG4gICAgICAgICAgICAgICAgICBzaGFwZT1cIlJlY3RhbmdsZVwiXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwJVwiXHJcbiAgICAgICAgICAgICAgICA+PC9lanMtc2tlbGV0b25cclxuICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvZWpzLWRpYWxvZz5cclxuPC9kaXY+XHJcbiJdfQ==