@sunbird-cb/toc 0.0.25 → 0.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/esm2022/lib/_collection/_common/ai-tutor/ai-tutor.component.mjs +1169 -0
  2. package/esm2022/lib/_collection/_common/ai-tutor/socket.service.mjs +121 -0
  3. package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +3 -3
  4. package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +15 -6
  5. package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +7 -2
  6. package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +3 -3
  7. package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +2 -2
  8. package/esm2022/lib/services/root.service.mjs +106 -0
  9. package/fesm2022/sunbird-cb-toc.mjs +7800 -6423
  10. package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
  11. package/lib/_collection/_common/ai-tutor/ai-tutor.component.d.ts +140 -0
  12. package/lib/_collection/_common/ai-tutor/ai-tutor.component.d.ts.map +1 -0
  13. package/lib/_collection/_common/ai-tutor/socket.service.d.ts +20 -0
  14. package/lib/_collection/_common/ai-tutor/socket.service.d.ts.map +1 -0
  15. package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +1 -1
  16. package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts.map +1 -1
  17. package/lib/_collection/_common/content-toc/content-toc.component.d.ts +2 -1
  18. package/lib/_collection/_common/content-toc/content-toc.component.d.ts.map +1 -1
  19. package/lib/_collection/_common/content-toc/content-toc.module.d.ts +29 -28
  20. package/lib/_collection/_common/content-toc/content-toc.module.d.ts.map +1 -1
  21. package/lib/services/root.service.d.ts +27 -0
  22. package/lib/services/root.service.d.ts.map +1 -0
  23. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { Component, EventEmitter, HostListener, Inject, Input, Output, ViewChild, ViewChildren } from '@angular/core';
2
- import { NsContent, WsEvents } from '@sunbird-cb/utils-v2';
2
+ import { WsEvents } from '@sunbird-cb/utils-v2';
3
3
  import { AiTutorConfirmPopupComponent } from './ai-tutor-confirm-popup/ai-tutor-confirm-popup.component';
4
4
  import { MatLegacyDialogConfig as MatDialogConfig } from '@angular/material/legacy-dialog';
5
5
  import { viewerRouteGenerator } from '../../../_services/viewer-route-util';
@@ -7,6 +7,7 @@ import { VttFile } from '@polyflix/vtt-parser';
7
7
  import { tap } from 'rxjs/operators';
8
8
  import { MatTab } from '@angular/material/tabs';
9
9
  import * as _ from 'lodash';
10
+ import { NsContent } from '../../../_collection-api';
10
11
  import * as i0 from "@angular/core";
11
12
  import * as i1 from "@angular/router";
12
13
  import * as i2 from "@sunbird-cb/utils-v2";
@@ -28,8 +29,9 @@ import * as i17 from "./app-toc-content/app-toc-content.component";
28
29
  import * as i18 from "./app-toc-teachers-notes/app-toc-teachers-notes.component";
29
30
  import * as i19 from "./app-toc-batch-assignments/app-toc-batch-assignments.component";
30
31
  import * as i20 from "./samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component";
