@ieeesa-npm/groups 0.15.15 → 0.15.17
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/assets/constants.json +5 -5
- package/esm2022/lib/components/custom-question-editor/custom-question-editor.component.mjs +11 -4
- package/esm2022/lib/components/interest-form/interest-form.component.mjs +29 -8
- package/esm2022/lib/components/roster-import/roster-import.component.mjs +27 -10
- package/esm2022/lib/services/interest-form.service.mjs +30 -12
- package/fesm2022/ieeesa-npm-groups.mjs +98 -35
- package/fesm2022/ieeesa-npm-groups.mjs.map +1 -1
- package/lib/components/custom-question-editor/custom-question-editor.component.d.ts +1 -1
- package/lib/components/interest-form/interest-form.component.d.ts +8 -2
- package/lib/components/roster-import/roster-import.component.d.ts +7 -1
- package/lib/services/groups.service.d.ts +6 -0
- package/lib/services/interest-form.service.d.ts +15 -5
- package/package.json +1 -1
|
@@ -54,8 +54,14 @@ export class RosterImportComponent {
|
|
|
54
54
|
this.uploadResult = null;
|
|
55
55
|
/** Row-level errors for the completed job. */
|
|
56
56
|
this.jobErrors = [];
|
|
57
|
-
/** Inline validation / API error message. */
|
|
57
|
+
/** Inline validation / API error message (single-line case). */
|
|
58
58
|
this.errorMessage = null;
|
|
59
|
+
/**
|
|
60
|
+
* All API error messages when the BE returns multiple error codes at once
|
|
61
|
+
* (e.g. several fields failed). Rendered as a list in the error banner. Empty
|
|
62
|
+
* for single-message validation errors (which use {@link errorMessage}).
|
|
63
|
+
*/
|
|
64
|
+
this.errorMessages = [];
|
|
59
65
|
/**
|
|
60
66
|
* Info banner shown when the file has headers but no data rows
|
|
61
67
|
* (Figma: "No roster data found...").
|
|
@@ -232,6 +238,7 @@ export class RosterImportComponent {
|
|
|
232
238
|
*/
|
|
233
239
|
processFile(file) {
|
|
234
240
|
this.errorMessage = null;
|
|
241
|
+
this.errorMessages = [];
|
|
235
242
|
this.noDataMessage = null;
|
|
236
243
|
this.uploadResult = null;
|
|
237
244
|
this.importId = null;
|
|
@@ -276,6 +283,7 @@ export class RosterImportComponent {
|
|
|
276
283
|
onRemoveFile() {
|
|
277
284
|
this.selectedFile = null;
|
|
278
285
|
this.errorMessage = null;
|
|
286
|
+
this.errorMessages = [];
|
|
279
287
|
this.noDataMessage = null;
|
|
280
288
|
this.uploadResult = null;
|
|
281
289
|
this.importId = null;
|
|
@@ -291,6 +299,7 @@ export class RosterImportComponent {
|
|
|
291
299
|
onUploadNewFile() {
|
|
292
300
|
this.selectedFile = null;
|
|
293
301
|
this.errorMessage = null;
|
|
302
|
+
this.errorMessages = [];
|
|
294
303
|
this.noDataMessage = null;
|
|
295
304
|
this.uploadResult = null;
|
|
296
305
|
this.jobErrors = [];
|
|
@@ -314,6 +323,7 @@ export class RosterImportComponent {
|
|
|
314
323
|
return;
|
|
315
324
|
}
|
|
316
325
|
this.errorMessage = null;
|
|
326
|
+
this.errorMessages = [];
|
|
317
327
|
this.noDataMessage = null;
|
|
318
328
|
this.uploadResult = null;
|
|
319
329
|
this.jobErrors = [];
|
|
@@ -352,14 +362,21 @@ export class RosterImportComponent {
|
|
|
352
362
|
// stuck.
|
|
353
363
|
this.selectedFile = null;
|
|
354
364
|
// BE error codes take priority when present (e.g. 1071 no permission, 1072
|
|
355
|
-
// format, 1073 too large, 1074 row limit, 1075 invalid status).
|
|
365
|
+
// format, 1073 too large, 1074 row limit, 1075 invalid status). The BE can
|
|
366
|
+
// return MULTIPLE codes at once (e.g. ["2017","2018","2014"] when several
|
|
367
|
+
// fields fail), so map and show ALL of them — not just the first — as a
|
|
368
|
+
// list in the error banner.
|
|
356
369
|
const errorCodes = error?.error?.body?.errorCodes;
|
|
357
370
|
if (Array.isArray(errorCodes) && errorCodes.length) {
|
|
358
|
-
const
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
371
|
+
const messages = errorCodes.map((code) => this.constants?.errors?.[code] ??
|
|
372
|
+
this.screenTexts?.validation?.uploadFailed ??
|
|
373
|
+
'An error occurred while importing the roster. Please try again.');
|
|
374
|
+
// De-duplicate so the same message is not repeated when two codes map to
|
|
375
|
+
// the same text.
|
|
376
|
+
this.errorMessages = Array.from(new Set(messages));
|
|
377
|
+
// Keep errorMessage populated (first message) for backward compatibility
|
|
378
|
+
// and for the single-line case.
|
|
379
|
+
this.errorMessage = this.errorMessages[0] ?? null;
|
|
363
380
|
return;
|
|
364
381
|
}
|
|
365
382
|
// A 403 with no error-code body comes from the endpoint's @PreAuthorize
|
|
@@ -548,11 +565,11 @@ export class RosterImportComponent {
|
|
|
548
565
|
URL.revokeObjectURL(url);
|
|
549
566
|
}
|
|
550
567
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RosterImportComponent, deps: [{ token: i1.RosterImportApiService }, { token: i2.GroupsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
551
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RosterImportComponent, isStandalone: true, selector: "ieeesa-roster-import", inputs: { componentData: "componentData" }, outputs: { submitFormResponse: "submitFormResponse", formCancel: "formCancel" }, ngImport: i0, template: "<div class=\"ieeesa-roster-import\">\r\n <!-- Sub-heading band: \"Bulk Import Participants\" on the left, Import Roster\r\n action on the right (appears once a file is selected) \u2014 matches the Figma.\r\n The \"\u2190 Back to Rosters / Import Roster\" title row + X are rendered by the\r\n shared ModalComponent above this. -->\r\n <div class=\"ieeesa-roster-import__subheader\">\r\n <span class=\"ieeesa-roster-import__subheader-title\">\r\n {{ screenTexts?.subHeading ?? 'Bulk Import Participants' }}\r\n </span>\r\n <button\r\n *ngIf=\"selectedFile && importState === 'upload'\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-tertiary-button ieeesa-roster-import__import-btn\"\r\n (click)=\"onImport()\"\r\n [attr.aria-label]=\"screenTexts?.buttons?.import ?? 'Import Roster'\"\r\n >\r\n <svg class=\"ieeesa-roster-import__import-btn-icon\" width=\"14\" height=\"14\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-import\"></use>\r\n </svg>\r\n {{ screenTexts?.buttons?.import ?? 'Import Roster' }}\r\n </button>\r\n </div>\r\n\r\n <!-- Required Columns Info -->\r\n <div class=\"ieeesa-roster-import__columns-card\">\r\n <div class=\"ieeesa-roster-import__columns-content\">\r\n <p class=\"ieeesa-roster-import__columns-title\">\r\n {{ screenTexts?.requiredColumnsTitle ?? 'Required columns' }}\r\n </p>\r\n <div class=\"ieeesa-roster-import__columns-chips\">\r\n <span\r\n *ngFor=\"let col of requiredColumns\"\r\n class=\"ieeesa-roster-import__chip\"\r\n >\r\n {{ col }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"ieeesa-roster-import__sample-wrapper\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__download-btn\"\r\n (click)=\"downloadSampleFile()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadSample ?? 'Download Sample File'\"\r\n >\r\n <svg\r\n class=\"ieeesa-roster-import__download-btn-icon\"\r\n aria-hidden=\"true\"\r\n >\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ screenTexts?.downloadSampleLabel ?? 'Download Sample File' }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <p class=\"ieeesa-roster-import__upload-label\">\r\n {{ screenTexts?.uploadLabel ?? 'Upload your file' }}\r\n </p>\r\n\r\n <!-- Upload State -->\r\n <ng-container *ngIf=\"importState === 'upload'\">\r\n <!-- Hidden file input -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [accept]=\"acceptedFileTypes\"\r\n (change)=\"onFileSelected($event)\"\r\n hidden\r\n [attr.aria-label]=\"screenTexts?.uploadLabel ?? 'Upload your file'\"\r\n />\r\n\r\n <!-- Drag & Drop Zone -->\r\n <div\r\n class=\"ieeesa-roster-import__dropzone\"\r\n [class.ieeesa-roster-import__dropzone--active]=\"isDragOver\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onFileDrop($event)\"\r\n (click)=\"fileInput.click()\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n (keydown.enter)=\"fileInput.click()\"\r\n (keydown.space)=\"fileInput.click()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.dropzone ?? 'Drag and drop file upload area'\"\r\n >\r\n <ng-container *ngIf=\"!selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__dropzone-text\">\r\n {{ screenTexts?.dropzoneText ?? 'Drag & drop a file here, or click to browse' }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__dropzone-hint\">\r\n {{ screenTexts?.dropzoneHint ?? 'Accepted formats: .csv, .xlsx' }}\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <div class=\"ieeesa-roster-import__file-row\">\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile.name }}\r\n </p>\r\n <button\r\n mat-button\r\n class=\"ieeesa-roster-import__remove-file-btn\"\r\n (click)=\"onRemoveFile(); $event.stopPropagation()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.remove ?? 'Remove selected file'\"\r\n >\r\n ×\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Inline Error Message -->\r\n <div\r\n *ngIf=\"errorMessage\"\r\n class=\"ieeesa-roster-import__error-banner\"\r\n role=\"alert\"\r\n >\r\n {{ errorMessage }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Processing / Result share the file display + progress bar -->\r\n <ng-container *ngIf=\"importState === 'processing' || importState === 'result'\">\r\n <div\r\n class=\"ieeesa-roster-import__dropzone ieeesa-roster-import__dropzone--result\"\r\n >\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile?.name }}\r\n </p>\r\n </div>\r\n\r\n <!-- Progress label (processing only) -->\r\n <div\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-head\"\r\n >\r\n <span class=\"ieeesa-roster-import__progress-label\">\r\n {{ screenTexts?.processingLabel ?? 'Processing file records....' }}\r\n </span>\r\n </div>\r\n <mat-progress-bar\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-bar\"\r\n mode=\"indeterminate\"\r\n [attr.aria-label]=\"screenTexts?.processingLabel ?? 'Processing file records....'\"\r\n ></mat-progress-bar>\r\n </ng-container>\r\n\r\n <!-- Result State (summary + errors) -->\r\n <ng-container *ngIf=\"importState === 'result' && uploadResult\">\r\n <!-- No data records banner (headers only, zero rows) -->\r\n <div\r\n *ngIf=\"noDataMessage\"\r\n class=\"ieeesa-roster-import__no-data-banner\"\r\n role=\"status\"\r\n >\r\n {{ noDataMessage }}\r\n </div>\r\n\r\n <!-- Summary cards -->\r\n <div *ngIf=\"showSummaryCards\" class=\"ieeesa-roster-import__summary-cards\">\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--success\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.successCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.successCardLabel ?? 'Rosters added successfully' }}\r\n </p>\r\n </div>\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--skipped\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.failureCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.skippedCardLabel ?? 'Skipped Rows' }}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- Row Errors Card -->\r\n <div *ngIf=\"jobErrors.length\" class=\"ieeesa-roster-import__errors-card\">\r\n <p class=\"ieeesa-roster-import__errors-header\">\r\n <ng-container *ngIf=\"allRowsSkipped; else someErrors\">\r\n {{ screenTexts?.result?.allRowsSkippedHeader ?? 'All Rows are skipped' }}\r\n </ng-container>\r\n <ng-template #someErrors>\r\n {{ screenTexts?.result?.errorsHeader ?? 'Row errors \u2014 these rows will be skipped' }}\r\n </ng-template>\r\n </p>\r\n <div class=\"ieeesa-roster-import__errors-body\">\r\n <div\r\n *ngFor=\"let rowErr of jobErrors\"\r\n class=\"ieeesa-roster-import__error-row\"\r\n >\r\n <p class=\"ieeesa-roster-import__error-row-title\">\r\n Row {{ rowErr.rowNumber }} \u2014 {{ rowErr.errorMessage }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Footer actions -->\r\n <div class=\"ieeesa-roster-import__actions\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__cancel-btn\"\r\n (click)=\"onCancel()\"\r\n type=\"button\"\r\n >\r\n {{ screenTexts?.buttons?.cancel ?? 'Cancel' }}\r\n </button>\r\n <button\r\n *ngIf=\"importState === 'result' && jobErrors.length\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button ieeesa-roster-import__error-log-btn\"\r\n (click)=\"downloadErrorLog()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadErrorLog ?? 'Download Error log'\"\r\n >\r\n {{ screenTexts?.buttons?.downloadErrorLog ?? 'Download Error log' }}\r\n </button>\r\n <button\r\n *ngIf=\"importState === 'result'\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button ieeesa-roster-import__upload-new-btn\"\r\n (click)=\"onUploadNewFile()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.uploadNewFile ?? 'Upload different file'\"\r\n >\r\n {{ screenTexts?.buttons?.uploadNewFile ?? 'Upload Different File' }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.mat-mdc-dialog-content:has(>.ieeesa-roster-import),.mdc-dialog__content:has(>.ieeesa-roster-import),.mat-mdc-dialog-content:has(.ieeesa-roster-import),.mdc-dialog__content:has(.ieeesa-roster-import){max-height:none!important;min-height:320px!important;height:auto!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog{width:720px!important;max-width:calc(100vw - 32px)!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal{box-shadow:0 4px 24px #00000080!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog [mat-dialog-content],.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-container .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal>.ieeesa-label-lg-16{max-height:none!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{border-bottom:1px solid #e5e7eb;padding-bottom:16px;margin-bottom:16px!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content{min-height:0!important;padding:0!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{display:flex;align-items:center;gap:4px}.ieeesa-roster-import{background:#fff;position:relative;box-sizing:border-box;width:100%;font-family:Calibri Regular,sans-serif}.ieeesa-roster-import strong,.ieeesa-roster-import b,.ieeesa-roster-import .ieeesa-roster-import__subheader-title,.ieeesa-roster-import .ieeesa-roster-import__columns-title,.ieeesa-roster-import .ieeesa-roster-import__import-btn,.ieeesa-roster-import .ieeesa-roster-import__summary-card-count{font-family:Calibri Bold,sans-serif}.ieeesa-roster-import__subheader{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 1.5em;margin:0 -1.5em 20px;min-height:48px;background-color:#f4f5f7}.ieeesa-roster-import__subheader-title{font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__import-btn.mat-tertiary-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:13px;font-weight:600;line-height:1;height:36px!important;min-height:36px!important;padding:0 16px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__import-btn.mat-tertiary-button .mdc-button__label{display:inline-flex;align-items:center;gap:6px}.ieeesa-roster-import__import-btn.mat-tertiary-button:hover:not(:disabled){background-color:#f7fbff}.ieeesa-roster-import__import-btn.mat-tertiary-button:disabled{border-color:#cbd5e1;color:#9aa4b2}.ieeesa-roster-import__import-btn-icon{width:14px;height:14px;flex-shrink:0;display:block;vertical-align:middle}.ieeesa-roster-import__columns-card{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border:1px solid #2f9fe6;border-radius:6px;background:#f3f9ff;padding:10px;margin:0 0 24px}.ieeesa-roster-import__columns-content{flex:1;min-width:0}.ieeesa-roster-import__columns-title{margin:0 0 10px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:700;color:#005587}.ieeesa-roster-import__columns-chips{display:flex;flex-wrap:wrap;gap:6px}.ieeesa-roster-import__chip{display:inline-block;font-family:Calibri Bold,sans-serif;border:1px solid #d4d8e1;border-radius:4px;background:#e9edf4;padding:6px 12px;color:#6b7280;font-size:12px;font-weight:600}.ieeesa-roster-import__download-btn.mat-tertiary-button{display:inline-flex;align-items:center;gap:4px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:12px;font-weight:600;line-height:18px;height:30px!important;min-height:30px!important;padding:0 12px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__download-btn.mat-tertiary-button:hover{background-color:#f7fbff}.ieeesa-roster-import__download-btn-icon{width:14px;height:14px;flex-shrink:0}.ieeesa-roster-import__upload-label{margin:0 0 8px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone{border:2px dashed #cccccc;border-radius:8px;min-height:108px;padding:20px 16px;margin:0 0 12px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;cursor:pointer;background:#fafafa}.ieeesa-roster-import__dropzone:hover,.ieeesa-roster-import__dropzone--active{border-color:#00629b;background:#f4f9fc}.ieeesa-roster-import__dropzone--result{cursor:default;pointer-events:none}.ieeesa-roster-import__upload-icon{color:#5c6371;font-size:18px;line-height:1;margin-bottom:8px}.ieeesa-roster-import__dropzone-text{margin:0;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone-hint{margin:6px 0 0;font-family:Calibri Regular,sans-serif;font-size:12px;color:#99a1af}.ieeesa-roster-import__file-row{display:flex;align-items:center;justify-content:center;gap:6px}.ieeesa-roster-import__file-name{margin:0;font-size:14px;font-weight:600;color:#00629b;display:flex;align-items:center;gap:4px}.ieeesa-roster-import__remove-file-btn{display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:#ba0c2f;min-width:auto;width:20px;height:20px;padding:0;cursor:pointer}.ieeesa-roster-import__error-banner{display:flex;flex-direction:column;padding:10px 14px;background-color:#fdecea;border:1px solid #ff6467;border-radius:4px;margin:0 0 12px;font-family:Calibri Regular,sans-serif;font-size:13px;font-weight:400;color:#b3261e}.ieeesa-roster-import__no-data-banner{padding:10px 14px;background-color:#fefce8;border:1px solid #fdc700;border-radius:4px;margin:16px 0 0;font-size:13px;color:#894b00}.ieeesa-roster-import__progress-head{display:flex;align-items:center;justify-content:space-between;margin:16px 0 8px}.ieeesa-roster-import__progress-label{font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__progress-percent{font-family:Calibri Regular,sans-serif;font-size:14px;font-weight:600;color:#6f7782}.ieeesa-roster-import__progress-bar{--mdc-linear-progress-active-indicator-color: #00629b;--mdc-linear-progress-track-color: #dce6ef;border-radius:6px;height:14px;margin:0 0 8px;overflow:hidden}.ieeesa-roster-import__progress-bar .mdc-linear-progress__bar-inner{border-color:#00629b}.ieeesa-roster-import__summary-cards{display:flex;gap:16px;margin:16px 0}.ieeesa-roster-import__summary-card{flex:1;border:1px solid #e3e5e8;border-radius:6px;padding:14px 16px;background:#fff}.ieeesa-roster-import__summary-card-count{margin:0 0 4px;font-family:Calibri Bold,sans-serif;font-size:28px;font-weight:700;line-height:1.1}.ieeesa-roster-import__summary-card--success .ieeesa-roster-import__summary-card-count{color:#27783a}.ieeesa-roster-import__summary-card--skipped .ieeesa-roster-import__summary-card-count{color:#ba0c2f}.ieeesa-roster-import__summary-card-label{margin:0;font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__errors-card{border:1px solid #ff6467;border-radius:4px;margin:0 0 16px;background-color:#fdecea;overflow:hidden}.ieeesa-roster-import__errors-header{margin:0;padding:8px 14px;font-size:12px;font-weight:700;color:#ba0c2f;background-color:#fcd9dd;border-bottom:1px solid #ff6467}.ieeesa-roster-import__errors-body{max-height:200px;overflow-y:auto;padding:10px 14px}.ieeesa-roster-import__error-row{margin-bottom:8px}.ieeesa-roster-import__error-row:last-child{margin-bottom:0}.ieeesa-roster-import__error-row-title{margin:0;font-size:12px;font-weight:400;color:#ba0c2f;line-height:1.5}.ieeesa-roster-import__actions{display:flex;align-items:center;gap:14px;margin:20px -1.5em 0;padding:16px 1.5em 0;border-top:1px solid #e5e7eb}.ieeesa-roster-import__import-submit-btn{background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn{margin-left:auto;background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn:hover{background-color:#005587}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
568
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RosterImportComponent, isStandalone: true, selector: "ieeesa-roster-import", inputs: { componentData: "componentData" }, outputs: { submitFormResponse: "submitFormResponse", formCancel: "formCancel" }, ngImport: i0, template: "<div class=\"ieeesa-roster-import\">\r\n <!-- Sub-heading band: \"Bulk Import Participants\" on the left, Import Roster\r\n action on the right (appears once a file is selected) \u2014 matches the Figma.\r\n The \"\u2190 Back to Rosters / Import Roster\" title row + X are rendered by the\r\n shared ModalComponent above this. -->\r\n <div class=\"ieeesa-roster-import__subheader\">\r\n <span class=\"ieeesa-roster-import__subheader-title\">\r\n {{ screenTexts?.subHeading ?? 'Bulk Import Participants' }}\r\n </span>\r\n <button\r\n *ngIf=\"selectedFile && importState === 'upload'\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-tertiary-button ieeesa-roster-import__import-btn\"\r\n (click)=\"onImport()\"\r\n [attr.aria-label]=\"screenTexts?.buttons?.import ?? 'Import Roster'\"\r\n >\r\n <svg class=\"ieeesa-roster-import__import-btn-icon\" width=\"14\" height=\"14\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-import\"></use>\r\n </svg>\r\n {{ screenTexts?.buttons?.import ?? 'Import Roster' }}\r\n </button>\r\n </div>\r\n\r\n <!-- Required Columns Info -->\r\n <div class=\"ieeesa-roster-import__columns-card\">\r\n <div class=\"ieeesa-roster-import__columns-content\">\r\n <p class=\"ieeesa-roster-import__columns-title\">\r\n {{ screenTexts?.requiredColumnsTitle ?? 'Required columns' }}\r\n </p>\r\n <div class=\"ieeesa-roster-import__columns-chips\">\r\n <span\r\n *ngFor=\"let col of requiredColumns\"\r\n class=\"ieeesa-roster-import__chip\"\r\n >\r\n {{ col }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"ieeesa-roster-import__sample-wrapper\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__download-btn\"\r\n (click)=\"downloadSampleFile()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadSample ?? 'Download Sample File'\"\r\n >\r\n <svg\r\n class=\"ieeesa-roster-import__download-btn-icon\"\r\n aria-hidden=\"true\"\r\n >\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ screenTexts?.downloadSampleLabel ?? 'Download Sample File' }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <p class=\"ieeesa-roster-import__upload-label\">\r\n {{ screenTexts?.uploadLabel ?? 'Upload your file' }}\r\n </p>\r\n\r\n <!-- Upload State -->\r\n <ng-container *ngIf=\"importState === 'upload'\">\r\n <!-- Hidden file input -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [accept]=\"acceptedFileTypes\"\r\n (change)=\"onFileSelected($event)\"\r\n hidden\r\n [attr.aria-label]=\"screenTexts?.uploadLabel ?? 'Upload your file'\"\r\n />\r\n\r\n <!-- Drag & Drop Zone -->\r\n <div\r\n class=\"ieeesa-roster-import__dropzone\"\r\n [class.ieeesa-roster-import__dropzone--active]=\"isDragOver\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onFileDrop($event)\"\r\n (click)=\"fileInput.click()\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n (keydown.enter)=\"fileInput.click()\"\r\n (keydown.space)=\"fileInput.click()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.dropzone ?? 'Drag and drop file upload area'\"\r\n >\r\n <ng-container *ngIf=\"!selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__dropzone-text\">\r\n {{ screenTexts?.dropzoneText ?? 'Drag & drop a file here, or click to browse' }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__dropzone-hint\">\r\n {{ screenTexts?.dropzoneHint ?? 'Accepted formats: .csv, .xlsx' }}\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <div class=\"ieeesa-roster-import__file-row\">\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile.name }}\r\n </p>\r\n <button\r\n mat-button\r\n class=\"ieeesa-roster-import__remove-file-btn\"\r\n (click)=\"onRemoveFile(); $event.stopPropagation()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.remove ?? 'Remove selected file'\"\r\n >\r\n ×\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Inline Error Message -->\r\n <div\r\n *ngIf=\"errorMessages.length || errorMessage\"\r\n class=\"ieeesa-roster-import__error-banner\"\r\n role=\"alert\"\r\n >\r\n <!-- Multiple API error messages (e.g. several fields failed): list them. -->\r\n <ul\r\n *ngIf=\"errorMessages.length > 1; else singleError\"\r\n class=\"ieeesa-roster-import__error-list\"\r\n >\r\n <li *ngFor=\"let message of errorMessages\">{{ message }}</li>\r\n </ul>\r\n <!-- Single message (validation errors or one API error). -->\r\n <ng-template #singleError>\r\n {{ errorMessages[0] ?? errorMessage }}\r\n </ng-template>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Processing / Result share the file display + progress bar -->\r\n <ng-container *ngIf=\"importState === 'processing' || importState === 'result'\">\r\n <div\r\n class=\"ieeesa-roster-import__dropzone ieeesa-roster-import__dropzone--result\"\r\n >\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile?.name }}\r\n </p>\r\n </div>\r\n\r\n <!-- Progress label (processing only) -->\r\n <div\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-head\"\r\n >\r\n <span class=\"ieeesa-roster-import__progress-label\">\r\n {{ screenTexts?.processingLabel ?? 'Processing file records....' }}\r\n </span>\r\n </div>\r\n <mat-progress-bar\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-bar\"\r\n mode=\"indeterminate\"\r\n [attr.aria-label]=\"screenTexts?.processingLabel ?? 'Processing file records....'\"\r\n ></mat-progress-bar>\r\n </ng-container>\r\n\r\n <!-- Result State (summary + errors) -->\r\n <ng-container *ngIf=\"importState === 'result' && uploadResult\">\r\n <!-- No data records banner (headers only, zero rows) -->\r\n <div\r\n *ngIf=\"noDataMessage\"\r\n class=\"ieeesa-roster-import__no-data-banner\"\r\n role=\"status\"\r\n >\r\n {{ noDataMessage }}\r\n </div>\r\n\r\n <!-- Summary cards -->\r\n <div *ngIf=\"showSummaryCards\" class=\"ieeesa-roster-import__summary-cards\">\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--success\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.successCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.successCardLabel ?? 'Rosters added successfully' }}\r\n </p>\r\n </div>\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--skipped\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.failureCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.skippedCardLabel ?? 'Skipped Rows' }}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- Row Errors Card -->\r\n <div *ngIf=\"jobErrors.length\" class=\"ieeesa-roster-import__errors-card\">\r\n <p class=\"ieeesa-roster-import__errors-header\">\r\n <ng-container *ngIf=\"allRowsSkipped; else someErrors\">\r\n {{ screenTexts?.result?.allRowsSkippedHeader ?? 'All Rows are skipped' }}\r\n </ng-container>\r\n <ng-template #someErrors>\r\n {{ screenTexts?.result?.errorsHeader ?? 'Row errors \u2014 these rows will be skipped' }}\r\n </ng-template>\r\n </p>\r\n <div class=\"ieeesa-roster-import__errors-body\">\r\n <div\r\n *ngFor=\"let rowErr of jobErrors\"\r\n class=\"ieeesa-roster-import__error-row\"\r\n >\r\n <p class=\"ieeesa-roster-import__error-row-title\">\r\n Row {{ rowErr.rowNumber }} \u2014 {{ rowErr.errorMessage }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Footer actions -->\r\n <div class=\"ieeesa-roster-import__actions\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__cancel-btn\"\r\n (click)=\"onCancel()\"\r\n type=\"button\"\r\n >\r\n {{ screenTexts?.buttons?.cancel ?? 'Cancel' }}\r\n </button>\r\n <button\r\n *ngIf=\"importState === 'result' && jobErrors.length\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button ieeesa-roster-import__error-log-btn\"\r\n (click)=\"downloadErrorLog()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadErrorLog ?? 'Download Error log'\"\r\n >\r\n {{ screenTexts?.buttons?.downloadErrorLog ?? 'Download Error log' }}\r\n </button>\r\n <button\r\n *ngIf=\"importState === 'result'\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button ieeesa-roster-import__upload-new-btn\"\r\n (click)=\"onUploadNewFile()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.uploadNewFile ?? 'Upload different file'\"\r\n >\r\n {{ screenTexts?.buttons?.uploadNewFile ?? 'Upload Different File' }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.mat-mdc-dialog-content:has(>.ieeesa-roster-import),.mdc-dialog__content:has(>.ieeesa-roster-import),.mat-mdc-dialog-content:has(.ieeesa-roster-import),.mdc-dialog__content:has(.ieeesa-roster-import){max-height:none!important;min-height:320px!important;height:auto!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog{width:720px!important;max-width:calc(100vw - 32px)!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal{box-shadow:0 4px 24px #00000080!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog [mat-dialog-content],.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-container .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal>.ieeesa-label-lg-16{max-height:none!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{border-bottom:1px solid #e5e7eb;padding-bottom:16px;margin-bottom:16px!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content{min-height:0!important;padding:0!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{display:flex;align-items:center;gap:4px}.ieeesa-roster-import{background:#fff;position:relative;box-sizing:border-box;width:100%;font-family:Calibri Regular,sans-serif}.ieeesa-roster-import strong,.ieeesa-roster-import b,.ieeesa-roster-import .ieeesa-roster-import__subheader-title,.ieeesa-roster-import .ieeesa-roster-import__columns-title,.ieeesa-roster-import .ieeesa-roster-import__import-btn,.ieeesa-roster-import .ieeesa-roster-import__summary-card-count{font-family:Calibri Bold,sans-serif}.ieeesa-roster-import__subheader{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 1.5em;margin:0 -1.5em 20px;min-height:48px;background-color:#f4f5f7}.ieeesa-roster-import__subheader-title{font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__import-btn.mat-tertiary-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:13px;font-weight:600;line-height:1;height:36px!important;min-height:36px!important;padding:0 16px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__import-btn.mat-tertiary-button .mdc-button__label{display:inline-flex;align-items:center;gap:6px}.ieeesa-roster-import__import-btn.mat-tertiary-button:hover:not(:disabled){background-color:#f7fbff}.ieeesa-roster-import__import-btn.mat-tertiary-button:disabled{border-color:#cbd5e1;color:#9aa4b2}.ieeesa-roster-import__import-btn-icon{width:14px;height:14px;flex-shrink:0;display:block;vertical-align:middle}.ieeesa-roster-import__columns-card{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border:1px solid #2f9fe6;border-radius:6px;background:#f3f9ff;padding:10px;margin:0 0 24px}.ieeesa-roster-import__columns-content{flex:1;min-width:0}.ieeesa-roster-import__columns-title{margin:0 0 10px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:700;color:#005587}.ieeesa-roster-import__columns-chips{display:flex;flex-wrap:wrap;gap:6px}.ieeesa-roster-import__chip{display:inline-block;font-family:Calibri Bold,sans-serif;border:1px solid #d4d8e1;border-radius:4px;background:#e9edf4;padding:6px 12px;color:#6b7280;font-size:12px;font-weight:600}.ieeesa-roster-import__download-btn.mat-tertiary-button{display:inline-flex;align-items:center;gap:4px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:12px;font-weight:600;line-height:18px;height:30px!important;min-height:30px!important;padding:0 12px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__download-btn.mat-tertiary-button:hover{background-color:#f7fbff}.ieeesa-roster-import__download-btn-icon{width:14px;height:14px;flex-shrink:0}.ieeesa-roster-import__upload-label{margin:0 0 8px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone{border:2px dashed #cccccc;border-radius:8px;min-height:108px;padding:20px 16px;margin:0 0 12px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;cursor:pointer;background:#fafafa}.ieeesa-roster-import__dropzone:hover,.ieeesa-roster-import__dropzone--active{border-color:#00629b;background:#f4f9fc}.ieeesa-roster-import__dropzone--result{cursor:default;pointer-events:none}.ieeesa-roster-import__upload-icon{color:#5c6371;font-size:18px;line-height:1;margin-bottom:8px}.ieeesa-roster-import__dropzone-text{margin:0;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone-hint{margin:6px 0 0;font-family:Calibri Regular,sans-serif;font-size:12px;color:#99a1af}.ieeesa-roster-import__file-row{display:flex;align-items:center;justify-content:center;gap:6px}.ieeesa-roster-import__file-name{margin:0;font-size:14px;font-weight:600;color:#00629b;display:flex;align-items:center;gap:4px}.ieeesa-roster-import__remove-file-btn{display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:#ba0c2f;min-width:auto;width:20px;height:20px;padding:0;cursor:pointer}.ieeesa-roster-import__error-banner{display:flex;flex-direction:column;padding:10px 14px;background-color:#fdecea;border:1px solid #ff6467;border-radius:4px;margin:0 0 12px;font-family:Calibri Regular,sans-serif;font-size:13px;font-weight:400;color:#b3261e}.ieeesa-roster-import__error-list{margin:0;padding-left:18px}.ieeesa-roster-import__error-list li+li{margin-top:2px}.ieeesa-roster-import__no-data-banner{padding:10px 14px;background-color:#fefce8;border:1px solid #fdc700;border-radius:4px;margin:16px 0 0;font-size:13px;color:#894b00}.ieeesa-roster-import__progress-head{display:flex;align-items:center;justify-content:space-between;margin:16px 0 8px}.ieeesa-roster-import__progress-label{font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__progress-percent{font-family:Calibri Regular,sans-serif;font-size:14px;font-weight:600;color:#6f7782}.ieeesa-roster-import__progress-bar{--mdc-linear-progress-active-indicator-color: #00629b;--mdc-linear-progress-track-color: #dce6ef;border-radius:6px;height:14px;margin:0 0 8px;overflow:hidden}.ieeesa-roster-import__progress-bar .mdc-linear-progress__bar-inner{border-color:#00629b}.ieeesa-roster-import__summary-cards{display:flex;gap:16px;margin:16px 0}.ieeesa-roster-import__summary-card{flex:1;border:1px solid #e3e5e8;border-radius:6px;padding:14px 16px;background:#fff}.ieeesa-roster-import__summary-card-count{margin:0 0 4px;font-family:Calibri Bold,sans-serif;font-size:28px;font-weight:700;line-height:1.1}.ieeesa-roster-import__summary-card--success .ieeesa-roster-import__summary-card-count{color:#27783a}.ieeesa-roster-import__summary-card--skipped .ieeesa-roster-import__summary-card-count{color:#ba0c2f}.ieeesa-roster-import__summary-card-label{margin:0;font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__errors-card{border:1px solid #ff6467;border-radius:4px;margin:0 0 16px;background-color:#fdecea;overflow:hidden}.ieeesa-roster-import__errors-header{margin:0;padding:8px 14px;font-size:12px;font-weight:700;color:#ba0c2f;background-color:#fcd9dd;border-bottom:1px solid #ff6467}.ieeesa-roster-import__errors-body{max-height:200px;overflow-y:auto;padding:10px 14px}.ieeesa-roster-import__error-row{margin-bottom:8px}.ieeesa-roster-import__error-row:last-child{margin-bottom:0}.ieeesa-roster-import__error-row-title{margin:0;font-size:12px;font-weight:400;color:#ba0c2f;line-height:1.5}.ieeesa-roster-import__actions{display:flex;align-items:center;gap:14px;margin:20px -1.5em 0;padding:16px 1.5em 0;border-top:1px solid #e5e7eb}.ieeesa-roster-import__import-submit-btn{background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn{margin-left:auto;background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn:hover{background-color:#005587}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
552
569
|
}
|
|
553
570
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RosterImportComponent, decorators: [{
|
|
554
571
|
type: Component,
|
|
555
|
-
args: [{ selector: 'ieeesa-roster-import', standalone: true, imports: [CommonModule, MatButtonModule, MatProgressBarModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"ieeesa-roster-import\">\r\n <!-- Sub-heading band: \"Bulk Import Participants\" on the left, Import Roster\r\n action on the right (appears once a file is selected) \u2014 matches the Figma.\r\n The \"\u2190 Back to Rosters / Import Roster\" title row + X are rendered by the\r\n shared ModalComponent above this. -->\r\n <div class=\"ieeesa-roster-import__subheader\">\r\n <span class=\"ieeesa-roster-import__subheader-title\">\r\n {{ screenTexts?.subHeading ?? 'Bulk Import Participants' }}\r\n </span>\r\n <button\r\n *ngIf=\"selectedFile && importState === 'upload'\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-tertiary-button ieeesa-roster-import__import-btn\"\r\n (click)=\"onImport()\"\r\n [attr.aria-label]=\"screenTexts?.buttons?.import ?? 'Import Roster'\"\r\n >\r\n <svg class=\"ieeesa-roster-import__import-btn-icon\" width=\"14\" height=\"14\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-import\"></use>\r\n </svg>\r\n {{ screenTexts?.buttons?.import ?? 'Import Roster' }}\r\n </button>\r\n </div>\r\n\r\n <!-- Required Columns Info -->\r\n <div class=\"ieeesa-roster-import__columns-card\">\r\n <div class=\"ieeesa-roster-import__columns-content\">\r\n <p class=\"ieeesa-roster-import__columns-title\">\r\n {{ screenTexts?.requiredColumnsTitle ?? 'Required columns' }}\r\n </p>\r\n <div class=\"ieeesa-roster-import__columns-chips\">\r\n <span\r\n *ngFor=\"let col of requiredColumns\"\r\n class=\"ieeesa-roster-import__chip\"\r\n >\r\n {{ col }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"ieeesa-roster-import__sample-wrapper\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__download-btn\"\r\n (click)=\"downloadSampleFile()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadSample ?? 'Download Sample File'\"\r\n >\r\n <svg\r\n class=\"ieeesa-roster-import__download-btn-icon\"\r\n aria-hidden=\"true\"\r\n >\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ screenTexts?.downloadSampleLabel ?? 'Download Sample File' }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <p class=\"ieeesa-roster-import__upload-label\">\r\n {{ screenTexts?.uploadLabel ?? 'Upload your file' }}\r\n </p>\r\n\r\n <!-- Upload State -->\r\n <ng-container *ngIf=\"importState === 'upload'\">\r\n <!-- Hidden file input -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [accept]=\"acceptedFileTypes\"\r\n (change)=\"onFileSelected($event)\"\r\n hidden\r\n [attr.aria-label]=\"screenTexts?.uploadLabel ?? 'Upload your file'\"\r\n />\r\n\r\n <!-- Drag & Drop Zone -->\r\n <div\r\n class=\"ieeesa-roster-import__dropzone\"\r\n [class.ieeesa-roster-import__dropzone--active]=\"isDragOver\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onFileDrop($event)\"\r\n (click)=\"fileInput.click()\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n (keydown.enter)=\"fileInput.click()\"\r\n (keydown.space)=\"fileInput.click()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.dropzone ?? 'Drag and drop file upload area'\"\r\n >\r\n <ng-container *ngIf=\"!selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__dropzone-text\">\r\n {{ screenTexts?.dropzoneText ?? 'Drag & drop a file here, or click to browse' }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__dropzone-hint\">\r\n {{ screenTexts?.dropzoneHint ?? 'Accepted formats: .csv, .xlsx' }}\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <div class=\"ieeesa-roster-import__file-row\">\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile.name }}\r\n </p>\r\n <button\r\n mat-button\r\n class=\"ieeesa-roster-import__remove-file-btn\"\r\n (click)=\"onRemoveFile(); $event.stopPropagation()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.remove ?? 'Remove selected file'\"\r\n >\r\n ×\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Inline Error Message -->\r\n <div\r\n *ngIf=\"errorMessage\"\r\n class=\"ieeesa-roster-import__error-banner\"\r\n role=\"alert\"\r\n >\r\n {{ errorMessage }}\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Processing / Result share the file display + progress bar -->\r\n <ng-container *ngIf=\"importState === 'processing' || importState === 'result'\">\r\n <div\r\n class=\"ieeesa-roster-import__dropzone ieeesa-roster-import__dropzone--result\"\r\n >\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile?.name }}\r\n </p>\r\n </div>\r\n\r\n <!-- Progress label (processing only) -->\r\n <div\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-head\"\r\n >\r\n <span class=\"ieeesa-roster-import__progress-label\">\r\n {{ screenTexts?.processingLabel ?? 'Processing file records....' }}\r\n </span>\r\n </div>\r\n <mat-progress-bar\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-bar\"\r\n mode=\"indeterminate\"\r\n [attr.aria-label]=\"screenTexts?.processingLabel ?? 'Processing file records....'\"\r\n ></mat-progress-bar>\r\n </ng-container>\r\n\r\n <!-- Result State (summary + errors) -->\r\n <ng-container *ngIf=\"importState === 'result' && uploadResult\">\r\n <!-- No data records banner (headers only, zero rows) -->\r\n <div\r\n *ngIf=\"noDataMessage\"\r\n class=\"ieeesa-roster-import__no-data-banner\"\r\n role=\"status\"\r\n >\r\n {{ noDataMessage }}\r\n </div>\r\n\r\n <!-- Summary cards -->\r\n <div *ngIf=\"showSummaryCards\" class=\"ieeesa-roster-import__summary-cards\">\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--success\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.successCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.successCardLabel ?? 'Rosters added successfully' }}\r\n </p>\r\n </div>\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--skipped\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.failureCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.skippedCardLabel ?? 'Skipped Rows' }}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- Row Errors Card -->\r\n <div *ngIf=\"jobErrors.length\" class=\"ieeesa-roster-import__errors-card\">\r\n <p class=\"ieeesa-roster-import__errors-header\">\r\n <ng-container *ngIf=\"allRowsSkipped; else someErrors\">\r\n {{ screenTexts?.result?.allRowsSkippedHeader ?? 'All Rows are skipped' }}\r\n </ng-container>\r\n <ng-template #someErrors>\r\n {{ screenTexts?.result?.errorsHeader ?? 'Row errors \u2014 these rows will be skipped' }}\r\n </ng-template>\r\n </p>\r\n <div class=\"ieeesa-roster-import__errors-body\">\r\n <div\r\n *ngFor=\"let rowErr of jobErrors\"\r\n class=\"ieeesa-roster-import__error-row\"\r\n >\r\n <p class=\"ieeesa-roster-import__error-row-title\">\r\n Row {{ rowErr.rowNumber }} \u2014 {{ rowErr.errorMessage }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Footer actions -->\r\n <div class=\"ieeesa-roster-import__actions\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__cancel-btn\"\r\n (click)=\"onCancel()\"\r\n type=\"button\"\r\n >\r\n {{ screenTexts?.buttons?.cancel ?? 'Cancel' }}\r\n </button>\r\n <button\r\n *ngIf=\"importState === 'result' && jobErrors.length\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button ieeesa-roster-import__error-log-btn\"\r\n (click)=\"downloadErrorLog()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadErrorLog ?? 'Download Error log'\"\r\n >\r\n {{ screenTexts?.buttons?.downloadErrorLog ?? 'Download Error log' }}\r\n </button>\r\n <button\r\n *ngIf=\"importState === 'result'\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button ieeesa-roster-import__upload-new-btn\"\r\n (click)=\"onUploadNewFile()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.uploadNewFile ?? 'Upload different file'\"\r\n >\r\n {{ screenTexts?.buttons?.uploadNewFile ?? 'Upload Different File' }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.mat-mdc-dialog-content:has(>.ieeesa-roster-import),.mdc-dialog__content:has(>.ieeesa-roster-import),.mat-mdc-dialog-content:has(.ieeesa-roster-import),.mdc-dialog__content:has(.ieeesa-roster-import){max-height:none!important;min-height:320px!important;height:auto!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog{width:720px!important;max-width:calc(100vw - 32px)!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal{box-shadow:0 4px 24px #00000080!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog [mat-dialog-content],.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-container .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal>.ieeesa-label-lg-16{max-height:none!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{border-bottom:1px solid #e5e7eb;padding-bottom:16px;margin-bottom:16px!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content{min-height:0!important;padding:0!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{display:flex;align-items:center;gap:4px}.ieeesa-roster-import{background:#fff;position:relative;box-sizing:border-box;width:100%;font-family:Calibri Regular,sans-serif}.ieeesa-roster-import strong,.ieeesa-roster-import b,.ieeesa-roster-import .ieeesa-roster-import__subheader-title,.ieeesa-roster-import .ieeesa-roster-import__columns-title,.ieeesa-roster-import .ieeesa-roster-import__import-btn,.ieeesa-roster-import .ieeesa-roster-import__summary-card-count{font-family:Calibri Bold,sans-serif}.ieeesa-roster-import__subheader{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 1.5em;margin:0 -1.5em 20px;min-height:48px;background-color:#f4f5f7}.ieeesa-roster-import__subheader-title{font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__import-btn.mat-tertiary-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:13px;font-weight:600;line-height:1;height:36px!important;min-height:36px!important;padding:0 16px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__import-btn.mat-tertiary-button .mdc-button__label{display:inline-flex;align-items:center;gap:6px}.ieeesa-roster-import__import-btn.mat-tertiary-button:hover:not(:disabled){background-color:#f7fbff}.ieeesa-roster-import__import-btn.mat-tertiary-button:disabled{border-color:#cbd5e1;color:#9aa4b2}.ieeesa-roster-import__import-btn-icon{width:14px;height:14px;flex-shrink:0;display:block;vertical-align:middle}.ieeesa-roster-import__columns-card{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border:1px solid #2f9fe6;border-radius:6px;background:#f3f9ff;padding:10px;margin:0 0 24px}.ieeesa-roster-import__columns-content{flex:1;min-width:0}.ieeesa-roster-import__columns-title{margin:0 0 10px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:700;color:#005587}.ieeesa-roster-import__columns-chips{display:flex;flex-wrap:wrap;gap:6px}.ieeesa-roster-import__chip{display:inline-block;font-family:Calibri Bold,sans-serif;border:1px solid #d4d8e1;border-radius:4px;background:#e9edf4;padding:6px 12px;color:#6b7280;font-size:12px;font-weight:600}.ieeesa-roster-import__download-btn.mat-tertiary-button{display:inline-flex;align-items:center;gap:4px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:12px;font-weight:600;line-height:18px;height:30px!important;min-height:30px!important;padding:0 12px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__download-btn.mat-tertiary-button:hover{background-color:#f7fbff}.ieeesa-roster-import__download-btn-icon{width:14px;height:14px;flex-shrink:0}.ieeesa-roster-import__upload-label{margin:0 0 8px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone{border:2px dashed #cccccc;border-radius:8px;min-height:108px;padding:20px 16px;margin:0 0 12px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;cursor:pointer;background:#fafafa}.ieeesa-roster-import__dropzone:hover,.ieeesa-roster-import__dropzone--active{border-color:#00629b;background:#f4f9fc}.ieeesa-roster-import__dropzone--result{cursor:default;pointer-events:none}.ieeesa-roster-import__upload-icon{color:#5c6371;font-size:18px;line-height:1;margin-bottom:8px}.ieeesa-roster-import__dropzone-text{margin:0;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone-hint{margin:6px 0 0;font-family:Calibri Regular,sans-serif;font-size:12px;color:#99a1af}.ieeesa-roster-import__file-row{display:flex;align-items:center;justify-content:center;gap:6px}.ieeesa-roster-import__file-name{margin:0;font-size:14px;font-weight:600;color:#00629b;display:flex;align-items:center;gap:4px}.ieeesa-roster-import__remove-file-btn{display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:#ba0c2f;min-width:auto;width:20px;height:20px;padding:0;cursor:pointer}.ieeesa-roster-import__error-banner{display:flex;flex-direction:column;padding:10px 14px;background-color:#fdecea;border:1px solid #ff6467;border-radius:4px;margin:0 0 12px;font-family:Calibri Regular,sans-serif;font-size:13px;font-weight:400;color:#b3261e}.ieeesa-roster-import__no-data-banner{padding:10px 14px;background-color:#fefce8;border:1px solid #fdc700;border-radius:4px;margin:16px 0 0;font-size:13px;color:#894b00}.ieeesa-roster-import__progress-head{display:flex;align-items:center;justify-content:space-between;margin:16px 0 8px}.ieeesa-roster-import__progress-label{font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__progress-percent{font-family:Calibri Regular,sans-serif;font-size:14px;font-weight:600;color:#6f7782}.ieeesa-roster-import__progress-bar{--mdc-linear-progress-active-indicator-color: #00629b;--mdc-linear-progress-track-color: #dce6ef;border-radius:6px;height:14px;margin:0 0 8px;overflow:hidden}.ieeesa-roster-import__progress-bar .mdc-linear-progress__bar-inner{border-color:#00629b}.ieeesa-roster-import__summary-cards{display:flex;gap:16px;margin:16px 0}.ieeesa-roster-import__summary-card{flex:1;border:1px solid #e3e5e8;border-radius:6px;padding:14px 16px;background:#fff}.ieeesa-roster-import__summary-card-count{margin:0 0 4px;font-family:Calibri Bold,sans-serif;font-size:28px;font-weight:700;line-height:1.1}.ieeesa-roster-import__summary-card--success .ieeesa-roster-import__summary-card-count{color:#27783a}.ieeesa-roster-import__summary-card--skipped .ieeesa-roster-import__summary-card-count{color:#ba0c2f}.ieeesa-roster-import__summary-card-label{margin:0;font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__errors-card{border:1px solid #ff6467;border-radius:4px;margin:0 0 16px;background-color:#fdecea;overflow:hidden}.ieeesa-roster-import__errors-header{margin:0;padding:8px 14px;font-size:12px;font-weight:700;color:#ba0c2f;background-color:#fcd9dd;border-bottom:1px solid #ff6467}.ieeesa-roster-import__errors-body{max-height:200px;overflow-y:auto;padding:10px 14px}.ieeesa-roster-import__error-row{margin-bottom:8px}.ieeesa-roster-import__error-row:last-child{margin-bottom:0}.ieeesa-roster-import__error-row-title{margin:0;font-size:12px;font-weight:400;color:#ba0c2f;line-height:1.5}.ieeesa-roster-import__actions{display:flex;align-items:center;gap:14px;margin:20px -1.5em 0;padding:16px 1.5em 0;border-top:1px solid #e5e7eb}.ieeesa-roster-import__import-submit-btn{background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn{margin-left:auto;background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn:hover{background-color:#005587}\n"] }]
|
|
572
|
+
args: [{ selector: 'ieeesa-roster-import', standalone: true, imports: [CommonModule, MatButtonModule, MatProgressBarModule], encapsulation: ViewEncapsulation.None, template: "<div class=\"ieeesa-roster-import\">\r\n <!-- Sub-heading band: \"Bulk Import Participants\" on the left, Import Roster\r\n action on the right (appears once a file is selected) \u2014 matches the Figma.\r\n The \"\u2190 Back to Rosters / Import Roster\" title row + X are rendered by the\r\n shared ModalComponent above this. -->\r\n <div class=\"ieeesa-roster-import__subheader\">\r\n <span class=\"ieeesa-roster-import__subheader-title\">\r\n {{ screenTexts?.subHeading ?? 'Bulk Import Participants' }}\r\n </span>\r\n <button\r\n *ngIf=\"selectedFile && importState === 'upload'\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-tertiary-button ieeesa-roster-import__import-btn\"\r\n (click)=\"onImport()\"\r\n [attr.aria-label]=\"screenTexts?.buttons?.import ?? 'Import Roster'\"\r\n >\r\n <svg class=\"ieeesa-roster-import__import-btn-icon\" width=\"14\" height=\"14\" aria-hidden=\"true\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-import\"></use>\r\n </svg>\r\n {{ screenTexts?.buttons?.import ?? 'Import Roster' }}\r\n </button>\r\n </div>\r\n\r\n <!-- Required Columns Info -->\r\n <div class=\"ieeesa-roster-import__columns-card\">\r\n <div class=\"ieeesa-roster-import__columns-content\">\r\n <p class=\"ieeesa-roster-import__columns-title\">\r\n {{ screenTexts?.requiredColumnsTitle ?? 'Required columns' }}\r\n </p>\r\n <div class=\"ieeesa-roster-import__columns-chips\">\r\n <span\r\n *ngFor=\"let col of requiredColumns\"\r\n class=\"ieeesa-roster-import__chip\"\r\n >\r\n {{ col }}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"ieeesa-roster-import__sample-wrapper\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__download-btn\"\r\n (click)=\"downloadSampleFile()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadSample ?? 'Download Sample File'\"\r\n >\r\n <svg\r\n class=\"ieeesa-roster-import__download-btn-icon\"\r\n aria-hidden=\"true\"\r\n >\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ screenTexts?.downloadSampleLabel ?? 'Download Sample File' }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <p class=\"ieeesa-roster-import__upload-label\">\r\n {{ screenTexts?.uploadLabel ?? 'Upload your file' }}\r\n </p>\r\n\r\n <!-- Upload State -->\r\n <ng-container *ngIf=\"importState === 'upload'\">\r\n <!-- Hidden file input -->\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [accept]=\"acceptedFileTypes\"\r\n (change)=\"onFileSelected($event)\"\r\n hidden\r\n [attr.aria-label]=\"screenTexts?.uploadLabel ?? 'Upload your file'\"\r\n />\r\n\r\n <!-- Drag & Drop Zone -->\r\n <div\r\n class=\"ieeesa-roster-import__dropzone\"\r\n [class.ieeesa-roster-import__dropzone--active]=\"isDragOver\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onFileDrop($event)\"\r\n (click)=\"fileInput.click()\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n (keydown.enter)=\"fileInput.click()\"\r\n (keydown.space)=\"fileInput.click()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.dropzone ?? 'Drag and drop file upload area'\"\r\n >\r\n <ng-container *ngIf=\"!selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__dropzone-text\">\r\n {{ screenTexts?.dropzoneText ?? 'Drag & drop a file here, or click to browse' }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__dropzone-hint\">\r\n {{ screenTexts?.dropzoneHint ?? 'Accepted formats: .csv, .xlsx' }}\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectedFile\">\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <div class=\"ieeesa-roster-import__file-row\">\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile.name }}\r\n </p>\r\n <button\r\n mat-button\r\n class=\"ieeesa-roster-import__remove-file-btn\"\r\n (click)=\"onRemoveFile(); $event.stopPropagation()\"\r\n type=\"button\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.remove ?? 'Remove selected file'\"\r\n >\r\n ×\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Inline Error Message -->\r\n <div\r\n *ngIf=\"errorMessages.length || errorMessage\"\r\n class=\"ieeesa-roster-import__error-banner\"\r\n role=\"alert\"\r\n >\r\n <!-- Multiple API error messages (e.g. several fields failed): list them. -->\r\n <ul\r\n *ngIf=\"errorMessages.length > 1; else singleError\"\r\n class=\"ieeesa-roster-import__error-list\"\r\n >\r\n <li *ngFor=\"let message of errorMessages\">{{ message }}</li>\r\n </ul>\r\n <!-- Single message (validation errors or one API error). -->\r\n <ng-template #singleError>\r\n {{ errorMessages[0] ?? errorMessage }}\r\n </ng-template>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Processing / Result share the file display + progress bar -->\r\n <ng-container *ngIf=\"importState === 'processing' || importState === 'result'\">\r\n <div\r\n class=\"ieeesa-roster-import__dropzone ieeesa-roster-import__dropzone--result\"\r\n >\r\n <svg class=\"ieeesa-roster-import__upload-icon\" width=\"22\" height=\"22\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-upload-gray\"></use>\r\n </svg>\r\n <p class=\"ieeesa-roster-import__file-name\">\r\n <svg width=\"14\" height=\"14\">\r\n <use xlink:href=\"assets/images/sprites/sprites.svg#icon-file-doc\"></use>\r\n </svg>\r\n {{ selectedFile?.name }}\r\n </p>\r\n </div>\r\n\r\n <!-- Progress label (processing only) -->\r\n <div\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-head\"\r\n >\r\n <span class=\"ieeesa-roster-import__progress-label\">\r\n {{ screenTexts?.processingLabel ?? 'Processing file records....' }}\r\n </span>\r\n </div>\r\n <mat-progress-bar\r\n *ngIf=\"importState === 'processing'\"\r\n class=\"ieeesa-roster-import__progress-bar\"\r\n mode=\"indeterminate\"\r\n [attr.aria-label]=\"screenTexts?.processingLabel ?? 'Processing file records....'\"\r\n ></mat-progress-bar>\r\n </ng-container>\r\n\r\n <!-- Result State (summary + errors) -->\r\n <ng-container *ngIf=\"importState === 'result' && uploadResult\">\r\n <!-- No data records banner (headers only, zero rows) -->\r\n <div\r\n *ngIf=\"noDataMessage\"\r\n class=\"ieeesa-roster-import__no-data-banner\"\r\n role=\"status\"\r\n >\r\n {{ noDataMessage }}\r\n </div>\r\n\r\n <!-- Summary cards -->\r\n <div *ngIf=\"showSummaryCards\" class=\"ieeesa-roster-import__summary-cards\">\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--success\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.successCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.successCardLabel ?? 'Rosters added successfully' }}\r\n </p>\r\n </div>\r\n <div\r\n class=\"ieeesa-roster-import__summary-card ieeesa-roster-import__summary-card--skipped\"\r\n >\r\n <p class=\"ieeesa-roster-import__summary-card-count\">\r\n {{ uploadResult.failureCount }}\r\n </p>\r\n <p class=\"ieeesa-roster-import__summary-card-label\">\r\n {{ screenTexts?.result?.skippedCardLabel ?? 'Skipped Rows' }}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- Row Errors Card -->\r\n <div *ngIf=\"jobErrors.length\" class=\"ieeesa-roster-import__errors-card\">\r\n <p class=\"ieeesa-roster-import__errors-header\">\r\n <ng-container *ngIf=\"allRowsSkipped; else someErrors\">\r\n {{ screenTexts?.result?.allRowsSkippedHeader ?? 'All Rows are skipped' }}\r\n </ng-container>\r\n <ng-template #someErrors>\r\n {{ screenTexts?.result?.errorsHeader ?? 'Row errors \u2014 these rows will be skipped' }}\r\n </ng-template>\r\n </p>\r\n <div class=\"ieeesa-roster-import__errors-body\">\r\n <div\r\n *ngFor=\"let rowErr of jobErrors\"\r\n class=\"ieeesa-roster-import__error-row\"\r\n >\r\n <p class=\"ieeesa-roster-import__error-row-title\">\r\n Row {{ rowErr.rowNumber }} \u2014 {{ rowErr.errorMessage }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Footer actions -->\r\n <div class=\"ieeesa-roster-import__actions\">\r\n <button\r\n mat-button\r\n class=\"mat-tertiary-button ieeesa-roster-import__cancel-btn\"\r\n (click)=\"onCancel()\"\r\n type=\"button\"\r\n >\r\n {{ screenTexts?.buttons?.cancel ?? 'Cancel' }}\r\n </button>\r\n <button\r\n *ngIf=\"importState === 'result' && jobErrors.length\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button ieeesa-roster-import__error-log-btn\"\r\n (click)=\"downloadErrorLog()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.downloadErrorLog ?? 'Download Error log'\"\r\n >\r\n {{ screenTexts?.buttons?.downloadErrorLog ?? 'Download Error log' }}\r\n </button>\r\n <button\r\n *ngIf=\"importState === 'result'\"\r\n mat-button\r\n type=\"button\"\r\n class=\"mat-primary-button ieeesa-roster-import__upload-new-btn\"\r\n (click)=\"onUploadNewFile()\"\r\n [attr.aria-label]=\"screenTexts?.ariaLabel?.uploadNewFile ?? 'Upload different file'\"\r\n >\r\n {{ screenTexts?.buttons?.uploadNewFile ?? 'Upload Different File' }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.mat-mdc-dialog-content:has(>.ieeesa-roster-import),.mdc-dialog__content:has(>.ieeesa-roster-import),.mat-mdc-dialog-content:has(.ieeesa-roster-import),.mdc-dialog__content:has(.ieeesa-roster-import){max-height:none!important;min-height:320px!important;height:auto!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog{width:720px!important;max-width:calc(100vw - 32px)!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal{box-shadow:0 4px 24px #00000080!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog [mat-dialog-content],.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-container .mdc-dialog__content,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mdc-dialog__surface,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal,.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal>.ieeesa-label-lg-16{max-height:none!important;overflow:visible!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{border-bottom:1px solid #e5e7eb;padding-bottom:16px;margin-bottom:16px!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .mat-mdc-dialog-content{min-height:0!important;padding:0!important}.ieeesa-modal-dialog.ieeesa-roster-import-dialog .ieeesa-modal-title{display:flex;align-items:center;gap:4px}.ieeesa-roster-import{background:#fff;position:relative;box-sizing:border-box;width:100%;font-family:Calibri Regular,sans-serif}.ieeesa-roster-import strong,.ieeesa-roster-import b,.ieeesa-roster-import .ieeesa-roster-import__subheader-title,.ieeesa-roster-import .ieeesa-roster-import__columns-title,.ieeesa-roster-import .ieeesa-roster-import__import-btn,.ieeesa-roster-import .ieeesa-roster-import__summary-card-count{font-family:Calibri Bold,sans-serif}.ieeesa-roster-import__subheader{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 1.5em;margin:0 -1.5em 20px;min-height:48px;background-color:#f4f5f7}.ieeesa-roster-import__subheader-title{font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__import-btn.mat-tertiary-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:13px;font-weight:600;line-height:1;height:36px!important;min-height:36px!important;padding:0 16px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__import-btn.mat-tertiary-button .mdc-button__label{display:inline-flex;align-items:center;gap:6px}.ieeesa-roster-import__import-btn.mat-tertiary-button:hover:not(:disabled){background-color:#f7fbff}.ieeesa-roster-import__import-btn.mat-tertiary-button:disabled{border-color:#cbd5e1;color:#9aa4b2}.ieeesa-roster-import__import-btn-icon{width:14px;height:14px;flex-shrink:0;display:block;vertical-align:middle}.ieeesa-roster-import__columns-card{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border:1px solid #2f9fe6;border-radius:6px;background:#f3f9ff;padding:10px;margin:0 0 24px}.ieeesa-roster-import__columns-content{flex:1;min-width:0}.ieeesa-roster-import__columns-title{margin:0 0 10px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:700;color:#005587}.ieeesa-roster-import__columns-chips{display:flex;flex-wrap:wrap;gap:6px}.ieeesa-roster-import__chip{display:inline-block;font-family:Calibri Bold,sans-serif;border:1px solid #d4d8e1;border-radius:4px;background:#e9edf4;padding:6px 12px;color:#6b7280;font-size:12px;font-weight:600}.ieeesa-roster-import__download-btn.mat-tertiary-button{display:inline-flex;align-items:center;gap:4px;min-width:auto;width:auto;border:1px solid #00629b;color:#00629b;border-radius:4px;background-color:#fff;font-size:12px;font-weight:600;line-height:18px;height:30px!important;min-height:30px!important;padding:0 12px!important;white-space:nowrap;box-shadow:none}.ieeesa-roster-import__download-btn.mat-tertiary-button:hover{background-color:#f7fbff}.ieeesa-roster-import__download-btn-icon{width:14px;height:14px;flex-shrink:0}.ieeesa-roster-import__upload-label{margin:0 0 8px;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone{border:2px dashed #cccccc;border-radius:8px;min-height:108px;padding:20px 16px;margin:0 0 12px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;cursor:pointer;background:#fafafa}.ieeesa-roster-import__dropzone:hover,.ieeesa-roster-import__dropzone--active{border-color:#00629b;background:#f4f9fc}.ieeesa-roster-import__dropzone--result{cursor:default;pointer-events:none}.ieeesa-roster-import__upload-icon{color:#5c6371;font-size:18px;line-height:1;margin-bottom:8px}.ieeesa-roster-import__dropzone-text{margin:0;font-family:Calibri Bold,sans-serif;font-size:14px;font-weight:600;color:#4a5565}.ieeesa-roster-import__dropzone-hint{margin:6px 0 0;font-family:Calibri Regular,sans-serif;font-size:12px;color:#99a1af}.ieeesa-roster-import__file-row{display:flex;align-items:center;justify-content:center;gap:6px}.ieeesa-roster-import__file-name{margin:0;font-size:14px;font-weight:600;color:#00629b;display:flex;align-items:center;gap:4px}.ieeesa-roster-import__remove-file-btn{display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:#ba0c2f;min-width:auto;width:20px;height:20px;padding:0;cursor:pointer}.ieeesa-roster-import__error-banner{display:flex;flex-direction:column;padding:10px 14px;background-color:#fdecea;border:1px solid #ff6467;border-radius:4px;margin:0 0 12px;font-family:Calibri Regular,sans-serif;font-size:13px;font-weight:400;color:#b3261e}.ieeesa-roster-import__error-list{margin:0;padding-left:18px}.ieeesa-roster-import__error-list li+li{margin-top:2px}.ieeesa-roster-import__no-data-banner{padding:10px 14px;background-color:#fefce8;border:1px solid #fdc700;border-radius:4px;margin:16px 0 0;font-size:13px;color:#894b00}.ieeesa-roster-import__progress-head{display:flex;align-items:center;justify-content:space-between;margin:16px 0 8px}.ieeesa-roster-import__progress-label{font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__progress-percent{font-family:Calibri Regular,sans-serif;font-size:14px;font-weight:600;color:#6f7782}.ieeesa-roster-import__progress-bar{--mdc-linear-progress-active-indicator-color: #00629b;--mdc-linear-progress-track-color: #dce6ef;border-radius:6px;height:14px;margin:0 0 8px;overflow:hidden}.ieeesa-roster-import__progress-bar .mdc-linear-progress__bar-inner{border-color:#00629b}.ieeesa-roster-import__summary-cards{display:flex;gap:16px;margin:16px 0}.ieeesa-roster-import__summary-card{flex:1;border:1px solid #e3e5e8;border-radius:6px;padding:14px 16px;background:#fff}.ieeesa-roster-import__summary-card-count{margin:0 0 4px;font-family:Calibri Bold,sans-serif;font-size:28px;font-weight:700;line-height:1.1}.ieeesa-roster-import__summary-card--success .ieeesa-roster-import__summary-card-count{color:#27783a}.ieeesa-roster-import__summary-card--skipped .ieeesa-roster-import__summary-card-count{color:#ba0c2f}.ieeesa-roster-import__summary-card-label{margin:0;font-family:Calibri Regular,sans-serif;font-size:14px;color:#6f7782}.ieeesa-roster-import__errors-card{border:1px solid #ff6467;border-radius:4px;margin:0 0 16px;background-color:#fdecea;overflow:hidden}.ieeesa-roster-import__errors-header{margin:0;padding:8px 14px;font-size:12px;font-weight:700;color:#ba0c2f;background-color:#fcd9dd;border-bottom:1px solid #ff6467}.ieeesa-roster-import__errors-body{max-height:200px;overflow-y:auto;padding:10px 14px}.ieeesa-roster-import__error-row{margin-bottom:8px}.ieeesa-roster-import__error-row:last-child{margin-bottom:0}.ieeesa-roster-import__error-row-title{margin:0;font-size:12px;font-weight:400;color:#ba0c2f;line-height:1.5}.ieeesa-roster-import__actions{display:flex;align-items:center;gap:14px;margin:20px -1.5em 0;padding:16px 1.5em 0;border-top:1px solid #e5e7eb}.ieeesa-roster-import__import-submit-btn{background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn{margin-left:auto;background-color:#00629b;color:#fff;font-size:13px;font-weight:600;border-radius:4px;padding:7px 14px}.ieeesa-roster-import__error-log-btn:hover{background-color:#005587}\n"] }]
|
|
556
573
|
}], ctorParameters: function () { return [{ type: i1.RosterImportApiService }, { type: i2.GroupsService }]; }, propDecorators: { componentData: [{
|
|
557
574
|
type: Input
|
|
558
575
|
}], submitFormResponse: [{
|
|
@@ -560,4 +577,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
560
577
|
}], formCancel: [{
|
|
561
578
|
type: Output
|
|
562
579
|
}] } });
|
|
563
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9zdGVyLWltcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3Jvc3Rlci1pbXBvcnQvcm9zdGVyLWltcG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3Jvc3Rlci1pbXBvcnQvcm9zdGVyLWltcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU9yRCxPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7O0FBc0J6RDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQVNILE1BQU0sT0FBTyxxQkFBcUI7SUFtRGhDO0lBQ0UsMENBQTBDO0lBQ2xDLHNCQUE4QztJQUN0RCwwQ0FBMEM7SUFDbEMsWUFBMkI7UUFGM0IsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUU5QyxpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQWxEckMsOEVBQThFO1FBQzlFLDhEQUE4RDtRQUNwRCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXZELHFFQUFxRTtRQUMzRCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVoRCxh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LENBQUMsRUFBRTtZQUMzRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNqRDthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGVBQWUsQ0FBQyxJQUFVLEVBQUUsUUFBZ0I7UUFDbEQsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQzsrR0FubEJVLHFCQUFxQjttR0FBckIscUJBQXFCLDZNQ2xFbEMsaWlVQWdRQSwramlCRG5NWSxZQUFZLCtQQUFFLGVBQWUsMlFBQUUsb0JBQW9COzs0RkFLbEQscUJBQXFCO2tCQVJqQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixDQUFDLGlCQUcvQyxpQkFBaUIsQ0FBQyxJQUFJO3lJQUs1QixhQUFhO3NCQUFyQixLQUFLO2dCQUlJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFHRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IFN1YmplY3QsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgUm9zdGVySW1wb3J0RXJyb3JSZXBvcnQsXHJcbiAgUm9zdGVySW1wb3J0Sm9iLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy9yb3N0ZXItaW1wb3J0Lm1vZGVsJztcclxuaW1wb3J0IHsgUm9zdGVySW1wb3J0QXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jvc3Rlci1pbXBvcnQtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcm91cHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ3JvdXBzLnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuXHJcbi8qKiBTdGF0ZXMgb2YgdGhlIHJvc3RlciBpbXBvcnQgZmxvdy4gKi9cclxudHlwZSBSb3N0ZXJJbXBvcnRTdGF0ZSA9ICd1cGxvYWQnIHwgJ3Byb2Nlc3NpbmcnIHwgJ3Jlc3VsdCc7XHJcblxyXG4vKipcclxuICogVmlldy1tb2RlbCBmb3IgdGhlIHJlc3VsdCBzY3JlZW4uIFBvcHVsYXRlZCBmcm9tIHRoZSBjb25maXJtZWRcclxuICoge0BsaW5rIFJvc3RlckltcG9ydEpvYn0gcmV0dXJuZWQgYnkgdGhlIGJhY2tlbmQuXHJcbiAqL1xyXG5pbnRlcmZhY2UgUm9zdGVySW1wb3J0UmVzdWx0IHtcclxuICB0b3RhbFJlY29yZHM6IG51bWJlcjtcclxuICBzdWNjZXNzQ291bnQ6IG51bWJlcjtcclxuICBmYWlsdXJlQ291bnQ6IG51bWJlcjtcclxufVxyXG5cclxuLyoqIFJvdyBlcnJvciBzaG93biBvbiB0aGUgcmVzdWx0IHNjcmVlbiAobWFwcGVkIGZyb20gdGhlIEJFIGVycm9yIHJlcG9ydCkuICovXHJcbmludGVyZmFjZSBSb3N0ZXJJbXBvcnRSb3dFcnJvciB7XHJcbiAgcm93TnVtYmVyOiBudW1iZXI7XHJcbiAgZmllbGQ/OiBzdHJpbmc7XHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSb3N0ZXIgSW1wb3J0IGRpYWxvZy5cclxuICpcclxuICogTGV0cyBhbiBhZG1pbiB1cGxvYWQgYSBDU1YvWExTWCByb3N0ZXIgZmlsZSwgc2hvd3MgYSBwcm9jZXNzaW5nIHByb2dyZXNzXHJcbiAqIGJhciwgdGhlbiBhIHJlc3VsdCBzdW1tYXJ5IChhZGRlZCAvIHNraXBwZWQpIHdpdGggcGVyLXJvdyBlcnJvcnMgYW5kIGFuXHJcbiAqIGVycm9yLWxvZyBkb3dubG9hZC5cclxuICpcclxuICogV2lyZWQgdG8gdGhlIHJlYWwgYmFja2VuZCByb3N0ZXItaW1wb3J0IHN0YXRlIG1hY2hpbmVcclxuICogKHNhLXNhYXBwcy1ncm91cHMtYXBpIGBSb3N0ZXJJbXBvcnRDb250cm9sbGVyYCkgdmlhXHJcbiAqIHtAbGluayBSb3N0ZXJJbXBvcnRBcGlTZXJ2aWNlfTogb24gSW1wb3J0IGl0IHJ1bnNcclxuICogdXBsb2FkIOKGkiB2YWxpZGF0ZSDihpIgY29uZmlybSBhbmQgcmVuZGVycyB0aGUgY29uZmlybWVkIGpvYidzIHRlcm1pbmFsIGNvdW50c1xyXG4gKiBhbmQgcGVyLXJvdyBlcnJvcnMuIFNlcnZlci1zaWRlIHZhbGlkYXRpb24gZXJyb3JzICgxMDcyIHVuc3VwcG9ydGVkIGZvcm1hdCxcclxuICogMTA3MyB0b28gbGFyZ2UsIDEwNzQgcm93IGxpbWl0LCAxMDc1IGludmFsaWQgc3RhdHVzKSBhcmUgc3VyZmFjZWQgaW5saW5lLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLXJvc3Rlci1pbXBvcnQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRQcm9ncmVzc0Jhck1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jvc3Rlci1pbXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jvc3Rlci1pbXBvcnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUm9zdGVySW1wb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKiBDYXJyaWVzIHRoZSB7IGdyb3VwSWQsIGdyb3VwTmFtZSB9IHBheWxvYWQgZnJvbSB0aGUgb3BlbmluZyBkaWFsb2cuICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBASW5wdXQoKSBjb21wb25lbnREYXRhOiBhbnk7XHJcblxyXG4gIC8qKiBFbWl0dGVkIGFmdGVyIGFuIGltcG9ydCB0aGF0IGFkZGVkIGF0IGxlYXN0IG9uZSByb3cgKHBhcmVudCByZWZyZXNoZXMpLiAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgQE91dHB1dCgpIHN1Ym1pdEZvcm1SZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAvKiogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIGNhbmNlbHMvY2xvc2VzIHdpdGhvdXQgYSBzdWNjZXNzZnVsIGFkZC4gKi9cclxuICBAT3V0cHV0KCkgZm9ybUNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gY29uc3RhbnRzO1xyXG4gIHNjcmVlblRleHRzID0gdGhpcy5jb25zdGFudHM/LnJvc3RlckltcG9ydDtcclxuXHJcbiAgLyoqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGltcG9ydCBmbG93LiAqL1xyXG4gIGltcG9ydFN0YXRlOiBSb3N0ZXJJbXBvcnRTdGF0ZSA9ICd1cGxvYWQnO1xyXG5cclxuICAvKiogVGhlIHNlbGVjdGVkIGZpbGUuICovXHJcbiAgc2VsZWN0ZWRGaWxlOiBGaWxlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKiBGaWxlIGRyYWctb3ZlciBzdGF0ZS4gKi9cclxuICBpc0RyYWdPdmVyID0gZmFsc2U7XHJcblxyXG4gIC8qKiBUZXJtaW5hbCB1cGxvYWQgcmVzdWx0LiAqL1xyXG4gIHVwbG9hZFJlc3VsdDogUm9zdGVySW1wb3J0UmVzdWx0IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKiBSb3ctbGV2ZWwgZXJyb3JzIGZvciB0aGUgY29tcGxldGVkIGpvYi4gKi9cclxuICBqb2JFcnJvcnM6IFJvc3RlckltcG9ydFJvd0Vycm9yW10gPSBbXTtcclxuXHJcbiAgLyoqIElubGluZSB2YWxpZGF0aW9uIC8gQVBJIGVycm9yIG1lc3NhZ2UuICovXHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5mbyBiYW5uZXIgc2hvd24gd2hlbiB0aGUgZmlsZSBoYXMgaGVhZGVycyBidXQgbm8gZGF0YSByb3dzXHJcbiAgICogKEZpZ21hOiBcIk5vIHJvc3RlciBkYXRhIGZvdW5kLi4uXCIpLlxyXG4gICAqL1xyXG4gIG5vRGF0YU1lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKiogVGhlIGltcG9ydCBqb2IgaWQgcmV0dXJuZWQgYnkgdXBsb2FkIChrZXB0IHNvIGNhbmNlbCBjYW4gY2xlYW4gaXQgdXApLiAqL1xyXG4gIHByaXZhdGUgaW1wb3J0SWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKiogTWF4aW11bSBmaWxlIHNpemUgaW4gYnl0ZXMgKDEwIE1CKSDigJQgbWF0Y2hlcyB0aGUgQkUgMTBNQiBsaW1pdC4gKi9cclxuICByZWFkb25seSBNQVhfRklMRV9TSVpFID0gMTBfNDg1Xzc2MDtcclxuXHJcbiAgLyoqIEFjY2VwdGVkIGZpbGUgZXh0ZW5zaW9ucyAobXVzdCBtYXRjaCB0aGUgQkUgY29udHJhY3Q6IG9ubHkgLmNzdiAvIC54bHN4KS4gKi9cclxuICByZWFkb25seSBBQ0NFUFRFRF9FWFRFTlNJT05TID0gWycuY3N2JywgJy54bHN4J107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIHJvc3RlckltcG9ydEFwaVNlcnZpY2U6IFJvc3RlckltcG9ydEFwaVNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZ3JvdXBTZXJ2aWNlOiBHcm91cHNTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBSZXF1aXJlZCBjb2x1bW4gaGVhZGVycyBmb3IgZGlzcGxheSBhbmQgdGhlIHNhbXBsZSBmaWxlLiBUaGlzIGlzIHRoZSBzdGF0aWNcclxuICAgKiBiYXNlIHNldCBmcm9tIGNvbnN0YW50cyBQTFVTIGFueSB0ZW5hbnQtbGV2ZWwgcmVxdWlyZWQgcHJvZmlsZSBmaWVsZHMgdGhlXHJcbiAgICogaG9zdCBhcHAgY29uZmlndXJlZCAoZS5nLiBwaG9uZSAvIGFkZHJlc3MgLyBlbXBsb3llciksIG1hcHBlZCB0byBmcmllbmRseVxyXG4gICAqIGhlYWRlcnMgYW5kIGRlLWR1cGxpY2F0ZWQgKGNhc2UtaW5zZW5zaXRpdmUpIGFnYWluc3QgdGhlIGJhc2UgY29sdW1ucy5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cclxuICAgKi9cclxuICBnZXQgcmVxdWlyZWRDb2x1bW5zKCk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGJhc2U6IHN0cmluZ1tdID0gdGhpcy5zY3JlZW5UZXh0cz8ucmVxdWlyZWRDb2x1bW5zID8/IFtdO1xyXG4gICAgcmV0dXJuIHRoaXMubWVyZ2VUZW5hbnRDb2x1bW5zKGJhc2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwZW5kcyB0aGUgdGVuYW50LWNvbmZpZ3VyZWQgY29sdW1ucyAoZnJvbSB7QGxpbmsgdGVuYW50RXh0cmFDb2x1bW5zfSkgdG9cclxuICAgKiB0aGUgYmFzZSBjb2x1bW4gaGVhZGVycy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBiYXNlIC0gVGhlIHN0YXRpYyBiYXNlIGNvbHVtbiBoZWFkZXJzLlxyXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfVxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIG1lcmdlVGVuYW50Q29sdW1ucyhiYXNlOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGV4dHJhcyA9IHRoaXMudGVuYW50RXh0cmFDb2x1bW5zKGJhc2UpO1xyXG4gICAgcmV0dXJuIGV4dHJhcy5sZW5ndGggPyBbLi4uYmFzZSwgLi4uZXh0cmFzLm1hcCgoYykgPT4gYy5sYWJlbCldIDogYmFzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc29sdmVzIHRoZSB0ZW5hbnQtY29uZmlndXJlZCByZXF1aXJlZCBwcm9maWxlIGZpZWxkcyBpbnRvIHRoZSBFWFRSQVxyXG4gICAqIGNvbHVtbnMgdG8gYXBwZW5kIGFmdGVyIHRoZSBiYXNlIHNldCDigJQgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggc2hhcmVkIGJ5XHJcbiAgICogYm90aCB0aGUgaGVhZGVyIGxpc3QgKHtAbGluayByZXF1aXJlZENvbHVtbnN9KSBhbmQgdGhlIHNhbXBsZSBmaWxlXHJcbiAgICogKHtAbGluayBkb3dubG9hZFNhbXBsZUZpbGV9KSBzbyB0aGUgdHdvIG5ldmVyIGRyaWZ0IG91dCBvZiBhbGlnbm1lbnQuXHJcbiAgICpcclxuICAgKiBFYWNoIGZpZWxkIGJlY29tZXMgb25lIGNvbHVtbiB3aXRoIGl0cyBmcmllbmRseSBgbGFiZWxgIChrbm93biBrZXlzIHVzZSB0aGVcclxuICAgKiBsYWJlbCBtYXA7IHVua25vd24ga2V5cyBmYWxsIGJhY2sgdG8gYSB0aXRsZS1jYXNlZCBrZXkpIGFuZCBhIGBzYW1wbGVWYWx1ZWBcclxuICAgKiBmb3IgdGhlIHNhbXBsZSByb3cuIEZpZWxkcyB3aG9zZSBsYWJlbCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgYmFzZSBzZXRcclxuICAgKiAoY2FzZS1pbnNlbnNpdGl2ZSkgYXJlIHNraXBwZWQgc28gYSB0ZW5hbnQgZmllbGQgbGlrZSBcImVtcGxveWVyXCIgdGhhdCBpc1xyXG4gICAqIGFscmVhZHkgYSBiYXNlIGNvbHVtbiBpcyBub3QgZHVwbGljYXRlZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBiYXNlIC0gVGhlIHN0YXRpYyBiYXNlIGNvbHVtbiBoZWFkZXJzLlxyXG4gICAqIEByZXR1cm4ge3sgbGFiZWw6IHN0cmluZzsgc2FtcGxlVmFsdWU6IHN0cmluZyB9W119XHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdGVuYW50RXh0cmFDb2x1bW5zKFxyXG4gICAgYmFzZTogc3RyaW5nW11cclxuICApOiB7IGxhYmVsOiBzdHJpbmc7IHNhbXBsZVZhbHVlOiBzdHJpbmcgfVtdIHtcclxuICAgIGNvbnN0IHRlbmFudEZpZWxkcyA9IHRoaXMuZ3JvdXBTZXJ2aWNlPy5nZXRSZXF1aXJlZFByb2ZpbGVGaWVsZHMoKSA/PyBbXTtcclxuICAgIGlmICghdGVuYW50RmllbGRzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBjb25zdCBzYW1wbGVNYXAgPSB0aGlzLnNjcmVlblRleHRzPy50ZW5hbnRGaWVsZFNhbXBsZVZhbHVlcyA/PyB7fTtcclxuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KGJhc2UubWFwKChjb2wpID0+IGNvbC50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICBjb25zdCBleHRyYXM6IHsgbGFiZWw6IHN0cmluZzsgc2FtcGxlVmFsdWU6IHN0cmluZyB9W10gPSBbXTtcclxuICAgIHRlbmFudEZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICBjb25zdCBsYWJlbCA9IHRoaXMudGVuYW50RmllbGRMYWJlbChmaWVsZCk7XHJcbiAgICAgIGlmIChsYWJlbCAmJiAhc2Vlbi5oYXMobGFiZWwudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICBzZWVuLmFkZChsYWJlbC50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICBleHRyYXMucHVzaCh7IGxhYmVsLCBzYW1wbGVWYWx1ZTogc2FtcGxlTWFwW2ZpZWxkXSA/PyAnJyB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZXh0cmFzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFwcyBhIHRlbmFudCBmaWVsZCBrZXkgdG8gaXRzIGRpc3BsYXkgaGVhZGVyLiBLbm93biBrZXlzIHVzZSB0aGUgY29uZmlndXJlZFxyXG4gICAqIGxhYmVsIG1hcDsgdW5rbm93biBrZXlzIGZhbGwgYmFjayB0byBhIHRpdGxlLWNhc2VkIGtleS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGQgLSBUaGUgdGVuYW50IGZpZWxkIGtleSAoZS5nLiAncGhvbmUnKS5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdGVuYW50RmllbGRMYWJlbChmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuc2NyZWVuVGV4dHM/LnRlbmFudEZpZWxkTGFiZWxzID8/IHt9O1xyXG4gICAgaWYgKGxhYmVsc1tmaWVsZF0pIHtcclxuICAgICAgcmV0dXJuIGxhYmVsc1tmaWVsZF07XHJcbiAgICB9XHJcbiAgICAvLyBGYWxsYmFjazogXCJwaG9uZV9udW1iZXJcIiAtPiBcIlBob25lIE51bWJlclwiLlxyXG4gICAgcmV0dXJuIGZpZWxkXHJcbiAgICAgIC5yZXBsYWNlKC9bXy1dKy9nLCAnICcpXHJcbiAgICAgIC5yZXBsYWNlKC9cXGJcXHcvZywgKGNoYXIpID0+IGNoYXIudG9VcHBlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICAvKiogQ29tbWEtc2VwYXJhdGVkIGFjY2VwdGVkIGZpbGUgdHlwZXMgZm9yIHRoZSBpbnB1dCBlbGVtZW50LiAqL1xyXG4gIGdldCBhY2NlcHRlZEZpbGVUeXBlcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuQUNDRVBURURfRVhURU5TSU9OUy5qb2luKCcsJyk7XHJcbiAgfVxyXG5cclxuICAvKiogVGhlIHRhcmdldCBncm91cCBpZCBmcm9tIHRoZSBkaWFsb2cgcGF5bG9hZCAoZmFsbHMgYmFjayB0byBzZWxlY3Rpb24pLiAqL1xyXG4gIHByaXZhdGUgZ2V0IGdyb3VwSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuY29tcG9uZW50RGF0YT8uZ3JvdXBJZCA/P1xyXG4gICAgICAodGhpcy5ncm91cFNlcnZpY2U/LmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwSWQgYXMgc3RyaW5nKSA/P1xyXG4gICAgICAnJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIEFQSSBiYXNlIFVSTCBvbiB0aGUgaW1wb3J0IHNlcnZpY2UuXHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3N0ZXJJbXBvcnRBcGlTZXJ2aWNlLnNldEFwaUJhc2VVcmwodGhpcy5ncm91cFNlcnZpY2U/LmFwaUJhc2VVcmwpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYW5zIHVwIHN1YnNjcmlwdGlvbnMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGEgZmlsZSBzZWxlY3RlZCB2aWEgdGhlIGJyb3dzZSBkaWFsb2cuXHJcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgLSBUaGUgY2hhbmdlIGV2ZW50IGZyb20gdGhlIGhpZGRlbiBmaWxlIGlucHV0LlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBpZiAoIWlucHV0LmZpbGVzIHx8IGlucHV0LmZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXQuZmlsZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLnNob3dTaW5nbGVGaWxlT25seUVycm9yKCk7XHJcbiAgICAgIC8vIFJlc2V0IHNvIHJlLXNlbGVjdGluZyB0aGUgc2FtZSBmaWxlIHRyaWdnZXJzIGNoYW5nZSBhZ2Fpbi5cclxuICAgICAgaW5wdXQudmFsdWUgPSAnJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9jZXNzRmlsZShpbnB1dC5maWxlc1swXSk7XHJcbiAgICAvLyBSZXNldCB0aGUgbmF0aXZlIGlucHV0IHZhbHVlIHNvIHBpY2tpbmcgdGhlIHNhbWUgZmlsZSBhZnRlciBhbiBlcnJvclxyXG4gICAgLy8gc3RpbGwgZmlyZXMgdGhlIGNoYW5nZSBldmVudCAob3RoZXJ3aXNlIHRoZSBicm93c2VyIHNraXBzIGl0IGJlY2F1c2VcclxuICAgIC8vIHRoZSB2YWx1ZSBoYXNuJ3QgY2hhbmdlZCkuXHJcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBhIGZpbGUgZHJvcHBlZCBvbnRvIHRoZSBkcm9wem9uZS5cclxuICAgKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnQgLSBUaGUgZHJvcCBldmVudC5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgb25GaWxlRHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmlzRHJhZ092ZXIgPSBmYWxzZTtcclxuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcclxuICAgIGlmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChmaWxlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRoaXMuc2hvd1NpbmdsZUZpbGVPbmx5RXJyb3IoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9jZXNzRmlsZShmaWxlc1swXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGRyYWctb3ZlciBvbiB0aGUgZHJvcHpvbmUuXHJcbiAgICogQHBhcmFtIHtEcmFnRXZlbnR9IGV2ZW50IC0gVGhlIGRyYWdvdmVyIGV2ZW50LlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuaXNEcmFnT3ZlciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGRyYWctbGVhdmUgb24gdGhlIGRyb3B6b25lLlxyXG4gICAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBldmVudCAtIFRoZSBkcmFnbGVhdmUgZXZlbnQuXHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuaXNEcmFnT3ZlciA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIHRoZSBmaWxlIHR5cGUgYW5kIHNpemUsIHRoZW4gZWl0aGVyIHNldHMgaXQgb3Igc2hvd3MgYW4gZXJyb3IuXHJcbiAgICogQHBhcmFtIHtGaWxlfSBmaWxlIC0gVGhlIGNhbmRpZGF0ZSBmaWxlLlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBwcm9jZXNzRmlsZShmaWxlOiBGaWxlKTogdm9pZCB7XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IG51bGw7XHJcbiAgICB0aGlzLm5vRGF0YU1lc3NhZ2UgPSBudWxsO1xyXG4gICAgdGhpcy51cGxvYWRSZXN1bHQgPSBudWxsO1xyXG4gICAgdGhpcy5pbXBvcnRJZCA9IG51bGw7XHJcbiAgICAvLyBDbGVhciBhbnkgcHJldmlvdXNseSBzZWxlY3RlZCAodmFsaWQpIGZpbGUgc28gYW4gaW52YWxpZCBuZXcgc2VsZWN0aW9uXHJcbiAgICAvLyBjYW4ndCBsZWF2ZSB0aGUgSW1wb3J0IGJ1dHRvbiBlbmFibGVkIGZvciBhIHN0YWxlIGZpbGUuXHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XHJcblxyXG4gICAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IGlzVmFsaWRFeHRlbnNpb24gPSB0aGlzLkFDQ0VQVEVEX0VYVEVOU0lPTlMuc29tZSgoZXh0KSA9PlxyXG4gICAgICBmaWxlTmFtZS5lbmRzV2l0aChleHQpXHJcbiAgICApO1xyXG4gICAgaWYgKCFpc1ZhbGlkRXh0ZW5zaW9uKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICB0aGlzLnNjcmVlblRleHRzPy52YWxpZGF0aW9uPy51bnN1cHBvcnRlZFR5cGUgPz9cclxuICAgICAgICAnSW5jb3JyZWN0IGZpbGUgdHlwZS4gUGxlYXNlIHVwbG9hZCBhIHZhbGlkIC5jc3Ygb3IgLnhsc3ggZmlsZS4nO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpbGUuc2l6ZSA9PT0gMCkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgdGhpcy5zY3JlZW5UZXh0cz8udmFsaWRhdGlvbj8uZW1wdHlGaWxlID8/XHJcbiAgICAgICAgJ1RoZSBzZWxlY3RlZCBmaWxlIGlzIGVtcHR5LiBQbGVhc2UgdXBsb2FkIGEgZmlsZSB3aXRoIHJvc3RlciByZWNvcmRzLic7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmlsZS5zaXplID4gdGhpcy5NQVhfRklMRV9TSVpFKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICB0aGlzLnNjcmVlblRleHRzPy52YWxpZGF0aW9uPy5maWxlVG9vTGFyZ2UgPz9cclxuICAgICAgICAnRmlsZSBzaXplIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCBzaXplIG9mIDEwTUIuJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gZmlsZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3dzIHRoZSBzaW5nbGUtZmlsZS1vbmx5IHZhbGlkYXRpb24gbWVzc2FnZS5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgc2hvd1NpbmdsZUZpbGVPbmx5RXJyb3IoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgIHRoaXMuc2NyZWVuVGV4dHM/LnZhbGlkYXRpb24/LnNpbmdsZUZpbGVPbmx5ID8/XHJcbiAgICAgICdQbGVhc2UgdXBsb2FkIGEgc2luZ2xlIGZpbGUgYXQgYSB0aW1lLic7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZmlsZSBhbmQgcmVzZXRzIHRvIHRoZSB1cGxvYWQgc3RhdGUuXHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uUmVtb3ZlRmlsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gbnVsbDtcclxuICAgIHRoaXMubm9EYXRhTWVzc2FnZSA9IG51bGw7XHJcbiAgICB0aGlzLnVwbG9hZFJlc3VsdCA9IG51bGw7XHJcbiAgICB0aGlzLmltcG9ydElkID0gbnVsbDtcclxuICAgIHRoaXMuaW1wb3J0U3RhdGUgPSAndXBsb2FkJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgZnJvbSB0aGUgcmVzdWx0IHNjcmVlbiB0byBhIGNsZWFuIHVwbG9hZCBzdGF0ZSBzbyB0aGUgdXNlciBjYW5cclxuICAgKiB1cGxvYWQgYSBjb3JyZWN0ZWQgZmlsZSAoZS5nLiBhZnRlciBkb3dubG9hZGluZyB0aGUgZXJyb3IgbG9nKSB3aXRob3V0XHJcbiAgICogY2xvc2luZyBhbmQgcmVvcGVuaW5nIHRoZSBpbXBvcnQgZGlhbG9nLiBDbGVhcnMgdGhlIHByZXZpb3VzIGZpbGUsXHJcbiAgICogcmVzdWx0LCBlcnJvcnMgYW5kIGpvYiBpZC5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgb25VcGxvYWROZXdGaWxlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBudWxsO1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBudWxsO1xyXG4gICAgdGhpcy5ub0RhdGFNZXNzYWdlID0gbnVsbDtcclxuICAgIHRoaXMudXBsb2FkUmVzdWx0ID0gbnVsbDtcclxuICAgIHRoaXMuam9iRXJyb3JzID0gW107XHJcbiAgICB0aGlzLmltcG9ydElkID0gbnVsbDtcclxuICAgIHRoaXMuaW1wb3J0U3RhdGUgPSAndXBsb2FkJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJ1bnMgdGhlIHJlYWwgaW1wb3J0OiB1cGxvYWQg4oaSIHZhbGlkYXRlIOKGkiBjb25maXJtLiBUaGUgcHJvZ3Jlc3MgYmFyIGlzXHJcbiAgICogc2hvd24gaW4gaW5kZXRlcm1pbmF0ZSBtb2RlIHdoaWxlIHRoZSBjaGFpbiBpcyBpbiBmbGlnaHQsIHRoZW4gdGhlXHJcbiAgICogY29uZmlybWVkIGpvYidzIHRlcm1pbmFsIGNvdW50cyArIHBlci1yb3cgZXJyb3JzIGRyaXZlIHRoZSByZXN1bHQgc2NyZWVuLlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBvbkltcG9ydCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmdyb3VwSWQpIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgIHRoaXMuc2NyZWVuVGV4dHM/LnZhbGlkYXRpb24/LnVwbG9hZEZhaWxlZCA/P1xyXG4gICAgICAgICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBpbXBvcnRpbmcgdGhlIHJvc3Rlci4gUGxlYXNlIHRyeSBhZ2Fpbi4nO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IG51bGw7XHJcbiAgICB0aGlzLm5vRGF0YU1lc3NhZ2UgPSBudWxsO1xyXG4gICAgdGhpcy51cGxvYWRSZXN1bHQgPSBudWxsO1xyXG4gICAgdGhpcy5qb2JFcnJvcnMgPSBbXTtcclxuICAgIHRoaXMuaW1wb3J0SWQgPSBudWxsO1xyXG4gICAgdGhpcy5pbXBvcnRTdGF0ZSA9ICdwcm9jZXNzaW5nJztcclxuXHJcbiAgICB0aGlzLnJvc3RlckltcG9ydEFwaVNlcnZpY2VcclxuICAgICAgLnVwbG9hZEltcG9ydEZpbGUodGhpcy5zZWxlY3RlZEZpbGUsIHRoaXMuZ3JvdXBJZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKChqb2I6IFJvc3RlckltcG9ydEpvYikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pbXBvcnRJZCA9IGpvYj8uaW1wb3J0SWQgPz8gbnVsbDtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnJvc3RlckltcG9ydEFwaVNlcnZpY2UudmFsaWRhdGVJbXBvcnRKb2IoXHJcbiAgICAgICAgICAgIHRoaXMuaW1wb3J0SWQgYXMgc3RyaW5nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PlxyXG4gICAgICAgICAgdGhpcy5yb3N0ZXJJbXBvcnRBcGlTZXJ2aWNlLmNvbmZpcm1JbXBvcnRKb2IodGhpcy5pbXBvcnRJZCBhcyBzdHJpbmcpXHJcbiAgICAgICAgKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoY29uZmlybWVkSm9iOiBSb3N0ZXJJbXBvcnRKb2IpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmluYWxpemVSZXN1bHQoY29uZmlybWVkSm9iKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUltcG9ydEVycm9yKGVycm9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcHMgYSBmYWlsZWQgaW1wb3J0IGNhbGwgdG8gYW4gaW5saW5lIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybnMgdGhlIFVJIHRvXHJcbiAgICogdGhlIHVwbG9hZCBzdGF0ZSBzbyB0aGUgdXNlciBjYW4gcmV0cnkuIEtub3duIEJFIGVycm9yIGNvZGVzICgxMDcy4oCTMTA3NSlcclxuICAgKiBhcmUgbWFwcGVkIHZpYSBjb25zdGFudHM7IGFueXRoaW5nIGVsc2UgdXNlcyB0aGUgZ2VuZXJpYyBtZXNzYWdlLlxyXG4gICAqIEBwYXJhbSB7Kn0gZXJyb3IgLSBUaGUgSHR0cEVycm9yUmVzcG9uc2UuXHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgcHJpdmF0ZSBoYW5kbGVJbXBvcnRFcnJvcihlcnJvcjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmltcG9ydFN0YXRlID0gJ3VwbG9hZCc7XHJcbiAgICAvLyBSZXNldCB0aGUgc2VsZWN0ZWQgZmlsZSBzbyB0aGUgdXNlciBjYW4gcGljayBhIG5ldyAob3IgdGhlIHNhbWUpIGZpbGVcclxuICAgIC8vIGFmdGVyIGFuIGVycm9yLiBXaXRob3V0IHRoaXMsIHNlbGVjdGVkRmlsZSBzdGF5cyBzZXQgYW5kIHRoZSBkcm9wem9uZVxyXG4gICAgLy8gc2hvd3MgdGhlIG9sZCBmaWxlbmFtZTsgd29yc2UsIHJlLXNlbGVjdGluZyB0aGUgc2FtZSBmaWxlIGRvZXNuJ3QgZmlyZVxyXG4gICAgLy8gdGhlIGlucHV0J3MgY2hhbmdlIGV2ZW50ICh0aGUgdmFsdWUgaGFzbid0IGNoYW5nZWQpLCBsZWF2aW5nIHRoZSB1c2VyXHJcbiAgICAvLyBzdHVjay5cclxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcclxuXHJcbiAgICAvLyBCRSBlcnJvciBjb2RlcyB0YWtlIHByaW9yaXR5IHdoZW4gcHJlc2VudCAoZS5nLiAxMDcxIG5vIHBlcm1pc3Npb24sIDEwNzJcclxuICAgIC8vIGZvcm1hdCwgMTA3MyB0b28gbGFyZ2UsIDEwNzQgcm93IGxpbWl0LCAxMDc1IGludmFsaWQgc3RhdHVzKS5cclxuICAgIGNvbnN0IGVycm9yQ29kZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gZXJyb3I/LmVycm9yPy5ib2R5Py5lcnJvckNvZGVzO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyb3JDb2RlcykgJiYgZXJyb3JDb2Rlcy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgY29kZSA9IGVycm9yQ29kZXNbMF0gYXMga2V5b2YgdHlwZW9mIHRoaXMuY29uc3RhbnRzLmVycm9ycztcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgIHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/Lltjb2RlXSA/P1xyXG4gICAgICAgIHRoaXMuc2NyZWVuVGV4dHM/LnZhbGlkYXRpb24/LnVwbG9hZEZhaWxlZCA/P1xyXG4gICAgICAgICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBpbXBvcnRpbmcgdGhlIHJvc3Rlci4gUGxlYXNlIHRyeSBhZ2Fpbi4nO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQSA0MDMgd2l0aCBubyBlcnJvci1jb2RlIGJvZHkgY29tZXMgZnJvbSB0aGUgZW5kcG9pbnQncyBAUHJlQXV0aG9yaXplXHJcbiAgICAvLyAodGhlIHVzZXIgbGFja3MgTWFuYWdlIEdyb3VwIE1lbWJlciAvIE1hbmFnZSBBbGwgUm9zdGVycyBmb3IgdGhpcyBncm91cCkuXHJcbiAgICAvLyBTaG93IHRoZSBwZXJtaXNzaW9uIG1lc3NhZ2Ug4oCUIHJldHJ5aW5nIHdpbGwgbm90IGhlbHAuXHJcbiAgICBjb25zdCBzdGF0dXMgPSBlcnJvcj8uc3RhdHVzID8/IGVycm9yPy5lcnJvcj8uc3RhdHVzO1xyXG4gICAgaWYgKHN0YXR1cyA9PT0gNDAzKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICB0aGlzLnNjcmVlblRleHRzPy52YWxpZGF0aW9uPy5mb3JiaWRkZW4gPz9cclxuICAgICAgICAnWW91IGRvIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gaW1wb3J0IGEgcm9zdGVyIGZvciB0aGlzIGdyb3VwLic7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgIHRoaXMuc2NyZWVuVGV4dHM/LnZhbGlkYXRpb24/LnVwbG9hZEZhaWxlZCA/P1xyXG4gICAgICAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaW1wb3J0aW5nIHRoZSByb3N0ZXIuIFBsZWFzZSB0cnkgYWdhaW4uJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlcyB0aGUgdGVybWluYWwgcmVzdWx0IGFuZCBtb3ZlcyB0byB0aGUgcmVzdWx0IHN0YXRlLiBXaGVuIHRoZSBqb2IgaGFkXHJcbiAgICogbm8gZGF0YSByb3dzLCBzaG93cyB0aGUgXCJubyByb3N0ZXIgZGF0YVwiIGluZm8gYmFubmVyIGluc3RlYWQgb2YgdGhlIHN1bW1hcnlcclxuICAgKiBjYXJkcy5cclxuICAgKiBAcGFyYW0ge1Jvc3RlckltcG9ydEpvYn0gam9iIC0gVGhlIGNvbmZpcm1lZCBpbXBvcnQgam9iLlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBmaW5hbGl6ZVJlc3VsdChqb2I6IFJvc3RlckltcG9ydEpvYik6IHZvaWQge1xyXG4gICAgY29uc3QgdG90YWxSZWNvcmRzID0gam9iPy50b3RhbFJvd3MgPz8gMDtcclxuICAgIGNvbnN0IHN1Y2Nlc3NDb3VudCA9IGpvYj8uc3VjY2Vzc1Jvd3MgPz8gMDtcclxuICAgIGNvbnN0IGZhaWx1cmVDb3VudCA9IGpvYj8uZmFpbGVkUm93cyA/PyAwO1xyXG5cclxuICAgIHRoaXMudXBsb2FkUmVzdWx0ID0geyB0b3RhbFJlY29yZHMsIHN1Y2Nlc3NDb3VudCwgZmFpbHVyZUNvdW50IH07XHJcbiAgICB0aGlzLmpvYkVycm9ycyA9IHRoaXMucGFyc2VFcnJvclJlcG9ydChqb2I/LmVycm9yUmVwb3J0KTtcclxuICAgIHRoaXMuaW1wb3J0U3RhdGUgPSAncmVzdWx0JztcclxuXHJcbiAgICBpZiAodG90YWxSZWNvcmRzID09PSAwKSB7XHJcbiAgICAgIHRoaXMubm9EYXRhTWVzc2FnZSA9XHJcbiAgICAgICAgdGhpcy5zY3JlZW5UZXh0cz8udmFsaWRhdGlvbj8ubm9EYXRhUmVjb3JkcyA/P1xyXG4gICAgICAgICdObyByb3N0ZXIgZGF0YSBmb3VuZC4gVGhlIHNlbGVjdGVkIGZpbGUgY29udGFpbnMgaGVhZGVycyBidXQgbm8gcm9zdGVyIHJlY29yZHMuJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5vcm1hbGl6ZXMgdGhlIEJFIGBlcnJvcl9yZXBvcnRgIGludG8gcm93LWVycm9yIHZpZXcgbW9kZWxzLlxyXG4gICAqXHJcbiAgICogVGhlIEJFIHdyYXBzIHRoZSBwZXItcm93IGVudHJpZXMgaW4gYSBgeyByb3dzOiBbIHsgcm93LCBmaWVsZCwgbWVzc2FnZSB9IF0gfWBcclxuICAgKiBkb2N1bWVudCwgYnV0IHRoYXQgdmFsdWUgaGFzIGJlZW4gb2JzZXJ2ZWQgdG8gYXJyaXZlIGluIE1VTFRJUExFIHNoYXBlczpcclxuICAgKiAgLSBhIHBhcnNlZCBvYmplY3QgYHsgcm93czogWy4uLl0gfWAgKGNvbmZpcm0gcmVzcG9uc2Ug4oCUIHRoZSBjb21tb24gY2FzZSksXHJcbiAgICogIC0gYSByYXcgSlNPTiBzdHJpbmcgb2YgdGhlIHNhbWUgb2JqZWN0IChKU09OQiBwYXNzdGhyb3VnaCksIG9yXHJcbiAgICogIC0gYSBiYXJlIGFycmF5IGBbIHsgcm93LCBmaWVsZCwgbWVzc2FnZSB9IF1gLlxyXG4gICAqIFRoaXMgaGFuZGxlcyBhbGwgdGhyZWUgKGFuZCBgbnVsbGApIHNvIHRoZSBlcnJvciBsb2cgcmVuZGVycyByZWdhcmRsZXNzIG9mXHJcbiAgICogaG93IHRoZSBmaWVsZCBpcyBzZXJpYWxpemVkLlxyXG4gICAqIEBwYXJhbSB7Kn0gZXJyb3JSZXBvcnQgLSBUaGUgQkUgZXJyb3JfcmVwb3J0IChvYmplY3QsIHN0cmluZywgYXJyYXksIG9yIG51bGwpLlxyXG4gICAqIEByZXR1cm4ge1Jvc3RlckltcG9ydFJvd0Vycm9yW119XHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgcHJpdmF0ZSBwYXJzZUVycm9yUmVwb3J0KGVycm9yUmVwb3J0PzogYW55KTogUm9zdGVySW1wb3J0Um93RXJyb3JbXSB7XHJcbiAgICBpZiAoIWVycm9yUmVwb3J0KSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIC8vIElmIGl0J3MgYSBzdHJpbmcsIHBhcnNlIGl0IGZpcnN0OyBvbiBwYXJzZSBmYWlsdXJlLCBubyByb3cgZXJyb3JzLlxyXG4gICAgbGV0IHZhbHVlOiB1bmtub3duID0gZXJyb3JSZXBvcnQ7XHJcbiAgICBpZiAodHlwZW9mIGVycm9yUmVwb3J0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHZhbHVlID0gSlNPTi5wYXJzZShlcnJvclJlcG9ydCk7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gQWNjZXB0IGVpdGhlciBhIGJhcmUgYXJyYXkgb3IgYSB7IHJvd3M6IFsuLi5dIH0gd3JhcHBlciBvYmplY3QuXHJcbiAgICBjb25zdCBlbnRyaWVzOiBSb3N0ZXJJbXBvcnRFcnJvclJlcG9ydFtdID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcclxuICAgICAgPyAodmFsdWUgYXMgUm9zdGVySW1wb3J0RXJyb3JSZXBvcnRbXSlcclxuICAgICAgOiAoKHZhbHVlIGFzIHsgcm93cz86IFJvc3RlckltcG9ydEVycm9yUmVwb3J0W10gfSk/LnJvd3MgPz8gW10pO1xyXG4gICAgcmV0dXJuIGVudHJpZXMubWFwKChlbnRyeSkgPT4gKHtcclxuICAgICAgcm93TnVtYmVyOiBlbnRyeT8ucm93LFxyXG4gICAgICBmaWVsZDogZW50cnk/LmZpZWxkLFxyXG4gICAgICBlcnJvck1lc3NhZ2U6IGVudHJ5Py5tZXNzYWdlLFxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgcmVzdWx0IHN0YXRlIHNob3VsZCBzaG93IHRoZSBzdW1tYXJ5IGNhcmRzIChhZGRlZCAvIHNraXBwZWQpLlxyXG4gICAqIEhpZGRlbiBmb3IgdGhlIFwibm8gZGF0YSByZWNvcmRzXCIgY2FzZS5cclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBnZXQgc2hvd1N1bW1hcnlDYXJkcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMudXBsb2FkUmVzdWx0ICYmIHRoaXMudXBsb2FkUmVzdWx0LnRvdGFsUmVjb3JkcyA+IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGV2ZXJ5IHByb2Nlc3NlZCByb3cgd2FzIHNraXBwZWQgKGRyaXZlcyB0aGUgXCJBbGwgUm93cyBhcmUgc2tpcHBlZFwiXHJcbiAgICogaGVhZGVyIG9uIHRoZSBlcnJvcnMgY2FyZCkuXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0IGFsbFJvd3NTa2lwcGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgISF0aGlzLnVwbG9hZFJlc3VsdCAmJlxyXG4gICAgICB0aGlzLnVwbG9hZFJlc3VsdC50b3RhbFJlY29yZHMgPiAwICYmXHJcbiAgICAgIHRoaXMudXBsb2FkUmVzdWx0LnN1Y2Nlc3NDb3VudCA9PT0gMFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkcyBhIGNsaWVudC1zaWRlIENTViBzYW1wbGUgZmlsZSBmcm9tIHRoZSByZXF1aXJlZCBjb2x1bW5zIGFuZCB0cmlnZ2Vyc1xyXG4gICAqIGEgYnJvd3NlciBkb3dubG9hZC4gKENsaWVudC1zaWRlIGdlbmVyYXRpb24gdW50aWwgdGhlIHRlbXBsYXRlIEFQSSBleGlzdHMuKVxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBkb3dubG9hZFNhbXBsZUZpbGUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBoZWFkZXJMaW5lID0gdGhpcy5yZXF1aXJlZENvbHVtbnNcclxuICAgICAgLm1hcCgoY29sKSA9PiB0aGlzLnRvQ3N2Q2VsbChjb2wpKVxyXG4gICAgICAuam9pbignLCcpO1xyXG5cclxuICAgIC8vIFNhbXBsZSBkYXRhIHJvd3Mgc28gdGhlIGRvd25sb2FkZWQgZmlsZSBzaG93cyB0aGUgZXhwZWN0ZWQgZm9ybWF0LCBub3RcclxuICAgIC8vIGp1c3QgdGhlIGNvbHVtbiBoZWFkZXJzLiBUaGUgYmFzZSByb3cgdmFsdWVzIGNvbWUgZnJvbSBjb25zdGFudHM7IHNhbXBsZVxyXG4gICAgLy8gdmFsdWVzIGZvciBhbnkgdGVuYW50LWNvbmZpZ3VyZWQgY29sdW1ucyBhcmUgYXBwZW5kZWQgKGZyb20gdGhlIFNBTUVcclxuICAgIC8vIHNvdXJjZSB0aGF0IGJ1aWxkcyB0aGUgaGVhZGVycykgc28gZXZlcnkgcm93IGxpbmVzIHVwIHdpdGggdGhlXHJcbiAgICAvLyAoYmFzZSArIHRlbmFudCkgaGVhZGVyIHNldC5cclxuICAgIGNvbnN0IGJhc2U6IHN0cmluZ1tdID0gdGhpcy5zY3JlZW5UZXh0cz8ucmVxdWlyZWRDb2x1bW5zID8/IFtdO1xyXG4gICAgY29uc3QgYmFzZVNhbXBsZVJvd3M6IHN0cmluZ1tdW10gPSB0aGlzLnNjcmVlblRleHRzPy5zYW1wbGVSb3dzID8/IFtdO1xyXG4gICAgY29uc3QgdGVuYW50U2FtcGxlQ2VsbHMgPSB0aGlzLnRlbmFudEV4dHJhQ29sdW1ucyhiYXNlKS5tYXAoXHJcbiAgICAgIChjb2wpID0+IGNvbC5zYW1wbGVWYWx1ZVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGRhdGFMaW5lcyA9IGJhc2VTYW1wbGVSb3dzLm1hcCgocm93KSA9PlxyXG4gICAgICBbLi4ucm93LCAuLi50ZW5hbnRTYW1wbGVDZWxsc11cclxuICAgICAgICAubWFwKChjZWxsKSA9PiB0aGlzLnRvQ3N2Q2VsbChjZWxsKSlcclxuICAgICAgICAuam9pbignLCcpXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBbaGVhZGVyTGluZSwgLi4uZGF0YUxpbmVzXS5qb2luKCdcXHJcXG4nKSArICdcXHJcXG4nO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjc3ZDb250ZW50XSwge1xyXG4gICAgICB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnLFxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9IHRoaXMuc2NyZWVuVGV4dHM/LnNhbXBsZUZpbGVOYW1lID8/ICdSb3N0ZXJfU2FtcGxlLmNzdic7XHJcbiAgICB0aGlzLnRyaWdnZXJEb3dubG9hZChibG9iLCBmaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCdWlsZHMgYSBDU1YgZnJvbSB0aGUgcm93LWxldmVsIGVycm9ycyBhbmQgdHJpZ2dlcnMgYSBicm93c2VyIGRvd25sb2FkIHNvXHJcbiAgICogdGhlIHVzZXIgY2FuIGNvcnJlY3QgYW5kIHJlLXVwbG9hZC5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZG93bmxvYWRFcnJvckxvZygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5qb2JFcnJvcnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGhlYWRlcnM6IHN0cmluZ1tdID0gdGhpcy5zY3JlZW5UZXh0cz8uZXJyb3JMb2c/LmhlYWRlcnMgPz8gW1xyXG4gICAgICAnUm93JyxcclxuICAgICAgJ0ZpZWxkJyxcclxuICAgICAgJ0Vycm9yJyxcclxuICAgIF07XHJcbiAgICBjb25zdCByb3dzID0gdGhpcy5qb2JFcnJvcnMubWFwKChyb3dFcnIpID0+XHJcbiAgICAgIFtyb3dFcnIucm93TnVtYmVyLCByb3dFcnIuZmllbGQsIHJvd0Vyci5lcnJvck1lc3NhZ2VdXHJcbiAgICAgICAgLm1hcCgodmFsdWUpID0+IHRoaXMudG9Dc3ZDZWxsKHZhbHVlKSlcclxuICAgICAgICAuam9pbignLCcpXHJcbiAgICApO1xyXG4gICAgY29uc3QgY3N2Q29udGVudCA9IFtcclxuICAgICAgaGVhZGVycy5tYXAoKGhlYWRlcikgPT4gdGhpcy50b0NzdkNlbGwoaGVhZGVyKSkuam9pbignLCcpLFxyXG4gICAgICAuLi5yb3dzLFxyXG4gICAgXS5qb2luKCdcXHJcXG4nKTtcclxuICAgIGNvbnN0IGZpbGVOYW1lID1cclxuICAgICAgdGhpcy5zY3JlZW5UZXh0cz8uZXJyb3JMb2c/LmZpbGVOYW1lID8/ICdSb3N0ZXJfSW1wb3J0X0Vycm9yX0xvZy5jc3YnO1xyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjc3ZDb250ZW50XSwgeyB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnIH0pO1xyXG4gICAgdGhpcy50cmlnZ2VyRG93bmxvYWQoYmxvYiwgZmlsZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXNjYXBlcyBhIHZhbHVlIGZvciBzYWZlIGluY2x1c2lvbiBpbiBhIENTViBjZWxsLlxyXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpfSB2YWx1ZSAtIFRoZSByYXcgY2VsbCB2YWx1ZS5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IC0gdGhlIENTVi1zYWZlIGNlbGwgc3RyaW5nLlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICB0b0NzdkNlbGwodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmF3ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTtcclxuICAgIGlmICgvW1wiLFxcclxcbl0vLnRlc3QocmF3KSkge1xyXG4gICAgICByZXR1cm4gYFwiJHtyYXcucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmF3O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2VzIHRoZSBkaWFsb2cuIEVtaXRzIHN1Ym1pdEZvcm1SZXNwb25zZSB3aGVuIGF0IGxlYXN0IG9uZSByb3cgd2FzIGFkZGVkXHJcbiAgICogc28gdGhlIHBhcmVudCByZWZyZXNoZXM7IG90aGVyd2lzZSBlbWl0cyBmb3JtQ2FuY2VsLlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBvbkNhbmNlbCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnVwbG9hZFJlc3VsdCAmJiB0aGlzLnVwbG9hZFJlc3VsdC5zdWNjZXNzQ291bnQgPiAwKSB7XHJcbiAgICAgIHRoaXMuc3VibWl0Rm9ybVJlc3BvbnNlLmVtaXQodGhpcy51cGxvYWRSZXN1bHQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtQ2FuY2VsLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyaWdnZXJzIGEgYnJvd3NlciBkb3dubG9hZCBmb3IgYSBnZW5lcmF0ZWQgYmxvYi5cclxuICAgKiBAcGFyYW0ge0Jsb2J9IGJsb2IgLSBUaGUgZmlsZSBjb250ZW50LlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZSAtIFRoZSBzdWdnZXN0ZWQgZmlsZW5hbWUuXHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdHJpZ2dlckRvd25sb2FkKGJsb2I6IEJsb2IsIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgbGluay5ocmVmID0gdXJsO1xyXG4gICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRcIj5cclxuICA8IS0tIFN1Yi1oZWFkaW5nIGJhbmQ6IFwiQnVsayBJbXBvcnQgUGFydGljaXBhbnRzXCIgb24gdGhlIGxlZnQsIEltcG9ydCBSb3N0ZXJcclxuICAgICAgIGFjdGlvbiBvbiB0aGUgcmlnaHQgKGFwcGVhcnMgb25jZSBhIGZpbGUgaXMgc2VsZWN0ZWQpIOKAlCBtYXRjaGVzIHRoZSBGaWdtYS5cclxuICAgICAgIFRoZSBcIuKGkCBCYWNrIHRvIFJvc3RlcnMgLyBJbXBvcnQgUm9zdGVyXCIgdGl0bGUgcm93ICsgWCBhcmUgcmVuZGVyZWQgYnkgdGhlXHJcbiAgICAgICBzaGFyZWQgTW9kYWxDb21wb25lbnQgYWJvdmUgdGhpcy4gLS0+XHJcbiAgPGRpdiBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19zdWJoZWFkZXJcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX3N1YmhlYWRlci10aXRsZVwiPlxyXG4gICAgICB7eyBzY3JlZW5UZXh0cz8uc3ViSGVhZGluZyA/PyAnQnVsayBJbXBvcnQgUGFydGljaXBhbnRzJyB9fVxyXG4gICAgPC9zcGFuPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cInNlbGVjdGVkRmlsZSAmJiBpbXBvcnRTdGF0ZSA9PT0gJ3VwbG9hZCdcIlxyXG4gICAgICBtYXQtYnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjbGFzcz1cIm1hdC10ZXJ0aWFyeS1idXR0b24gaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2ltcG9ydC1idG5cIlxyXG4gICAgICAoY2xpY2spPVwib25JbXBvcnQoKVwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic2NyZWVuVGV4dHM/LmJ1dHRvbnM/LmltcG9ydCA/PyAnSW1wb3J0IFJvc3RlcidcIlxyXG4gICAgPlxyXG4gICAgICA8c3ZnIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2ltcG9ydC1idG4taWNvblwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgIDx1c2UgeGxpbms6aHJlZj1cImFzc2V0cy9pbWFnZXMvc3ByaXRlcy9zcHJpdGVzLnN2ZyNpY29uLWltcG9ydFwiPjwvdXNlPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAge3sgc2NyZWVuVGV4dHM/LmJ1dHRvbnM/LmltcG9ydCA/PyAnSW1wb3J0IFJvc3RlcicgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIFJlcXVpcmVkIENvbHVtbnMgSW5mbyAtLT5cclxuICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2NvbHVtbnMtY2FyZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19jb2x1bW5zLWNvbnRlbnRcIj5cclxuICAgICAgPHAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fY29sdW1ucy10aXRsZVwiPlxyXG4gICAgICAgIHt7IHNjcmVlblRleHRzPy5yZXF1aXJlZENvbHVtbnNUaXRsZSA/PyAnUmVxdWlyZWQgY29sdW1ucycgfX1cclxuICAgICAgPC9wPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2NvbHVtbnMtY2hpcHNcIj5cclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiByZXF1aXJlZENvbHVtbnNcIlxyXG4gICAgICAgICAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fY2hpcFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgY29sIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19zYW1wbGUtd3JhcHBlclwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwibWF0LXRlcnRpYXJ5LWJ1dHRvbiBpZWVlc2Etcm9zdGVyLWltcG9ydF9fZG93bmxvYWQtYnRuXCJcclxuICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRTYW1wbGVGaWxlKClcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic2NyZWVuVGV4dHM/LmFyaWFMYWJlbD8uZG93bmxvYWRTYW1wbGUgPz8gJ0Rvd25sb2FkIFNhbXBsZSBGaWxlJ1wiXHJcbiAgICAgID5cclxuICAgICAgICA8c3ZnXHJcbiAgICAgICAgICBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19kb3dubG9hZC1idG4taWNvblwiXHJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cImFzc2V0cy9pbWFnZXMvc3ByaXRlcy9zcHJpdGVzLnN2ZyNpY29uLWZpbGUtZG9jXCI+PC91c2U+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgICAge3sgc2NyZWVuVGV4dHM/LmRvd25sb2FkU2FtcGxlTGFiZWwgPz8gJ0Rvd25sb2FkIFNhbXBsZSBGaWxlJyB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8cCBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X191cGxvYWQtbGFiZWxcIj5cclxuICAgIHt7IHNjcmVlblRleHRzPy51cGxvYWRMYWJlbCA/PyAnVXBsb2FkIHlvdXIgZmlsZScgfX1cclxuICA8L3A+XHJcblxyXG4gIDwhLS0gVXBsb2FkIFN0YXRlIC0tPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbXBvcnRTdGF0ZSA9PT0gJ3VwbG9hZCdcIj5cclxuICAgIDwhLS0gSGlkZGVuIGZpbGUgaW5wdXQgLS0+XHJcbiAgICA8aW5wdXRcclxuICAgICAgI2ZpbGVJbnB1dFxyXG4gICAgICB0eXBlPVwiZmlsZVwiXHJcbiAgICAgIFthY2NlcHRdPVwiYWNjZXB0ZWRGaWxlVHlwZXNcIlxyXG4gICAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICBoaWRkZW5cclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzY3JlZW5UZXh0cz8udXBsb2FkTGFiZWwgPz8gJ1VwbG9hZCB5b3VyIGZpbGUnXCJcclxuICAgIC8+XHJcblxyXG4gICAgPCEtLSBEcmFnICYgRHJvcCBab25lIC0tPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19kcm9wem9uZVwiXHJcbiAgICAgIFtjbGFzcy5pZWVlc2Etcm9zdGVyLWltcG9ydF9fZHJvcHpvbmUtLWFjdGl2ZV09XCJpc0RyYWdPdmVyXCJcclxuICAgICAgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiXHJcbiAgICAgIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiXHJcbiAgICAgIChkcm9wKT1cIm9uRmlsZURyb3AoJGV2ZW50KVwiXHJcbiAgICAgIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiXHJcbiAgICAgIHJvbGU9XCJidXR0b25cIlxyXG4gICAgICB0YWJpbmRleD1cIjBcIlxyXG4gICAgICAoa2V5ZG93bi5lbnRlcik9XCJmaWxlSW5wdXQuY2xpY2soKVwiXHJcbiAgICAgIChrZXlkb3duLnNwYWNlKT1cImZpbGVJbnB1dC5jbGljaygpXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzY3JlZW5UZXh0cz8uYXJpYUxhYmVsPy5kcm9wem9uZSA/PyAnRHJhZyBhbmQgZHJvcCBmaWxlIHVwbG9hZCBhcmVhJ1wiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWRGaWxlXCI+XHJcbiAgICAgICAgPHN2ZyBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X191cGxvYWQtaWNvblwiIHdpZHRoPVwiMjJcIiBoZWlnaHQ9XCIyMlwiPlxyXG4gICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiYXNzZXRzL2ltYWdlcy9zcHJpdGVzL3Nwcml0ZXMuc3ZnI2ljb24tdXBsb2FkLWdyYXlcIj48L3VzZT5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8cCBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19kcm9wem9uZS10ZXh0XCI+XHJcbiAgICAgICAgICB7eyBzY3JlZW5UZXh0cz8uZHJvcHpvbmVUZXh0ID8/ICdEcmFnICYgZHJvcCBhIGZpbGUgaGVyZSwgb3IgY2xpY2sgdG8gYnJvd3NlJyB9fVxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICA8cCBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19kcm9wem9uZS1oaW50XCI+XHJcbiAgICAgICAgICB7eyBzY3JlZW5UZXh0cz8uZHJvcHpvbmVIaW50ID8/ICdBY2NlcHRlZCBmb3JtYXRzOiAuY3N2LCAueGxzeCcgfX1cclxuICAgICAgICA8L3A+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRGaWxlXCI+XHJcbiAgICAgICAgPHN2ZyBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X191cGxvYWQtaWNvblwiIHdpZHRoPVwiMjJcIiBoZWlnaHQ9XCIyMlwiPlxyXG4gICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiYXNzZXRzL2ltYWdlcy9zcHJpdGVzL3Nwcml0ZXMuc3ZnI2ljb24tdXBsb2FkLWdyYXlcIj48L3VzZT5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2ZpbGUtcm93XCI+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19maWxlLW5hbWVcIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIj5cclxuICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCJhc3NldHMvaW1hZ2VzL3Nwcml0ZXMvc3ByaXRlcy5zdmcjaWNvbi1maWxlLWRvY1wiPjwvdXNlPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAge3sgc2VsZWN0ZWRGaWxlLm5hbWUgfX1cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19yZW1vdmUtZmlsZS1idG5cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25SZW1vdmVGaWxlKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInNjcmVlblRleHRzPy5hcmlhTGFiZWw/LnJlbW92ZSA/PyAnUmVtb3ZlIHNlbGVjdGVkIGZpbGUnXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgJnRpbWVzO1xyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBJbmxpbmUgRXJyb3IgTWVzc2FnZSAtLT5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19lcnJvci1iYW5uZXJcIlxyXG4gICAgICByb2xlPVwiYWxlcnRcIlxyXG4gICAgPlxyXG4gICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8IS0tIFByb2Nlc3NpbmcgLyBSZXN1bHQgc2hhcmUgdGhlIGZpbGUgZGlzcGxheSArIHByb2dyZXNzIGJhciAtLT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1wb3J0U3RhdGUgPT09ICdwcm9jZXNzaW5nJyB8fCBpbXBvcnRTdGF0ZSA9PT0gJ3Jlc3VsdCdcIj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fZHJvcHpvbmUgaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2Ryb3B6b25lLS1yZXN1bHRcIlxyXG4gICAgPlxyXG4gICAgICA8c3ZnIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX3VwbG9hZC1pY29uXCIgd2lkdGg9XCIyMlwiIGhlaWdodD1cIjIyXCI+XHJcbiAgICAgICAgPHVzZSB4bGluazpocmVmPVwiYXNzZXRzL2ltYWdlcy9zcHJpdGVzL3Nwcml0ZXMuc3ZnI2ljb24tdXBsb2FkLWdyYXlcIj48L3VzZT5cclxuICAgICAgPC9zdmc+XHJcbiAgICAgIDxwIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2ZpbGUtbmFtZVwiPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCI+XHJcbiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCJhc3NldHMvaW1hZ2VzL3Nwcml0ZXMvc3ByaXRlcy5zdmcjaWNvbi1maWxlLWRvY1wiPjwvdXNlPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIHt7IHNlbGVjdGVkRmlsZT8ubmFtZSB9fVxyXG4gICAgICA8L3A+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFByb2dyZXNzIGxhYmVsIChwcm9jZXNzaW5nIG9ubHkpIC0tPlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdJZj1cImltcG9ydFN0YXRlID09PSAncHJvY2Vzc2luZydcIlxyXG4gICAgICBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19wcm9ncmVzcy1oZWFkXCJcclxuICAgID5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fcHJvZ3Jlc3MtbGFiZWxcIj5cclxuICAgICAgICB7eyBzY3JlZW5UZXh0cz8ucHJvY2Vzc2luZ0xhYmVsID8/ICdQcm9jZXNzaW5nIGZpbGUgcmVjb3Jkcy4uLi4nIH19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG1hdC1wcm9ncmVzcy1iYXJcclxuICAgICAgKm5nSWY9XCJpbXBvcnRTdGF0ZSA9PT0gJ3Byb2Nlc3NpbmcnXCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fcHJvZ3Jlc3MtYmFyXCJcclxuICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInNjcmVlblRleHRzPy5wcm9jZXNzaW5nTGFiZWwgPz8gJ1Byb2Nlc3NpbmcgZmlsZSByZWNvcmRzLi4uLidcIlxyXG4gICAgPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBSZXN1bHQgU3RhdGUgKHN1bW1hcnkgKyBlcnJvcnMpIC0tPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbXBvcnRTdGF0ZSA9PT0gJ3Jlc3VsdCcgJiYgdXBsb2FkUmVzdWx0XCI+XHJcbiAgICA8IS0tIE5vIGRhdGEgcmVjb3JkcyBiYW5uZXIgKGhlYWRlcnMgb25seSwgemVybyByb3dzKSAtLT5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJub0RhdGFNZXNzYWdlXCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fbm8tZGF0YS1iYW5uZXJcIlxyXG4gICAgICByb2xlPVwic3RhdHVzXCJcclxuICAgID5cclxuICAgICAge3sgbm9EYXRhTWVzc2FnZSB9fVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBTdW1tYXJ5IGNhcmRzIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInNob3dTdW1tYXJ5Q2FyZHNcIiBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19zdW1tYXJ5LWNhcmRzXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19zdW1tYXJ5LWNhcmQgaWVlZXNhLXJvc3Rlci1pbXBvcnRfX3N1bW1hcnktY2FyZC0tc3VjY2Vzc1wiXHJcbiAgICAgID5cclxuICAgICAgICA8cCBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19zdW1tYXJ5LWNhcmQtY291bnRcIj5cclxuICAgICAgICAgIHt7IHVwbG9hZFJlc3VsdC5zdWNjZXNzQ291bnQgfX1cclxuICAgICAgICA8L3A+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fc3VtbWFyeS1jYXJkLWxhYmVsXCI+XHJcbiAgICAgICAgICB7eyBzY3JlZW5UZXh0cz8ucmVzdWx0Py5zdWNjZXNzQ2FyZExhYmVsID8/ICdSb3N0ZXJzIGFkZGVkIHN1Y2Nlc3NmdWxseScgfX1cclxuICAgICAgICA8L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fc3VtbWFyeS1jYXJkIGllZWVzYS1yb3N0ZXItaW1wb3J0X19zdW1tYXJ5LWNhcmQtLXNraXBwZWRcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fc3VtbWFyeS1jYXJkLWNvdW50XCI+XHJcbiAgICAgICAgICB7eyB1cGxvYWRSZXN1bHQuZmFpbHVyZUNvdW50IH19XHJcbiAgICAgICAgPC9wPlxyXG4gICAgICAgIDxwIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX3N1bW1hcnktY2FyZC1sYWJlbFwiPlxyXG4gICAgICAgICAge3sgc2NyZWVuVGV4dHM/LnJlc3VsdD8uc2tpcHBlZENhcmRMYWJlbCA/PyAnU2tpcHBlZCBSb3dzJyB9fVxyXG4gICAgICAgIDwvcD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFJvdyBFcnJvcnMgQ2FyZCAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJqb2JFcnJvcnMubGVuZ3RoXCIgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fZXJyb3JzLWNhcmRcIj5cclxuICAgICAgPHAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fZXJyb3JzLWhlYWRlclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhbGxSb3dzU2tpcHBlZDsgZWxzZSBzb21lRXJyb3JzXCI+XHJcbiAgICAgICAgICB7eyBzY3JlZW5UZXh0cz8ucmVzdWx0Py5hbGxSb3dzU2tpcHBlZEhlYWRlciA/PyAnQWxsIFJvd3MgYXJlIHNraXBwZWQnIH19XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNzb21lRXJyb3JzPlxyXG4gICAgICAgICAge3sgc2NyZWVuVGV4dHM/LnJlc3VsdD8uZXJyb3JzSGVhZGVyID8/ICdSb3cgZXJyb3JzIOKAlCB0aGVzZSByb3dzIHdpbGwgYmUgc2tpcHBlZCcgfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L3A+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fZXJyb3JzLWJvZHlcIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcm93RXJyIG9mIGpvYkVycm9yc1wiXHJcbiAgICAgICAgICBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19lcnJvci1yb3dcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxwIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2Vycm9yLXJvdy10aXRsZVwiPlxyXG4gICAgICAgICAgICBSb3cge3sgcm93RXJyLnJvd051bWJlciB9fSDigJQge3sgcm93RXJyLmVycm9yTWVzc2FnZSB9fVxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8IS0tIEZvb3RlciBhY3Rpb25zIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fYWN0aW9uc1wiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBtYXQtYnV0dG9uXHJcbiAgICAgIGNsYXNzPVwibWF0LXRlcnRpYXJ5LWJ1dHRvbiBpZWVlc2Etcm9zdGVyLWltcG9ydF9fY2FuY2VsLWJ0blwiXHJcbiAgICAgIChjbGljayk9XCJvbkNhbmNlbCgpXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICA+XHJcbiAgICAgIHt7IHNjcmVlblRleHRzPy5idXR0b25zPy5jYW5jZWwgPz8gJ0NhbmNlbCcgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cImltcG9ydFN0YXRlID09PSAncmVzdWx0JyAmJiBqb2JFcnJvcnMubGVuZ3RoXCJcclxuICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgY2xhc3M9XCJtYXQtcHJpbWFyeS1idXR0b24gaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2Vycm9yLWxvZy1idG5cIlxyXG4gICAgICAoY2xpY2spPVwiZG93bmxvYWRFcnJvckxvZygpXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzY3JlZW5UZXh0cz8uYXJpYUxhYmVsPy5kb3dubG9hZEVycm9yTG9nID8/ICdEb3dubG9hZCBFcnJvciBsb2cnXCJcclxuICAgID5cclxuICAgICAge3sgc2NyZWVuVGV4dHM/LmJ1dHRvbnM/LmRvd25sb2FkRXJyb3JMb2cgPz8gJ0Rvd25sb2FkIEVycm9yIGxvZycgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cImltcG9ydFN0YXRlID09PSAncmVzdWx0J1wiXHJcbiAgICAgIG1hdC1idXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNsYXNzPVwibWF0LXByaW1hcnktYnV0dG9uIGllZWVzYS1yb3N0ZXItaW1wb3J0X191cGxvYWQtbmV3LWJ0blwiXHJcbiAgICAgIChjbGljayk9XCJvblVwbG9hZE5ld0ZpbGUoKVwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic2NyZWVuVGV4dHM/LmFyaWFMYWJlbD8udXBsb2FkTmV3RmlsZSA/PyAnVXBsb2FkIGRpZmZlcmVudCBmaWxlJ1wiXHJcbiAgICA+XHJcbiAgICAgIHt7IHNjcmVlblRleHRzPy5idXR0b25zPy51cGxvYWROZXdGaWxlID8/ICdVcGxvYWQgRGlmZmVyZW50IEZpbGUnIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
580
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9zdGVyLWltcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3Jvc3Rlci1pbXBvcnQvcm9zdGVyLWltcG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL3Jvc3Rlci1pbXBvcnQvcm9zdGVyLWltcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU9yRCxPQUFPLEtBQUssU0FBUyxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7O0FBc0J6RDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQVNILE1BQU0sT0FBTyxxQkFBcUI7SUEwRGhDO0lBQ0UsMENBQTBDO0lBQ2xDLHNCQUE4QztJQUN0RCwwQ0FBMEM7SUFDbEMsWUFBMkI7UUFGM0IsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUU5QyxpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQXpEckMsOEVBQThFO1FBQzlFLDhEQUE4RDtRQUNwRCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXZELHFFQUFxRTtRQUMzRCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVoRCxh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cUJBQXFCLDZNQ2xFbEMsZ2hWQTBRQSxtcmlCRDdNWSxZQUFZLCtQQUFFLGVBQWUsMlFBQUUsb0JBQW9COzs0RkFLbEQscUJBQXFCO2tCQVJqQyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixDQUFDLGlCQUcvQyxpQkFBaUIsQ0FBQyxJQUFJO3lJQUs1QixhQUFhO3NCQUFyQixLQUFLO2dCQUlJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFHRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IFN1YmplY3QsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgUm9zdGVySW1wb3J0RXJyb3JSZXBvcnQsXHJcbiAgUm9zdGVySW1wb3J0Sm9iLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy9yb3N0ZXItaW1wb3J0Lm1vZGVsJztcclxuaW1wb3J0IHsgUm9zdGVySW1wb3J0QXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jvc3Rlci1pbXBvcnQtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcm91cHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ3JvdXBzLnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuXHJcbi8qKiBTdGF0ZXMgb2YgdGhlIHJvc3RlciBpbXBvcnQgZmxvdy4gKi9cclxudHlwZSBSb3N0ZXJJbXBvcnRTdGF0ZSA9ICd1cGxvYWQnIHwgJ3Byb2Nlc3NpbmcnIHwgJ3Jlc3VsdCc7XHJcblxyXG4vKipcclxuICogVmlldy1tb2RlbCBmb3IgdGhlIHJlc3VsdCBzY3JlZW4uIFBvcHVsYXRlZCBmcm9tIHRoZSBjb25maXJtZWRcclxuICoge0BsaW5rIFJvc3RlckltcG9ydEpvYn0gcmV0dXJuZWQgYnkgdGhlIGJhY2tlbmQuXHJcbiAqL1xyXG5pbnRlcmZhY2UgUm9zdGVySW1wb3J0UmVzdWx0IHtcclxuICB0b3RhbFJlY29yZHM6IG51bWJlcjtcclxuICBzdWNjZXNzQ291bnQ6IG51bWJlcjtcclxuICBmYWlsdXJlQ291bnQ6IG51bWJlcjtcclxufVxyXG5cclxuLyoqIFJvdyBlcnJvciBzaG93biBvbiB0aGUgcmVzdWx0IHNjcmVlbiAobWFwcGVkIGZyb20gdGhlIEJFIGVycm9yIHJlcG9ydCkuICovXHJcbmludGVyZmFjZSBSb3N0ZXJJbXBvcnRSb3dFcnJvciB7XHJcbiAgcm93TnVtYmVyOiBudW1iZXI7XHJcbiAgZmllbGQ/OiBzdHJpbmc7XHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSb3N0ZXIgSW1wb3J0IGRpYWxvZy5cclxuICpcclxuICogTGV0cyBhbiBhZG1pbiB1cGxvYWQgYSBDU1YvWExTWCByb3N0ZXIgZmlsZSwgc2hvd3MgYSBwcm9jZXNzaW5nIHByb2dyZXNzXHJcbiAqIGJhciwgdGhlbiBhIHJlc3VsdCBzdW1tYXJ5IChhZGRlZCAvIHNraXBwZWQpIHdpdGggcGVyLXJvdyBlcnJvcnMgYW5kIGFuXHJcbiAqIGVycm9yLWxvZyBkb3dubG9hZC5cclxuICpcclxuICogV2lyZWQgdG8gdGhlIHJlYWwgYmFja2VuZCByb3N0ZXItaW1wb3J0IHN0YXRlIG1hY2hpbmVcclxuICogKHNhLXNhYXBwcy1ncm91cHMtYXBpIGBSb3N0ZXJJbXBvcnRDb250cm9sbGVyYCkgdmlhXHJcbiAqIHtAbGluayBSb3N0ZXJJbXBvcnRBcGlTZXJ2aWNlfTogb24gSW1wb3J0IGl0IHJ1bnNcclxuICogdXBsb2FkIOKGkiB2YWxpZGF0ZSDihpIgY29uZmlybSBhbmQgcmVuZGVycyB0aGUgY29uZmlybWVkIGpvYidzIHRlcm1pbmFsIGNvdW50c1xyXG4gKiBhbmQgcGVyLXJvdyBlcnJvcnMuIFNlcnZlci1zaWRlIHZhbGlkYXRpb24gZXJyb3JzICgxMDcyIHVuc3VwcG9ydGVkIGZvcm1hdCxcclxuICogMTA3MyB0b28gbGFyZ2UsIDEwNzQgcm93IGxpbWl0LCAxMDc1IGludmFsaWQgc3RhdHVzKSBhcmUgc3VyZmFjZWQgaW5saW5lLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLXJvc3Rlci1pbXBvcnQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBNYXRQcm9ncmVzc0Jhck1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jvc3Rlci1pbXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jvc3Rlci1pbXBvcnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUm9zdGVySW1wb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKiBDYXJyaWVzIHRoZSB7IGdyb3VwSWQsIGdyb3VwTmFtZSB9IHBheWxvYWQgZnJvbSB0aGUgb3BlbmluZyBkaWFsb2cuICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBASW5wdXQoKSBjb21wb25lbnREYXRhOiBhbnk7XHJcblxyXG4gIC8qKiBFbWl0dGVkIGFmdGVyIGFuIGltcG9ydCB0aGF0IGFkZGVkIGF0IGxlYXN0IG9uZSByb3cgKHBhcmVudCByZWZyZXNoZXMpLiAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgQE91dHB1dCgpIHN1Ym1pdEZvcm1SZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAvKiogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIGNhbmNlbHMvY2xvc2VzIHdpdGhvdXQgYSBzdWNjZXNzZnVsIGFkZC4gKi9cclxuICBAT3V0cHV0KCkgZm9ybUNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gY29uc3RhbnRzO1xyXG4gIHNjcmVlblRleHRzID0gdGhpcy5jb25zdGFudHM/LnJvc3RlckltcG9ydDtcclxuXHJcbiAgLyoqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGltcG9ydCBmbG93LiAqL1xyXG4gIGltcG9ydFN0YXRlOiBSb3N0ZXJJbXBvcnRTdGF0ZSA9ICd1cGxvYWQnO1xyXG5cclxuICAvKiogVGhlIHNlbGVjdGVkIGZpbGUuICovXHJcbiAgc2VsZWN0ZWRGaWxlOiBGaWxlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKiBGaWxlIGRyYWctb3ZlciBzdGF0ZS4gKi9cclxuICBpc0RyYWdPdmVyID0gZmFsc2U7XHJcblxyXG4gIC8qKiBUZXJtaW5hbCB1cGxvYWQgcmVzdWx0LiAqL1xyXG4gIHVwbG9hZFJlc3VsdDogUm9zdGVySW1wb3J0UmVzdWx0IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKiBSb3ctbGV2ZWwgZXJyb3JzIGZvciB0aGUgY29tcGxldGVkIGpvYi4gKi9cclxuICBqb2JFcnJvcnM6IFJvc3RlckltcG9ydFJvd0Vycm9yW10gPSBbXTtcclxuXHJcbiAgLyoqIElubGluZSB2YWxpZGF0aW9uIC8gQVBJIGVycm9yIG1lc3NhZ2UgKHNpbmdsZS1saW5lIGNhc2UpLiAqL1xyXG4gIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbCBBUEkgZXJyb3IgbWVzc2FnZXMgd2hlbiB0aGUgQkUgcmV0dXJucyBtdWx0aXBsZSBlcnJvciBjb2RlcyBhdCBvbmNlXHJcbiAgICogKGUuZy4gc2V2ZXJhbCBmaWVsZHMgZmFpbGVkKS4gUmVuZGVyZWQgYXMgYSBsaXN0IGluIHRoZSBlcnJvciBiYW5uZXIuIEVtcHR5XHJcbiAgICogZm9yIHNpbmdsZS1tZXNzYWdlIHZhbGlkYXRpb24gZXJyb3JzICh3aGljaCB1c2Uge0BsaW5rIGVycm9yTWVzc2FnZX0pLlxyXG4gICAqL1xyXG4gIGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZm8gYmFubmVyIHNob3duIHdoZW4gdGhlIGZpbGUgaGFzIGhlYWRlcnMgYnV0IG5vIGRhdGEgcm93c1xyXG4gICAqIChGaWdtYTogXCJObyByb3N0ZXIgZGF0YSBmb3VuZC4uLlwiKS5cclxuICAgKi9cclxuICBub0RhdGFNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqIFRoZSBpbXBvcnQgam9iIGlkIHJldHVybmVkIGJ5IHVwbG9hZCAoa2VwdCBzbyBjYW5jZWwgY2FuIGNsZWFuIGl0IHVwKS4gKi9cclxuICBwcml2YXRlIGltcG9ydElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqIE1heGltdW0gZmlsZSBzaXplIGluIGJ5dGVzICgxMCBNQikg4oCUIG1hdGNoZXMgdGhlIEJFIDEwTUIgbGltaXQuICovXHJcbiAgcmVhZG9ubHkgTUFYX0ZJTEVfU0laRSA9IDEwXzQ4NV83NjA7XHJcblxyXG4gIC8qKiBBY2NlcHRlZCBmaWxlIGV4dGVuc2lvbnMgKG11c3QgbWF0Y2ggdGhlIEJFIGNvbnRyYWN0OiBvbmx5IC5jc3YgLyAueGxzeCkuICovXHJcbiAgcmVhZG9ubHkgQUNDRVBURURfRVhURU5TSU9OUyA9IFsnLmNzdicsICcueGxzeCddO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSByb3N0ZXJJbXBvcnRBcGlTZXJ2aWNlOiBSb3N0ZXJJbXBvcnRBcGlTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdyb3VwU2VydmljZTogR3JvdXBzU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogUmVxdWlyZWQgY29sdW1uIGhlYWRlcnMgZm9yIGRpc3BsYXkgYW5kIHRoZSBzYW1wbGUgZmlsZS4gVGhpcyBpcyB0aGUgc3RhdGljXHJcbiAgICogYmFzZSBzZXQgZnJvbSBjb25zdGFudHMgUExVUyBhbnkgdGVuYW50LWxldmVsIHJlcXVpcmVkIHByb2ZpbGUgZmllbGRzIHRoZVxyXG4gICAqIGhvc3QgYXBwIGNvbmZpZ3VyZWQgKGUuZy4gcGhvbmUgLyBhZGRyZXNzIC8gZW1wbG95ZXIpLCBtYXBwZWQgdG8gZnJpZW5kbHlcclxuICAgKiBoZWFkZXJzIGFuZCBkZS1kdXBsaWNhdGVkIChjYXNlLWluc2Vuc2l0aXZlKSBhZ2FpbnN0IHRoZSBiYXNlIGNvbHVtbnMuXHJcbiAgICogQHJldHVybiB7c3RyaW5nW119XHJcbiAgICovXHJcbiAgZ2V0IHJlcXVpcmVkQ29sdW1ucygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBiYXNlOiBzdHJpbmdbXSA9IHRoaXMuc2NyZWVuVGV4dHM/LnJlcXVpcmVkQ29sdW1ucyA/PyBbXTtcclxuICAgIHJldHVybiB0aGlzLm1lcmdlVGVuYW50Q29sdW1ucyhiYXNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGVuZHMgdGhlIHRlbmFudC1jb25maWd1cmVkIGNvbHVtbnMgKGZyb20ge0BsaW5rIHRlbmFudEV4dHJhQ29sdW1uc30pIHRvXHJcbiAgICogdGhlIGJhc2UgY29sdW1uIGhlYWRlcnMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYmFzZSAtIFRoZSBzdGF0aWMgYmFzZSBjb2x1bW4gaGVhZGVycy5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBtZXJnZVRlbmFudENvbHVtbnMoYmFzZTogc3RyaW5nW10pOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBleHRyYXMgPSB0aGlzLnRlbmFudEV4dHJhQ29sdW1ucyhiYXNlKTtcclxuICAgIHJldHVybiBleHRyYXMubGVuZ3RoID8gWy4uLmJhc2UsIC4uLmV4dHJhcy5tYXAoKGMpID0+IGMubGFiZWwpXSA6IGJhc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNvbHZlcyB0aGUgdGVuYW50LWNvbmZpZ3VyZWQgcmVxdWlyZWQgcHJvZmlsZSBmaWVsZHMgaW50byB0aGUgRVhUUkFcclxuICAgKiBjb2x1bW5zIHRvIGFwcGVuZCBhZnRlciB0aGUgYmFzZSBzZXQg4oCUIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIHNoYXJlZCBieVxyXG4gICAqIGJvdGggdGhlIGhlYWRlciBsaXN0ICh7QGxpbmsgcmVxdWlyZWRDb2x1bW5zfSkgYW5kIHRoZSBzYW1wbGUgZmlsZVxyXG4gICAqICh7QGxpbmsgZG93bmxvYWRTYW1wbGVGaWxlfSkgc28gdGhlIHR3byBuZXZlciBkcmlmdCBvdXQgb2YgYWxpZ25tZW50LlxyXG4gICAqXHJcbiAgICogRWFjaCBmaWVsZCBiZWNvbWVzIG9uZSBjb2x1bW4gd2l0aCBpdHMgZnJpZW5kbHkgYGxhYmVsYCAoa25vd24ga2V5cyB1c2UgdGhlXHJcbiAgICogbGFiZWwgbWFwOyB1bmtub3duIGtleXMgZmFsbCBiYWNrIHRvIGEgdGl0bGUtY2FzZWQga2V5KSBhbmQgYSBgc2FtcGxlVmFsdWVgXHJcbiAgICogZm9yIHRoZSBzYW1wbGUgcm93LiBGaWVsZHMgd2hvc2UgbGFiZWwgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGJhc2Ugc2V0XHJcbiAgICogKGNhc2UtaW5zZW5zaXRpdmUpIGFyZSBza2lwcGVkIHNvIGEgdGVuYW50IGZpZWxkIGxpa2UgXCJlbXBsb3llclwiIHRoYXQgaXNcclxuICAgKiBhbHJlYWR5IGEgYmFzZSBjb2x1bW4gaXMgbm90IGR1cGxpY2F0ZWQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYmFzZSAtIFRoZSBzdGF0aWMgYmFzZSBjb2x1bW4gaGVhZGVycy5cclxuICAgKiBAcmV0dXJuIHt7IGxhYmVsOiBzdHJpbmc7IHNhbXBsZVZhbHVlOiBzdHJpbmcgfVtdfVxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIHRlbmFudEV4dHJhQ29sdW1ucyhcclxuICAgIGJhc2U6IHN0cmluZ1tdXHJcbiAgKTogeyBsYWJlbDogc3RyaW5nOyBzYW1wbGVWYWx1ZTogc3RyaW5nIH1bXSB7XHJcbiAgICBjb25zdCB0ZW5hbnRGaWVsZHMgPSB0aGlzLmdyb3VwU2VydmljZT8uZ2V0UmVxdWlyZWRQcm9maWxlRmllbGRzKCkgPz8gW107XHJcbiAgICBpZiAoIXRlbmFudEZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2FtcGxlTWFwID0gdGhpcy5zY3JlZW5UZXh0cz8udGVuYW50RmllbGRTYW1wbGVWYWx1ZXMgPz8ge307XHJcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldChiYXNlLm1hcCgoY29sKSA9PiBjb2wudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgY29uc3QgZXh0cmFzOiB7IGxhYmVsOiBzdHJpbmc7IHNhbXBsZVZhbHVlOiBzdHJpbmcgfVtdID0gW107XHJcbiAgICB0ZW5hbnRGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnRlbmFudEZpZWxkTGFiZWwoZmllbGQpO1xyXG4gICAgICBpZiAobGFiZWwgJiYgIXNlZW4uaGFzKGxhYmVsLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgc2Vlbi5hZGQobGFiZWwudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgZXh0cmFzLnB1c2goeyBsYWJlbCwgc2FtcGxlVmFsdWU6IHNhbXBsZU1hcFtmaWVsZF0gPz8gJycgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGV4dHJhcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcHMgYSB0ZW5hbnQgZmllbGQga2V5IHRvIGl0cyBkaXNwbGF5IGhlYWRlci4gS25vd24ga2V5cyB1c2UgdGhlIGNvbmZpZ3VyZWRcclxuICAgKiBsYWJlbCBtYXA7IHVua25vd24ga2V5cyBmYWxsIGJhY2sgdG8gYSB0aXRsZS1jYXNlZCBrZXkuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkIC0gVGhlIHRlbmFudCBmaWVsZCBrZXkgKGUuZy4gJ3Bob25lJykuXHJcbiAgICogQHJldHVybiB7c3RyaW5nfVxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIHRlbmFudEZpZWxkTGFiZWwoZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsYWJlbHMgPSB0aGlzLnNjcmVlblRleHRzPy50ZW5hbnRGaWVsZExhYmVscyA/PyB7fTtcclxuICAgIGlmIChsYWJlbHNbZmllbGRdKSB7XHJcbiAgICAgIHJldHVybiBsYWJlbHNbZmllbGRdO1xyXG4gICAgfVxyXG4gICAgLy8gRmFsbGJhY2s6IFwicGhvbmVfbnVtYmVyXCIgLT4gXCJQaG9uZSBOdW1iZXJcIi5cclxuICAgIHJldHVybiBmaWVsZFxyXG4gICAgICAucmVwbGFjZSgvW18tXSsvZywgJyAnKVxyXG4gICAgICAucmVwbGFjZSgvXFxiXFx3L2csIChjaGFyKSA9PiBjaGFyLnRvVXBwZXJDYXNlKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqIENvbW1hLXNlcGFyYXRlZCBhY2NlcHRlZCBmaWxlIHR5cGVzIGZvciB0aGUgaW5wdXQgZWxlbWVudC4gKi9cclxuICBnZXQgYWNjZXB0ZWRGaWxlVHlwZXMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLkFDQ0VQVEVEX0VYVEVOU0lPTlMuam9pbignLCcpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRoZSB0YXJnZXQgZ3JvdXAgaWQgZnJvbSB0aGUgZGlhbG9nIHBheWxvYWQgKGZhbGxzIGJhY2sgdG8gc2VsZWN0aW9uKS4gKi9cclxuICBwcml2YXRlIGdldCBncm91cElkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmNvbXBvbmVudERhdGE/Lmdyb3VwSWQgPz9cclxuICAgICAgKHRoaXMuZ3JvdXBTZXJ2aWNlPy5nZXRTZWxlY3RlZEdyb3VwSW5mbygpPy5ncm91cElkIGFzIHN0cmluZykgPz9cclxuICAgICAgJydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBBUEkgYmFzZSBVUkwgb24gdGhlIGltcG9ydCBzZXJ2aWNlLlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucm9zdGVySW1wb3J0QXBpU2VydmljZS5zZXRBcGlCYXNlVXJsKHRoaXMuZ3JvdXBTZXJ2aWNlPy5hcGlCYXNlVXJsKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFucyB1cCBzdWJzY3JpcHRpb25zIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuXHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBhIGZpbGUgc2VsZWN0ZWQgdmlhIHRoZSBicm93c2UgZGlhbG9nLlxyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gVGhlIGNoYW5nZSBldmVudCBmcm9tIHRoZSBoaWRkZW4gZmlsZSBpbnB1dC5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKCFpbnB1dC5maWxlcyB8fCBpbnB1dC5maWxlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0LmZpbGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgdGhpcy5zaG93U2luZ2xlRmlsZU9ubHlFcnJvcigpO1xyXG4gICAgICAvLyBSZXNldCBzbyByZS1zZWxlY3RpbmcgdGhlIHNhbWUgZmlsZSB0cmlnZ2VycyBjaGFuZ2UgYWdhaW4uXHJcbiAgICAgIGlucHV0LnZhbHVlID0gJyc7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucHJvY2Vzc0ZpbGUoaW5wdXQuZmlsZXNbMF0pO1xyXG4gICAgLy8gUmVzZXQgdGhlIG5hdGl2ZSBpbnB1dCB2YWx1ZSBzbyBwaWNraW5nIHRoZSBzYW1lIGZpbGUgYWZ0ZXIgYW4gZXJyb3JcclxuICAgIC8vIHN0aWxsIGZpcmVzIHRoZSBjaGFuZ2UgZXZlbnQgKG90aGVyd2lzZSB0aGUgYnJvd3NlciBza2lwcyBpdCBiZWNhdXNlXHJcbiAgICAvLyB0aGUgdmFsdWUgaGFzbid0IGNoYW5nZWQpLlxyXG4gICAgaW5wdXQudmFsdWUgPSAnJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgYSBmaWxlIGRyb3BwZWQgb250byB0aGUgZHJvcHpvbmUuXHJcbiAgICogQHBhcmFtIHtEcmFnRXZlbnR9IGV2ZW50IC0gVGhlIGRyb3AgZXZlbnQuXHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRmlsZURyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5pc0RyYWdPdmVyID0gZmFsc2U7XHJcbiAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXM7XHJcbiAgICBpZiAoIWZpbGVzIHx8IGZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLnNob3dTaW5nbGVGaWxlT25seUVycm9yKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMucHJvY2Vzc0ZpbGUoZmlsZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBkcmFnLW92ZXIgb24gdGhlIGRyb3B6b25lLlxyXG4gICAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBldmVudCAtIFRoZSBkcmFnb3ZlciBldmVudC5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmlzRHJhZ092ZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBkcmFnLWxlYXZlIG9uIHRoZSBkcm9wem9uZS5cclxuICAgKiBAcGFyYW0ge0RyYWdFdmVudH0gZXZlbnQgLSBUaGUgZHJhZ2xlYXZlIGV2ZW50LlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmlzRHJhZ092ZXIgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyB0aGUgZmlsZSB0eXBlIGFuZCBzaXplLCB0aGVuIGVpdGhlciBzZXRzIGl0IG9yIHNob3dzIGFuIGVycm9yLlxyXG4gICAqIEBwYXJhbSB7RmlsZX0gZmlsZSAtIFRoZSBjYW5kaWRhdGUgZmlsZS5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJvY2Vzc0ZpbGUoZmlsZTogRmlsZSk6IHZvaWQge1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBudWxsO1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gW107XHJcbiAgICB0aGlzLm5vRGF0YU1lc3NhZ2UgPSBudWxsO1xyXG4gICAgdGhpcy51cGxvYWRSZXN1bHQgPSBudWxsO1xyXG4gICAgdGhpcy5pbXBvcnRJZCA9IG51bGw7XHJcbiAgICAvLyBDbGVhciBhbnkgcHJldmlvdXNseSBzZWxlY3RlZCAodmFsaWQpIGZpbGUgc28gYW4gaW52YWxpZCBuZXcgc2VsZWN0aW9uXHJcbiAgICAvLyBjYW4ndCBsZWF2ZSB0aGUgSW1wb3J0IGJ1dHRvbiBlbmFibGVkIGZvciBhIHN0YWxlIGZpbGUuXHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XHJcblxyXG4gICAgY29uc3QgZmlsZU5hbWUgPSBmaWxlLm5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IGlzVmFsaWRFeHRlbnNpb24gPSB0aGlzLkFDQ0VQVEVEX0VYVEVOU0lPTlMuc29tZSgoZXh0KSA9PlxyXG4gICAgICBmaWxlTmFtZS5lbmRzV2l0aChleHQpXHJcbiAgICApO1xyXG4gICAgaWYgKCFpc1ZhbGlkRXh0ZW5zaW9uKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICB0aGlzLnNjcmVlblRleHRzPy52YWxpZGF0aW9uPy51bnN1cHBvcnRlZFR5cGUgPz9cclxuICAgICAgICAnSW5jb3JyZWN0IGZpbGUgdHlwZS4gUGxlYXNlIHVwbG9hZCBhIHZhbGlkIC5jc3Ygb3IgLnhsc3ggZmlsZS4nO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpbGUuc2l6ZSA9PT0gMCkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgdGhpcy5zY3JlZW5UZXh0cz8udmFsaWRhdGlvbj8uZW1wdHlGaWxlID8/XHJcbiAgICAgICAgJ1RoZSBzZWxlY3RlZCBmaWxlIGlzIGVtcHR5LiBQbGVhc2UgdXBsb2FkIGEgZmlsZSB3aXRoIHJvc3RlciByZWNvcmRzLic7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmlsZS5zaXplID4gdGhpcy5NQVhfRklMRV9TSVpFKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICB0aGlzLnNjcmVlblRleHRzPy52YWxpZGF0aW9uPy5maWxlVG9vTGFyZ2UgPz9cclxuICAgICAgICAnRmlsZSBzaXplIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCBzaXplIG9mIDEwTUIuJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gZmlsZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3dzIHRoZSBzaW5nbGUtZmlsZS1vbmx5IHZhbGlkYXRpb24gbWVzc2FnZS5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgc2hvd1NpbmdsZUZpbGVPbmx5RXJyb3IoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgIHRoaXMuc2NyZWVuVGV4dHM/LnZhbGlkYXRpb24/LnNpbmdsZUZpbGVPbmx5ID8/XHJcbiAgICAgICdQbGVhc2UgdXBsb2FkIGEgc2luZ2xlIGZpbGUgYXQgYSB0aW1lLic7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZmlsZSBhbmQgcmVzZXRzIHRvIHRoZSB1cGxvYWQgc3RhdGUuXHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uUmVtb3ZlRmlsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gbnVsbDtcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlcyA9IFtdO1xyXG4gICAgdGhpcy5ub0RhdGFNZXNzYWdlID0gbnVsbDtcclxuICAgIHRoaXMudXBsb2FkUmVzdWx0ID0gbnVsbDtcclxuICAgIHRoaXMuaW1wb3J0SWQgPSBudWxsO1xyXG4gICAgdGhpcy5pbXBvcnRTdGF0ZSA9ICd1cGxvYWQnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBmcm9tIHRoZSByZXN1bHQgc2NyZWVuIHRvIGEgY2xlYW4gdXBsb2FkIHN0YXRlIHNvIHRoZSB1c2VyIGNhblxyXG4gICAqIHVwbG9hZCBhIGNvcnJlY3RlZCBmaWxlIChlLmcuIGFmdGVyIGRvd25sb2FkaW5nIHRoZSBlcnJvciBsb2cpIHdpdGhvdXRcclxuICAgKiBjbG9zaW5nIGFuZCByZW9wZW5pbmcgdGhlIGltcG9ydCBkaWFsb2cuIENsZWFycyB0aGUgcHJldmlvdXMgZmlsZSxcclxuICAgKiByZXN1bHQsIGVycm9ycyBhbmQgam9iIGlkLlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBvblVwbG9hZE5ld0ZpbGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IG51bGw7XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZXMgPSBbXTtcclxuICAgIHRoaXMubm9EYXRhTWVzc2FnZSA9IG51bGw7XHJcbiAgICB0aGlzLnVwbG9hZFJlc3VsdCA9IG51bGw7XHJcbiAgICB0aGlzLmpvYkVycm9ycyA9IFtdO1xyXG4gICAgdGhpcy5pbXBvcnRJZCA9IG51bGw7XHJcbiAgICB0aGlzLmltcG9ydFN0YXRlID0gJ3VwbG9hZCc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSdW5zIHRoZSByZWFsIGltcG9ydDogdXBsb2FkIOKGkiB2YWxpZGF0ZSDihpIgY29uZmlybS4gVGhlIHByb2dyZXNzIGJhciBpc1xyXG4gICAqIHNob3duIGluIGluZGV0ZXJtaW5hdGUgbW9kZSB3aGlsZSB0aGUgY2hhaW4gaXMgaW4gZmxpZ2h0LCB0aGVuIHRoZVxyXG4gICAqIGNvbmZpcm1lZCBqb2IncyB0ZXJtaW5hbCBjb3VudHMgKyBwZXItcm93IGVycm9ycyBkcml2ZSB0aGUgcmVzdWx0IHNjcmVlbi5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgb25JbXBvcnQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaWxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5ncm91cElkKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICB0aGlzLnNjcmVlblRleHRzPy52YWxpZGF0aW9uPy51cGxvYWRGYWlsZWQgPz9cclxuICAgICAgICAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgaW1wb3J0aW5nIHRoZSByb3N0ZXIuIFBsZWFzZSB0cnkgYWdhaW4uJztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBudWxsO1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gW107XHJcbiAgICB0aGlzLm5vRGF0YU1lc3NhZ2UgPSBudWxsO1xyXG4gICAgdGhpcy51cGxvYWRSZXN1bHQgPSBudWxsO1xyXG4gICAgdGhpcy5qb2JFcnJvcnMgPSBbXTtcclxuICAgIHRoaXMuaW1wb3J0SWQgPSBudWxsO1xyXG4gICAgdGhpcy5pbXBvcnRTdGF0ZSA9ICdwcm9jZXNzaW5nJztcclxuXHJcbiAgICB0aGlzLnJvc3RlckltcG9ydEFwaVNlcnZpY2VcclxuICAgICAgLnVwbG9hZEltcG9ydEZpbGUodGhpcy5zZWxlY3RlZEZpbGUsIHRoaXMuZ3JvdXBJZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKChqb2I6IFJvc3RlckltcG9ydEpvYikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pbXBvcnRJZCA9IGpvYj8uaW1wb3J0SWQgPz8gbnVsbDtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnJvc3RlckltcG9ydEFwaVNlcnZpY2UudmFsaWRhdGVJbXBvcnRKb2IoXHJcbiAgICAgICAgICAgIHRoaXMuaW1wb3J0SWQgYXMgc3RyaW5nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PlxyXG4gICAgICAgICAgdGhpcy5yb3N0ZXJJbXBvcnRBcGlTZXJ2aWNlLmNvbmZpcm1JbXBvcnRKb2IodGhpcy5pbXBvcnRJZCBhcyBzdHJpbmcpXHJcbiAgICAgICAgKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoY29uZmlybWVkSm9iOiBSb3N0ZXJJbXBvcnRKb2IpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmluYWxpemVSZXN1bHQoY29uZmlybWVkSm9iKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUltcG9ydEVycm9yKGVycm9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcHMgYSBmYWlsZWQgaW1wb3J0IGNhbGwgdG8gYW4gaW5saW5lIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybnMgdGhlIFVJIHRvXHJcbiAgICogdGhlIHVwbG9hZCBzdGF0ZSBzbyB0aGUgdXNlciBjYW4gcmV0cnkuIEtub3duIEJFIGVycm9yIGNvZGVzICgxMDcy4oCTMTA3NSlcclxuICAgKiBhcmUgbWFwcGVkIHZpYSBjb25zdGFudHM7IGFueXRoaW5nIGVsc2UgdXNlcyB0aGUgZ2VuZXJpYyBtZXNzYWdlLlxyXG4gICAqIEBwYXJhbSB7Kn0gZXJyb3IgLSBUaGUgSHR0cEVycm9yUmVzcG9uc2UuXHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgcHJpdmF0ZSBoYW5kbGVJbXBvcnRFcnJvcihlcnJvcjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmltcG9ydFN0YXRlID0gJ3VwbG9hZCc7XHJcbiAgICAvLyBSZXNldCB0aGUgc2VsZWN0ZWQgZmlsZSBzbyB0aGUgdXNlciBjYW4gcGljayBhIG5ldyAob3IgdGhlIHNhbWUpIGZpbGVcclxuICAgIC8vIGFmdGVyIGFuIGVycm9yLiBXaXRob3V0IHRoaXMsIHNlbGVjdGVkRmlsZSBzdGF5cyBzZXQgYW5kIHRoZSBkcm9wem9uZVxyXG4gICAgLy8gc2hvd3MgdGhlIG9sZCBmaWxlbmFtZTsgd29yc2UsIHJlLXNlbGVjdGluZyB0aGUgc2FtZSBmaWxlIGRvZXNuJ3QgZmlyZVxyXG4gICAgLy8gdGhlIGlucHV0J3MgY2hhbmdlIGV2ZW50ICh0aGUgdmFsdWUgaGFzbid0IGNoYW5nZWQpLCBsZWF2aW5nIHRoZSB1c2VyXHJcbiAgICAvLyBzdHVjay5cclxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gbnVsbDtcclxuXHJcbiAgICAvLyBCRSBlcnJvciBjb2RlcyB0YWtlIHByaW9yaXR5IHdoZW4gcHJlc2VudCAoZS5nLiAxMDcxIG5vIHBlcm1pc3Npb24sIDEwNzJcclxuICAgIC8vIGZvcm1hdCwgMTA3MyB0b28gbGFyZ2UsIDEwNzQgcm93IGxpbWl0LCAxMDc1IGludmFsaWQgc3RhdHVzKS4gVGhlIEJFIGNhblxyXG4gICAgLy8gcmV0dXJuIE1VTFRJUExFIGNvZGVzIGF0IG9uY2UgKGUuZy4gW1wiMjAxN1wiLFwiMjAxOFwiLFwiMjAxNFwiXSB3aGVuIHNldmVyYWxcclxuICAgIC8vIGZpZWxkcyBmYWlsKSwgc28gbWFwIGFuZCBzaG93IEFMTCBvZiB0aGVtIOKAlCBub3QganVzdCB0aGUgZmlyc3Qg4oCUIGFzIGFcclxuICAgIC8vIGxpc3QgaW4gdGhlIGVycm9yIGJhbm5lci5cclxuICAgIGNvbnN0IGVycm9yQ29kZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gZXJyb3I/LmVycm9yPy5ib2R5Py5lcnJvckNvZGVzO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyb3JDb2RlcykgJiYgZXJyb3JDb2Rlcy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgbWVzc2FnZXMgPSBlcnJvckNvZGVzLm1hcChcclxuICAgICAgICAoY29kZSkgPT5cclxuICAgICAgICAgIHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/Lltjb2RlIGFzIGtleW9mIHR5cGVvZiB0aGlzLmNvbnN0YW50cy5lcnJvcnNdID8/XHJcbiAgICAgICAgICB0aGlzLnNjcmVlblRleHRzPy52YWxpZGF0aW9uPy51cGxvYWRGYWlsZWQgPz9cclxuICAgICAgICAgICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBpbXBvcnRpbmcgdGhlIHJvc3Rlci4gUGxlYXNlIHRyeSBhZ2Fpbi4nXHJcbiAgICAgICk7XHJcbiAgICAgIC8vIERlLWR1cGxpY2F0ZSBzbyB0aGUgc2FtZSBtZXNzYWdlIGlzIG5vdCByZXBlYXRlZCB3aGVuIHR3byBjb2RlcyBtYXAgdG9cclxuICAgICAgLy8gdGhlIHNhbWUgdGV4dC5cclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2VzID0gQXJyYXkuZnJvbShuZXcgU2V0KG1lc3NhZ2VzKSk7XHJcbiAgICAgIC8vIEtlZXAgZXJyb3JNZXNzYWdlIHBvcHVsYXRlZCAoZmlyc3QgbWVzc2FnZSkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcclxuICAgICAgLy8gYW5kIGZvciB0aGUgc2luZ2xlLWxpbmUgY2FzZS5cclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9yTWVzc2FnZXNbMF0gPz8gbnVsbDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEEgNDAzIHdpdGggbm8gZXJyb3ItY29kZSBib2R5IGNvbWVzIGZyb20gdGhlIGVuZHBvaW50J3MgQFByZUF1dGhvcml6ZVxyXG4gICAgLy8gKHRoZSB1c2VyIGxhY2tzIE1hbmFnZSBHcm91cCBNZW1iZXIgLyBNYW5hZ2UgQWxsIFJvc3RlcnMgZm9yIHRoaXMgZ3JvdXApLlxyXG4gICAgLy8gU2hvdyB0aGUgcGVybWlzc2lvbiBtZXNzYWdlIOKAlCByZXRyeWluZyB3aWxsIG5vdCBoZWxwLlxyXG4gICAgY29uc3Qgc3RhdHVzID0gZXJyb3I/LnN0YXR1cyA/PyBlcnJvcj8uZXJyb3I/LnN0YXR1cztcclxuICAgIGlmIChzdGF0dXMgPT09IDQwMykge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgdGhpcy5zY3JlZW5UZXh0cz8udmFsaWRhdGlvbj8uZm9yYmlkZGVuID8/XHJcbiAgICAgICAgJ1lvdSBkbyBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGltcG9ydCBhIHJvc3RlciBmb3IgdGhpcyBncm91cC4nO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICB0aGlzLnNjcmVlblRleHRzPy52YWxpZGF0aW9uPy51cGxvYWRGYWlsZWQgPz9cclxuICAgICAgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGltcG9ydGluZyB0aGUgcm9zdGVyLiBQbGVhc2UgdHJ5IGFnYWluLic7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZXMgdGhlIHRlcm1pbmFsIHJlc3VsdCBhbmQgbW92ZXMgdG8gdGhlIHJlc3VsdCBzdGF0ZS4gV2hlbiB0aGUgam9iIGhhZFxyXG4gICAqIG5vIGRhdGEgcm93cywgc2hvd3MgdGhlIFwibm8gcm9zdGVyIGRhdGFcIiBpbmZvIGJhbm5lciBpbnN0ZWFkIG9mIHRoZSBzdW1tYXJ5XHJcbiAgICogY2FyZHMuXHJcbiAgICogQHBhcmFtIHtSb3N0ZXJJbXBvcnRKb2J9IGpvYiAtIFRoZSBjb25maXJtZWQgaW1wb3J0IGpvYi5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZmluYWxpemVSZXN1bHQoam9iOiBSb3N0ZXJJbXBvcnRKb2IpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRvdGFsUmVjb3JkcyA9IGpvYj8udG90YWxSb3dzID8/IDA7XHJcbiAgICBjb25zdCBzdWNjZXNzQ291bnQgPSBqb2I/LnN1Y2Nlc3NSb3dzID8/IDA7XHJcbiAgICBjb25zdCBmYWlsdXJlQ291bnQgPSBqb2I/LmZhaWxlZFJvd3MgPz8gMDtcclxuXHJcbiAgICB0aGlzLnVwbG9hZFJlc3VsdCA9IHsgdG90YWxSZWNvcmRzLCBzdWNjZXNzQ291bnQsIGZhaWx1cmVDb3VudCB9O1xyXG4gICAgdGhpcy5qb2JFcnJvcnMgPSB0aGlzLnBhcnNlRXJyb3JSZXBvcnQoam9iPy5lcnJvclJlcG9ydCk7XHJcbiAgICB0aGlzLmltcG9ydFN0YXRlID0gJ3Jlc3VsdCc7XHJcblxyXG4gICAgaWYgKHRvdGFsUmVjb3JkcyA9PT0gMCkge1xyXG4gICAgICB0aGlzLm5vRGF0YU1lc3NhZ2UgPVxyXG4gICAgICAgIHRoaXMuc2NyZWVuVGV4dHM/LnZhbGlkYXRpb24/Lm5vRGF0YVJlY29yZHMgPz9cclxuICAgICAgICAnTm8gcm9zdGVyIGRhdGEgZm91bmQuIFRoZSBzZWxlY3RlZCBmaWxlIGNvbnRhaW5zIGhlYWRlcnMgYnV0IG5vIHJvc3RlciByZWNvcmRzLic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOb3JtYWxpemVzIHRoZSBCRSBgZXJyb3JfcmVwb3J0YCBpbnRvIHJvdy1lcnJvciB2aWV3IG1vZGVscy5cclxuICAgKlxyXG4gICAqIFRoZSBCRSB3cmFwcyB0aGUgcGVyLXJvdyBlbnRyaWVzIGluIGEgYHsgcm93czogWyB7IHJvdywgZmllbGQsIG1lc3NhZ2UgfSBdIH1gXHJcbiAgICogZG9jdW1lbnQsIGJ1dCB0aGF0IHZhbHVlIGhhcyBiZWVuIG9ic2VydmVkIHRvIGFycml2ZSBpbiBNVUxUSVBMRSBzaGFwZXM6XHJcbiAgICogIC0gYSBwYXJzZWQgb2JqZWN0IGB7IHJvd3M6IFsuLi5dIH1gIChjb25maXJtIHJlc3BvbnNlIOKAlCB0aGUgY29tbW9uIGNhc2UpLFxyXG4gICAqICAtIGEgcmF3IEpTT04gc3RyaW5nIG9mIHRoZSBzYW1lIG9iamVjdCAoSlNPTkIgcGFzc3Rocm91Z2gpLCBvclxyXG4gICAqICAtIGEgYmFyZSBhcnJheSBgWyB7IHJvdywgZmllbGQsIG1lc3NhZ2UgfSBdYC5cclxuICAgKiBUaGlzIGhhbmRsZXMgYWxsIHRocmVlIChhbmQgYG51bGxgKSBzbyB0aGUgZXJyb3IgbG9nIHJlbmRlcnMgcmVnYXJkbGVzcyBvZlxyXG4gICAqIGhvdyB0aGUgZmllbGQgaXMgc2VyaWFsaXplZC5cclxuICAgKiBAcGFyYW0geyp9IGVycm9yUmVwb3J0IC0gVGhlIEJFIGVycm9yX3JlcG9ydCAob2JqZWN0LCBzdHJpbmcsIGFycmF5LCBvciBudWxsKS5cclxuICAgKiBAcmV0dXJuIHtSb3N0ZXJJbXBvcnRSb3dFcnJvcltdfVxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHByaXZhdGUgcGFyc2VFcnJvclJlcG9ydChlcnJvclJlcG9ydD86IGFueSk6IFJvc3RlckltcG9ydFJvd0Vycm9yW10ge1xyXG4gICAgaWYgKCFlcnJvclJlcG9ydCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICAvLyBJZiBpdCdzIGEgc3RyaW5nLCBwYXJzZSBpdCBmaXJzdDsgb24gcGFyc2UgZmFpbHVyZSwgbm8gcm93IGVycm9ycy5cclxuICAgIGxldCB2YWx1ZTogdW5rbm93biA9IGVycm9yUmVwb3J0O1xyXG4gICAgaWYgKHR5cGVvZiBlcnJvclJlcG9ydCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB2YWx1ZSA9IEpTT04ucGFyc2UoZXJyb3JSZXBvcnQpO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEFjY2VwdCBlaXRoZXIgYSBiYXJlIGFycmF5IG9yIGEgeyByb3dzOiBbLi4uXSB9IHdyYXBwZXIgb2JqZWN0LlxyXG4gICAgY29uc3QgZW50cmllczogUm9zdGVySW1wb3J0RXJyb3JSZXBvcnRbXSA9IEFycmF5LmlzQXJyYXkodmFsdWUpXHJcbiAgICAgID8gKHZhbHVlIGFzIFJvc3RlckltcG9ydEVycm9yUmVwb3J0W10pXHJcbiAgICAgIDogKCh2YWx1ZSBhcyB7IHJvd3M/OiBSb3N0ZXJJbXBvcnRFcnJvclJlcG9ydFtdIH0pPy5yb3dzID8/IFtdKTtcclxuICAgIHJldHVybiBlbnRyaWVzLm1hcCgoZW50cnkpID0+ICh7XHJcbiAgICAgIHJvd051bWJlcjogZW50cnk/LnJvdyxcclxuICAgICAgZmllbGQ6IGVudHJ5Py5maWVsZCxcclxuICAgICAgZXJyb3JNZXNzYWdlOiBlbnRyeT8ubWVzc2FnZSxcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIHJlc3VsdCBzdGF0ZSBzaG91bGQgc2hvdyB0aGUgc3VtbWFyeSBjYXJkcyAoYWRkZWQgLyBza2lwcGVkKS5cclxuICAgKiBIaWRkZW4gZm9yIHRoZSBcIm5vIGRhdGEgcmVjb3Jkc1wiIGNhc2UuXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0IHNob3dTdW1tYXJ5Q2FyZHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnVwbG9hZFJlc3VsdCAmJiB0aGlzLnVwbG9hZFJlc3VsdC50b3RhbFJlY29yZHMgPiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBldmVyeSBwcm9jZXNzZWQgcm93IHdhcyBza2lwcGVkIChkcml2ZXMgdGhlIFwiQWxsIFJvd3MgYXJlIHNraXBwZWRcIlxyXG4gICAqIGhlYWRlciBvbiB0aGUgZXJyb3JzIGNhcmQpLlxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldCBhbGxSb3dzU2tpcHBlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICEhdGhpcy51cGxvYWRSZXN1bHQgJiZcclxuICAgICAgdGhpcy51cGxvYWRSZXN1bHQudG90YWxSZWNvcmRzID4gMCAmJlxyXG4gICAgICB0aGlzLnVwbG9hZFJlc3VsdC5zdWNjZXNzQ291bnQgPT09IDBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCdWlsZHMgYSBjbGllbnQtc2lkZSBDU1Ygc2FtcGxlIGZpbGUgZnJvbSB0aGUgcmVxdWlyZWQgY29sdW1ucyBhbmQgdHJpZ2dlcnNcclxuICAgKiBhIGJyb3dzZXIgZG93bmxvYWQuIChDbGllbnQtc2lkZSBnZW5lcmF0aW9uIHVudGlsIHRoZSB0ZW1wbGF0ZSBBUEkgZXhpc3RzLilcclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgZG93bmxvYWRTYW1wbGVGaWxlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaGVhZGVyTGluZSA9IHRoaXMucmVxdWlyZWRDb2x1bW5zXHJcbiAgICAgIC5tYXAoKGNvbCkgPT4gdGhpcy50b0NzdkNlbGwoY29sKSlcclxuICAgICAgLmpvaW4oJywnKTtcclxuXHJcbiAgICAvLyBTYW1wbGUgZGF0YSByb3dzIHNvIHRoZSBkb3dubG9hZGVkIGZpbGUgc2hvd3MgdGhlIGV4cGVjdGVkIGZvcm1hdCwgbm90XHJcbiAgICAvLyBqdXN0IHRoZSBjb2x1bW4gaGVhZGVycy4gVGhlIGJhc2Ugcm93IHZhbHVlcyBjb21lIGZyb20gY29uc3RhbnRzOyBzYW1wbGVcclxuICAgIC8vIHZhbHVlcyBmb3IgYW55IHRlbmFudC1jb25maWd1cmVkIGNvbHVtbnMgYXJlIGFwcGVuZGVkIChmcm9tIHRoZSBTQU1FXHJcbiAgICAvLyBzb3VyY2UgdGhhdCBidWlsZHMgdGhlIGhlYWRlcnMpIHNvIGV2ZXJ5IHJvdyBsaW5lcyB1cCB3aXRoIHRoZVxyXG4gICAgLy8gKGJhc2UgKyB0ZW5hbnQpIGhlYWRlciBzZXQuXHJcbiAgICBjb25zdCBiYXNlOiBzdHJpbmdbXSA9IHRoaXMuc2NyZWVuVGV4dHM/LnJlcXVpcmVkQ29sdW1ucyA/PyBbXTtcclxuICAgIGNvbnN0IGJhc2VTYW1wbGVSb3dzOiBzdHJpbmdbXVtdID0gdGhpcy5zY3JlZW5UZXh0cz8uc2FtcGxlUm93cyA/PyBbXTtcclxuICAgIGNvbnN0IHRlbmFudFNhbXBsZUNlbGxzID0gdGhpcy50ZW5hbnRFeHRyYUNvbHVtbnMoYmFzZSkubWFwKFxyXG4gICAgICAoY29sKSA9PiBjb2wuc2FtcGxlVmFsdWVcclxuICAgICk7XHJcbiAgICBjb25zdCBkYXRhTGluZXMgPSBiYXNlU2FtcGxlUm93cy5tYXAoKHJvdykgPT5cclxuICAgICAgWy4uLnJvdywgLi4udGVuYW50U2FtcGxlQ2VsbHNdXHJcbiAgICAgICAgLm1hcCgoY2VsbCkgPT4gdGhpcy50b0NzdkNlbGwoY2VsbCkpXHJcbiAgICAgICAgLmpvaW4oJywnKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjc3ZDb250ZW50ID0gW2hlYWRlckxpbmUsIC4uLmRhdGFMaW5lc10uam9pbignXFxyXFxuJykgKyAnXFxyXFxuJztcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHtcclxuICAgICAgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyxcclxuICAgIH0pO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLnNjcmVlblRleHRzPy5zYW1wbGVGaWxlTmFtZSA/PyAnUm9zdGVyX1NhbXBsZS5jc3YnO1xyXG4gICAgdGhpcy50cmlnZ2VyRG93bmxvYWQoYmxvYiwgZmlsZU5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGRzIGEgQ1NWIGZyb20gdGhlIHJvdy1sZXZlbCBlcnJvcnMgYW5kIHRyaWdnZXJzIGEgYnJvd3NlciBkb3dubG9hZCBzb1xyXG4gICAqIHRoZSB1c2VyIGNhbiBjb3JyZWN0IGFuZCByZS11cGxvYWQuXHJcbiAgICogQG1lbWJlcm9mIFJvc3RlckltcG9ydENvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRvd25sb2FkRXJyb3JMb2coKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuam9iRXJyb3JzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBoZWFkZXJzOiBzdHJpbmdbXSA9IHRoaXMuc2NyZWVuVGV4dHM/LmVycm9yTG9nPy5oZWFkZXJzID8/IFtcclxuICAgICAgJ1JvdycsXHJcbiAgICAgICdGaWVsZCcsXHJcbiAgICAgICdFcnJvcicsXHJcbiAgICBdO1xyXG4gICAgY29uc3Qgcm93cyA9IHRoaXMuam9iRXJyb3JzLm1hcCgocm93RXJyKSA9PlxyXG4gICAgICBbcm93RXJyLnJvd051bWJlciwgcm93RXJyLmZpZWxkLCByb3dFcnIuZXJyb3JNZXNzYWdlXVxyXG4gICAgICAgIC5tYXAoKHZhbHVlKSA9PiB0aGlzLnRvQ3N2Q2VsbCh2YWx1ZSkpXHJcbiAgICAgICAgLmpvaW4oJywnKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBbXHJcbiAgICAgIGhlYWRlcnMubWFwKChoZWFkZXIpID0+IHRoaXMudG9Dc3ZDZWxsKGhlYWRlcikpLmpvaW4oJywnKSxcclxuICAgICAgLi4ucm93cyxcclxuICAgIF0uam9pbignXFxyXFxuJyk7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9XHJcbiAgICAgIHRoaXMuc2NyZWVuVGV4dHM/LmVycm9yTG9nPy5maWxlTmFtZSA/PyAnUm9zdGVyX0ltcG9ydF9FcnJvcl9Mb2cuY3N2JztcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcclxuICAgIHRoaXMudHJpZ2dlckRvd25sb2FkKGJsb2IsIGZpbGVOYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVzY2FwZXMgYSB2YWx1ZSBmb3Igc2FmZSBpbmNsdXNpb24gaW4gYSBDU1YgY2VsbC5cclxuICAgKiBAcGFyYW0geyhzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKX0gdmFsdWUgLSBUaGUgcmF3IGNlbGwgdmFsdWUuXHJcbiAgICogQHJldHVybiB7c3RyaW5nfSAtIHRoZSBDU1Ytc2FmZSBjZWxsIHN0cmluZy5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgdG9Dc3ZDZWxsKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJhdyA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgPyAnJyA6IFN0cmluZyh2YWx1ZSk7XHJcbiAgICBpZiAoL1tcIixcXHJcXG5dLy50ZXN0KHJhdykpIHtcclxuICAgICAgcmV0dXJuIGBcIiR7cmF3LnJlcGxhY2UoL1wiL2csICdcIlwiJyl9XCJgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJhdztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlcyB0aGUgZGlhbG9nLiBFbWl0cyBzdWJtaXRGb3JtUmVzcG9uc2Ugd2hlbiBhdCBsZWFzdCBvbmUgcm93IHdhcyBhZGRlZFxyXG4gICAqIHNvIHRoZSBwYXJlbnQgcmVmcmVzaGVzOyBvdGhlcndpc2UgZW1pdHMgZm9ybUNhbmNlbC5cclxuICAgKiBAbWVtYmVyb2YgUm9zdGVySW1wb3J0Q29tcG9uZW50XHJcbiAgICovXHJcbiAgb25DYW5jZWwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy51cGxvYWRSZXN1bHQgJiYgdGhpcy51cGxvYWRSZXN1bHQuc3VjY2Vzc0NvdW50ID4gMCkge1xyXG4gICAgICB0aGlzLnN1Ym1pdEZvcm1SZXNwb25zZS5lbWl0KHRoaXMudXBsb2FkUmVzdWx0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUNhbmNlbC5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmlnZ2VycyBhIGJyb3dzZXIgZG93bmxvYWQgZm9yIGEgZ2VuZXJhdGVkIGJsb2IuXHJcbiAgICogQHBhcmFtIHtCbG9ifSBibG9iIC0gVGhlIGZpbGUgY29udGVudC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWUgLSBUaGUgc3VnZ2VzdGVkIGZpbGVuYW1lLlxyXG4gICAqIEBtZW1iZXJvZiBSb3N0ZXJJbXBvcnRDb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIHRyaWdnZXJEb3dubG9hZChibG9iOiBCbG9iLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGxpbmsuaHJlZiA9IHVybDtcclxuICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0XCI+XHJcbiAgPCEtLSBTdWItaGVhZGluZyBiYW5kOiBcIkJ1bGsgSW1wb3J0IFBhcnRpY2lwYW50c1wiIG9uIHRoZSBsZWZ0LCBJbXBvcnQgUm9zdGVyXHJcbiAgICAgICBhY3Rpb24gb24gdGhlIHJpZ2h0IChhcHBlYXJzIG9uY2UgYSBmaWxlIGlzIHNlbGVjdGVkKSDigJQgbWF0Y2hlcyB0aGUgRmlnbWEuXHJcbiAgICAgICBUaGUgXCLihpAgQmFjayB0byBSb3N0ZXJzIC8gSW1wb3J0IFJvc3RlclwiIHRpdGxlIHJvdyArIFggYXJlIHJlbmRlcmVkIGJ5IHRoZVxyXG4gICAgICAgc2hhcmVkIE1vZGFsQ29tcG9uZW50IGFib3ZlIHRoaXMuIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fc3ViaGVhZGVyXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19zdWJoZWFkZXItdGl0bGVcIj5cclxuICAgICAge3sgc2NyZWVuVGV4dHM/LnN1YkhlYWRpbmcgPz8gJ0J1bGsgSW1wb3J0IFBhcnRpY2lwYW50cycgfX1cclxuICAgIDwvc3Bhbj5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJzZWxlY3RlZEZpbGUgJiYgaW1wb3J0U3RhdGUgPT09ICd1cGxvYWQnXCJcclxuICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgY2xhc3M9XCJtYXQtdGVydGlhcnktYnV0dG9uIGllZWVzYS1yb3N0ZXItaW1wb3J0X19pbXBvcnQtYnRuXCJcclxuICAgICAgKGNsaWNrKT1cIm9uSW1wb3J0KClcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInNjcmVlblRleHRzPy5idXR0b25zPy5pbXBvcnQgPz8gJ0ltcG9ydCBSb3N0ZXInXCJcclxuICAgID5cclxuICAgICAgPHN2ZyBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19pbXBvcnQtYnRuLWljb25cIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCJhc3NldHMvaW1hZ2VzL3Nwcml0ZXMvc3ByaXRlcy5zdmcjaWNvbi1pbXBvcnRcIj48L3VzZT5cclxuICAgICAgPC9zdmc+XHJcbiAgICAgIHt7IHNjcmVlblRleHRzPy5idXR0b25zPy5pbXBvcnQgPz8gJ0ltcG9ydCBSb3N0ZXInIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBSZXF1aXJlZCBDb2x1bW5zIEluZm8gLS0+XHJcbiAgPGRpdiBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19jb2x1bW5zLWNhcmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fY29sdW1ucy1jb250ZW50XCI+XHJcbiAgICAgIDxwIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2NvbHVtbnMtdGl0bGVcIj5cclxuICAgICAgICB7eyBzY3JlZW5UZXh0cz8ucmVxdWlyZWRDb2x1bW5zVGl0bGUgPz8gJ1JlcXVpcmVkIGNvbHVtbnMnIH19XHJcbiAgICAgIDwvcD5cclxuICAgICAgPGRpdiBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19jb2x1bW5zLWNoaXBzXCI+XHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgcmVxdWlyZWRDb2x1bW5zXCJcclxuICAgICAgICAgIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2NoaXBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGNvbCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fc2FtcGxlLXdyYXBwZXJcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICBjbGFzcz1cIm1hdC10ZXJ0aWFyeS1idXR0b24gaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2Rvd25sb2FkLWJ0blwiXHJcbiAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkU2FtcGxlRmlsZSgpXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInNjcmVlblRleHRzPy5hcmlhTGFiZWw/LmRvd25sb2FkU2FtcGxlID8/ICdEb3dubG9hZCBTYW1wbGUgRmlsZSdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fZG93bmxvYWQtYnRuLWljb25cIlxyXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCJhc3NldHMvaW1hZ2VzL3Nwcml0ZXMvc3ByaXRlcy5zdmcjaWNvbi1maWxlLWRvY1wiPjwvdXNlPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIHt7IHNjcmVlblRleHRzPy5kb3dubG9hZFNhbXBsZUxhYmVsID8/ICdEb3dubG9hZCBTYW1wbGUgRmlsZScgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPHAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fdXBsb2FkLWxhYmVsXCI+XHJcbiAgICB7eyBzY3JlZW5UZXh0cz8udXBsb2FkTGFiZWwgPz8gJ1VwbG9hZCB5b3VyIGZpbGUnIH19XHJcbiAgPC9wPlxyXG5cclxuICA8IS0tIFVwbG9hZCBTdGF0ZSAtLT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1wb3J0U3RhdGUgPT09ICd1cGxvYWQnXCI+XHJcbiAgICA8IS0tIEhpZGRlbiBmaWxlIGlucHV0IC0tPlxyXG4gICAgPGlucHV0XHJcbiAgICAgICNmaWxlSW5wdXRcclxuICAgICAgdHlwZT1cImZpbGVcIlxyXG4gICAgICBbYWNjZXB0XT1cImFjY2VwdGVkRmlsZVR5cGVzXCJcclxuICAgICAgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgaGlkZGVuXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic2NyZWVuVGV4dHM/LnVwbG9hZExhYmVsID8/ICdVcGxvYWQgeW91ciBmaWxlJ1wiXHJcbiAgICAvPlxyXG5cclxuICAgIDwhLS0gRHJhZyAmIERyb3AgWm9uZSAtLT5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fZHJvcHpvbmVcIlxyXG4gICAgICBbY2xhc3MuaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2Ryb3B6b25lLS1hY3RpdmVdPVwiaXNEcmFnT3ZlclwiXHJcbiAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxyXG4gICAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxyXG4gICAgICAoZHJvcCk9XCJvbkZpbGVEcm9wKCRldmVudClcIlxyXG4gICAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIlxyXG4gICAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgICAgdGFiaW5kZXg9XCIwXCJcclxuICAgICAgKGtleWRvd24uZW50ZXIpPVwiZmlsZUlucHV0LmNsaWNrKClcIlxyXG4gICAgICAoa2V5ZG93bi5zcGFjZSk9XCJmaWxlSW5wdXQuY2xpY2soKVwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic2NyZWVuVGV4dHM/LmFyaWFMYWJlbD8uZHJvcHpvbmUgPz8gJ0RyYWcgYW5kIGRyb3AgZmlsZSB1cGxvYWQgYXJlYSdcIlxyXG4gICAgPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlbGVjdGVkRmlsZVwiPlxyXG4gICAgICAgIDxzdmcgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fdXBsb2FkLWljb25cIiB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMjJcIj5cclxuICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cImFzc2V0cy9pbWFnZXMvc3ByaXRlcy9zcHJpdGVzLnN2ZyNpY29uLXVwbG9hZC1ncmF5XCI+PC91c2U+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fZHJvcHpvbmUtdGV4dFwiPlxyXG4gICAgICAgICAge3sgc2NyZWVuVGV4dHM/LmRyb3B6b25lVGV4dCA/PyAnRHJhZyAmIGRyb3AgYSBmaWxlIGhlcmUsIG9yIGNsaWNrIHRvIGJyb3dzZScgfX1cclxuICAgICAgICA8L3A+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fZHJvcHpvbmUtaGludFwiPlxyXG4gICAgICAgICAge3sgc2NyZWVuVGV4dHM/LmRyb3B6b25lSGludCA/PyAnQWNjZXB0ZWQgZm9ybWF0czogLmNzdiwgLnhsc3gnIH19XHJcbiAgICAgICAgPC9wPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkRmlsZVwiPlxyXG4gICAgICAgIDxzdmcgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fdXBsb2FkLWljb25cIiB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMjJcIj5cclxuICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cImFzc2V0cy9pbWFnZXMvc3ByaXRlcy9zcHJpdGVzLnN2ZyNpY29uLXVwbG9hZC1ncmF5XCI+PC91c2U+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19maWxlLXJvd1wiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fZmlsZS1uYW1lXCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCI+XHJcbiAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiYXNzZXRzL2ltYWdlcy9zcHJpdGVzL3Nwcml0ZXMuc3ZnI2ljb24tZmlsZS1kb2NcIj48L3VzZT5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIHt7IHNlbGVjdGVkRmlsZS5uYW1lIH19XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fcmVtb3ZlLWZpbGUtYnRuXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlRmlsZSgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzY3JlZW5UZXh0cz8uYXJpYUxhYmVsPy5yZW1vdmUgPz8gJ1JlbW92ZSBzZWxlY3RlZCBmaWxlJ1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgICZ0aW1lcztcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gSW5saW5lIEVycm9yIE1lc3NhZ2UgLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwiZXJyb3JNZXNzYWdlcy5sZW5ndGggfHwgZXJyb3JNZXNzYWdlXCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fZXJyb3ItYmFubmVyXCJcclxuICAgICAgcm9sZT1cImFsZXJ0XCJcclxuICAgID5cclxuICAgICAgPCEtLSBNdWx0aXBsZSBBUEkgZXJyb3IgbWVzc2FnZXMgKGUuZy4gc2V2ZXJhbCBmaWVsZHMgZmFpbGVkKTogbGlzdCB0aGVtLiAtLT5cclxuICAgICAgPHVsXHJcbiAgICAgICAgKm5nSWY9XCJlcnJvck1lc3NhZ2VzLmxlbmd0aCA+IDE7IGVsc2Ugc2luZ2xlRXJyb3JcIlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2Vycm9yLWxpc3RcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBtZXNzYWdlIG9mIGVycm9yTWVzc2FnZXNcIj57eyBtZXNzYWdlIH19PC9saT5cclxuICAgICAgPC91bD5cclxuICAgICAgPCEtLSBTaW5nbGUgbWVzc2FnZSAodmFsaWRhdGlvbiBlcnJvcnMgb3Igb25lIEFQSSBlcnJvcikuIC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUVycm9yPlxyXG4gICAgICAgIHt7IGVycm9yTWVzc2FnZXNbMF0gPz8gZXJyb3JNZXNzYWdlIH19XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBQcm9jZXNzaW5nIC8gUmVzdWx0IHNoYXJlIHRoZSBmaWxlIGRpc3BsYXkgKyBwcm9ncmVzcyBiYXIgLS0+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImltcG9ydFN0YXRlID09PSAncHJvY2Vzc2luZycgfHwgaW1wb3J0U3RhdGUgPT09ICdyZXN1bHQnXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2Ryb3B6b25lIGllZWVzYS1yb3N0ZXItaW1wb3J0X19kcm9wem9uZS0tcmVzdWx0XCJcclxuICAgID5cclxuICAgICAgPHN2ZyBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X191cGxvYWQtaWNvblwiIHdpZHRoPVwiMjJcIiBoZWlnaHQ9XCIyMlwiPlxyXG4gICAgICAgIDx1c2UgeGxpbms6aHJlZj1cImFzc2V0cy9pbWFnZXMvc3ByaXRlcy9zcHJpdGVzLnN2ZyNpY29uLXVwbG9hZC1ncmF5XCI+PC91c2U+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgICA8cCBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19maWxlLW5hbWVcIj5cclxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiPlxyXG4gICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiYXNzZXRzL2ltYWdlcy9zcHJpdGVzL3Nwcml0ZXMuc3ZnI2ljb24tZmlsZS1kb2NcIj48L3VzZT5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgICB7eyBzZWxlY3RlZEZpbGU/Lm5hbWUgfX1cclxuICAgICAgPC9wPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBQcm9ncmVzcyBsYWJlbCAocHJvY2Vzc2luZyBvbmx5KSAtLT5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJpbXBvcnRTdGF0ZSA9PT0gJ3Byb2Nlc3NpbmcnXCJcclxuICAgICAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fcHJvZ3Jlc3MtaGVhZFwiXHJcbiAgICA+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX3Byb2dyZXNzLWxhYmVsXCI+XHJcbiAgICAgICAge3sgc2NyZWVuVGV4dHM/LnByb2Nlc3NpbmdMYWJlbCA/PyAnUHJvY2Vzc2luZyBmaWxlIHJlY29yZHMuLi4uJyB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyXHJcbiAgICAgICpuZ0lmPVwiaW1wb3J0U3RhdGUgPT09ICdwcm9jZXNzaW5nJ1wiXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX3Byb2dyZXNzLWJhclwiXHJcbiAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzY3JlZW5UZXh0cz8ucHJvY2Vzc2luZ0xhYmVsID8/ICdQcm9jZXNzaW5nIGZpbGUgcmVjb3Jkcy4uLi4nXCJcclxuICAgID48L21hdC1wcm9ncmVzcy1iYXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gUmVzdWx0IFN0YXRlIChzdW1tYXJ5ICsgZXJyb3JzKSAtLT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1wb3J0U3RhdGUgPT09ICdyZXN1bHQnICYmIHVwbG9hZFJlc3VsdFwiPlxyXG4gICAgPCEtLSBObyBkYXRhIHJlY29yZHMgYmFubmVyIChoZWFkZXJzIG9ubHksIHplcm8gcm93cykgLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwibm9EYXRhTWVzc2FnZVwiXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX25vLWRhdGEtYmFubmVyXCJcclxuICAgICAgcm9sZT1cInN0YXR1c1wiXHJcbiAgICA+XHJcbiAgICAgIHt7IG5vRGF0YU1lc3NhZ2UgfX1cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gU3VtbWFyeSBjYXJkcyAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93U3VtbWFyeUNhcmRzXCIgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fc3VtbWFyeS1jYXJkc1wiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fc3VtbWFyeS1jYXJkIGllZWVzYS1yb3N0ZXItaW1wb3J0X19zdW1tYXJ5LWNhcmQtLXN1Y2Nlc3NcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fc3VtbWFyeS1jYXJkLWNvdW50XCI+XHJcbiAgICAgICAgICB7eyB1cGxvYWRSZXN1bHQuc3VjY2Vzc0NvdW50IH19XHJcbiAgICAgICAgPC9wPlxyXG4gICAgICAgIDxwIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX3N1bW1hcnktY2FyZC1sYWJlbFwiPlxyXG4gICAgICAgICAge3sgc2NyZWVuVGV4dHM/LnJlc3VsdD8uc3VjY2Vzc0NhcmRMYWJlbCA/PyAnUm9zdGVycyBhZGRlZCBzdWNjZXNzZnVsbHknIH19XHJcbiAgICAgICAgPC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX3N1bW1hcnktY2FyZCBpZWVlc2Etcm9zdGVyLWltcG9ydF9fc3VtbWFyeS1jYXJkLS1za2lwcGVkXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxwIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX3N1bW1hcnktY2FyZC1jb3VudFwiPlxyXG4gICAgICAgICAge3sgdXBsb2FkUmVzdWx0LmZhaWx1cmVDb3VudCB9fVxyXG4gICAgICAgIDwvcD5cclxuICAgICAgICA8cCBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19zdW1tYXJ5LWNhcmQtbGFiZWxcIj5cclxuICAgICAgICAgIHt7IHNjcmVlblRleHRzPy5yZXN1bHQ/LnNraXBwZWRDYXJkTGFiZWwgPz8gJ1NraXBwZWQgUm93cycgfX1cclxuICAgICAgICA8L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBSb3cgRXJyb3JzIENhcmQgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiam9iRXJyb3JzLmxlbmd0aFwiIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2Vycm9ycy1jYXJkXCI+XHJcbiAgICAgIDxwIGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2Vycm9ycy1oZWFkZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWxsUm93c1NraXBwZWQ7IGVsc2Ugc29tZUVycm9yc1wiPlxyXG4gICAgICAgICAge3sgc2NyZWVuVGV4dHM/LnJlc3VsdD8uYWxsUm93c1NraXBwZWRIZWFkZXIgPz8gJ0FsbCBSb3dzIGFyZSBza2lwcGVkJyB9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc29tZUVycm9ycz5cclxuICAgICAgICAgIHt7IHNjcmVlblRleHRzPy5yZXN1bHQ/LmVycm9yc0hlYWRlciA/PyAnUm93IGVycm9ycyDigJQgdGhlc2Ugcm93cyB3aWxsIGJlIHNraXBwZWQnIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9wPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2Vycm9ycy1ib2R5XCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHJvd0VyciBvZiBqb2JFcnJvcnNcIlxyXG4gICAgICAgICAgY2xhc3M9XCJpZWVlc2Etcm9zdGVyLWltcG9ydF9fZXJyb3Itcm93XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cImllZWVzYS1yb3N0ZXItaW1wb3J0X19lcnJvci1yb3ctdGl0bGVcIj5cclxuICAgICAgICAgICAgUm93IHt7IHJvd0Vyci5yb3dOdW1iZXIgfX0g4oCUIHt7IHJvd0Vyci5lcnJvck1lc3NhZ2UgfX1cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSBGb290ZXIgYWN0aW9ucyAtLT5cclxuICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2FjdGlvbnNcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICBjbGFzcz1cIm1hdC10ZXJ0aWFyeS1idXR0b24gaWVlZXNhLXJvc3Rlci1pbXBvcnRfX2NhbmNlbC1idG5cIlxyXG4gICAgICAoY2xpY2spPVwib25DYW5jZWwoKVwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgPlxyXG4gICAgICB7eyBzY3JlZW5UZXh0cz8uYnV0dG9ucz8uY2FuY2VsID8/ICdDYW5jZWwnIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJpbXBvcnRTdGF0ZSA9PT0gJ3Jlc3VsdCcgJiYgam9iRXJyb3JzLmxlbmd0aFwiXHJcbiAgICAgIG1hdC1idXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNsYXNzPVwibWF0LXByaW1hcnktYnV0dG9uIGllZWVzYS1yb3N0ZXItaW1wb3J0X19lcnJvci1sb2ctYnRuXCJcclxuICAgICAgKGNsaWNrKT1cImRvd25sb2FkRXJyb3JMb2coKVwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic2NyZWVuVGV4dHM/LmFyaWFMYWJlbD8uZG93bmxvYWRFcnJvckxvZyA/PyAnRG93bmxvYWQgRXJyb3IgbG9nJ1wiXHJcbiAgICA+XHJcbiAgICAgIHt7IHNjcmVlblRleHRzPy5idXR0b25zPy5kb3dubG9hZEVycm9yTG9nID8/ICdEb3dubG9hZCBFcnJvciBsb2cnIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgKm5nSWY9XCJpbXBvcnRTdGF0ZSA9PT0gJ3Jlc3VsdCdcIlxyXG4gICAgICBtYXQtYnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBjbGFzcz1cIm1hdC1wcmltYXJ5LWJ1dHRvbiBpZWVlc2Etcm9zdGVyLWltcG9ydF9fdXBsb2FkLW5ldy1idG5cIlxyXG4gICAgICAoY2xpY2spPVwib25VcGxvYWROZXdGaWxlKClcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInNjcmVlblRleHRzPy5hcmlhTGFiZWw/LnVwbG9hZE5ld0ZpbGUgPz8gJ1VwbG9hZCBkaWZmZXJlbnQgZmlsZSdcIlxyXG4gICAgPlxyXG4gICAgICB7eyBzY3JlZW5UZXh0cz8uYnV0dG9ucz8udXBsb2FkTmV3RmlsZSA/PyAnVXBsb2FkIERpZmZlcmVudCBGaWxlJyB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|