vcomply-workflow-engine 7.4.4 → 7.4.6
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.
- package/esm2022/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.mjs +185 -45
- package/esm2022/lib/constants/responsibility.mjs +3 -1
- package/esm2022/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.mjs +3 -3
- package/fesm2022/vcomply-workflow-engine.mjs +188 -46
- package/fesm2022/vcomply-workflow-engine.mjs.map +1 -1
- package/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.d.ts +23 -1
- package/lib/constants/responsibility.d.ts +2 -0
- package/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.d.ts +2 -0
- package/lib/workflow-risk/workflow-risk.component.d.ts +1 -1
- package/package.json +1 -1
package/esm2022/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.mjs
CHANGED
|
@@ -56,11 +56,11 @@ export class BulkResponsibilityViewComponent {
|
|
|
56
56
|
this.cancel.emit();
|
|
57
57
|
}
|
|
58
58
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BulkResponsibilityViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
59
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BulkResponsibilityViewComponent, selector: "app-bulk-responsibility-view", inputs: { responsibilityBulkUpload: "responsibilityBulkUpload", fileName: "fileName", defaultOwner: "defaultOwner", loader: "loader", tabType: "tabType", bulkUpload: "bulkUpload", responsibilityType: "responsibilityType" }, outputs: { submitResponsibilityBulkUpload: "submitResponsibilityBulkUpload", cancel: "cancel", selectedTab: "selectedTab" }, usesOnChanges: true, ngImport: i0, template: "<!-- --------------------------------------------------------------------upward is new one-------------------- -->\r\n<app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!-- HTML for multiple tabs -->\r\n<ng-container *ngIf=\"responsibilityType === 'multiTab'\">\r\n <ng-template #dropdownErr let-invalid>\r\n <i *ngIf=\"invalid\" class=\"icons\" [appTooltip]=\"VALIDATION_MESSAGES.DROPDOWN\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\r\n </ng-template>\r\n <div class=\"bulk-view\">\r\n <div class=\"bulk-view-head\">\r\n <h2 class=\"bulk-view-title\">\r\n {{fileName}}\r\n </h2>\r\n </div>\r\n <div class=\"bulk-view-body bulk\" [class.is-horizontally-scrolled]=\"isHorizontallyScrolled\"\r\n (scroll)=\"onGridScroll($event)\">\r\n <div class=\"exel-view\">\r\n <div class=\"exel-view-row head\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\">#</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\">Responsibility Name <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Program</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\">Program Type</div>\r\n <div class=\"exel-view-column\">Program</div>\r\n <div class=\"exel-view-column\">Program Category</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Entrusted By</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Entrust To <span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Person or Group<span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">All or Any Persons</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Key Responsibility?</div>\r\n <div class=\"exel-view-column\" *ngIf=\"tabType === 'frequency'\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-row\">\r\n <!-- <div class=\"exel-view-column large\">Frequency of Occurrence and Completion Window <span class=\"required\">*</span></div> -->\r\n <div class=\"exel-view-column large\">{{responsibilityBulkUpload?.header.includes('Program') ?\r\n responsibilityBulkUpload?.header[8]?.slice(0, -1) :\r\n responsibilityBulkUpload?.header[5]?.slice(0, -1)}}<span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <ng-container *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-column\">Frequency <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Month)</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\">Due Time</div>\r\n <div class=\"exel-view-column\">Start <span class=\"info-text\">(No. of days before the due\r\n date)</span></div>\r\n <div class=\"exel-view-column\">Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be completed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of\r\n days after the due date. Select \"0\" if the responsibility must be completed on\r\n the due date)</span></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\">Responsibility Ends After Occurences <span\r\n class=\"info-text\">(Number of occurrences)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Month)</span></div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column two-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Responsibility Centre</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\">Responsibility Centre Name</div>\r\n <div class=\"exel-view-column\">Responsibility Centre Type</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Risk Class</div>\r\n <div class=\"exel-view-column\">Objective</div>\r\n <div class=\"exel-view-column\">Notes</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Format & Evidence</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\" [class.three-column]=\"false\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Format</div>\r\n <div class=\"exel-view-column\">Format For Responsibility (link)</div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Evidence</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Assessments or Checkpoints</div> -->\r\n <div class=\"exel-view-column four-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Review of Responsibility</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\">Reviewer</div>\r\n <div class=\"exel-view-column\">Reviewer Type\r\n <span class=\"info-text\">(Specify the type of reviewer flow)</span>\r\n\r\n </div>\r\n\r\n <div class=\"exel-view-column\">Review Start <span class=\"info-text\">(No. of days before the\r\n due date)</span></div>\r\n <div class=\"exel-view-column\">Review Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be reviewed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of days\r\n after the due date. Select \"0\" if the responsibility must be reviewed on the due\r\n date)</span></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Overseer</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Always Notify</div>\r\n <div class=\"exel-view-column\">Notify on Failure</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Overseer</div> -->\r\n\r\n <!-- Collaborator -->\r\n <div class=\"exel-view-column\">Collaborator</div>\r\n\r\n </div>\r\n <div class=\"exel-view-row\" *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\" [class.error]=\"!report?.isValid\">{{i+1}}</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\" [class.error]=\"!report.responsibilityName\">\r\n {{report?.responsibilityName}} <i *ngIf=\"!report.responsibilityName\" class=\"icons\"\r\n [appTooltip]=\"'Enter a name for this responsibility.'\" placement=\"bottom-right\" type=\"white\"\r\n delay=\"0\" [tooltipMandatory]=true></i></div>\r\n <div class=\"exel-view-column multi-column\"\r\n *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\" [class.error]=\"false\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.programType === false\">\r\n {{report?.programType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.programType === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.program === false\">\r\n {{report?.program}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.program === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.programCategory === false\">\r\n {{report?.programCategory}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.programCategory === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.assignor === false\">{{report?.assignor}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.assignor === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.assignee || !report?.userValidateWithProgram?.isValidAssignee || (!report?.isValidUser) || report?.dropdownValidation?.assignee === false\">\r\n {{report?.assignee}}\r\n <!-- || (!report?.isValidUser) -->\r\n <i *ngIf=\"!report?.assignee\" class=\"icons\"\r\n [appTooltip]=\"'Select the user responsible for completing this responsibility. '\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.assignee && report?.dropdownValidation?.assignee === false }\"></ng-container>\r\n <i *ngIf=\"(report?.assignee) && report?.dropdownValidation?.assignee !== false && !report?.userValidateWithProgram?.isValidAssignee\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.assigneeType === false\">\r\n {{report?.assigneeType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.assigneeType === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.keyResponsibility === false\">\r\n {{report?.keyResponsibility}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.keyResponsibility === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\" [class.error]=\"!report?.frequency || report?.dropdownValidation?.frequency === false\">{{report?.frequency}}\r\n <i *ngIf=\"!report?.frequency\" class=\"icons\"\r\n [appTooltip]=\"'Select a frequency for this responsibility.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.frequency && report?.dropdownValidation?.frequency === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.day === false || !report?.validDate || report?.isPastDate\">\r\n {{report?.day}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.day === false }\"></ng-container>\r\n <i *ngIf=\"report?.dropdownValidation?.day !== false && !report?.validDate\" class=\"icons\" [appTooltip]=\"'Invalid Due Date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <i *ngIf=\"report?.dropdownValidation?.day !== false && report?.isPastDate\" class=\"icons\"\r\n [appTooltip]=\"'This date occurs in the past. Select a future date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.month === false || !report?.validDate || report?.isPastDate\">\r\n {{report?.month}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.month === false }\"></ng-container>\r\n <i *ngIf=\"report?.dropdownValidation?.month !== false && !report?.validDate\" class=\"icons\" [appTooltip]=\"'Invalid Due Date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <i *ngIf=\"report?.dropdownValidation?.month !== false && report?.isPastDate\" class=\"icons\"\r\n [appTooltip]=\"'This date occurs in the past. Select a future date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"\r\n [class.error]=\"!report?.isValidDueTime || report?.dropdownValidation?.dueTime === false\">{{report?.dueTime}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: !report?.isValidDueTime || report?.dropdownValidation?.dueTime === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.responsibilityWindow}}</div>\r\n <div class=\"exel-view-column\">{{report?.failedAfter}}</div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsAfterOccurrences\">{{report?.endsAfterOccurrences}}\r\n <i *ngIf=\"!report?.isValidEndsAfterOccurrences\" class=\"icons\"\r\n [appTooltip]=\"report?.endsAfterOccurrencesError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsByDateDay\">{{report?.endsByDateDay}}\r\n <i *ngIf=\"!report?.isValidEndsByDateDay\" class=\"icons\"\r\n [appTooltip]=\"report?.endsByDateDayError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsByDateMonth\">{{report?.endsByDateMonth}}\r\n <i *ngIf=\"!report?.isValidEndsByDateMonth\" class=\"icons\"\r\n [appTooltip]=\"report?.endsByDateMonthError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.responsibilityCenter === false\">\r\n {{report?.responsibilityCenter}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.responsibilityCenter === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.responsibilityCenterType === false\">\r\n {{report?.responsibilityCenterType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.responsibilityCenterType === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.reportClass === false\">\r\n {{report?.reportClass}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reportClass === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.objective}}</div>\r\n <div class=\"exel-view-column\">{{report?.notes}}</div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [class.error]=\"report?.dropdownValidation?.isFormat === false\">{{report?.isFormat}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.isFormat === false }\"></ng-container>\r\n </div>\r\n <a class=\"exel-view-column external-link\" [href]=\"report?.formatForResponsibility\"\r\n target=\"_blank\">{{report?.formatForResponsibility}}</a>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [class.error]=\"report?.dropdownValidation?.documentEvidenceRequired === false\">\r\n {{report?.documentEvidenceRequired}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.documentEvidenceRequired === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">{{report?.assessments}}</div> -->\r\n <div class=\"exel-view-column multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.reviewer === false || (report?.reviewer && (\r\n !report?.userValidateWithProgram?.isValidReviewer ))\">{{report?.reviewer}}\r\n\r\n <!-- <i *ngIf=\"(report?.reviewer && report?.reviewer === report?.assignor)\"\r\n class=\"icons\"\r\n [appTooltip]=\"((report?.assignor)?'The Assignor cannot also be the Reviewer of this responsibility.':'You cannot be a Reviewer of this responsibility since you are the assignor. ') +'Select another user as the Reviewer'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i> -->\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reviewer === false }\"></ng-container>\r\n <i *ngIf=\"report?.reviewer && report?.dropdownValidation?.reviewer !== false && !report?.userValidateWithProgram?.isValidReviewer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.reviewerType === false\">\r\n {{report?.reviewerType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reviewerType === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.reviewToBeCompletedWithin}}</div>\r\n <div class=\"exel-view-column\">{{report?.reviewWillBeFailedAfter}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.overseer === false || (report?.overseer && (\r\n !report?.userValidateWithProgram?.isValidOverseer ))\">\r\n {{report?.overseer}}\r\n\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.overseer === false }\"></ng-container>\r\n <i *ngIf=\"(report?.overseer) && report?.dropdownValidation?.overseer !== false && !report?.userValidateWithProgram?.isValidOverseer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.notifyOnFailure === false || (report?.notifyOnFailure && (\r\n !report?.userValidateWithProgram?.isValidNotifyOnFailure ))\">\r\n {{report?.notifyOnFailure}}\r\n\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.notifyOnFailure === false }\"></ng-container>\r\n <i *ngIf=\"(report?.notifyOnFailure) && report?.dropdownValidation?.notifyOnFailure !== false && !report?.userValidateWithProgram?.isValidNotifyOnFailure\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.collaborator === false\">{{report?.collaborator}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.collaborator === false }\"></ng-container>\r\n </div>\r\n\r\n <!-- <div class=\"exel-view-column\" [class.error]=\"(report?.overseer) && ((report?.overseer === report?.assignee) ||(report?.reviewer === report?.overseer) || (report?.overseer == report?.assignor) || (!report?.userValidateWithProgram?.isValidOverseer))\">\r\n {{report?.overseer}}\r\n <i *ngIf=\"(report?.overseer) && ((report?.reviewer === report?.overseer))\"\r\n class=\"icons\"\r\n [appTooltip]=\"'The Reviewer cannot also be the Overseer of this responsibility. Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n\r\n <i *ngIf=\"report?.overseer && (report?.overseer === report?.assignee)\" class=\"icons\"\r\n [appTooltip]=\"'The Assignee cannot also be the Overseer of this responsibility. Select another user as the Overseer'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"((report?.overseer) && (report?.overseer == report?.assignor))\"\r\n class=\"icons\"\r\n [appTooltip]=\"((report?.assignor)?'The Assignor cannot also be the Overseer of this responsibility. ':'You cannot be an Overseer of this responsibility since you are the Assignor. ') +'Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"!report?.userValidateWithProgram?.isValidOverseer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Selected user is not a valid overseer for selected program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div> -->\r\n </div>\r\n\r\n <div class=\"exel-view-row empty-fill-row\" aria-hidden=\"true\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\"></div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\"></div>\r\n <div class=\"exel-view-column multi-column three-column\" *ngIf=\"hasProgramColumn\">\r\n <div class=\"exel-view-row multi-column three-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column small-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column small-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column four-column\">\r\n <div class=\"exel-view-row multi-column four-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ------------------------------------------------old code dynamic------------------------------------------------- -->\r\n\r\n <!-- *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\" -->\r\n </div>\r\n </div>\r\n <div class=\"bulk-view-option\">\r\n <button *ngIf=\"bulkUpload?.frequency?.reports?.length\" [class.active]=\"tabType === 'frequency'\"\r\n (click)=\"selectedTab.emit('frequency')\">Frequency Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.ongoing?.reports?.length\" [class.active]=\"tabType === 'ongoing'\"\r\n (click)=\"selectedTab.emit('ongoing')\">Ongoing Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.onCompletion?.reports?.length\" [class.active]=\"tabType === 'onCompletion'\"\r\n (click)=\"selectedTab.emit('onCompletion')\">On Completion Responsibilities</button>\r\n </div>\r\n <div class=\"bulk-view-footer\">\r\n <!-- <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityBulkUpload?.reports?.length}} responsibilities will be\r\n uploaded.</p>\r\n </div> -->\r\n <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityMultiTabBulkUpload?.length}}\r\n {{responsibilityMultiTabBulkUpload?.length > 1 ? 'responsibilities' : 'responsibility'}} will be\r\n uploaded.</p>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"close()\" id=\"bulk-resp-cancel\">Cancel</button>\r\n <button (click)=\"submit()\" id=\"bulk-resp-confirm\" [disabled]=\"!isConfirmClickable\"\r\n class=\"blue\">Confirm</button>\r\n <!-- finalResponsibilities < 1 -->\r\n </div>\r\n </div>\r\n </div>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n</ng-container>\r\n\r\n<!-- --------------------------------------------------------------------upward is new one-------------------- -->", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#747576;border-radius:16px}::-webkit-scrollbar{height:15px}.bulk-view{position:fixed;inset:0;z-index:11}.bulk-view-head{height:60px;padding:20px 24px;background:#161b2f;display:flex;justify-content:flex-start}.bulk-view-title{font-size:16px;line-height:20px;font-weight:400;margin:0;color:#fff}.bulk-view-body{height:calc(100vh - 110px);overflow:auto;width:100%;background:#fff}.bulk-view-body .exel-view{display:block}.bulk-view-body .exel-view-row{display:flex;width:100%}.bulk-view-body .exel-view-row.head .exel-view-column{font-weight:500;font-size:14px;min-height:26px;background:#f1f1f1;padding:0;word-break:unset}.bulk-view-body .exel-view-row.multi-column .exel-view-column{width:140px;min-width:140px}.bulk-view-body .exel-view-row.multi-column .external-link{color:#1e5dd3;text-decoration:none}.bulk-view-body .exel-view-column{width:300px;min-width:300px;padding:0 10px;border-right:1px solid #dcdcdc;border-bottom:1px solid #dcdcdc;display:flex;align-items:center;justify-content:center;text-align:center;word-break:break-all;line-height:16px;font-size:12px;color:#161b2f;flex-wrap:wrap;position:relative}.bulk-view-body .exel-view-column i.icons{position:absolute;top:8px;right:10px;cursor:pointer;color:#d93b41}.bulk-view-body .exel-view-column.large{width:100%;min-width:auto}.bulk-view-body .exel-view-column.error{border:1px solid #EB2424!important;padding-right:24px}.bulk-view-body .exel-view-column.error+.error{border-left:none!important}.bulk-view-body .exel-view-column span.required{color:#eb2424;display:contents}.bulk-view-body .exel-view-column .exel-view-row .exel-view-column{width:100%}.bulk-view-body .exel-view-column.sticky-col{position:sticky;z-index:2;background:#fff}.bulk-view-body .exel-view-column.sticky-col-index{left:0;z-index:3;background:#f1f1f1}.bulk-view-body .exel-view-column.sticky-col-name{left:60px}.bulk-view-body .exel-view-column.sl-no{background:#f1f1f1;width:60px;min-width:60px;min-height:30px;font-weight:400}.bulk-view-body .exel-view-column.sl-no.error{background:#f5d6d7;border:none;padding-right:10px;border-bottom:1px solid #dcdcdc}.bulk-view-body .exel-view-column.multi-column{padding:0;border:none}.bulk-view-body .exel-view-column.multi-column .exel-view-row{height:100%}.bulk-view-body .exel-view-column.multi-column .exel-view-column{width:50%;min-width:50%}.bulk-view-body .exel-view-column.multi-column .exel-view-column+.exel-view-column{border-left:none}.bulk-view-body.bulk{height:calc(100vh - 142px)}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name{overflow:visible}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name:after{content:\"\";position:absolute;top:-1px;bottom:-1px;right:0;width:8px;pointer-events:none;box-shadow:4px 0 8px #1e5dd326}.bulk-view-body.bulk .exel-view{display:flex;flex-direction:column;width:max-content;min-width:100%;min-height:100%}.bulk-view-body.bulk .exel-view-row{width:max-content;min-width:100%}.bulk-view-body.bulk .exel-view-row.head{position:sticky;top:0;z-index:4}.bulk-view-body.bulk .exel-view-row.head .exel-view-column{min-height:34px}.bulk-view-body.bulk .exel-view-row.head .exel-view-column.sticky-col{background:#f1f1f1;z-index:5}.bulk-view-body.bulk .exel-view-row.head .exel-view-column .info-text{font-size:10px;display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding:0 8px}.bulk-view-body.bulk .exel-view-row.two-column .exel-view-column{min-width:250px!important}.bulk-view-body.bulk .exel-view-row.three-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.four-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.five-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.nine-column .exel-view-column{width:200px;min-width:200px!important}.bulk-view-body.bulk .exel-view-column .exel-view-row .exel-view-column.small-column{width:120px;min-width:120px!important}.bulk-view-body.bulk .exel-view-column.multi-column .exel-view-column{min-width:unset}.bulk-view-body.bulk .exel-view-column.two-column{width:500px;min-width:500px!important}.bulk-view-body.bulk .exel-view-column.three-column{width:600px;min-width:600px!important}.bulk-view-body.bulk .exel-view-column.four-column{width:800px;min-width:800px!important}.bulk-view-body.bulk .exel-view-column.five-column{width:1000px;min-width:1000px!important}.bulk-view-body.bulk .exel-view-column.nine-column{width:1800px;min-width:1800px!important}.bulk-view-body.bulk .exel-view .empty-fill-row{flex:1 1 auto;min-height:32px;align-items:stretch}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column{min-height:100%;background-color:#fff;background-image:repeating-linear-gradient(to bottom,#fff 0 31px,#dcdcdc 31px 32px);background-repeat:repeat-y;background-size:100% 32px}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.multi-column{background-image:none;background-color:transparent}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sticky-col-index,.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sl-no{background-color:#f1f1f1;background-image:repeating-linear-gradient(to bottom,#f1f1f1 0 31px,#dcdcdc 31px 32px)}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-row{height:100%;align-items:stretch}.bulk-view-option{background:#fff;border-top:1px solid #f1f1f1;padding:0 20px;position:fixed;width:100%;bottom:50px;display:flex;align-items:center}.bulk-view-option button{background:transparent;border-radius:0;border:none;border-left:1px solid #f1f1f1;color:#747576;font-size:11px;font-weight:500;padding:0 .5rem;margin:0;height:2rem;position:relative}.bulk-view-option button:last-of-type{border-right:1px solid #f1f1f1}.bulk-view-option button.active{color:#1e5dd3}.bulk-view-option button.active:before{background:#fff;content:\"\";position:absolute;top:-1px;left:0;height:1px;width:100%}.bulk-view-footer{height:50px;box-shadow:0 0 15px #1e03d259;padding:10px 20px;position:fixed;width:100%;bottom:0;display:flex;align-items:center;justify-content:space-between;background:#fff}.bulk-view-footer .left p{color:#747576;font-size:13px;font-weight:500;margin:0}.bulk-view-footer .right button{font-size:12px;background:#fff;border:1px solid #dcdcdc;color:#747576;border-radius:2px;padding:8px 18px;cursor:pointer;text-transform:uppercase}.bulk-view-footer .right button+button{margin-left:4px}.bulk-view-footer .right button.blue{color:#fff;background:#1e5dd3}.bulk-view-footer .right button:disabled{background:#f1f1f1;border-color:#f1f1f1;pointer-events:none;cursor:not-allowed;color:#747576}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i3.LoaderComponent, selector: "app-loader" }] }); }
|
|
59
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BulkResponsibilityViewComponent, selector: "app-bulk-responsibility-view", inputs: { responsibilityBulkUpload: "responsibilityBulkUpload", fileName: "fileName", defaultOwner: "defaultOwner", loader: "loader", tabType: "tabType", bulkUpload: "bulkUpload", responsibilityType: "responsibilityType" }, outputs: { submitResponsibilityBulkUpload: "submitResponsibilityBulkUpload", cancel: "cancel", selectedTab: "selectedTab" }, usesOnChanges: true, ngImport: i0, template: "<!-- --------------------------------------------------------------------upward is new one-------------------- -->\r\n<app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!-- HTML for multiple tabs -->\r\n<ng-container *ngIf=\"responsibilityType === 'multiTab'\">\r\n <ng-template #dropdownErr let-invalid>\r\n <i *ngIf=\"invalid\" class=\"icons\" [appTooltip]=\"VALIDATION_MESSAGES.DROPDOWN\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\r\n </ng-template>\r\n <div class=\"bulk-view\">\r\n <div class=\"bulk-view-head\">\r\n <h2 class=\"bulk-view-title\">\r\n {{fileName}}\r\n </h2>\r\n </div>\r\n <div class=\"bulk-view-body bulk\" [class.is-horizontally-scrolled]=\"isHorizontallyScrolled\"\r\n (scroll)=\"onGridScroll($event)\">\r\n <div class=\"exel-view\">\r\n <div class=\"exel-view-row head\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\">#</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\">Responsibility Name <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Program</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\">Program Type</div>\r\n <div class=\"exel-view-column\">Program</div>\r\n <div class=\"exel-view-column\">Program Category</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Entrusted By</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Entrust To <span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Person or Group<span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">All or Any Persons</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Key Responsibility?</div>\r\n <div class=\"exel-view-column\" *ngIf=\"tabType === 'frequency'\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-row\">\r\n <!-- <div class=\"exel-view-column large\">Frequency of Occurrence and Completion Window <span class=\"required\">*</span></div> -->\r\n <div class=\"exel-view-column large\">{{responsibilityBulkUpload?.header.includes('Program') ?\r\n responsibilityBulkUpload?.header[8]?.slice(0, -1) :\r\n responsibilityBulkUpload?.header[5]?.slice(0, -1)}}<span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <ng-container *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-column\">Frequency <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Month)</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\">Due Time</div>\r\n <div class=\"exel-view-column\">Start <span class=\"info-text\">(No. of days before the due\r\n date)</span></div>\r\n <div class=\"exel-view-column\">Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be completed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of\r\n days after the due date. Select \"0\" if the responsibility must be completed on\r\n the due date)</span></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\">Responsibility Ends After Occurences <span\r\n class=\"info-text\">(Number of occurrences)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Month)</span></div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column two-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Responsibility Centre</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\">Responsibility Centre Name</div>\r\n <div class=\"exel-view-column\">Responsibility Centre Type</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Risk Class</div>\r\n <div class=\"exel-view-column\">Objective</div>\r\n <div class=\"exel-view-column\">Notes</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Format & Evidence</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\" [class.three-column]=\"false\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Format</div>\r\n <div class=\"exel-view-column\">Format For Responsibility (link)</div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Evidence</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Assessments or Checkpoints</div> -->\r\n <div class=\"exel-view-column four-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Review of Responsibility</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\">Reviewer</div>\r\n <div class=\"exel-view-column\">Reviewer Type\r\n <span class=\"info-text\">(Specify the type of reviewer flow)</span>\r\n\r\n </div>\r\n\r\n <div class=\"exel-view-column\">Review Start <span class=\"info-text\">(No. of days before the\r\n due date)</span></div>\r\n <div class=\"exel-view-column\">Review Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be reviewed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of days\r\n after the due date. Select \"0\" if the responsibility must be reviewed on the due\r\n date)</span></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Overseer</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Always Notify</div>\r\n <div class=\"exel-view-column\">Notify on Failure</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Overseer</div> -->\r\n\r\n <!-- Collaborator -->\r\n <div class=\"exel-view-column\">Collaborator</div>\r\n\r\n </div>\r\n <div class=\"exel-view-row\" *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\" [class.error]=\"!report?.isValid\">{{i+1}}</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\" [class.error]=\"!report.responsibilityName\">\r\n {{report?.responsibilityName}} <i *ngIf=\"!report.responsibilityName\" class=\"icons\"\r\n [appTooltip]=\"'Enter a name for this responsibility.'\" placement=\"bottom-right\" type=\"white\"\r\n delay=\"0\" [tooltipMandatory]=true></i></div>\r\n <div class=\"exel-view-column multi-column\"\r\n *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\" [class.error]=\"false\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.programType === false\">\r\n {{report?.programType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.programType === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.program === false\">\r\n {{report?.program}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.program === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.programCategory === false\">\r\n {{report?.programCategory}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.programCategory === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.assignor === false\">{{report?.assignor}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.assignor === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.assignee || !report?.userValidateWithProgram?.isValidAssignee || (!report?.isValidUser) || report?.dropdownValidation?.assignee === false\">\r\n {{report?.assignee}}\r\n <!-- || (!report?.isValidUser) -->\r\n <i *ngIf=\"!report?.assignee\" class=\"icons\"\r\n [appTooltip]=\"'Select the user responsible for completing this responsibility. '\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.assignee && report?.dropdownValidation?.assignee === false }\"></ng-container>\r\n <i *ngIf=\"(report?.assignee) && report?.dropdownValidation?.assignee !== false && !report?.userValidateWithProgram?.isValidAssignee\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.assigneeType === false\">\r\n {{report?.assigneeType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.assigneeType === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.keyResponsibility === false\">\r\n {{report?.keyResponsibility}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.keyResponsibility === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\" [class.error]=\"!report?.frequency || report?.dropdownValidation?.frequency === false\">{{report?.frequency}}\r\n <i *ngIf=\"!report?.frequency\" class=\"icons\"\r\n [appTooltip]=\"'Select a frequency for this responsibility.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.frequency && report?.dropdownValidation?.frequency === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.day === false || !report?.validDate || report?.isPastDate\">\r\n {{report?.day}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.day === false }\"></ng-container>\r\n <i *ngIf=\"report?.dropdownValidation?.day !== false && !report?.validDate\" class=\"icons\" [appTooltip]=\"'Invalid Due Date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <i *ngIf=\"report?.dropdownValidation?.day !== false && report?.isPastDate\" class=\"icons\"\r\n [appTooltip]=\"'This date occurs in the past. Select a future date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.month === false || !report?.validDate || report?.isPastDate\">\r\n {{report?.month}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.month === false }\"></ng-container>\r\n <i *ngIf=\"report?.dropdownValidation?.month !== false && !report?.validDate\" class=\"icons\" [appTooltip]=\"'Invalid Due Date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <i *ngIf=\"report?.dropdownValidation?.month !== false && report?.isPastDate\" class=\"icons\"\r\n [appTooltip]=\"'This date occurs in the past. Select a future date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"\r\n [class.error]=\"!report?.isValidDueTime || report?.dropdownValidation?.dueTime === false\">{{report?.dueTime}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: !report?.isValidDueTime || report?.dropdownValidation?.dueTime === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!!report?.responsibilityWindowError\">{{report?.responsibilityWindow}}\r\n <i *ngIf=\"report?.responsibilityWindowError\" class=\"icons\"\r\n [appTooltip]=\"report?.responsibilityWindowError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!!report?.failedAfterError\">{{report?.failedAfter}}\r\n <i *ngIf=\"report?.failedAfterError\" class=\"icons\"\r\n [appTooltip]=\"report?.failedAfterError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsAfterOccurrences\">{{report?.endsAfterOccurrences}}\r\n <i *ngIf=\"!report?.isValidEndsAfterOccurrences\" class=\"icons\"\r\n [appTooltip]=\"report?.endsAfterOccurrencesError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsByDateDay\">{{report?.endsByDateDay}}\r\n <i *ngIf=\"!report?.isValidEndsByDateDay\" class=\"icons\"\r\n [appTooltip]=\"report?.endsByDateDayError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsByDateMonth\">{{report?.endsByDateMonth}}\r\n <i *ngIf=\"!report?.isValidEndsByDateMonth\" class=\"icons\"\r\n [appTooltip]=\"report?.endsByDateMonthError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.responsibilityCenter === false\">\r\n {{report?.responsibilityCenter}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.responsibilityCenter === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.responsibilityCenterType === false\">\r\n {{report?.responsibilityCenterType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.responsibilityCenterType === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.reportClass === false\">\r\n {{report?.reportClass}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reportClass === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.objective}}</div>\r\n <div class=\"exel-view-column\">{{report?.notes}}</div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [class.error]=\"report?.dropdownValidation?.isFormat === false\">{{report?.isFormat}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.isFormat === false }\"></ng-container>\r\n </div>\r\n <a class=\"exel-view-column external-link\" [href]=\"report?.formatForResponsibility\"\r\n target=\"_blank\">{{report?.formatForResponsibility}}</a>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [class.error]=\"report?.dropdownValidation?.documentEvidenceRequired === false\">\r\n {{report?.documentEvidenceRequired}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.documentEvidenceRequired === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">{{report?.assessments}}</div> -->\r\n <div class=\"exel-view-column multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.reviewer === false || (report?.reviewer && (\r\n !report?.userValidateWithProgram?.isValidReviewer ))\">{{report?.reviewer}}\r\n\r\n <!-- <i *ngIf=\"(report?.reviewer && report?.reviewer === report?.assignor)\"\r\n class=\"icons\"\r\n [appTooltip]=\"((report?.assignor)?'The Assignor cannot also be the Reviewer of this responsibility.':'You cannot be a Reviewer of this responsibility since you are the assignor. ') +'Select another user as the Reviewer'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i> -->\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reviewer === false }\"></ng-container>\r\n <i *ngIf=\"report?.reviewer && report?.dropdownValidation?.reviewer !== false && !report?.userValidateWithProgram?.isValidReviewer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.reviewerType === false\">\r\n {{report?.reviewerType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reviewerType === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!!report?.reviewToBeCompletedWithinError\">{{report?.reviewToBeCompletedWithin}}\r\n <i *ngIf=\"report?.reviewToBeCompletedWithinError\" class=\"icons\"\r\n [appTooltip]=\"report?.reviewToBeCompletedWithinError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!!report?.reviewWillBeFailedAfterError\">{{report?.reviewWillBeFailedAfter}}\r\n <i *ngIf=\"report?.reviewWillBeFailedAfterError\" class=\"icons\"\r\n [appTooltip]=\"report?.reviewWillBeFailedAfterError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.overseer === false || (report?.overseer && (\r\n !report?.userValidateWithProgram?.isValidOverseer ))\">\r\n {{report?.overseer}}\r\n\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.overseer === false }\"></ng-container>\r\n <i *ngIf=\"(report?.overseer) && report?.dropdownValidation?.overseer !== false && !report?.userValidateWithProgram?.isValidOverseer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.notifyOnFailure === false || (report?.notifyOnFailure && (\r\n !report?.userValidateWithProgram?.isValidNotifyOnFailure ))\">\r\n {{report?.notifyOnFailure}}\r\n\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.notifyOnFailure === false }\"></ng-container>\r\n <i *ngIf=\"(report?.notifyOnFailure) && report?.dropdownValidation?.notifyOnFailure !== false && !report?.userValidateWithProgram?.isValidNotifyOnFailure\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.collaborator === false\">{{report?.collaborator}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.collaborator === false }\"></ng-container>\r\n </div>\r\n\r\n <!-- <div class=\"exel-view-column\" [class.error]=\"(report?.overseer) && ((report?.overseer === report?.assignee) ||(report?.reviewer === report?.overseer) || (report?.overseer == report?.assignor) || (!report?.userValidateWithProgram?.isValidOverseer))\">\r\n {{report?.overseer}}\r\n <i *ngIf=\"(report?.overseer) && ((report?.reviewer === report?.overseer))\"\r\n class=\"icons\"\r\n [appTooltip]=\"'The Reviewer cannot also be the Overseer of this responsibility. Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n\r\n <i *ngIf=\"report?.overseer && (report?.overseer === report?.assignee)\" class=\"icons\"\r\n [appTooltip]=\"'The Assignee cannot also be the Overseer of this responsibility. Select another user as the Overseer'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"((report?.overseer) && (report?.overseer == report?.assignor))\"\r\n class=\"icons\"\r\n [appTooltip]=\"((report?.assignor)?'The Assignor cannot also be the Overseer of this responsibility. ':'You cannot be an Overseer of this responsibility since you are the Assignor. ') +'Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"!report?.userValidateWithProgram?.isValidOverseer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Selected user is not a valid overseer for selected program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div> -->\r\n </div>\r\n\r\n <div class=\"exel-view-row empty-fill-row\" aria-hidden=\"true\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\"></div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\"></div>\r\n <div class=\"exel-view-column multi-column three-column\" *ngIf=\"hasProgramColumn\">\r\n <div class=\"exel-view-row multi-column three-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column small-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column small-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column four-column\">\r\n <div class=\"exel-view-row multi-column four-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ------------------------------------------------old code dynamic------------------------------------------------- -->\r\n\r\n <!-- *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\" -->\r\n </div>\r\n </div>\r\n <div class=\"bulk-view-option\">\r\n <button *ngIf=\"bulkUpload?.frequency?.reports?.length\" [class.active]=\"tabType === 'frequency'\"\r\n (click)=\"selectedTab.emit('frequency')\">Frequency Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.ongoing?.reports?.length\" [class.active]=\"tabType === 'ongoing'\"\r\n (click)=\"selectedTab.emit('ongoing')\">Ongoing Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.onCompletion?.reports?.length\" [class.active]=\"tabType === 'onCompletion'\"\r\n (click)=\"selectedTab.emit('onCompletion')\">On Completion Responsibilities</button>\r\n </div>\r\n <div class=\"bulk-view-footer\">\r\n <!-- <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityBulkUpload?.reports?.length}} responsibilities will be\r\n uploaded.</p>\r\n </div> -->\r\n <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityMultiTabBulkUpload?.length}}\r\n {{responsibilityMultiTabBulkUpload?.length > 1 ? 'responsibilities' : 'responsibility'}} will be\r\n uploaded.</p>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"close()\" id=\"bulk-resp-cancel\">Cancel</button>\r\n <button (click)=\"submit()\" id=\"bulk-resp-confirm\" [disabled]=\"!isConfirmClickable\"\r\n class=\"blue\">Confirm</button>\r\n <!-- finalResponsibilities < 1 -->\r\n </div>\r\n </div>\r\n </div>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n</ng-container>\r\n\r\n<!-- --------------------------------------------------------------------upward is new one-------------------- -->", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#747576;border-radius:16px}::-webkit-scrollbar{height:15px}.bulk-view{position:fixed;inset:0;z-index:11}.bulk-view-head{height:60px;padding:20px 24px;background:#161b2f;display:flex;justify-content:flex-start}.bulk-view-title{font-size:16px;line-height:20px;font-weight:400;margin:0;color:#fff}.bulk-view-body{height:calc(100vh - 110px);overflow:auto;width:100%;background:#fff}.bulk-view-body .exel-view{display:block}.bulk-view-body .exel-view-row{display:flex;width:100%}.bulk-view-body .exel-view-row.head .exel-view-column{font-weight:500;font-size:14px;min-height:26px;background:#f1f1f1;padding:0;word-break:unset}.bulk-view-body .exel-view-row.multi-column .exel-view-column{width:140px;min-width:140px}.bulk-view-body .exel-view-row.multi-column .external-link{color:#1e5dd3;text-decoration:none}.bulk-view-body .exel-view-column{width:300px;min-width:300px;padding:0 10px;border-right:1px solid #dcdcdc;border-bottom:1px solid #dcdcdc;display:flex;align-items:center;justify-content:center;text-align:center;word-break:break-all;line-height:16px;font-size:12px;color:#161b2f;flex-wrap:wrap;position:relative}.bulk-view-body .exel-view-column i.icons{position:absolute;top:8px;right:10px;cursor:pointer;color:#d93b41}.bulk-view-body .exel-view-column.large{width:100%;min-width:auto}.bulk-view-body .exel-view-column.error{border:1px solid #EB2424!important;padding-right:24px}.bulk-view-body .exel-view-column.error+.error{border-left:none!important}.bulk-view-body .exel-view-column span.required{color:#eb2424;display:contents}.bulk-view-body .exel-view-column .exel-view-row .exel-view-column{width:100%}.bulk-view-body .exel-view-column.sticky-col{position:sticky;z-index:2;background:#fff}.bulk-view-body .exel-view-column.sticky-col-index{left:0;z-index:3;background:#f1f1f1}.bulk-view-body .exel-view-column.sticky-col-name{left:60px}.bulk-view-body .exel-view-column.sl-no{background:#f1f1f1;width:60px;min-width:60px;min-height:30px;font-weight:400}.bulk-view-body .exel-view-column.sl-no.error{background:#f5d6d7;border:none;padding-right:10px;border-bottom:1px solid #dcdcdc}.bulk-view-body .exel-view-column.multi-column{padding:0;border:none}.bulk-view-body .exel-view-column.multi-column .exel-view-row{height:100%}.bulk-view-body .exel-view-column.multi-column .exel-view-column{width:50%;min-width:50%}.bulk-view-body .exel-view-column.multi-column .exel-view-column+.exel-view-column{border-left:none}.bulk-view-body.bulk{height:calc(100vh - 142px)}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name{overflow:visible}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name:after{content:\"\";position:absolute;top:-1px;bottom:-1px;right:0;width:8px;pointer-events:none;box-shadow:4px 0 8px #1e5dd326}.bulk-view-body.bulk .exel-view{display:flex;flex-direction:column;width:max-content;min-width:100%;min-height:100%}.bulk-view-body.bulk .exel-view-row{width:max-content;min-width:100%}.bulk-view-body.bulk .exel-view-row.head{position:sticky;top:0;z-index:4}.bulk-view-body.bulk .exel-view-row.head .exel-view-column{min-height:34px}.bulk-view-body.bulk .exel-view-row.head .exel-view-column.sticky-col{background:#f1f1f1;z-index:5}.bulk-view-body.bulk .exel-view-row.head .exel-view-column .info-text{font-size:10px;display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding:0 8px}.bulk-view-body.bulk .exel-view-row.two-column .exel-view-column{min-width:250px!important}.bulk-view-body.bulk .exel-view-row.three-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.four-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.five-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.nine-column .exel-view-column{width:200px;min-width:200px!important}.bulk-view-body.bulk .exel-view-column .exel-view-row .exel-view-column.small-column{width:120px;min-width:120px!important}.bulk-view-body.bulk .exel-view-column.multi-column .exel-view-column{min-width:unset}.bulk-view-body.bulk .exel-view-column.two-column{width:500px;min-width:500px!important}.bulk-view-body.bulk .exel-view-column.three-column{width:600px;min-width:600px!important}.bulk-view-body.bulk .exel-view-column.four-column{width:800px;min-width:800px!important}.bulk-view-body.bulk .exel-view-column.five-column{width:1000px;min-width:1000px!important}.bulk-view-body.bulk .exel-view-column.nine-column{width:1800px;min-width:1800px!important}.bulk-view-body.bulk .exel-view .empty-fill-row{flex:1 1 auto;min-height:32px;align-items:stretch}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column{min-height:100%;background-color:#fff;background-image:repeating-linear-gradient(to bottom,#fff 0 31px,#dcdcdc 31px 32px);background-repeat:repeat-y;background-size:100% 32px}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.multi-column{background-image:none;background-color:transparent}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sticky-col-index,.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sl-no{background-color:#f1f1f1;background-image:repeating-linear-gradient(to bottom,#f1f1f1 0 31px,#dcdcdc 31px 32px)}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-row{height:100%;align-items:stretch}.bulk-view-option{background:#fff;border-top:1px solid #f1f1f1;padding:0 20px;position:fixed;width:100%;bottom:50px;display:flex;align-items:center}.bulk-view-option button{background:transparent;border-radius:0;border:none;border-left:1px solid #f1f1f1;color:#747576;font-size:11px;font-weight:500;padding:0 .5rem;margin:0;height:2rem;position:relative}.bulk-view-option button:last-of-type{border-right:1px solid #f1f1f1}.bulk-view-option button.active{color:#1e5dd3}.bulk-view-option button.active:before{background:#fff;content:\"\";position:absolute;top:-1px;left:0;height:1px;width:100%}.bulk-view-footer{height:50px;box-shadow:0 0 15px #1e03d259;padding:10px 20px;position:fixed;width:100%;bottom:0;display:flex;align-items:center;justify-content:space-between;background:#fff}.bulk-view-footer .left p{color:#747576;font-size:13px;font-weight:500;margin:0}.bulk-view-footer .right button{font-size:12px;background:#fff;border:1px solid #dcdcdc;color:#747576;border-radius:2px;padding:8px 18px;cursor:pointer;text-transform:uppercase}.bulk-view-footer .right button+button{margin-left:4px}.bulk-view-footer .right button.blue{color:#fff;background:#1e5dd3}.bulk-view-footer .right button:disabled{background:#f1f1f1;border-color:#f1f1f1;pointer-events:none;cursor:not-allowed;color:#747576}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i3.LoaderComponent, selector: "app-loader" }] }); }
|
|
60
60
|
}
|
|
61
61
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BulkResponsibilityViewComponent, decorators: [{
|
|
62
62
|
type: Component,
|
|
63
|
-
args: [{ selector: 'app-bulk-responsibility-view', template: "<!-- --------------------------------------------------------------------upward is new one-------------------- -->\r\n<app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!-- HTML for multiple tabs -->\r\n<ng-container *ngIf=\"responsibilityType === 'multiTab'\">\r\n <ng-template #dropdownErr let-invalid>\r\n <i *ngIf=\"invalid\" class=\"icons\" [appTooltip]=\"VALIDATION_MESSAGES.DROPDOWN\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\r\n </ng-template>\r\n <div class=\"bulk-view\">\r\n <div class=\"bulk-view-head\">\r\n <h2 class=\"bulk-view-title\">\r\n {{fileName}}\r\n </h2>\r\n </div>\r\n <div class=\"bulk-view-body bulk\" [class.is-horizontally-scrolled]=\"isHorizontallyScrolled\"\r\n (scroll)=\"onGridScroll($event)\">\r\n <div class=\"exel-view\">\r\n <div class=\"exel-view-row head\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\">#</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\">Responsibility Name <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Program</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\">Program Type</div>\r\n <div class=\"exel-view-column\">Program</div>\r\n <div class=\"exel-view-column\">Program Category</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Entrusted By</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Entrust To <span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Person or Group<span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">All or Any Persons</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Key Responsibility?</div>\r\n <div class=\"exel-view-column\" *ngIf=\"tabType === 'frequency'\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-row\">\r\n <!-- <div class=\"exel-view-column large\">Frequency of Occurrence and Completion Window <span class=\"required\">*</span></div> -->\r\n <div class=\"exel-view-column large\">{{responsibilityBulkUpload?.header.includes('Program') ?\r\n responsibilityBulkUpload?.header[8]?.slice(0, -1) :\r\n responsibilityBulkUpload?.header[5]?.slice(0, -1)}}<span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <ng-container *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-column\">Frequency <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Month)</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\">Due Time</div>\r\n <div class=\"exel-view-column\">Start <span class=\"info-text\">(No. of days before the due\r\n date)</span></div>\r\n <div class=\"exel-view-column\">Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be completed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of\r\n days after the due date. Select \"0\" if the responsibility must be completed on\r\n the due date)</span></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\">Responsibility Ends After Occurences <span\r\n class=\"info-text\">(Number of occurrences)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Month)</span></div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column two-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Responsibility Centre</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\">Responsibility Centre Name</div>\r\n <div class=\"exel-view-column\">Responsibility Centre Type</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Risk Class</div>\r\n <div class=\"exel-view-column\">Objective</div>\r\n <div class=\"exel-view-column\">Notes</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Format & Evidence</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\" [class.three-column]=\"false\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Format</div>\r\n <div class=\"exel-view-column\">Format For Responsibility (link)</div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Evidence</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Assessments or Checkpoints</div> -->\r\n <div class=\"exel-view-column four-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Review of Responsibility</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\">Reviewer</div>\r\n <div class=\"exel-view-column\">Reviewer Type\r\n <span class=\"info-text\">(Specify the type of reviewer flow)</span>\r\n\r\n </div>\r\n\r\n <div class=\"exel-view-column\">Review Start <span class=\"info-text\">(No. of days before the\r\n due date)</span></div>\r\n <div class=\"exel-view-column\">Review Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be reviewed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of days\r\n after the due date. Select \"0\" if the responsibility must be reviewed on the due\r\n date)</span></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Overseer</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Always Notify</div>\r\n <div class=\"exel-view-column\">Notify on Failure</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Overseer</div> -->\r\n\r\n <!-- Collaborator -->\r\n <div class=\"exel-view-column\">Collaborator</div>\r\n\r\n </div>\r\n <div class=\"exel-view-row\" *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\" [class.error]=\"!report?.isValid\">{{i+1}}</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\" [class.error]=\"!report.responsibilityName\">\r\n {{report?.responsibilityName}} <i *ngIf=\"!report.responsibilityName\" class=\"icons\"\r\n [appTooltip]=\"'Enter a name for this responsibility.'\" placement=\"bottom-right\" type=\"white\"\r\n delay=\"0\" [tooltipMandatory]=true></i></div>\r\n <div class=\"exel-view-column multi-column\"\r\n *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\" [class.error]=\"false\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.programType === false\">\r\n {{report?.programType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.programType === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.program === false\">\r\n {{report?.program}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.program === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.programCategory === false\">\r\n {{report?.programCategory}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.programCategory === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.assignor === false\">{{report?.assignor}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.assignor === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.assignee || !report?.userValidateWithProgram?.isValidAssignee || (!report?.isValidUser) || report?.dropdownValidation?.assignee === false\">\r\n {{report?.assignee}}\r\n <!-- || (!report?.isValidUser) -->\r\n <i *ngIf=\"!report?.assignee\" class=\"icons\"\r\n [appTooltip]=\"'Select the user responsible for completing this responsibility. '\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.assignee && report?.dropdownValidation?.assignee === false }\"></ng-container>\r\n <i *ngIf=\"(report?.assignee) && report?.dropdownValidation?.assignee !== false && !report?.userValidateWithProgram?.isValidAssignee\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.assigneeType === false\">\r\n {{report?.assigneeType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.assigneeType === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.keyResponsibility === false\">\r\n {{report?.keyResponsibility}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.keyResponsibility === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\" [class.error]=\"!report?.frequency || report?.dropdownValidation?.frequency === false\">{{report?.frequency}}\r\n <i *ngIf=\"!report?.frequency\" class=\"icons\"\r\n [appTooltip]=\"'Select a frequency for this responsibility.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.frequency && report?.dropdownValidation?.frequency === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.day === false || !report?.validDate || report?.isPastDate\">\r\n {{report?.day}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.day === false }\"></ng-container>\r\n <i *ngIf=\"report?.dropdownValidation?.day !== false && !report?.validDate\" class=\"icons\" [appTooltip]=\"'Invalid Due Date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <i *ngIf=\"report?.dropdownValidation?.day !== false && report?.isPastDate\" class=\"icons\"\r\n [appTooltip]=\"'This date occurs in the past. Select a future date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.month === false || !report?.validDate || report?.isPastDate\">\r\n {{report?.month}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.month === false }\"></ng-container>\r\n <i *ngIf=\"report?.dropdownValidation?.month !== false && !report?.validDate\" class=\"icons\" [appTooltip]=\"'Invalid Due Date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <i *ngIf=\"report?.dropdownValidation?.month !== false && report?.isPastDate\" class=\"icons\"\r\n [appTooltip]=\"'This date occurs in the past. Select a future date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"\r\n [class.error]=\"!report?.isValidDueTime || report?.dropdownValidation?.dueTime === false\">{{report?.dueTime}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: !report?.isValidDueTime || report?.dropdownValidation?.dueTime === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.responsibilityWindow}}</div>\r\n <div class=\"exel-view-column\">{{report?.failedAfter}}</div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsAfterOccurrences\">{{report?.endsAfterOccurrences}}\r\n <i *ngIf=\"!report?.isValidEndsAfterOccurrences\" class=\"icons\"\r\n [appTooltip]=\"report?.endsAfterOccurrencesError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsByDateDay\">{{report?.endsByDateDay}}\r\n <i *ngIf=\"!report?.isValidEndsByDateDay\" class=\"icons\"\r\n [appTooltip]=\"report?.endsByDateDayError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsByDateMonth\">{{report?.endsByDateMonth}}\r\n <i *ngIf=\"!report?.isValidEndsByDateMonth\" class=\"icons\"\r\n [appTooltip]=\"report?.endsByDateMonthError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.responsibilityCenter === false\">\r\n {{report?.responsibilityCenter}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.responsibilityCenter === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.responsibilityCenterType === false\">\r\n {{report?.responsibilityCenterType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.responsibilityCenterType === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.reportClass === false\">\r\n {{report?.reportClass}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reportClass === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.objective}}</div>\r\n <div class=\"exel-view-column\">{{report?.notes}}</div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [class.error]=\"report?.dropdownValidation?.isFormat === false\">{{report?.isFormat}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.isFormat === false }\"></ng-container>\r\n </div>\r\n <a class=\"exel-view-column external-link\" [href]=\"report?.formatForResponsibility\"\r\n target=\"_blank\">{{report?.formatForResponsibility}}</a>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [class.error]=\"report?.dropdownValidation?.documentEvidenceRequired === false\">\r\n {{report?.documentEvidenceRequired}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.documentEvidenceRequired === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">{{report?.assessments}}</div> -->\r\n <div class=\"exel-view-column multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.reviewer === false || (report?.reviewer && (\r\n !report?.userValidateWithProgram?.isValidReviewer ))\">{{report?.reviewer}}\r\n\r\n <!-- <i *ngIf=\"(report?.reviewer && report?.reviewer === report?.assignor)\"\r\n class=\"icons\"\r\n [appTooltip]=\"((report?.assignor)?'The Assignor cannot also be the Reviewer of this responsibility.':'You cannot be a Reviewer of this responsibility since you are the assignor. ') +'Select another user as the Reviewer'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i> -->\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reviewer === false }\"></ng-container>\r\n <i *ngIf=\"report?.reviewer && report?.dropdownValidation?.reviewer !== false && !report?.userValidateWithProgram?.isValidReviewer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.reviewerType === false\">\r\n {{report?.reviewerType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reviewerType === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.reviewToBeCompletedWithin}}</div>\r\n <div class=\"exel-view-column\">{{report?.reviewWillBeFailedAfter}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.overseer === false || (report?.overseer && (\r\n !report?.userValidateWithProgram?.isValidOverseer ))\">\r\n {{report?.overseer}}\r\n\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.overseer === false }\"></ng-container>\r\n <i *ngIf=\"(report?.overseer) && report?.dropdownValidation?.overseer !== false && !report?.userValidateWithProgram?.isValidOverseer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.notifyOnFailure === false || (report?.notifyOnFailure && (\r\n !report?.userValidateWithProgram?.isValidNotifyOnFailure ))\">\r\n {{report?.notifyOnFailure}}\r\n\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.notifyOnFailure === false }\"></ng-container>\r\n <i *ngIf=\"(report?.notifyOnFailure) && report?.dropdownValidation?.notifyOnFailure !== false && !report?.userValidateWithProgram?.isValidNotifyOnFailure\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.collaborator === false\">{{report?.collaborator}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.collaborator === false }\"></ng-container>\r\n </div>\r\n\r\n <!-- <div class=\"exel-view-column\" [class.error]=\"(report?.overseer) && ((report?.overseer === report?.assignee) ||(report?.reviewer === report?.overseer) || (report?.overseer == report?.assignor) || (!report?.userValidateWithProgram?.isValidOverseer))\">\r\n {{report?.overseer}}\r\n <i *ngIf=\"(report?.overseer) && ((report?.reviewer === report?.overseer))\"\r\n class=\"icons\"\r\n [appTooltip]=\"'The Reviewer cannot also be the Overseer of this responsibility. Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n\r\n <i *ngIf=\"report?.overseer && (report?.overseer === report?.assignee)\" class=\"icons\"\r\n [appTooltip]=\"'The Assignee cannot also be the Overseer of this responsibility. Select another user as the Overseer'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"((report?.overseer) && (report?.overseer == report?.assignor))\"\r\n class=\"icons\"\r\n [appTooltip]=\"((report?.assignor)?'The Assignor cannot also be the Overseer of this responsibility. ':'You cannot be an Overseer of this responsibility since you are the Assignor. ') +'Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"!report?.userValidateWithProgram?.isValidOverseer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Selected user is not a valid overseer for selected program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div> -->\r\n </div>\r\n\r\n <div class=\"exel-view-row empty-fill-row\" aria-hidden=\"true\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\"></div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\"></div>\r\n <div class=\"exel-view-column multi-column three-column\" *ngIf=\"hasProgramColumn\">\r\n <div class=\"exel-view-row multi-column three-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column small-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column small-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column four-column\">\r\n <div class=\"exel-view-row multi-column four-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ------------------------------------------------old code dynamic------------------------------------------------- -->\r\n\r\n <!-- *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\" -->\r\n </div>\r\n </div>\r\n <div class=\"bulk-view-option\">\r\n <button *ngIf=\"bulkUpload?.frequency?.reports?.length\" [class.active]=\"tabType === 'frequency'\"\r\n (click)=\"selectedTab.emit('frequency')\">Frequency Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.ongoing?.reports?.length\" [class.active]=\"tabType === 'ongoing'\"\r\n (click)=\"selectedTab.emit('ongoing')\">Ongoing Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.onCompletion?.reports?.length\" [class.active]=\"tabType === 'onCompletion'\"\r\n (click)=\"selectedTab.emit('onCompletion')\">On Completion Responsibilities</button>\r\n </div>\r\n <div class=\"bulk-view-footer\">\r\n <!-- <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityBulkUpload?.reports?.length}} responsibilities will be\r\n uploaded.</p>\r\n </div> -->\r\n <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityMultiTabBulkUpload?.length}}\r\n {{responsibilityMultiTabBulkUpload?.length > 1 ? 'responsibilities' : 'responsibility'}} will be\r\n uploaded.</p>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"close()\" id=\"bulk-resp-cancel\">Cancel</button>\r\n <button (click)=\"submit()\" id=\"bulk-resp-confirm\" [disabled]=\"!isConfirmClickable\"\r\n class=\"blue\">Confirm</button>\r\n <!-- finalResponsibilities < 1 -->\r\n </div>\r\n </div>\r\n </div>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n</ng-container>\r\n\r\n<!-- --------------------------------------------------------------------upward is new one-------------------- -->", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#747576;border-radius:16px}::-webkit-scrollbar{height:15px}.bulk-view{position:fixed;inset:0;z-index:11}.bulk-view-head{height:60px;padding:20px 24px;background:#161b2f;display:flex;justify-content:flex-start}.bulk-view-title{font-size:16px;line-height:20px;font-weight:400;margin:0;color:#fff}.bulk-view-body{height:calc(100vh - 110px);overflow:auto;width:100%;background:#fff}.bulk-view-body .exel-view{display:block}.bulk-view-body .exel-view-row{display:flex;width:100%}.bulk-view-body .exel-view-row.head .exel-view-column{font-weight:500;font-size:14px;min-height:26px;background:#f1f1f1;padding:0;word-break:unset}.bulk-view-body .exel-view-row.multi-column .exel-view-column{width:140px;min-width:140px}.bulk-view-body .exel-view-row.multi-column .external-link{color:#1e5dd3;text-decoration:none}.bulk-view-body .exel-view-column{width:300px;min-width:300px;padding:0 10px;border-right:1px solid #dcdcdc;border-bottom:1px solid #dcdcdc;display:flex;align-items:center;justify-content:center;text-align:center;word-break:break-all;line-height:16px;font-size:12px;color:#161b2f;flex-wrap:wrap;position:relative}.bulk-view-body .exel-view-column i.icons{position:absolute;top:8px;right:10px;cursor:pointer;color:#d93b41}.bulk-view-body .exel-view-column.large{width:100%;min-width:auto}.bulk-view-body .exel-view-column.error{border:1px solid #EB2424!important;padding-right:24px}.bulk-view-body .exel-view-column.error+.error{border-left:none!important}.bulk-view-body .exel-view-column span.required{color:#eb2424;display:contents}.bulk-view-body .exel-view-column .exel-view-row .exel-view-column{width:100%}.bulk-view-body .exel-view-column.sticky-col{position:sticky;z-index:2;background:#fff}.bulk-view-body .exel-view-column.sticky-col-index{left:0;z-index:3;background:#f1f1f1}.bulk-view-body .exel-view-column.sticky-col-name{left:60px}.bulk-view-body .exel-view-column.sl-no{background:#f1f1f1;width:60px;min-width:60px;min-height:30px;font-weight:400}.bulk-view-body .exel-view-column.sl-no.error{background:#f5d6d7;border:none;padding-right:10px;border-bottom:1px solid #dcdcdc}.bulk-view-body .exel-view-column.multi-column{padding:0;border:none}.bulk-view-body .exel-view-column.multi-column .exel-view-row{height:100%}.bulk-view-body .exel-view-column.multi-column .exel-view-column{width:50%;min-width:50%}.bulk-view-body .exel-view-column.multi-column .exel-view-column+.exel-view-column{border-left:none}.bulk-view-body.bulk{height:calc(100vh - 142px)}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name{overflow:visible}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name:after{content:\"\";position:absolute;top:-1px;bottom:-1px;right:0;width:8px;pointer-events:none;box-shadow:4px 0 8px #1e5dd326}.bulk-view-body.bulk .exel-view{display:flex;flex-direction:column;width:max-content;min-width:100%;min-height:100%}.bulk-view-body.bulk .exel-view-row{width:max-content;min-width:100%}.bulk-view-body.bulk .exel-view-row.head{position:sticky;top:0;z-index:4}.bulk-view-body.bulk .exel-view-row.head .exel-view-column{min-height:34px}.bulk-view-body.bulk .exel-view-row.head .exel-view-column.sticky-col{background:#f1f1f1;z-index:5}.bulk-view-body.bulk .exel-view-row.head .exel-view-column .info-text{font-size:10px;display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding:0 8px}.bulk-view-body.bulk .exel-view-row.two-column .exel-view-column{min-width:250px!important}.bulk-view-body.bulk .exel-view-row.three-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.four-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.five-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.nine-column .exel-view-column{width:200px;min-width:200px!important}.bulk-view-body.bulk .exel-view-column .exel-view-row .exel-view-column.small-column{width:120px;min-width:120px!important}.bulk-view-body.bulk .exel-view-column.multi-column .exel-view-column{min-width:unset}.bulk-view-body.bulk .exel-view-column.two-column{width:500px;min-width:500px!important}.bulk-view-body.bulk .exel-view-column.three-column{width:600px;min-width:600px!important}.bulk-view-body.bulk .exel-view-column.four-column{width:800px;min-width:800px!important}.bulk-view-body.bulk .exel-view-column.five-column{width:1000px;min-width:1000px!important}.bulk-view-body.bulk .exel-view-column.nine-column{width:1800px;min-width:1800px!important}.bulk-view-body.bulk .exel-view .empty-fill-row{flex:1 1 auto;min-height:32px;align-items:stretch}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column{min-height:100%;background-color:#fff;background-image:repeating-linear-gradient(to bottom,#fff 0 31px,#dcdcdc 31px 32px);background-repeat:repeat-y;background-size:100% 32px}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.multi-column{background-image:none;background-color:transparent}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sticky-col-index,.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sl-no{background-color:#f1f1f1;background-image:repeating-linear-gradient(to bottom,#f1f1f1 0 31px,#dcdcdc 31px 32px)}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-row{height:100%;align-items:stretch}.bulk-view-option{background:#fff;border-top:1px solid #f1f1f1;padding:0 20px;position:fixed;width:100%;bottom:50px;display:flex;align-items:center}.bulk-view-option button{background:transparent;border-radius:0;border:none;border-left:1px solid #f1f1f1;color:#747576;font-size:11px;font-weight:500;padding:0 .5rem;margin:0;height:2rem;position:relative}.bulk-view-option button:last-of-type{border-right:1px solid #f1f1f1}.bulk-view-option button.active{color:#1e5dd3}.bulk-view-option button.active:before{background:#fff;content:\"\";position:absolute;top:-1px;left:0;height:1px;width:100%}.bulk-view-footer{height:50px;box-shadow:0 0 15px #1e03d259;padding:10px 20px;position:fixed;width:100%;bottom:0;display:flex;align-items:center;justify-content:space-between;background:#fff}.bulk-view-footer .left p{color:#747576;font-size:13px;font-weight:500;margin:0}.bulk-view-footer .right button{font-size:12px;background:#fff;border:1px solid #dcdcdc;color:#747576;border-radius:2px;padding:8px 18px;cursor:pointer;text-transform:uppercase}.bulk-view-footer .right button+button{margin-left:4px}.bulk-view-footer .right button.blue{color:#fff;background:#1e5dd3}.bulk-view-footer .right button:disabled{background:#f1f1f1;border-color:#f1f1f1;pointer-events:none;cursor:not-allowed;color:#747576}\n"] }]
|
|
63
|
+
args: [{ selector: 'app-bulk-responsibility-view', template: "<!-- --------------------------------------------------------------------upward is new one-------------------- -->\r\n<app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<!-- HTML for multiple tabs -->\r\n<ng-container *ngIf=\"responsibilityType === 'multiTab'\">\r\n <ng-template #dropdownErr let-invalid>\r\n <i *ngIf=\"invalid\" class=\"icons\" [appTooltip]=\"VALIDATION_MESSAGES.DROPDOWN\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\r\n </ng-template>\r\n <div class=\"bulk-view\">\r\n <div class=\"bulk-view-head\">\r\n <h2 class=\"bulk-view-title\">\r\n {{fileName}}\r\n </h2>\r\n </div>\r\n <div class=\"bulk-view-body bulk\" [class.is-horizontally-scrolled]=\"isHorizontallyScrolled\"\r\n (scroll)=\"onGridScroll($event)\">\r\n <div class=\"exel-view\">\r\n <div class=\"exel-view-row head\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\">#</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\">Responsibility Name <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Program</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\">Program Type</div>\r\n <div class=\"exel-view-column\">Program</div>\r\n <div class=\"exel-view-column\">Program Category</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Entrusted By</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Entrust To <span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Person or Group<span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">All or Any Persons</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Key Responsibility?</div>\r\n <div class=\"exel-view-column\" *ngIf=\"tabType === 'frequency'\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-row\">\r\n <!-- <div class=\"exel-view-column large\">Frequency of Occurrence and Completion Window <span class=\"required\">*</span></div> -->\r\n <div class=\"exel-view-column large\">{{responsibilityBulkUpload?.header.includes('Program') ?\r\n responsibilityBulkUpload?.header[8]?.slice(0, -1) :\r\n responsibilityBulkUpload?.header[5]?.slice(0, -1)}}<span class=\"required\">*</span></div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <ng-container *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-column\">Frequency <span class=\"required\">*</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Due Date <span class=\"info-text\">(Month)</span></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\">Due Time</div>\r\n <div class=\"exel-view-column\">Start <span class=\"info-text\">(No. of days before the due\r\n date)</span></div>\r\n <div class=\"exel-view-column\">Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be completed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of\r\n days after the due date. Select \"0\" if the responsibility must be completed on\r\n the due date)</span></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\">Responsibility Ends After Occurences <span\r\n class=\"info-text\">(Number of occurrences)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Day)</span></div>\r\n <div class=\"exel-view-column\">Responsibility Ends By Date <span\r\n class=\"info-text\">(Month)</span></div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column two-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Responsibility Centre</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\">Responsibility Centre Name</div>\r\n <div class=\"exel-view-column\">Responsibility Centre Type</div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\">Risk Class</div>\r\n <div class=\"exel-view-column\">Objective</div>\r\n <div class=\"exel-view-column\">Notes</div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Format & Evidence</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\" [class.three-column]=\"false\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Format</div>\r\n <div class=\"exel-view-column\">Format For Responsibility (link)</div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\">Evidence</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Assessments or Checkpoints</div> -->\r\n <div class=\"exel-view-column four-column\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Review of Responsibility</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\">Reviewer</div>\r\n <div class=\"exel-view-column\">Reviewer Type\r\n <span class=\"info-text\">(Specify the type of reviewer flow)</span>\r\n\r\n </div>\r\n\r\n <div class=\"exel-view-column\">Review Start <span class=\"info-text\">(No. of days before the\r\n due date)</span></div>\r\n <div class=\"exel-view-column\">Review Fail <span class=\"info-text\"\r\n appTooltip=\"(No. of days after the due date. Select '0' if the responsibility must be reviewed on the due date)\"\r\n placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">(No. of days\r\n after the due date. Select \"0\" if the responsibility must be reviewed on the due\r\n date)</span></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row\">\r\n <div class=\"exel-view-column large\">Overseer</div>\r\n </div>\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\">Always Notify</div>\r\n <div class=\"exel-view-column\">Notify on Failure</div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">Overseer</div> -->\r\n\r\n <!-- Collaborator -->\r\n <div class=\"exel-view-column\">Collaborator</div>\r\n\r\n </div>\r\n <div class=\"exel-view-row\" *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\" [class.error]=\"!report?.isValid\">{{i+1}}</div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\" [class.error]=\"!report.responsibilityName\">\r\n {{report?.responsibilityName}} <i *ngIf=\"!report.responsibilityName\" class=\"icons\"\r\n [appTooltip]=\"'Enter a name for this responsibility.'\" placement=\"bottom-right\" type=\"white\"\r\n delay=\"0\" [tooltipMandatory]=true></i></div>\r\n <div class=\"exel-view-column multi-column\"\r\n *ngIf=\"responsibilityBulkUpload?.header.includes('Program')\" [class.error]=\"false\"\r\n [class.three-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.three-column]=\"true\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.programType === false\">\r\n {{report?.programType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.programType === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.program === false\">\r\n {{report?.program}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.program === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.programCategory === false\">\r\n {{report?.programCategory}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.programCategory === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.assignor === false\">{{report?.assignor}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.assignor === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.assignee || !report?.userValidateWithProgram?.isValidAssignee || (!report?.isValidUser) || report?.dropdownValidation?.assignee === false\">\r\n {{report?.assignee}}\r\n <!-- || (!report?.isValidUser) -->\r\n <i *ngIf=\"!report?.assignee\" class=\"icons\"\r\n [appTooltip]=\"'Select the user responsible for completing this responsibility. '\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.assignee && report?.dropdownValidation?.assignee === false }\"></ng-container>\r\n <i *ngIf=\"(report?.assignee) && report?.dropdownValidation?.assignee !== false && !report?.userValidateWithProgram?.isValidAssignee\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.assigneeType === false\">\r\n {{report?.assigneeType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.assigneeType === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.keyResponsibility === false\">\r\n {{report?.keyResponsibility}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.keyResponsibility === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\" [class.error]=\"!report?.frequency || report?.dropdownValidation?.frequency === false\">{{report?.frequency}}\r\n <i *ngIf=\"!report?.frequency\" class=\"icons\"\r\n [appTooltip]=\"'Select a frequency for this responsibility.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.frequency && report?.dropdownValidation?.frequency === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.day === false || !report?.validDate || report?.isPastDate\">\r\n {{report?.day}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.day === false }\"></ng-container>\r\n <i *ngIf=\"report?.dropdownValidation?.day !== false && !report?.validDate\" class=\"icons\" [appTooltip]=\"'Invalid Due Date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <i *ngIf=\"report?.dropdownValidation?.day !== false && report?.isPastDate\" class=\"icons\"\r\n [appTooltip]=\"'This date occurs in the past. Select a future date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.month === false || !report?.validDate || report?.isPastDate\">\r\n {{report?.month}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.month === false }\"></ng-container>\r\n <i *ngIf=\"report?.dropdownValidation?.month !== false && !report?.validDate\" class=\"icons\" [appTooltip]=\"'Invalid Due Date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n <i *ngIf=\"report?.dropdownValidation?.month !== false && report?.isPastDate\" class=\"icons\"\r\n [appTooltip]=\"'This date occurs in the past. Select a future date.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"\r\n [class.error]=\"!report?.isValidDueTime || report?.dropdownValidation?.dueTime === false\">{{report?.dueTime}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: !report?.isValidDueTime || report?.dropdownValidation?.dueTime === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!!report?.responsibilityWindowError\">{{report?.responsibilityWindow}}\r\n <i *ngIf=\"report?.responsibilityWindowError\" class=\"icons\"\r\n [appTooltip]=\"report?.responsibilityWindowError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!!report?.failedAfterError\">{{report?.failedAfter}}\r\n <i *ngIf=\"report?.failedAfterError\" class=\"icons\"\r\n [appTooltip]=\"report?.failedAfterError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsAfterOccurrences\">{{report?.endsAfterOccurrences}}\r\n <i *ngIf=\"!report?.isValidEndsAfterOccurrences\" class=\"icons\"\r\n [appTooltip]=\"report?.endsAfterOccurrencesError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsByDateDay\">{{report?.endsByDateDay}}\r\n <i *ngIf=\"!report?.isValidEndsByDateDay\" class=\"icons\"\r\n [appTooltip]=\"report?.endsByDateDayError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!report?.isValidEndsByDateMonth\">{{report?.endsByDateMonth}}\r\n <i *ngIf=\"!report?.isValidEndsByDateMonth\" class=\"icons\"\r\n [appTooltip]=\"report?.endsByDateMonthError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.responsibilityCenter === false\">\r\n {{report?.responsibilityCenter}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.responsibilityCenter === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.responsibilityCenterType === false\">\r\n {{report?.responsibilityCenterType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.responsibilityCenterType === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.reportClass === false\">\r\n {{report?.reportClass}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reportClass === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\">{{report?.objective}}</div>\r\n <div class=\"exel-view-column\">{{report?.notes}}</div>\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [class.error]=\"report?.dropdownValidation?.isFormat === false\">{{report?.isFormat}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.isFormat === false }\"></ng-container>\r\n </div>\r\n <a class=\"exel-view-column external-link\" [href]=\"report?.formatForResponsibility\"\r\n target=\"_blank\">{{report?.formatForResponsibility}}</a>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\" [class.small-column]=\"true\"\r\n [class.error]=\"report?.dropdownValidation?.documentEvidenceRequired === false\">\r\n {{report?.documentEvidenceRequired}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.documentEvidenceRequired === false }\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"exel-view-column\">{{report?.assessments}}</div> -->\r\n <div class=\"exel-view-column multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.four-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.reviewer === false || (report?.reviewer && (\r\n !report?.userValidateWithProgram?.isValidReviewer ))\">{{report?.reviewer}}\r\n\r\n <!-- <i *ngIf=\"(report?.reviewer && report?.reviewer === report?.assignor)\"\r\n class=\"icons\"\r\n [appTooltip]=\"((report?.assignor)?'The Assignor cannot also be the Reviewer of this responsibility.':'You cannot be a Reviewer of this responsibility since you are the assignor. ') +'Select another user as the Reviewer'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i> -->\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reviewer === false }\"></ng-container>\r\n <i *ngIf=\"report?.reviewer && report?.dropdownValidation?.reviewer !== false && !report?.userValidateWithProgram?.isValidReviewer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.reviewerType === false\">\r\n {{report?.reviewerType}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.reviewerType === false }\"></ng-container>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!!report?.reviewToBeCompletedWithinError\">{{report?.reviewToBeCompletedWithin}}\r\n <i *ngIf=\"report?.reviewToBeCompletedWithinError\" class=\"icons\"\r\n [appTooltip]=\"report?.reviewToBeCompletedWithinError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"!!report?.reviewWillBeFailedAfterError\">{{report?.reviewWillBeFailedAfter}}\r\n <i *ngIf=\"report?.reviewWillBeFailedAfterError\" class=\"icons\"\r\n [appTooltip]=\"report?.reviewWillBeFailedAfterError\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true></i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-row multi-column\" [class.two-column]=\"true\">\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.overseer === false || (report?.overseer && (\r\n !report?.userValidateWithProgram?.isValidOverseer ))\">\r\n {{report?.overseer}}\r\n\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.overseer === false }\"></ng-container>\r\n <i *ngIf=\"(report?.overseer) && report?.dropdownValidation?.overseer !== false && !report?.userValidateWithProgram?.isValidOverseer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n <div class=\"exel-view-column\" [class.error]=\"report?.dropdownValidation?.notifyOnFailure === false || (report?.notifyOnFailure && (\r\n !report?.userValidateWithProgram?.isValidNotifyOnFailure ))\">\r\n {{report?.notifyOnFailure}}\r\n\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.notifyOnFailure === false }\"></ng-container>\r\n <i *ngIf=\"(report?.notifyOnFailure) && report?.dropdownValidation?.notifyOnFailure !== false && !report?.userValidateWithProgram?.isValidNotifyOnFailure\"\r\n class=\"icons\"\r\n [appTooltip]=\"'This user is not associated with the selected Program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"exel-view-column\"\r\n [class.error]=\"report?.dropdownValidation?.collaborator === false\">{{report?.collaborator}}\r\n <ng-container *ngTemplateOutlet=\"dropdownErr; context: { $implicit: report?.dropdownValidation?.collaborator === false }\"></ng-container>\r\n </div>\r\n\r\n <!-- <div class=\"exel-view-column\" [class.error]=\"(report?.overseer) && ((report?.overseer === report?.assignee) ||(report?.reviewer === report?.overseer) || (report?.overseer == report?.assignor) || (!report?.userValidateWithProgram?.isValidOverseer))\">\r\n {{report?.overseer}}\r\n <i *ngIf=\"(report?.overseer) && ((report?.reviewer === report?.overseer))\"\r\n class=\"icons\"\r\n [appTooltip]=\"'The Reviewer cannot also be the Overseer of this responsibility. Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n\r\n <i *ngIf=\"report?.overseer && (report?.overseer === report?.assignee)\" class=\"icons\"\r\n [appTooltip]=\"'The Assignee cannot also be the Overseer of this responsibility. Select another user as the Overseer'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"((report?.overseer) && (report?.overseer == report?.assignor))\"\r\n class=\"icons\"\r\n [appTooltip]=\"((report?.assignor)?'The Assignor cannot also be the Overseer of this responsibility. ':'You cannot be an Overseer of this responsibility since you are the Assignor. ') +'Select another user as the Overseer.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n <i *ngIf=\"!report?.userValidateWithProgram?.isValidOverseer\"\r\n class=\"icons\"\r\n [appTooltip]=\"'Selected user is not a valid overseer for selected program.'\"\r\n placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=true>\r\n </i>\r\n </div> -->\r\n </div>\r\n\r\n <div class=\"exel-view-row empty-fill-row\" aria-hidden=\"true\">\r\n <div class=\"exel-view-column sl-no sticky-col sticky-col-index\"></div>\r\n <div class=\"exel-view-column sticky-col sticky-col-name\"></div>\r\n <div class=\"exel-view-column multi-column three-column\" *ngIf=\"hasProgramColumn\">\r\n <div class=\"exel-view-row multi-column three-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\"\r\n *ngIf=\"tabType === 'frequency'\">\r\n <div class=\"exel-view-row multi-column\"\r\n [class.five-column]=\"!hasExtendedFrequencyColumns\"\r\n [class.nine-column]=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\" *ngIf=\"hasExtendedFrequencyColumns\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <ng-container *ngIf=\"hasExtendedFrequencyColumns\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column multi-column\">\r\n <div class=\"exel-view-row multi-column\">\r\n <div class=\"exel-view-column small-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column small-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column four-column\">\r\n <div class=\"exel-view-row multi-column four-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column multi-column two-column\">\r\n <div class=\"exel-view-row multi-column two-column\">\r\n <div class=\"exel-view-column\"></div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n </div>\r\n <div class=\"exel-view-column\"></div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ------------------------------------------------old code dynamic------------------------------------------------- -->\r\n\r\n <!-- *ngFor=\"let report of responsibilityBulkUpload?.reports; let i = index\" -->\r\n </div>\r\n </div>\r\n <div class=\"bulk-view-option\">\r\n <button *ngIf=\"bulkUpload?.frequency?.reports?.length\" [class.active]=\"tabType === 'frequency'\"\r\n (click)=\"selectedTab.emit('frequency')\">Frequency Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.ongoing?.reports?.length\" [class.active]=\"tabType === 'ongoing'\"\r\n (click)=\"selectedTab.emit('ongoing')\">Ongoing Responsibilities</button>\r\n <button *ngIf=\"bulkUpload?.onCompletion?.reports?.length\" [class.active]=\"tabType === 'onCompletion'\"\r\n (click)=\"selectedTab.emit('onCompletion')\">On Completion Responsibilities</button>\r\n </div>\r\n <div class=\"bulk-view-footer\">\r\n <!-- <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityBulkUpload?.reports?.length}} responsibilities will be\r\n uploaded.</p>\r\n </div> -->\r\n <div class=\"left\">\r\n <p>{{finalResponsibilities}} out of {{responsibilityMultiTabBulkUpload?.length}}\r\n {{responsibilityMultiTabBulkUpload?.length > 1 ? 'responsibilities' : 'responsibility'}} will be\r\n uploaded.</p>\r\n </div>\r\n <div class=\"right\">\r\n <button (click)=\"close()\" id=\"bulk-resp-cancel\">Cancel</button>\r\n <button (click)=\"submit()\" id=\"bulk-resp-confirm\" [disabled]=\"!isConfirmClickable\"\r\n class=\"blue\">Confirm</button>\r\n <!-- finalResponsibilities < 1 -->\r\n </div>\r\n </div>\r\n </div>\r\n <app-loader *ngIf=\"loader\"></app-loader>\r\n\r\n</ng-container>\r\n\r\n<!-- --------------------------------------------------------------------upward is new one-------------------- -->", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#747576;border-radius:16px}::-webkit-scrollbar{height:15px}.bulk-view{position:fixed;inset:0;z-index:11}.bulk-view-head{height:60px;padding:20px 24px;background:#161b2f;display:flex;justify-content:flex-start}.bulk-view-title{font-size:16px;line-height:20px;font-weight:400;margin:0;color:#fff}.bulk-view-body{height:calc(100vh - 110px);overflow:auto;width:100%;background:#fff}.bulk-view-body .exel-view{display:block}.bulk-view-body .exel-view-row{display:flex;width:100%}.bulk-view-body .exel-view-row.head .exel-view-column{font-weight:500;font-size:14px;min-height:26px;background:#f1f1f1;padding:0;word-break:unset}.bulk-view-body .exel-view-row.multi-column .exel-view-column{width:140px;min-width:140px}.bulk-view-body .exel-view-row.multi-column .external-link{color:#1e5dd3;text-decoration:none}.bulk-view-body .exel-view-column{width:300px;min-width:300px;padding:0 10px;border-right:1px solid #dcdcdc;border-bottom:1px solid #dcdcdc;display:flex;align-items:center;justify-content:center;text-align:center;word-break:break-all;line-height:16px;font-size:12px;color:#161b2f;flex-wrap:wrap;position:relative}.bulk-view-body .exel-view-column i.icons{position:absolute;top:8px;right:10px;cursor:pointer;color:#d93b41}.bulk-view-body .exel-view-column.large{width:100%;min-width:auto}.bulk-view-body .exel-view-column.error{border:1px solid #EB2424!important;padding-right:24px}.bulk-view-body .exel-view-column.error+.error{border-left:none!important}.bulk-view-body .exel-view-column span.required{color:#eb2424;display:contents}.bulk-view-body .exel-view-column .exel-view-row .exel-view-column{width:100%}.bulk-view-body .exel-view-column.sticky-col{position:sticky;z-index:2;background:#fff}.bulk-view-body .exel-view-column.sticky-col-index{left:0;z-index:3;background:#f1f1f1}.bulk-view-body .exel-view-column.sticky-col-name{left:60px}.bulk-view-body .exel-view-column.sl-no{background:#f1f1f1;width:60px;min-width:60px;min-height:30px;font-weight:400}.bulk-view-body .exel-view-column.sl-no.error{background:#f5d6d7;border:none;padding-right:10px;border-bottom:1px solid #dcdcdc}.bulk-view-body .exel-view-column.multi-column{padding:0;border:none}.bulk-view-body .exel-view-column.multi-column .exel-view-row{height:100%}.bulk-view-body .exel-view-column.multi-column .exel-view-column{width:50%;min-width:50%}.bulk-view-body .exel-view-column.multi-column .exel-view-column+.exel-view-column{border-left:none}.bulk-view-body.bulk{height:calc(100vh - 142px)}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name{overflow:visible}.bulk-view-body.bulk.is-horizontally-scrolled .sticky-col-name:after{content:\"\";position:absolute;top:-1px;bottom:-1px;right:0;width:8px;pointer-events:none;box-shadow:4px 0 8px #1e5dd326}.bulk-view-body.bulk .exel-view{display:flex;flex-direction:column;width:max-content;min-width:100%;min-height:100%}.bulk-view-body.bulk .exel-view-row{width:max-content;min-width:100%}.bulk-view-body.bulk .exel-view-row.head{position:sticky;top:0;z-index:4}.bulk-view-body.bulk .exel-view-row.head .exel-view-column{min-height:34px}.bulk-view-body.bulk .exel-view-row.head .exel-view-column.sticky-col{background:#f1f1f1;z-index:5}.bulk-view-body.bulk .exel-view-row.head .exel-view-column .info-text{font-size:10px;display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding:0 8px}.bulk-view-body.bulk .exel-view-row.two-column .exel-view-column{min-width:250px!important}.bulk-view-body.bulk .exel-view-row.three-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.four-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.five-column .exel-view-column,.bulk-view-body.bulk .exel-view-row.nine-column .exel-view-column{width:200px;min-width:200px!important}.bulk-view-body.bulk .exel-view-column .exel-view-row .exel-view-column.small-column{width:120px;min-width:120px!important}.bulk-view-body.bulk .exel-view-column.multi-column .exel-view-column{min-width:unset}.bulk-view-body.bulk .exel-view-column.two-column{width:500px;min-width:500px!important}.bulk-view-body.bulk .exel-view-column.three-column{width:600px;min-width:600px!important}.bulk-view-body.bulk .exel-view-column.four-column{width:800px;min-width:800px!important}.bulk-view-body.bulk .exel-view-column.five-column{width:1000px;min-width:1000px!important}.bulk-view-body.bulk .exel-view-column.nine-column{width:1800px;min-width:1800px!important}.bulk-view-body.bulk .exel-view .empty-fill-row{flex:1 1 auto;min-height:32px;align-items:stretch}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column{min-height:100%;background-color:#fff;background-image:repeating-linear-gradient(to bottom,#fff 0 31px,#dcdcdc 31px 32px);background-repeat:repeat-y;background-size:100% 32px}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.multi-column{background-image:none;background-color:transparent}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sticky-col-index,.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-column.sl-no{background-color:#f1f1f1;background-image:repeating-linear-gradient(to bottom,#f1f1f1 0 31px,#dcdcdc 31px 32px)}.bulk-view-body.bulk .exel-view .empty-fill-row .exel-view-row{height:100%;align-items:stretch}.bulk-view-option{background:#fff;border-top:1px solid #f1f1f1;padding:0 20px;position:fixed;width:100%;bottom:50px;display:flex;align-items:center}.bulk-view-option button{background:transparent;border-radius:0;border:none;border-left:1px solid #f1f1f1;color:#747576;font-size:11px;font-weight:500;padding:0 .5rem;margin:0;height:2rem;position:relative}.bulk-view-option button:last-of-type{border-right:1px solid #f1f1f1}.bulk-view-option button.active{color:#1e5dd3}.bulk-view-option button.active:before{background:#fff;content:\"\";position:absolute;top:-1px;left:0;height:1px;width:100%}.bulk-view-footer{height:50px;box-shadow:0 0 15px #1e03d259;padding:10px 20px;position:fixed;width:100%;bottom:0;display:flex;align-items:center;justify-content:space-between;background:#fff}.bulk-view-footer .left p{color:#747576;font-size:13px;font-weight:500;margin:0}.bulk-view-footer .right button{font-size:12px;background:#fff;border:1px solid #dcdcdc;color:#747576;border-radius:2px;padding:8px 18px;cursor:pointer;text-transform:uppercase}.bulk-view-footer .right button+button{margin-left:4px}.bulk-view-footer .right button.blue{color:#fff;background:#1e5dd3}.bulk-view-footer .right button:disabled{background:#f1f1f1;border-color:#f1f1f1;pointer-events:none;cursor:not-allowed;color:#747576}\n"] }]
|
|
64
64
|
}], propDecorators: { responsibilityBulkUpload: [{
|
|
65
65
|
type: Input
|
|
66
66
|
}], fileName: [{
|
|
@@ -82,4 +82,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
82
82
|
}], responsibilityType: [{
|
|
83
83
|
type: Input
|
|
84
84
|
}] } });
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVsay1yZXNwb25zaWJpbGl0eS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvYnVsay1yZXNwb25zaWJpbGl0eS12aWV3L2J1bGstcmVzcG9uc2liaWxpdHktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi9zaGFyZWRDb21wb25lbnRzL2J1bGstcmVzcG9uc2liaWxpdHktdmlldy9idWxrLXJlc3BvbnNpYmlsaXR5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7QUFNckUsTUFBTSxPQUFPLCtCQUErQjtJQUw1QztRQU9FLHdCQUFtQixHQUFHLG1CQUFtQixDQUFDO1FBS2pDLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixZQUFPLEdBQTZDLFdBQVcsQ0FBQztRQUcvRCxtQ0FBOEIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BELFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyx1QkFBa0IsR0FBRyxXQUFXLENBQUM7UUFDMUMsMEJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNwQywyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDL0IscUNBQWdDLEdBQVEsRUFBRSxDQUFDO0tBaUQ1QztJQS9DQyxJQUFJLDJCQUEyQjtRQUM3QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsMkJBQTJCLENBQUM7SUFDdEUsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDakMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUMzRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLENBQUM7aUJBQ2pDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLFVBQVUsRUFBRTtZQUMxQyxJQUFJLENBQUMsZ0NBQWdDO2dCQUNuQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUN6QyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQ2pDLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FDdkMsQ0FBQztZQUNKLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxDQUNuRSxDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQ2hELENBQUM7WUFDRixJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDM0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNoQixJQUFJLENBQUMscUJBQXFCLElBQUksQ0FBQyxDQUFDO2lCQUNqQztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVk7UUFDdkIsTUFBTSxVQUFVLEdBQUksS0FBSyxDQUFDLE1BQXNCLEVBQUUsVUFBVSxJQUFJLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQzsrR0FsRVUsK0JBQStCO21HQUEvQiwrQkFBK0Isc2JDUDVDLG85c0NBc2ZrSDs7NEZEL2VyRywrQkFBK0I7a0JBTDNDLFNBQVM7K0JBQ0UsOEJBQThCOzhCQVEvQix3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFSSw4QkFBOEI7c0JBQXZDLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0Usa0JBQWtCO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVkFMSURBVElPTl9NRVNTQUdFUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9yZXNwb25zaWJpbGl0eSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWJ1bGstcmVzcG9uc2liaWxpdHktdmlldycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2J1bGstcmVzcG9uc2liaWxpdHktdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYnVsay1yZXNwb25zaWJpbGl0eS12aWV3LmNvbXBvbmVudC5sZXNzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCdWxrUmVzcG9uc2liaWxpdHlWaWV3Q29tcG9uZW50IHtcclxuXHJcbiAgVkFMSURBVElPTl9NRVNTQUdFUyA9IFZBTElEQVRJT05fTUVTU0FHRVM7XHJcblxyXG4gIEBJbnB1dCgpIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCE6IGFueTtcclxuICBASW5wdXQoKSBmaWxlTmFtZSE6IGFueTtcclxuICBASW5wdXQoKSBkZWZhdWx0T3duZXIhOiBhbnk7XHJcbiAgQElucHV0KCkgbG9hZGVyID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdGFiVHlwZTogJ2ZyZXF1ZW5jeScgfCAnb25nb2luZycgfCAnb25Db21wbGV0aW9uJyA9ICdmcmVxdWVuY3knO1xyXG4gIEBJbnB1dCgpIGJ1bGtVcGxvYWQ6IGFueTtcclxuXHJcbiAgQE91dHB1dCgpIHN1Ym1pdFJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZFRhYiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSByZXNwb25zaWJpbGl0eVR5cGUgPSAnc2luZ2xlVGFiJztcclxuICBmaW5hbFJlc3BvbnNpYmlsaXRpZXMgPSAwO1xyXG4gIGlzQ29uZmlybUNsaWNrYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzSG9yaXpvbnRhbGx5U2Nyb2xsZWQgPSBmYWxzZTtcclxuICByZXNwb25zaWJpbGl0eU11bHRpVGFiQnVsa1VwbG9hZDogYW55ID0gW107XHJcblxyXG4gIGdldCBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc1Byb2dyYW1Db2x1bW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyPy5pbmNsdWRlcygnUHJvZ3JhbScpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQpIHtcclxuICAgICAgdGhpcy5maW5hbFJlc3BvbnNpYmlsaXRpZXMgPSAwO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cy5mb3JFYWNoKChyaXNrOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmlzay5pc1ZhbGlkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbmFsUmVzcG9uc2liaWxpdGllcyArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eVR5cGUgPT09ICdtdWx0aVRhYicpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eU11bHRpVGFiQnVsa1VwbG9hZCA9XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k/LnJlcG9ydHM/LmNvbmNhdChcclxuICAgICAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8ucmVwb3J0cyxcclxuICAgICAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5yZXBvcnRzXHJcbiAgICAgICAgKTtcclxuICAgICAgdGhpcy5pc0NvbmZpcm1DbGlja2FibGUgPSB0aGlzLnJlc3BvbnNpYmlsaXR5TXVsdGlUYWJCdWxrVXBsb2FkPy5zb21lKFxyXG4gICAgICAgIChyZXNwb25zaWJpbGl0eTogYW55KSA9PiByZXNwb25zaWJpbGl0eS5pc1ZhbGlkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZmluYWxSZXNwb25zaWJpbGl0aWVzID0gMDtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eU11bHRpVGFiQnVsa1VwbG9hZD8uZm9yRWFjaCgocmlzazogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJpc2suaXNWYWxpZCkge1xyXG4gICAgICAgICAgdGhpcy5maW5hbFJlc3BvbnNpYmlsaXRpZXMgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25HcmlkU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2Nyb2xsTGVmdCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5zY3JvbGxMZWZ0ID8/IDA7XHJcbiAgICB0aGlzLmlzSG9yaXpvbnRhbGx5U2Nyb2xsZWQgPSBzY3JvbGxMZWZ0ID4gMDtcclxuICB9XHJcblxyXG4gIHN1Ym1pdCgpIHtcclxuICAgIHRoaXMuc3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xyXG4gIH1cclxufVxyXG4iLCI8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tdXB3YXJkIGlzIG5ldyBvbmUtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuPGFwcC1sb2FkZXIgKm5nSWY9XCJsb2FkZXJcIj48L2FwcC1sb2FkZXI+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbjwhLS0gSFRNTCBmb3IgbXVsdGlwbGUgdGFicyAtLT5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlc3BvbnNpYmlsaXR5VHlwZSA9PT0gJ211bHRpVGFiJ1wiPlxyXG4gICAgPG5nLXRlbXBsYXRlICNkcm9wZG93bkVyciBsZXQtaW52YWxpZD5cclxuICAgICAgICA8aSAqbmdJZj1cImludmFsaWRcIiBjbGFzcz1cImljb25zXCIgW2FwcFRvb2x0aXBdPVwiVkFMSURBVElPTl9NRVNTQUdFUy5EUk9QRE9XTlwiXHJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj4mI3hlOTMyOzwvaT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYnVsay12aWV3XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGstdmlldy1oZWFkXCI+XHJcbiAgICAgICAgICAgIDxoMiBjbGFzcz1cImJ1bGstdmlldy10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAge3tmaWxlTmFtZX19XHJcbiAgICAgICAgICAgIDwvaDI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGstdmlldy1ib2R5IGJ1bGtcIiBbY2xhc3MuaXMtaG9yaXpvbnRhbGx5LXNjcm9sbGVkXT1cImlzSG9yaXpvbnRhbGx5U2Nyb2xsZWRcIlxyXG4gICAgICAgICAgICAoc2Nyb2xsKT1cIm9uR3JpZFNjcm9sbCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IGhlYWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBzbC1ubyBzdGlja3ktY29sIHN0aWNreS1jb2wtaW5kZXhcIj4jPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gc3RpY2t5LWNvbCBzdGlja3ktY29sLW5hbWVcIj5SZXNwb25zaWJpbGl0eSBOYW1lIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LmhlYWRlci5pbmNsdWRlcygnUHJvZ3JhbScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRocmVlLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBsYXJnZVwiPlByb2dyYW08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtblwiIFtjbGFzcy50aHJlZS1jb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5Qcm9ncmFtIFR5cGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+UHJvZ3JhbTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5Qcm9ncmFtIENhdGVnb3J5PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+RW50cnVzdGVkIEJ5PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiBbY2xhc3MudHdvLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBsYXJnZVwiPkVudHJ1c3QgVG8gPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW5cIiBbY2xhc3MudHdvLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPlBlcnNvbiBvciBHcm91cDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5BbGwgb3IgQW55IFBlcnNvbnM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5LZXkgUmVzcG9uc2liaWxpdHk/PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiAqbmdJZj1cInRhYlR5cGUgPT09ICdmcmVxdWVuY3knXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpdmUtY29sdW1uXT1cIiFoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubmluZS1jb2x1bW5dPVwiaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIGxhcmdlXCI+RnJlcXVlbmN5IG9mIE9jY3VycmVuY2UgYW5kIENvbXBsZXRpb24gV2luZG93IDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIGxhcmdlXCI+e3tyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LmhlYWRlci5pbmNsdWRlcygnUHJvZ3JhbScpID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LmhlYWRlcls4XT8uc2xpY2UoMCwgLTEpIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LmhlYWRlcls1XT8uc2xpY2UoMCwgLTEpfX08c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZml2ZS1jb2x1bW5dPVwiIWhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubmluZS1jb2x1bW5dPVwiaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiVHlwZSA9PT0gJ2ZyZXF1ZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPkZyZXF1ZW5jeSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPkR1ZSBEYXRlIDxzcGFuIGNsYXNzPVwiaW5mby10ZXh0XCI+KERheSk8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5EdWUgRGF0ZSA8c3BhbiBjbGFzcz1cImluZm8tdGV4dFwiPihNb250aCk8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiAqbmdJZj1cImhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1wiPkR1ZSBUaW1lPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5TdGFydCA8c3BhbiBjbGFzcz1cImluZm8tdGV4dFwiPihOby4gb2YgZGF5cyBiZWZvcmUgdGhlIGR1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSk8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5GYWlsIDxzcGFuIGNsYXNzPVwiaW5mby10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFRvb2x0aXA9XCIoTm8uIG9mIGRheXMgYWZ0ZXIgdGhlIGR1ZSBkYXRlLiBTZWxlY3QgJzAnIGlmIHRoZSByZXNwb25zaWJpbGl0eSBtdXN0IGJlIGNvbXBsZXRlZCBvbiB0aGUgZHVlIGRhdGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+KE5vLiBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5cyBhZnRlciB0aGUgZHVlIGRhdGUuIFNlbGVjdCBcIjBcIiBpZiB0aGUgcmVzcG9uc2liaWxpdHkgbXVzdCBiZSBjb21wbGV0ZWQgb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkdWUgZGF0ZSk8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPlJlc3BvbnNpYmlsaXR5IEVuZHMgQWZ0ZXIgT2NjdXJlbmNlcyA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5mby10ZXh0XCI+KE51bWJlciBvZiBvY2N1cnJlbmNlcyk8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+UmVzcG9uc2liaWxpdHkgRW5kcyBCeSBEYXRlIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbmZvLXRleHRcIj4oRGF5KTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5SZXNwb25zaWJpbGl0eSBFbmRzIEJ5IERhdGUgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImluZm8tdGV4dFwiPihNb250aCk8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gdHdvLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbGFyZ2VcIj5SZXNwb25zaWJpbGl0eSBDZW50cmU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtbiB0d28tY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPlJlc3BvbnNpYmlsaXR5IENlbnRyZSBOYW1lPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPlJlc3BvbnNpYmlsaXR5IENlbnRyZSBUeXBlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+UmlzayBDbGFzczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+T2JqZWN0aXZlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5Ob3RlczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgW2NsYXNzLnR3by1jb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbGFyZ2VcIj5Gb3JtYXQgJiBFdmlkZW5jZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCIgW2NsYXNzLnR3by1jb2x1bW5dPVwidHJ1ZVwiIFtjbGFzcy50aHJlZS1jb2x1bW5dPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgW2NsYXNzLnNtYWxsLWNvbHVtbl09XCJ0cnVlXCI+Rm9ybWF0PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPkZvcm1hdCBGb3IgUmVzcG9uc2liaWxpdHkgKGxpbmspPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiIFtjbGFzcy5zbWFsbC1jb2x1bW5dPVwidHJ1ZVwiPkV2aWRlbmNlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5Bc3Nlc3NtZW50cyBvciBDaGVja3BvaW50czwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBmb3VyLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbGFyZ2VcIj5SZXZpZXcgb2YgUmVzcG9uc2liaWxpdHk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtblwiIFtjbGFzcy5mb3VyLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPlJldmlld2VyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPlJldmlld2VyIFR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tdGV4dFwiPihTcGVjaWZ5IHRoZSB0eXBlIG9mIHJldmlld2VyIGZsb3cpPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+UmV2aWV3IFN0YXJ0IDxzcGFuIGNsYXNzPVwiaW5mby10ZXh0XCI+KE5vLiBvZiBkYXlzIGJlZm9yZSB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVlIGRhdGUpPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5SZXZpZXcgRmFpbCA8c3BhbiBjbGFzcz1cImluZm8tdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFRvb2x0aXA9XCIoTm8uIG9mIGRheXMgYWZ0ZXIgdGhlIGR1ZSBkYXRlLiBTZWxlY3QgJzAnIGlmIHRoZSByZXNwb25zaWJpbGl0eSBtdXN0IGJlIHJldmlld2VkIG9uIHRoZSBkdWUgZGF0ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPihOby4gb2YgZGF5c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciB0aGUgZHVlIGRhdGUuIFNlbGVjdCBcIjBcIiBpZiB0aGUgcmVzcG9uc2liaWxpdHkgbXVzdCBiZSByZXZpZXdlZCBvbiB0aGUgZHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUpPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiIFtjbGFzcy50d28tY29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIGxhcmdlXCI+T3ZlcnNlZXI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtblwiIFtjbGFzcy50d28tY29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+QWx3YXlzIE5vdGlmeTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5Ob3RpZnkgb24gRmFpbHVyZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+T3ZlcnNlZXI8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQ29sbGFib3JhdG9yIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+Q29sbGFib3JhdG9yPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvd1wiICpuZ0Zvcj1cImxldCByZXBvcnQgb2YgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5yZXBvcnRzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gc2wtbm8gc3RpY2t5LWNvbCBzdGlja3ktY29sLWluZGV4XCIgW2NsYXNzLmVycm9yXT1cIiFyZXBvcnQ/LmlzVmFsaWRcIj57e2krMX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gc3RpY2t5LWNvbCBzdGlja3ktY29sLW5hbWVcIiBbY2xhc3MuZXJyb3JdPVwiIXJlcG9ydC5yZXNwb25zaWJpbGl0eU5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tyZXBvcnQ/LnJlc3BvbnNpYmlsaXR5TmFtZX19IDxpICpuZ0lmPVwiIXJlcG9ydC5yZXNwb25zaWJpbGl0eU5hbWVcIiBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidFbnRlciBhIG5hbWUgZm9yIHRoaXMgcmVzcG9uc2liaWxpdHkuJ1wiIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09dHJ1ZT4mI3hlOTMyOzwvaT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBtdWx0aS1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyLmluY2x1ZGVzKCdQcm9ncmFtJylcIiBbY2xhc3MuZXJyb3JdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGhyZWUtY29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCIgW2NsYXNzLnRocmVlLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cInJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5wcm9ncmFtVHlwZSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8ucHJvZ3JhbVR5cGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkVycjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5wcm9ncmFtVHlwZSA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cInJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5wcm9ncmFtID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmVwb3J0Py5wcm9ncmFtfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25FcnI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ucHJvZ3JhbSA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cInJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5wcm9ncmFtQ2F0ZWdvcnkgPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZXBvcnQ/LnByb2dyYW1DYXRlZ29yeX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duRXJyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LnByb2dyYW1DYXRlZ29yeSA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cInJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5hc3NpZ25vciA9PT0gZmFsc2VcIj57e3JlcG9ydD8uYXNzaWdub3J9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25FcnI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uYXNzaWdub3IgPT09IGZhbHNlIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBtdWx0aS1jb2x1bW5cIiBbY2xhc3MudHdvLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtblwiIFtjbGFzcy50d28tY29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiIXJlcG9ydD8uYXNzaWduZWUgfHwgIXJlcG9ydD8udXNlclZhbGlkYXRlV2l0aFByb2dyYW0/LmlzVmFsaWRBc3NpZ25lZSB8fCAoIXJlcG9ydD8uaXNWYWxpZFVzZXIpIHx8IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5hc3NpZ25lZSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8uYXNzaWduZWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gfHwgKCFyZXBvcnQ/LmlzVmFsaWRVc2VyKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFyZXBvcnQ/LmFzc2lnbmVlXCIgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidTZWxlY3QgdGhlIHVzZXIgcmVzcG9uc2libGUgZm9yIGNvbXBsZXRpbmcgdGhpcyByZXNwb25zaWJpbGl0eS4gJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkVycjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydD8uYXNzaWduZWUgJiYgcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmFzc2lnbmVlID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIocmVwb3J0Py5hc3NpZ25lZSkgJiYgcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmFzc2lnbmVlICE9PSBmYWxzZSAmJiAhcmVwb3J0Py51c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbT8uaXNWYWxpZEFzc2lnbmVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidUaGlzIHVzZXIgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VsZWN0ZWQgUHJvZ3JhbS4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPXRydWU+JiN4ZTkzMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwicmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmFzc2lnbmVlVHlwZSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8uYXNzaWduZWVUeXBlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25FcnI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uYXNzaWduZWVUeXBlID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwicmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmtleVJlc3BvbnNpYmlsaXR5ID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8ua2V5UmVzcG9uc2liaWxpdHl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25FcnI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ua2V5UmVzcG9uc2liaWxpdHkgPT09IGZhbHNlIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBtdWx0aS1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZml2ZS1jb2x1bW5dPVwiIWhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5uaW5lLWNvbHVtbl09XCJoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYlR5cGUgPT09ICdmcmVxdWVuY3knXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZpdmUtY29sdW1uXT1cIiFoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5pbmUtY29sdW1uXT1cImhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiBbY2xhc3MuZXJyb3JdPVwiIXJlcG9ydD8uZnJlcXVlbmN5IHx8IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5mcmVxdWVuY3kgPT09IGZhbHNlXCI+e3tyZXBvcnQ/LmZyZXF1ZW5jeX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhcmVwb3J0Py5mcmVxdWVuY3lcIiBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiJ1NlbGVjdCBhIGZyZXF1ZW5jeSBmb3IgdGhpcyByZXNwb25zaWJpbGl0eS4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPXRydWU+JiN4ZTkzMjs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duRXJyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcmVwb3J0Py5mcmVxdWVuY3kgJiYgcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmZyZXF1ZW5jeSA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uZGF5ID09PSBmYWxzZSB8fCAhcmVwb3J0Py52YWxpZERhdGUgfHwgcmVwb3J0Py5pc1Bhc3REYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZXBvcnQ/LmRheX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duRXJyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmRheSA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwicmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmRheSAhPT0gZmFsc2UgJiYgIXJlcG9ydD8udmFsaWREYXRlXCIgY2xhc3M9XCJpY29uc1wiIFthcHBUb29sdGlwXT1cIidJbnZhbGlkIER1ZSBEYXRlLidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiB0eXBlPVwid2hpdGVcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09dHJ1ZT4mI3hlOTMyOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cInJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5kYXkgIT09IGZhbHNlICYmIHJlcG9ydD8uaXNQYXN0RGF0ZVwiIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInVGhpcyBkYXRlIG9jY3VycyBpbiB0aGUgcGFzdC4gU2VsZWN0IGEgZnV0dXJlIGRhdGUuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ubW9udGggPT09IGZhbHNlIHx8ICFyZXBvcnQ/LnZhbGlkRGF0ZSB8fCByZXBvcnQ/LmlzUGFzdERhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8ubW9udGh9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkVycjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5tb250aCA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwicmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/Lm1vbnRoICE9PSBmYWxzZSAmJiAhcmVwb3J0Py52YWxpZERhdGVcIiBjbGFzcz1cImljb25zXCIgW2FwcFRvb2x0aXBdPVwiJ0ludmFsaWQgRHVlIERhdGUuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwicmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/Lm1vbnRoICE9PSBmYWxzZSAmJiByZXBvcnQ/LmlzUGFzdERhdGVcIiBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiJ1RoaXMgZGF0ZSBvY2N1cnMgaW4gdGhlIHBhc3QuIFNlbGVjdCBhIGZ1dHVyZSBkYXRlLidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiB0eXBlPVwid2hpdGVcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09dHJ1ZT4mI3hlOTMyOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiAqbmdJZj1cImhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cIiFyZXBvcnQ/LmlzVmFsaWREdWVUaW1lIHx8IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5kdWVUaW1lID09PSBmYWxzZVwiPnt7cmVwb3J0Py5kdWVUaW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25FcnI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiAhcmVwb3J0Py5pc1ZhbGlkRHVlVGltZSB8fCByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uZHVlVGltZSA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPnt7cmVwb3J0Py5yZXNwb25zaWJpbGl0eVdpbmRvd319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPnt7cmVwb3J0Py5mYWlsZWRBZnRlcn19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiIXJlcG9ydD8uaXNWYWxpZEVuZHNBZnRlck9jY3VycmVuY2VzXCI+e3tyZXBvcnQ/LmVuZHNBZnRlck9jY3VycmVuY2VzfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhcmVwb3J0Py5pc1ZhbGlkRW5kc0FmdGVyT2NjdXJyZW5jZXNcIiBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInJlcG9ydD8uZW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiB0eXBlPVwid2hpdGVcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09dHJ1ZT4mI3hlOTMyOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCIhcmVwb3J0Py5pc1ZhbGlkRW5kc0J5RGF0ZURheVwiPnt7cmVwb3J0Py5lbmRzQnlEYXRlRGF5fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhcmVwb3J0Py5pc1ZhbGlkRW5kc0J5RGF0ZURheVwiIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwicmVwb3J0Py5lbmRzQnlEYXRlRGF5RXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPXRydWU+JiN4ZTkzMjs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiIXJlcG9ydD8uaXNWYWxpZEVuZHNCeURhdGVNb250aFwiPnt7cmVwb3J0Py5lbmRzQnlEYXRlTW9udGh9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFyZXBvcnQ/LmlzVmFsaWRFbmRzQnlEYXRlTW9udGhcIiBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInJlcG9ydD8uZW5kc0J5RGF0ZU1vbnRoRXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPXRydWU+JiN4ZTkzMjs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtbiB0d28tY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtbiB0d28tY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cInJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5yZXNwb25zaWJpbGl0eUNlbnRlciA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8ucmVzcG9uc2liaWxpdHlDZW50ZXJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkVycjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5yZXNwb25zaWJpbGl0eUNlbnRlciA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cInJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUgPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZXBvcnQ/LnJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duRXJyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LnJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cInJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5yZXBvcnRDbGFzcyA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tyZXBvcnQ/LnJlcG9ydENsYXNzfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duRXJyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LnJlcG9ydENsYXNzID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj57e3JlcG9ydD8ub2JqZWN0aXZlfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPnt7cmVwb3J0Py5ub3Rlc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbXVsdGktY29sdW1uXCIgW2NsYXNzLnR3by1jb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW5cIiBbY2xhc3MudHdvLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBtdWx0aS1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiBbY2xhc3Muc21hbGwtY29sdW1uXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cInJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5pc0Zvcm1hdCA9PT0gZmFsc2VcIj57e3JlcG9ydD8uaXNGb3JtYXR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duRXJyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmlzRm9ybWF0ID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gZXh0ZXJuYWwtbGlua1wiIFtocmVmXT1cInJlcG9ydD8uZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+e3tyZXBvcnQ/LmZvcm1hdEZvclJlc3BvbnNpYmlsaXR5fX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgW2NsYXNzLnNtYWxsLWNvbHVtbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwicmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZCA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8uZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25FcnI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPnt7cmVwb3J0Py5hc3Nlc3NtZW50c319PC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtblwiIFtjbGFzcy5mb3VyLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtblwiIFtjbGFzcy5mb3VyLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ucmV2aWV3ZXIgPT09IGZhbHNlIHx8IChyZXBvcnQ/LnJldmlld2VyICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXJlcG9ydD8udXNlclZhbGlkYXRlV2l0aFByb2dyYW0/LmlzVmFsaWRSZXZpZXdlciApKVwiPnt7cmVwb3J0Py5yZXZpZXdlcn19XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGkgKm5nSWY9XCIocmVwb3J0Py5yZXZpZXdlciAmJiByZXBvcnQ/LnJldmlld2VyID09PSByZXBvcnQ/LmFzc2lnbm9yKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIigocmVwb3J0Py5hc3NpZ25vcik/J1RoZSBBc3NpZ25vciBjYW5ub3QgYWxzbyBiZSB0aGUgUmV2aWV3ZXIgb2YgdGhpcyByZXNwb25zaWJpbGl0eS4nOidZb3UgY2Fubm90IGJlIGEgUmV2aWV3ZXIgb2YgdGhpcyByZXNwb25zaWJpbGl0eSBzaW5jZSB5b3UgYXJlIHRoZSBhc3NpZ25vci4gJykgKydTZWxlY3QgYW5vdGhlciB1c2VyIGFzIHRoZSBSZXZpZXdlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPXRydWU+JiN4ZTkzMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25FcnI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ucmV2aWV3ZXIgPT09IGZhbHNlIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cInJlcG9ydD8ucmV2aWV3ZXIgJiYgcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LnJldmlld2VyICE9PSBmYWxzZSAmJiAhcmVwb3J0Py51c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbT8uaXNWYWxpZFJldmlld2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidUaGlzIHVzZXIgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VsZWN0ZWQgUHJvZ3JhbS4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPXRydWU+JiN4ZTkzMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwicmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LnJldmlld2VyVHlwZSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8ucmV2aWV3ZXJUeXBlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25FcnI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ucmV2aWV3ZXJUeXBlID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+e3tyZXBvcnQ/LnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW59fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj57e3JlcG9ydD8ucmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXJ9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbXVsdGktY29sdW1uXCIgW2NsYXNzLnR3by1jb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW5cIiBbY2xhc3MudHdvLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ub3ZlcnNlZXIgPT09IGZhbHNlIHx8IChyZXBvcnQ/Lm92ZXJzZWVyICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXJlcG9ydD8udXNlclZhbGlkYXRlV2l0aFByb2dyYW0/LmlzVmFsaWRPdmVyc2VlciApKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmVwb3J0Py5vdmVyc2Vlcn19XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkVycjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5vdmVyc2VlciA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiKHJlcG9ydD8ub3ZlcnNlZXIpICYmIHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5vdmVyc2VlciAhPT0gZmFsc2UgJiYgIXJlcG9ydD8udXNlclZhbGlkYXRlV2l0aFByb2dyYW0/LmlzVmFsaWRPdmVyc2VlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInVGhpcyB1c2VyIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbGVjdGVkIFByb2dyYW0uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ubm90aWZ5T25GYWlsdXJlID09PSBmYWxzZSB8fCAocmVwb3J0Py5ub3RpZnlPbkZhaWx1cmUgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXJlcG9ydD8udXNlclZhbGlkYXRlV2l0aFByb2dyYW0/LmlzVmFsaWROb3RpZnlPbkZhaWx1cmUgKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8ubm90aWZ5T25GYWlsdXJlfX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duRXJyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/Lm5vdGlmeU9uRmFpbHVyZSA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiKHJlcG9ydD8ubm90aWZ5T25GYWlsdXJlKSAmJiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ubm90aWZ5T25GYWlsdXJlICE9PSBmYWxzZSAmJiAhcmVwb3J0Py51c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbT8uaXNWYWxpZE5vdGlmeU9uRmFpbHVyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInVGhpcyB1c2VyIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbGVjdGVkIFByb2dyYW0uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uY29sbGFib3JhdG9yID09PSBmYWxzZVwiPnt7cmVwb3J0Py5jb2xsYWJvcmF0b3J9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25FcnI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uY29sbGFib3JhdG9yID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiBbY2xhc3MuZXJyb3JdPVwiKHJlcG9ydD8ub3ZlcnNlZXIpICYmICgocmVwb3J0Py5vdmVyc2VlciA9PT0gcmVwb3J0Py5hc3NpZ25lZSkgfHwocmVwb3J0Py5yZXZpZXdlciA9PT0gcmVwb3J0Py5vdmVyc2VlcikgfHwgKHJlcG9ydD8ub3ZlcnNlZXIgPT0gcmVwb3J0Py5hc3NpZ25vcikgfHwgKCFyZXBvcnQ/LnVzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtPy5pc1ZhbGlkT3ZlcnNlZXIpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8ub3ZlcnNlZXJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIihyZXBvcnQ/Lm92ZXJzZWVyKSAmJiAoKHJlcG9ydD8ucmV2aWV3ZXIgPT09IHJlcG9ydD8ub3ZlcnNlZXIpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidUaGUgUmV2aWV3ZXIgY2Fubm90IGFsc28gYmUgdGhlIE92ZXJzZWVyIG9mIHRoaXMgcmVzcG9uc2liaWxpdHkuIFNlbGVjdCBhbm90aGVyIHVzZXIgYXMgdGhlIE92ZXJzZWVyLidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPXRydWU+JiN4ZTkzMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJyZXBvcnQ/Lm92ZXJzZWVyICYmIChyZXBvcnQ/Lm92ZXJzZWVyID09PSByZXBvcnQ/LmFzc2lnbmVlKVwiIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiJ1RoZSBBc3NpZ25lZSBjYW5ub3QgYWxzbyBiZSB0aGUgT3ZlcnNlZXIgb2YgdGhpcyByZXNwb25zaWJpbGl0eS4gU2VsZWN0IGFub3RoZXIgdXNlciBhcyB0aGUgT3ZlcnNlZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIoKHJlcG9ydD8ub3ZlcnNlZXIpICYmIChyZXBvcnQ/Lm92ZXJzZWVyID09IHJlcG9ydD8uYXNzaWdub3IpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIigocmVwb3J0Py5hc3NpZ25vcik/J1RoZSBBc3NpZ25vciBjYW5ub3QgYWxzbyBiZSB0aGUgT3ZlcnNlZXIgb2YgdGhpcyByZXNwb25zaWJpbGl0eS4gJzonWW91IGNhbm5vdCBiZSBhbiBPdmVyc2VlciBvZiB0aGlzIHJlc3BvbnNpYmlsaXR5IHNpbmNlIHlvdSBhcmUgdGhlIEFzc2lnbm9yLiAnKSArJ1NlbGVjdCBhbm90aGVyIHVzZXIgYXMgdGhlIE92ZXJzZWVyLidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPXRydWU+JiN4ZTkzMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFyZXBvcnQ/LnVzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtPy5pc1ZhbGlkT3ZlcnNlZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInU2VsZWN0ZWQgdXNlciBpcyBub3QgYSB2YWxpZCBvdmVyc2VlciBmb3Igc2VsZWN0ZWQgcHJvZ3JhbS4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBlbXB0eS1maWxsLXJvd1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIHNsLW5vIHN0aWNreS1jb2wgc3RpY2t5LWNvbC1pbmRleFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIHN0aWNreS1jb2wgc3RpY2t5LWNvbC1uYW1lXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbXVsdGktY29sdW1uIHRocmVlLWNvbHVtblwiICpuZ0lmPVwiaGFzUHJvZ3JhbUNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW4gdGhyZWUtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbXVsdGktY29sdW1uIHR3by1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uIHR3by1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maXZlLWNvbHVtbl09XCIhaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5pbmUtY29sdW1uXT1cImhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFiVHlwZSA9PT0gJ2ZyZXF1ZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maXZlLWNvbHVtbl09XCIhaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5uaW5lLWNvbHVtbl09XCJoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgKm5nSWY9XCJoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtbiB0d28tY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtbiB0d28tY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbXVsdGktY29sdW1uIHR3by1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uIHR3by1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBzbWFsbC1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gc21hbGwtY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtbiBmb3VyLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW4gZm91ci1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtbiB0d28tY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtbiB0d28tY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1vbGQgY29kZSBkeW5hbWljLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tICpuZ0Zvcj1cImxldCByZXBvcnQgb2YgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5yZXBvcnRzOyBsZXQgaSA9IGluZGV4XCIgLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLXZpZXctb3B0aW9uXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJidWxrVXBsb2FkPy5mcmVxdWVuY3k/LnJlcG9ydHM/Lmxlbmd0aFwiIFtjbGFzcy5hY3RpdmVdPVwidGFiVHlwZSA9PT0gJ2ZyZXF1ZW5jeSdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVGFiLmVtaXQoJ2ZyZXF1ZW5jeScpXCI+RnJlcXVlbmN5IFJlc3BvbnNpYmlsaXRpZXM8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ1bGtVcGxvYWQ/Lm9uZ29pbmc/LnJlcG9ydHM/Lmxlbmd0aFwiIFtjbGFzcy5hY3RpdmVdPVwidGFiVHlwZSA9PT0gJ29uZ29pbmcnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZFRhYi5lbWl0KCdvbmdvaW5nJylcIj5PbmdvaW5nIFJlc3BvbnNpYmlsaXRpZXM8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbj8ucmVwb3J0cz8ubGVuZ3RoXCIgW2NsYXNzLmFjdGl2ZV09XCJ0YWJUeXBlID09PSAnb25Db21wbGV0aW9uJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRUYWIuZW1pdCgnb25Db21wbGV0aW9uJylcIj5PbiBDb21wbGV0aW9uIFJlc3BvbnNpYmlsaXRpZXM8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay12aWV3LWZvb3RlclwiPlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICA8cD57e2ZpbmFsUmVzcG9uc2liaWxpdGllc319IG91dCBvZiB7e3Jlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cz8ubGVuZ3RofX0gcmVzcG9uc2liaWxpdGllcyB3aWxsIGJlXHJcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkZWQuPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICA8cD57e2ZpbmFsUmVzcG9uc2liaWxpdGllc319IG91dCBvZiB7e3Jlc3BvbnNpYmlsaXR5TXVsdGlUYWJCdWxrVXBsb2FkPy5sZW5ndGh9fVxyXG4gICAgICAgICAgICAgICAgICAgIHt7cmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQ/Lmxlbmd0aCA+IDEgPyAncmVzcG9uc2liaWxpdGllcycgOiAncmVzcG9uc2liaWxpdHknfX0gd2lsbCBiZVxyXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZGVkLjwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiIGlkPVwiYnVsay1yZXNwLWNhbmNlbFwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic3VibWl0KClcIiBpZD1cImJ1bGstcmVzcC1jb25maXJtXCIgW2Rpc2FibGVkXT1cIiFpc0NvbmZpcm1DbGlja2FibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmx1ZVwiPkNvbmZpcm08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwhLS0gZmluYWxSZXNwb25zaWJpbGl0aWVzIDwgMSAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxhcHAtbG9hZGVyICpuZ0lmPVwibG9hZGVyXCI+PC9hcHAtbG9hZGVyPlxyXG5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tdXB3YXJkIGlzIG5ldyBvbmUtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4iXX0=
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVsay1yZXNwb25zaWJpbGl0eS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvYnVsay1yZXNwb25zaWJpbGl0eS12aWV3L2J1bGstcmVzcG9uc2liaWxpdHktdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi9zaGFyZWRDb21wb25lbnRzL2J1bGstcmVzcG9uc2liaWxpdHktdmlldy9idWxrLXJlc3BvbnNpYmlsaXR5LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7QUFNckUsTUFBTSxPQUFPLCtCQUErQjtJQUw1QztRQU9FLHdCQUFtQixHQUFHLG1CQUFtQixDQUFDO1FBS2pDLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixZQUFPLEdBQTZDLFdBQVcsQ0FBQztRQUcvRCxtQ0FBOEIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BELFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyx1QkFBa0IsR0FBRyxXQUFXLENBQUM7UUFDMUMsMEJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNwQywyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDL0IscUNBQWdDLEdBQVEsRUFBRSxDQUFDO0tBaUQ1QztJQS9DQyxJQUFJLDJCQUEyQjtRQUM3QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsMkJBQTJCLENBQUM7SUFDdEUsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDakMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUMzRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLENBQUM7aUJBQ2pDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLFVBQVUsRUFBRTtZQUMxQyxJQUFJLENBQUMsZ0NBQWdDO2dCQUNuQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUN6QyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQ2pDLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FDdkMsQ0FBQztZQUNKLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxDQUNuRSxDQUFDLGNBQW1CLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQ2hELENBQUM7WUFDRixJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDM0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNoQixJQUFJLENBQUMscUJBQXFCLElBQUksQ0FBQyxDQUFDO2lCQUNqQztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVk7UUFDdkIsTUFBTSxVQUFVLEdBQUksS0FBSyxDQUFDLE1BQXNCLEVBQUUsVUFBVSxJQUFJLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQzsrR0FsRVUsK0JBQStCO21HQUEvQiwrQkFBK0Isc2JDUDVDLDZxd0NBMGdCa0g7OzRGRG5nQnJHLCtCQUErQjtrQkFMM0MsU0FBUzsrQkFDRSw4QkFBOEI7OEJBUS9CLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLDhCQUE4QjtzQkFBdkMsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRSxrQkFBa0I7c0JBQTFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWQUxJREFUSU9OX01FU1NBR0VTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Jlc3BvbnNpYmlsaXR5JztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtYnVsay1yZXNwb25zaWJpbGl0eS12aWV3JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYnVsay1yZXNwb25zaWJpbGl0eS12aWV3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9idWxrLXJlc3BvbnNpYmlsaXR5LXZpZXcuY29tcG9uZW50Lmxlc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJ1bGtSZXNwb25zaWJpbGl0eVZpZXdDb21wb25lbnQge1xyXG5cclxuICBWQUxJREFUSU9OX01FU1NBR0VTID0gVkFMSURBVElPTl9NRVNTQUdFUztcclxuXHJcbiAgQElucHV0KCkgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkITogYW55O1xyXG4gIEBJbnB1dCgpIGZpbGVOYW1lITogYW55O1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRPd25lciE6IGFueTtcclxuICBASW5wdXQoKSBsb2FkZXIgPSBmYWxzZTtcclxuICBASW5wdXQoKSB0YWJUeXBlOiAnZnJlcXVlbmN5JyB8ICdvbmdvaW5nJyB8ICdvbkNvbXBsZXRpb24nID0gJ2ZyZXF1ZW5jeSc7XHJcbiAgQElucHV0KCkgYnVsa1VwbG9hZDogYW55O1xyXG5cclxuICBAT3V0cHV0KCkgc3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkVGFiID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIHJlc3BvbnNpYmlsaXR5VHlwZSA9ICdzaW5nbGVUYWInO1xyXG4gIGZpbmFsUmVzcG9uc2liaWxpdGllcyA9IDA7XHJcbiAgaXNDb25maXJtQ2xpY2thYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNIb3Jpem9udGFsbHlTY3JvbGxlZCA9IGZhbHNlO1xyXG4gIHJlc3BvbnNpYmlsaXR5TXVsdGlUYWJCdWxrVXBsb2FkOiBhbnkgPSBbXTtcclxuXHJcbiAgZ2V0IGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzUHJvZ3JhbUNvbHVtbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oZWFkZXI/LmluY2x1ZGVzKCdQcm9ncmFtJyk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCkge1xyXG4gICAgICB0aGlzLmZpbmFsUmVzcG9uc2liaWxpdGllcyA9IDA7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5yZXBvcnRzLmZvckVhY2goKHJpc2s6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyaXNrLmlzVmFsaWQpIHtcclxuICAgICAgICAgIHRoaXMuZmluYWxSZXNwb25zaWJpbGl0aWVzICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5VHlwZSA9PT0gJ211bHRpVGFiJykge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5TXVsdGlUYWJCdWxrVXBsb2FkID1cclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8ucmVwb3J0cz8uY29uY2F0KFxyXG4gICAgICAgICAgdGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nPy5yZXBvcnRzLFxyXG4gICAgICAgICAgdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb24/LnJlcG9ydHNcclxuICAgICAgICApO1xyXG4gICAgICB0aGlzLmlzQ29uZmlybUNsaWNrYWJsZSA9IHRoaXMucmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQ/LnNvbWUoXHJcbiAgICAgICAgKHJlc3BvbnNpYmlsaXR5OiBhbnkpID0+IHJlc3BvbnNpYmlsaXR5LmlzVmFsaWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5maW5hbFJlc3BvbnNpYmlsaXRpZXMgPSAwO1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5TXVsdGlUYWJCdWxrVXBsb2FkPy5mb3JFYWNoKChyaXNrOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmlzay5pc1ZhbGlkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbmFsUmVzcG9uc2liaWxpdGllcyArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkdyaWRTY3JvbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LnNjcm9sbExlZnQgPz8gMDtcclxuICAgIHRoaXMuaXNIb3Jpem9udGFsbHlTY3JvbGxlZCA9IHNjcm9sbExlZnQgPiAwO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0KCkge1xyXG4gICAgdGhpcy5zdWJtaXRSZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS11cHdhcmQgaXMgbmV3IG9uZS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG48YXBwLWxvYWRlciAqbmdJZj1cImxvYWRlclwiPjwvYXBwLWxvYWRlcj5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuPCEtLSBIVE1MIGZvciBtdWx0aXBsZSB0YWJzIC0tPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwicmVzcG9uc2liaWxpdHlUeXBlID09PSAnbXVsdGlUYWInXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3duRXJyIGxldC1pbnZhbGlkPlxyXG4gICAgICAgIDxpICpuZ0lmPVwiaW52YWxpZFwiIGNsYXNzPVwiaWNvbnNcIiBbYXBwVG9vbHRpcF09XCJWQUxJREFUSU9OX01FU1NBR0VTLkRST1BET1dOXCJcclxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPiYjeGU5MzI7PC9pPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJidWxrLXZpZXdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay12aWV3LWhlYWRcIj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzPVwiYnVsay12aWV3LXRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICB7e2ZpbGVOYW1lfX1cclxuICAgICAgICAgICAgPC9oMj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay12aWV3LWJvZHkgYnVsa1wiIFtjbGFzcy5pcy1ob3Jpem9udGFsbHktc2Nyb2xsZWRdPVwiaXNIb3Jpem9udGFsbHlTY3JvbGxlZFwiXHJcbiAgICAgICAgICAgIChzY3JvbGwpPVwib25HcmlkU2Nyb2xsKCRldmVudClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlld1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIHNsLW5vIHN0aWNreS1jb2wgc3RpY2t5LWNvbC1pbmRleFwiPiM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBzdGlja3ktY29sIHN0aWNreS1jb2wtbmFtZVwiPlJlc3BvbnNpYmlsaXR5IE5hbWUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyLmluY2x1ZGVzKCdQcm9ncmFtJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGhyZWUtY29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIGxhcmdlXCI+UHJvZ3JhbTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCIgW2NsYXNzLnRocmVlLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPlByb2dyYW0gVHlwZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5Qcm9ncmFtPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPlByb2dyYW0gQ2F0ZWdvcnk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5FbnRydXN0ZWQgQnk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiIFtjbGFzcy50d28tY29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIGxhcmdlXCI+RW50cnVzdCBUbyA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtblwiIFtjbGFzcy50d28tY29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+UGVyc29uIG9yIEdyb3VwPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPkFsbCBvciBBbnkgUGVyc29uczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPktleSBSZXNwb25zaWJpbGl0eT88L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiICpuZ0lmPVwidGFiVHlwZSA9PT0gJ2ZyZXF1ZW5jeSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZml2ZS1jb2x1bW5dPVwiIWhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5uaW5lLWNvbHVtbl09XCJoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbGFyZ2VcIj5GcmVxdWVuY3kgb2YgT2NjdXJyZW5jZSBhbmQgQ29tcGxldGlvbiBXaW5kb3cgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbGFyZ2VcIj57e3Jlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyLmluY2x1ZGVzKCdQcm9ncmFtJykgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyWzhdPy5zbGljZSgwLCAtMSkgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyWzVdPy5zbGljZSgwLCAtMSl9fTxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maXZlLWNvbHVtbl09XCIhaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5uaW5lLWNvbHVtbl09XCJoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJUeXBlID09PSAnZnJlcXVlbmN5J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+RnJlcXVlbmN5IDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+RHVlIERhdGUgPHNwYW4gY2xhc3M9XCJpbmZvLXRleHRcIj4oRGF5KTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPkR1ZSBEYXRlIDxzcGFuIGNsYXNzPVwiaW5mby10ZXh0XCI+KE1vbnRoKTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiICpuZ0lmPVwiaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXCI+RHVlIFRpbWU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPlN0YXJ0IDxzcGFuIGNsYXNzPVwiaW5mby10ZXh0XCI+KE5vLiBvZiBkYXlzIGJlZm9yZSB0aGUgZHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlKTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPkZhaWwgPHNwYW4gY2xhc3M9XCJpbmZvLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwVG9vbHRpcD1cIihOby4gb2YgZGF5cyBhZnRlciB0aGUgZHVlIGRhdGUuIFNlbGVjdCAnMCcgaWYgdGhlIHJlc3BvbnNpYmlsaXR5IG11c3QgYmUgY29tcGxldGVkIG9uIHRoZSBkdWUgZGF0ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj4oTm8uIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXlzIGFmdGVyIHRoZSBkdWUgZGF0ZS4gU2VsZWN0IFwiMFwiIGlmIHRoZSByZXNwb25zaWJpbGl0eSBtdXN0IGJlIGNvbXBsZXRlZCBvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGR1ZSBkYXRlKTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+UmVzcG9uc2liaWxpdHkgRW5kcyBBZnRlciBPY2N1cmVuY2VzIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbmZvLXRleHRcIj4oTnVtYmVyIG9mIG9jY3VycmVuY2VzKTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5SZXNwb25zaWJpbGl0eSBFbmRzIEJ5IERhdGUgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImluZm8tdGV4dFwiPihEYXkpPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPlJlc3BvbnNpYmlsaXR5IEVuZHMgQnkgRGF0ZSA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5mby10ZXh0XCI+KE1vbnRoKTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiB0d28tY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBsYXJnZVwiPlJlc3BvbnNpYmlsaXR5IENlbnRyZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uIHR3by1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+UmVzcG9uc2liaWxpdHkgQ2VudHJlIE5hbWU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+UmVzcG9uc2liaWxpdHkgQ2VudHJlIFR5cGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5SaXNrIENsYXNzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5PYmplY3RpdmU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPk5vdGVzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiBbY2xhc3MudHdvLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBsYXJnZVwiPkZvcm1hdCAmIEV2aWRlbmNlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW5cIiBbY2xhc3MudHdvLWNvbHVtbl09XCJ0cnVlXCIgW2NsYXNzLnRocmVlLWNvbHVtbl09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiBbY2xhc3Muc21hbGwtY29sdW1uXT1cInRydWVcIj5Gb3JtYXQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+Rm9ybWF0IEZvciBSZXNwb25zaWJpbGl0eSAobGluayk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgW2NsYXNzLnNtYWxsLWNvbHVtbl09XCJ0cnVlXCI+RXZpZGVuY2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPkFzc2Vzc21lbnRzIG9yIENoZWNrcG9pbnRzPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIGZvdXItY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBsYXJnZVwiPlJldmlldyBvZiBSZXNwb25zaWJpbGl0eTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCIgW2NsYXNzLmZvdXItY29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+UmV2aWV3ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+UmV2aWV3ZXIgVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby10ZXh0XCI+KFNwZWNpZnkgdGhlIHR5cGUgb2YgcmV2aWV3ZXIgZmxvdyk8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5SZXZpZXcgU3RhcnQgPHNwYW4gY2xhc3M9XCJpbmZvLXRleHRcIj4oTm8uIG9mIGRheXMgYmVmb3JlIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWUgZGF0ZSk8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPlJldmlldyBGYWlsIDxzcGFuIGNsYXNzPVwiaW5mby10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwVG9vbHRpcD1cIihOby4gb2YgZGF5cyBhZnRlciB0aGUgZHVlIGRhdGUuIFNlbGVjdCAnMCcgaWYgdGhlIHJlc3BvbnNpYmlsaXR5IG11c3QgYmUgcmV2aWV3ZWQgb24gdGhlIGR1ZSBkYXRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+KE5vLiBvZiBkYXlzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRoZSBkdWUgZGF0ZS4gU2VsZWN0IFwiMFwiIGlmIHRoZSByZXNwb25zaWJpbGl0eSBtdXN0IGJlIHJldmlld2VkIG9uIHRoZSBkdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSk8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgW2NsYXNzLnR3by1jb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbGFyZ2VcIj5PdmVyc2VlcjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCIgW2NsYXNzLnR3by1jb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5BbHdheXMgTm90aWZ5PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPk5vdGlmeSBvbiBGYWlsdXJlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5PdmVyc2VlcjwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBDb2xsYWJvcmF0b3IgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj5Db2xsYWJvcmF0b3I8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93XCIgKm5nRm9yPVwibGV0IHJlcG9ydCBvZiByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnJlcG9ydHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBzbC1ubyBzdGlja3ktY29sIHN0aWNreS1jb2wtaW5kZXhcIiBbY2xhc3MuZXJyb3JdPVwiIXJlcG9ydD8uaXNWYWxpZFwiPnt7aSsxfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBzdGlja3ktY29sIHN0aWNreS1jb2wtbmFtZVwiIFtjbGFzcy5lcnJvcl09XCIhcmVwb3J0LnJlc3BvbnNpYmlsaXR5TmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8ucmVzcG9uc2liaWxpdHlOYW1lfX0gPGkgKm5nSWY9XCIhcmVwb3J0LnJlc3BvbnNpYmlsaXR5TmFtZVwiIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiJ0VudGVyIGEgbmFtZSBmb3IgdGhpcyByZXNwb25zaWJpbGl0eS4nXCIgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oZWFkZXIuaW5jbHVkZXMoJ1Byb2dyYW0nKVwiIFtjbGFzcy5lcnJvcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50aHJlZS1jb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW5cIiBbY2xhc3MudGhyZWUtY29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwicmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LnByb2dyYW1UeXBlID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmVwb3J0Py5wcm9ncmFtVHlwZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duRXJyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LnByb2dyYW1UeXBlID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwicmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LnByb2dyYW0gPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZXBvcnQ/LnByb2dyYW19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkVycjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5wcm9ncmFtID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwicmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LnByb2dyYW1DYXRlZ29yeSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8ucHJvZ3JhbUNhdGVnb3J5fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25FcnI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ucHJvZ3JhbUNhdGVnb3J5ID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwicmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmFzc2lnbm9yID09PSBmYWxzZVwiPnt7cmVwb3J0Py5hc3NpZ25vcn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkVycjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5hc3NpZ25vciA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtblwiIFtjbGFzcy50d28tY29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCIgW2NsYXNzLnR3by1jb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCIhcmVwb3J0Py5hc3NpZ25lZSB8fCAhcmVwb3J0Py51c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbT8uaXNWYWxpZEFzc2lnbmVlIHx8ICghcmVwb3J0Py5pc1ZhbGlkVXNlcikgfHwgcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmFzc2lnbmVlID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmVwb3J0Py5hc3NpZ25lZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB8fCAoIXJlcG9ydD8uaXNWYWxpZFVzZXIpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIXJlcG9ydD8uYXNzaWduZWVcIiBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiJ1NlbGVjdCB0aGUgdXNlciByZXNwb25zaWJsZSBmb3IgY29tcGxldGluZyB0aGlzIHJlc3BvbnNpYmlsaXR5LiAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPXRydWU+JiN4ZTkzMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duRXJyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcmVwb3J0Py5hc3NpZ25lZSAmJiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uYXNzaWduZWUgPT09IGZhbHNlIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIihyZXBvcnQ/LmFzc2lnbmVlKSAmJiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uYXNzaWduZWUgIT09IGZhbHNlICYmICFyZXBvcnQ/LnVzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtPy5pc1ZhbGlkQXNzaWduZWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiJ1RoaXMgdXNlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWxlY3RlZCBQcm9ncmFtLidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiB0eXBlPVwid2hpdGVcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09dHJ1ZT4mI3hlOTMyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uYXNzaWduZWVUeXBlID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmVwb3J0Py5hc3NpZ25lZVR5cGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkVycjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5hc3NpZ25lZVR5cGUgPT09IGZhbHNlIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ua2V5UmVzcG9uc2liaWxpdHkgPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7cmVwb3J0Py5rZXlSZXNwb25zaWJpbGl0eX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkVycjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5rZXlSZXNwb25zaWJpbGl0eSA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maXZlLWNvbHVtbl09XCIhaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5pbmUtY29sdW1uXT1cImhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFiVHlwZSA9PT0gJ2ZyZXF1ZW5jeSdcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZml2ZS1jb2x1bW5dPVwiIWhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubmluZS1jb2x1bW5dPVwiaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiIFtjbGFzcy5lcnJvcl09XCIhcmVwb3J0Py5mcmVxdWVuY3kgfHwgcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmZyZXF1ZW5jeSA9PT0gZmFsc2VcIj57e3JlcG9ydD8uZnJlcXVlbmN5fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFyZXBvcnQ/LmZyZXF1ZW5jeVwiIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInU2VsZWN0IGEgZnJlcXVlbmN5IGZvciB0aGlzIHJlc3BvbnNpYmlsaXR5LidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiB0eXBlPVwid2hpdGVcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09dHJ1ZT4mI3hlOTMyOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25FcnI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZXBvcnQ/LmZyZXF1ZW5jeSAmJiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uZnJlcXVlbmN5ID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgW2NsYXNzLmVycm9yXT1cInJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5kYXkgPT09IGZhbHNlIHx8ICFyZXBvcnQ/LnZhbGlkRGF0ZSB8fCByZXBvcnQ/LmlzUGFzdERhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8uZGF5fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25FcnI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uZGF5ID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uZGF5ICE9PSBmYWxzZSAmJiAhcmVwb3J0Py52YWxpZERhdGVcIiBjbGFzcz1cImljb25zXCIgW2FwcFRvb2x0aXBdPVwiJ0ludmFsaWQgRHVlIERhdGUuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwicmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmRheSAhPT0gZmFsc2UgJiYgcmVwb3J0Py5pc1Bhc3REYXRlXCIgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidUaGlzIGRhdGUgb2NjdXJzIGluIHRoZSBwYXN0LiBTZWxlY3QgYSBmdXR1cmUgZGF0ZS4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPXRydWU+JiN4ZTkzMjs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgW2NsYXNzLmVycm9yXT1cInJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5tb250aCA9PT0gZmFsc2UgfHwgIXJlcG9ydD8udmFsaWREYXRlIHx8IHJlcG9ydD8uaXNQYXN0RGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmVwb3J0Py5tb250aH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duRXJyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/Lm1vbnRoID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ubW9udGggIT09IGZhbHNlICYmICFyZXBvcnQ/LnZhbGlkRGF0ZVwiIGNsYXNzPVwiaWNvbnNcIiBbYXBwVG9vbHRpcF09XCInSW52YWxpZCBEdWUgRGF0ZS4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPXRydWU+JiN4ZTkzMjs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ubW9udGggIT09IGZhbHNlICYmIHJlcG9ydD8uaXNQYXN0RGF0ZVwiIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInVGhpcyBkYXRlIG9jY3VycyBpbiB0aGUgcGFzdC4gU2VsZWN0IGEgZnV0dXJlIGRhdGUuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiICpuZ0lmPVwiaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiIXJlcG9ydD8uaXNWYWxpZER1ZVRpbWUgfHwgcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmR1ZVRpbWUgPT09IGZhbHNlXCI+e3tyZXBvcnQ/LmR1ZVRpbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkVycjsgY29udGV4dDogeyAkaW1wbGljaXQ6ICFyZXBvcnQ/LmlzVmFsaWREdWVUaW1lIHx8IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5kdWVUaW1lID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiISFyZXBvcnQ/LnJlc3BvbnNpYmlsaXR5V2luZG93RXJyb3JcIj57e3JlcG9ydD8ucmVzcG9uc2liaWxpdHlXaW5kb3d9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwicmVwb3J0Py5yZXNwb25zaWJpbGl0eVdpbmRvd0Vycm9yXCIgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInJlcG9ydD8ucmVzcG9uc2liaWxpdHlXaW5kb3dFcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cIiEhcmVwb3J0Py5mYWlsZWRBZnRlckVycm9yXCI+e3tyZXBvcnQ/LmZhaWxlZEFmdGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cInJlcG9ydD8uZmFpbGVkQWZ0ZXJFcnJvclwiIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJyZXBvcnQ/LmZhaWxlZEFmdGVyRXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiB0eXBlPVwid2hpdGVcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09dHJ1ZT4mI3hlOTMyOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cIiFyZXBvcnQ/LmlzVmFsaWRFbmRzQWZ0ZXJPY2N1cnJlbmNlc1wiPnt7cmVwb3J0Py5lbmRzQWZ0ZXJPY2N1cnJlbmNlc319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIXJlcG9ydD8uaXNWYWxpZEVuZHNBZnRlck9jY3VycmVuY2VzXCIgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJyZXBvcnQ/LmVuZHNBZnRlck9jY3VycmVuY2VzRXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPXRydWU+JiN4ZTkzMjs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXJyb3JdPVwiIXJlcG9ydD8uaXNWYWxpZEVuZHNCeURhdGVEYXlcIj57e3JlcG9ydD8uZW5kc0J5RGF0ZURheX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIXJlcG9ydD8uaXNWYWxpZEVuZHNCeURhdGVEYXlcIiBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInJlcG9ydD8uZW5kc0J5RGF0ZURheUVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cIiFyZXBvcnQ/LmlzVmFsaWRFbmRzQnlEYXRlTW9udGhcIj57e3JlcG9ydD8uZW5kc0J5RGF0ZU1vbnRofX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhcmVwb3J0Py5pc1ZhbGlkRW5kc0J5RGF0ZU1vbnRoXCIgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJyZXBvcnQ/LmVuZHNCeURhdGVNb250aEVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBtdWx0aS1jb2x1bW4gdHdvLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW4gdHdvLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ucmVzcG9uc2liaWxpdHlDZW50ZXIgPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZXBvcnQ/LnJlc3BvbnNpYmlsaXR5Q2VudGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25FcnI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ucmVzcG9uc2liaWxpdHlDZW50ZXIgPT09IGZhbHNlIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmVwb3J0Py5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkVycjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUgPT09IGZhbHNlIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ucmVwb3J0Q2xhc3MgPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7cmVwb3J0Py5yZXBvcnRDbGFzc319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkVycjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5yZXBvcnRDbGFzcyA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+e3tyZXBvcnQ/Lm9iamVjdGl2ZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj57e3JlcG9ydD8ubm90ZXN9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtblwiIFtjbGFzcy50d28tY29sdW1uXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCIgW2NsYXNzLnR3by1jb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbXVsdGktY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgW2NsYXNzLnNtYWxsLWNvbHVtbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uaXNGb3JtYXQgPT09IGZhbHNlXCI+e3tyZXBvcnQ/LmlzRm9ybWF0fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkVycjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5pc0Zvcm1hdCA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIGV4dGVybmFsLWxpbmtcIiBbaHJlZl09XCJyZXBvcnQ/LmZvcm1hdEZvclJlc3BvbnNpYmlsaXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiPnt7cmVwb3J0Py5mb3JtYXRGb3JSZXNwb25zaWJpbGl0eX19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiIFtjbGFzcy5zbWFsbC1jb2x1bW5dPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cInJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5kb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQgPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZXBvcnQ/LmRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duRXJyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LmRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZCA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj57e3JlcG9ydD8uYXNzZXNzbWVudHN9fTwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBtdWx0aS1jb2x1bW5cIiBbY2xhc3MuZm91ci1jb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW5cIiBbY2xhc3MuZm91ci1jb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiBbY2xhc3MuZXJyb3JdPVwicmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LnJldmlld2VyID09PSBmYWxzZSB8fCAocmVwb3J0Py5yZXZpZXdlciAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFyZXBvcnQ/LnVzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtPy5pc1ZhbGlkUmV2aWV3ZXIgKSlcIj57e3JlcG9ydD8ucmV2aWV3ZXJ9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxpICpuZ0lmPVwiKHJlcG9ydD8ucmV2aWV3ZXIgJiYgcmVwb3J0Py5yZXZpZXdlciA9PT0gcmVwb3J0Py5hc3NpZ25vcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCIoKHJlcG9ydD8uYXNzaWdub3IpPydUaGUgQXNzaWdub3IgY2Fubm90IGFsc28gYmUgdGhlIFJldmlld2VyIG9mIHRoaXMgcmVzcG9uc2liaWxpdHkuJzonWW91IGNhbm5vdCBiZSBhIFJldmlld2VyIG9mIHRoaXMgcmVzcG9uc2liaWxpdHkgc2luY2UgeW91IGFyZSB0aGUgYXNzaWdub3IuICcpICsnU2VsZWN0IGFub3RoZXIgdXNlciBhcyB0aGUgUmV2aWV3ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaT4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duRXJyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LnJldmlld2VyID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJyZXBvcnQ/LnJldmlld2VyICYmIHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5yZXZpZXdlciAhPT0gZmFsc2UgJiYgIXJlcG9ydD8udXNlclZhbGlkYXRlV2l0aFByb2dyYW0/LmlzVmFsaWRSZXZpZXdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInVGhpcyB1c2VyIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbGVjdGVkIFByb2dyYW0uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cInJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5yZXZpZXdlclR5cGUgPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZXBvcnQ/LnJldmlld2VyVHlwZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duRXJyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/LnJldmlld2VyVHlwZSA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cIiEhcmVwb3J0Py5yZXZpZXdUb0JlQ29tcGxldGVkV2l0aGluRXJyb3JcIj57e3JlcG9ydD8ucmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJyZXBvcnQ/LnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW5FcnJvclwiIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJyZXBvcnQ/LnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW5FcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVycm9yXT1cIiEhcmVwb3J0Py5yZXZpZXdXaWxsQmVGYWlsZWRBZnRlckVycm9yXCI+e3tyZXBvcnQ/LnJldmlld1dpbGxCZUZhaWxlZEFmdGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cInJlcG9ydD8ucmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXJFcnJvclwiIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJyZXBvcnQ/LnJldmlld1dpbGxCZUZhaWxlZEFmdGVyRXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiB0eXBlPVwid2hpdGVcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09dHJ1ZT4mI3hlOTMyOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbXVsdGktY29sdW1uXCIgW2NsYXNzLnR3by1jb2x1bW5dPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW5cIiBbY2xhc3MudHdvLWNvbHVtbl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ub3ZlcnNlZXIgPT09IGZhbHNlIHx8IChyZXBvcnQ/Lm92ZXJzZWVyICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXJlcG9ydD8udXNlclZhbGlkYXRlV2l0aFByb2dyYW0/LmlzVmFsaWRPdmVyc2VlciApKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmVwb3J0Py5vdmVyc2Vlcn19XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkVycjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5vdmVyc2VlciA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiKHJlcG9ydD8ub3ZlcnNlZXIpICYmIHJlcG9ydD8uZHJvcGRvd25WYWxpZGF0aW9uPy5vdmVyc2VlciAhPT0gZmFsc2UgJiYgIXJlcG9ydD8udXNlclZhbGlkYXRlV2l0aFByb2dyYW0/LmlzVmFsaWRPdmVyc2VlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInVGhpcyB1c2VyIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbGVjdGVkIFByb2dyYW0uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ubm90aWZ5T25GYWlsdXJlID09PSBmYWxzZSB8fCAocmVwb3J0Py5ub3RpZnlPbkZhaWx1cmUgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXJlcG9ydD8udXNlclZhbGlkYXRlV2l0aFByb2dyYW0/LmlzVmFsaWROb3RpZnlPbkZhaWx1cmUgKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8ubm90aWZ5T25GYWlsdXJlfX1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duRXJyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcmVwb3J0Py5kcm9wZG93blZhbGlkYXRpb24/Lm5vdGlmeU9uRmFpbHVyZSA9PT0gZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiKHJlcG9ydD8ubm90aWZ5T25GYWlsdXJlKSAmJiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8ubm90aWZ5T25GYWlsdXJlICE9PSBmYWxzZSAmJiAhcmVwb3J0Py51c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbT8uaXNWYWxpZE5vdGlmeU9uRmFpbHVyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInVGhpcyB1c2VyIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbGVjdGVkIFByb2dyYW0uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lcnJvcl09XCJyZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uY29sbGFib3JhdG9yID09PSBmYWxzZVwiPnt7cmVwb3J0Py5jb2xsYWJvcmF0b3J9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25FcnI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZXBvcnQ/LmRyb3Bkb3duVmFsaWRhdGlvbj8uY29sbGFib3JhdG9yID09PSBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIiBbY2xhc3MuZXJyb3JdPVwiKHJlcG9ydD8ub3ZlcnNlZXIpICYmICgocmVwb3J0Py5vdmVyc2VlciA9PT0gcmVwb3J0Py5hc3NpZ25lZSkgfHwocmVwb3J0Py5yZXZpZXdlciA9PT0gcmVwb3J0Py5vdmVyc2VlcikgfHwgKHJlcG9ydD8ub3ZlcnNlZXIgPT0gcmVwb3J0Py5hc3NpZ25vcikgfHwgKCFyZXBvcnQ/LnVzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtPy5pc1ZhbGlkT3ZlcnNlZXIpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3JlcG9ydD8ub3ZlcnNlZXJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIihyZXBvcnQ/Lm92ZXJzZWVyKSAmJiAoKHJlcG9ydD8ucmV2aWV3ZXIgPT09IHJlcG9ydD8ub3ZlcnNlZXIpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidUaGUgUmV2aWV3ZXIgY2Fubm90IGFsc28gYmUgdGhlIE92ZXJzZWVyIG9mIHRoaXMgcmVzcG9uc2liaWxpdHkuIFNlbGVjdCBhbm90aGVyIHVzZXIgYXMgdGhlIE92ZXJzZWVyLidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPXRydWU+JiN4ZTkzMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJyZXBvcnQ/Lm92ZXJzZWVyICYmIChyZXBvcnQ/Lm92ZXJzZWVyID09PSByZXBvcnQ/LmFzc2lnbmVlKVwiIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiJ1RoZSBBc3NpZ25lZSBjYW5ub3QgYWxzbyBiZSB0aGUgT3ZlcnNlZXIgb2YgdGhpcyByZXNwb25zaWJpbGl0eS4gU2VsZWN0IGFub3RoZXIgdXNlciBhcyB0aGUgT3ZlcnNlZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIoKHJlcG9ydD8ub3ZlcnNlZXIpICYmIChyZXBvcnQ/Lm92ZXJzZWVyID09IHJlcG9ydD8uYXNzaWdub3IpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIigocmVwb3J0Py5hc3NpZ25vcik/J1RoZSBBc3NpZ25vciBjYW5ub3QgYWxzbyBiZSB0aGUgT3ZlcnNlZXIgb2YgdGhpcyByZXNwb25zaWJpbGl0eS4gJzonWW91IGNhbm5vdCBiZSBhbiBPdmVyc2VlciBvZiB0aGlzIHJlc3BvbnNpYmlsaXR5IHNpbmNlIHlvdSBhcmUgdGhlIEFzc2lnbm9yLiAnKSArJ1NlbGVjdCBhbm90aGVyIHVzZXIgYXMgdGhlIE92ZXJzZWVyLidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPXRydWU+JiN4ZTkzMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFyZXBvcnQ/LnVzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtPy5pc1ZhbGlkT3ZlcnNlZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInU2VsZWN0ZWQgdXNlciBpcyBub3QgYSB2YWxpZCBvdmVyc2VlciBmb3Igc2VsZWN0ZWQgcHJvZ3JhbS4nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT10cnVlPiYjeGU5MzI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBlbXB0eS1maWxsLXJvd1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIHNsLW5vIHN0aWNreS1jb2wgc3RpY2t5LWNvbC1pbmRleFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIHN0aWNreS1jb2wgc3RpY2t5LWNvbC1uYW1lXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbXVsdGktY29sdW1uIHRocmVlLWNvbHVtblwiICpuZ0lmPVwiaGFzUHJvZ3JhbUNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW4gdGhyZWUtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbXVsdGktY29sdW1uIHR3by1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uIHR3by1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maXZlLWNvbHVtbl09XCIhaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5pbmUtY29sdW1uXT1cImhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFiVHlwZSA9PT0gJ2ZyZXF1ZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maXZlLWNvbHVtbl09XCIhaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5uaW5lLWNvbHVtbl09XCJoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCIgKm5nSWY9XCJoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtbiB0d28tY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtbiB0d28tY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gbXVsdGktY29sdW1uIHR3by1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1yb3cgbXVsdGktY29sdW1uIHR3by1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtbiBzbWFsbC1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW4gc21hbGwtY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtbiBmb3VyLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LXJvdyBtdWx0aS1jb2x1bW4gZm91ci1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctY29sdW1uIG11bHRpLWNvbHVtbiB0d28tY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleGVsLXZpZXctcm93IG11bHRpLWNvbHVtbiB0d28tY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhlbC12aWV3LWNvbHVtblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4ZWwtdmlldy1jb2x1bW5cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1vbGQgY29kZSBkeW5hbWljLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tICpuZ0Zvcj1cImxldCByZXBvcnQgb2YgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5yZXBvcnRzOyBsZXQgaSA9IGluZGV4XCIgLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLXZpZXctb3B0aW9uXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJidWxrVXBsb2FkPy5mcmVxdWVuY3k/LnJlcG9ydHM/Lmxlbmd0aFwiIFtjbGFzcy5hY3RpdmVdPVwidGFiVHlwZSA9PT0gJ2ZyZXF1ZW5jeSdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVGFiLmVtaXQoJ2ZyZXF1ZW5jeScpXCI+RnJlcXVlbmN5IFJlc3BvbnNpYmlsaXRpZXM8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ1bGtVcGxvYWQ/Lm9uZ29pbmc/LnJlcG9ydHM/Lmxlbmd0aFwiIFtjbGFzcy5hY3RpdmVdPVwidGFiVHlwZSA9PT0gJ29uZ29pbmcnXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZFRhYi5lbWl0KCdvbmdvaW5nJylcIj5PbmdvaW5nIFJlc3BvbnNpYmlsaXRpZXM8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbj8ucmVwb3J0cz8ubGVuZ3RoXCIgW2NsYXNzLmFjdGl2ZV09XCJ0YWJUeXBlID09PSAnb25Db21wbGV0aW9uJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRUYWIuZW1pdCgnb25Db21wbGV0aW9uJylcIj5PbiBDb21wbGV0aW9uIFJlc3BvbnNpYmlsaXRpZXM8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay12aWV3LWZvb3RlclwiPlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICA8cD57e2ZpbmFsUmVzcG9uc2liaWxpdGllc319IG91dCBvZiB7e3Jlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cz8ubGVuZ3RofX0gcmVzcG9uc2liaWxpdGllcyB3aWxsIGJlXHJcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkZWQuPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICA8cD57e2ZpbmFsUmVzcG9uc2liaWxpdGllc319IG91dCBvZiB7e3Jlc3BvbnNpYmlsaXR5TXVsdGlUYWJCdWxrVXBsb2FkPy5sZW5ndGh9fVxyXG4gICAgICAgICAgICAgICAgICAgIHt7cmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQ/Lmxlbmd0aCA+IDEgPyAncmVzcG9uc2liaWxpdGllcycgOiAncmVzcG9uc2liaWxpdHknfX0gd2lsbCBiZVxyXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZGVkLjwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2UoKVwiIGlkPVwiYnVsay1yZXNwLWNhbmNlbFwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic3VibWl0KClcIiBpZD1cImJ1bGstcmVzcC1jb25maXJtXCIgW2Rpc2FibGVkXT1cIiFpc0NvbmZpcm1DbGlja2FibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmx1ZVwiPkNvbmZpcm08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwhLS0gZmluYWxSZXNwb25zaWJpbGl0aWVzIDwgMSAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxhcHAtbG9hZGVyICpuZ0lmPVwibG9hZGVyXCI+PC9hcHAtbG9hZGVyPlxyXG5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tdXB3YXJkIGlzIG5ldyBvbmUtLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT4iXX0=
|