31
- import * as i21 from "@ngx-translate/core";
32
- import * as i22 from "../../../_pipes/highlight.pipe";
32
+ import * as i21 from "../ai-tutor/ai-tutor.component";
33
+ import * as i22 from "@ngx-translate/core";
34
+ import * as i23 from "../../../_pipes/highlight.pipe";
33
35
  export class ContentTocComponent {
34
36
  constructor(route, utilityService, loadCheckService, configService, dialog, tocSvc, actionSVC, router, eventSvc, viewerDataSvc, samuhikCharchaSvc, environment) {
35
37
  this.route = route;
@@ -105,6 +107,9 @@ export class ContentTocComponent {
105
107
  else {
106
108
  this.enableAITutorFlag = false;
107
109
  }
110
+ if (this.content && this.content.courseCategory === NsContent.ECourseCategory.LEARNING_PATHWAY) {
111
+ this.enableAITutorFlag = false;
112
+ }
108
113
  if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.transcription?.all) {
109
114
  // this.resourceIdentifier$ = this.tocSvc.transriptionIdentifier.subscribe((value:any)=>{
110
115
  // if(value && value?.identifier) {
@@ -215,6 +220,9 @@ export class ContentTocComponent {
215
220
  else {
216
221
  this.enableAITutorFlag = false;
217
222
  }
223
+ if (this.content && this.content.courseCategory === NsContent.ECourseCategory.LEARNING_PATHWAY) {
224
+ this.enableAITutorFlag = false;
225
+ }
218
226
  if (changes && changes['playResourceId']) {
219
227
  if (changes?.playResourceId?.previousValue !== changes?.playResourceId?.currentValue) {
220
228
  if (this.viewerPage && this.viewerDataSvc?.resourceId && this.enableTranscriptionFlag) {
@@ -368,6 +376,7 @@ export class ContentTocComponent {
368
376
  }
369
377
  }
370
378
  showAiTutorConfirmPopup() {
379
+ debugger;
371
380
  this.raiseAIPopupStartTelemetry();
372
381
  if (this.isEnrolled) {
373
382
  this.fromAITutor = true;
@@ -743,11 +752,11 @@ export class ContentTocComponent {
743
752
  this.resumeContent.emit();
744
753
  }
745
754
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentTocComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.UtilityService }, { token: i3.LoadCheckService }, { token: i2.ConfigurationsService }, { token: i4.MatLegacyDialog }, { token: i5.AppTocService }, { token: i6.ActionService }, { token: i1.Router }, { token: i2.EventService }, { token: i7.ViewerDataService }, { token: i8.SamuhikCharchaService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Component }); }
746
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContentTocComponent, selector: "ws-widget-content-toc", inputs: { content: "content", contentReadData: "contentReadData", initialRouteData: "initialRouteData", changeTab: "changeTab", baseContentReadData: "baseContentReadData", forPreview: "forPreview", contentTabFlag: "contentTabFlag", resumeData: "resumeData", batchData: "batchData", skeletonLoader: "skeletonLoader", tocStructure: "tocStructure", pathSet: "pathSet", fromViewer: "fromViewer", hierarchyMapData: "hierarchyMapData", condition: "condition", kparray: "kparray", selectedBatchData: "selectedBatchData", config: "config", componentName: "componentName", isEnrolled: "isEnrolled", playResourceId: "playResourceId", sideNavBarOpened: "sideNavBarOpened", languageList: "languageList", lockCertificate: "lockCertificate" }, outputs: { playResumeForAI: "playResumeForAI", enrollUserToAI: "enrollUserToAI", trigerCompletionSurveyForm: "trigerCompletionSurveyForm", resumeContent: "resumeContent" }, host: { listeners: { "window:scroll": "handleScroll($event)" } }, viewQueries: [{ propertyName: "tabElement", first: true, predicate: ["stickyMenu"], descendants: true }, { propertyName: "tabs", predicate: MatTab, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- && (content?.courseCategory !== courseCategory?.BLENDED_PROGRAM) -->\n<div class=\"ai-tutor-get-started\" *ngIf=\"!viewerPage && enableAITutorFlag && !isMobile\">\n <div class=\"flex flex-row align-items-center\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"64px\" width=\"64px\" />\n </div>\n <div class=\"flex flex-row align-items-center\">\n <div class=\"py-2\" [ngClass]=\"isMobile ? '' : 'w-565'\">\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning tailored just\n for you.</span>\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div>\n </div>\n</div>\n<div class=\"tab-group-container\">\n <mat-tab-group (selectedTabChange)=\"handleTabChange($event)\" #stickyMenu [class.sticky-mat-tabs]=\"sticky\"\n [selectedIndex]=\"selectedTabIndex\" [ngClass]=\"{'content-tabs':!fromViewer,'contentSticky': forPreview}\">\n\n <!-- Transcription Tab -->\n <mat-tab label=\"Transcription\"\n *ngIf=\"viewerPage && enableTranscriptionFlag && vttLangArr?.length && subTitles?.length\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>Transcript</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <div class=\"disclaimer my-2\">\n <p class=\"py-2 px-2\">Disclaimer : These transcripts and subtitles are AI-generated and may contain\n errors.</p>\n </div>\n <div class=\"w-full ml-5 mr-5\" *ngIf=\"isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\" style=\"height: auto; width: 100%;\"\n floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\" *ngFor=\"let lang of vttLangArr\"\n [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"ml-4 flex flex-row justify-end transcript-control\">\n <!-- <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\" (change)=\"renderSelectedLanguageTranscription($event)\">\n <option [value]=\"lang?.language\" *ngFor=\"let lang of vttLangArr\" [selected]=\"lang?.label === transcriptionActiveLanguage\">\n <span *ngIf=\"transcriptionActiveLanguage === lang?.label\"> Transcript Language: </span> {{lang?.language | titlecase}} <span *ngIf=\"transcriptionActiveLanguage === lang?.language\">(Auto)</span>\n </option>\n </select>\n </mat-form-field> -->\n <div class=\"flex flex-row w-full\">\n <div [ngClass]=\"!isMobileForAI ? 'w-subtitle-80':'w-full'\">\n <div [ngClass]=\"!isMobileForAI ? 'ml-5-per' : ''\" *ngIf=\"subTitles && subTitles?.length\">\n <!-- Transcription content -->\n <ng-container *ngFor=\"let subtitle of subTitles\">\n <div class=\"flex flex-col my-2\">\n <div class=\"flex flex-row\">\n <div class=\"subtitle-time\">\n <p class=\"cursor-pointer\" (click)=\"playFromSlot(subtitle)\">\n <span class=\"pr-1 blue-underline\"> {{\n formatMsToVttTime(subtitle?.startTime) }} </span>\n <span class=\"black-text\">-</span>\n <span class=\"pl-1 blue-underline\">{{\n formatMsToVttTime(subtitle?.endTime) }}</span>\n </p>\n </div>\n <div class=\"ml-4 subtitle-text-slot mr-4\">\n <p class=\"black-text\" [innerHtml]=\"subtitle?.text\n | highlight : keywordToHighlight?.text\n : ((subtitle?.startTime / 1000) >= keywordToHighlight?.start\n && (subtitle?.endTime / 1000) <= keywordToHighlight?.end)\">\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"w-subtitle-20\" *ngIf=\"!isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\"\n style=\"height: auto; width: 100%;\" floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\"\n *ngFor=\"let lang of vttLangArr\" [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n </div>\n <!-- <div class=\"flex flex-row align-items-center my-2\">\n <div>\n <p>0.00</p>\n </div>\n <div class=\"ml-4\">\n <p>AI for Digital Transformation: Machine Learning and Deep Learning Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>\n </div>\n <div class=\"ml-4\">\n <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\">\n <option value=\"\">Transcription Language: English (Auto)</option>\n </select>\n </mat-form-field>\n </div>\n </div> -->\n\n </ng-template>\n </mat-tab>\n\n <!-- About Tab -->\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"ai-tutor-get-started-mobile my-2 ml-2\" *ngIf=\"!viewerPage && enableAITutorFlag && isMobile\">\n <div class=\"flex flex-row align-items-center w-98\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"48px\" width=\"48px\" />\n </div>\n <div class=\"flex flex-row align-items-center w-60\">\n <div class=\"py-2\">\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning\n tailored just for you.</span>\n </div>\n\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI\n Tutor</span></a>\n </div>\n\n </div>\n <!-- <div class=\"flex justify-end my-2 mx-2\">\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div> -->\n </div>\n <ws-widget-app-toc-about [fromViewer]=\"fromViewer\" [pathSet]=\"pathSet\" [content]=\"content\"\n [contentReadData]=\"contentReadData\" [baseContentReadData]=\"baseContentReadData\"\n [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"false\" [sticky]=\"sticky\"\n [selectedBatchData]=\"selectedBatchData\" [selectedTabValue]=\"selectedTabIndex\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [condition]=\"condition\" [kparray]=\"kparray\" [showReviews]=\"'true'\" [languageList]=\"languageList\"\n [lockCertificate]=\"lockCertificate\" (trigerCompletionSurveyForm)=\"openSurveyFormPopup($event)\">\n </ws-widget-app-toc-about>\n </ng-template>\n </mat-tab>\n\n <!-- Content Tab -->\n <ng-container *ngIf=\"content?.children?.length\">\n <mat-tab label=\"{{ 'apptocsinglepage.content' | translate }}\" *ngIf=\"contentTabFlag\">\n <ng-template matTabContent>\n <ws-widget-app-toc-content [batchId]=\"batchId\" [componentName]=\"componentName\" [pathSet]=\"pathSet\"\n [content]=\"content\" [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"forPreview\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [hierarchyMapData]=\"hierarchyMapData\" [baseContentReadData]=\"baseContentReadData\">\n </ws-widget-app-toc-content>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"config?.commentsTab && !forPreview\">\n <mat-tab label=\"{{ 'apptocsinglepage.startDiscussion' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\"\n *ngIf=\"discussWidgetData && discussWidgetData?.newCommentSection?.commentTreeData?.entityId\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n <ng-container\n *ngIf=\"config?.samuhikCharchaTab && condition && contentReadData?.eventLinked?.length > 0 && enableSamuhikCharchaTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.samuhikCharcha' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"samuhikCharchaDiv\">\n <ws-widget-samuhik-charcha-content [content]=\"contentReadData\" [conditionData]=\"condition\"\n (resumeContent)=\"resumeContentCall()\">\n </ws-widget-samuhik-charcha-content>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Teachers Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && teacherNotesFlag\">\n <mat-tab label=\"Teachers Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Teachers Resource'\"></ws-widget-app-toc-teachers-notes>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Reference Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && referenceNotesFlag\">\n <mat-tab label=\"Reference Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Reference Resource'\"></ws-widget-app-toc-teachers-notes>\n\n <!-- <ws-widget-app-toc-reference-notes [content]=\"contentReadData\"></ws-widget-app-toc-reference-notes> -->\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"showAssignmentsTab && !forPreview\">\n <mat-tab label=\"{{ 'apptocsinglepage.assignments' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"takeAssessmentDiv\">\n <ws-widget-app-batch-assignments [content]=\"content\"></ws-widget-app-batch-assignments>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Transcription Tab -->\n <mat-tab label=\"AI Tutor\" *ngIf=\"viewerPage && enableAITutorFlag && isMobile\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>AI Tutor</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <ng-container *ngIf=\"showAITutorPopup\">\n <div>\n <viewer-ai-tutor [content]=\"content?.identifier\"\n (closeAIPopup)=\"closeAIPopup($event)\"></viewer-ai-tutor>\n </div>\n </ng-container>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n</div>", styles: ["::ng-deep .content-tabs .mat-tab-body-content{overflow:hidden!important;background-color:#eff3f9}::ng-deep .content-tabs .mat-tab-body.mat-tab-body-active{overflow-y:hidden}:host ::ng-deep .sticky-mat-tabs .mat-tab-header{top:96px;z-index:1000;position:sticky;position:-webkit-sticky;background:#eff3f9}#commentsDiv,#samuhikCharchaDiv{margin:1rem auto;min-height:800px}@media screen and (max-width: 768px){.sticky-mat-tabs .mat-tab-header{top:120px;position:fixed;width:100%}.content-tabs{border-radius:16px 16px 0 0;box-shadow:0 -2px 9px #00000014;background-color:#fff}}::ng-deep .contentSticky .mat-tab-header{top:0!important}.ai-tutor-btn{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:114px}.ai-tutor-get-started{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:100%;min-height:80px}.ai-tutor-get-started-mobile{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:96%;min-height:80px}.align-items-center{align-items:center}.w-565{width:565px}.w-98{width:98%}.font-weight-600{font-weight:600;line-height:1}.ai-tutor-label{color:#1b4ca1;font-weight:700}.section-dd{border-radius:32px;border:1px solid #1b4ca1;padding:12px 16px;color:#1b4ca1;width:auto;height:45px;font-size:14px;font-weight:700}::ng-deep .section-dd-container .mat-form-field-wrapper{padding-bottom:.5em!important}::ng-deep .section-dd-container .mat-form-field-infix{width:auto!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{color:#1b4ca1!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{top:35%!important;right:15%!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-input-element{padding-right:65px}::ng-deep .section-dd .mat-form-field-underline{display:none!important}.w-20{width:20%}::ng-deep .highlight{background-color:#ff0!important;font-weight:700!important}.red-circle{background:red;opacity:1;color:#fff;padding:2px 10px;height:14px;width:20px;border-radius:2px;vertical-align:middle;display:flex;justify-content:center;align-items:center;margin-left:8px;margin-top:-10px}.w-60{width:60%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px}.blue-underline{color:#1b4ca1;text-decoration:underline;font-weight:700}.transcript-control{color:#fff;display:flex;align-items:flex-start;justify-content:flex-start}:host ::ng-deep .multiline-select .mat-mdc-select-value-text{white-space:pre-wrap!important}:host ::ng-deep .mat-pseudo-checkbox{display:none!important}:host ::ng-deep .mat-pseudo-checkbox-checked{display:none!important}::ng-deep .multiline-select.mat-form-field{border-bottom:1px solid #1b4ca1!important}::ng-deep .multiline-select-option .mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:#e3eeff!important;color:#1b4ca1!important;font-weight:700!important}.transcript-flex-container{display:flex;justify-content:flex-end;width:100%}.selected-option-content{color:#1b4ca1}.ml-5-per{margin-left:5%}.black-text{color:#000;word-wrap:break-word}.subtitle-time{width:20%;word-wrap:break-word}.subtitle-text-slot{width:74%}.w-subtitle-80{width:70%}.w-subtitle-20{width:30%}::ng-deep .mat-mdc-select-panel{background:#fff!important}@media (min-width: 1280px) and (max-width: 1280px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1056px) and (max-width: 1232px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1024px) and (max-width: 1024px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 768px) and (max-width: 1023px){.subtitle-time{width:25%}.subtitle-text-slot{width:75%}}@media (min-width: 360px) and (max-width: 360px){.subtitle-time,.subtitle-text-slot{width:50%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 361px) and (max-width: 540px){.subtitle-time,.subtitle-text-slot{width:50%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 541px) and (max-width: 767px){.subtitle-time{width:40%}.subtitle-text-slot{width:60%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 768px){::ng-deep .tab-group-container .mdc-tab{min-width:auto;max-width:max-content;text-align:left;justify-content:start;padding-left:24px;padding-right:24px}.w-60{width:60%}}:host ::ng-deep .tab-group-container ::ng-deep .mat-mdc-tab-header-pagination{z-index:1!important}:host ::ng-deep .transcript-flex-container .mat-mdc-text-field-wrapper{width:100%;padding:10px}:host ::ng-deep .multiline-select.mat-mdc-form-field .mdc-line-ripple{display:none!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mdc-line-ripple{display:block!important;height:4px!important;color:#1b4ca1!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mat-mdc-form-field-flex{background-color:#e3eeff!important}:host ::ng-deep .multiline-select .mat-mdc-select-arrow-wrapper{margin-right:10px}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.MatTabContent, selector: "[matTabContent]" }, { kind: "directive", type: i11.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i11.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i11.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "component", type: i12.WidgetCommentComponent, selector: "d-v2-widget-comment", inputs: ["widgetData", "commentId"], outputs: ["commentDataChange"] }, { kind: "component", type: i13.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i14.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i14.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i15.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i16.AppTocAboutComponent, selector: "ws-widget-app-toc-about", inputs: ["condition", "kparray", "content", "contentReadData", "baseContentReadData", "skeletonLoader", "sticky", "tocStructure", "pathSet", "config", "resumeData", "forPreview", "showReviews", "batchData", "fromViewer", "selectedBatchData", "selectedTabValue", "fromMarketPlace", "showMarketPlaceCertificate", "languageList", "lockCertificate"], outputs: ["trigerCompletionSurveyForm"] }, { kind: "component", type: i17.AppTocContentComponent, selector: "ws-widget-app-toc-content", inputs: ["batchId", "content", "forPreview", "resumeData", "batchData", "skeletonLoader", "tocStructure", "config", "hierarchyMapData", "pathSet", "componentName", "isPreAssessment", "baseContentReadData", "contentReadData"] }, { kind: "component", type: i18.AppTocTeachersNotesComponent, selector: "ws-widget-app-toc-teachers-notes", inputs: ["content", "notesDisplayType"] }, { kind: "component", type: i19.AppTocBatchAssignmentsComponent, selector: "ws-widget-app-batch-assignments", inputs: ["content"] }, { kind: "component", type: i20.SamuhikCharchaContentComponent, selector: "ws-widget-samuhik-charcha-content", inputs: ["content", "conditionData", "locked"], outputs: ["resumeContent"] }, { kind: "pipe", type: i9.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i21.TranslatePipe, name: "translate" }, { kind: "pipe", type: i22.HighlightPipe, name: "highlight" }] }); }
755
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContentTocComponent, selector: "ws-widget-content-toc", inputs: { content: "content", contentReadData: "contentReadData", initialRouteData: "initialRouteData", changeTab: "changeTab", baseContentReadData: "baseContentReadData", forPreview: "forPreview", contentTabFlag: "contentTabFlag", resumeData: "resumeData", batchData: "batchData", skeletonLoader: "skeletonLoader", tocStructure: "tocStructure", pathSet: "pathSet", fromViewer: "fromViewer", hierarchyMapData: "hierarchyMapData", condition: "condition", kparray: "kparray", selectedBatchData: "selectedBatchData", config: "config", componentName: "componentName", isEnrolled: "isEnrolled", playResourceId: "playResourceId", sideNavBarOpened: "sideNavBarOpened", languageList: "languageList", lockCertificate: "lockCertificate" }, outputs: { playResumeForAI: "playResumeForAI", enrollUserToAI: "enrollUserToAI", trigerCompletionSurveyForm: "trigerCompletionSurveyForm", resumeContent: "resumeContent" }, host: { listeners: { "window:scroll": "handleScroll($event)" } }, viewQueries: [{ propertyName: "tabElement", first: true, predicate: ["stickyMenu"], descendants: true }, { propertyName: "tabs", predicate: MatTab, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- && (content?.courseCategory !== courseCategory?.BLENDED_PROGRAM) -->\n<div class=\"ai-tutor-get-started\" *ngIf=\"!viewerPage && enableAITutorFlag && !isMobile\">\n <div class=\"flex flex-row align-items-center\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"64px\" width=\"64px\" />\n </div>\n <div class=\"flex flex-row align-items-center\">\n <div class=\"py-2\" >\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning tailored just\n for you.</span>\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\" [ngClass]=\"isMobile ? 'w-160' : ''\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div>\n </div>\n</div>\n<div class=\"tab-group-container\">\n <mat-tab-group (selectedTabChange)=\"handleTabChange($event)\" #stickyMenu [class.sticky-mat-tabs]=\"sticky\"\n [selectedIndex]=\"selectedTabIndex\" [ngClass]=\"{'content-tabs':!fromViewer,'contentSticky': forPreview}\">\n\n <!-- Transcription Tab -->\n <mat-tab label=\"Transcription\"\n *ngIf=\"viewerPage && enableTranscriptionFlag && vttLangArr?.length && subTitles?.length\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>Transcript</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <div class=\"disclaimer my-2\">\n <p class=\"py-2 px-2\">Disclaimer : These transcripts and subtitles are AI-generated and may contain\n errors.</p>\n </div>\n <div class=\"w-full ml-5 mr-5\" *ngIf=\"isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\" style=\"height: auto; width: 100%;\"\n floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\" *ngFor=\"let lang of vttLangArr\"\n [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"ml-4 flex flex-row justify-end transcript-control\">\n <!-- <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\" (change)=\"renderSelectedLanguageTranscription($event)\">\n <option [value]=\"lang?.language\" *ngFor=\"let lang of vttLangArr\" [selected]=\"lang?.label === transcriptionActiveLanguage\">\n <span *ngIf=\"transcriptionActiveLanguage === lang?.label\"> Transcript Language: </span> {{lang?.language | titlecase}} <span *ngIf=\"transcriptionActiveLanguage === lang?.language\">(Auto)</span>\n </option>\n </select>\n </mat-form-field> -->\n <div class=\"flex flex-row w-full\">\n <div [ngClass]=\"!isMobileForAI ? 'w-subtitle-80':'w-full'\">\n <div [ngClass]=\"!isMobileForAI ? 'ml-5-per' : ''\" *ngIf=\"subTitles && subTitles?.length\">\n <!-- Transcription content -->\n <ng-container *ngFor=\"let subtitle of subTitles\">\n <div class=\"flex flex-col my-2\">\n <div class=\"flex flex-row\">\n <div class=\"subtitle-time\">\n <p class=\"cursor-pointer\" (click)=\"playFromSlot(subtitle)\">\n <span class=\"pr-1 blue-underline\"> {{\n formatMsToVttTime(subtitle?.startTime) }} </span>\n <span class=\"black-text\">-</span>\n <span class=\"pl-1 blue-underline\">{{\n formatMsToVttTime(subtitle?.endTime) }}</span>\n </p>\n </div>\n <div class=\"ml-4 subtitle-text-slot mr-4\">\n <p class=\"black-text\" [innerHtml]=\"subtitle?.text\n | highlight : keywordToHighlight?.text\n : ((subtitle?.startTime / 1000) >= keywordToHighlight?.start\n && (subtitle?.endTime / 1000) <= keywordToHighlight?.end)\">\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"w-subtitle-20\" *ngIf=\"!isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\"\n style=\"height: auto; width: 100%;\" floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\"\n *ngFor=\"let lang of vttLangArr\" [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n </div>\n <!-- <div class=\"flex flex-row align-items-center my-2\">\n <div>\n <p>0.00</p>\n </div>\n <div class=\"ml-4\">\n <p>AI for Digital Transformation: Machine Learning and Deep Learning Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>\n </div>\n <div class=\"ml-4\">\n <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\">\n <option value=\"\">Transcription Language: English (Auto)</option>\n </select>\n </mat-form-field>\n </div>\n </div> -->\n\n </ng-template>\n </mat-tab>\n\n <!-- About Tab -->\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"ai-tutor-get-started-mobile my-2 ml-2\" *ngIf=\"!viewerPage && enableAITutorFlag && isMobile\">\n <div class=\"flex flex-row align-items-center w-98\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"48px\" width=\"48px\" />\n </div>\n <div class=\"flex flex-row align-items-center w-60\">\n <div class=\"py-2\">\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning\n tailored just for you.</span>\n </div>\n\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI\n Tutor</span></a>\n </div>\n\n </div>\n <!-- <div class=\"flex justify-end my-2 mx-2\">\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div> -->\n </div>\n <ws-widget-app-toc-about [fromViewer]=\"fromViewer\" [pathSet]=\"pathSet\" [content]=\"content\"\n [contentReadData]=\"contentReadData\" [baseContentReadData]=\"baseContentReadData\"\n [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"false\" [sticky]=\"sticky\"\n [selectedBatchData]=\"selectedBatchData\" [selectedTabValue]=\"selectedTabIndex\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [condition]=\"condition\" [kparray]=\"kparray\" [showReviews]=\"'true'\" [languageList]=\"languageList\"\n [lockCertificate]=\"lockCertificate\" (trigerCompletionSurveyForm)=\"openSurveyFormPopup($event)\">\n </ws-widget-app-toc-about>\n </ng-template>\n </mat-tab>\n\n <!-- Content Tab -->\n <ng-container *ngIf=\"content?.children?.length\">\n <mat-tab label=\"{{ 'apptocsinglepage.content' | translate }}\" *ngIf=\"contentTabFlag\">\n <ng-template matTabContent>\n <ws-widget-app-toc-content [batchId]=\"batchId\" [componentName]=\"componentName\" [pathSet]=\"pathSet\"\n [content]=\"content\" [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"forPreview\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [hierarchyMapData]=\"hierarchyMapData\" [baseContentReadData]=\"baseContentReadData\">\n </ws-widget-app-toc-content>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"config?.commentsTab && !forPreview\">\n <mat-tab label=\"{{ 'apptocsinglepage.startDiscussion' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\"\n *ngIf=\"discussWidgetData && discussWidgetData?.newCommentSection?.commentTreeData?.entityId\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n <ng-container\n *ngIf=\"config?.samuhikCharchaTab && condition && contentReadData?.eventLinked?.length > 0 && enableSamuhikCharchaTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.samuhikCharcha' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"samuhikCharchaDiv\">\n <ws-widget-samuhik-charcha-content [content]=\"contentReadData\" [conditionData]=\"condition\"\n (resumeContent)=\"resumeContentCall()\">\n </ws-widget-samuhik-charcha-content>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Teachers Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && teacherNotesFlag\">\n <mat-tab label=\"Teachers Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Teachers Resource'\"></ws-widget-app-toc-teachers-notes>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Reference Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && referenceNotesFlag\">\n <mat-tab label=\"Reference Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Reference Resource'\"></ws-widget-app-toc-teachers-notes>\n\n <!-- <ws-widget-app-toc-reference-notes [content]=\"contentReadData\"></ws-widget-app-toc-reference-notes> -->\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"showAssignmentsTab && !forPreview\">\n <mat-tab label=\"{{ 'apptocsinglepage.assignments' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"takeAssessmentDiv\">\n <ws-widget-app-batch-assignments [content]=\"content\"></ws-widget-app-batch-assignments>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Transcription Tab -->\n <mat-tab label=\"AI Tutor\" *ngIf=\"viewerPage && enableAITutorFlag && isMobile\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>AI Tutor</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <ng-container *ngIf=\"showAITutorPopup\">\n <div>\n <ws-widget-ai-tutor [content]=\"content?.identifier\"\n (closeAIPopup)=\"closeAIPopup($event)\"></ws-widget-ai-tutor>\n </div>\n </ng-container>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n</div>", styles: ["::ng-deep .content-tabs .mat-tab-body-content{overflow:hidden!important;background-color:#eff3f9}::ng-deep .content-tabs .mat-tab-body.mat-tab-body-active{overflow-y:hidden}:host ::ng-deep .sticky-mat-tabs .mat-tab-header{top:96px;z-index:1000;position:sticky;position:-webkit-sticky;background:#eff3f9}#commentsDiv,#samuhikCharchaDiv{margin:1rem auto;min-height:800px}@media screen and (max-width: 768px){.sticky-mat-tabs .mat-tab-header{top:120px;position:fixed;width:100%}.content-tabs{border-radius:16px 16px 0 0;box-shadow:0 -2px 9px #00000014;background-color:#fff}}::ng-deep .contentSticky .mat-tab-header{top:0!important}.ai-tutor-btn{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:115px}.ai-tutor-get-started{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:100%;min-height:80px}.ai-tutor-get-started-mobile{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:96%;min-height:80px}.align-items-center{align-items:center}.w-160{width:160px}.w-98{width:98%}.font-weight-600{font-weight:600;line-height:1}.ai-tutor-label{color:#1b4ca1;font-weight:700}.section-dd{border-radius:32px;border:1px solid #1b4ca1;padding:12px 16px;color:#1b4ca1;width:auto;height:45px;font-size:14px;font-weight:700}::ng-deep .section-dd-container .mat-form-field-wrapper{padding-bottom:.5em!important}::ng-deep .section-dd-container .mat-form-field-infix{width:auto!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{color:#1b4ca1!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{top:35%!important;right:15%!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-input-element{padding-right:65px}::ng-deep .section-dd .mat-form-field-underline{display:none!important}.w-20{width:20%}::ng-deep .highlight{background-color:#ff0!important;font-weight:700!important}.red-circle{background:red;opacity:1;color:#fff;padding:2px 10px;height:14px;width:20px;border-radius:2px;vertical-align:middle;display:flex;justify-content:center;align-items:center;margin-left:8px;margin-top:-10px}.w-60{width:60%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px}.blue-underline{color:#1b4ca1;text-decoration:underline;font-weight:700}.transcript-control{color:#fff;display:flex;align-items:flex-start;justify-content:flex-start}:host ::ng-deep .multiline-select .mat-mdc-select-value-text{white-space:pre-wrap!important}:host ::ng-deep .mat-pseudo-checkbox{display:none!important}:host ::ng-deep .mat-pseudo-checkbox-checked{display:none!important}::ng-deep .multiline-select.mat-form-field{border-bottom:1px solid #1b4ca1!important}::ng-deep .multiline-select-option .mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:#e3eeff!important;color:#1b4ca1!important;font-weight:700!important}.transcript-flex-container{display:flex;justify-content:flex-end;width:100%}.selected-option-content{color:#1b4ca1}.ml-5-per{margin-left:5%}.black-text{color:#000;word-wrap:break-word}.subtitle-time{width:20%;word-wrap:break-word}.subtitle-text-slot{width:74%}.w-subtitle-80{width:70%}.w-subtitle-20{width:30%}::ng-deep .mat-mdc-select-panel{background:#fff!important}@media (min-width: 1280px) and (max-width: 1280px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1056px) and (max-width: 1232px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1024px) and (max-width: 1024px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 768px) and (max-width: 1023px){.subtitle-time{width:25%}.subtitle-text-slot{width:75%}}@media (min-width: 360px) and (max-width: 360px){.subtitle-time,.subtitle-text-slot{width:50%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 361px) and (max-width: 540px){.subtitle-time,.subtitle-text-slot{width:50%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 541px) and (max-width: 767px){.subtitle-time{width:40%}.subtitle-text-slot{width:60%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 768px){::ng-deep .tab-group-container .mdc-tab{min-width:auto;max-width:max-content;text-align:left;justify-content:start;padding-left:24px;padding-right:24px}.w-60{width:60%}}:host ::ng-deep .tab-group-container ::ng-deep .mat-mdc-tab-header-pagination{z-index:1!important}:host ::ng-deep .transcript-flex-container .mat-mdc-text-field-wrapper{width:100%;padding:10px}:host ::ng-deep .multiline-select.mat-mdc-form-field .mdc-line-ripple{display:none!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mdc-line-ripple{display:block!important;height:4px!important;color:#1b4ca1!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mat-mdc-form-field-flex{background-color:#e3eeff!important}:host ::ng-deep .multiline-select .mat-mdc-select-arrow-wrapper{margin-right:10px}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.MatTabContent, selector: "[matTabContent]" }, { kind: "directive", type: i11.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i11.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i11.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "component", type: i12.WidgetCommentComponent, selector: "d-v2-widget-comment", inputs: ["widgetData", "commentId"], outputs: ["commentDataChange"] }, { kind: "component", type: i13.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i14.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i14.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i15.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i16.AppTocAboutComponent, selector: "ws-widget-app-toc-about", inputs: ["condition", "kparray", "content", "contentReadData", "baseContentReadData", "skeletonLoader", "sticky", "tocStructure", "pathSet", "config", "resumeData", "forPreview", "showReviews", "batchData", "fromViewer", "selectedBatchData", "selectedTabValue", "fromMarketPlace", "showMarketPlaceCertificate", "languageList", "lockCertificate"], outputs: ["trigerCompletionSurveyForm"] }, { kind: "component", type: i17.AppTocContentComponent, selector: "ws-widget-app-toc-content", inputs: ["batchId", "content", "forPreview", "resumeData", "batchData", "skeletonLoader", "tocStructure", "config", "hierarchyMapData", "pathSet", "componentName", "isPreAssessment", "baseContentReadData", "contentReadData"] }, { kind: "component", type: i18.AppTocTeachersNotesComponent, selector: "ws-widget-app-toc-teachers-notes", inputs: ["content", "notesDisplayType"] }, { kind: "component", type: i19.AppTocBatchAssignmentsComponent, selector: "ws-widget-app-batch-assignments", inputs: ["content"] }, { kind: "component", type: i20.SamuhikCharchaContentComponent, selector: "ws-widget-samuhik-charcha-content", inputs: ["content", "conditionData", "locked"], outputs: ["resumeContent"] }, { kind: "component", type: i21.AiTutorComponent, selector: "ws-widget-ai-tutor", inputs: ["from", "content", "userJourney"], outputs: ["closeAIPopup"] }, { kind: "pipe", type: i9.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i22.TranslatePipe, name: "translate" }, { kind: "pipe", type: i23.HighlightPipe, name: "highlight" }] }); }
747
756
  }
748
757
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentTocComponent, decorators: [{
749
758
  type: Component,
750
- args: [{ selector: 'ws-widget-content-toc', template: "<!-- && (content?.courseCategory !== courseCategory?.BLENDED_PROGRAM) -->\n<div class=\"ai-tutor-get-started\" *ngIf=\"!viewerPage && enableAITutorFlag && !isMobile\">\n <div class=\"flex flex-row align-items-center\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"64px\" width=\"64px\" />\n </div>\n <div class=\"flex flex-row align-items-center\">\n <div class=\"py-2\" [ngClass]=\"isMobile ? '' : 'w-565'\">\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning tailored just\n for you.</span>\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div>\n </div>\n</div>\n<div class=\"tab-group-container\">\n <mat-tab-group (selectedTabChange)=\"handleTabChange($event)\" #stickyMenu [class.sticky-mat-tabs]=\"sticky\"\n [selectedIndex]=\"selectedTabIndex\" [ngClass]=\"{'content-tabs':!fromViewer,'contentSticky': forPreview}\">\n\n <!-- Transcription Tab -->\n <mat-tab label=\"Transcription\"\n *ngIf=\"viewerPage && enableTranscriptionFlag && vttLangArr?.length && subTitles?.length\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>Transcript</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <div class=\"disclaimer my-2\">\n <p class=\"py-2 px-2\">Disclaimer : These transcripts and subtitles are AI-generated and may contain\n errors.</p>\n </div>\n <div class=\"w-full ml-5 mr-5\" *ngIf=\"isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\" style=\"height: auto; width: 100%;\"\n floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\" *ngFor=\"let lang of vttLangArr\"\n [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"ml-4 flex flex-row justify-end transcript-control\">\n <!-- <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\" (change)=\"renderSelectedLanguageTranscription($event)\">\n <option [value]=\"lang?.language\" *ngFor=\"let lang of vttLangArr\" [selected]=\"lang?.label === transcriptionActiveLanguage\">\n <span *ngIf=\"transcriptionActiveLanguage === lang?.label\"> Transcript Language: </span> {{lang?.language | titlecase}} <span *ngIf=\"transcriptionActiveLanguage === lang?.language\">(Auto)</span>\n </option>\n </select>\n </mat-form-field> -->\n <div class=\"flex flex-row w-full\">\n <div [ngClass]=\"!isMobileForAI ? 'w-subtitle-80':'w-full'\">\n <div [ngClass]=\"!isMobileForAI ? 'ml-5-per' : ''\" *ngIf=\"subTitles && subTitles?.length\">\n <!-- Transcription content -->\n <ng-container *ngFor=\"let subtitle of subTitles\">\n <div class=\"flex flex-col my-2\">\n <div class=\"flex flex-row\">\n <div class=\"subtitle-time\">\n <p class=\"cursor-pointer\" (click)=\"playFromSlot(subtitle)\">\n <span class=\"pr-1 blue-underline\"> {{\n formatMsToVttTime(subtitle?.startTime) }} </span>\n <span class=\"black-text\">-</span>\n <span class=\"pl-1 blue-underline\">{{\n formatMsToVttTime(subtitle?.endTime) }}</span>\n </p>\n </div>\n <div class=\"ml-4 subtitle-text-slot mr-4\">\n <p class=\"black-text\" [innerHtml]=\"subtitle?.text\n | highlight : keywordToHighlight?.text\n : ((subtitle?.startTime / 1000) >= keywordToHighlight?.start\n && (subtitle?.endTime / 1000) <= keywordToHighlight?.end)\">\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"w-subtitle-20\" *ngIf=\"!isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\"\n style=\"height: auto; width: 100%;\" floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\"\n *ngFor=\"let lang of vttLangArr\" [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n </div>\n <!-- <div class=\"flex flex-row align-items-center my-2\">\n <div>\n <p>0.00</p>\n </div>\n <div class=\"ml-4\">\n <p>AI for Digital Transformation: Machine Learning and Deep Learning Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>\n </div>\n <div class=\"ml-4\">\n <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\">\n <option value=\"\">Transcription Language: English (Auto)</option>\n </select>\n </mat-form-field>\n </div>\n </div> -->\n\n </ng-template>\n </mat-tab>\n\n <!-- About Tab -->\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"ai-tutor-get-started-mobile my-2 ml-2\" *ngIf=\"!viewerPage && enableAITutorFlag && isMobile\">\n <div class=\"flex flex-row align-items-center w-98\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"48px\" width=\"48px\" />\n </div>\n <div class=\"flex flex-row align-items-center w-60\">\n <div class=\"py-2\">\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning\n tailored just for you.</span>\n </div>\n\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI\n Tutor</span></a>\n </div>\n\n </div>\n <!-- <div class=\"flex justify-end my-2 mx-2\">\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div> -->\n </div>\n <ws-widget-app-toc-about [fromViewer]=\"fromViewer\" [pathSet]=\"pathSet\" [content]=\"content\"\n [contentReadData]=\"contentReadData\" [baseContentReadData]=\"baseContentReadData\"\n [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"false\" [sticky]=\"sticky\"\n [selectedBatchData]=\"selectedBatchData\" [selectedTabValue]=\"selectedTabIndex\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [condition]=\"condition\" [kparray]=\"kparray\" [showReviews]=\"'true'\" [languageList]=\"languageList\"\n [lockCertificate]=\"lockCertificate\" (trigerCompletionSurveyForm)=\"openSurveyFormPopup($event)\">\n </ws-widget-app-toc-about>\n </ng-template>\n </mat-tab>\n\n <!-- Content Tab -->\n <ng-container *ngIf=\"content?.children?.length\">\n <mat-tab label=\"{{ 'apptocsinglepage.content' | translate }}\" *ngIf=\"contentTabFlag\">\n <ng-template matTabContent>\n <ws-widget-app-toc-content [batchId]=\"batchId\" [componentName]=\"componentName\" [pathSet]=\"pathSet\"\n [content]=\"content\" [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"forPreview\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [hierarchyMapData]=\"hierarchyMapData\" [baseContentReadData]=\"baseContentReadData\">\n </ws-widget-app-toc-content>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"config?.commentsTab && !forPreview\">\n <mat-tab label=\"{{ 'apptocsinglepage.startDiscussion' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\"\n *ngIf=\"discussWidgetData && discussWidgetData?.newCommentSection?.commentTreeData?.entityId\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n <ng-container\n *ngIf=\"config?.samuhikCharchaTab && condition && contentReadData?.eventLinked?.length > 0 && enableSamuhikCharchaTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.samuhikCharcha' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"samuhikCharchaDiv\">\n <ws-widget-samuhik-charcha-content [content]=\"contentReadData\" [conditionData]=\"condition\"\n (resumeContent)=\"resumeContentCall()\">\n </ws-widget-samuhik-charcha-content>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Teachers Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && teacherNotesFlag\">\n <mat-tab label=\"Teachers Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Teachers Resource'\"></ws-widget-app-toc-teachers-notes>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Reference Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && referenceNotesFlag\">\n <mat-tab label=\"Reference Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Reference Resource'\"></ws-widget-app-toc-teachers-notes>\n\n <!-- <ws-widget-app-toc-reference-notes [content]=\"contentReadData\"></ws-widget-app-toc-reference-notes> -->\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"showAssignmentsTab && !forPreview\">\n <mat-tab label=\"{{ 'apptocsinglepage.assignments' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"takeAssessmentDiv\">\n <ws-widget-app-batch-assignments [content]=\"content\"></ws-widget-app-batch-assignments>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Transcription Tab -->\n <mat-tab label=\"AI Tutor\" *ngIf=\"viewerPage && enableAITutorFlag && isMobile\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>AI Tutor</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <ng-container *ngIf=\"showAITutorPopup\">\n <div>\n <viewer-ai-tutor [content]=\"content?.identifier\"\n (closeAIPopup)=\"closeAIPopup($event)\"></viewer-ai-tutor>\n </div>\n </ng-container>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n</div>", styles: ["::ng-deep .content-tabs .mat-tab-body-content{overflow:hidden!important;background-color:#eff3f9}::ng-deep .content-tabs .mat-tab-body.mat-tab-body-active{overflow-y:hidden}:host ::ng-deep .sticky-mat-tabs .mat-tab-header{top:96px;z-index:1000;position:sticky;position:-webkit-sticky;background:#eff3f9}#commentsDiv,#samuhikCharchaDiv{margin:1rem auto;min-height:800px}@media screen and (max-width: 768px){.sticky-mat-tabs .mat-tab-header{top:120px;position:fixed;width:100%}.content-tabs{border-radius:16px 16px 0 0;box-shadow:0 -2px 9px #00000014;background-color:#fff}}::ng-deep .contentSticky .mat-tab-header{top:0!important}.ai-tutor-btn{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:114px}.ai-tutor-get-started{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:100%;min-height:80px}.ai-tutor-get-started-mobile{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:96%;min-height:80px}.align-items-center{align-items:center}.w-565{width:565px}.w-98{width:98%}.font-weight-600{font-weight:600;line-height:1}.ai-tutor-label{color:#1b4ca1;font-weight:700}.section-dd{border-radius:32px;border:1px solid #1b4ca1;padding:12px 16px;color:#1b4ca1;width:auto;height:45px;font-size:14px;font-weight:700}::ng-deep .section-dd-container .mat-form-field-wrapper{padding-bottom:.5em!important}::ng-deep .section-dd-container .mat-form-field-infix{width:auto!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{color:#1b4ca1!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{top:35%!important;right:15%!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-input-element{padding-right:65px}::ng-deep .section-dd .mat-form-field-underline{display:none!important}.w-20{width:20%}::ng-deep .highlight{background-color:#ff0!important;font-weight:700!important}.red-circle{background:red;opacity:1;color:#fff;padding:2px 10px;height:14px;width:20px;border-radius:2px;vertical-align:middle;display:flex;justify-content:center;align-items:center;margin-left:8px;margin-top:-10px}.w-60{width:60%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px}.blue-underline{color:#1b4ca1;text-decoration:underline;font-weight:700}.transcript-control{color:#fff;display:flex;align-items:flex-start;justify-content:flex-start}:host ::ng-deep .multiline-select .mat-mdc-select-value-text{white-space:pre-wrap!important}:host ::ng-deep .mat-pseudo-checkbox{display:none!important}:host ::ng-deep .mat-pseudo-checkbox-checked{display:none!important}::ng-deep .multiline-select.mat-form-field{border-bottom:1px solid #1b4ca1!important}::ng-deep .multiline-select-option .mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:#e3eeff!important;color:#1b4ca1!important;font-weight:700!important}.transcript-flex-container{display:flex;justify-content:flex-end;width:100%}.selected-option-content{color:#1b4ca1}.ml-5-per{margin-left:5%}.black-text{color:#000;word-wrap:break-word}.subtitle-time{width:20%;word-wrap:break-word}.subtitle-text-slot{width:74%}.w-subtitle-80{width:70%}.w-subtitle-20{width:30%}::ng-deep .mat-mdc-select-panel{background:#fff!important}@media (min-width: 1280px) and (max-width: 1280px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1056px) and (max-width: 1232px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1024px) and (max-width: 1024px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 768px) and (max-width: 1023px){.subtitle-time{width:25%}.subtitle-text-slot{width:75%}}@media (min-width: 360px) and (max-width: 360px){.subtitle-time,.subtitle-text-slot{width:50%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 361px) and (max-width: 540px){.subtitle-time,.subtitle-text-slot{width:50%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 541px) and (max-width: 767px){.subtitle-time{width:40%}.subtitle-text-slot{width:60%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 768px){::ng-deep .tab-group-container .mdc-tab{min-width:auto;max-width:max-content;text-align:left;justify-content:start;padding-left:24px;padding-right:24px}.w-60{width:60%}}:host ::ng-deep .tab-group-container ::ng-deep .mat-mdc-tab-header-pagination{z-index:1!important}:host ::ng-deep .transcript-flex-container .mat-mdc-text-field-wrapper{width:100%;padding:10px}:host ::ng-deep .multiline-select.mat-mdc-form-field .mdc-line-ripple{display:none!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mdc-line-ripple{display:block!important;height:4px!important;color:#1b4ca1!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mat-mdc-form-field-flex{background-color:#e3eeff!important}:host ::ng-deep .multiline-select .mat-mdc-select-arrow-wrapper{margin-right:10px}\n"] }]
759
+ args: [{ selector: 'ws-widget-content-toc', template: "<!-- && (content?.courseCategory !== courseCategory?.BLENDED_PROGRAM) -->\n<div class=\"ai-tutor-get-started\" *ngIf=\"!viewerPage && enableAITutorFlag && !isMobile\">\n <div class=\"flex flex-row align-items-center\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"64px\" width=\"64px\" />\n </div>\n <div class=\"flex flex-row align-items-center\">\n <div class=\"py-2\" >\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning tailored just\n for you.</span>\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\" [ngClass]=\"isMobile ? 'w-160' : ''\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div>\n </div>\n</div>\n<div class=\"tab-group-container\">\n <mat-tab-group (selectedTabChange)=\"handleTabChange($event)\" #stickyMenu [class.sticky-mat-tabs]=\"sticky\"\n [selectedIndex]=\"selectedTabIndex\" [ngClass]=\"{'content-tabs':!fromViewer,'contentSticky': forPreview}\">\n\n <!-- Transcription Tab -->\n <mat-tab label=\"Transcription\"\n *ngIf=\"viewerPage && enableTranscriptionFlag && vttLangArr?.length && subTitles?.length\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>Transcript</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <div class=\"disclaimer my-2\">\n <p class=\"py-2 px-2\">Disclaimer : These transcripts and subtitles are AI-generated and may contain\n errors.</p>\n </div>\n <div class=\"w-full ml-5 mr-5\" *ngIf=\"isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\" style=\"height: auto; width: 100%;\"\n floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\" *ngFor=\"let lang of vttLangArr\"\n [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"ml-4 flex flex-row justify-end transcript-control\">\n <!-- <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\" (change)=\"renderSelectedLanguageTranscription($event)\">\n <option [value]=\"lang?.language\" *ngFor=\"let lang of vttLangArr\" [selected]=\"lang?.label === transcriptionActiveLanguage\">\n <span *ngIf=\"transcriptionActiveLanguage === lang?.label\"> Transcript Language: </span> {{lang?.language | titlecase}} <span *ngIf=\"transcriptionActiveLanguage === lang?.language\">(Auto)</span>\n </option>\n </select>\n </mat-form-field> -->\n <div class=\"flex flex-row w-full\">\n <div [ngClass]=\"!isMobileForAI ? 'w-subtitle-80':'w-full'\">\n <div [ngClass]=\"!isMobileForAI ? 'ml-5-per' : ''\" *ngIf=\"subTitles && subTitles?.length\">\n <!-- Transcription content -->\n <ng-container *ngFor=\"let subtitle of subTitles\">\n <div class=\"flex flex-col my-2\">\n <div class=\"flex flex-row\">\n <div class=\"subtitle-time\">\n <p class=\"cursor-pointer\" (click)=\"playFromSlot(subtitle)\">\n <span class=\"pr-1 blue-underline\"> {{\n formatMsToVttTime(subtitle?.startTime) }} </span>\n <span class=\"black-text\">-</span>\n <span class=\"pl-1 blue-underline\">{{\n formatMsToVttTime(subtitle?.endTime) }}</span>\n </p>\n </div>\n <div class=\"ml-4 subtitle-text-slot mr-4\">\n <p class=\"black-text\" [innerHtml]=\"subtitle?.text\n | highlight : keywordToHighlight?.text\n : ((subtitle?.startTime / 1000) >= keywordToHighlight?.start\n && (subtitle?.endTime / 1000) <= keywordToHighlight?.end)\">\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"w-subtitle-20\" *ngIf=\"!isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\"\n style=\"height: auto; width: 100%;\" floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\"\n *ngFor=\"let lang of vttLangArr\" [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n </div>\n <!-- <div class=\"flex flex-row align-items-center my-2\">\n <div>\n <p>0.00</p>\n </div>\n <div class=\"ml-4\">\n <p>AI for Digital Transformation: Machine Learning and Deep Learning Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>\n </div>\n <div class=\"ml-4\">\n <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\">\n <option value=\"\">Transcription Language: English (Auto)</option>\n </select>\n </mat-form-field>\n </div>\n </div> -->\n\n </ng-template>\n </mat-tab>\n\n <!-- About Tab -->\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"ai-tutor-get-started-mobile my-2 ml-2\" *ngIf=\"!viewerPage && enableAITutorFlag && isMobile\">\n <div class=\"flex flex-row align-items-center w-98\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"48px\" width=\"48px\" />\n </div>\n <div class=\"flex flex-row align-items-center w-60\">\n <div class=\"py-2\">\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning\n tailored just for you.</span>\n </div>\n\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI\n Tutor</span></a>\n </div>\n\n </div>\n <!-- <div class=\"flex justify-end my-2 mx-2\">\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img src=\"assets/ai-tutor/ai-icon.svg\">&nbsp; &nbsp; <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div> -->\n </div>\n <ws-widget-app-toc-about [fromViewer]=\"fromViewer\" [pathSet]=\"pathSet\" [content]=\"content\"\n [contentReadData]=\"contentReadData\" [baseContentReadData]=\"baseContentReadData\"\n [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"false\" [sticky]=\"sticky\"\n [selectedBatchData]=\"selectedBatchData\" [selectedTabValue]=\"selectedTabIndex\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [condition]=\"condition\" [kparray]=\"kparray\" [showReviews]=\"'true'\" [languageList]=\"languageList\"\n [lockCertificate]=\"lockCertificate\" (trigerCompletionSurveyForm)=\"openSurveyFormPopup($event)\">\n </ws-widget-app-toc-about>\n </ng-template>\n </mat-tab>\n\n <!-- Content Tab -->\n <ng-container *ngIf=\"content?.children?.length\">\n <mat-tab label=\"{{ 'apptocsinglepage.content' | translate }}\" *ngIf=\"contentTabFlag\">\n <ng-template matTabContent>\n <ws-widget-app-toc-content [batchId]=\"batchId\" [componentName]=\"componentName\" [pathSet]=\"pathSet\"\n [content]=\"content\" [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"forPreview\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [hierarchyMapData]=\"hierarchyMapData\" [baseContentReadData]=\"baseContentReadData\">\n </ws-widget-app-toc-content>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"config?.commentsTab && !forPreview\">\n <mat-tab label=\"{{ 'apptocsinglepage.startDiscussion' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\"\n *ngIf=\"discussWidgetData && discussWidgetData?.newCommentSection?.commentTreeData?.entityId\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n <ng-container\n *ngIf=\"config?.samuhikCharchaTab && condition && contentReadData?.eventLinked?.length > 0 && enableSamuhikCharchaTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.samuhikCharcha' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"samuhikCharchaDiv\">\n <ws-widget-samuhik-charcha-content [content]=\"contentReadData\" [conditionData]=\"condition\"\n (resumeContent)=\"resumeContentCall()\">\n </ws-widget-samuhik-charcha-content>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Teachers Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && teacherNotesFlag\">\n <mat-tab label=\"Teachers Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Teachers Resource'\"></ws-widget-app-toc-teachers-notes>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Reference Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && referenceNotesFlag\">\n <mat-tab label=\"Reference Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Reference Resource'\"></ws-widget-app-toc-teachers-notes>\n\n <!-- <ws-widget-app-toc-reference-notes [content]=\"contentReadData\"></ws-widget-app-toc-reference-notes> -->\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"showAssignmentsTab && !forPreview\">\n <mat-tab label=\"{{ 'apptocsinglepage.assignments' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"takeAssessmentDiv\">\n <ws-widget-app-batch-assignments [content]=\"content\"></ws-widget-app-batch-assignments>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Transcription Tab -->\n <mat-tab label=\"AI Tutor\" *ngIf=\"viewerPage && enableAITutorFlag && isMobile\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>AI Tutor</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <ng-container *ngIf=\"showAITutorPopup\">\n <div>\n <ws-widget-ai-tutor [content]=\"content?.identifier\"\n (closeAIPopup)=\"closeAIPopup($event)\"></ws-widget-ai-tutor>\n </div>\n </ng-container>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n</div>", styles: ["::ng-deep .content-tabs .mat-tab-body-content{overflow:hidden!important;background-color:#eff3f9}::ng-deep .content-tabs .mat-tab-body.mat-tab-body-active{overflow-y:hidden}:host ::ng-deep .sticky-mat-tabs .mat-tab-header{top:96px;z-index:1000;position:sticky;position:-webkit-sticky;background:#eff3f9}#commentsDiv,#samuhikCharchaDiv{margin:1rem auto;min-height:800px}@media screen and (max-width: 768px){.sticky-mat-tabs .mat-tab-header{top:120px;position:fixed;width:100%}.content-tabs{border-radius:16px 16px 0 0;box-shadow:0 -2px 9px #00000014;background-color:#fff}}::ng-deep .contentSticky .mat-tab-header{top:0!important}.ai-tutor-btn{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:115px}.ai-tutor-get-started{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:100%;min-height:80px}.ai-tutor-get-started-mobile{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:96%;min-height:80px}.align-items-center{align-items:center}.w-160{width:160px}.w-98{width:98%}.font-weight-600{font-weight:600;line-height:1}.ai-tutor-label{color:#1b4ca1;font-weight:700}.section-dd{border-radius:32px;border:1px solid #1b4ca1;padding:12px 16px;color:#1b4ca1;width:auto;height:45px;font-size:14px;font-weight:700}::ng-deep .section-dd-container .mat-form-field-wrapper{padding-bottom:.5em!important}::ng-deep .section-dd-container .mat-form-field-infix{width:auto!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{color:#1b4ca1!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{top:35%!important;right:15%!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-input-element{padding-right:65px}::ng-deep .section-dd .mat-form-field-underline{display:none!important}.w-20{width:20%}::ng-deep .highlight{background-color:#ff0!important;font-weight:700!important}.red-circle{background:red;opacity:1;color:#fff;padding:2px 10px;height:14px;width:20px;border-radius:2px;vertical-align:middle;display:flex;justify-content:center;align-items:center;margin-left:8px;margin-top:-10px}.w-60{width:60%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px}.blue-underline{color:#1b4ca1;text-decoration:underline;font-weight:700}.transcript-control{color:#fff;display:flex;align-items:flex-start;justify-content:flex-start}:host ::ng-deep .multiline-select .mat-mdc-select-value-text{white-space:pre-wrap!important}:host ::ng-deep .mat-pseudo-checkbox{display:none!important}:host ::ng-deep .mat-pseudo-checkbox-checked{display:none!important}::ng-deep .multiline-select.mat-form-field{border-bottom:1px solid #1b4ca1!important}::ng-deep .multiline-select-option .mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:#e3eeff!important;color:#1b4ca1!important;font-weight:700!important}.transcript-flex-container{display:flex;justify-content:flex-end;width:100%}.selected-option-content{color:#1b4ca1}.ml-5-per{margin-left:5%}.black-text{color:#000;word-wrap:break-word}.subtitle-time{width:20%;word-wrap:break-word}.subtitle-text-slot{width:74%}.w-subtitle-80{width:70%}.w-subtitle-20{width:30%}::ng-deep .mat-mdc-select-panel{background:#fff!important}@media (min-width: 1280px) and (max-width: 1280px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1056px) and (max-width: 1232px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1024px) and (max-width: 1024px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 768px) and (max-width: 1023px){.subtitle-time{width:25%}.subtitle-text-slot{width:75%}}@media (min-width: 360px) and (max-width: 360px){.subtitle-time,.subtitle-text-slot{width:50%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 361px) and (max-width: 540px){.subtitle-time,.subtitle-text-slot{width:50%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 541px) and (max-width: 767px){.subtitle-time{width:40%}.subtitle-text-slot{width:60%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 768px){::ng-deep .tab-group-container .mdc-tab{min-width:auto;max-width:max-content;text-align:left;justify-content:start;padding-left:24px;padding-right:24px}.w-60{width:60%}}:host ::ng-deep .tab-group-container ::ng-deep .mat-mdc-tab-header-pagination{z-index:1!important}:host ::ng-deep .transcript-flex-container .mat-mdc-text-field-wrapper{width:100%;padding:10px}:host ::ng-deep .multiline-select.mat-mdc-form-field .mdc-line-ripple{display:none!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mdc-line-ripple{display:block!important;height:4px!important;color:#1b4ca1!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mat-mdc-form-field-flex{background-color:#e3eeff!important}:host ::ng-deep .multiline-select .mat-mdc-select-arrow-wrapper{margin-right:10px}\n"] }]
751
760
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.UtilityService }, { type: i3.LoadCheckService }, { type: i2.ConfigurationsService }, { type: i4.MatLegacyDialog }, { type: i5.AppTocService }, { type: i6.ActionService }, { type: i1.Router }, { type: i2.EventService }, { type: i7.ViewerDataService }, { type: i8.SamuhikCharchaService }, { type: undefined, decorators: [{
752
761
  type: Inject,
753
762
  args: ['environment']
@@ -817,4 +826,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
817
826
  type: HostListener,
818
827
  args: ['window:scroll', ['$event']]
819
828
  }] } });
820
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC10b2MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvY29udGVudC10b2MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvY29udGVudC10b2MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQTRCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFakwsT0FBTyxFQUF1QyxTQUFTLEVBQWtCLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBTS9HLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJEQUEyRCxDQUFBO0FBQ3hHLE9BQU8sRUFBZ0MscUJBQXFCLElBQUksZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDeEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUE7QUFHM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFFL0MsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU8zQixNQUFNLE9BQU8sbUJBQW1CO0lBcUU5QixZQUNVLEtBQXFCLEVBQ3JCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNs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Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDbUIsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNELElBQUk7c0JBQXpCLFlBQVk7dUJBQUMsTUFBTTtnQkFDWCxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQTRVUCxZQUFZO3NCQURYLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlLCBFdmVudFNlcnZpY2UsIE5zQ29udGVudCwgVXRpbGl0eVNlcnZpY2UsIFdzRXZlbnRzIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuXG5pbXBvcnQgeyBMb2FkQ2hlY2tTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbG9hZC1jaGVjay5zZXJ2aWNlJ1xuaW1wb3J0IHsgTWF0TGVnYWN5VGFiR3JvdXAgYXMgTWF0VGFiR3JvdXAsIE1hdExlZ2FjeVRhYkNoYW5nZUV2ZW50IGFzIE1hdFRhYkNoYW5nZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LXRhYnMnXG5pbXBvcnQgeyBOc0Rpc2N1c3Npb25WMiB9IGZyb20gJ0BzdW5iaXJkLWNiL2Rpc2N1c3Npb24tdjInXG5pbXBvcnQgeyBBaVR1dG9yQ29uZmlybVBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi9haS10dXRvci1jb25maXJtLXBvcHVwL2FpLXR1dG9yLWNvbmZpcm0tcG9wdXAuY29tcG9uZW50J1xuaW1wb3J0IHsgTWF0TGVnYWN5RGlhbG9nIGFzIE1hdERpYWxvZywgTWF0TGVnYWN5RGlhbG9nQ29uZmlnIGFzIE1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnXG5pbXBvcnQgeyB2aWV3ZXJSb3V0ZUdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcy92aWV3ZXItcm91dGUtdXRpbCdcbmltcG9ydCB7IEFwcFRvY1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHAtdG9jLnNlcnZpY2UnXG5pbXBvcnQgeyBBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWN0aW9uLnNlcnZpY2UnXG5pbXBvcnQgeyBWdHRGaWxlIH0gZnJvbSAnQHBvbHlmbGl4L3Z0dC1wYXJzZXInXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IFZpZXdlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdmlld2VyLWRhdGEuc2VydmljZSdcbmltcG9ydCB7IE1hdFRhYiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnXG5pbXBvcnQgeyBTYW11aGlrQ2hhcmNoYVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fc2VydmljZXMvc2FtdWhpay1jaGFyY2hhLnNlcnZpY2UnXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCdcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dzLXdpZGdldC1jb250ZW50LXRvYycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZW50LXRvYy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQtdG9jLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuXG5leHBvcnQgY2xhc3MgQ29udGVudFRvY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblxuICB0YWJDaGFuZ2VWYWx1ZTogYW55ID0gJydcbiAgQElucHV0KCkgY29udGVudCE6IGFueVxuICBASW5wdXQoKSBjb250ZW50UmVhZERhdGEhOiBhbnlcbiAgQElucHV0KCkgaW5pdGlhbFJvdXRlRGF0YTogYW55XG4gIEBJbnB1dCgpIGNoYW5nZVRhYiA9IGZhbHNlXG4gIEBJbnB1dCgpIGJhc2VDb250ZW50UmVhZERhdGEhOiBhbnlcbiAgcm91dGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXG4gIEBJbnB1dCgpIGZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnJnByZXZpZXc9dHJ1ZScpXG4gIEBJbnB1dCgpIGNvbnRlbnRUYWJGbGFnID0gdHJ1ZVxuICBASW5wdXQoKSByZXN1bWVEYXRhOiBhbnkgfCBudWxsID0gbnVsbFxuICBASW5wdXQoKSBiYXRjaERhdGE6IC8qKk5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2UgKi8gYW55IHwgbnVsbCA9IG51bGxcbiAgQElucHV0KCkgc2tlbGV0b25Mb2FkZXIgPSBmYWxzZVxuICBASW5wdXQoKSB0b2NTdHJ1Y3R1cmU6IGFueSA9IHt9XG4gIEBJbnB1dCgpIHBhdGhTZXQ6IGFueVxuICBASW5wdXQoKSBmcm9tVmlld2VyID0gZmFsc2VcbiAgQElucHV0KCkgaGllcmFyY2h5TWFwRGF0YTogYW55ID0ge31cbiAgQFZpZXdDaGlsZCgnc3RpY2t5TWVudScpIHRhYkVsZW1lbnQhOiBNYXRUYWJHcm91cFxuICBAVmlld0NoaWxkcmVuKE1hdFRhYikgdGFicyE6IFF1ZXJ5TGlzdDxNYXRUYWI+XG4gIEBJbnB1dCgpIGNvbmRpdGlvbjogYW55XG4gIEBJbnB1dCgpIGtwYXJyYXk6IGFueVxuICBASW5wdXQoKSBzZWxlY3RlZEJhdGNoRGF0YTogYW55XG4gIEBJbnB1dCgpIGNvbmZpZzogYW55XG4gIEBJbnB1dCgpIGNvbXBvbmVudE5hbWUhOiBzdHJpbmdcbiAgQElucHV0KCkgaXNFbnJvbGxlZCE6IGJvb2xlYW5cbiAgQElucHV0KCkgcGxheVJlc291cmNlSWQgPSAnJ1xuICBASW5wdXQoKSBzaWRlTmF2QmFyT3BlbmVkID0gZmFsc2VcbiAgQElucHV0KCkgbGFuZ3VhZ2VMaXN0ID0gW11cbiAgQElucHV0KCkgbG9ja0NlcnRpZmljYXRlID0gZmFsc2VcbiAgQE91dHB1dCgpIHBsYXlSZXN1bWVGb3JBSSA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgZW5yb2xsVXNlclRvQUkgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIHRyaWdlckNvbXBsZXRpb25TdXJ2ZXlGb3JtID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpXG4gIEBPdXRwdXQoKSByZXN1bWVDb250ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpXG5cbiAgY29tbWVudElkPzogc3RyaW5nID0gJydcbiAgc3RpY2t5ID0gZmFsc2VcbiAgbWVudVBvc2l0aW9uOiBhbnlcbiAgaXNNb2JpbGUgPSBmYWxzZVxuICBzZWxlY3RlZFRhYkluZGV4ID0gMFxuICBkaXNjdXNzV2lkZ2V0RGF0YSE6IE5zRGlzY3Vzc2lvblYyLklDb21tZW50V2lkZ2V0RGF0YVxuICB0ZWFjaGVyTm90ZXNGbGFnID0gZmFsc2VcbiAgcmVmZXJlbmNlTm90ZXNGbGFnID0gZmFsc2VcbiAgdmlld2VyUGFnZSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvdmlld2VyLycpID8gdHJ1ZSA6IGZhbHNlXG4gIHJlc3VtZURhdGFMaW5rOiBhbnlcbiAgZW5hYmxlQUlUdXRvckZsYWcgPSBmYWxzZVxuICBlbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IGZhbHNlXG4gIGNvdXJzZUNhdGVnb3J5ID0gTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeVxuICBzdWJUaXRsZXMkOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxuICByZXNvdXJjZUlkZW50aWZpZXI6IGFueVxuICByZXNvdXJjZUlkZW50aWZpZXIkOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxuICBzdWJUaXRsZXM6IGFueSA9IFtdXG4gIGtleXdvcmRUb0hpZ2hsaWdodDogYW55ID0gJydcbiAgaGlnaGxpZ2h0Q29uZGl0aW9uID0gZmFsc2VcbiAgdnR0TGFuZ0FycjogYW55ID0gW11cbiAgdHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID0gJ2VuJ1xuICBkZWZhdWx0VHJhbnNjcmlwdExhbmd1YWdlID0gJ2VuJ1xuICB0cmFuc3JpcHRpb25MYW5ndWFnZVN1YjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGxcbiAgc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU6IGFueVxuICBmcm9tQUlUdXRvciA9IGZhbHNlXG4gIHRvdGFsUmVzb3VyY2UgPSAwXG4gIHNjb3JtQXNzZXNzbWVudENvdW50ID0gMFxuICBzaG93QUlUdXRvclBvcHVwID0gZmFsc2VcbiAgZnJvbUFJU2VsZWN0ZWRUYWJJbmRleCA9IGZhbHNlXG4gIGlzTW9iaWxlRm9yQUkgPSBmYWxzZVxuICB0cmFuc2NyaXB0QWN0aXZlTGFuZ3VhZ2VUZXh0ID0gJ0VuZ2xpc2gnXG4gIHNob3dBc3NpZ25tZW50c1RhYiA9IGZhbHNlXG4gIGVuYWJsZVNhbXVoaWtDaGFyY2hhVGFiID0gZmFsc2VcbiAgc2FtdWhpa0NvbmZpZzogYW55XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9hZENoZWNrU2VydmljZTogTG9hZENoZWNrU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHVibGljIHRvY1N2YzogQXBwVG9jU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGlvblNWQzogQWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZXZlbnRTdmM6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHZpZXdlckRhdGFTdmM6IFZpZXdlckRhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FtdWhpa0NoYXJjaGFTdmM6IFNhbXVoaWtDaGFyY2hhU2VydmljZSxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueVxuXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvciAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yPy5hbGwpIHtcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSB0aGlzLm9ubHlzY29ybUFzc2Vzc21lbnRFeGlzdHModGhpcy5yb3V0ZS5zbmFwc2hvdD8uZGF0YT8uY29udGVudD8uZGF0YT8uY2hpbGRyZW4sICdtaW1lVHlwZScsIFsnYXBwbGljYXRpb24vdm5kLmVrc3RlcC5odG1sLWFyY2hpdmUnLCAnYXBwbGljYXRpb24vdm5kLnN1bmJpcmQucXVlc3Rpb25zZXQnLCAnYXBwbGljYXRpb24vanNvbicsICd0ZXh0L3gtdXJsJ10pXG4gICAgICAvLyB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LmFpVHV0b3I/LmZvck9yZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnLmFpVHV0b3I/LmZvck9yZz8ubGVuZ3RoICYmXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yPy5mb3JPcmcuaW5jbHVkZXModGhpcy5jb25maWdTZXJ2aWNlLnVzZXJQcm9maWxlPy5yb290T3JnSWQpXG4gICAgKSB7XG4gICAgICB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdGhpcy5vbmx5c2Nvcm1Bc3Nlc3NtZW50RXhpc3RzKHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmNvbnRlbnQ/LmRhdGE/LmNoaWxkcmVuLCAnbWltZVR5cGUnLCBbJ2FwcGxpY2F0aW9uL3ZuZC5la3N0ZXAuaHRtbC1hcmNoaXZlJywgJ2FwcGxpY2F0aW9uL3ZuZC5zdW5iaXJkLnF1ZXN0aW9uc2V0JywgJ2FwcGxpY2F0aW9uL2pzb24nLCAndGV4dC94LXVybCddKVxuICAgICAgLy8gdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IGZhbHNlXG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LnRyYW5zY3JpcHRpb24/LmFsbCkge1xuICAgICAgLy8gdGhpcy5yZXNvdXJjZUlkZW50aWZpZXIkID0gdGhpcy50b2NTdmMudHJhbnNyaXB0aW9uSWRlbnRpZmllci5zdWJzY3JpYmUoKHZhbHVlOmFueSk9PntcbiAgICAgIC8vICAgaWYodmFsdWUgJiYgIHZhbHVlPy5pZGVudGlmaWVyKSB7XG4gICAgICAvLyAgICAgdGhpcy5yZXNvdXJjZUlkZW50aWZpZXIgPSB2YWx1ZT8uaWRlbnRpZmllciAvL3ZhbHVlPy5pZGVudGlmaWVyIC8vIGRvXzExMzg4OTExOTg0ODkwNjc1MjExNDdcbiAgICAgIC8vICAgICB0aGlzLnBhcnNlVlRUKClcbiAgICAgIC8vICAgfVxuXG4gICAgICAvLyB9KVxuXG4gICAgICB0aGlzLnN1YlRpdGxlcyQgPSB0aGlzLnRvY1N2Yy50cmFuc2NyaXB0aW9uRGF0YSQuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMua2V5d29yZFRvSGlnaGxpZ2h0ID0gdmFsdWVcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMudHJhbnNyaXB0aW9uTGFuZ3VhZ2VTdWIgPSB0aGlzLnRvY1N2Yy50cmFuc3JpcHRpb25BY3RpdmVMYW5ndWFnZURhdGFPYmplY3QkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgobGFuZ3ZhbHVlOiBhbnkpID0+IGNvbnNvbGUubG9nKCd0YXAgbGFuZ3ZhbHVlOicsIGxhbmd2YWx1ZSkpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgobGFuZ3ZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAobGFuZ3ZhbHVlKSB7XG4gICAgICAgICAgICAvLyB0aGlzLnJlbmRlclNlbGVjdGVkTGFuZ3VhZ2VUcmFuc2NyaXB0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pXG4gICAgICB0aGlzLmVuYWJsZVRyYW5zY3JpcHRpb25GbGFnID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LnRyYW5zY3JpcHRpb24/LmZvck9yZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5mb3JPcmc/Lmxlbmd0aCAmJlxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbj8uZm9yT3JnPy5pbmNsdWRlcyh0aGlzLmNvbmZpZ1NlcnZpY2UudXNlclByb2ZpbGU/LnJvb3RPcmdJZClcbiAgICApIHtcbiAgICAgIC8vIHRoaXMucmVzb3VyY2VJZGVudGlmaWVyJCA9IHRoaXMudG9jU3ZjLnRyYW5zcmlwdGlvbklkZW50aWZpZXIuc3Vic2NyaWJlKCh2YWx1ZTphbnkpPT57XG4gICAgICAvLyAgIGlmKHZhbHVlICYmICB2YWx1ZT8uaWRlbnRpZmllcikge1xuICAgICAgLy8gICAgIHRoaXMucmVzb3VyY2VJZGVudGlmaWVyID0gdmFsdWU/LmlkZW50aWZpZXIgLy92YWx1ZT8uaWRlbnRpZmllciAvLyBkb18xMTM4ODkxMTk4NDg5MDY3NTIxMTQ3XG4gICAgICAvLyAgICAgdGhpcy5wYXJzZVZUVCgpXG4gICAgICAvLyAgIH1cblxuICAgICAgLy8gfSlcblxuICAgICAgdGhpcy5zdWJUaXRsZXMkID0gdGhpcy50b2NTdmMudHJhbnNjcmlwdGlvbkRhdGEkLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmtleXdvcmRUb0hpZ2hsaWdodCA9IHZhbHVlXG4gICAgICB9KVxuXG4gICAgICB0aGlzLnRyYW5zcmlwdGlvbkxhbmd1YWdlU3ViID0gdGhpcy50b2NTdmMudHJhbnNyaXB0aW9uQWN0aXZlTGFuZ3VhZ2VEYXRhT2JqZWN0JFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKGxhbmd2YWx1ZTogYW55KSA9PiBjb25zb2xlLmxvZygndGFwIGxhbmd2YWx1ZTonLCBsYW5ndmFsdWUpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGxhbmd2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGxhbmd2YWx1ZSkge1xuICAgICAgICAgICAgLy8gdGhpcy5yZW5kZXJTZWxlY3RlZExhbmd1YWdlVHJhbnNjcmlwdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9KVxuICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgYmF0Y2hJZCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuYmF0Y2hJZCA/XG4gICAgICB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmJhdGNoSWQgOiAnJ1xuICAgIGlmIChiYXRjaElkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAxXG4gICAgfVxuICAgIHRoaXMuY29tbWVudElkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5jb21tZW50SWQgPyB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmNvbW1lbnRJZCA6ICcnXG4gICAgaWYgKHRoaXMuY29tbWVudElkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAyXG4gICAgfVxuXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5pc01vYmlsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNNb2JpbGVcbiAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxNDgwKSB7XG4gICAgICB0aGlzLmlzTW9iaWxlRm9yQUkgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNNb2JpbGVGb3JBSSA9IGZhbHNlXG4gICAgfVxuICAgIHRoaXMubWVudVBvc2l0aW9uID0gdGhpcy50YWJFbGVtZW50Ll9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wXG5cbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXAuc3Vic2NyaWJlKGFzeW5jIChwYXJhbXM6IGFueSkgPT4ge1xuXG4gICAgICBsZXQgZnJvbUFJVHV0b3IgPSBwYXJhbXMuZ2V0KCdmcm9tQUlUdXRvcicpXG5cbiAgICAgIGlmICgoZnJvbUFJVHV0b3IgPT09ICd0cnVlJyB8fCBmcm9tQUlUdXRvciA9PT0gdHJ1ZSkgJiYgdGhpcy5pc01vYmlsZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB0YWJzQXJyYXkgPSB0aGlzLnRhYnM/LnRvQXJyYXkoKVxuICAgICAgICAgIGxldCBpbmRleCA9IHRhYnNBcnJheT8uZmluZEluZGV4KHRhYiA9PiB0YWIudGV4dExhYmVsLnRyaW0oKSA9PT0gXCJBSSBUdXRvclwiLnRyaW0oKSlcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaW5kZXhcbiAgICAgICAgICAgIHRoaXMuZnJvbUFJU2VsZWN0ZWRUYWJJbmRleCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDMwMDApXG5cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0IGdldEN1cnJlbnRUaW1lSW5VVEMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKClcbiAgICBjb25zdCBpc29TdHJpbmcgPSBjdXJyZW50RGF0ZS50b0lTT1N0cmluZygpXG4gICAgcmV0dXJuIGlzb1N0cmluZy5yZXBsYWNlKCdaJywgJyswMDAwJylcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0U2FtdWhpa0NvbmZpZygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zYW11aGlrQ29uZmlnID0gYXdhaXQgdGhpcy5zYW11aGlrQ2hhcmNoYVN2Yy5mZXRjaENvbmZpZ0ZpbGUoKS50b1Byb21pc2UoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXG4gICAgdGhpcy5yZXNvdXJjZUlkZW50aWZpZXIgPSB0aGlzLnZpZXdlckRhdGFTdmMucmVzb3VyY2VJZFxuXG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbj8uYWxsKSB7XG4gICAgICB0aGlzLmVuYWJsZVRyYW5zY3JpcHRpb25GbGFnID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LnRyYW5zY3JpcHRpb24/LmZvck9yZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5mb3JPcmc/Lmxlbmd0aCAmJlxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbj8uZm9yT3JnPy5pbmNsdWRlcyh0aGlzLmNvbmZpZ1NlcnZpY2U/LnVzZXJQcm9maWxlPy5yb290T3JnSWQpXG4gICAgKSB7XG4gICAgICB0aGlzLmVuYWJsZVRyYW5zY3JpcHRpb25GbGFnID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuYWJsZVRyYW5zY3JpcHRpb25GbGFnID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcuYWlUdXRvcj8uYWxsKSB7XG4gICAgICB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdGhpcy5vbmx5c2Nvcm1Bc3Nlc3NtZW50RXhpc3RzKHRoaXMuY29udGVudD8uY2hpbGRyZW4sICdtaW1lVHlwZScsIFsnYXBwbGljYXRpb24vdm5kLmVrc3RlcC5odG1sLWFyY2hpdmUnLCAnYXBwbGljYXRpb24vdm5kLnN1bmJpcmQucXVlc3Rpb25zZXQnLCAnYXBwbGljYXRpb24vanNvbicsICd0ZXh0L3gtdXJsJ10pXG4gICAgICAvLyB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LmFpVHV0b3I/LmZvck9yZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yPy5mb3JPcmc/Lmxlbmd0aFxuICAgICAgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZy5haVR1dG9yPy5mb3JPcmc/LmluY2x1ZGVzKHRoaXMuY29uZmlnU2VydmljZT8udXNlclByb2ZpbGU/LnJvb3RPcmdJZClcbiAgICApIHtcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSB0aGlzLm9ubHlzY29ybUFzc2Vzc21lbnRFeGlzdHModGhpcy5jb250ZW50Py5jaGlsZHJlbiwgJ21pbWVUeXBlJywgWydhcHBsaWNhdGlvbi92bmQuZWtzdGVwLmh0bWwtYXJjaGl2ZScsICdhcHBsaWNhdGlvbi92bmQuc3VuYmlyZC5xdWVzdGlvbnNldCcsICdhcHBsaWNhdGlvbi9qc29uJywgJ3RleHQveC11cmwnXSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlc1sncGxheVJlc291cmNlSWQnXSkge1xuICAgICAgaWYgKGNoYW5nZXM/LnBsYXlSZXNvdXJjZUlkPy5wcmV2aW91c1ZhbHVlICE9PSBjaGFuZ2VzPy5wbGF5UmVzb3VyY2VJZD8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdlclBhZ2UgJiYgdGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkICYmIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcpIHtcbiAgICAgICAgICB0aGlzLnBhcnNlVlRUKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5jaGFuZ2VUYWIgJiYgY2hhbmdlcy5jaGFuZ2VUYWIuY3VycmVudFZhbHVlICYmICF0aGlzLmZyb21BSVNlbGVjdGVkVGFiSW5kZXgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDFcbiAgICB9XG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5wYWdlRGF0YSAmJiB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEucGFnZURhdGEuZGF0YSkge1xuICAgICAgdGhpcy5jb25maWcgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEucGFnZURhdGEuZGF0YVxuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZGlzY3Vzc1dpZGdldERhdGEpIHtcbiAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEgPSB0aGlzLmNvbmZpZy5kaXNjdXNzV2lkZ2V0RGF0YVxuICAgICAgaWYgKHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuaWRlbnRpZmllcikge1xuICAgICAgICBpZiAoIXRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudFRyZWVEYXRhLmVudGl0eUlkKSB7XG4gICAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5uZXdDb21tZW50U2VjdGlvbi5jb21tZW50VHJlZURhdGEuZW50aXR5SWQgPSB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuaWRlbnRpZmllclxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbiAmJiB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbi5uZXdDb21tZW50UmVwbHkpIHtcbiAgICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbi5uZXdDb21tZW50UmVwbHkuY29tbWVudFRyZWVEYXRhLmVudGl0eUlkID0gdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLmlkZW50aWZpZXJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pc0Vucm9sbGVkKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0pIHtcbiAgICAgICAgICB0aGlzLnNob3dBc3NpZ25tZW50c1RhYiA9IHRydWVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmVucm9sbGVkQ29udGVudCA9IHRydWVcbiAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5uZXdDb21tZW50U2VjdGlvbi5jb21tZW50Qm94LnBsYWNlaG9sZGVyID0gJ1N0YXJ0IGEgZGlzY3Vzc2lvbidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEuZW5yb2xsZWRDb250ZW50ID0gZmFsc2VcbiAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5uZXdDb21tZW50U2VjdGlvbi5jb21tZW50Qm94LnBsYWNlaG9sZGVyID0gJ0Vucm9sIHRvIGFkZCB5b3VyIGNvbW1lbnRzJ1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29tbWVudElkKSB7XG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uc2hvdyA9IGZhbHNlXG4gICAgICB9XG4gICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhID0geyAuLi50aGlzLmRpc2N1c3NXaWRnZXREYXRhIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb250ZW50UmVhZERhdGEgJiYgdGhpcy5jb250ZW50UmVhZERhdGE/LmV2ZW50TGlua2VkPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG9yZ0lkID0gXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAndXNlclByb2ZpbGUudXNlclJvb3RPcmcuaWQnLCAnJylcbiAgICAgIGF3YWl0IHRoaXMuZ2V0U2FtdWhpa0NvbmZpZygpXG4gICAgICBjb25zdCBldmVudHNMaW5rZWQgPSB0aGlzLmNvbnRlbnRSZWFkRGF0YS5ldmVudExpbmtlZCB8fCBbXVxuICAgICAgbGV0IGV2ZW50c0RhdGE6IGFueSA9IFtdXG4gICAgICB0aGlzLnNhbXVoaWtDb25maWc/LnN0cmlwc1swXS50YWJzLmZvckVhY2goKGVsZTogYW55KSA9PiB7XG4gICAgICAgIGVsZS5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycy5pZGVudGlmaWVyID0gZXZlbnRzTGlua2VkXG4gICAgICAgIGVsZS5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycy5jcmVhdGVkRm9yID0gW29yZ0lkXVxuICAgICAgICBpZiAoZWxlLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzLmVuZERhdGVUaW1lLmhhc093blByb3BlcnR5KCc+PScpKSB7XG4gICAgICAgICAgZWxlLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzLmVuZERhdGVUaW1lWyc+PSddID0gdGhpcy5nZXRDdXJyZW50VGltZUluVVRDXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZS5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycy5lbmREYXRlVGltZS5oYXNPd25Qcm9wZXJ0eSgnPCcpKSB7XG4gICAgICAgICAgZWxlLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzLmVuZERhdGVUaW1lWyc8J10gPSB0aGlzLmdldEN1cnJlbnRUaW1lSW5VVENcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNhbXVoaWtDaGFyY2hhU3ZjLmdldFNlYXJjaFY2UmVzdWx0cyhlbGUucmVxdWVzdC5zZWFyY2hWNikuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLnJlc3VsdCAmJiByZXMucmVzdWx0LmNvdW50ICYmIHJlcy5yZXN1bHQ/LkV2ZW50ICYmIHJlcy5yZXN1bHQuRXZlbnQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgZXZlID0gMDsgZXZlIDwgcmVzLnJlc3VsdC5FdmVudD8ubGVuZ3RoOyBldmUrKykge1xuICAgICAgICAgICAgICBpZiAocmVzLnJlc3VsdC5FdmVudFtldmVdWydjcmVhdGVkRm9yJ10gJiYgcmVzLnJlc3VsdC5FdmVudFtldmVdWydjcmVhdGVkRm9yJ10ubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgcmVzLnJlc3VsdC5FdmVudFtldmVdWydyZXNvdXJjZVR5cGUnXSA9PT0gJ1NhbXVoaWsgQ2hhcmNoYSdcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGV2ZW50c0RhdGEucHVzaChyZXMucmVzdWx0LkV2ZW50W2V2ZV1bJ2NyZWF0ZWRGb3InXVswXSlcbiAgICAgICAgICAgICAgaWYgKGV2ZW50c0RhdGEuaW5jbHVkZXModGhpcy5jb25maWdTZXJ2aWNlLnVzZXJQcm9maWxlPy5yb290T3JnSWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVTYW11aGlrQ2hhcmNoYVRhYiA9IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb250ZW50UmVhZERhdGEgJiYgdGhpcy5jb250ZW50UmVhZERhdGEucmVmZXJlbmNlTm9kZXMpIHtcbiAgICAgIHRoaXMuY29udGVudFJlYWREYXRhLnJlZmVyZW5jZU5vZGVzLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBsZXQgdXNlclJvbGVzOiBTZXQ8c3RyaW5nPiA9IHRoaXMuY29uZmlnU2VydmljZT8udXNlclJvbGVzIHx8IG5ldyBTZXQoKVxuICAgICAgICBsZXQgaGFzRWR1Y2F0b3JSb2xlID0gZmFsc2VcblxuICAgICAgICAvLyBDaGVjayBpZiB1c2VyIGhhcyBNRU5UT1Igcm9sZVxuICAgICAgICBpZiAodXNlclJvbGVzLmhhcygnTUVOVE9SJykgfHxcbiAgICAgICAgICB1c2VyUm9sZXMuaGFzKCdtZW50b3InKSB8fFxuICAgICAgICAgIHVzZXJSb2xlcy5oYXMoJ01lbnRvcicpKSB7XG4gICAgICAgICAgaGFzRWR1Y2F0b3JSb2xlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgbG9jYWwgc3RvcmFnZSBmb3Igc3VydmV5IHJlc3BvbnNlIG9ubHkgaWYgVVJMIGNvbnRhaW5zICdwdWJsaWMnIG9yICdwcmV2aWV3PXRydWUnXG4gICAgICAgIGlmICghaGFzRWR1Y2F0b3JSb2xlICYmIHRoaXMuZm9yUHJldmlldykge1xuICAgICAgICAgIGNvbnN0IHN1cnZleUlkID0gdGhpcy5lbnZpcm9ubWVudC5wdWJsaWNDb250ZW50U3VydmV5SWQgfHwgJydcbiAgICAgICAgICBjb25zdCBjb3Vyc2VJZCA9IHRoaXMuY29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyIHx8ICcnXG4gICAgICAgICAgY29uc3Qgc3RvcmFnZUtleSA9IGBzdXJ2ZXlfJHtzdXJ2ZXlJZH1fJHtjb3Vyc2VJZH1gXG4gICAgICAgICAgY29uc3Qgc3RvcmVkRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHN0b3JhZ2VLZXkpXG5cbiAgICAgICAgICBpZiAoc3RvcmVkRGF0YSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3VydmV5UmVzcG9uc2VzID0gSlNPTi5wYXJzZShzdG9yZWREYXRhKVxuICAgICAgICAgICAgICBjb25zdCBlZHVjYXRvclF1ZXN0aW9uID0gc3VydmV5UmVzcG9uc2VzLmZpbmQoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UucXVlc3Rpb24gPT09ICdBcmUgeW91IGFuIEVkdWNhdG9yL0ZhY3VsdHkgbWVtYmVyPydcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAoZWR1Y2F0b3JRdWVzdGlvbiAmJiBlZHVjYXRvclF1ZXN0aW9uLmFuc3dlciA9PT0gJ1llcycpIHtcbiAgICAgICAgICAgICAgICBoYXNFZHVjYXRvclJvbGUgPSB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgc3VydmV5IGRhdGEgZnJvbSBsb2NhbCBzdG9yYWdlOicsIGVycm9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0ZWFjaGVyTm90ZXNGbGFnIGlmIHVzZXIgaGFzIGVkdWNhdG9yIHJvbGVcbiAgICAgICAgaWYgKGhhc0VkdWNhdG9yUm9sZSkge1xuICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0ucmVzb3VyY2VDYXRlZ29yeSAmJiBpdGVtLnJlc291cmNlQ2F0ZWdvcnkgPT09ICdUZWFjaGVycyBSZXNvdXJjZScpIHtcbiAgICAgICAgICAgIHRoaXMudGVhY2hlck5vdGVzRmxhZyA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnJlc291cmNlQ2F0ZWdvcnkgJiYgaXRlbS5yZXNvdXJjZUNhdGVnb3J5ID09PSAnUmVmZXJlbmNlIFJlc291cmNlJykge1xuICAgICAgICAgIHRoaXMucmVmZXJlbmNlTm90ZXNGbGFnID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAodGhpcy5zaWRlTmF2QmFyT3BlbmVkKSB7XG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxNDgwKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTW9iaWxlRm9yQUkpIHtcbiAgICAgICAgICB0aGlzLmlzTW9iaWxlRm9yQUkgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzTW9iaWxlRm9yQUkgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE0ODApIHtcbiAgICAgICAgdGhpcy5pc01vYmlsZUZvckFJID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc01vYmlsZUZvckFJID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnLCBbJyRldmVudCddKVxuICBoYW5kbGVTY3JvbGwoKSB7XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsID0gd2luZG93LnNjcm9sbFlcbiAgICBpZiAod2luZG93U2Nyb2xsID49ICh0aGlzLm1lbnVQb3NpdGlvbiAtICgodGhpcy5pc01vYmlsZSkgPyA5NiA6IDEwNCkpKSB7XG4gICAgICB0aGlzLnN0aWNreSA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGlja3kgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVRhYkNoYW5nZShldmVudDogTWF0VGFiQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRhYkNoYW5nZVZhbHVlID0gZXZlbnQudGFiXG4gICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gZXZlbnQuaW5kZXhcbiAgICB0aGlzLmxvYWRDaGVja1NlcnZpY2UuY29tcG9uZW50TG9hZGVkKHRydWUpXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhYi50ZXh0TGFiZWwgPT09ICdBSSBUdXRvcicpIHtcbiAgICAgIHRoaXMuc2hvd0FJVHV0b3JQb3B1cCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmluZGV4ID09PSAwICYmIGV2ZW50LnRhYi50ZXh0TGFiZWwgPT09ICdUcmFuc2NyaXB0aW9uJykge1xuICAgICAgdGhpcy5yYWlzZVRyYW5zY3JpcHRpb25UYWJTdGFydFRlbGVtZXRyeSgpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yYWlzZVRyYW5zY3JpcHRpb25UYWJJbnRlcmFjdFRlbGVtZXRyeSgpXG4gICAgICB9LCAxMDAwKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJhaXNlVHJhbnNjcmlwdGlvblRhYlN0b3BUZWxlbWV0cnkoKVxuICAgIH1cblxuICB9XG5cbiAgc2hvd0FpVHV0b3JDb25maXJtUG9wdXAoKSB7XG4gICAgdGhpcy5yYWlzZUFJUG9wdXBTdGFydFRlbGVtZXRyeSgpXG4gICAgaWYgKHRoaXMuaXNFbnJvbGxlZCkge1xuICAgICAgdGhpcy5mcm9tQUlUdXRvciA9IHRydWVcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJhaXNlQUlQb3B1cEludGVyYWN0VGVsZW1ldHJ5KClcbiAgICAgIH0sIDEwMDApXG5cblxuICAgICAgdGhpcy5nZW5lcmF0ZVJlc3VtZURhdGFMaW5rTmV3KClcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJhaXNlQUlQb3B1cEVuZFRlbGVtZXRyeSgpXG4gICAgICB9LCAxMDAwKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yYWlzZUFJUG9wdXBJbnRlcmFjdFRlbGVtZXRyeSgpXG4gICAgICB9LCAxMDAwKVxuICAgICAgY29uc3QgZGlhbG9nQ29uZmlnID0gbmV3IE1hdERpYWxvZ0NvbmZpZygpXG5cbiAgICAgIGRpYWxvZ0NvbmZpZy53aWR0aCA9ICc0MjFweCdcbiAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhID0ge1xuICAgICAgICBlbnJvbGw6IHRoaXMuaXNFbnJvbGxlZFxuICAgICAgfVxuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBaVR1dG9yQ29uZmlybVBvcHVwQ29tcG9uZW50LCBkaWFsb2dDb25maWcpXG5cbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuXG4gICAgICAgIGlmIChyZXNwb25zZSA9PT0gJ2Vucm9sbCcpIHtcbiAgICAgICAgICB0aGlzLmZyb21BSVR1dG9yID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVSZXN1bWVEYXRhTGlua05ldygpXG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UgPT09ICduZWVkVG9FbnJvbGwnKSB7XG4gICAgICAgICAgdGhpcy5lbnJvbGxVc2VyRm9yQUlUdXRvcigpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yYWlzZUFJUG9wdXBFbmRUZWxlbWV0cnkoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgfVxuXG4gIGdlbmVyYXRlUmVzdW1lRGF0YUxpbmtOZXcoKSB7XG4gICAgaWYgKHRoaXMucmVzdW1lRGF0YSAmJiB0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGxldCByZXN1bWVEYXRhVjI6IGFueVxuICAgICAgaWYgKHRoaXMuY29udGVudC5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwKSB7XG4gICAgICAgIHJlc3VtZURhdGFWMiA9IHRoaXMuZ2V0UmVzdW1lRGF0YUZyb21MaXN0KCdzdGFydCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bWVEYXRhVjIgPSB0aGlzLmdldFJlc3VtZURhdGFGcm9tTGlzdCgpXG4gICAgICB9XG4gICAgICBpZiAoIXJlc3VtZURhdGFWMi5taW1lVHlwZSkge1xuICAgICAgICByZXN1bWVEYXRhVjIubWltZVR5cGUgPSB0aGlzLnRvY1N2Yy5nZXRNaW1lVHlwZSh0aGlzLmNvbnRlbnQsIHJlc3VtZURhdGFWMi5pZGVudGlmaWVyKVxuICAgICAgfVxuICAgICAgdGhpcy5yZXN1bWVEYXRhTGluayA9IHZpZXdlclJvdXRlR2VuZXJhdG9yKFxuICAgICAgICByZXN1bWVEYXRhVjIuaWRlbnRpZmllcixcbiAgICAgICAgcmVzdW1lRGF0YVYyLm1pbWVUeXBlLFxuICAgICAgICB0aGlzLmNvbnRlbnQuaWRlbnRpZmllcixcbiAgICAgICAgdGhpcy5jb250ZW50LmNvbnRlbnRUeXBlLFxuICAgICAgICB0aGlzLmZvclByZXZpZXcsXG4gICAgICAgICdMZWFybmluZyBSZXNvdXJjZScsXG4gICAgICAgIHRoaXMuZ2V0QmF0Y2hJZCgpLFxuICAgICAgICB0aGlzLmNvbnRlbnQubmFtZSxcbiAgICAgIClcbiAgICAgIHRoaXMuYWN0aW9uU1ZDLnNldFVwZGF0ZUNvbXBHcm91cE8gPSB0aGlzLnJlc3VtZURhdGFMaW5rXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5yZXN1bWVEYXRhTGluay51cmxdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgLi4udGhpcy5yZXN1bWVEYXRhTGluay5xdWVyeVBhcmFtcyxcbiAgICAgICAgICBmcm9tQUlUdXRvcjogdGhpcy5mcm9tQUlUdXRvclxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcbiAgICAgIC8vICAgW3RoaXMucmVzdW1lRGF0YUxpbmsudXJsXSxcbiAgICAgIC8vICAge1xuICAgICAgLy8gICAgIHJlbGF0aXZlVG86IHRoaXMucmVzdW1lRGF0YUxpbmsudXJsLFxuICAgICAgLy8gICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLnJlc3VtZURhdGFMaW5rLnF1ZXJ5UGFyYW1zLFxuICAgICAgLy8gICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICAvLyAgIH0pXG4gICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGF5UmVzdW1lRm9yQUkuZW1pdCgpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXN1bWVEYXRhRnJvbUxpc3QodHlwZT86IHN0cmluZyk6IGFueSB8IHZvaWQge1xuICAgIGNvbnN0IHJlc3VtZUNvcHkgPSBbLi4udGhpcy5yZXN1bWVEYXRhXVxuICAgIGlmICghdHlwZSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuXG4gICAgICBjb25zdCBsYXN0SXRlbSA9IHJlc3VtZUNvcHkgJiYgcmVzdW1lQ29weS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT5cbiAgICAgICAgbmV3IERhdGUoYi5sYXN0QWNjZXNzVGltZSkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYS5sYXN0QWNjZXNzVGltZSkuZ2V0VGltZSgpKS5zaGlmdCgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZGVudGlmaWVyOiBsYXN0SXRlbS5jb250ZW50SWQsXG4gICAgICAgIG1pbWVUeXBlOiBsYXN0SXRlbS5wcm9ncmVzc2RldGFpbHMgJiYgbGFzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzLm1pbWVUeXBlLFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBmaXJzdEl0ZW0gPSByZXN1bWVDb3B5ICYmIHJlc3VtZUNvcHkubGVuZ3RoICYmIHJlc3VtZUNvcHlbMF1cbiAgICByZXR1cm4ge1xuICAgICAgaWRlbnRpZmllcjogZmlyc3RJdGVtLmNvbnRlbnRJZCxcbiAgICAgIG1pbWVUeXBlOiBmaXJzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzICYmIGZpcnN0SXRlbS5wcm9ncmVzc2RldGFpbHMubWltZVR5cGUsXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEJhdGNoSWQoKTogc3RyaW5nIHtcbiAgICBsZXQgYmF0Y2hJZCA9ICcnXG4gICAgaWYgKHRoaXMuYmF0Y2hEYXRhICYmIHRoaXMuYmF0Y2hEYXRhLmNvbnRlbnQpIHtcbiAgICAgIGZvciAoY29uc3QgYmF0Y2ggb2YgdGhpcy5iYXRjaERhdGEuY29udGVudCkge1xuICAgICAgICBiYXRjaElkID0gYmF0Y2guYmF0Y2hJZFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmF0Y2hJZFxuICB9XG5cbiAgcmFpc2VBSVBvcHVwU3RhcnRUZWxlbWV0cnkoKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxuICAgICAgZGF0YToge1xuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IFwiYWktdHV0b3ItdG9jLXBhZ2VcIiwgXCJwYWdlaWRcIjogYC9hcHAvdG9jLyR7dGhpcy5jb250ZW50Py5pZGVudGlmaWVyfWAgfSxcbiAgICAgICAgb2JqZWN0OiB7IFwiaWRcIjogdGhpcy5jb250ZW50Py5pZGVudGlmaWVyLCBcInR5cGVcIjogdGhpcy5jb250ZW50Py5jb3Vyc2VDYXRlZ29yeSB9LFxuICAgICAgICBzdGF0ZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuTG9hZGVkLFxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6ICcvYXBwL3RvYycsIG1vZHVsZTogJ0xlYXJuJyB9LFxuICAgICAgZnJvbTogJycsXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXG4gICAgfVxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXG4gIH1cblxuICByYWlzZUFJUG9wdXBFbmRUZWxlbWV0cnkoKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxuICAgICAgZGF0YToge1xuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IFwiYWktdHV0b3ItdG9jLXBhZ2VcIiwgXCJwYWdlaWRcIjogYC9hcHAvdG9jLyR7dGhpcy5jb250ZW50Py5pZGVudGlmaWVyfWAgfSxcbiAgICAgICAgb2JqZWN0OiB7IFwiaWRcIjogdGhpcy5jb250ZW50Py5pZGVudGlmaWVyLCBcInR5cGVcIjogdGhpcy5jb250ZW50Py5jb3Vyc2VDYXRlZ29yeSB9LFxuICAgICAgICBzdGF0ZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuVW5sb2FkZWQsXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuQ2hhdGJvdCxcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgfSxcbiAgICAgIHBhZ2VDb250ZXh0OiB7IHBhZ2VJZDogJy9hcHAvdG9jJywgbW9kdWxlOiAnTGVhcm4nIH0sXG4gICAgICBmcm9tOiAnJyxcbiAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcbiAgICB9XG4gICAgdGhpcy5ldmVudFN2Yy5kaXNwYXRjaENoYXRib3RFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0PihldmVudClcbiAgfVxuXG4gIHJhaXNlQUlQb3B1cEludGVyYWN0VGVsZW1ldHJ5KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiBcImFpLXR1dG9yLXRvYy1wYWdlXCIsIFwicGFnZWlkXCI6IGAvYXBwL3RvYy8ke3RoaXMuY29udGVudD8uaWRlbnRpZmllcn1gIH0sXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkludGVyYWN0LFxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6ICcvYXBwL3RvYycsIG1vZHVsZTogJ0xlYXJuJyB9LFxuICAgICAgZnJvbTogJycsXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXG4gICAgfVxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXG4gIH1cblxuICBlbnJvbGxVc2VyRm9yQUlUdXRvcigpIHtcbiAgICB0aGlzLmVucm9sbFVzZXJUb0FJLmVtaXQoKVxuICB9XG5cbiAgYXN5bmMgcGFyc2VWVFQoKSB7XG4gICAgbGV0IGlkZW50aWZpZXIgPSB0aGlzLnJlc291cmNlSWRlbnRpZmllclxuICAgIC8vIGNvbnNvbGUubG9nKCdpZGVudGlmaWVyLS0nLCBpZGVudGlmaWVyKVxuICAgIGF3YWl0IHRoaXMudG9jU3ZjLmFpR2V0UmVzb3VyY2VWdHRGaWxlKGlkZW50aWZpZXIpLnN1YnNjcmliZShhc3luYyAoZGF0YXM6IGFueSkgPT4ge1xuICAgICAgbGV0IGRhdGE6IGFueSA9IGRhdGFzPy5kYXRhXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCAmJiBkYXRhWzBdWyd0cmFuc2NyaXB0aW9uX3VybHMnXSAmJiBkYXRhWzBdWyd0cmFuc2NyaXB0aW9uX3VybHMnXS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy52dHRMYW5nQXJyID0gZGF0YVswXVsndHJhbnNjcmlwdGlvbl91cmxzJ11cblxuICAgICAgICB0aGlzLmVuYWJsZVRyYW5zY3JpcHRpb25GbGFnID0gdHJ1ZVxuICAgICAgICAvLyBsZXQgdXJsID0gIGRhdGFbMF1bJ3RyYW5zY3JpcHRpb25fdXJscyddWzBdWyd1cmknXVxuICAgICAgICB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSA9IHRoaXMudnR0TGFuZ0FyciAmJiB0aGlzLnZ0dExhbmdBcnIubGVuZ3RoICYmIHRoaXMudnR0TGFuZ0FyclswXSAmJiB0aGlzLnZ0dExhbmdBcnJbMF1bJ2RlZmF1bHRfbGFuZyddID8gJ2VuJyA6ICdlbidcbiAgICAgICAgdGhpcy5kZWZhdWx0VHJhbnNjcmlwdExhbmd1YWdlID0gdGhpcy52dHRMYW5nQXJyICYmIHRoaXMudnR0TGFuZ0Fyci5sZW5ndGggJiYgdGhpcy52dHRMYW5nQXJyWzBdICYmIHRoaXMudnR0TGFuZ0FyclswXVsnZGVmYXVsdF9sYW5nJ10gPyAnZW4nIDogJ2VuJ1xuICAgICAgICBsZXQgc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGUgPSB0aGlzLnZ0dExhbmdBcnIuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbT8ubGFiZWwgPT09IHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZSAmJiBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlID0gc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGVbMF1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlID0gdGhpcy52dHRMYW5nQXJyWzBdXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyZWRBcnIgPSB0aGlzLnZ0dExhbmdBcnIuZmlsdGVyKFxuICAgICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0ubGFiZWwgPT09IHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlXG4gICAgICAgIClcbiAgICAgICAgbGV0IHVybCA9IGZpbHRlcmVkQXJyLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZEFyclswXS51cmkgOiBudWxsXG4gICAgICAgIC8vbGV0IHVybCA9IHRoaXMudnR0TGFuZ0Fyci5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5sYWJlbCA9PT0gdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UpWzBdWyd1cmknXVxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IFZ0dEZpbGUuZnJvbVVybCh1cmwpXG4gICAgICAgICAgbGV0IGJsb2NrczogYW55ID0gZmlsZS5nZXRCbG9ja3MoKVxuXG4gICAgICAgICAgdGhpcy5zdWJUaXRsZXMgPSBibG9ja3NcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvY1N2Yy5jaGFuZ2VUcmFuc2NyaXB0aW9uTGFuZ3VhZ2VFdmVudC5uZXh0KHsgYWN0aXZlTGFuZzogdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UsIGxhbmdEYXRhOiB0aGlzLnZ0dExhbmdBcnIsIGxvYWRQbGF5ZXI6IHRydWUgfSlcblxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZ0dExhbmdBcnIgPSBbXVxuICAgICAgICB0aGlzLmVuYWJsZVRyYW5zY3JpcHRpb25GbGFnID0gZmFsc2VcbiAgICAgIH1cblxuICAgIH0pXG5cbiAgfVxuXG4gIGFzeW5jIHJlbmRlclNlbGVjdGVkTGFuZ3VhZ2VUcmFuc2NyaXB0aW9uKF9sYW5ndmFsdWU6IGFueSkge1xuICAgIC8vIHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID0gdGhpcy5zZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFiZWxcbiAgICBpZiAodHlwZW9mIF9sYW5ndmFsdWUgPT09ICdzdHJpbmcnICYmIF9sYW5ndmFsdWUpIHtcbiAgICAgIHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID0gX2xhbmd2YWx1ZVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGUgPSBfbGFuZ3ZhbHVlPy52YWx1ZVxuICAgICAgdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPSB0aGlzLnNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYWJlbFxuICAgICAgdGhpcy50cmFuc2NyaXB0QWN0aXZlTGFuZ3VhZ2VUZXh0ID0gX2xhbmd2YWx1ZT8udmFsdWU/Lmxhbmd1YWdlXG4gICAgfVxuICAgIHRoaXMucmFpc2VUcmFuc2NyaXB0aW9uTGFuZ3VhZ2VTdGFydFRlbGVtZXRyeSgpXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJhaXNlVHJhbnNjcmlwdGlvbkxhbmd1YWdlSW50ZXJhY3RUZWxlbWV0cnkoKVxuICAgIH0pXG4gICAgbGV0IGN1cnJlbnRQYXRoID0gdGhpcy52dHRMYW5nQXJyLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtPy5sYWJlbCA9PT0gdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UpXG4gICAgaWYgKGN1cnJlbnRQYXRoICYmIGN1cnJlbnRQYXRoLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZSA9IGN1cnJlbnRQYXRoWzBdXG4gICAgfVxuICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBWdHRGaWxlLmZyb21VcmwoY3VycmVudFBhdGggJiYgY3VycmVudFBhdGhbMF0/LnVyaSlcbiAgICBsZXQgYmxvY2tzOiBhbnkgPSBmaWxlLmdldEJsb2NrcygpXG4gICAgdGhpcy5zdWJUaXRsZXMgPSBibG9ja3NcbiAgICB0aGlzLnJhaXNlVHJhbnNjcmlwdGlvbkxhbmd1YWdlU3RvcFRlbGVtZXRyeSgpXG4gICAgLy8gdGhpcy50b2NTdmMuY2hhbmdlVHJhbnNjcmlwdGlvbkxhbmd1YWdlRXZlbnQubmV4dCh7YWN0aXZlTGFuZzogdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UsIGxhbmdEYXRhOiB0aGlzLnZ0dExhbmdBcnIsIGxvYWRQbGF5ZXI6ZmFsc2V9KVxuXG4gIH1cblxuICBvcGVuU3VydmV5Rm9ybVBvcHVwKGV2ZW50OiBib29sZWFuKSB7XG4gICAgdGhpcy50cmlnZXJDb21wbGV0aW9uU3VydmV5Rm9ybS5lbWl0KGV2ZW50KVxuICB9XG5cbiAgcGxheUZyb21TbG90KHN1YnRpdGxlOiBhbnkpIHtcbiAgICBpZiAoc3VidGl0bGUpIHtcbiAgICAgIGxldCBzdGFydFRpbWUgPSBzdWJ0aXRsZS5zdGFydFRpbWUgLyAxMDAwXG4gICAgICBsZXQgZW5kVGltZSA9IHN1YnRpdGxlLmVuZFRpbWUgLyAxMDAwXG4gICAgICB0aGlzLnRvY1N2Yy5wbGF5VHJhbnNjcmlwdGlvblZpZGVvLm5leHQoeyBzdGFydFRpbWUsIGVuZFRpbWUgfSlcbiAgICB9XG4gIH1cblxuICBmb3JtYXRNc1RvVnR0VGltZShtczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCB0b3RhbFNlY29uZHMgPSBNYXRoLmZsb29yKG1zIC8gMTAwMClcbiAgICAvLyAgY29uc3QgbWlsbGlzZWNvbmRzID0gbXMgJSAxMDAwO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcih0b3RhbFNlY29uZHMgLyAzNjAwKVxuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAvIDYwKVxuICAgIGNvbnN0IHNlY29uZHMgPSB0b3RhbFNlY29uZHMgJSA2MFxuXG4gICAgY29uc3QgcGFkID0gKG51bTogbnVtYmVyLCBzaXplOiBudW1iZXIpID0+IG51bS50b1N0cmluZygpLnBhZFN0YXJ0KHNpemUsICcwJylcblxuICAgIC8vIHJldHVybiBgJHtwYWQoaG91cnMsIDIpfToke3BhZChtaW51dGVzLCAyKX06JHtwYWQoc2Vjb25kcywgMil9LiR7cGFkKG1pbGxpc2Vjb25kcywgMyl9YDtcbiAgICByZXR1cm4gYCR7cGFkKGhvdXJzLCAyKX06JHtwYWQobWludXRlcywgMil9OiR7cGFkKHNlY29uZHMsIDIpfWBcbiAgfVxuXG4gIG9ubHlzY29ybUFzc2Vzc21lbnRFeGlzdHMoZGF0YTogYW55LCBrZXk6IGFueSwgdmFsdWU6IGFueSkge1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhPy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGRhdGFbaV0gJiYgZGF0YVtpXVsnY2hpbGRyZW4nXSAmJiBkYXRhW2ldWydjaGlsZHJlbiddLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm9ubHlzY29ybUFzc2Vzc21lbnRFeGlzdHMoZGF0YVtpXT8uY2hpbGRyZW4sIGtleSwgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMudG90YWxSZXNvdXJjZSA9IHRoaXMudG90YWxSZXNvdXJjZSArIDFcbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKGRhdGFbaV1ba2V5XSkpIHtcbiAgICAgICAgICAvLyB0aGlzLnNob3dBSVR1dG9yRmxhZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2Nvcm1Bc3Nlc3NtZW50Q291bnQgPSB0aGlzLnNjb3JtQXNzZXNzbWVudENvdW50ICsgMVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG90YWxSZXNvdXJjZSA9PT0gdGhpcy5zY29ybUFzc2Vzc21lbnRDb3VudCkge1xuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnXG4gIH1cblxuICByYWlzZVRyYW5zY3JpcHRpb25UYWJTdGFydFRlbGVtZXRyeSgpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICdjbGljaycsIFwiaWRcIjogXCJhaS10dXRvci12aWV3ZXItcGFnZVwiLCBcInBhZ2VpZFwiOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBzdWJUeXBlOiAndHJhbnNjcmlwdC10YWInIH0sXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCxcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBtb2R1bGU6ICdMZWFybicgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgcmFpc2VUcmFuc2NyaXB0aW9uVGFiSW50ZXJhY3RUZWxlbWV0cnkoKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxuICAgICAgZGF0YToge1xuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IFwiYWktdHV0b3Itdmlld2VyLXBhZ2VcIiwgXCJwYWdlaWRcIjogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgc3ViVHlwZTogJ3RyYW5zY3JpcHQtdGFiJyB9LFxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdCxcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBtb2R1bGU6ICdMZWFybicgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgcmFpc2VUcmFuc2NyaXB0aW9uVGFiU3RvcFRlbGVtZXRyeSgpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICdjbGljaycsIFwiaWRcIjogXCJhaS10dXRvci12aWV3ZXItcGFnZVwiLCBcInBhZ2VpZFwiOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBzdWJUeXBlOiAndHJhbnNjcmlwdC10YWInIH0sXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkLFxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIG1vZHVsZTogJ0xlYXJuJyB9LFxuICAgICAgZnJvbTogJycsXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXG4gICAgfVxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXG4gIH1cblxuICByYWlzZVRyYW5zY3JpcHRpb25MYW5ndWFnZVN0YXJ0VGVsZW1ldHJ5KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiB0aGlzLnRyYW5zY3JpcHRBY3RpdmVMYW5ndWFnZVRleHQsIFwicGFnZWlkXCI6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIHN1YlR5cGU6ICd0cmFuc2NyaXB0LWxhbmd1YWdlJyB9LFxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQsXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuQ2hhdGJvdCxcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgfSxcbiAgICAgIHBhZ2VDb250ZXh0OiB7IHBhZ2VJZDogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgbW9kdWxlOiAnTGVhcm4nIH0sXG4gICAgICBmcm9tOiAnJyxcbiAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcbiAgICB9XG4gICAgdGhpcy5ldmVudFN2Yy5kaXNwYXRjaENoYXRib3RFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0PihldmVudClcbiAgfVxuXG4gIHJhaXNlVHJhbnNjcmlwdGlvbkxhbmd1YWdlSW50ZXJhY3RUZWxlbWV0cnkoKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxuICAgICAgZGF0YToge1xuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IHRoaXMudHJhbnNjcmlwdEFjdGl2ZUxhbmd1YWdlVGV4dCwgXCJwYWdlaWRcIjogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgc3ViVHlwZTogJ3RyYW5zY3JpcHQtbGFuZ3VhZ2UnIH0sXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkludGVyYWN0LFxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIG1vZHVsZTogJ0xlYXJuJyB9LFxuICAgICAgZnJvbTogJycsXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXG4gICAgfVxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXG4gIH1cblxuICByYWlzZVRyYW5zY3JpcHRpb25MYW5ndWFnZVN0b3BUZWxlbWV0cnkoKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxuICAgICAgZGF0YToge1xuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IHRoaXMudHJhbnNjcmlwdEFjdGl2ZUxhbmd1YWdlVGV4dCwgXCJwYWdlaWRcIjogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgc3ViVHlwZTogJ3RyYW5zY3JpcHQtbGFuZ3VhZ2UnIH0sXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkLFxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIG1vZHVsZTogJ0xlYXJuJyB9LFxuICAgICAgZnJvbTogJycsXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXG4gICAgfVxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXG4gIH1cblxuICBjbG9zZUFJUG9wdXAoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5zaG93QUlUdXRvclBvcHVwID0gZmFsc2VcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDBcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5yZXNvdXJjZUlkZW50aWZpZXIkKSB7XG4gICAgICB0aGlzLnJlc291cmNlSWRlbnRpZmllciQudW5zdWJzY3JpYmUoKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnN1YlRpdGxlcyQpIHtcbiAgICAgIHRoaXMuc3ViVGl0bGVzJC51bnN1YnNjcmliZSgpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNyaXB0aW9uTGFuZ3VhZ2VTdWIpIHtcbiAgICAgIHRoaXMudHJhbnNyaXB0aW9uTGFuZ3VhZ2VTdWIudW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyQ29tbWVudElkRnJvbVVybCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50UXVlcnlQYXJhbXMgPSB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfVxuICAgIGRlbGV0ZSBjdXJyZW50UXVlcnlQYXJhbXMuY29tbWVudElkXG4gICAgdGhpcy5jb21tZW50SWQgPSAnJ1xuICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uc2hvdyA9IHRydWVcbiAgfVxuXG4gIHJlc3VtZUNvbnRlbnRDYWxsKCkge1xuICAgIHRoaXMucmVzdW1lQ29udGVudC5lbWl0KClcbiAgfVxufSIsIjwhLS0gJiYgKGNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5ICE9PSBjb3Vyc2VDYXRlZ29yeT8uQkxFTkRFRF9QUk9HUkFNKSAtLT5cbjxkaXYgY2xhc3M9XCJhaS10dXRvci1nZXQtc3RhcnRlZFwiICpuZ0lmPVwiIXZpZXdlclBhZ2UgJiYgZW5hYmxlQUlUdXRvckZsYWcgJiYgIWlzTW9iaWxlXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB5LTJcIj5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2JvdC1jaGF0LXNtYWxsLnN2Z1wiIGhlaWdodD1cIjY0cHhcIiB3aWR0aD1cIjY0cHhcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMlwiIFtuZ0NsYXNzXT1cImlzTW9iaWxlID8gJycgOiAndy01NjUnXCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LXdlaWdodC02MDBcIj5HZXQgU3RhcnRlZCB3aXRoIEFJIFR1dG9yPC9wPlxuICAgICAgICAgICAgICAgIDxzcGFuPkdldCBpbnN0YW50IGV4cGxhbmF0aW9ucywgc3RlcC1ieS1zdGVwIGxlYXJuaW5nIGd1aWRhbmNlLCBhbmQgY3VzdG9taXNlZCBsZWFybmluZyB0YWlsb3JlZCBqdXN0XG4gICAgICAgICAgICAgICAgICAgIGZvciB5b3UuPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktdHV0b3ItYnRuIHB4LTIgcHktMVwiPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwic2hvd0FpVHV0b3JDb25maXJtUG9wdXAoKVwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9haS10dXRvci9haS1pY29uLnN2Z1wiPiZuYnNwOyAmbmJzcDsgPHNwYW4gY2xhc3M9XCJhaS10dXRvci1sYWJlbFwiPkFJIFR1dG9yPC9zcGFuPjwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInRhYi1ncm91cC1jb250YWluZXJcIj5cbiAgICA8bWF0LXRhYi1ncm91cCAoc2VsZWN0ZWRUYWJDaGFuZ2UpPVwiaGFuZGxlVGFiQ2hhbmdlKCRldmVudClcIiAjc3RpY2t5TWVudSBbY2xhc3Muc3RpY2t5LW1hdC10YWJzXT1cInN0aWNreVwiXG4gICAgICAgIFtzZWxlY3RlZEluZGV4XT1cInNlbGVjdGVkVGFiSW5kZXhcIiBbbmdDbGFzc109XCJ7J2NvbnRlbnQtdGFicyc6IWZyb21WaWV3ZXIsJ2NvbnRlbnRTdGlja3knOiBmb3JQcmV2aWV3fVwiPlxuXG4gICAgICAgIDwhLS0gVHJhbnNjcmlwdGlvbiBUYWIgLS0+XG4gICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiVHJhbnNjcmlwdGlvblwiXG4gICAgICAgICAgICAqbmdJZj1cInZpZXdlclBhZ2UgJiYgZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgJiYgdnR0TGFuZ0Fycj8ubGVuZ3RoICYmIHN1YlRpdGxlcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+VHJhbnNjcmlwdDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWQtY2lyY2xlIG1sLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIE5ld1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXNjbGFpbWVyIG15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJweS0yIHB4LTJcIj5EaXNjbGFpbWVyIDogVGhlc2UgdHJhbnNjcmlwdHMgYW5kIHN1YnRpdGxlcyBhcmUgQUktZ2VuZXJhdGVkIGFuZCBtYXkgY29udGFpblxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLjwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1sLTUgbXItNVwiICpuZ0lmPVwiaXNNb2JpbGVGb3JBSVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJhbnNjcmlwdC1mbGV4LWNvbnRhaW5lciBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0XCIgYXBwZWFyYW5jZT1cImZpbGxcIiBzdHlsZT1cImhlaWdodDogYXV0bzsgd2lkdGg6IDEwMCU7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdExhYmVsPVwibmV2ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cIm11bHRpbGluZS1zZWxlY3QtYm94IHByLTVcIiBbKHZhbHVlKV09XCJzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwicmVuZGVyU2VsZWN0ZWRMYW5ndWFnZVRyYW5zY3JpcHRpb24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyIGNsYXNzPVwibXVsdGlsaW5lLXNlbGVjdC1ib3gtdHJpZ2dlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLW9wdGlvbi1jb250ZW50IHB4LTUgcHktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSA9PT0gc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/LmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5UcmFuc2NyaXB0IExhbmd1YWdlOiA8L2I+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYW5ndWFnZSB8IHRpdGxlY2FzZX19IDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRlZmF1bHRUcmFuc2NyaXB0TGFuZ3VhZ2UgPT09IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYWJlbFwiPihBdXRvKTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0LW9wdGlvblwiIHZhbHVlPVwiXCIgKm5nRm9yPVwibGV0IGxhbmcgb2YgdnR0TGFuZ0FyclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibGFuZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZS1vcHRpb24nOiBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFiZWwgPT09IGxhbmc/LmxhYmVsfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3tsYW5nPy5sYW5ndWFnZSB8IHRpdGxlY2FzZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC00IGZsZXggZmxleC1yb3cganVzdGlmeS1lbmQgdHJhbnNjcmlwdC1jb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbWF0TmF0aXZlQ29udHJvbCByZXF1aXJlZCBjbGFzcz1cInNlY3Rpb24tZGRcIiAoY2hhbmdlKT1cInJlbmRlclNlbGVjdGVkTGFuZ3VhZ2VUcmFuc2NyaXB0aW9uKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImxhbmc/Lmxhbmd1YWdlXCIgKm5nRm9yPVwibGV0IGxhbmcgb2YgdnR0TGFuZ0FyclwiIFtzZWxlY3RlZF09XCJsYW5nPy5sYWJlbCA9PT0gdHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSA9PT0gbGFuZz8ubGFiZWxcIj4gVHJhbnNjcmlwdCBMYW5ndWFnZTogPC9zcGFuPiB7e2xhbmc/Lmxhbmd1YWdlIHwgdGl0bGVjYXNlfX0gPHNwYW4gKm5nSWY9XCJ0cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPT09IGxhbmc/Lmxhbmd1YWdlXCI+KEF1dG8pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiIWlzTW9iaWxlRm9yQUkgPyAndy1zdWJ0aXRsZS04MCc6J3ctZnVsbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIiFpc01vYmlsZUZvckFJID8gJ21sLTUtcGVyJyA6ICcnXCIgKm5nSWY9XCJzdWJUaXRsZXMgJiYgc3ViVGl0bGVzPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUcmFuc2NyaXB0aW9uIGNvbnRlbnQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1YnRpdGxlIG9mIHN1YlRpdGxlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgIG15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VidGl0bGUtdGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJwbGF5RnJvbVNsb3Qoc3VidGl0bGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwci0xIGJsdWUtdW5kZXJsaW5lXCI+IHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdE1zVG9WdHRUaW1lKHN1YnRpdGxlPy5zdGFydFRpbWUpIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJsYWNrLXRleHRcIj4tPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMSBibHVlLXVuZGVybGluZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdE1zVG9WdHRUaW1lKHN1YnRpdGxlPy5lbmRUaW1lKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC00IHN1YnRpdGxlLXRleHQtc2xvdCBtci00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImJsYWNrLXRleHRcIiBbaW5uZXJIdG1sXT1cInN1YnRpdGxlPy50ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhpZ2hsaWdodCA6IGtleXdvcmRUb0hpZ2hsaWdodD8udGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoKHN1YnRpdGxlPy5zdGFydFRpbWUgLyAxMDAwKSA+PSBrZXl3b3JkVG9IaWdobGlnaHQ/LnN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHN1YnRpdGxlPy5lbmRUaW1lIC8gMTAwMCkgPD0ga2V5d29yZFRvSGlnaGxpZ2h0Py5lbmQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1zdWJ0aXRsZS0yMFwiICpuZ0lmPVwiIWlzTW9iaWxlRm9yQUlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJhbnNjcmlwdC1mbGV4LWNvbnRhaW5lciBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm11bHRpbGluZS1zZWxlY3RcIiBhcHBlYXJhbmNlPVwiZmlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogYXV0bzsgd2lkdGg6IDEwMCU7XCIgZmxvYXRMYWJlbD1cIm5ldmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cIm11bHRpbGluZS1zZWxlY3QtYm94IHByLTVcIiBbKHZhbHVlKV09XCJzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJyZW5kZXJTZWxlY3RlZExhbmd1YWdlVHJhbnNjcmlwdGlvbigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciBjbGFzcz1cIm11bHRpbGluZS1zZWxlY3QtYm94LXRyaWdnZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLW9wdGlvbi1jb250ZW50IHB4LTUgcHktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+PHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPT09IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5UcmFuc2NyaXB0IExhbmd1YWdlOiA8L2I+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/Lmxhbmd1YWdlIHwgdGl0bGVjYXNlfX0gPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZWZhdWx0VHJhbnNjcmlwdExhbmd1YWdlID09PSBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFiZWxcIj4oQXV0byk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0LW9wdGlvblwiIHZhbHVlPVwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxhbmcgb2YgdnR0TGFuZ0FyclwiIFt2YWx1ZV09XCJsYW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUtb3B0aW9uJzogc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/LmxhYmVsID09PSBsYW5nPy5sYWJlbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e2xhbmc/Lmxhbmd1YWdlIHwgdGl0bGVjYXNlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbXktMlwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwPjAuMDA8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+QUkgZm9yIERpZ2l0YWwgVHJhbnNmb3JtYXRpb246IE1hY2hpbmUgTGVhcm5pbmcgYW5kIERlZXAgTGVhcm5pbmcgIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nIGVsaXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0LiBEdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpdCBpbiB2b2x1cHRhdGUgdmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxsYSBwYXJpYXR1ci4gRXhjZXB0ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZGVudCwgc3VudCBpbiBjdWxwYSBxdWkgb2ZmaWNpYSBkZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bS48L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG1hdE5hdGl2ZUNvbnRyb2wgcmVxdWlyZWQgY2xhc3M9XCJzZWN0aW9uLWRkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlRyYW5zY3JpcHRpb24gTGFuZ3VhZ2U6IEVuZ2xpc2ggKEF1dG8pPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tYXQtdGFiPlxuXG4gICAgICAgIDwhLS0gQWJvdXQgVGFiIC0tPlxuICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLmFib3V0JyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXR1dG9yLWdldC1zdGFydGVkLW1vYmlsZSBteS0yIG1sLTJcIiAqbmdJZj1cIiF2aWV3ZXJQYWdlICYmIGVuYWJsZUFJVHV0b3JGbGFnICYmIGlzTW9iaWxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciB3LTk4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBweS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYm90LWNoYXQtc21hbGwuc3ZnXCIgaGVpZ2h0PVwiNDhweFwiIHdpZHRoPVwiNDhweFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciB3LTYwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LXdlaWdodC02MDBcIj5HZXQgU3RhcnRlZCB3aXRoIEFJIFR1dG9yPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5HZXQgaW5zdGFudCBleHBsYW5hdGlvbnMsIHN0ZXAtYnktc3RlcCBsZWFybmluZyBndWlkYW5jZSwgYW5kIGN1c3RvbWlzZWQgbGVhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWxvcmVkIGp1c3QgZm9yIHlvdS48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXR1dG9yLWJ0biBweC0yIHB5LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cInNob3dBaVR1dG9yQ29uZmlybVBvcHVwKClcIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvYWktdHV0b3IvYWktaWNvbi5zdmdcIj4mbmJzcDsgJm5ic3A7IDxzcGFuIGNsYXNzPVwiYWktdHV0b3ItbGFiZWxcIj5BSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHV0b3I8L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgbXktMiBteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS10dXRvci1idG4gcHgtMiBweS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cInNob3dBaVR1dG9yQ29uZmlybVBvcHVwKClcIj48aW1nIHNyYz1cImFzc2V0cy9haS10dXRvci9haS1pY29uLnN2Z1wiPiZuYnNwOyAmbmJzcDsgPHNwYW4gY2xhc3M9XCJhaS10dXRvci1sYWJlbFwiPkFJIFR1dG9yPC9zcGFuPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtYXBwLXRvYy1hYm91dCBbZnJvbVZpZXdlcl09XCJmcm9tVmlld2VyXCIgW3BhdGhTZXRdPVwicGF0aFNldFwiIFtjb250ZW50XT1cImNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbY29udGVudFJlYWREYXRhXT1cImNvbnRlbnRSZWFkRGF0YVwiIFtiYXNlQ29udGVudFJlYWREYXRhXT1cImJhc2VDb250ZW50UmVhZERhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbdG9jU3RydWN0dXJlXT1cInRvY1N0cnVjdHVyZVwiIFtjb25maWddPVwiY29uZmlnXCIgW2ZvclByZXZpZXddPVwiZmFsc2VcIiBbc3RpY2t5XT1cInN0aWNreVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEJhdGNoRGF0YV09XCJzZWxlY3RlZEJhdGNoRGF0YVwiIFtzZWxlY3RlZFRhYlZhbHVlXT1cInNlbGVjdGVkVGFiSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbcmVzdW1lRGF0YV09XCJyZXN1bWVEYXRhXCIgW2JhdGNoRGF0YV09XCJiYXRjaERhdGFcIiBbc2tlbGV0b25Mb2FkZXJdPVwic2tlbGV0b25Mb2FkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY29uZGl0aW9uXT1cImNvbmRpdGlvblwiIFtrcGFycmF5XT1cImtwYXJyYXlcIiBbc2hvd1Jldmlld3NdPVwiJ3RydWUnXCIgW2xhbmd1YWdlTGlzdF09XCJsYW5ndWFnZUxpc3RcIlxuICAgICAgICAgICAgICAgICAgICBbbG9ja0NlcnRpZmljYXRlXT1cImxvY2tDZXJ0aWZpY2F0ZVwiICh0cmlnZXJDb21wbGV0aW9uU3VydmV5Rm9ybSk9XCJvcGVuU3VydmV5Rm9ybVBvcHVwKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1hcHAtdG9jLWFib3V0PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tYXQtdGFiPlxuXG4gICAgICAgIDwhLS0gQ29udGVudCBUYWIgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50Py5jaGlsZHJlbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLmNvbnRlbnQnIHwgdHJhbnNsYXRlIH19XCIgKm5nSWY9XCJjb250ZW50VGFiRmxhZ1wiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWFwcC10b2MtY29udGVudCBbYmF0Y2hJZF09XCJiYXRjaElkXCIgW2NvbXBvbmVudE5hbWVdPVwiY29tcG9uZW50TmFtZVwiIFtwYXRoU2V0XT1cInBhdGhTZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiY29udGVudFwiIFt0b2NTdHJ1Y3R1cmVdPVwidG9jU3RydWN0dXJlXCIgW2NvbmZpZ109XCJjb25maWdcIiBbZm9yUHJldmlld109XCJmb3JQcmV2aWV3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bWVEYXRhXT1cInJlc3VtZURhdGFcIiBbYmF0Y2hEYXRhXT1cImJhdGNoRGF0YVwiIFtza2VsZXRvbkxvYWRlcl09XCJza2VsZXRvbkxvYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGllcmFyY2h5TWFwRGF0YV09XCJoaWVyYXJjaHlNYXBEYXRhXCIgW2Jhc2VDb250ZW50UmVhZERhdGFdPVwiYmFzZUNvbnRlbnRSZWFkRGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1hcHAtdG9jLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZz8uY29tbWVudHNUYWIgJiYgIWZvclByZXZpZXdcIj5cbiAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwie3sgJ2FwcHRvY3NpbmdsZXBhZ2Uuc3RhcnREaXNjdXNzaW9uJyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCByYXRpbmdzLWRpdiBtdC01XCIgaWQ9XCJjb21tZW50c0RpdlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRpc2N1c3NXaWRnZXREYXRhICYmIGRpc2N1c3NXaWRnZXREYXRhPy5uZXdDb21tZW50U2VjdGlvbj8uY29tbWVudFRyZWVEYXRhPy5lbnRpdHlJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb21tZW50SWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZC12Mi13aWRnZXQtY29tbWVudCBbd2lkZ2V0RGF0YV09XCJkaXNjdXNzV2lkZ2V0RGF0YVwiPjwvZC12Mi13aWRnZXQtY29tbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbW1lbnRJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0zIGN1cnNvci1wb2ludGVyIG1iLTVcIiAoY2xpY2spPVwiY2xlYXJDb21tZW50SWRGcm9tVXJsKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5hcnJvd19iYWNrPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFjayB0byBhbGwgY29tbWVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZC12Mi13aWRnZXQtY29tbWVudCBbd2lkZ2V0RGF0YV09XCJkaXNjdXNzV2lkZ2V0RGF0YVwiIFtjb21tZW50SWRdPVwiY29tbWVudElkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NrZWxldG9uTG9hZGVyXT48L2QtdjItd2lkZ2V0LWNvbW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnPy5zYW11aGlrQ2hhcmNoYVRhYiAmJiBjb25kaXRpb24gJiYgY29udGVudFJlYWREYXRhPy5ldmVudExpbmtlZD8ubGVuZ3RoID4gMCAmJiBlbmFibGVTYW11aGlrQ2hhcmNoYVRhYlwiPlxuICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJ7eyAnYXBwdG9jc2luZ2xlcGFnZS5zYW11aGlrQ2hhcmNoYScgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcmF0aW5ncy1kaXYgbXQtNVwiIGlkPVwic2FtdWhpa0NoYXJjaGFEaXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2FtdWhpay1jaGFyY2hhLWNvbnRlbnQgW2NvbnRlbnRdPVwiY29udGVudFJlYWREYXRhXCIgW2NvbmRpdGlvbkRhdGFdPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVzdW1lQ29udGVudCk9XCJyZXN1bWVDb250ZW50Q2FsbCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1zYW11aGlrLWNoYXJjaGEtY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBUZWFjaGVycyBOb3RlIFRhYiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8ucmVmZXJlbmNlTm9kZXMgJiYgdGVhY2hlck5vdGVzRmxhZ1wiPlxuICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJUZWFjaGVycyBOb3RlXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJhdGluZ3MtZGl2IG10LTVcIiBpZD1cInRlYWNoZXJzTm90ZURpdlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1hcHAtdG9jLXRlYWNoZXJzLW5vdGVzIFtjb250ZW50XT1cImNvbnRlbnRSZWFkRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vdGVzRGlzcGxheVR5cGVdPVwiJ1RlYWNoZXJzIFJlc291cmNlJ1wiPjwvd3Mtd2lkZ2V0LWFwcC10b2MtdGVhY2hlcnMtbm90ZXM+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gUmVmZXJlbmNlIE5vdGUgVGFiIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5yZWZlcmVuY2VOb2RlcyAmJiByZWZlcmVuY2VOb3Rlc0ZsYWdcIj5cbiAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiUmVmZXJlbmNlIE5vdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcmF0aW5ncy1kaXYgbXQtNVwiIGlkPVwidGVhY2hlcnNOb3RlRGl2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWFwcC10b2MtdGVhY2hlcnMtbm90ZXMgW2NvbnRlbnRdPVwiY29udGVudFJlYWREYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm90ZXNEaXNwbGF5VHlwZV09XCInUmVmZXJlbmNlIFJlc291cmNlJ1wiPjwvd3Mtd2lkZ2V0LWFwcC10b2MtdGVhY2hlcnMtbm90ZXM+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHdzLXdpZGdldC1hcHAtdG9jLXJlZmVyZW5jZS1ub3RlcyBbY29udGVudF09XCJjb250ZW50UmVhZERhdGFcIj48L3dzLXdpZGdldC1hcHAtdG9jLXJlZmVyZW5jZS1ub3Rlcz4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93QXNzaWdubWVudHNUYWIgJiYgIWZvclByZXZpZXdcIj5cbiAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwie3sgJ2FwcHRvY3NpbmdsZXBhZ2UuYXNzaWdubWVudHMnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJhdGluZ3MtZGl2IG10LTVcIiBpZD1cInRha2VBc3Nlc3NtZW50RGl2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWFwcC1iYXRjaC1hc3NpZ25tZW50cyBbY29udGVudF09XCJjb250ZW50XCI+PC93cy13aWRnZXQtYXBwLWJhdGNoLWFzc2lnbm1lbnRzPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFRyYW5zY3JpcHRpb24gVGFiIC0tPlxuICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkFJIFR1dG9yXCIgKm5nSWY9XCJ2aWV3ZXJQYWdlICYmIGVuYWJsZUFJVHV0b3JGbGFnICYmIGlzTW9iaWxlXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgVHV0b3I8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVkLWNpcmNsZSBtbC01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBOZXdcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0FJVHV0b3JQb3B1cFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHZpZXdlci1haS10dXRvciBbY29udGVudF09XCJjb250ZW50Py5pZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xvc2VBSVBvcHVwKT1cImNsb3NlQUlQb3B1cCgkZXZlbnQpXCI+PC92aWV3ZXItYWktdHV0b3I+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tYXQtdGFiPlxuICAgIDwvbWF0LXRhYi1ncm91cD5cbjwvZGl2PiJdfQ==
829
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC10b2MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvY29udGVudC10b2MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvY29udGVudC10b2MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQTRCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFakwsT0FBTyxFQUF1RCxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQU1wRyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQTtBQUN4RyxPQUFPLEVBQWdDLHFCQUFxQixJQUFJLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3hILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFBO0FBRzNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBRS9DLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFBO0FBQzNCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9wRCxNQUFNLE9BQU8sbUJBQW1CO0lBcUU5QixZQUNVLEtB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SztnQkFDSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBbVZQLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UsIEV2ZW50U2VydmljZSwgVXRpbGl0eVNlcnZpY2UsIFdzRXZlbnRzIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuXG5pbXBvcnQgeyBMb2FkQ2hlY2tTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbG9hZC1jaGVjay5zZXJ2aWNlJ1xuaW1wb3J0IHsgTWF0TGVnYWN5VGFiR3JvdXAgYXMgTWF0VGFiR3JvdXAsIE1hdExlZ2FjeVRhYkNoYW5nZUV2ZW50IGFzIE1hdFRhYkNoYW5nZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LXRhYnMnXG5pbXBvcnQgeyBOc0Rpc2N1c3Npb25WMiB9IGZyb20gJ0BzdW5iaXJkLWNiL2Rpc2N1c3Npb24tdjInXG5pbXBvcnQgeyBBaVR1dG9yQ29uZmlybVBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi9haS10dXRvci1jb25maXJtLXBvcHVwL2FpLXR1dG9yLWNvbmZpcm0tcG9wdXAuY29tcG9uZW50J1xuaW1wb3J0IHsgTWF0TGVnYWN5RGlhbG9nIGFzIE1hdERpYWxvZywgTWF0TGVnYWN5RGlhbG9nQ29uZmlnIGFzIE1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnXG5pbXBvcnQgeyB2aWV3ZXJSb3V0ZUdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcy92aWV3ZXItcm91dGUtdXRpbCdcbmltcG9ydCB7IEFwcFRvY1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHAtdG9jLnNlcnZpY2UnXG5pbXBvcnQgeyBBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWN0aW9uLnNlcnZpY2UnXG5pbXBvcnQgeyBWdHRGaWxlIH0gZnJvbSAnQHBvbHlmbGl4L3Z0dC1wYXJzZXInXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IFZpZXdlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdmlld2VyLWRhdGEuc2VydmljZSdcbmltcG9ydCB7IE1hdFRhYiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnXG5pbXBvcnQgeyBTYW11aGlrQ2hhcmNoYVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fc2VydmljZXMvc2FtdWhpay1jaGFyY2hhLnNlcnZpY2UnXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4uLy4uLy4uL19jb2xsZWN0aW9uLWFwaSdcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dzLXdpZGdldC1jb250ZW50LXRvYycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZW50LXRvYy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQtdG9jLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuXG5leHBvcnQgY2xhc3MgQ29udGVudFRvY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblxuICB0YWJDaGFuZ2VWYWx1ZTogYW55ID0gJydcbiAgQElucHV0KCkgY29udGVudCE6IGFueVxuICBASW5wdXQoKSBjb250ZW50UmVhZERhdGEhOiBhbnlcbiAgQElucHV0KCkgaW5pdGlhbFJvdXRlRGF0YTogYW55XG4gIEBJbnB1dCgpIGNoYW5nZVRhYiA9IGZhbHNlXG4gIEBJbnB1dCgpIGJhc2VDb250ZW50UmVhZERhdGEhOiBhbnlcbiAgcm91dGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXG4gIEBJbnB1dCgpIGZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnJnByZXZpZXc9dHJ1ZScpXG4gIEBJbnB1dCgpIGNvbnRlbnRUYWJGbGFnID0gdHJ1ZVxuICBASW5wdXQoKSByZXN1bWVEYXRhOiBhbnkgfCBudWxsID0gbnVsbFxuICBASW5wdXQoKSBiYXRjaERhdGE6IC8qKk5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2UgKi8gYW55IHwgbnVsbCA9IG51bGxcbiAgQElucHV0KCkgc2tlbGV0b25Mb2FkZXIgPSBmYWxzZVxuICBASW5wdXQoKSB0b2NTdHJ1Y3R1cmU6IGFueSA9IHt9XG4gIEBJbnB1dCgpIHBhdGhTZXQ6IGFueVxuICBASW5wdXQoKSBmcm9tVmlld2VyID0gZmFsc2VcbiAgQElucHV0KCkgaGllcmFyY2h5TWFwRGF0YTogYW55ID0ge31cbiAgQFZpZXdDaGlsZCgnc3RpY2t5TWVudScpIHRhYkVsZW1lbnQhOiBNYXRUYWJHcm91cFxuICBAVmlld0NoaWxkcmVuKE1hdFRhYikgdGFicyE6IFF1ZXJ5TGlzdDxNYXRUYWI+XG4gIEBJbnB1dCgpIGNvbmRpdGlvbjogYW55XG4gIEBJbnB1dCgpIGtwYXJyYXk6IGFueVxuICBASW5wdXQoKSBzZWxlY3RlZEJhdGNoRGF0YTogYW55XG4gIEBJbnB1dCgpIGNvbmZpZzogYW55XG4gIEBJbnB1dCgpIGNvbXBvbmVudE5hbWUhOiBzdHJpbmdcbiAgQElucHV0KCkgaXNFbnJvbGxlZCE6IGJvb2xlYW5cbiAgQElucHV0KCkgcGxheVJlc291cmNlSWQgPSAnJ1xuICBASW5wdXQoKSBzaWRlTmF2QmFyT3BlbmVkID0gZmFsc2VcbiAgQElucHV0KCkgbGFuZ3VhZ2VMaXN0ID0gW11cbiAgQElucHV0KCkgbG9ja0NlcnRpZmljYXRlID0gZmFsc2VcbiAgQE91dHB1dCgpIHBsYXlSZXN1bWVGb3JBSSA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgZW5yb2xsVXNlclRvQUkgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIHRyaWdlckNvbXBsZXRpb25TdXJ2ZXlGb3JtID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpXG4gIEBPdXRwdXQoKSByZXN1bWVDb250ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpXG5cbiAgY29tbWVudElkPzogc3RyaW5nID0gJydcbiAgc3RpY2t5ID0gZmFsc2VcbiAgbWVudVBvc2l0aW9uOiBhbnlcbiAgaXNNb2JpbGUgPSBmYWxzZVxuICBzZWxlY3RlZFRhYkluZGV4ID0gMFxuICBkaXNjdXNzV2lkZ2V0RGF0YSE6IE5zRGlzY3Vzc2lvblYyLklDb21tZW50V2lkZ2V0RGF0YVxuICB0ZWFjaGVyTm90ZXNGbGFnID0gZmFsc2VcbiAgcmVmZXJlbmNlTm90ZXNGbGFnID0gZmFsc2VcbiAgdmlld2VyUGFnZSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvdmlld2VyLycpID8gdHJ1ZSA6IGZhbHNlXG4gIHJlc3VtZURhdGFMaW5rOiBhbnlcbiAgZW5hYmxlQUlUdXRvckZsYWcgPSBmYWxzZVxuICBlbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IGZhbHNlXG4gIGNvdXJzZUNhdGVnb3J5ID0gTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeVxuICBzdWJUaXRsZXMkOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxuICByZXNvdXJjZUlkZW50aWZpZXI6IGFueVxuICByZXNvdXJjZUlkZW50aWZpZXIkOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxuICBzdWJUaXRsZXM6IGFueSA9IFtdXG4gIGtleXdvcmRUb0hpZ2hsaWdodDogYW55ID0gJydcbiAgaGlnaGxpZ2h0Q29uZGl0aW9uID0gZmFsc2VcbiAgdnR0TGFuZ0FycjogYW55ID0gW11cbiAgdHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID0gJ2VuJ1xuICBkZWZhdWx0VHJhbnNjcmlwdExhbmd1YWdlID0gJ2VuJ1xuICB0cmFuc3JpcHRpb25MYW5ndWFnZVN1YjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGxcbiAgc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU6IGFueVxuICBmcm9tQUlUdXRvciA9IGZhbHNlXG4gIHRvdGFsUmVzb3VyY2UgPSAwXG4gIHNjb3JtQXNzZXNzbWVudENvdW50ID0gMFxuICBzaG93QUlUdXRvclBvcHVwID0gZmFsc2VcbiAgZnJvbUFJU2VsZWN0ZWRUYWJJbmRleCA9IGZhbHNlXG4gIGlzTW9iaWxlRm9yQUkgPSBmYWxzZVxuICB0cmFuc2NyaXB0QWN0aXZlTGFuZ3VhZ2VUZXh0ID0gJ0VuZ2xpc2gnXG4gIHNob3dBc3NpZ25tZW50c1RhYiA9IGZhbHNlXG4gIGVuYWJsZVNhbXVoaWtDaGFyY2hhVGFiID0gZmFsc2VcbiAgc2FtdWhpa0NvbmZpZzogYW55XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9hZENoZWNrU2VydmljZTogTG9hZENoZWNrU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHVibGljIHRvY1N2YzogQXBwVG9jU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGlvblNWQzogQWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZXZlbnRTdmM6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHZpZXdlckRhdGFTdmM6IFZpZXdlckRhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FtdWhpa0NoYXJjaGFTdmM6IFNhbXVoaWtDaGFyY2hhU2VydmljZSxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueVxuXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvciAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yPy5hbGwpIHtcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSB0aGlzLm9ubHlzY29ybUFzc2Vzc21lbnRFeGlzdHModGhpcy5yb3V0ZS5zbmFwc2hvdD8uZGF0YT8uY29udGVudD8uZGF0YT8uY2hpbGRyZW4sICdtaW1lVHlwZScsIFsnYXBwbGljYXRpb24vdm5kLmVrc3RlcC5odG1sLWFyY2hpdmUnLCAnYXBwbGljYXRpb24vdm5kLnN1bmJpcmQucXVlc3Rpb25zZXQnLCAnYXBwbGljYXRpb24vanNvbicsICd0ZXh0L3gtdXJsJ10pXG4gICAgICAvLyB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LmFpVHV0b3I/LmZvck9yZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnLmFpVHV0b3I/LmZvck9yZz8ubGVuZ3RoICYmXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yPy5mb3JPcmcuaW5jbHVkZXModGhpcy5jb25maWdTZXJ2aWNlLnVzZXJQcm9maWxlPy5yb290T3JnSWQpXG4gICAgKSB7XG4gICAgICB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdGhpcy5vbmx5c2Nvcm1Bc3Nlc3NtZW50RXhpc3RzKHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmNvbnRlbnQ/LmRhdGE/LmNoaWxkcmVuLCAnbWltZVR5cGUnLCBbJ2FwcGxpY2F0aW9uL3ZuZC5la3N0ZXAuaHRtbC1hcmNoaXZlJywgJ2FwcGxpY2F0aW9uL3ZuZC5zdW5iaXJkLnF1ZXN0aW9uc2V0JywgJ2FwcGxpY2F0aW9uL2pzb24nLCAndGV4dC94LXVybCddKVxuICAgICAgLy8gdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IGZhbHNlXG4gICAgfVxuICAgICBpZih0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmNvdXJzZUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LkxFQVJOSU5HX1BBVEhXQVkpIHtcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSBmYWxzZVxuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5hbGwpIHtcbiAgICAgIC8vIHRoaXMucmVzb3VyY2VJZGVudGlmaWVyJCA9IHRoaXMudG9jU3ZjLnRyYW5zcmlwdGlvbklkZW50aWZpZXIuc3Vic2NyaWJlKCh2YWx1ZTphbnkpPT57XG4gICAgICAvLyAgIGlmKHZhbHVlICYmICB2YWx1ZT8uaWRlbnRpZmllcikge1xuICAgICAgLy8gICAgIHRoaXMucmVzb3VyY2VJZGVudGlmaWVyID0gdmFsdWU/LmlkZW50aWZpZXIgLy92YWx1ZT8uaWRlbnRpZmllciAvLyBkb18xMTM4ODkxMTk4NDg5MDY3NTIxMTQ3XG4gICAgICAvLyAgICAgdGhpcy5wYXJzZVZUVCgpXG4gICAgICAvLyAgIH1cblxuICAgICAgLy8gfSlcblxuICAgICAgdGhpcy5zdWJUaXRsZXMkID0gdGhpcy50b2NTdmMudHJhbnNjcmlwdGlvbkRhdGEkLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmtleXdvcmRUb0hpZ2hsaWdodCA9IHZhbHVlXG4gICAgICB9KVxuXG4gICAgICB0aGlzLnRyYW5zcmlwdGlvbkxhbmd1YWdlU3ViID0gdGhpcy50b2NTdmMudHJhbnNyaXB0aW9uQWN0aXZlTGFuZ3VhZ2VEYXRhT2JqZWN0JFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKGxhbmd2YWx1ZTogYW55KSA9PiBjb25zb2xlLmxvZygndGFwIGxhbmd2YWx1ZTonLCBsYW5ndmFsdWUpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGxhbmd2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGxhbmd2YWx1ZSkge1xuICAgICAgICAgICAgLy8gdGhpcy5yZW5kZXJTZWxlY3RlZExhbmd1YWdlVHJhbnNjcmlwdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9KVxuICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbiAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5mb3JPcmcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbj8uZm9yT3JnPy5sZW5ndGggJiZcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LnRyYW5zY3JpcHRpb24/LmZvck9yZz8uaW5jbHVkZXModGhpcy5jb25maWdTZXJ2aWNlLnVzZXJQcm9maWxlPy5yb290T3JnSWQpXG4gICAgKSB7XG4gICAgICAvLyB0aGlzLnJlc291cmNlSWRlbnRpZmllciQgPSB0aGlzLnRvY1N2Yy50cmFuc3JpcHRpb25JZGVudGlmaWVyLnN1YnNjcmliZSgodmFsdWU6YW55KT0+e1xuICAgICAgLy8gICBpZih2YWx1ZSAmJiAgdmFsdWU/LmlkZW50aWZpZXIpIHtcbiAgICAgIC8vICAgICB0aGlzLnJlc291cmNlSWRlbnRpZmllciA9IHZhbHVlPy5pZGVudGlmaWVyIC8vdmFsdWU/LmlkZW50aWZpZXIgLy8gZG9fMTEzODg5MTE5ODQ4OTA2NzUyMTE0N1xuICAgICAgLy8gICAgIHRoaXMucGFyc2VWVFQoKVxuICAgICAgLy8gICB9XG5cbiAgICAgIC8vIH0pXG5cbiAgICAgIHRoaXMuc3ViVGl0bGVzJCA9IHRoaXMudG9jU3ZjLnRyYW5zY3JpcHRpb25EYXRhJC5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5rZXl3b3JkVG9IaWdobGlnaHQgPSB2YWx1ZVxuICAgICAgfSlcblxuICAgICAgdGhpcy50cmFuc3JpcHRpb25MYW5ndWFnZVN1YiA9IHRoaXMudG9jU3ZjLnRyYW5zcmlwdGlvbkFjdGl2ZUxhbmd1YWdlRGF0YU9iamVjdCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChsYW5ndmFsdWU6IGFueSkgPT4gY29uc29sZS5sb2coJ3RhcCBsYW5ndmFsdWU6JywgbGFuZ3ZhbHVlKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChsYW5ndmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChsYW5ndmFsdWUpIHtcbiAgICAgICAgICAgIC8vIHRoaXMucmVuZGVyU2VsZWN0ZWRMYW5ndWFnZVRyYW5zY3JpcHRpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSlcbiAgICAgIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgPSBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGJhdGNoSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmJhdGNoSWQgP1xuICAgICAgdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5iYXRjaElkIDogJydcbiAgICBpZiAoYmF0Y2hJZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMVxuICAgIH1cbiAgICB0aGlzLmNvbW1lbnRJZCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuY29tbWVudElkID8gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5jb21tZW50SWQgOiAnJ1xuICAgIGlmICh0aGlzLmNvbW1lbnRJZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMlxuICAgIH1cblxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaXNNb2JpbGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzTW9iaWxlXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQ4MCkge1xuICAgICAgdGhpcy5pc01vYmlsZUZvckFJID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTW9iaWxlRm9yQUkgPSBmYWxzZVxuICAgIH1cbiAgICB0aGlzLm1lbnVQb3NpdGlvbiA9IHRoaXMudGFiRWxlbWVudC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcFxuXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwLnN1YnNjcmliZShhc3luYyAocGFyYW1zOiBhbnkpID0+IHtcblxuICAgICAgbGV0IGZyb21BSVR1dG9yID0gcGFyYW1zLmdldCgnZnJvbUFJVHV0b3InKVxuXG4gICAgICBpZiAoKGZyb21BSVR1dG9yID09PSAndHJ1ZScgfHwgZnJvbUFJVHV0b3IgPT09IHRydWUpICYmIHRoaXMuaXNNb2JpbGUpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFic0FycmF5ID0gdGhpcy50YWJzPy50b0FycmF5KClcbiAgICAgICAgICBsZXQgaW5kZXggPSB0YWJzQXJyYXk/LmZpbmRJbmRleCh0YWIgPT4gdGFiLnRleHRMYWJlbC50cmltKCkgPT09IFwiQUkgVHV0b3JcIi50cmltKCkpXG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGluZGV4XG4gICAgICAgICAgICB0aGlzLmZyb21BSVNlbGVjdGVkVGFiSW5kZXggPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9LCAzMDAwKVxuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldCBnZXRDdXJyZW50VGltZUluVVRDKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXG4gICAgY29uc3QgaXNvU3RyaW5nID0gY3VycmVudERhdGUudG9JU09TdHJpbmcoKVxuICAgIHJldHVybiBpc29TdHJpbmcucmVwbGFjZSgnWicsICcrMDAwMCcpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFNhbXVoaWtDb25maWcoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2FtdWhpa0NvbmZpZyA9IGF3YWl0IHRoaXMuc2FtdWhpa0NoYXJjaGFTdmMuZmV0Y2hDb25maWdGaWxlKCkudG9Qcm9taXNlKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcblxuICAgIHRoaXMucmVzb3VyY2VJZGVudGlmaWVyID0gdGhpcy52aWV3ZXJEYXRhU3ZjLnJlc291cmNlSWRcblxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LnRyYW5zY3JpcHRpb24/LmFsbCkge1xuICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbiAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5mb3JPcmcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbj8uZm9yT3JnPy5sZW5ndGggJiZcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LnRyYW5zY3JpcHRpb24/LmZvck9yZz8uaW5jbHVkZXModGhpcy5jb25maWdTZXJ2aWNlPy51c2VyUHJvZmlsZT8ucm9vdE9yZ0lkKVxuICAgICkge1xuICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvciAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnLmFpVHV0b3I/LmFsbCkge1xuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IHRoaXMub25seXNjb3JtQXNzZXNzbWVudEV4aXN0cyh0aGlzLmNvbnRlbnQ/LmNoaWxkcmVuLCAnbWltZVR5cGUnLCBbJ2FwcGxpY2F0aW9uL3ZuZC5la3N0ZXAuaHRtbC1hcmNoaXZlJywgJ2FwcGxpY2F0aW9uL3ZuZC5zdW5iaXJkLnF1ZXN0aW9uc2V0JywgJ2FwcGxpY2F0aW9uL2pzb24nLCAndGV4dC94LXVybCddKVxuICAgICAgLy8gdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvciAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yPy5mb3JPcmcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvcj8uZm9yT3JnPy5sZW5ndGhcbiAgICAgICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcuYWlUdXRvcj8uZm9yT3JnPy5pbmNsdWRlcyh0aGlzLmNvbmZpZ1NlcnZpY2U/LnVzZXJQcm9maWxlPy5yb290T3JnSWQpXG4gICAgKSB7XG4gICAgICB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdGhpcy5vbmx5c2Nvcm1Bc3Nlc3NtZW50RXhpc3RzKHRoaXMuY29udGVudD8uY2hpbGRyZW4sICdtaW1lVHlwZScsIFsnYXBwbGljYXRpb24vdm5kLmVrc3RlcC5odG1sLWFyY2hpdmUnLCAnYXBwbGljYXRpb24vdm5kLnN1bmJpcmQucXVlc3Rpb25zZXQnLCAnYXBwbGljYXRpb24vanNvbicsICd0ZXh0L3gtdXJsJ10pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQuY291cnNlQ2F0ZWdvcnkgPT09IE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuTEVBUk5JTkdfUEFUSFdBWSkge1xuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlc1sncGxheVJlc291cmNlSWQnXSkge1xuICAgICAgaWYgKGNoYW5nZXM/LnBsYXlSZXNvdXJjZUlkPy5wcmV2aW91c1ZhbHVlICE9PSBjaGFuZ2VzPy5wbGF5UmVzb3VyY2VJZD8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdlclBhZ2UgJiYgdGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkICYmIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcpIHtcbiAgICAgICAgICB0aGlzLnBhcnNlVlRUKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5jaGFuZ2VUYWIgJiYgY2hhbmdlcy5jaGFuZ2VUYWIuY3VycmVudFZhbHVlICYmICF0aGlzLmZyb21BSVNlbGVjdGVkVGFiSW5kZXgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDFcbiAgICB9XG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5wYWdlRGF0YSAmJiB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEucGFnZURhdGEuZGF0YSkge1xuICAgICAgdGhpcy5jb25maWcgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEucGFnZURhdGEuZGF0YVxuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZGlzY3Vzc1dpZGdldERhdGEpIHtcbiAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEgPSB0aGlzLmNvbmZpZy5kaXNjdXNzV2lkZ2V0RGF0YVxuICAgICAgaWYgKHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuaWRlbnRpZmllcikge1xuICAgICAgICBpZiAoIXRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudFRyZWVEYXRhLmVudGl0eUlkKSB7XG4gICAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5uZXdDb21tZW50U2VjdGlvbi5jb21tZW50VHJlZURhdGEuZW50aXR5SWQgPSB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuaWRlbnRpZmllclxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbiAmJiB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbi5uZXdDb21tZW50UmVwbHkpIHtcbiAgICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbi5uZXdDb21tZW50UmVwbHkuY29tbWVudFRyZWVEYXRhLmVudGl0eUlkID0gdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLmlkZW50aWZpZXJcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pc0Vucm9sbGVkKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0pIHtcbiAgICAgICAgICB0aGlzLnNob3dBc3NpZ25tZW50c1RhYiA9IHRydWVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmVucm9sbGVkQ29udGVudCA9IHRydWVcbiAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5uZXdDb21tZW50U2VjdGlvbi5jb21tZW50Qm94LnBsYWNlaG9sZGVyID0gJ1N0YXJ0IGEgZGlzY3Vzc2lvbidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEuZW5yb2xsZWRDb250ZW50ID0gZmFsc2VcbiAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5uZXdDb21tZW50U2VjdGlvbi5jb21tZW50Qm94LnBsYWNlaG9sZGVyID0gJ0Vucm9sIHRvIGFkZCB5b3VyIGNvbW1lbnRzJ1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29tbWVudElkKSB7XG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uc2hvdyA9IGZhbHNlXG4gICAgICB9XG4gICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhID0geyAuLi50aGlzLmRpc2N1c3NXaWRnZXREYXRhIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb250ZW50UmVhZERhdGEgJiYgdGhpcy5jb250ZW50UmVhZERhdGE/LmV2ZW50TGlua2VkPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG9yZ0lkID0gXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAndXNlclByb2ZpbGUudXNlclJvb3RPcmcuaWQnLCAnJylcbiAgICAgIGF3YWl0IHRoaXMuZ2V0U2FtdWhpa0NvbmZpZygpXG4gICAgICBjb25zdCBldmVudHNMaW5rZWQgPSB0aGlzLmNvbnRlbnRSZWFkRGF0YS5ldmVudExpbmtlZCB8fCBbXVxuICAgICAgbGV0IGV2ZW50c0RhdGE6IGFueSA9IFtdXG4gICAgICB0aGlzLnNhbXVoaWtDb25maWc/LnN0cmlwc1swXS50YWJzLmZvckVhY2goKGVsZTogYW55KSA9PiB7XG4gICAgICAgIGVsZS5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycy5pZGVudGlmaWVyID0gZXZlbnRzTGlua2VkXG4gICAgICAgIGVsZS5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycy5jcmVhdGVkRm9yID0gW29yZ0lkXVxuICAgICAgICBpZiAoZWxlLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzLmVuZERhdGVUaW1lLmhhc093blByb3BlcnR5KCc+PScpKSB7XG4gICAgICAgICAgZWxlLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzLmVuZERhdGVUaW1lWyc+PSddID0gdGhpcy5nZXRDdXJyZW50VGltZUluVVRDXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZS5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycy5lbmREYXRlVGltZS5oYXNPd25Qcm9wZXJ0eSgnPCcpKSB7XG4gICAgICAgICAgZWxlLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzLmVuZERhdGVUaW1lWyc8J10gPSB0aGlzLmdldEN1cnJlbnRUaW1lSW5VVENcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNhbXVoaWtDaGFyY2hhU3ZjLmdldFNlYXJjaFY2UmVzdWx0cyhlbGUucmVxdWVzdC5zZWFyY2hWNikuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLnJlc3VsdCAmJiByZXMucmVzdWx0LmNvdW50ICYmIHJlcy5yZXN1bHQ/LkV2ZW50ICYmIHJlcy5yZXN1bHQuRXZlbnQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgZXZlID0gMDsgZXZlIDwgcmVzLnJlc3VsdC5FdmVudD8ubGVuZ3RoOyBldmUrKykge1xuICAgICAgICAgICAgICBpZiAocmVzLnJlc3VsdC5FdmVudFtldmVdWydjcmVhdGVkRm9yJ10gJiYgcmVzLnJlc3VsdC5FdmVudFtldmVdWydjcmVhdGVkRm9yJ10ubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgcmVzLnJlc3VsdC5FdmVudFtldmVdWydyZXNvdXJjZVR5cGUnXSA9PT0gJ1NhbXVoaWsgQ2hhcmNoYSdcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGV2ZW50c0RhdGEucHVzaChyZXMucmVzdWx0LkV2ZW50W2V2ZV1bJ2NyZWF0ZWRGb3InXVswXSlcbiAgICAgICAgICAgICAgaWYgKGV2ZW50c0RhdGEuaW5jbHVkZXModGhpcy5jb25maWdTZXJ2aWNlLnVzZXJQcm9maWxlPy5yb290T3JnSWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVTYW11aGlrQ2hhcmNoYVRhYiA9IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb250ZW50UmVhZERhdGEgJiYgdGhpcy5jb250ZW50UmVhZERhdGEucmVmZXJlbmNlTm9kZXMpIHtcbiAgICAgIHRoaXMuY29udGVudFJlYWREYXRhLnJlZmVyZW5jZU5vZGVzLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBsZXQgdXNlclJvbGVzOiBTZXQ8c3RyaW5nPiA9IHRoaXMuY29uZmlnU2VydmljZT8udXNlclJvbGVzIHx8IG5ldyBTZXQoKVxuICAgICAgICBsZXQgaGFzRWR1Y2F0b3JSb2xlID0gZmFsc2VcblxuICAgICAgICAvLyBDaGVjayBpZiB1c2VyIGhhcyBNRU5UT1Igcm9sZVxuICAgICAgICBpZiAodXNlclJvbGVzLmhhcygnTUVOVE9SJykgfHxcbiAgICAgICAgICB1c2VyUm9sZXMuaGFzKCdtZW50b3InKSB8fFxuICAgICAgICAgIHVzZXJSb2xlcy5oYXMoJ01lbnRvcicpKSB7XG4gICAgICAgICAgaGFzRWR1Y2F0b3JSb2xlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgbG9jYWwgc3RvcmFnZSBmb3Igc3VydmV5IHJlc3BvbnNlIG9ubHkgaWYgVVJMIGNvbnRhaW5zICdwdWJsaWMnIG9yICdwcmV2aWV3PXRydWUnXG4gICAgICAgIGlmICghaGFzRWR1Y2F0b3JSb2xlICYmIHRoaXMuZm9yUHJldmlldykge1xuICAgICAgICAgIGNvbnN0IHN1cnZleUlkID0gdGhpcy5lbnZpcm9ubWVudC5wdWJsaWNDb250ZW50U3VydmV5SWQgfHwgJydcbiAgICAgICAgICBjb25zdCBjb3Vyc2VJZCA9IHRoaXMuY29udGVudFJlYWREYXRhPy5pZGVudGlmaWVyIHx8ICcnXG4gICAgICAgICAgY29uc3Qgc3RvcmFnZUtleSA9IGBzdXJ2ZXlfJHtzdXJ2ZXlJZH1fJHtjb3Vyc2VJZH1gXG4gICAgICAgICAgY29uc3Qgc3RvcmVkRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHN0b3JhZ2VLZXkpXG5cbiAgICAgICAgICBpZiAoc3RvcmVkRGF0YSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3VydmV5UmVzcG9uc2VzID0gSlNPTi5wYXJzZShzdG9yZWREYXRhKVxuICAgICAgICAgICAgICBjb25zdCBlZHVjYXRvclF1ZXN0aW9uID0gc3VydmV5UmVzcG9uc2VzLmZpbmQoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UucXVlc3Rpb24gPT09ICdBcmUgeW91IGFuIEVkdWNhdG9yL0ZhY3VsdHkgbWVtYmVyPydcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAoZWR1Y2F0b3JRdWVzdGlvbiAmJiBlZHVjYXRvclF1ZXN0aW9uLmFuc3dlciA9PT0gJ1llcycpIHtcbiAgICAgICAgICAgICAgICBoYXNFZHVjYXRvclJvbGUgPSB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgc3VydmV5IGRhdGEgZnJvbSBsb2NhbCBzdG9yYWdlOicsIGVycm9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0ZWFjaGVyTm90ZXNGbGFnIGlmIHVzZXIgaGFzIGVkdWNhdG9yIHJvbGVcbiAgICAgICAgaWYgKGhhc0VkdWNhdG9yUm9sZSkge1xuICAgICAgICAgIGlmIChpdGVtICYmIGl0ZW0ucmVzb3VyY2VDYXRlZ29yeSAmJiBpdGVtLnJlc291cmNlQ2F0ZWdvcnkgPT09ICdUZWFjaGVycyBSZXNvdXJjZScpIHtcbiAgICAgICAgICAgIHRoaXMudGVhY2hlck5vdGVzRmxhZyA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnJlc291cmNlQ2F0ZWdvcnkgJiYgaXRlbS5yZXNvdXJjZUNhdGVnb3J5ID09PSAnUmVmZXJlbmNlIFJlc291cmNlJykge1xuICAgICAgICAgIHRoaXMucmVmZXJlbmNlTm90ZXNGbGFnID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAodGhpcy5zaWRlTmF2QmFyT3BlbmVkKSB7XG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxNDgwKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTW9iaWxlRm9yQUkpIHtcbiAgICAgICAgICB0aGlzLmlzTW9iaWxlRm9yQUkgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzTW9iaWxlRm9yQUkgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE0ODApIHtcbiAgICAgICAgdGhpcy5pc01vYmlsZUZvckFJID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc01vYmlsZUZvckFJID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnLCBbJyRldmVudCddKVxuICBoYW5kbGVTY3JvbGwoKSB7XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsID0gd2luZG93LnNjcm9sbFlcbiAgICBpZiAod2luZG93U2Nyb2xsID49ICh0aGlzLm1lbnVQb3NpdGlvbiAtICgodGhpcy5pc01vYmlsZSkgPyA5NiA6IDEwNCkpKSB7XG4gICAgICB0aGlzLnN0aWNreSA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGlja3kgPSBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVRhYkNoYW5nZShldmVudDogTWF0VGFiQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRhYkNoYW5nZVZhbHVlID0gZXZlbnQudGFiXG4gICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gZXZlbnQuaW5kZXhcbiAgICB0aGlzLmxvYWRDaGVja1NlcnZpY2UuY29tcG9uZW50TG9hZGVkKHRydWUpXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhYi50ZXh0TGFiZWwgPT09ICdBSSBUdXRvcicpIHtcbiAgICAgIHRoaXMuc2hvd0FJVHV0b3JQb3B1cCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmluZGV4ID09PSAwICYmIGV2ZW50LnRhYi50ZXh0TGFiZWwgPT09ICdUcmFuc2NyaXB0aW9uJykge1xuICAgICAgdGhpcy5yYWlzZVRyYW5zY3JpcHRpb25UYWJTdGFydFRlbGVtZXRyeSgpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yYWlzZVRyYW5zY3JpcHRpb25UYWJJbnRlcmFjdFRlbGVtZXRyeSgpXG4gICAgICB9LCAxMDAwKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJhaXNlVHJhbnNjcmlwdGlvblRhYlN0b3BUZWxlbWV0cnkoKVxuICAgIH1cblxuICB9XG5cbiAgc2hvd0FpVHV0b3JDb25maXJtUG9wdXAoKSB7XG4gICAgZGVidWdnZXJcbiAgICB0aGlzLnJhaXNlQUlQb3B1cFN0YXJ0VGVsZW1ldHJ5KClcbiAgICBpZiAodGhpcy5pc0Vucm9sbGVkKSB7XG4gICAgICB0aGlzLmZyb21BSVR1dG9yID0gdHJ1ZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmFpc2VBSVBvcHVwSW50ZXJhY3RUZWxlbWV0cnkoKVxuICAgICAgfSwgMTAwMClcblxuXG4gICAgICB0aGlzLmdlbmVyYXRlUmVzdW1lRGF0YUxpbmtOZXcoKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmFpc2VBSVBvcHVwRW5kVGVsZW1ldHJ5KClcbiAgICAgIH0sIDEwMDApXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJhaXNlQUlQb3B1cEludGVyYWN0VGVsZW1ldHJ5KClcbiAgICAgIH0sIDEwMDApXG4gICAgICBjb25zdCBkaWFsb2dDb25maWcgPSBuZXcgTWF0RGlhbG9nQ29uZmlnKClcblxuICAgICAgZGlhbG9nQ29uZmlnLndpZHRoID0gJzQyMXB4J1xuICAgICAgZGlhbG9nQ29uZmlnLmRhdGEgPSB7XG4gICAgICAgIGVucm9sbDogdGhpcy5pc0Vucm9sbGVkXG4gICAgICB9XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFpVHV0b3JDb25maXJtUG9wdXBDb21wb25lbnQsIGRpYWxvZ0NvbmZpZylcblxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZSA9PT0gJ2Vucm9sbCcpIHtcbiAgICAgICAgICB0aGlzLmZyb21BSVR1dG9yID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVSZXN1bWVEYXRhTGlua05ldygpXG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UgPT09ICduZWVkVG9FbnJvbGwnKSB7XG4gICAgICAgICAgdGhpcy5lbnJvbGxVc2VyRm9yQUlUdXRvcigpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yYWlzZUFJUG9wdXBFbmRUZWxlbWV0cnkoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgfVxuXG4gIGdlbmVyYXRlUmVzdW1lRGF0YUxpbmtOZXcoKSB7XG4gICAgaWYgKHRoaXMucmVzdW1lRGF0YSAmJiB0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGxldCByZXN1bWVEYXRhVjI6IGFueVxuICAgICAgaWYgKHRoaXMuY29udGVudC5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwKSB7XG4gICAgICAgIHJlc3VtZURhdGFWMiA9IHRoaXMuZ2V0UmVzdW1lRGF0YUZyb21MaXN0KCdzdGFydCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bWVEYXRhVjIgPSB0aGlzLmdldFJlc3VtZURhdGFGcm9tTGlzdCgpXG4gICAgICB9XG4gICAgICBpZiAoIXJlc3VtZURhdGFWMi5taW1lVHlwZSkge1xuICAgICAgICByZXN1bWVEYXRhVjIubWltZVR5cGUgPSB0aGlzLnRvY1N2Yy5nZXRNaW1lVHlwZSh0aGlzLmNvbnRlbnQsIHJlc3VtZURhdGFWMi5pZGVudGlmaWVyKVxuICAgICAgfVxuICAgICAgdGhpcy5yZXN1bWVEYXRhTGluayA9IHZpZXdlclJvdXRlR2VuZXJhdG9yKFxuICAgICAgICByZXN1bWVEYXRhVjIuaWRlbnRpZmllcixcbiAgICAgICAgcmVzdW1lRGF0YVYyLm1pbWVUeXBlLFxuICAgICAgICB0aGlzLmNvbnRlbnQuaWRlbnRpZmllcixcbiAgICAgICAgdGhpcy5jb250ZW50LmNvbnRlbnRUeXBlLFxuICAgICAgICB0aGlzLmZvclByZXZpZXcsXG4gICAgICAgICdMZWFybmluZyBSZXNvdXJjZScsXG4gICAgICAgIHRoaXMuZ2V0QmF0Y2hJZCgpLFxuICAgICAgICB0aGlzLmNvbnRlbnQubmFtZSxcbiAgICAgIClcbiAgICAgIHRoaXMuYWN0aW9uU1ZDLnNldFVwZGF0ZUNvbXBHcm91cE8gPSB0aGlzLnJlc3VtZURhdGFMaW5rXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5yZXN1bWVEYXRhTGluay51cmxdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgLi4udGhpcy5yZXN1bWVEYXRhTGluay5xdWVyeVBhcmFtcyxcbiAgICAgICAgICBmcm9tQUlUdXRvcjogdGhpcy5mcm9tQUlUdXRvclxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcbiAgICAgIC8vICAgW3RoaXMucmVzdW1lRGF0YUxpbmsudXJsXSxcbiAgICAgIC8vICAge1xuICAgICAgLy8gICAgIHJlbGF0aXZlVG86IHRoaXMucmVzdW1lRGF0YUxpbmsudXJsLFxuICAgICAgLy8gICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLnJlc3VtZURhdGFMaW5rLnF1ZXJ5UGFyYW1zLFxuICAgICAgLy8gICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICAvLyAgIH0pXG4gICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGF5UmVzdW1lRm9yQUkuZW1pdCgpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXN1bWVEYXRhRnJvbUxpc3QodHlwZT86IHN0cmluZyk6IGFueSB8IHZvaWQge1xuICAgIGNvbnN0IHJlc3VtZUNvcHkgPSBbLi4udGhpcy5yZXN1bWVEYXRhXVxuICAgIGlmICghdHlwZSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuXG4gICAgICBjb25zdCBsYXN0SXRlbSA9IHJlc3VtZUNvcHkgJiYgcmVzdW1lQ29weS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT5cbiAgICAgICAgbmV3IERhdGUoYi5sYXN0QWNjZXNzVGltZSkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYS5sYXN0QWNjZXNzVGltZSkuZ2V0VGltZSgpKS5zaGlmdCgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZGVudGlmaWVyOiBsYXN0SXRlbS5jb250ZW50SWQsXG4gICAgICAgIG1pbWVUeXBlOiBsYXN0SXRlbS5wcm9ncmVzc2RldGFpbHMgJiYgbGFzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzLm1pbWVUeXBlLFxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBmaXJzdEl0ZW0gPSByZXN1bWVDb3B5ICYmIHJlc3VtZUNvcHkubGVuZ3RoICYmIHJlc3VtZUNvcHlbMF1cbiAgICByZXR1cm4ge1xuICAgICAgaWRlbnRpZmllcjogZmlyc3RJdGVtLmNvbnRlbnRJZCxcbiAgICAgIG1pbWVUeXBlOiBmaXJzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzICYmIGZpcnN0SXRlbS5wcm9ncmVzc2RldGFpbHMubWltZVR5cGUsXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEJhdGNoSWQoKTogc3RyaW5nIHtcbiAgICBsZXQgYmF0Y2hJZCA9ICcnXG4gICAgaWYgKHRoaXMuYmF0Y2hEYXRhICYmIHRoaXMuYmF0Y2hEYXRhLmNvbnRlbnQpIHtcbiAgICAgIGZvciAoY29uc3QgYmF0Y2ggb2YgdGhpcy5iYXRjaERhdGEuY29udGVudCkge1xuICAgICAgICBiYXRjaElkID0gYmF0Y2guYmF0Y2hJZFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmF0Y2hJZFxuICB9XG5cbiAgcmFpc2VBSVBvcHVwU3RhcnRUZWxlbWV0cnkoKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxuICAgICAgZGF0YToge1xuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IFwiYWktdHV0b3ItdG9jLXBhZ2VcIiwgXCJwYWdlaWRcIjogYC9hcHAvdG9jLyR7dGhpcy5jb250ZW50Py5pZGVudGlmaWVyfWAgfSxcbiAgICAgICAgb2JqZWN0OiB7IFwiaWRcIjogdGhpcy5jb250ZW50Py5pZGVudGlmaWVyLCBcInR5cGVcIjogdGhpcy5jb250ZW50Py5jb3Vyc2VDYXRlZ29yeSB9LFxuICAgICAgICBzdGF0ZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuTG9hZGVkLFxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6ICcvYXBwL3RvYycsIG1vZHVsZTogJ0xlYXJuJyB9LFxuICAgICAgZnJvbTogJycsXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXG4gICAgfVxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXG4gIH1cblxuICByYWlzZUFJUG9wdXBFbmRUZWxlbWV0cnkoKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxuICAgICAgZGF0YToge1xuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IFwiYWktdHV0b3ItdG9jLXBhZ2VcIiwgXCJwYWdlaWRcIjogYC9hcHAvdG9jLyR7dGhpcy5jb250ZW50Py5pZGVudGlmaWVyfWAgfSxcbiAgICAgICAgb2JqZWN0OiB7IFwiaWRcIjogdGhpcy5jb250ZW50Py5pZGVudGlmaWVyLCBcInR5cGVcIjogdGhpcy5jb250ZW50Py5jb3Vyc2VDYXRlZ29yeSB9LFxuICAgICAgICBzdGF0ZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuVW5sb2FkZWQsXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuQ2hhdGJvdCxcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgfSxcbiAgICAgIHBhZ2VDb250ZXh0OiB7IHBhZ2VJZDogJy9hcHAvdG9jJywgbW9kdWxlOiAnTGVhcm4nIH0sXG4gICAgICBmcm9tOiAnJyxcbiAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcbiAgICB9XG4gICAgdGhpcy5ldmVudFN2Yy5kaXNwYXRjaENoYXRib3RFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0PihldmVudClcbiAgfVxuXG4gIHJhaXNlQUlQb3B1cEludGVyYWN0VGVsZW1ldHJ5KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiBcImFpLXR1dG9yLXRvYy1wYWdlXCIsIFwicGFnZWlkXCI6IGAvYXBwL3RvYy8ke3RoaXMuY29udGVudD8uaWRlbnRpZmllcn1gIH0sXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkludGVyYWN0LFxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6ICcvYXBwL3RvYycsIG1vZHVsZTogJ0xlYXJuJyB9LFxuICAgICAgZnJvbTogJycsXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXG4gICAgfVxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXG4gIH1cblxuICBlbnJvbGxVc2VyRm9yQUlUdXRvcigpIHtcbiAgICB0aGlzLmVucm9sbFVzZXJUb0FJLmVtaXQoKVxuICB9XG5cbiAgYXN5bmMgcGFyc2VWVFQoKSB7XG4gICAgbGV0IGlkZW50aWZpZXIgPSB0aGlzLnJlc291cmNlSWRlbnRpZmllclxuICAgIC8vIGNvbnNvbGUubG9nKCdpZGVudGlmaWVyLS0nLCBpZGVudGlmaWVyKVxuICAgIGF3YWl0IHRoaXMudG9jU3ZjLmFpR2V0UmVzb3VyY2VWdHRGaWxlKGlkZW50aWZpZXIpLnN1YnNjcmliZShhc3luYyAoZGF0YXM6IGFueSkgPT4ge1xuICAgICAgbGV0IGRhdGE6IGFueSA9IGRhdGFzPy5kYXRhXG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCAmJiBkYXRhWzBdWyd0cmFuc2NyaXB0aW9uX3VybHMnXSAmJiBkYXRhWzBdWyd0cmFuc2NyaXB0aW9uX3VybHMnXS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy52dHRMYW5nQXJyID0gZGF0YVswXVsndHJhbnNjcmlwdGlvbl91cmxzJ11cblxuICAgICAgICB0aGlzLmVuYWJsZVRyYW5zY3JpcHRpb25GbGFnID0gdHJ1ZVxuICAgICAgICAvLyBsZXQgdXJsID0gIGRhdGFbMF1bJ3RyYW5zY3JpcHRpb25fdXJscyddWzBdWyd1cmknXVxuICAgICAgICB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSA9IHRoaXMudnR0TGFuZ0FyciAmJiB0aGlzLnZ0dExhbmdBcnIubGVuZ3RoICYmIHRoaXMudnR0TGFuZ0FyclswXSAmJiB0aGlzLnZ0dExhbmdBcnJbMF1bJ2RlZmF1bHRfbGFuZyddID8gJ2VuJyA6ICdlbidcbiAgICAgICAgdGhpcy5kZWZhdWx0VHJhbnNjcmlwdExhbmd1YWdlID0gdGhpcy52dHRMYW5nQXJyICYmIHRoaXMudnR0TGFuZ0Fyci5sZW5ndGggJiYgdGhpcy52dHRMYW5nQXJyWzBdICYmIHRoaXMudnR0TGFuZ0FyclswXVsnZGVmYXVsdF9sYW5nJ10gPyAnZW4nIDogJ2VuJ1xuICAgICAgICBsZXQgc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGUgPSB0aGlzLnZ0dExhbmdBcnIuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbT8ubGFiZWwgPT09IHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZSAmJiBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlID0gc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGVbMF1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlID0gdGhpcy52dHRMYW5nQXJyWzBdXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyZWRBcnIgPSB0aGlzLnZ0dExhbmdBcnIuZmlsdGVyKFxuICAgICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0ubGFiZWwgPT09IHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlXG4gICAgICAgIClcbiAgICAgICAgbGV0IHVybCA9IGZpbHRlcmVkQXJyLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZEFyclswXS51cmkgOiBudWxsXG4gICAgICAgIC8vbGV0IHVybCA9IHRoaXMudnR0TGFuZ0Fyci5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5sYWJlbCA9PT0gdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UpWzBdWyd1cmknXVxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IFZ0dEZpbGUuZnJvbVVybCh1cmwpXG4gICAgICAgICAgbGV0IGJsb2NrczogYW55ID0gZmlsZS5nZXRCbG9ja3MoKVxuXG4gICAgICAgICAgdGhpcy5zdWJUaXRsZXMgPSBibG9ja3NcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvY1N2Yy5jaGFuZ2VUcmFuc2NyaXB0aW9uTGFuZ3VhZ2VFdmVudC5uZXh0KHsgYWN0aXZlTGFuZzogdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UsIGxhbmdEYXRhOiB0aGlzLnZ0dExhbmdBcnIsIGxvYWRQbGF5ZXI6IHRydWUgfSlcblxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZ0dExhbmdBcnIgPSBbXVxuICAgICAgICB0aGlzLmVuYWJsZVRyYW5zY3JpcHRpb25GbGFnID0gZmFsc2VcbiAgICAgIH1cblxuICAgIH0pXG5cbiAgfVxuXG4gIGFzeW5jIHJlbmRlclNlbGVjdGVkTGFuZ3VhZ2VUcmFuc2NyaXB0aW9uKF9sYW5ndmFsdWU6IGFueSkge1xuICAgIC8vIHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID0gdGhpcy5zZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFiZWxcbiAgICBpZiAodHlwZW9mIF9sYW5ndmFsdWUgPT09ICdzdHJpbmcnICYmIF9sYW5ndmFsdWUpIHtcbiAgICAgIHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID0gX2xhbmd2YWx1ZVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGUgPSBfbGFuZ3ZhbHVlPy52YWx1ZVxuICAgICAgdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPSB0aGlzLnNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYWJlbFxuICAgICAgdGhpcy50cmFuc2NyaXB0QWN0aXZlTGFuZ3VhZ2VUZXh0ID0gX2xhbmd2YWx1ZT8udmFsdWU/Lmxhbmd1YWdlXG4gICAgfVxuICAgIHRoaXMucmFpc2VUcmFuc2NyaXB0aW9uTGFuZ3VhZ2VTdGFydFRlbGVtZXRyeSgpXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJhaXNlVHJhbnNjcmlwdGlvbkxhbmd1YWdlSW50ZXJhY3RUZWxlbWV0cnkoKVxuICAgIH0pXG4gICAgbGV0IGN1cnJlbnRQYXRoID0gdGhpcy52dHRMYW5nQXJyLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtPy5sYWJlbCA9PT0gdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UpXG4gICAgaWYgKGN1cnJlbnRQYXRoICYmIGN1cnJlbnRQYXRoLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZSA9IGN1cnJlbnRQYXRoWzBdXG4gICAgfVxuICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBWdHRGaWxlLmZyb21VcmwoY3VycmVudFBhdGggJiYgY3VycmVudFBhdGhbMF0/LnVyaSlcbiAgICBsZXQgYmxvY2tzOiBhbnkgPSBmaWxlLmdldEJsb2NrcygpXG4gICAgdGhpcy5zdWJUaXRsZXMgPSBibG9ja3NcbiAgICB0aGlzLnJhaXNlVHJhbnNjcmlwdGlvbkxhbmd1YWdlU3RvcFRlbGVtZXRyeSgpXG4gICAgLy8gdGhpcy50b2NTdmMuY2hhbmdlVHJhbnNjcmlwdGlvbkxhbmd1YWdlRXZlbnQubmV4dCh7YWN0aXZlTGFuZzogdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UsIGxhbmdEYXRhOiB0aGlzLnZ0dExhbmdBcnIsIGxvYWRQbGF5ZXI6ZmFsc2V9KVxuXG4gIH1cblxuICBvcGVuU3VydmV5Rm9ybVBvcHVwKGV2ZW50OiBib29sZWFuKSB7XG4gICAgdGhpcy50cmlnZXJDb21wbGV0aW9uU3VydmV5Rm9ybS5lbWl0KGV2ZW50KVxuICB9XG5cbiAgcGxheUZyb21TbG90KHN1YnRpdGxlOiBhbnkpIHtcbiAgICBpZiAoc3VidGl0bGUpIHtcbiAgICAgIGxldCBzdGFydFRpbWUgPSBzdWJ0aXRsZS5zdGFydFRpbWUgLyAxMDAwXG4gICAgICBsZXQgZW5kVGltZSA9IHN1YnRpdGxlLmVuZFRpbWUgLyAxMDAwXG4gICAgICB0aGlzLnRvY1N2Yy5wbGF5VHJhbnNjcmlwdGlvblZpZGVvLm5leHQoeyBzdGFydFRpbWUsIGVuZFRpbWUgfSlcbiAgICB9XG4gIH1cblxuICBmb3JtYXRNc1RvVnR0VGltZShtczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCB0b3RhbFNlY29uZHMgPSBNYXRoLmZsb29yKG1zIC8gMTAwMClcbiAgICAvLyAgY29uc3QgbWlsbGlzZWNvbmRzID0gbXMgJSAxMDAwO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcih0b3RhbFNlY29uZHMgLyAzNjAwKVxuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAvIDYwKVxuICAgIGNvbnN0IHNlY29uZHMgPSB0b3RhbFNlY29uZHMgJSA2MFxuXG4gICAgY29uc3QgcGFkID0gKG51bTogbnVtYmVyLCBzaXplOiBudW1iZXIpID0+IG51bS50b1N0cmluZygpLnBhZFN0YXJ0KHNpemUsICcwJylcblxuICAgIC8vIHJldHVybiBgJHtwYWQoaG91cnMsIDIpfToke3BhZChtaW51dGVzLCAyKX06JHtwYWQoc2Vjb25kcywgMil9LiR7cGFkKG1pbGxpc2Vjb25kcywgMyl9YDtcbiAgICByZXR1cm4gYCR7cGFkKGhvdXJzLCAyKX06JHtwYWQobWludXRlcywgMil9OiR7cGFkKHNlY29uZHMsIDIpfWBcbiAgfVxuXG4gIG9ubHlzY29ybUFzc2Vzc21lbnRFeGlzdHMoZGF0YTogYW55LCBrZXk6IGFueSwgdmFsdWU6IGFueSkge1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhPy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGRhdGFbaV0gJiYgZGF0YVtpXVsnY2hpbGRyZW4nXSAmJiBkYXRhW2ldWydjaGlsZHJlbiddLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm9ubHlzY29ybUFzc2Vzc21lbnRFeGlzdHMoZGF0YVtpXT8uY2hpbGRyZW4sIGtleSwgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMudG90YWxSZXNvdXJjZSA9IHRoaXMudG90YWxSZXNvdXJjZSArIDFcbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKGRhdGFbaV1ba2V5XSkpIHtcbiAgICAgICAgICAvLyB0aGlzLnNob3dBSVR1dG9yRmxhZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2Nvcm1Bc3Nlc3NtZW50Q291bnQgPSB0aGlzLnNjb3JtQXNzZXNzbWVudENvdW50ICsgMVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG90YWxSZXNvdXJjZSA9PT0gdGhpcy5zY29ybUFzc2Vzc21lbnRDb3VudCkge1xuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnXG4gIH1cblxuICByYWlzZVRyYW5zY3JpcHRpb25UYWJTdGFydFRlbGVtZXRyeSgpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICdjbGljaycsIFwiaWRcIjogXCJhaS10dXRvci12aWV3ZXItcGFnZVwiLCBcInBhZ2VpZFwiOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBzdWJUeXBlOiAndHJhbnNjcmlwdC10YWInIH0sXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCxcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBtb2R1bGU6ICdMZWFybicgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgcmFpc2VUcmFuc2NyaXB0aW9uVGFiSW50ZXJhY3RUZWxlbWV0cnkoKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxuICAgICAgZGF0YToge1xuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IFwiYWktdHV0b3Itdmlld2VyLXBhZ2VcIiwgXCJwYWdlaWRcIjogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgc3ViVHlwZTogJ3RyYW5zY3JpcHQtdGFiJyB9LFxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdCxcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBtb2R1bGU6ICdMZWFybicgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgcmFpc2VUcmFuc2NyaXB0aW9uVGFiU3RvcFRlbGVtZXRyeSgpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICdjbGljaycsIFwiaWRcIjogXCJhaS10dXRvci12aWV3ZXItcGFnZVwiLCBcInBhZ2VpZFwiOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBzdWJUeXBlOiAndHJhbnNjcmlwdC10YWInIH0sXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkLFxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIG1vZHVsZTogJ0xlYXJuJyB9LFxuICAgICAgZnJvbTogJycsXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXG4gICAgfVxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXG4gIH1cblxuICByYWlzZVRyYW5zY3JpcHRpb25MYW5ndWFnZVN0YXJ0VGVsZW1ldHJ5KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiB0aGlzLnRyYW5zY3JpcHRBY3RpdmVMYW5ndWFnZVRleHQsIFwicGFnZWlkXCI6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIHN1YlR5cGU6ICd0cmFuc2NyaXB0LWxhbmd1YWdlJyB9LFxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQsXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuQ2hhdGJvdCxcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgfSxcbiAgICAgIHBhZ2VDb250ZXh0OiB7IHBhZ2VJZDogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgbW9kdWxlOiAnTGVhcm4nIH0sXG4gICAgICBmcm9tOiAnJyxcbiAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcbiAgICB9XG4gICAgdGhpcy5ldmVudFN2Yy5kaXNwYXRjaENoYXRib3RFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0PihldmVudClcbiAgfVxuXG4gIHJhaXNlVHJhbnNjcmlwdGlvbkxhbmd1YWdlSW50ZXJhY3RUZWxlbWV0cnkoKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxuICAgICAgZGF0YToge1xuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IHRoaXMudHJhbnNjcmlwdEFjdGl2ZUxhbmd1YWdlVGV4dCwgXCJwYWdlaWRcIjogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgc3ViVHlwZTogJ3RyYW5zY3JpcHQtbGFuZ3VhZ2UnIH0sXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkludGVyYWN0LFxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIG1vZHVsZTogJ0xlYXJuJyB9LFxuICAgICAgZnJvbTogJycsXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXG4gICAgfVxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXG4gIH1cblxuICByYWlzZVRyYW5zY3JpcHRpb25MYW5ndWFnZVN0b3BUZWxlbWV0cnkoKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxuICAgICAgZGF0YToge1xuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IHRoaXMudHJhbnNjcmlwdEFjdGl2ZUxhbmd1YWdlVGV4dCwgXCJwYWdlaWRcIjogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgc3ViVHlwZTogJ3RyYW5zY3JpcHQtbGFuZ3VhZ2UnIH0sXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkLFxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIG1vZHVsZTogJ0xlYXJuJyB9LFxuICAgICAgZnJvbTogJycsXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXG4gICAgfVxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXG4gIH1cblxuICBjbG9zZUFJUG9wdXAoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5zaG93QUlUdXRvclBvcHVwID0gZmFsc2VcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDBcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5yZXNvdXJjZUlkZW50aWZpZXIkKSB7XG4gICAgICB0aGlzLnJlc291cmNlSWRlbnRpZmllciQudW5zdWJzY3JpYmUoKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnN1YlRpdGxlcyQpIHtcbiAgICAgIHRoaXMuc3ViVGl0bGVzJC51bnN1YnNjcmliZSgpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNyaXB0aW9uTGFuZ3VhZ2VTdWIpIHtcbiAgICAgIHRoaXMudHJhbnNyaXB0aW9uTGFuZ3VhZ2VTdWIudW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyQ29tbWVudElkRnJvbVVybCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50UXVlcnlQYXJhbXMgPSB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfVxuICAgIGRlbGV0ZSBjdXJyZW50UXVlcnlQYXJhbXMuY29tbWVudElkXG4gICAgdGhpcy5jb21tZW50SWQgPSAnJ1xuICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uc2hvdyA9IHRydWVcbiAgfVxuXG4gIHJlc3VtZUNvbnRlbnRDYWxsKCkge1xuICAgIHRoaXMucmVzdW1lQ29udGVudC5lbWl0KClcbiAgfVxufSIsIjwhLS0gJiYgKGNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5ICE9PSBjb3Vyc2VDYXRlZ29yeT8uQkxFTkRFRF9QUk9HUkFNKSAtLT5cbjxkaXYgY2xhc3M9XCJhaS10dXRvci1nZXQtc3RhcnRlZFwiICpuZ0lmPVwiIXZpZXdlclBhZ2UgJiYgZW5hYmxlQUlUdXRvckZsYWcgJiYgIWlzTW9iaWxlXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB5LTJcIj5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2JvdC1jaGF0LXNtYWxsLnN2Z1wiIGhlaWdodD1cIjY0cHhcIiB3aWR0aD1cIjY0cHhcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMlwiID5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtd2VpZ2h0LTYwMFwiPkdldCBTdGFydGVkIHdpdGggQUkgVHV0b3I8L3A+XG4gICAgICAgICAgICAgICAgPHNwYW4+R2V0IGluc3RhbnQgZXhwbGFuYXRpb25zLCBzdGVwLWJ5LXN0ZXAgbGVhcm5pbmcgZ3VpZGFuY2UsIGFuZCBjdXN0b21pc2VkIGxlYXJuaW5nIHRhaWxvcmVkIGp1c3RcbiAgICAgICAgICAgICAgICAgICAgZm9yIHlvdS48L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS10dXRvci1idG4gcHgtMiBweS0xXCIgW25nQ2xhc3NdPVwiaXNNb2JpbGUgPyAndy0xNjAnIDogJydcIj5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cInNob3dBaVR1dG9yQ29uZmlybVBvcHVwKClcIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvYWktdHV0b3IvYWktaWNvbi5zdmdcIj4mbmJzcDsgJm5ic3A7IDxzcGFuIGNsYXNzPVwiYWktdHV0b3ItbGFiZWxcIj5BSSBUdXRvcjwvc3Bhbj48L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJ0YWItZ3JvdXAtY29udGFpbmVyXCI+XG4gICAgPG1hdC10YWItZ3JvdXAgKHNlbGVjdGVkVGFiQ2hhbmdlKT1cImhhbmRsZVRhYkNoYW5nZSgkZXZlbnQpXCIgI3N0aWNreU1lbnUgW2NsYXNzLnN0aWNreS1tYXQtdGFic109XCJzdGlja3lcIlxuICAgICAgICBbc2VsZWN0ZWRJbmRleF09XCJzZWxlY3RlZFRhYkluZGV4XCIgW25nQ2xhc3NdPVwieydjb250ZW50LXRhYnMnOiFmcm9tVmlld2VyLCdjb250ZW50U3RpY2t5JzogZm9yUHJldmlld31cIj5cblxuICAgICAgICA8IS0tIFRyYW5zY3JpcHRpb24gVGFiIC0tPlxuICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIlRyYW5zY3JpcHRpb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJ2aWV3ZXJQYWdlICYmIGVuYWJsZVRyYW5zY3JpcHRpb25GbGFnICYmIHZ0dExhbmdBcnI/Lmxlbmd0aCAmJiBzdWJUaXRsZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlRyYW5zY3JpcHQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVkLWNpcmNsZSBtbC01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBOZXdcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzY2xhaW1lciBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicHktMiBweC0yXCI+RGlzY2xhaW1lciA6IFRoZXNlIHRyYW5zY3JpcHRzIGFuZCBzdWJ0aXRsZXMgYXJlIEFJLWdlbmVyYXRlZCBhbmQgbWF5IGNvbnRhaW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy48L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBtbC01IG1yLTVcIiAqbmdJZj1cImlzTW9iaWxlRm9yQUlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyYW5zY3JpcHQtZmxleC1jb250YWluZXIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibXVsdGlsaW5lLXNlbGVjdFwiIGFwcGVhcmFuY2U9XCJmaWxsXCIgc3R5bGU9XCJoZWlnaHQ6IGF1dG87IHdpZHRoOiAxMDAlO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRMYWJlbD1cIm5ldmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0LWJveCBwci01XCIgWyh2YWx1ZSldPVwic2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInJlbmRlclNlbGVjdGVkTGFuZ3VhZ2VUcmFuc2NyaXB0aW9uKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciBjbGFzcz1cIm11bHRpbGluZS1zZWxlY3QtYm94LXRyaWdnZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1vcHRpb24tY29udGVudCBweC01IHB5LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj48c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPT09IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+VHJhbnNjcmlwdCBMYW5ndWFnZTogPC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFuZ3VhZ2UgfCB0aXRsZWNhc2V9fSA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZWZhdWx0VHJhbnNjcmlwdExhbmd1YWdlID09PSBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFiZWxcIj4oQXV0byk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwibXVsdGlsaW5lLXNlbGVjdC1vcHRpb25cIiB2YWx1ZT1cIlwiICpuZ0Zvcj1cImxldCBsYW5nIG9mIHZ0dExhbmdBcnJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxhbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUtb3B0aW9uJzogc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/LmxhYmVsID09PSBsYW5nPy5sYWJlbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7bGFuZz8ubGFuZ3VhZ2UgfCB0aXRsZWNhc2V9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtNCBmbGV4IGZsZXgtcm93IGp1c3RpZnktZW5kIHRyYW5zY3JpcHQtY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG1hdE5hdGl2ZUNvbnRyb2wgcmVxdWlyZWQgY2xhc3M9XCJzZWN0aW9uLWRkXCIgKGNoYW5nZSk9XCJyZW5kZXJTZWxlY3RlZExhbmd1YWdlVHJhbnNjcmlwdGlvbigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJsYW5nPy5sYW5ndWFnZVwiICpuZ0Zvcj1cImxldCBsYW5nIG9mIHZ0dExhbmdBcnJcIiBbc2VsZWN0ZWRdPVwibGFuZz8ubGFiZWwgPT09IHRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPT09IGxhbmc/LmxhYmVsXCI+IFRyYW5zY3JpcHQgTGFuZ3VhZ2U6IDwvc3Bhbj4ge3tsYW5nPy5sYW5ndWFnZSB8IHRpdGxlY2FzZX19IDxzcGFuICpuZ0lmPVwidHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID09PSBsYW5nPy5sYW5ndWFnZVwiPihBdXRvKTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIiFpc01vYmlsZUZvckFJID8gJ3ctc3VidGl0bGUtODAnOid3LWZ1bGwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCIhaXNNb2JpbGVGb3JBSSA/ICdtbC01LXBlcicgOiAnJ1wiICpuZ0lmPVwic3ViVGl0bGVzICYmIHN1YlRpdGxlcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHJhbnNjcmlwdGlvbiBjb250ZW50IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJ0aXRsZSBvZiBzdWJUaXRsZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sICBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRpdGxlLXRpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicGxheUZyb21TbG90KHN1YnRpdGxlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHItMSBibHVlLXVuZGVybGluZVwiPiB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRNc1RvVnR0VGltZShzdWJ0aXRsZT8uc3RhcnRUaW1lKSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJibGFjay10ZXh0XCI+LTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTEgYmx1ZS11bmRlcmxpbmVcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRNc1RvVnR0VGltZShzdWJ0aXRsZT8uZW5kVGltZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtNCBzdWJ0aXRsZS10ZXh0LXNsb3QgbXItNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJibGFjay10ZXh0XCIgW2lubmVySHRtbF09XCJzdWJ0aXRsZT8udGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaWdobGlnaHQgOiBrZXl3b3JkVG9IaWdobGlnaHQ/LnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKChzdWJ0aXRsZT8uc3RhcnRUaW1lIC8gMTAwMCkgPj0ga2V5d29yZFRvSGlnaGxpZ2h0Py5zdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChzdWJ0aXRsZT8uZW5kVGltZSAvIDEwMDApIDw9IGtleXdvcmRUb0hpZ2hsaWdodD8uZW5kKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctc3VidGl0bGUtMjBcIiAqbmdJZj1cIiFpc01vYmlsZUZvckFJXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyYW5zY3JpcHQtZmxleC1jb250YWluZXIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0XCIgYXBwZWFyYW5jZT1cImZpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IGF1dG87IHdpZHRoOiAxMDAlO1wiIGZsb2F0TGFiZWw9XCJuZXZlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0LWJveCBwci01XCIgWyh2YWx1ZSldPVwic2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwicmVuZGVyU2VsZWN0ZWRMYW5ndWFnZVRyYW5zY3JpcHRpb24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXIgY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0LWJveC10cmlnZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1vcHRpb24tY29udGVudCBweC01IHB5LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID09PSBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+VHJhbnNjcmlwdCBMYW5ndWFnZTogPC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYW5ndWFnZSB8IHRpdGxlY2FzZX19IDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGVmYXVsdFRyYW5zY3JpcHRMYW5ndWFnZSA9PT0gc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/LmxhYmVsXCI+KEF1dG8pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwibXVsdGlsaW5lLXNlbGVjdC1vcHRpb25cIiB2YWx1ZT1cIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBsYW5nIG9mIHZ0dExhbmdBcnJcIiBbdmFsdWVdPVwibGFuZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlLW9wdGlvbic6IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYWJlbCA9PT0gbGFuZz8ubGFiZWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3tsYW5nPy5sYW5ndWFnZSB8IHRpdGxlY2FzZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIG15LTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8cD4wLjAwPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPkFJIGZvciBEaWdpdGFsIFRyYW5zZm9ybWF0aW9uOiBNYWNoaW5lIExlYXJuaW5nIGFuZCBEZWVwIExlYXJuaW5nICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9zdHJ1ZCBleGVyY2l0YXRpb24gdWxsYW1jbyBsYWJvcmlzIG5pc2kgdXQgYWxpcXVpcCBleCBlYSBjb21tb2RvIGNvbnNlcXVhdC4gRHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW0uPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBtYXROYXRpdmVDb250cm9sIHJlcXVpcmVkIGNsYXNzPVwic2VjdGlvbi1kZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5UcmFuc2NyaXB0aW9uIExhbmd1YWdlOiBFbmdsaXNoIChBdXRvKTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LXRhYj5cblxuICAgICAgICA8IS0tIEFib3V0IFRhYiAtLT5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJ7eyAnYXBwdG9jc2luZ2xlcGFnZS5hYm91dCcgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS10dXRvci1nZXQtc3RhcnRlZC1tb2JpbGUgbXktMiBtbC0yXCIgKm5nSWY9XCIhdmlld2VyUGFnZSAmJiBlbmFibGVBSVR1dG9yRmxhZyAmJiBpc01vYmlsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgdy05OFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2JvdC1jaGF0LXNtYWxsLnN2Z1wiIGhlaWdodD1cIjQ4cHhcIiB3aWR0aD1cIjQ4cHhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgdy02MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC13ZWlnaHQtNjAwXCI+R2V0IFN0YXJ0ZWQgd2l0aCBBSSBUdXRvcjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+R2V0IGluc3RhbnQgZXhwbGFuYXRpb25zLCBzdGVwLWJ5LXN0ZXAgbGVhcm5pbmcgZ3VpZGFuY2UsIGFuZCBjdXN0b21pc2VkIGxlYXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsb3JlZCBqdXN0IGZvciB5b3UuPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS10dXRvci1idG4gcHgtMiBweS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJzaG93QWlUdXRvckNvbmZpcm1Qb3B1cCgpXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2FpLXR1dG9yL2FpLWljb24uc3ZnXCI+Jm5ic3A7ICZuYnNwOyA8c3BhbiBjbGFzcz1cImFpLXR1dG9yLWxhYmVsXCI+QUlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR1dG9yPC9zcGFuPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIG15LTIgbXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktdHV0b3ItYnRuIHB4LTIgcHktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJzaG93QWlUdXRvckNvbmZpcm1Qb3B1cCgpXCI+PGltZyBzcmM9XCJhc3NldHMvYWktdHV0b3IvYWktaWNvbi5zdmdcIj4mbmJzcDsgJm5ic3A7IDxzcGFuIGNsYXNzPVwiYWktdHV0b3ItbGFiZWxcIj5BSSBUdXRvcjwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWFwcC10b2MtYWJvdXQgW2Zyb21WaWV3ZXJdPVwiZnJvbVZpZXdlclwiIFtwYXRoU2V0XT1cInBhdGhTZXRcIiBbY29udGVudF09XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRSZWFkRGF0YV09XCJjb250ZW50UmVhZERhdGFcIiBbYmFzZUNvbnRlbnRSZWFkRGF0YV09XCJiYXNlQ29udGVudFJlYWREYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW3RvY1N0cnVjdHVyZV09XCJ0b2NTdHJ1Y3R1cmVcIiBbY29uZmlnXT1cImNvbmZpZ1wiIFtmb3JQcmV2aWV3XT1cImZhbHNlXCIgW3N0aWNreV09XCJzdGlja3lcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRCYXRjaERhdGFdPVwic2VsZWN0ZWRCYXRjaERhdGFcIiBbc2VsZWN0ZWRUYWJWYWx1ZV09XCJzZWxlY3RlZFRhYkluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW3Jlc3VtZURhdGFdPVwicmVzdW1lRGF0YVwiIFtiYXRjaERhdGFdPVwiYmF0Y2hEYXRhXCIgW3NrZWxldG9uTG9hZGVyXT1cInNrZWxldG9uTG9hZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbmRpdGlvbl09XCJjb25kaXRpb25cIiBba3BhcnJheV09XCJrcGFycmF5XCIgW3Nob3dSZXZpZXdzXT1cIid0cnVlJ1wiIFtsYW5ndWFnZUxpc3RdPVwibGFuZ3VhZ2VMaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgW2xvY2tDZXJ0aWZpY2F0ZV09XCJsb2NrQ2VydGlmaWNhdGVcIiAodHJpZ2VyQ29tcGxldGlvblN1cnZleUZvcm0pPVwib3BlblN1cnZleUZvcm1Qb3B1cCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC93cy13aWRnZXQtYXBwLXRvYy1hYm91dD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LXRhYj5cblxuICAgICAgICA8IS0tIENvbnRlbnQgVGFiIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudD8uY2hpbGRyZW4/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJ7eyAnYXBwdG9jc2luZ2xlcGFnZS5jb250ZW50JyB8IHRyYW5zbGF0ZSB9fVwiICpuZ0lmPVwiY29udGVudFRhYkZsYWdcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1hcHAtdG9jLWNvbnRlbnQgW2JhdGNoSWRdPVwiYmF0Y2hJZFwiIFtjb21wb25lbnROYW1lXT1cImNvbXBvbmVudE5hbWVcIiBbcGF0aFNldF09XCJwYXRoU2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cImNvbnRlbnRcIiBbdG9jU3RydWN0dXJlXT1cInRvY1N0cnVjdHVyZVwiIFtjb25maWddPVwiY29uZmlnXCIgW2ZvclByZXZpZXddPVwiZm9yUHJldmlld1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVzdW1lRGF0YV09XCJyZXN1bWVEYXRhXCIgW2JhdGNoRGF0YV09XCJiYXRjaERhdGFcIiBbc2tlbGV0b25Mb2FkZXJdPVwic2tlbGV0b25Mb2FkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hpZXJhcmNoeU1hcERhdGFdPVwiaGllcmFyY2h5TWFwRGF0YVwiIFtiYXNlQ29udGVudFJlYWREYXRhXT1cImJhc2VDb250ZW50UmVhZERhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgPC93cy13aWRnZXQtYXBwLXRvYy1jb250ZW50PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWc/LmNvbW1lbnRzVGFiICYmICFmb3JQcmV2aWV3XCI+XG4gICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLnN0YXJ0RGlzY3Vzc2lvbicgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcmF0aW5ncy1kaXYgbXQtNVwiIGlkPVwiY29tbWVudHNEaXZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkaXNjdXNzV2lkZ2V0RGF0YSAmJiBkaXNjdXNzV2lkZ2V0RGF0YT8ubmV3Q29tbWVudFNlY3Rpb24/LmNvbW1lbnRUcmVlRGF0YT8uZW50aXR5SWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29tbWVudElkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGQtdjItd2lkZ2V0LWNvbW1lbnQgW3dpZGdldERhdGFdPVwiZGlzY3Vzc1dpZGdldERhdGFcIj48L2QtdjItd2lkZ2V0LWNvbW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21tZW50SWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMyBjdXJzb3ItcG9pbnRlciBtYi01XCIgKGNsaWNrKT1cImNsZWFyQ29tbWVudElkRnJvbVVybCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+YXJyb3dfYmFjazwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgdG8gYWxsIGNvbW1lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGQtdjItd2lkZ2V0LWNvbW1lbnQgW3dpZGdldERhdGFdPVwiZGlzY3Vzc1dpZGdldERhdGFcIiBbY29tbWVudElkXT1cImNvbW1lbnRJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtza2VsZXRvbkxvYWRlcl0+PC9kLXYyLXdpZGdldC1jb21tZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZz8uc2FtdWhpa0NoYXJjaGFUYWIgJiYgY29uZGl0aW9uICYmIGNvbnRlbnRSZWFkRGF0YT8uZXZlbnRMaW5rZWQ/Lmxlbmd0aCA+IDAgJiYgZW5hYmxlU2FtdWhpa0NoYXJjaGFUYWJcIj5cbiAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwie3sgJ2FwcHRvY3NpbmdsZXBhZ2Uuc2FtdWhpa0NoYXJjaGEnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJhdGluZ3MtZGl2IG10LTVcIiBpZD1cInNhbXVoaWtDaGFyY2hhRGl2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNhbXVoaWstY2hhcmNoYS1jb250ZW50IFtjb250ZW50XT1cImNvbnRlbnRSZWFkRGF0YVwiIFtjb25kaXRpb25EYXRhXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VtZUNvbnRlbnQpPVwicmVzdW1lQ29udGVudENhbGwoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC93cy13aWRnZXQtc2FtdWhpay1jaGFyY2hhLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gVGVhY2hlcnMgTm90ZSBUYWIgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LnJlZmVyZW5jZU5vZGVzICYmIHRlYWNoZXJOb3Rlc0ZsYWdcIj5cbiAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiVGVhY2hlcnMgTm90ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCByYXRpbmdzLWRpdiBtdC01XCIgaWQ9XCJ0ZWFjaGVyc05vdGVEaXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtYXBwLXRvYy10ZWFjaGVycy1ub3RlcyBbY29udGVudF09XCJjb250ZW50UmVhZERhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub3Rlc0Rpc3BsYXlUeXBlXT1cIidUZWFjaGVycyBSZXNvdXJjZSdcIj48L3dzLXdpZGdldC1hcHAtdG9jLXRlYWNoZXJzLW5vdGVzPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFJlZmVyZW5jZSBOb3RlIFRhYiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8ucmVmZXJlbmNlTm9kZXMgJiYgcmVmZXJlbmNlTm90ZXNGbGFnXCI+XG4gICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIlJlZmVyZW5jZSBOb3RlXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJhdGluZ3MtZGl2IG10LTVcIiBpZD1cInRlYWNoZXJzTm90ZURpdlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1hcHAtdG9jLXRlYWNoZXJzLW5vdGVzIFtjb250ZW50XT1cImNvbnRlbnRSZWFkRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vdGVzRGlzcGxheVR5cGVdPVwiJ1JlZmVyZW5jZSBSZXNvdXJjZSdcIj48L3dzLXdpZGdldC1hcHAtdG9jLXRlYWNoZXJzLW5vdGVzPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDx3cy13aWRnZXQtYXBwLXRvYy1yZWZlcmVuY2Utbm90ZXMgW2NvbnRlbnRdPVwiY29udGVudFJlYWREYXRhXCI+PC93cy13aWRnZXQtYXBwLXRvYy1yZWZlcmVuY2Utbm90ZXM+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0Fzc2lnbm1lbnRzVGFiICYmICFmb3JQcmV2aWV3XCI+XG4gICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLmFzc2lnbm1lbnRzJyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCByYXRpbmdzLWRpdiBtdC01XCIgaWQ9XCJ0YWtlQXNzZXNzbWVudERpdlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1hcHAtYmF0Y2gtYXNzaWdubWVudHMgW2NvbnRlbnRdPVwiY29udGVudFwiPjwvd3Mtd2lkZ2V0LWFwcC1iYXRjaC1hc3NpZ25tZW50cz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBUcmFuc2NyaXB0aW9uIFRhYiAtLT5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJBSSBUdXRvclwiICpuZ0lmPVwidmlld2VyUGFnZSAmJiBlbmFibGVBSVR1dG9yRmxhZyAmJiBpc01vYmlsZVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFJIFR1dG9yPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZC1jaXJjbGUgbWwtNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgTmV3XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dBSVR1dG9yUG9wdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtYWktdHV0b3IgW2NvbnRlbnRdPVwiY29udGVudD8uaWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlQUlQb3B1cCk9XCJjbG9zZUFJUG9wdXAoJGV2ZW50KVwiPjwvd3Mtd2lkZ2V0LWFpLXR1dG9yPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICA8L21hdC10YWItZ3JvdXA+XG48L2Rpdj4iXX0=