tango-app-ui-manage-settings 3.7.29 → 3.7.30

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.
@@ -96,17 +96,19 @@ export class ReportConfigurationComponent {
96
96
  }
97
97
  removeCustomReportSchedule(template) {
98
98
  const modalRef = this.modalService.open(ActionPopupComponent, { centered: true, size: 'md', backdrop: 'static' });
99
- modalRef.componentInstance.title = 'Remove Schedule?';
100
- modalRef.componentInstance.message = 'Are you sure you want to remove this scheduled report? This action cannot be undone.';
99
+ modalRef.componentInstance.title = 'Delete Report?';
100
+ modalRef.componentInstance.message = 'Are you sure you want to delete this report? It will also be removed from the Reports page. This action cannot be undone.';
101
101
  modalRef.result.then((result) => {
102
102
  if (result === 'submit') {
103
- this.apiService.updateCustomReportSchedule(template?._id, { enabled: false }).pipe(takeUntil(this.destroy$)).subscribe({
103
+ // Deletes the report template itself (soft delete) — not just its
104
+ // schedule — so it disappears from the Reports page too.
105
+ this.apiService.deleteCustomReportTemplate(template?._id).pipe(takeUntil(this.destroy$)).subscribe({
104
106
  next: (res) => {
105
- this.toaster.getSuccessToast('Scheduled report removed successfully.');
107
+ this.toaster.getSuccessToast('Report deleted successfully.');
106
108
  this.getScheduledCustomReports(this.clientId);
107
109
  },
108
110
  error: (err) => {
109
- this.toaster.getErrorToast(err.error?.error || err.error?.message || 'Error removing scheduled report');
111
+ this.toaster.getErrorToast(err.error?.error || err.error?.message || 'Error deleting report');
110
112
  }
111
113
  });
112
114
  }
@@ -280,10 +282,10 @@ export class ReportConfigurationComponent {
280
282
  });
281
283
  }
282
284
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReportConfigurationComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ClientApiService }, { token: i3.NgbModal }, { token: i4.ToastService }, { token: i0.ChangeDetectorRef }, { token: i5.GlobalStateService }], target: i0.ɵɵFactoryTarget.Component });
283
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ReportConfigurationComponent, selector: "lib-report-configuration", ngImport: i0, template: "<div class=\"report-config-tabs mb-6\">\r\n <span class=\"report-config-tab\" [ngClass]=\"activeTab === 'regular' ? 'active' : ''\" (click)=\"selectTab('regular')\">\r\n Regular\r\n <span class=\"tab-count\">{{ reportsFormArray.controls.length }}</span>\r\n </span>\r\n <span class=\"report-config-tab\" [ngClass]=\"activeTab === 'custom' ? 'active' : ''\" (click)=\"selectTab('custom')\">\r\n Custom\r\n <span class=\"tab-count\">{{ customReportList.length }}</span>\r\n </span>\r\n</div>\r\n\r\n<form *ngIf=\"activeTab === 'regular'\" [formGroup]=\"reportConfigurationForm\">\r\n <div class=\"row\">\r\n <ng-container *ngIf=\"(gs.userAccess | async)?.TangoAdmin_Reports_isEdit\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"d-flex justify-content-end\">\r\n <button (click)=\"openAddModal()\" type=\"button\"\r\n class=\"btn btn-primary align-items-end\">\r\n <span class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0003 4.16663V15.8333M4.16699 9.99996H15.8337\" stroke=\"white\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n Add Report\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"loading\">\r\n <div\r\n class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"noData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\"\r\n src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container formArrayName=\"reports\">\r\n <ng-container *ngFor=\"let report of reportsFormArray.controls; let i = index\" [formGroupName]=\"i\">\r\n <div *ngIf=\"(gs.userAccess | async)?.TangoAdmin_Reports_isEdit\" class=\"d-flex justify-content-end mt-5\">\r\n <div *ngIf=\"getReportDisabled(i)\" (click)=\"enableForm(i)\" type=\"button\"\r\n class=\" align-items-end\">\r\n <span class=\"me-2\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13410_52264)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <g clip-path=\"url(#clip0_13410_52264)\">\r\n <path\r\n d=\"M24.167 11.4999C24.3859 11.2811 24.6457 11.1074 24.9317 10.989C25.2176 10.8705 25.5241 10.8096 25.8337 10.8096C26.1432 10.8096 26.4497 10.8705 26.7357 10.989C27.0216 11.1074 27.2815 11.2811 27.5003 11.4999C27.7192 11.7188 27.8928 11.9786 28.0113 12.2646C28.1297 12.5506 28.1907 12.8571 28.1907 13.1666C28.1907 13.4761 28.1297 13.7826 28.0113 14.0686C27.8928 14.3546 27.7192 14.6144 27.5003 14.8333L16.2503 26.0833L11.667 27.3333L12.917 22.7499L24.167 11.4999Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13410_52264\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13410_52264\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13410_52264\" result=\"shape\" />\r\n </filter>\r\n <clipPath id=\"clip0_13410_52264\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(10 9)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n \r\n <div *ngIf=\"getReportDisabled(i)\" (click)=\"deleteReport(report)\"\r\n class=\"align-items-end cursor-pointer\">\r\n <span class=\"me-2\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13252_178642)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M12.5 14.0001H14.1667M14.1667 14.0001H27.5M14.1667 14.0001V25.6667C14.1667 26.1088 14.3423 26.5327 14.6548 26.8453C14.9674 27.1578 15.3913 27.3334 15.8333 27.3334H24.1667C24.6087 27.3334 25.0326 27.1578 25.3452 26.8453C25.6577 26.5327 25.8333 26.1088 25.8333 25.6667V14.0001H14.1667ZM16.6667 14.0001V12.3334C16.6667 11.8914 16.8423 11.4675 17.1548 11.1549C17.4674 10.8423 17.8913 10.6667 18.3333 10.6667H21.6667C22.1087 10.6667 22.5326 10.8423 22.8452 11.1549C23.1577 11.4675 23.3333 11.8914 23.3333 12.3334V14.0001M18.3333 18.1667V23.1667M21.6667 18.1667V23.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13252_178642\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13252_178642\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13252_178642\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n\r\n </div>\r\n \r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-5\">\r\n <label [for]=\"'reportName' + i\" class=\"form-label\">Report Name <span class=\"alert-required\"></span></label>\r\n <input formControlName=\"reportName\" type=\"text\" class=\"form-control disabled\" [id]=\"'reportName' + i\" autocomplete=\"off\">\r\n </div>\r\n\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-5\">\r\n <label [for]=\"'fileType' + i\" class=\"form-label\">File Type <span class=\"alert-required\"></span></label>\r\n <input formControlName=\"fileType\" type=\"text\" class=\"form-control disabled-input\" [id]=\"'fileType' + i\"\r\n autocomplete=\"off\" [ngClass]=\"getReportDisabled(i)? 'disabled' : ''\">\r\n </div>\r\n\r\n\r\n <div class=\"col-md-12 col-lg-12 col-xl-12 col-xxl-12 mb-5\">\r\n <label [for]=\"'email' + i\" class=\"form-label\">Receivers Email <span class=\"alert-required\"></span></label>\r\n <div class=\"outer-container\">\r\n <div class=\"input-container form-control\" formArrayName=\"email\">\r\n <ng-container *ngFor=\"let email of getEmails(i)?.controls; let j = index\">\r\n <span class=\"chip\">\r\n <span class=\"me-3\">{{ email.value }}</span>\r\n <span *ngIf=\"reportConfigurationForm.enabled\" (click)=\"removeChip(i,j)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" (keydown)=\"onKeyDown($event,i)\" type=\"text\" id=\"emailValue\"\r\n [disabled]=\"getReportDisabled(i) === true\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!getReportDisabled(i)\">\r\n <div class=\"mb-5 w-100 footer-separator\"></div>\r\n <div class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4 align-content-center\" (click)=\"onCancel()\">Cancel</a>\r\n <button type=\"button\" class=\"btn btn-primary px-4\" (click)=\"onSubmit(report)\"><span>Save\r\n Changes</span></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</form>\r\n\r\n<div *ngIf=\"activeTab === 'custom'\">\r\n <ng-container *ngIf=\"customReportLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!customReportLoading && customReportNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <span class=\"text-muted\">No scheduled custom reports</span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!customReportLoading && !customReportNoData\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>Reports</th>\r\n <th>Schedule</th>\r\n <th>Receivers</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let template of customReportList\">\r\n <td>{{ template?.templateName }}</td>\r\n <td>{{ formatScheduleFrequency(template?.schedule?.frequency) }}</td>\r\n <td>{{ formatReceiverCount(template?.schedule?.receivers?.length) }}</td>\r\n <td>\r\n <span *ngIf=\"(gs.userAccess | async)?.TangoAdmin_Reports_isEdit\" class=\"me-3 cursor-pointer\"\r\n (click)=\"openEditScheduleModal(template)\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13410_52264_custom)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <g clip-path=\"url(#clip0_13410_52264_custom)\">\r\n <path\r\n d=\"M24.167 11.4999C24.3859 11.2811 24.6457 11.1074 24.9317 10.989C25.2176 10.8705 25.5241 10.8096 25.8337 10.8096C26.1432 10.8096 26.4497 10.8705 26.7357 10.989C27.0216 11.1074 27.2815 11.2811 27.5003 11.4999C27.7192 11.7188 27.8928 11.9786 28.0113 12.2646C28.1297 12.5506 28.1907 12.8571 28.1907 13.1666C28.1907 13.4761 28.1297 13.7826 28.0113 14.0686C27.8928 14.3546 27.7192 14.6144 27.5003 14.8333L16.2503 26.0833L11.667 27.3333L12.917 22.7499L24.167 11.4999Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13410_52264_custom\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13410_52264_custom\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13410_52264_custom\" result=\"shape\" />\r\n </filter>\r\n <clipPath id=\"clip0_13410_52264_custom\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(10 9)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"(gs.userAccess | async)?.TangoAdmin_Reports_isEdit\" class=\"cursor-pointer\"\r\n (click)=\"removeCustomReportSchedule(template)\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13252_178642_custom)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M12.5 14.0001H14.1667M14.1667 14.0001H27.5M14.1667 14.0001V25.6667C14.1667 26.1088 14.3423 26.5327 14.6548 26.8453C14.9674 27.1578 15.3913 27.3334 15.8333 27.3334H24.1667C24.6087 27.3334 25.0326 27.1578 25.3452 26.8453C25.6577 26.5327 25.8333 26.1088 25.8333 25.6667V14.0001H14.1667ZM16.6667 14.0001V12.3334C16.6667 11.8914 16.8423 11.4675 17.1548 11.1549C17.4674 10.8423 17.8913 10.6667 18.3333 10.6667H21.6667C22.1087 10.6667 22.5326 10.8423 22.8452 11.1549C23.1577 11.4675 23.3333 11.8914 23.3333 12.3334V14.0001M18.3333 18.1667V23.1667M21.6667 18.1667V23.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13252_178642_custom\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13252_178642_custom\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13252_178642_custom\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </ng-container>\r\n</div>", styles: [".form-control{display:block;height:45px;padding:.5rem 1rem;font-size:1.1rem;font-weight:400;color:var(--Gray-500, #667085);-webkit-appearance:none;appearance:none;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control[disabled]{background-color:#f9fafb!important}.is-invalid{border-radius:8px!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;padding-right:calc(1.5em + .75rem)!important;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzIyMDFfMjA5NTApIj4KPHBhdGggZD0iTTcuOTk5NjcgNS4zMzM5OFY4LjAwMDY1TTcuOTk5NjcgMTAuNjY3M0g4LjAwNjM0TTE0LjY2NjMgOC4wMDA2NUMxNC42NjYzIDExLjY4MjYgMTEuNjgxNiAxNC42NjczIDcuOTk5NjcgMTQuNjY3M0M0LjMxNzc4IDE0LjY2NzMgMS4zMzMwMSAxMS42ODI2IDEuMzMzMDEgOC4wMDA2NUMxLjMzMzAxIDQuMzE4NzUgNC4zMTc3OCAxLjMzMzk4IDcuOTk5NjcgMS4zMzM5OEMxMS42ODE2IDEuMzMzOTggMTQuNjY2MyA0LjMxODc1IDE0LjY2NjMgOC4wMDA2NVoiIHN0cm9rZT0iI0YwNDQzOCIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMjAxXzIwOTUwIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=)!important;background-repeat:no-repeat!important;background-position:right calc(.375em + .1875rem) center!important;background-size:calc(.75em + .375rem) calc(.75em + .375rem)!important}small{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:400!important;line-height:20px;display:block;margin-top:6px}.cancel{border-radius:8px;border:1px solid #D0D5DD;background:#fff;color:#344054;font-family:Inter;font-size:14px;font-weight:600;line-height:20px;text-transform:capitalize}.apply{color:#fff;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.footer-seperator{border-top:1px solid #EAECF0}:host{width:100%;height:100%}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.sso-label{color:var(--Gray-700, #344054);font-family:Inter;font-size:18px;font-weight:600;line-height:28px}.sso-sub{color:var(--Gray-500, #667085);font-family:Inter;font-size:16px;font-weight:500;line-height:24px}.disabled{background-color:#f9fafb!important;pointer-events:none!important}.report-config-tabs{display:inline-flex;padding:4px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--Gray-50, #F9FAFB)}.report-config-tab{display:inline-flex;align-items:center;padding:6px 16px;border-radius:6px;color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.report-config-tab .tab-count{margin-left:8px;color:inherit;font-size:12px;font-weight:600}.report-config-tab.active{background:var(--primary-50, #EAF8FF);color:var(--primary-600, #00A3FF)}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }] });
285
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ReportConfigurationComponent, selector: "lib-report-configuration", ngImport: i0, template: "<div class=\"report-config-tabs mb-6\">\r\n <span class=\"report-config-tab\" [ngClass]=\"activeTab === 'regular' ? 'active' : ''\" (click)=\"selectTab('regular')\">\r\n Regular\r\n <span class=\"tab-count\">{{ reportsFormArray.controls.length }}</span>\r\n </span>\r\n <span class=\"report-config-tab\" [ngClass]=\"activeTab === 'custom' ? 'active' : ''\" (click)=\"selectTab('custom')\">\r\n Custom\r\n <span class=\"tab-count\">{{ customReportList.length }}</span>\r\n </span>\r\n</div>\r\n\r\n<form *ngIf=\"activeTab === 'regular'\" [formGroup]=\"reportConfigurationForm\">\r\n <div class=\"row\">\r\n <ng-container *ngIf=\"(gs.userAccess | async)?.TangoAdmin_Reports_isEdit\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"d-flex justify-content-end\">\r\n <button (click)=\"openAddModal()\" type=\"button\"\r\n class=\"btn btn-primary align-items-end\">\r\n <span class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0003 4.16663V15.8333M4.16699 9.99996H15.8337\" stroke=\"white\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n Add Report\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"loading\">\r\n <div\r\n class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"noData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\"\r\n src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container formArrayName=\"reports\">\r\n <ng-container *ngFor=\"let report of reportsFormArray.controls; let i = index\" [formGroupName]=\"i\">\r\n <div *ngIf=\"(gs.userAccess | async)?.TangoAdmin_Reports_isEdit\" class=\"d-flex justify-content-end mt-5\">\r\n <div *ngIf=\"getReportDisabled(i)\" (click)=\"enableForm(i)\" type=\"button\"\r\n class=\" align-items-end\">\r\n <span class=\"me-2\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13410_52264)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <g clip-path=\"url(#clip0_13410_52264)\">\r\n <path\r\n d=\"M24.167 11.4999C24.3859 11.2811 24.6457 11.1074 24.9317 10.989C25.2176 10.8705 25.5241 10.8096 25.8337 10.8096C26.1432 10.8096 26.4497 10.8705 26.7357 10.989C27.0216 11.1074 27.2815 11.2811 27.5003 11.4999C27.7192 11.7188 27.8928 11.9786 28.0113 12.2646C28.1297 12.5506 28.1907 12.8571 28.1907 13.1666C28.1907 13.4761 28.1297 13.7826 28.0113 14.0686C27.8928 14.3546 27.7192 14.6144 27.5003 14.8333L16.2503 26.0833L11.667 27.3333L12.917 22.7499L24.167 11.4999Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13410_52264\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13410_52264\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13410_52264\" result=\"shape\" />\r\n </filter>\r\n <clipPath id=\"clip0_13410_52264\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(10 9)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n \r\n <div *ngIf=\"getReportDisabled(i)\" (click)=\"deleteReport(report)\"\r\n class=\"align-items-end cursor-pointer\">\r\n <span class=\"me-2\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13252_178642)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M12.5 14.0001H14.1667M14.1667 14.0001H27.5M14.1667 14.0001V25.6667C14.1667 26.1088 14.3423 26.5327 14.6548 26.8453C14.9674 27.1578 15.3913 27.3334 15.8333 27.3334H24.1667C24.6087 27.3334 25.0326 27.1578 25.3452 26.8453C25.6577 26.5327 25.8333 26.1088 25.8333 25.6667V14.0001H14.1667ZM16.6667 14.0001V12.3334C16.6667 11.8914 16.8423 11.4675 17.1548 11.1549C17.4674 10.8423 17.8913 10.6667 18.3333 10.6667H21.6667C22.1087 10.6667 22.5326 10.8423 22.8452 11.1549C23.1577 11.4675 23.3333 11.8914 23.3333 12.3334V14.0001M18.3333 18.1667V23.1667M21.6667 18.1667V23.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13252_178642\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13252_178642\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13252_178642\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n\r\n </div>\r\n \r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-5\">\r\n <label [for]=\"'reportName' + i\" class=\"form-label\">Report Name <span class=\"alert-required\"></span></label>\r\n <input formControlName=\"reportName\" type=\"text\" class=\"form-control disabled\" [id]=\"'reportName' + i\" autocomplete=\"off\">\r\n </div>\r\n\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-5\">\r\n <label [for]=\"'fileType' + i\" class=\"form-label\">File Type <span class=\"alert-required\"></span></label>\r\n <input formControlName=\"fileType\" type=\"text\" class=\"form-control disabled-input\" [id]=\"'fileType' + i\"\r\n autocomplete=\"off\" [ngClass]=\"getReportDisabled(i)? 'disabled' : ''\">\r\n </div>\r\n\r\n\r\n <div class=\"col-md-12 col-lg-12 col-xl-12 col-xxl-12 mb-5\">\r\n <label [for]=\"'email' + i\" class=\"form-label\">Receivers Email <span class=\"alert-required\"></span></label>\r\n <div class=\"outer-container\">\r\n <div class=\"input-container form-control\" formArrayName=\"email\">\r\n <ng-container *ngFor=\"let email of getEmails(i)?.controls; let j = index\">\r\n <span class=\"chip\">\r\n <span class=\"me-3\">{{ email.value }}</span>\r\n <span *ngIf=\"reportConfigurationForm.enabled\" (click)=\"removeChip(i,j)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" (keydown)=\"onKeyDown($event,i)\" type=\"text\" id=\"emailValue\"\r\n [disabled]=\"getReportDisabled(i) === true\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!getReportDisabled(i)\">\r\n <div class=\"mb-5 w-100 footer-separator\"></div>\r\n <div class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4 align-content-center\" (click)=\"onCancel()\">Cancel</a>\r\n <button type=\"button\" class=\"btn btn-primary px-4\" (click)=\"onSubmit(report)\"><span>Save\r\n Changes</span></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</form>\r\n\r\n<div *ngIf=\"activeTab === 'custom'\">\r\n <ng-container *ngIf=\"customReportLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!customReportLoading && customReportNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <span class=\"text-muted\">No scheduled custom reports</span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!customReportLoading && !customReportNoData\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>Reports</th>\r\n <th>Schedule</th>\r\n <th>Receivers</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let template of customReportList\">\r\n <td>{{ template?.templateName }}</td>\r\n <td>{{ formatScheduleFrequency(template?.schedule?.frequency) }}</td>\r\n <td>{{ formatReceiverCount(template?.schedule?.receivers?.length) }}</td>\r\n <td>\r\n <!-- Custom-tab actions follow Global Configuration edit access, the same\r\n flag every other settings-configuration screen gates its edits on. -->\r\n <span *ngIf=\"(gs.userAccess | async)?.Global_Configuration_isEdit\" class=\"me-3 cursor-pointer\"\r\n (click)=\"openEditScheduleModal(template)\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13410_52264_custom)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <g clip-path=\"url(#clip0_13410_52264_custom)\">\r\n <path\r\n d=\"M24.167 11.4999C24.3859 11.2811 24.6457 11.1074 24.9317 10.989C25.2176 10.8705 25.5241 10.8096 25.8337 10.8096C26.1432 10.8096 26.4497 10.8705 26.7357 10.989C27.0216 11.1074 27.2815 11.2811 27.5003 11.4999C27.7192 11.7188 27.8928 11.9786 28.0113 12.2646C28.1297 12.5506 28.1907 12.8571 28.1907 13.1666C28.1907 13.4761 28.1297 13.7826 28.0113 14.0686C27.8928 14.3546 27.7192 14.6144 27.5003 14.8333L16.2503 26.0833L11.667 27.3333L12.917 22.7499L24.167 11.4999Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13410_52264_custom\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13410_52264_custom\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13410_52264_custom\" result=\"shape\" />\r\n </filter>\r\n <clipPath id=\"clip0_13410_52264_custom\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(10 9)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"(gs.userAccess | async)?.Global_Configuration_isEdit\" class=\"cursor-pointer\"\r\n (click)=\"removeCustomReportSchedule(template)\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13252_178642_custom)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M12.5 14.0001H14.1667M14.1667 14.0001H27.5M14.1667 14.0001V25.6667C14.1667 26.1088 14.3423 26.5327 14.6548 26.8453C14.9674 27.1578 15.3913 27.3334 15.8333 27.3334H24.1667C24.6087 27.3334 25.0326 27.1578 25.3452 26.8453C25.6577 26.5327 25.8333 26.1088 25.8333 25.6667V14.0001H14.1667ZM16.6667 14.0001V12.3334C16.6667 11.8914 16.8423 11.4675 17.1548 11.1549C17.4674 10.8423 17.8913 10.6667 18.3333 10.6667H21.6667C22.1087 10.6667 22.5326 10.8423 22.8452 11.1549C23.1577 11.4675 23.3333 11.8914 23.3333 12.3334V14.0001M18.3333 18.1667V23.1667M21.6667 18.1667V23.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13252_178642_custom\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13252_178642_custom\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13252_178642_custom\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </ng-container>\r\n</div>", styles: [".form-control{display:block;height:45px;padding:.5rem 1rem;font-size:1.1rem;font-weight:400;color:var(--Gray-500, #667085);-webkit-appearance:none;appearance:none;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control[disabled]{background-color:#f9fafb!important}.is-invalid{border-radius:8px!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;padding-right:calc(1.5em + .75rem)!important;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzIyMDFfMjA5NTApIj4KPHBhdGggZD0iTTcuOTk5NjcgNS4zMzM5OFY4LjAwMDY1TTcuOTk5NjcgMTAuNjY3M0g4LjAwNjM0TTE0LjY2NjMgOC4wMDA2NUMxNC42NjYzIDExLjY4MjYgMTEuNjgxNiAxNC42NjczIDcuOTk5NjcgMTQuNjY3M0M0LjMxNzc4IDE0LjY2NzMgMS4zMzMwMSAxMS42ODI2IDEuMzMzMDEgOC4wMDA2NUMxLjMzMzAxIDQuMzE4NzUgNC4zMTc3OCAxLjMzMzk4IDcuOTk5NjcgMS4zMzM5OEMxMS42ODE2IDEuMzMzOTggMTQuNjY2MyA0LjMxODc1IDE0LjY2NjMgOC4wMDA2NVoiIHN0cm9rZT0iI0YwNDQzOCIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMjAxXzIwOTUwIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=)!important;background-repeat:no-repeat!important;background-position:right calc(.375em + .1875rem) center!important;background-size:calc(.75em + .375rem) calc(.75em + .375rem)!important}small{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:400!important;line-height:20px;display:block;margin-top:6px}.cancel{border-radius:8px;border:1px solid #D0D5DD;background:#fff;color:#344054;font-family:Inter;font-size:14px;font-weight:600;line-height:20px;text-transform:capitalize}.apply{color:#fff;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.footer-seperator{border-top:1px solid #EAECF0}:host{width:100%;height:100%}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.sso-label{color:var(--Gray-700, #344054);font-family:Inter;font-size:18px;font-weight:600;line-height:28px}.sso-sub{color:var(--Gray-500, #667085);font-family:Inter;font-size:16px;font-weight:500;line-height:24px}.disabled{background-color:#f9fafb!important;pointer-events:none!important}.report-config-tabs{display:inline-flex;padding:4px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--Gray-50, #F9FAFB)}.report-config-tab{display:inline-flex;align-items:center;padding:6px 16px;border-radius:6px;color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.report-config-tab .tab-count{margin-left:8px;color:inherit;font-size:12px;font-weight:600}.report-config-tab.active{background:var(--primary-50, #EAF8FF);color:var(--primary-600, #00A3FF)}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }] });
284
286
  }
285
287
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReportConfigurationComponent, decorators: [{
286
288
  type: Component,
287
- args: [{ selector: 'lib-report-configuration', template: "<div class=\"report-config-tabs mb-6\">\r\n <span class=\"report-config-tab\" [ngClass]=\"activeTab === 'regular' ? 'active' : ''\" (click)=\"selectTab('regular')\">\r\n Regular\r\n <span class=\"tab-count\">{{ reportsFormArray.controls.length }}</span>\r\n </span>\r\n <span class=\"report-config-tab\" [ngClass]=\"activeTab === 'custom' ? 'active' : ''\" (click)=\"selectTab('custom')\">\r\n Custom\r\n <span class=\"tab-count\">{{ customReportList.length }}</span>\r\n </span>\r\n</div>\r\n\r\n<form *ngIf=\"activeTab === 'regular'\" [formGroup]=\"reportConfigurationForm\">\r\n <div class=\"row\">\r\n <ng-container *ngIf=\"(gs.userAccess | async)?.TangoAdmin_Reports_isEdit\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"d-flex justify-content-end\">\r\n <button (click)=\"openAddModal()\" type=\"button\"\r\n class=\"btn btn-primary align-items-end\">\r\n <span class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0003 4.16663V15.8333M4.16699 9.99996H15.8337\" stroke=\"white\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n Add Report\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"loading\">\r\n <div\r\n class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"noData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\"\r\n src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container formArrayName=\"reports\">\r\n <ng-container *ngFor=\"let report of reportsFormArray.controls; let i = index\" [formGroupName]=\"i\">\r\n <div *ngIf=\"(gs.userAccess | async)?.TangoAdmin_Reports_isEdit\" class=\"d-flex justify-content-end mt-5\">\r\n <div *ngIf=\"getReportDisabled(i)\" (click)=\"enableForm(i)\" type=\"button\"\r\n class=\" align-items-end\">\r\n <span class=\"me-2\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13410_52264)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <g clip-path=\"url(#clip0_13410_52264)\">\r\n <path\r\n d=\"M24.167 11.4999C24.3859 11.2811 24.6457 11.1074 24.9317 10.989C25.2176 10.8705 25.5241 10.8096 25.8337 10.8096C26.1432 10.8096 26.4497 10.8705 26.7357 10.989C27.0216 11.1074 27.2815 11.2811 27.5003 11.4999C27.7192 11.7188 27.8928 11.9786 28.0113 12.2646C28.1297 12.5506 28.1907 12.8571 28.1907 13.1666C28.1907 13.4761 28.1297 13.7826 28.0113 14.0686C27.8928 14.3546 27.7192 14.6144 27.5003 14.8333L16.2503 26.0833L11.667 27.3333L12.917 22.7499L24.167 11.4999Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13410_52264\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13410_52264\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13410_52264\" result=\"shape\" />\r\n </filter>\r\n <clipPath id=\"clip0_13410_52264\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(10 9)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n \r\n <div *ngIf=\"getReportDisabled(i)\" (click)=\"deleteReport(report)\"\r\n class=\"align-items-end cursor-pointer\">\r\n <span class=\"me-2\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13252_178642)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M12.5 14.0001H14.1667M14.1667 14.0001H27.5M14.1667 14.0001V25.6667C14.1667 26.1088 14.3423 26.5327 14.6548 26.8453C14.9674 27.1578 15.3913 27.3334 15.8333 27.3334H24.1667C24.6087 27.3334 25.0326 27.1578 25.3452 26.8453C25.6577 26.5327 25.8333 26.1088 25.8333 25.6667V14.0001H14.1667ZM16.6667 14.0001V12.3334C16.6667 11.8914 16.8423 11.4675 17.1548 11.1549C17.4674 10.8423 17.8913 10.6667 18.3333 10.6667H21.6667C22.1087 10.6667 22.5326 10.8423 22.8452 11.1549C23.1577 11.4675 23.3333 11.8914 23.3333 12.3334V14.0001M18.3333 18.1667V23.1667M21.6667 18.1667V23.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13252_178642\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13252_178642\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13252_178642\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n\r\n </div>\r\n \r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-5\">\r\n <label [for]=\"'reportName' + i\" class=\"form-label\">Report Name <span class=\"alert-required\"></span></label>\r\n <input formControlName=\"reportName\" type=\"text\" class=\"form-control disabled\" [id]=\"'reportName' + i\" autocomplete=\"off\">\r\n </div>\r\n\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-5\">\r\n <label [for]=\"'fileType' + i\" class=\"form-label\">File Type <span class=\"alert-required\"></span></label>\r\n <input formControlName=\"fileType\" type=\"text\" class=\"form-control disabled-input\" [id]=\"'fileType' + i\"\r\n autocomplete=\"off\" [ngClass]=\"getReportDisabled(i)? 'disabled' : ''\">\r\n </div>\r\n\r\n\r\n <div class=\"col-md-12 col-lg-12 col-xl-12 col-xxl-12 mb-5\">\r\n <label [for]=\"'email' + i\" class=\"form-label\">Receivers Email <span class=\"alert-required\"></span></label>\r\n <div class=\"outer-container\">\r\n <div class=\"input-container form-control\" formArrayName=\"email\">\r\n <ng-container *ngFor=\"let email of getEmails(i)?.controls; let j = index\">\r\n <span class=\"chip\">\r\n <span class=\"me-3\">{{ email.value }}</span>\r\n <span *ngIf=\"reportConfigurationForm.enabled\" (click)=\"removeChip(i,j)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" (keydown)=\"onKeyDown($event,i)\" type=\"text\" id=\"emailValue\"\r\n [disabled]=\"getReportDisabled(i) === true\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!getReportDisabled(i)\">\r\n <div class=\"mb-5 w-100 footer-separator\"></div>\r\n <div class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4 align-content-center\" (click)=\"onCancel()\">Cancel</a>\r\n <button type=\"button\" class=\"btn btn-primary px-4\" (click)=\"onSubmit(report)\"><span>Save\r\n Changes</span></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</form>\r\n\r\n<div *ngIf=\"activeTab === 'custom'\">\r\n <ng-container *ngIf=\"customReportLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!customReportLoading && customReportNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <span class=\"text-muted\">No scheduled custom reports</span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!customReportLoading && !customReportNoData\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>Reports</th>\r\n <th>Schedule</th>\r\n <th>Receivers</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let template of customReportList\">\r\n <td>{{ template?.templateName }}</td>\r\n <td>{{ formatScheduleFrequency(template?.schedule?.frequency) }}</td>\r\n <td>{{ formatReceiverCount(template?.schedule?.receivers?.length) }}</td>\r\n <td>\r\n <span *ngIf=\"(gs.userAccess | async)?.TangoAdmin_Reports_isEdit\" class=\"me-3 cursor-pointer\"\r\n (click)=\"openEditScheduleModal(template)\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13410_52264_custom)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <g clip-path=\"url(#clip0_13410_52264_custom)\">\r\n <path\r\n d=\"M24.167 11.4999C24.3859 11.2811 24.6457 11.1074 24.9317 10.989C25.2176 10.8705 25.5241 10.8096 25.8337 10.8096C26.1432 10.8096 26.4497 10.8705 26.7357 10.989C27.0216 11.1074 27.2815 11.2811 27.5003 11.4999C27.7192 11.7188 27.8928 11.9786 28.0113 12.2646C28.1297 12.5506 28.1907 12.8571 28.1907 13.1666C28.1907 13.4761 28.1297 13.7826 28.0113 14.0686C27.8928 14.3546 27.7192 14.6144 27.5003 14.8333L16.2503 26.0833L11.667 27.3333L12.917 22.7499L24.167 11.4999Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13410_52264_custom\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13410_52264_custom\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13410_52264_custom\" result=\"shape\" />\r\n </filter>\r\n <clipPath id=\"clip0_13410_52264_custom\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(10 9)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"(gs.userAccess | async)?.TangoAdmin_Reports_isEdit\" class=\"cursor-pointer\"\r\n (click)=\"removeCustomReportSchedule(template)\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13252_178642_custom)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M12.5 14.0001H14.1667M14.1667 14.0001H27.5M14.1667 14.0001V25.6667C14.1667 26.1088 14.3423 26.5327 14.6548 26.8453C14.9674 27.1578 15.3913 27.3334 15.8333 27.3334H24.1667C24.6087 27.3334 25.0326 27.1578 25.3452 26.8453C25.6577 26.5327 25.8333 26.1088 25.8333 25.6667V14.0001H14.1667ZM16.6667 14.0001V12.3334C16.6667 11.8914 16.8423 11.4675 17.1548 11.1549C17.4674 10.8423 17.8913 10.6667 18.3333 10.6667H21.6667C22.1087 10.6667 22.5326 10.8423 22.8452 11.1549C23.1577 11.4675 23.3333 11.8914 23.3333 12.3334V14.0001M18.3333 18.1667V23.1667M21.6667 18.1667V23.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13252_178642_custom\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13252_178642_custom\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13252_178642_custom\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </ng-container>\r\n</div>", styles: [".form-control{display:block;height:45px;padding:.5rem 1rem;font-size:1.1rem;font-weight:400;color:var(--Gray-500, #667085);-webkit-appearance:none;appearance:none;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control[disabled]{background-color:#f9fafb!important}.is-invalid{border-radius:8px!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;padding-right:calc(1.5em + .75rem)!important;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzIyMDFfMjA5NTApIj4KPHBhdGggZD0iTTcuOTk5NjcgNS4zMzM5OFY4LjAwMDY1TTcuOTk5NjcgMTAuNjY3M0g4LjAwNjM0TTE0LjY2NjMgOC4wMDA2NUMxNC42NjYzIDExLjY4MjYgMTEuNjgxNiAxNC42NjczIDcuOTk5NjcgMTQuNjY3M0M0LjMxNzc4IDE0LjY2NzMgMS4zMzMwMSAxMS42ODI2IDEuMzMzMDEgOC4wMDA2NUMxLjMzMzAxIDQuMzE4NzUgNC4zMTc3OCAxLjMzMzk4IDcuOTk5NjcgMS4zMzM5OEMxMS42ODE2IDEuMzMzOTggMTQuNjY2MyA0LjMxODc1IDE0LjY2NjMgOC4wMDA2NVoiIHN0cm9rZT0iI0YwNDQzOCIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMjAxXzIwOTUwIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=)!important;background-repeat:no-repeat!important;background-position:right calc(.375em + .1875rem) center!important;background-size:calc(.75em + .375rem) calc(.75em + .375rem)!important}small{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:400!important;line-height:20px;display:block;margin-top:6px}.cancel{border-radius:8px;border:1px solid #D0D5DD;background:#fff;color:#344054;font-family:Inter;font-size:14px;font-weight:600;line-height:20px;text-transform:capitalize}.apply{color:#fff;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.footer-seperator{border-top:1px solid #EAECF0}:host{width:100%;height:100%}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.sso-label{color:var(--Gray-700, #344054);font-family:Inter;font-size:18px;font-weight:600;line-height:28px}.sso-sub{color:var(--Gray-500, #667085);font-family:Inter;font-size:16px;font-weight:500;line-height:24px}.disabled{background-color:#f9fafb!important;pointer-events:none!important}.report-config-tabs{display:inline-flex;padding:4px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--Gray-50, #F9FAFB)}.report-config-tab{display:inline-flex;align-items:center;padding:6px 16px;border-radius:6px;color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.report-config-tab .tab-count{margin-left:8px;color:inherit;font-size:12px;font-weight:600}.report-config-tab.active{background:var(--primary-50, #EAF8FF);color:var(--primary-600, #00A3FF)}\n"] }]
289
+ args: [{ selector: 'lib-report-configuration', template: "<div class=\"report-config-tabs mb-6\">\r\n <span class=\"report-config-tab\" [ngClass]=\"activeTab === 'regular' ? 'active' : ''\" (click)=\"selectTab('regular')\">\r\n Regular\r\n <span class=\"tab-count\">{{ reportsFormArray.controls.length }}</span>\r\n </span>\r\n <span class=\"report-config-tab\" [ngClass]=\"activeTab === 'custom' ? 'active' : ''\" (click)=\"selectTab('custom')\">\r\n Custom\r\n <span class=\"tab-count\">{{ customReportList.length }}</span>\r\n </span>\r\n</div>\r\n\r\n<form *ngIf=\"activeTab === 'regular'\" [formGroup]=\"reportConfigurationForm\">\r\n <div class=\"row\">\r\n <ng-container *ngIf=\"(gs.userAccess | async)?.TangoAdmin_Reports_isEdit\">\r\n <div class=\"col-12 mb-5\">\r\n <div class=\"d-flex justify-content-end\">\r\n <button (click)=\"openAddModal()\" type=\"button\"\r\n class=\"btn btn-primary align-items-end\">\r\n <span class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0003 4.16663V15.8333M4.16699 9.99996H15.8337\" stroke=\"white\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n Add Report\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"loading\">\r\n <div\r\n class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"noData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src w-25\"\r\n src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container formArrayName=\"reports\">\r\n <ng-container *ngFor=\"let report of reportsFormArray.controls; let i = index\" [formGroupName]=\"i\">\r\n <div *ngIf=\"(gs.userAccess | async)?.TangoAdmin_Reports_isEdit\" class=\"d-flex justify-content-end mt-5\">\r\n <div *ngIf=\"getReportDisabled(i)\" (click)=\"enableForm(i)\" type=\"button\"\r\n class=\" align-items-end\">\r\n <span class=\"me-2\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13410_52264)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <g clip-path=\"url(#clip0_13410_52264)\">\r\n <path\r\n d=\"M24.167 11.4999C24.3859 11.2811 24.6457 11.1074 24.9317 10.989C25.2176 10.8705 25.5241 10.8096 25.8337 10.8096C26.1432 10.8096 26.4497 10.8705 26.7357 10.989C27.0216 11.1074 27.2815 11.2811 27.5003 11.4999C27.7192 11.7188 27.8928 11.9786 28.0113 12.2646C28.1297 12.5506 28.1907 12.8571 28.1907 13.1666C28.1907 13.4761 28.1297 13.7826 28.0113 14.0686C27.8928 14.3546 27.7192 14.6144 27.5003 14.8333L16.2503 26.0833L11.667 27.3333L12.917 22.7499L24.167 11.4999Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13410_52264\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13410_52264\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13410_52264\" result=\"shape\" />\r\n </filter>\r\n <clipPath id=\"clip0_13410_52264\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(10 9)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n </div>\r\n \r\n <div *ngIf=\"getReportDisabled(i)\" (click)=\"deleteReport(report)\"\r\n class=\"align-items-end cursor-pointer\">\r\n <span class=\"me-2\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13252_178642)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M12.5 14.0001H14.1667M14.1667 14.0001H27.5M14.1667 14.0001V25.6667C14.1667 26.1088 14.3423 26.5327 14.6548 26.8453C14.9674 27.1578 15.3913 27.3334 15.8333 27.3334H24.1667C24.6087 27.3334 25.0326 27.1578 25.3452 26.8453C25.6577 26.5327 25.8333 26.1088 25.8333 25.6667V14.0001H14.1667ZM16.6667 14.0001V12.3334C16.6667 11.8914 16.8423 11.4675 17.1548 11.1549C17.4674 10.8423 17.8913 10.6667 18.3333 10.6667H21.6667C22.1087 10.6667 22.5326 10.8423 22.8452 11.1549C23.1577 11.4675 23.3333 11.8914 23.3333 12.3334V14.0001M18.3333 18.1667V23.1667M21.6667 18.1667V23.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13252_178642\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13252_178642\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13252_178642\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg></span>\r\n </div>\r\n\r\n </div>\r\n \r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-5\">\r\n <label [for]=\"'reportName' + i\" class=\"form-label\">Report Name <span class=\"alert-required\"></span></label>\r\n <input formControlName=\"reportName\" type=\"text\" class=\"form-control disabled\" [id]=\"'reportName' + i\" autocomplete=\"off\">\r\n </div>\r\n\r\n <div class=\"col-md-12 col-lg-6 col-xl-6 col-xxl-6 mb-5\">\r\n <label [for]=\"'fileType' + i\" class=\"form-label\">File Type <span class=\"alert-required\"></span></label>\r\n <input formControlName=\"fileType\" type=\"text\" class=\"form-control disabled-input\" [id]=\"'fileType' + i\"\r\n autocomplete=\"off\" [ngClass]=\"getReportDisabled(i)? 'disabled' : ''\">\r\n </div>\r\n\r\n\r\n <div class=\"col-md-12 col-lg-12 col-xl-12 col-xxl-12 mb-5\">\r\n <label [for]=\"'email' + i\" class=\"form-label\">Receivers Email <span class=\"alert-required\"></span></label>\r\n <div class=\"outer-container\">\r\n <div class=\"input-container form-control\" formArrayName=\"email\">\r\n <ng-container *ngFor=\"let email of getEmails(i)?.controls; let j = index\">\r\n <span class=\"chip\">\r\n <span class=\"me-3\">{{ email.value }}</span>\r\n <span *ngIf=\"reportConfigurationForm.enabled\" (click)=\"removeChip(i,j)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" (keydown)=\"onKeyDown($event,i)\" type=\"text\" id=\"emailValue\"\r\n [disabled]=\"getReportDisabled(i) === true\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!getReportDisabled(i)\">\r\n <div class=\"mb-5 w-100 footer-separator\"></div>\r\n <div class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4 align-content-center\" (click)=\"onCancel()\">Cancel</a>\r\n <button type=\"button\" class=\"btn btn-primary px-4\" (click)=\"onSubmit(report)\"><span>Save\r\n Changes</span></button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</form>\r\n\r\n<div *ngIf=\"activeTab === 'custom'\">\r\n <ng-container *ngIf=\"customReportLoading\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!customReportLoading && customReportNoData\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <span class=\"text-muted\">No scheduled custom reports</span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!customReportLoading && !customReportNoData\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>Reports</th>\r\n <th>Schedule</th>\r\n <th>Receivers</th>\r\n <th>Action</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let template of customReportList\">\r\n <td>{{ template?.templateName }}</td>\r\n <td>{{ formatScheduleFrequency(template?.schedule?.frequency) }}</td>\r\n <td>{{ formatReceiverCount(template?.schedule?.receivers?.length) }}</td>\r\n <td>\r\n <!-- Custom-tab actions follow Global Configuration edit access, the same\r\n flag every other settings-configuration screen gates its edits on. -->\r\n <span *ngIf=\"(gs.userAccess | async)?.Global_Configuration_isEdit\" class=\"me-3 cursor-pointer\"\r\n (click)=\"openEditScheduleModal(template)\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13410_52264_custom)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <g clip-path=\"url(#clip0_13410_52264_custom)\">\r\n <path\r\n d=\"M24.167 11.4999C24.3859 11.2811 24.6457 11.1074 24.9317 10.989C25.2176 10.8705 25.5241 10.8096 25.8337 10.8096C26.1432 10.8096 26.4497 10.8705 26.7357 10.989C27.0216 11.1074 27.2815 11.2811 27.5003 11.4999C27.7192 11.7188 27.8928 11.9786 28.0113 12.2646C28.1297 12.5506 28.1907 12.8571 28.1907 13.1666C28.1907 13.4761 28.1297 13.7826 28.0113 14.0686C27.8928 14.3546 27.7192 14.6144 27.5003 14.8333L16.2503 26.0833L11.667 27.3333L12.917 22.7499L24.167 11.4999Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13410_52264_custom\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13410_52264_custom\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13410_52264_custom\" result=\"shape\" />\r\n </filter>\r\n <clipPath id=\"clip0_13410_52264_custom\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(10 9)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"(gs.userAccess | async)?.Global_Configuration_isEdit\" class=\"cursor-pointer\"\r\n (click)=\"removeCustomReportSchedule(template)\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_13252_178642_custom)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M12.5 14.0001H14.1667M14.1667 14.0001H27.5M14.1667 14.0001V25.6667C14.1667 26.1088 14.3423 26.5327 14.6548 26.8453C14.9674 27.1578 15.3913 27.3334 15.8333 27.3334H24.1667C24.6087 27.3334 25.0326 27.1578 25.3452 26.8453C25.6577 26.5327 25.8333 26.1088 25.8333 25.6667V14.0001H14.1667ZM16.6667 14.0001V12.3334C16.6667 11.8914 16.8423 11.4675 17.1548 11.1549C17.4674 10.8423 17.8913 10.6667 18.3333 10.6667H21.6667C22.1087 10.6667 22.5326 10.8423 22.8452 11.1549C23.1577 11.4675 23.3333 11.8914 23.3333 12.3334V14.0001M18.3333 18.1667V23.1667M21.6667 18.1667V23.1667\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_13252_178642_custom\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_13252_178642_custom\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_13252_178642_custom\" result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </ng-container>\r\n</div>", styles: [".form-control{display:block;height:45px;padding:.5rem 1rem;font-size:1.1rem;font-weight:400;color:var(--Gray-500, #667085);-webkit-appearance:none;appearance:none;border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control[disabled]{background-color:#f9fafb!important}.is-invalid{border-radius:8px!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;padding-right:calc(1.5em + .75rem)!important;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzIyMDFfMjA5NTApIj4KPHBhdGggZD0iTTcuOTk5NjcgNS4zMzM5OFY4LjAwMDY1TTcuOTk5NjcgMTAuNjY3M0g4LjAwNjM0TTE0LjY2NjMgOC4wMDA2NUMxNC42NjYzIDExLjY4MjYgMTEuNjgxNiAxNC42NjczIDcuOTk5NjcgMTQuNjY3M0M0LjMxNzc4IDE0LjY2NzMgMS4zMzMwMSAxMS42ODI2IDEuMzMzMDEgOC4wMDA2NUMxLjMzMzAxIDQuMzE4NzUgNC4zMTc3OCAxLjMzMzk4IDcuOTk5NjcgMS4zMzM5OEMxMS42ODE2IDEuMzMzOTggMTQuNjY2MyA0LjMxODc1IDE0LjY2NjMgOC4wMDA2NVoiIHN0cm9rZT0iI0YwNDQzOCIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMjAxXzIwOTUwIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=)!important;background-repeat:no-repeat!important;background-position:right calc(.375em + .1875rem) center!important;background-size:calc(.75em + .375rem) calc(.75em + .375rem)!important}small{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:400!important;line-height:20px;display:block;margin-top:6px}.cancel{border-radius:8px;border:1px solid #D0D5DD;background:#fff;color:#344054;font-family:Inter;font-size:14px;font-weight:600;line-height:20px;text-transform:capitalize}.apply{color:#fff;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.footer-seperator{border-top:1px solid #EAECF0}:host{width:100%;height:100%}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.sso-label{color:var(--Gray-700, #344054);font-family:Inter;font-size:18px;font-weight:600;line-height:28px}.sso-sub{color:var(--Gray-500, #667085);font-family:Inter;font-size:16px;font-weight:500;line-height:24px}.disabled{background-color:#f9fafb!important;pointer-events:none!important}.report-config-tabs{display:inline-flex;padding:4px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--Gray-50, #F9FAFB)}.report-config-tab{display:inline-flex;align-items:center;padding:6px 16px;border-radius:6px;color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;cursor:pointer}.report-config-tab .tab-count{margin-left:8px;color:inherit;font-size:12px;font-weight:600}.report-config-tab.active{background:var(--primary-50, #EAF8FF);color:var(--primary-600, #00A3FF)}\n"] }]
288
290
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ClientApiService }, { type: i3.NgbModal }, { type: i4.ToastService }, { type: i0.ChangeDetectorRef }, { type: i5.GlobalStateService }] });
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXNldHRpbmdzL3NyYy9saWIvY29tcG9uZW50cy9jb25maWd1cmF0aW9ucy9yZXBvcnQtY29uZmlndXJhdGlvbi9yZXBvcnQtY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL3JlcG9ydC1jb25maWd1cmF0aW9uL3JlcG9ydC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBMEIsVUFBVSxFQUE4QixNQUFNLGdCQUFnQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7OztBQVNqRixNQUFNLE9BQU8sNEJBQTRCO0lBa0JuQjtJQUF5QjtJQUFzQztJQUFnQztJQUN6RztJQUE2QjtJQWpCdkMsdUJBQXVCLENBQVk7SUFDbkMsU0FBUyxHQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDekIsVUFBVSxHQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDMUIsZUFBZSxHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFB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QUMsSUFBSSxDQUFDLFFBQVE7U0FDdkIsQ0FBQTtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNGLElBQUksRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFO2dCQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7Z0JBQzVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFBO1lBQ3BHLENBQUM7WUFDRCxLQUFLLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRTtnQkFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO3dHQTdSVSw0QkFBNEI7NEZBQTVCLDRCQUE0QixnRUNoQnpDLCtxaUJBeVJNOzs0RkR6UU8sNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyLCBWYWxpZGF0b3JzLCBGb3JtQXJyYXksIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBzd2l0Y2hNYXAsIG1hcCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENsaWVudEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jbGllbnQtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQWRkUmVwb3J0Q29tcG9uZW50IH0gZnJvbSAnLi9hZGQtcmVwb3J0L2FkZC1yZXBvcnQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ3VzdG9tUmVwb3J0U2NoZWR1bGVDb21wb25lbnQgfSBmcm9tICcuL2N1c3RvbS1yZXBvcnQtc2NoZWR1bGUvY3VzdG9tLXJlcG9ydC1zY2hlZHVsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3Rpb25Qb3B1cENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2FjdGlvbi1wb3B1cC9hY3Rpb24tcG9wdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItcmVwb3J0LWNvbmZpZ3VyYXRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXBvcnQtY29uZmlndXJhdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3JlcG9ydC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVwb3J0Q29uZmlndXJhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIHJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtOiBGb3JtR3JvdXA7XHJcbiAgZW1haWxMaXN0OiBhbnkgPSBbXSA9IFtdO1xyXG4gIHJlcG9ydExpc3Q6IGFueSA9IFtdID0gW107XHJcbiAgJGVtYWlsSW50ZXJydXB0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKVxyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRSZXBvcnQ6IGFueVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIGVtYWlsVmFsaWRhdGlvbjphbnlbXSA9IFtdO1xyXG4gIG5vRGF0YTpib29sZWFuID1mYWxzZTtcclxuICBsb2FkaW5nOmJvb2xlYW49dHJ1ZTtcclxuXHJcbiAgYWN0aXZlVGFiOiAncmVndWxhcicgfCAnY3VzdG9tJyA9ICdyZWd1bGFyJztcclxuICBjdXN0b21SZXBvcnRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGN1c3RvbVJlcG9ydExvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjdXN0b21SZXBvcnROb0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgYXBpU2VydmljZTogQ2xpZW50QXBpU2VydmljZSwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLCBwcml2YXRlIHRvYXN0ZXI6VG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDpDaGFuZ2VEZXRlY3RvclJlZiwgcHVibGljIGdzOkdsb2JhbFN0YXRlU2VydmljZSkge1xyXG4gICAgICB0aGlzLnJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgcmVwb3J0czogdGhpcy5mYi5hcnJheShbXSlcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmluaXRGb3JtKClcclxuICAgIHRoaXMuYXBpU2VydmljZS5jbGllbnREYXRhLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgaWYgKGUpIHtcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gZT8uY2xpZW50SWRcclxuICAgICAgICB0aGlzLmdldENsaWVudFJlcG9ydHModGhpcy5jbGllbnRJZClcclxuICAgICAgICB0aGlzLmdldFNjaGVkdWxlZEN1c3RvbVJlcG9ydHModGhpcy5jbGllbnRJZClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNlbGVjdFRhYih0YWI6ICdyZWd1bGFyJyB8ICdjdXN0b20nKSB7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcclxuICB9XHJcblxyXG4gIGdldFNjaGVkdWxlZEN1c3RvbVJlcG9ydHMoY2xpZW50SWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXN0b21SZXBvcnRMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY3VzdG9tUmVwb3J0TGlzdCA9IFtdO1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLmdldFNjaGVkdWxlZEN1c3RvbVJlcG9ydHMoY2xpZW50SWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdXN0b21SZXBvcnRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDAgJiYgcmVzLmRhdGE/LnRlbXBsYXRlcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbVJlcG9ydE5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21SZXBvcnRMaXN0ID0gcmVzLmRhdGEudGVtcGxhdGVzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbVJlcG9ydE5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tUmVwb3J0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tUmVwb3J0Tm9EYXRhID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGZvcm1hdFJlY2VpdmVyQ291bnQoY291bnQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gU3RyaW5nKGNvdW50IHx8IDApLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXRTY2hlZHVsZUZyZXF1ZW5jeShmcmVxdWVuY3k6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoZnJlcXVlbmN5ID09PSAnb25jZScpIHtcclxuICAgICAgcmV0dXJuICdEb2VzIE5vdCBSZXBlYXQnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZyZXF1ZW5jeSA/IGZyZXF1ZW5jeS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGZyZXF1ZW5jeS5zbGljZSgxKSA6ICcnO1xyXG4gIH1cclxuXHJcbiAgb3BlbkVkaXRTY2hlZHVsZU1vZGFsKHRlbXBsYXRlOiBhbnkpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihDdXN0b21SZXBvcnRTY2hlZHVsZUNvbXBvbmVudCwgeyBzaXplOiAnbWQnLCBjZW50ZXJlZDogdHJ1ZSB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRlbXBsYXRlID0gdGVtcGxhdGU7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50Py50eXBlID09PSAnc2F2ZScpIHtcclxuICAgICAgICB0aGlzLmdldFNjaGVkdWxlZEN1c3RvbVJlcG9ydHModGhpcy5jbGllbnRJZClcclxuICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0U3VjY2Vzc1RvYXN0KCdSZXBvcnQgc2NoZWR1bGUgc2F2ZWQnKVxyXG4gICAgICB9XHJcbiAgICB9LCAoKSA9PiB7fSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDdXN0b21SZXBvcnRTY2hlZHVsZSh0ZW1wbGF0ZTogYW55KSB7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWN0aW9uUG9wdXBDb21wb25lbnQsIHsgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsIGJhY2tkcm9wOiAnc3RhdGljJyB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gJ1JlbW92ZSBTY2hlZHVsZT8nO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UubWVzc2FnZSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgc2NoZWR1bGVkIHJlcG9ydD8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS4nO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09PSAnc3VibWl0Jykge1xyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVDdXN0b21SZXBvcnRTY2hlZHVsZSh0ZW1wbGF0ZT8uX2lkLCB7IGVuYWJsZWQ6IGZhbHNlIH0pLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0U3VjY2Vzc1RvYXN0KCdTY2hlZHVsZWQgcmVwb3J0IHJlbW92ZWQgc3VjY2Vzc2Z1bGx5LicpXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U2NoZWR1bGVkQ3VzdG9tUmVwb3J0cyh0aGlzLmNsaWVudElkKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRFcnJvclRvYXN0KGVyci5lcnJvcj8uZXJyb3IgfHwgZXJyLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciByZW1vdmluZyBzY2hlZHVsZWQgcmVwb3J0JylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9LCAoKSA9PiB7fSk7XHJcbiAgfVxyXG5cclxuICBnZXQgcmVwb3J0c0Zvcm1BcnJheSgpIHtcclxuICAgIHJldHVybiB0aGlzLnJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtLmdldCgncmVwb3J0cycpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgZW1haWxWYWxpZGF0b3IodmFsdWU6YW55KXtcclxuICAgIGNvbnN0IGVtYWlsUmVnZXggPSAvXlthLXpBLVowLTkuXyUrLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Mix9JC87XHJcbiAgICBjb25zdCB2YWxpZCA9IGVtYWlsUmVnZXgudGVzdCh2YWx1ZSk7XHJcbiAgICAvLyB0aGlzLmVtYWlsVmFsaWRhdGlvbi5wdXNoKHZhbGlkKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVwb3J0c0Zvcm1BcnJheS5nZXQoJ2VtYWlsJyk/LnZhbHVlQ2hhbmdlc1xyXG4gICAgLnBpcGUobWFwKCh2YWx1ZSk9PiB2YWx1ZS5yZXBsYWNlKC9cXG4vZywgJycpLnJlcGxhY2UoL1xccy9nLCAnJykpKVxyXG4gICAgLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgodmFsKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGVtYWlsSW50ZXJydXB0LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5waXBlKG1hcCgoaW50ZXJydXB0KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaW50ZXJydXB0ID09PSAnRW50ZXInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtYWlsSW50ZXJydXB0Lm5leHQoJycpXHJcbiAgICAgICAgICAgIHRoaXMuZW1haWxWYWxpZGF0aW9uID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuZW1haWxMaXN0LnB1c2godmFsKVxyXG4gICAgICAgICAgICB0aGlzLmVtYWlsTGlzdC5mb3JFYWNoKChlbGVtZW50OmFueSkgPT4ge3RoaXMuZW1haWxWYWxpZGF0b3IoZWxlbWVudCl9KTtcclxuICAgICAgICAgICAgdGhpcy5yZXBvcnRDb25maWd1cmF0aW9uRm9ybS5nZXQoJ2VtYWlsJyk/LnNldFZhbHVlKCcnKVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChpbnRlcnJ1cHQgPT09ICdCYWNrc3BhY2UnICYmICF2YWwgJiYgdGhpcy5lbWFpbExpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1haWxMaXN0LnBvcCgpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkpXHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGluaXRGb3JtKCk6IHZvaWQgIHtcclxuICAgIGNvbnN0IHJlcG9ydEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBpZDpbJyddLFxyXG4gICAgICByZXBvcnROYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBmaWxlVHlwZTogWycnXSxcclxuICAgICAgZW1haWw6IHRoaXMuZmIuYXJyYXkoW3RoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5lbWFpbCldKSxcclxuICAgICAgZGlzYWJsZWQ6IFsgdHJ1ZSBdXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlcG9ydHNGb3JtQXJyYXkucHVzaChyZXBvcnRGb3JtR3JvdXApO1xyXG4gIH1cclxuICBcclxuICBwYXRjaEZvcm0oZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCByZXBvcnRzRm9ybUFycmF5ID0gdGhpcy5yZXBvcnRDb25maWd1cmF0aW9uRm9ybS5nZXQoJ3JlcG9ydHMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICByZXBvcnRzRm9ybUFycmF5LmNsZWFyKCk7XHJcbiAgICBkYXRhLmZvckVhY2goKHJlcG9ydDogYW55KSA9PiB7XHJcbiAgICAgIHJlcG9ydHNGb3JtQXJyYXkucHVzaCh0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICBpZDpbcmVwb3J0Ll9pZF0sXHJcbiAgICAgICAgcmVwb3J0TmFtZTogW3JlcG9ydC5maWxlTmFtZV0sXHJcbiAgICAgICAgZmlsZVR5cGU6IFtyZXBvcnQuZmlsZVR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIGVtYWlsOiB0aGlzLmZiLmFycmF5KHJlcG9ydC5lbWFpbCksXHJcbiAgICAgICAgZGlzYWJsZWQ6IFsgdHJ1ZV1cclxuICAgICAgfSkpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtLmRpc2FibGUoKTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2xpZW50UmVwb3J0cyhjbGllbnRJZDpzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnJlcG9ydExpc3QgPSBbXTtcclxuICAgIHRoaXMuYXBpU2VydmljZS5nZXRDbGllbnRSZXBvcnRzKGNsaWVudElkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwICYmIHJlcy5kYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRMaXN0ID0gcmVzLmRhdGFcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0ID0gcmVzLmRhdGFbMF1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wYXRjaEZvcm0odGhpcy5yZXBvcnRMaXN0KTtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvbktleURvd24oZXZlbnQ6IGFueSxpbmRleDphbnkpIHtcclxuICAgIGlmKGV2ZW50LmNvZGUgPT0gJ0JhY2tzcGFjZScgJiYgZXZlbnQudGFyZ2V0LnZhbHVlID09ICcnKSB7XHJcbiAgICAgIGxldCBlbWFpbExlbjphbnkgPSAoKHRoaXMucmVwb3J0Q29uZmlndXJhdGlvbkZvcm0uZ2V0KCdyZXBvcnRzJykgYXMgRm9ybUFycmF5KS5hdChpbmRleCkpLmdldCgnZW1haWwnKT8udmFsdWUubGVuZ3RoO1xyXG4gICAgICAoKCh0aGlzLnJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtLmdldCgncmVwb3J0cycpIGFzIEZvcm1BcnJheSkuYXQoaW5kZXgpKS5nZXQoJ2VtYWlsJykgYXMgRm9ybUFycmF5KS5yZW1vdmVBdChlbWFpbExlbi0xKTtcclxuICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7XHJcbiAgICB9XHJcbiAgICBpZihldmVudC5jb2RlID09ICdFbnRlcicpIHtcclxuICAgICAgY29uc3QgZW1haWxSZWdleCA9IC9eW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLH0kLztcclxuICAgICAgY29uc3QgdmFsaWQgPSBlbWFpbFJlZ2V4LnRlc3QoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgaWYodmFsaWQpIHtcclxuICAgICAgICAoKCh0aGlzLnJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtLmdldCgncmVwb3J0cycpIGFzIEZvcm1BcnJheSkuYXQoaW5kZXgpKS5nZXQoJ2VtYWlsJykgYXMgRm9ybUFycmF5KS5wdXNoKHRoaXMuZmIuY29udHJvbChldmVudC50YXJnZXQudmFsdWUpKTtcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSAnJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0RXJyb3JUb2FzdCgnUGxlYXNlIEVudGVyIFZhbGlkIEVtYWlsLicpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUNoaXAoaTogbnVtYmVyLGo6bnVtYmVyKSB7XHJcbiAgICAoKCh0aGlzLnJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtLmdldCgncmVwb3J0cycpIGFzIEZvcm1BcnJheSkuYXQoaSkpLmdldCgnZW1haWwnKSBhcyBGb3JtQXJyYXkpLnJlbW92ZUF0KGopO1xyXG4gIH1cclxuXHJcbiAgb25SZXBvcnRTZWxlY3QoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJlcG9ydCA9IGV2ZW50O1xyXG4gICAgdGhpcy5nZXRDbGllbnRSZXBvcnRzKHRoaXMuY2xpZW50SWQpO1xyXG4gIH1cclxuICBnZXRFbmFibGVkVmFsdWUoaTogbnVtYmVyKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMucmVwb3J0Q29uZmlndXJhdGlvbkZvcm0uZ2V0KCdyZXBvcnRzJyk/LmdldChpLnRvU3RyaW5nKCkpPy5nZXQoJ2VuYWJsZWQnKTtcclxuICAgIHJldHVybiBjb250cm9sID8gY29udHJvbC52YWx1ZSA6IG51bGw7XHJcbiAgfVxyXG4gIFxyXG4gIGdldEVtYWlscyhpbmRleDogYW55KSB7XHJcbiAgICByZXR1cm4gKCgodGhpcy5yZXBvcnRDb25maWd1cmF0aW9uRm9ybS5nZXQoJ3JlcG9ydHMnKSBhcyBGb3JtQXJyYXkpLmF0KGluZGV4KSkuZ2V0KCdlbWFpbCcpIGFzIEZvcm1BcnJheSlcclxuICB9XHJcblxyXG4gIG9wZW5BZGRNb2RhbCgpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRSZXBvcnRDb21wb25lbnQsIHsgc2l6ZTogJ21kJywgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigoZXZlbnQpID0+IHsgICAgICBcclxuICAgICAgaWYgKGV2ZW50Py50eXBlID09PSAnYWRkJykgeyAgICAgICAgXHJcbiAgICAgICAgdGhpcy5nZXRDbGllbnRSZXBvcnRzKHRoaXMuY2xpZW50SWQpXHJcbiAgICAgICAgdGhpcy50b2FzdGVyLmdldFN1Y2Nlc3NUb2FzdCgnUmVwb3J0IGFkZGVkIHN1Y2Nlc3NmdWxseS4nKSAgXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVwb3J0RGlzYWJsZWQoaW5kZXg6YW55KSB7XHJcbiAgICByZXR1cm4gKCh0aGlzLnJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtLmdldCgncmVwb3J0cycpIGFzIEZvcm1BcnJheSkuYXQoaW5kZXgpKS5nZXQoJ2Rpc2FibGVkJyk/LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlRm9ybShpbmRleDphbnkpIHtcclxuICAgIHRoaXMucmVwb3J0Q29uZmlndXJhdGlvbkZvcm0uZW5hYmxlKCk7XHJcbiAgICAoKHRoaXMucmVwb3J0Q29uZmlndXJhdGlvbkZvcm0uZ2V0KCdyZXBvcnRzJykgYXMgRm9ybUFycmF5KS5hdChpbmRleCkpLmdldCgnZGlzYWJsZWQnKT8uc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgdGhpcy5yZXBvcnRDb25maWd1cmF0aW9uRm9ybS5lbmFibGUoKTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpOyAgXHJcbiAgfVxyXG5cclxuICBkZWxldGVSZXBvcnQocmVwb3J0OmFueSkge1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLmRlbGV0ZVJlcG9ydChyZXBvcnQ/LnZhbHVlPy5pZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5nZXRTdWNjZXNzVG9hc3QoJ1JlcG9ydCBoYXMgYmVlbiBkZWxldGVkIHN1Y2Nlc3NmdWxseScpIFxyXG4gICAgICAgIHRoaXMuZ2V0Q2xpZW50UmVwb3J0cyh0aGlzLmNsaWVudElkKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkZWxldGluZyByZXBvcnQ6JywgZXJyKTtcclxuICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0RXJyb3JUb2FzdCgnRXJyb3IgZGVsZXRpbmcgcmVwb3J0JykgXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DYW5jZWwoKSB7XHJcbiAgICB0aGlzLmdldENsaWVudFJlcG9ydHModGhpcy5jbGllbnRJZClcclxuICAgIHRoaXMucmVwb3J0Q29uZmlndXJhdGlvbkZvcm0uZGlzYWJsZSgpXHJcbiAgICB0aGlzLmFwaVNlcnZpY2UuY2xpZW50Rm9ybURhdGEubmV4dCh7IHZhbHVlOiBudWxsLCB0eXBlOiAnY2FuY2VsJywgZm9ybTogJ3JlcG9ydC1jb25maWd1cmF0aW9uJyB9KVxyXG5cclxuICB9XHJcblxyXG4gIG9uU3VibWl0KGRhdGE6YW55KSB7XHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICBmaWxlVHlwZTpkYXRhLnZhbHVlLmZpbGVUeXBlLFxyXG4gICAgICBlbWFpbDpkYXRhLnZhbHVlLmVtYWlsLFxyXG4gICAgICBjbGllbnRJZDp0aGlzLmNsaWVudElkXHJcbiAgICB9XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlUmVwb3J0KGRhdGEudmFsdWUuaWQsIHBhcmFtcykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6KGUpPT57XHJcbiAgICAgICAgdGhpcy50b2FzdGVyLmdldFN1Y2Nlc3NUb2FzdChlLmRhdGE/LnJlc3VsdClcclxuICAgICAgICB0aGlzLmdldENsaWVudFJlcG9ydHModGhpcy5jbGllbnRJZCk7IFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5jbGllbnRGb3JtRGF0YS5uZXh0KHsgdmFsdWU6IG51bGwsIHR5cGU6ICdjYW5jZWwnLCBmb3JtOiAncmVwb3J0LWNvbmZpZ3VyYXRpb24nIH0pXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOihlKT0+e1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5nZXRFcnJvclRvYXN0KGUuZXJyb3I/LmVycm9yKVxyXG4gICAgICAgIHRoaXMuZ2V0Q2xpZW50UmVwb3J0cyh0aGlzLmNsaWVudElkKTsgXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyZXBvcnQtY29uZmlnLXRhYnMgbWItNlwiPlxyXG4gIDxzcGFuIGNsYXNzPVwicmVwb3J0LWNvbmZpZy10YWJcIiBbbmdDbGFzc109XCJhY3RpdmVUYWIgPT09ICdyZWd1bGFyJyA/ICdhY3RpdmUnIDogJydcIiAoY2xpY2spPVwic2VsZWN0VGFiKCdyZWd1bGFyJylcIj5cclxuICAgIFJlZ3VsYXJcclxuICAgIDxzcGFuIGNsYXNzPVwidGFiLWNvdW50XCI+e3sgcmVwb3J0c0Zvcm1BcnJheS5jb250cm9scy5sZW5ndGggfX08L3NwYW4+XHJcbiAgPC9zcGFuPlxyXG4gIDxzcGFuIGNsYXNzPVwicmVwb3J0LWNvbmZpZy10YWJcIiBbbmdDbGFzc109XCJhY3RpdmVUYWIgPT09ICdjdXN0b20nID8gJ2FjdGl2ZScgOiAnJ1wiIChjbGljayk9XCJzZWxlY3RUYWIoJ2N1c3RvbScpXCI+XHJcbiAgICBDdXN0b21cclxuICAgIDxzcGFuIGNsYXNzPVwidGFiLWNvdW50XCI+e3sgY3VzdG9tUmVwb3J0TGlzdC5sZW5ndGggfX08L3NwYW4+XHJcbiAgPC9zcGFuPlxyXG48L2Rpdj5cclxuXHJcbjxmb3JtICpuZ0lmPVwiYWN0aXZlVGFiID09PSAncmVndWxhcidcIiBbZm9ybUdyb3VwXT1cInJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy5UYW5nb0FkbWluX1JlcG9ydHNfaXNFZGl0XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib3BlbkFkZE1vZGFsKClcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYWxpZ24taXRlbXMtZW5kXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC4wMDAzIDQuMTY2NjNWMTUuODMzM000LjE2Njk5IDkuOTk5OTZIMTUuODMzN1wiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgQWRkIFJlcG9ydFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1wiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub0RhdGFcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmMgdy0yNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyIGZvcm1BcnJheU5hbWU9XCJyZXBvcnRzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlcG9ydCBvZiByZXBvcnRzRm9ybUFycmF5LmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8uVGFuZ29BZG1pbl9SZXBvcnRzX2lzRWRpdFwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtNVwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImdldFJlcG9ydERpc2FibGVkKGkpXCIgKGNsaWNrKT1cImVuYWJsZUZvcm0oaSlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCIgYWxpZ24taXRlbXMtZW5kXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfMTM0MTBfNTIyNjQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCIzNVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTM0MTBfNTIyNjQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjQuMTY3IDExLjQ5OTlDMjQuMzg1OSAxMS4yODExIDI0LjY0NTcgMTEuMTA3NCAyNC45MzE3IDEwLjk4OUMyNS4yMTc2IDEwLjg3MDUgMjUuNTI0MSAxMC44MDk2IDI1LjgzMzcgMTAuODA5NkMyNi4xNDMyIDEwLjgwOTYgMjYuNDQ5NyAxMC44NzA1IDI2LjczNTcgMTAuOTg5QzI3LjAyMTYgMTEuMTA3NCAyNy4yODE1IDExLjI4MTEgMjcuNTAwMyAxMS40OTk5QzI3LjcxOTIgMTEuNzE4OCAyNy44OTI4IDExLjk3ODYgMjguMDExMyAxMi4yNjQ2QzI4LjEyOTcgMTIuNTUwNiAyOC4xOTA3IDEyLjg1NzEgMjguMTkwNyAxMy4xNjY2QzI4LjE5MDcgMTMuNDc2MSAyOC4xMjk3IDEzLjc4MjYgMjguMDExMyAxNC4wNjg2QzI3Ljg5MjggMTQuMzU0NiAyNy43MTkyIDE0LjYxNDQgMjcuNTAwMyAxNC44MzMzTDE2LjI1MDMgMjYuMDgzM0wxMS42NjcgMjcuMzMzM0wxMi45MTcgMjIuNzQ5OUwyNC4xNjcgMTEuNDk5OVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8xMzQxMF81MjI2NFwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcclxuICAgICAgICAgICAgICAgICAgICBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCIgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd18xMzQxMF81MjI2NFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd18xMzQxMF81MjI2NFwiIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzEzNDEwXzUyMjY0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDEwIDkpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImdldFJlcG9ydERpc2FibGVkKGkpXCIgKGNsaWNrKT1cImRlbGV0ZVJlcG9ydChyZXBvcnQpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhbGlnbi1pdGVtcy1lbmQgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yXCI+XHJcbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF8xMzI1Ml8xNzg2NDIpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCIzNVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi41IDE0LjAwMDFIMTQuMTY2N00xNC4xNjY3IDE0LjAwMDFIMjcuNU0xNC4xNjY3IDE0LjAwMDFWMjUuNjY2N0MxNC4xNjY3IDI2LjEwODggMTQuMzQyMyAyNi41MzI3IDE0LjY1NDggMjYuODQ1M0MxNC45Njc0IDI3LjE1NzggMTUuMzkxMyAyNy4zMzM0IDE1LjgzMzMgMjcuMzMzNEgyNC4xNjY3QzI0LjYwODcgMjcuMzMzNCAyNS4wMzI2IDI3LjE1NzggMjUuMzQ1MiAyNi44NDUzQzI1LjY1NzcgMjYuNTMyNyAyNS44MzMzIDI2LjEwODggMjUuODMzMyAyNS42NjY3VjE0LjAwMDFIMTQuMTY2N1pNMTYuNjY2NyAxNC4wMDAxVjEyLjMzMzRDMTYuNjY2NyAxMS44OTE0IDE2Ljg0MjMgMTEuNDY3NSAxNy4xNTQ4IDExLjE1NDlDMTcuNDY3NCAxMC44NDIzIDE3Ljg5MTMgMTAuNjY2NyAxOC4zMzMzIDEwLjY2NjdIMjEuNjY2N0MyMi4xMDg3IDEwLjY2NjcgMjIuNTMyNiAxMC44NDIzIDIyLjg0NTIgMTEuMTU0OUMyMy4xNTc3IDExLjQ2NzUgMjMuMzMzMyAxMS44OTE0IDIzLjMzMzMgMTIuMzMzNFYxNC4wMDAxTTE4LjMzMzMgMTguMTY2N1YyMy4xNjY3TTIxLjY2NjcgMTguMTY2N1YyMy4xNjY3XCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8xMzI1Ml8xNzg2NDJcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImhhcmRBbHBoYVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMTMyNTJfMTc4NjQyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCIgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzEzMjUyXzE3ODY0MlwiIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gXHJcbiAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtbGctNiBjb2wteGwtNiBjb2wteHhsLTYgbWItNVwiPlxyXG4gICAgICA8bGFiZWwgW2Zvcl09XCIncmVwb3J0TmFtZScgKyBpXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UmVwb3J0IE5hbWUgPHNwYW4gY2xhc3M9XCJhbGVydC1yZXF1aXJlZFwiPjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicmVwb3J0TmFtZVwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZGlzYWJsZWRcIiBbaWRdPVwiJ3JlcG9ydE5hbWUnICsgaVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtbGctNiBjb2wteGwtNiBjb2wteHhsLTYgbWItNVwiPlxyXG4gICAgICA8bGFiZWwgW2Zvcl09XCInZmlsZVR5cGUnICsgaVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkZpbGUgVHlwZSA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+PC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJmaWxlVHlwZVwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZGlzYWJsZWQtaW5wdXRcIiBbaWRdPVwiJ2ZpbGVUeXBlJyArIGlcIlxyXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtuZ0NsYXNzXT1cImdldFJlcG9ydERpc2FibGVkKGkpPyAnZGlzYWJsZWQnIDogJydcIj5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtbGctMTIgY29sLXhsLTEyIGNvbC14eGwtMTIgbWItNVwiPlxyXG4gICAgPGxhYmVsIFtmb3JdPVwiJ2VtYWlsJyArIGlcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5SZWNlaXZlcnMgRW1haWwgPHNwYW4gY2xhc3M9XCJhbGVydC1yZXF1aXJlZFwiPjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm91dGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyIGZvcm0tY29udHJvbFwiIGZvcm1BcnJheU5hbWU9XCJlbWFpbFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVtYWlsIG9mIGdldEVtYWlscyhpKT8uY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTNcIj57eyBlbWFpbC52YWx1ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZXBvcnRDb25maWd1cmF0aW9uRm9ybS5lbmFibGVkXCIgKGNsaWNrKT1cInJlbW92ZUNoaXAoaSxqKVwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDNMMyA5TTMgM0w5IDlcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxpbnB1dCBzdHlsZT1cIm1pbi1oZWlnaHQ6IDQ0cHg7XCIgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCxpKVwiIHR5cGU9XCJ0ZXh0XCIgaWQ9XCJlbWFpbFZhbHVlXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRSZXBvcnREaXNhYmxlZChpKSA9PT0gdHJ1ZVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiIWdldFJlcG9ydERpc2FibGVkKGkpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItNSB3LTEwMCBmb290ZXItc2VwYXJhdG9yXCI+PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGEgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIG10LTEgbWUtNCBhbGlnbi1jb250ZW50LWNlbnRlclwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+Q2FuY2VsPC9hPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00XCIgKGNsaWNrKT1cIm9uU3VibWl0KHJlcG9ydClcIj48c3Bhbj5TYXZlXHJcbiAgICAgICAgICBDaGFuZ2VzPC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5cclxuXHJcbjxkaXYgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICdjdXN0b20nXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbVJlcG9ydExvYWRpbmdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbVJlcG9ydExvYWRpbmcgJiYgY3VzdG9tUmVwb3J0Tm9EYXRhXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPk5vIHNjaGVkdWxlZCBjdXN0b20gcmVwb3J0czwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21SZXBvcnRMb2FkaW5nICYmICFjdXN0b21SZXBvcnROb0RhdGFcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0aD5SZXBvcnRzPC90aD5cclxuICAgICAgICAgICAgPHRoPlNjaGVkdWxlPC90aD5cclxuICAgICAgICAgICAgPHRoPlJlY2VpdmVyczwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5BY3Rpb248L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdGVtcGxhdGUgb2YgY3VzdG9tUmVwb3J0TGlzdFwiPlxyXG4gICAgICAgICAgICA8dGQ+e3sgdGVtcGxhdGU/LnRlbXBsYXRlTmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57eyBmb3JtYXRTY2hlZHVsZUZyZXF1ZW5jeSh0ZW1wbGF0ZT8uc2NoZWR1bGU/LmZyZXF1ZW5jeSkgfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3sgZm9ybWF0UmVjZWl2ZXJDb3VudCh0ZW1wbGF0ZT8uc2NoZWR1bGU/LnJlY2VpdmVycz8ubGVuZ3RoKSB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy5UYW5nb0FkbWluX1JlcG9ydHNfaXNFZGl0XCIgY2xhc3M9XCJtZS0zIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRWRpdFNjaGVkdWxlTW9kYWwodGVtcGxhdGUpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfMTM0MTBfNTIyNjRfY3VzdG9tKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzNVwiIGhlaWdodD1cIjM1XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzEzNDEwXzUyMjY0X2N1c3RvbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjQuMTY3IDExLjQ5OTlDMjQuMzg1OSAxMS4yODExIDI0LjY0NTcgMTEuMTA3NCAyNC45MzE3IDEwLjk4OUMyNS4yMTc2IDEwLjg3MDUgMjUuNTI0MSAxMC44MDk2IDI1LjgzMzcgMTAuODA5NkMyNi4xNDMyIDEwLjgwOTYgMjYuNDQ5NyAxMC44NzA1IDI2LjczNTcgMTAuOTg5QzI3LjAyMTYgMTEuMTA3NCAyNy4yODE1IDExLjI4MTEgMjcuNTAwMyAxMS40OTk5QzI3LjcxOTIgMTEuNzE4OCAyNy44OTI4IDExLjk3ODYgMjguMDExMyAxMi4yNjQ2QzI4LjEyOTcgMTIuNTUwNiAyOC4xOTA3IDEyLjg1NzEgMjguMTkwNyAxMy4xNjY2QzI4LjE5MDcgMTMuNDc2MSAyOC4xMjk3IDEzLjc4MjYgMjguMDExMyAxNC4wNjg2QzI3Ljg5MjggMTQuMzU0NiAyNy43MTkyIDE0LjYxNDQgMjcuNTAwMyAxNC44MzMzTDE2LjI1MDMgMjYuMDgzM0wxMS42NjcgMjcuMzMzM0wxMi45MTcgMjIuNzQ5OUwyNC4xNjcgMTEuNDk5OVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9XCJmaWx0ZXIwX2RfMTM0MTBfNTIyNjRfY3VzdG9tXCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiIHR5cGU9XCJtYXRyaXhcIiB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImhhcmRBbHBoYVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCIgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93XzEzNDEwXzUyMjY0X2N1c3RvbVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCIgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzEzNDEwXzUyMjY0X2N1c3RvbVwiIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xMzQxMF81MjI2NF9jdXN0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxMCA5KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LlRhbmdvQWRtaW5fUmVwb3J0c19pc0VkaXRcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVDdXN0b21SZXBvcnRTY2hlZHVsZSh0ZW1wbGF0ZSlcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF8xMzI1Ml8xNzg2NDJfY3VzdG9tKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzNVwiIGhlaWdodD1cIjM1XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi41IDE0LjAwMDFIMTQuMTY2N00xNC4xNjY3IDE0LjAwMDFIMjcuNU0xNC4xNjY3IDE0LjAwMDFWMjUuNjY2N0MxNC4xNjY3IDI2LjEwODggMTQuMzQyMyAyNi41MzI3IDE0LjY1NDggMjYuODQ1M0MxNC45Njc0IDI3LjE1NzggMTUuMzkxMyAyNy4zMzM0IDE1LjgzMzMgMjcuMzMzNEgyNC4xNjY3QzI0LjYwODcgMjcuMzMzNCAyNS4wMzI2IDI3LjE1NzggMjUuMzQ1MiAyNi44NDUzQzI1LjY1NzcgMjYuNTMyNyAyNS44MzMzIDI2LjEwODggMjUuODMzMyAyNS42NjY3VjE0LjAwMDFIMTQuMTY2N1pNMTYuNjY2NyAxNC4wMDAxVjEyLjMzMzRDMTYuNjY2NyAxMS44OTE0IDE2Ljg0MjMgMTEuNDY3NSAxNy4xNTQ4IDExLjE1NDlDMTcuNDY3NCAxMC44NDIzIDE3Ljg5MTMgMTAuNjY2NyAxOC4zMzMzIDEwLjY2NjdIMjEuNjY2N0MyMi4xMDg3IDEwLjY2NjcgMjIuNTMyNiAxMC44NDIzIDIyLjg0NTIgMTEuMTU0OUMyMy4xNTc3IDExLjQ2NzUgMjMuMzMzMyAxMS44OTE0IDIzLjMzMzMgMTIuMzMzNFYxNC4wMDAxTTE4LjMzMzMgMTguMTY2N1YyMy4xNjY3TTIxLjY2NjcgMTguMTY2N1YyMy4xNjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzEzMjUyXzE3ODY0Ml9jdXN0b21cIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PVwiMFwiIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxmZU9mZnNldCBkeT1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMTMyNTJfMTc4NjQyX2N1c3RvbVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCIgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzEzMjUyXzE3ODY0Ml9jdXN0b21cIiByZXN1bHQ9XCJzaGFwZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj4iXX0=
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXNldHRpbmdzL3NyYy9saWIvY29tcG9uZW50cy9jb25maWd1cmF0aW9ucy9yZXBvcnQtY29uZmlndXJhdGlvbi9yZXBvcnQtY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL3JlcG9ydC1jb25maWd1cmF0aW9uL3JlcG9ydC1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBMEIsVUFBVSxFQUE4QixNQUFNLGdCQUFnQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7OztBQVNqRixNQUFNLE9BQU8sNEJBQTRCO0lBa0JuQjtJQUF5QjtJQUFzQztJQUFnQztJQUN6RztJQUE2QjtJQWpCdkMsdUJBQXVCLENBQVk7SUFDbkMsU0FBUyxHQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDekIsVUFBVSxHQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDMUIsZUFBZSxHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFB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LElBQUksQ0FBQyxRQUFRO1NBQ3ZCLENBQUE7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMzRixJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRTtnQkFDUixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO2dCQUM1QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FBQTtZQUNwRyxDQUFDO1lBQ0QsS0FBSyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtnQkFDMUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QyxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQzt3R0EvUlUsNEJBQTRCOzRGQUE1Qiw0QkFBNEIsZ0VDaEJ6QywyMmlCQTJSTTs7NEZEM1FPLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycywgRm9ybUFycmF5LCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgc3dpdGNoTWFwLCBtYXAsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDbGllbnRBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2xpZW50LWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEFkZFJlcG9ydENvbXBvbmVudCB9IGZyb20gJy4vYWRkLXJlcG9ydC9hZGQtcmVwb3J0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEN1c3RvbVJlcG9ydFNjaGVkdWxlQ29tcG9uZW50IH0gZnJvbSAnLi9jdXN0b20tcmVwb3J0LXNjaGVkdWxlL2N1c3RvbS1yZXBvcnQtc2NoZWR1bGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWN0aW9uUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hY3Rpb24tcG9wdXAvYWN0aW9uLXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXJlcG9ydC1jb25maWd1cmF0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVwb3J0LWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9yZXBvcnQtY29uZmlndXJhdGlvbi5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlcG9ydENvbmZpZ3VyYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICByZXBvcnRDb25maWd1cmF0aW9uRm9ybTogRm9ybUdyb3VwO1xyXG4gIGVtYWlsTGlzdDogYW55ID0gW10gPSBbXTtcclxuICByZXBvcnRMaXN0OiBhbnkgPSBbXSA9IFtdO1xyXG4gICRlbWFpbEludGVycnVwdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJylcclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG4gIHNlbGVjdGVkUmVwb3J0OiBhbnlcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBlbWFpbFZhbGlkYXRpb246YW55W10gPSBbXTtcclxuICBub0RhdGE6Ym9vbGVhbiA9ZmFsc2U7XHJcbiAgbG9hZGluZzpib29sZWFuPXRydWU7XHJcblxyXG4gIGFjdGl2ZVRhYjogJ3JlZ3VsYXInIHwgJ2N1c3RvbScgPSAncmVndWxhcic7XHJcbiAgY3VzdG9tUmVwb3J0TGlzdDogYW55W10gPSBbXTtcclxuICBjdXN0b21SZXBvcnRMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY3VzdG9tUmVwb3J0Tm9EYXRhOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIGFwaVNlcnZpY2U6IENsaWVudEFwaVNlcnZpY2UsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSB0b2FzdGVyOlRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgY2Q6Q2hhbmdlRGV0ZWN0b3JSZWYsIHB1YmxpYyBnczpHbG9iYWxTdGF0ZVNlcnZpY2UpIHtcclxuICAgICAgdGhpcy5yZXBvcnRDb25maWd1cmF0aW9uRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgIHJlcG9ydHM6IHRoaXMuZmIuYXJyYXkoW10pXHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5pbml0Rm9ybSgpXHJcbiAgICB0aGlzLmFwaVNlcnZpY2UuY2xpZW50RGF0YS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnRJZCA9IGU/LmNsaWVudElkXHJcbiAgICAgICAgdGhpcy5nZXRDbGllbnRSZXBvcnRzKHRoaXMuY2xpZW50SWQpXHJcbiAgICAgICAgdGhpcy5nZXRTY2hlZHVsZWRDdXN0b21SZXBvcnRzKHRoaXMuY2xpZW50SWQpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzZWxlY3RUYWIodGFiOiAncmVndWxhcicgfCAnY3VzdG9tJykge1xyXG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0YWI7XHJcbiAgfVxyXG5cclxuICBnZXRTY2hlZHVsZWRDdXN0b21SZXBvcnRzKGNsaWVudElkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VzdG9tUmVwb3J0TG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmN1c3RvbVJlcG9ydExpc3QgPSBbXTtcclxuICAgIHRoaXMuYXBpU2VydmljZS5nZXRTY2hlZHVsZWRDdXN0b21SZXBvcnRzKGNsaWVudElkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tUmVwb3J0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwICYmIHJlcy5kYXRhPy50ZW1wbGF0ZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21SZXBvcnROb0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY3VzdG9tUmVwb3J0TGlzdCA9IHJlcy5kYXRhLnRlbXBsYXRlcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21SZXBvcnROb0RhdGEgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLmN1c3RvbVJlcG9ydExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmN1c3RvbVJlcG9ydE5vRGF0YSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmb3JtYXRSZWNlaXZlckNvdW50KGNvdW50OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFN0cmluZyhjb3VudCB8fCAwKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0U2NoZWR1bGVGcmVxdWVuY3koZnJlcXVlbmN5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKGZyZXF1ZW5jeSA9PT0gJ29uY2UnKSB7XHJcbiAgICAgIHJldHVybiAnRG9lcyBOb3QgUmVwZWF0JztcclxuICAgIH1cclxuICAgIHJldHVybiBmcmVxdWVuY3kgPyBmcmVxdWVuY3kuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBmcmVxdWVuY3kuc2xpY2UoMSkgOiAnJztcclxuICB9XHJcblxyXG4gIG9wZW5FZGl0U2NoZWR1bGVNb2RhbCh0ZW1wbGF0ZTogYW55KSB7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQ3VzdG9tUmVwb3J0U2NoZWR1bGVDb21wb25lbnQsIHsgc2l6ZTogJ21kJywgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50ZW1wbGF0ZSA9IHRlbXBsYXRlO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudD8udHlwZSA9PT0gJ3NhdmUnKSB7XHJcbiAgICAgICAgdGhpcy5nZXRTY2hlZHVsZWRDdXN0b21SZXBvcnRzKHRoaXMuY2xpZW50SWQpXHJcbiAgICAgICAgdGhpcy50b2FzdGVyLmdldFN1Y2Nlc3NUb2FzdCgnUmVwb3J0IHNjaGVkdWxlIHNhdmVkJylcclxuICAgICAgfVxyXG4gICAgfSwgKCkgPT4ge30pO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ3VzdG9tUmVwb3J0U2NoZWR1bGUodGVtcGxhdGU6IGFueSkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEFjdGlvblBvcHVwQ29tcG9uZW50LCB7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBiYWNrZHJvcDogJ3N0YXRpYycgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aXRsZSA9ICdEZWxldGUgUmVwb3J0Pyc7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5tZXNzYWdlID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZXBvcnQ/IEl0IHdpbGwgYWxzbyBiZSByZW1vdmVkIGZyb20gdGhlIFJlcG9ydHMgcGFnZS4gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS4nO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ID09PSAnc3VibWl0Jykge1xyXG4gICAgICAgIC8vIERlbGV0ZXMgdGhlIHJlcG9ydCB0ZW1wbGF0ZSBpdHNlbGYgKHNvZnQgZGVsZXRlKSDigJQgbm90IGp1c3QgaXRzXHJcbiAgICAgICAgLy8gc2NoZWR1bGUg4oCUIHNvIGl0IGRpc2FwcGVhcnMgZnJvbSB0aGUgUmVwb3J0cyBwYWdlIHRvby5cclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuZGVsZXRlQ3VzdG9tUmVwb3J0VGVtcGxhdGUodGVtcGxhdGU/Ll9pZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3Rlci5nZXRTdWNjZXNzVG9hc3QoJ1JlcG9ydCBkZWxldGVkIHN1Y2Nlc3NmdWxseS4nKVxyXG4gICAgICAgICAgICB0aGlzLmdldFNjaGVkdWxlZEN1c3RvbVJlcG9ydHModGhpcy5jbGllbnRJZClcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0RXJyb3JUb2FzdChlcnIuZXJyb3I/LmVycm9yIHx8IGVyci5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3IgZGVsZXRpbmcgcmVwb3J0JylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9LCAoKSA9PiB7fSk7XHJcbiAgfVxyXG5cclxuICBnZXQgcmVwb3J0c0Zvcm1BcnJheSgpIHtcclxuICAgIHJldHVybiB0aGlzLnJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtLmdldCgncmVwb3J0cycpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgZW1haWxWYWxpZGF0b3IodmFsdWU6YW55KXtcclxuICAgIGNvbnN0IGVtYWlsUmVnZXggPSAvXlthLXpBLVowLTkuXyUrLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Mix9JC87XHJcbiAgICBjb25zdCB2YWxpZCA9IGVtYWlsUmVnZXgudGVzdCh2YWx1ZSk7XHJcbiAgICAvLyB0aGlzLmVtYWlsVmFsaWRhdGlvbi5wdXNoKHZhbGlkKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVwb3J0c0Zvcm1BcnJheS5nZXQoJ2VtYWlsJyk/LnZhbHVlQ2hhbmdlc1xyXG4gICAgLnBpcGUobWFwKCh2YWx1ZSk9PiB2YWx1ZS5yZXBsYWNlKC9cXG4vZywgJycpLnJlcGxhY2UoL1xccy9nLCAnJykpKVxyXG4gICAgLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgodmFsKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGVtYWlsSW50ZXJydXB0LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5waXBlKG1hcCgoaW50ZXJydXB0KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaW50ZXJydXB0ID09PSAnRW50ZXInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGVtYWlsSW50ZXJydXB0Lm5leHQoJycpXHJcbiAgICAgICAgICAgIHRoaXMuZW1haWxWYWxpZGF0aW9uID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuZW1haWxMaXN0LnB1c2godmFsKVxyXG4gICAgICAgICAgICB0aGlzLmVtYWlsTGlzdC5mb3JFYWNoKChlbGVtZW50OmFueSkgPT4ge3RoaXMuZW1haWxWYWxpZGF0b3IoZWxlbWVudCl9KTtcclxuICAgICAgICAgICAgdGhpcy5yZXBvcnRDb25maWd1cmF0aW9uRm9ybS5nZXQoJ2VtYWlsJyk/LnNldFZhbHVlKCcnKVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChpbnRlcnJ1cHQgPT09ICdCYWNrc3BhY2UnICYmICF2YWwgJiYgdGhpcy5lbWFpbExpc3QubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1haWxMaXN0LnBvcCgpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkpXHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGluaXRGb3JtKCk6IHZvaWQgIHtcclxuICAgIGNvbnN0IHJlcG9ydEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBpZDpbJyddLFxyXG4gICAgICByZXBvcnROYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBmaWxlVHlwZTogWycnXSxcclxuICAgICAgZW1haWw6IHRoaXMuZmIuYXJyYXkoW3RoaXMuZmIuY29udHJvbCgnJywgVmFsaWRhdG9ycy5lbWFpbCldKSxcclxuICAgICAgZGlzYWJsZWQ6IFsgdHJ1ZSBdXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlcG9ydHNGb3JtQXJyYXkucHVzaChyZXBvcnRGb3JtR3JvdXApO1xyXG4gIH1cclxuICBcclxuICBwYXRjaEZvcm0oZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCByZXBvcnRzRm9ybUFycmF5ID0gdGhpcy5yZXBvcnRDb25maWd1cmF0aW9uRm9ybS5nZXQoJ3JlcG9ydHMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICByZXBvcnRzRm9ybUFycmF5LmNsZWFyKCk7XHJcbiAgICBkYXRhLmZvckVhY2goKHJlcG9ydDogYW55KSA9PiB7XHJcbiAgICAgIHJlcG9ydHNGb3JtQXJyYXkucHVzaCh0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICBpZDpbcmVwb3J0Ll9pZF0sXHJcbiAgICAgICAgcmVwb3J0TmFtZTogW3JlcG9ydC5maWxlTmFtZV0sXHJcbiAgICAgICAgZmlsZVR5cGU6IFtyZXBvcnQuZmlsZVR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIGVtYWlsOiB0aGlzLmZiLmFycmF5KHJlcG9ydC5lbWFpbCksXHJcbiAgICAgICAgZGlzYWJsZWQ6IFsgdHJ1ZV1cclxuICAgICAgfSkpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtLmRpc2FibGUoKTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2xpZW50UmVwb3J0cyhjbGllbnRJZDpzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnJlcG9ydExpc3QgPSBbXTtcclxuICAgIHRoaXMuYXBpU2VydmljZS5nZXRDbGllbnRSZXBvcnRzKGNsaWVudElkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwICYmIHJlcy5kYXRhLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnRMaXN0ID0gcmVzLmRhdGFcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmVwb3J0ID0gcmVzLmRhdGFbMF1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wYXRjaEZvcm0odGhpcy5yZXBvcnRMaXN0KTtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvbktleURvd24oZXZlbnQ6IGFueSxpbmRleDphbnkpIHtcclxuICAgIGlmKGV2ZW50LmNvZGUgPT0gJ0JhY2tzcGFjZScgJiYgZXZlbnQudGFyZ2V0LnZhbHVlID09ICcnKSB7XHJcbiAgICAgIGxldCBlbWFpbExlbjphbnkgPSAoKHRoaXMucmVwb3J0Q29uZmlndXJhdGlvbkZvcm0uZ2V0KCdyZXBvcnRzJykgYXMgRm9ybUFycmF5KS5hdChpbmRleCkpLmdldCgnZW1haWwnKT8udmFsdWUubGVuZ3RoO1xyXG4gICAgICAoKCh0aGlzLnJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtLmdldCgncmVwb3J0cycpIGFzIEZvcm1BcnJheSkuYXQoaW5kZXgpKS5nZXQoJ2VtYWlsJykgYXMgRm9ybUFycmF5KS5yZW1vdmVBdChlbWFpbExlbi0xKTtcclxuICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7XHJcbiAgICB9XHJcbiAgICBpZihldmVudC5jb2RlID09ICdFbnRlcicpIHtcclxuICAgICAgY29uc3QgZW1haWxSZWdleCA9IC9eW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLH0kLztcclxuICAgICAgY29uc3QgdmFsaWQgPSBlbWFpbFJlZ2V4LnRlc3QoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgaWYodmFsaWQpIHtcclxuICAgICAgICAoKCh0aGlzLnJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtLmdldCgncmVwb3J0cycpIGFzIEZvcm1BcnJheSkuYXQoaW5kZXgpKS5nZXQoJ2VtYWlsJykgYXMgRm9ybUFycmF5KS5wdXNoKHRoaXMuZmIuY29udHJvbChldmVudC50YXJnZXQudmFsdWUpKTtcclxuICAgICAgICBldmVudC50YXJnZXQudmFsdWUgPSAnJztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0RXJyb3JUb2FzdCgnUGxlYXNlIEVudGVyIFZhbGlkIEVtYWlsLicpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUNoaXAoaTogbnVtYmVyLGo6bnVtYmVyKSB7XHJcbiAgICAoKCh0aGlzLnJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtLmdldCgncmVwb3J0cycpIGFzIEZvcm1BcnJheSkuYXQoaSkpLmdldCgnZW1haWwnKSBhcyBGb3JtQXJyYXkpLnJlbW92ZUF0KGopO1xyXG4gIH1cclxuXHJcbiAgb25SZXBvcnRTZWxlY3QoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJlcG9ydCA9IGV2ZW50O1xyXG4gICAgdGhpcy5nZXRDbGllbnRSZXBvcnRzKHRoaXMuY2xpZW50SWQpO1xyXG4gIH1cclxuICBnZXRFbmFibGVkVmFsdWUoaTogbnVtYmVyKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMucmVwb3J0Q29uZmlndXJhdGlvbkZvcm0uZ2V0KCdyZXBvcnRzJyk/LmdldChpLnRvU3RyaW5nKCkpPy5nZXQoJ2VuYWJsZWQnKTtcclxuICAgIHJldHVybiBjb250cm9sID8gY29udHJvbC52YWx1ZSA6IG51bGw7XHJcbiAgfVxyXG4gIFxyXG4gIGdldEVtYWlscyhpbmRleDogYW55KSB7XHJcbiAgICByZXR1cm4gKCgodGhpcy5yZXBvcnRDb25maWd1cmF0aW9uRm9ybS5nZXQoJ3JlcG9ydHMnKSBhcyBGb3JtQXJyYXkpLmF0KGluZGV4KSkuZ2V0KCdlbWFpbCcpIGFzIEZvcm1BcnJheSlcclxuICB9XHJcblxyXG4gIG9wZW5BZGRNb2RhbCgpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRSZXBvcnRDb21wb25lbnQsIHsgc2l6ZTogJ21kJywgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigoZXZlbnQpID0+IHsgICAgICBcclxuICAgICAgaWYgKGV2ZW50Py50eXBlID09PSAnYWRkJykgeyAgICAgICAgXHJcbiAgICAgICAgdGhpcy5nZXRDbGllbnRSZXBvcnRzKHRoaXMuY2xpZW50SWQpXHJcbiAgICAgICAgdGhpcy50b2FzdGVyLmdldFN1Y2Nlc3NUb2FzdCgnUmVwb3J0IGFkZGVkIHN1Y2Nlc3NmdWxseS4nKSAgXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVwb3J0RGlzYWJsZWQoaW5kZXg6YW55KSB7XHJcbiAgICByZXR1cm4gKCh0aGlzLnJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtLmdldCgncmVwb3J0cycpIGFzIEZvcm1BcnJheSkuYXQoaW5kZXgpKS5nZXQoJ2Rpc2FibGVkJyk/LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlRm9ybShpbmRleDphbnkpIHtcclxuICAgIHRoaXMucmVwb3J0Q29uZmlndXJhdGlvbkZvcm0uZW5hYmxlKCk7XHJcbiAgICAoKHRoaXMucmVwb3J0Q29uZmlndXJhdGlvbkZvcm0uZ2V0KCdyZXBvcnRzJykgYXMgRm9ybUFycmF5KS5hdChpbmRleCkpLmdldCgnZGlzYWJsZWQnKT8uc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgdGhpcy5yZXBvcnRDb25maWd1cmF0aW9uRm9ybS5lbmFibGUoKTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpOyAgXHJcbiAgfVxyXG5cclxuICBkZWxldGVSZXBvcnQocmVwb3J0OmFueSkge1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLmRlbGV0ZVJlcG9ydChyZXBvcnQ/LnZhbHVlPy5pZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5nZXRTdWNjZXNzVG9hc3QoJ1JlcG9ydCBoYXMgYmVlbiBkZWxldGVkIHN1Y2Nlc3NmdWxseScpIFxyXG4gICAgICAgIHRoaXMuZ2V0Q2xpZW50UmVwb3J0cyh0aGlzLmNsaWVudElkKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkZWxldGluZyByZXBvcnQ6JywgZXJyKTtcclxuICAgICAgICB0aGlzLnRvYXN0ZXIuZ2V0RXJyb3JUb2FzdCgnRXJyb3IgZGVsZXRpbmcgcmVwb3J0JykgXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DYW5jZWwoKSB7XHJcbiAgICB0aGlzLmdldENsaWVudFJlcG9ydHModGhpcy5jbGllbnRJZClcclxuICAgIHRoaXMucmVwb3J0Q29uZmlndXJhdGlvbkZvcm0uZGlzYWJsZSgpXHJcbiAgICB0aGlzLmFwaVNlcnZpY2UuY2xpZW50Rm9ybURhdGEubmV4dCh7IHZhbHVlOiBudWxsLCB0eXBlOiAnY2FuY2VsJywgZm9ybTogJ3JlcG9ydC1jb25maWd1cmF0aW9uJyB9KVxyXG5cclxuICB9XHJcblxyXG4gIG9uU3VibWl0KGRhdGE6YW55KSB7XHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICBmaWxlVHlwZTpkYXRhLnZhbHVlLmZpbGVUeXBlLFxyXG4gICAgICBlbWFpbDpkYXRhLnZhbHVlLmVtYWlsLFxyXG4gICAgICBjbGllbnRJZDp0aGlzLmNsaWVudElkXHJcbiAgICB9XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlUmVwb3J0KGRhdGEudmFsdWUuaWQsIHBhcmFtcykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6KGUpPT57XHJcbiAgICAgICAgdGhpcy50b2FzdGVyLmdldFN1Y2Nlc3NUb2FzdChlLmRhdGE/LnJlc3VsdClcclxuICAgICAgICB0aGlzLmdldENsaWVudFJlcG9ydHModGhpcy5jbGllbnRJZCk7IFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5jbGllbnRGb3JtRGF0YS5uZXh0KHsgdmFsdWU6IG51bGwsIHR5cGU6ICdjYW5jZWwnLCBmb3JtOiAncmVwb3J0LWNvbmZpZ3VyYXRpb24nIH0pXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOihlKT0+e1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5nZXRFcnJvclRvYXN0KGUuZXJyb3I/LmVycm9yKVxyXG4gICAgICAgIHRoaXMuZ2V0Q2xpZW50UmVwb3J0cyh0aGlzLmNsaWVudElkKTsgXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJyZXBvcnQtY29uZmlnLXRhYnMgbWItNlwiPlxyXG4gIDxzcGFuIGNsYXNzPVwicmVwb3J0LWNvbmZpZy10YWJcIiBbbmdDbGFzc109XCJhY3RpdmVUYWIgPT09ICdyZWd1bGFyJyA/ICdhY3RpdmUnIDogJydcIiAoY2xpY2spPVwic2VsZWN0VGFiKCdyZWd1bGFyJylcIj5cclxuICAgIFJlZ3VsYXJcclxuICAgIDxzcGFuIGNsYXNzPVwidGFiLWNvdW50XCI+e3sgcmVwb3J0c0Zvcm1BcnJheS5jb250cm9scy5sZW5ndGggfX08L3NwYW4+XHJcbiAgPC9zcGFuPlxyXG4gIDxzcGFuIGNsYXNzPVwicmVwb3J0LWNvbmZpZy10YWJcIiBbbmdDbGFzc109XCJhY3RpdmVUYWIgPT09ICdjdXN0b20nID8gJ2FjdGl2ZScgOiAnJ1wiIChjbGljayk9XCJzZWxlY3RUYWIoJ2N1c3RvbScpXCI+XHJcbiAgICBDdXN0b21cclxuICAgIDxzcGFuIGNsYXNzPVwidGFiLWNvdW50XCI+e3sgY3VzdG9tUmVwb3J0TGlzdC5sZW5ndGggfX08L3NwYW4+XHJcbiAgPC9zcGFuPlxyXG48L2Rpdj5cclxuXHJcbjxmb3JtICpuZ0lmPVwiYWN0aXZlVGFiID09PSAncmVndWxhcidcIiBbZm9ybUdyb3VwXT1cInJlcG9ydENvbmZpZ3VyYXRpb25Gb3JtXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy5UYW5nb0FkbWluX1JlcG9ydHNfaXNFZGl0XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWItNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib3BlbkFkZE1vZGFsKClcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYWxpZ24taXRlbXMtZW5kXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC4wMDAzIDQuMTY2NjNWMTUuODMzM000LjE2Njk5IDkuOTk5OTZIMTUuODMzN1wiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgQWRkIFJlcG9ydFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1wiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub0RhdGFcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmMgdy0yNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyIGZvcm1BcnJheU5hbWU9XCJyZXBvcnRzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlcG9ydCBvZiByZXBvcnRzRm9ybUFycmF5LmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8uVGFuZ29BZG1pbl9SZXBvcnRzX2lzRWRpdFwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtNVwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImdldFJlcG9ydERpc2FibGVkKGkpXCIgKGNsaWNrKT1cImVuYWJsZUZvcm0oaSlcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCIgYWxpZ24taXRlbXMtZW5kXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfMTM0MTBfNTIyNjQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCIzNVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTM0MTBfNTIyNjQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjQuMTY3IDExLjQ5OTlDMjQuMzg1OSAxMS4yODExIDI0LjY0NTcgMTEuMTA3NCAyNC45MzE3IDEwLjk4OUMyNS4yMTc2IDEwLjg3MDUgMjUuNTI0MSAxMC44MDk2IDI1LjgzMzcgMTAuODA5NkMyNi4xNDMyIDEwLjgwOTYgMjYuNDQ5NyAxMC44NzA1IDI2LjczNTcgMTAuOTg5QzI3LjAyMTYgMTEuMTA3NCAyNy4yODE1IDExLjI4MTEgMjcuNTAwMyAxMS40OTk5QzI3LjcxOTIgMTEuNzE4OCAyNy44OTI4IDExLjk3ODYgMjguMDExMyAxMi4yNjQ2QzI4LjEyOTcgMTIuNTUwNiAyOC4xOTA3IDEyLjg1NzEgMjguMTkwNyAxMy4xNjY2QzI4LjE5MDcgMTMuNDc2MSAyOC4xMjk3IDEzLjc4MjYgMjguMDExMyAxNC4wNjg2QzI3Ljg5MjggMTQuMzU0NiAyNy43MTkyIDE0LjYxNDQgMjcuNTAwMyAxNC44MzMzTDE2LjI1MDMgMjYuMDgzM0wxMS42NjcgMjcuMzMzM0wxMi45MTcgMjIuNzQ5OUwyNC4xNjcgMTEuNDk5OVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8xMzQxMF81MjI2NFwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcclxuICAgICAgICAgICAgICAgICAgICBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCIgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd18xMzQxMF81MjI2NFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd18xMzQxMF81MjI2NFwiIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzEzNDEwXzUyMjY0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDEwIDkpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImdldFJlcG9ydERpc2FibGVkKGkpXCIgKGNsaWNrKT1cImRlbGV0ZVJlcG9ydChyZXBvcnQpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhbGlnbi1pdGVtcy1lbmQgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yXCI+XHJcbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF8xMzI1Ml8xNzg2NDIpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCIzNVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi41IDE0LjAwMDFIMTQuMTY2N00xNC4xNjY3IDE0LjAwMDFIMjcuNU0xNC4xNjY3IDE0LjAwMDFWMjUuNjY2N0MxNC4xNjY3IDI2LjEwODggMTQuMzQyMyAyNi41MzI3IDE0LjY1NDggMjYuODQ1M0MxNC45Njc0IDI3LjE1NzggMTUuMzkxMyAyNy4zMzM0IDE1LjgzMzMgMjcuMzMzNEgyNC4xNjY3QzI0LjYwODcgMjcuMzMzNCAyNS4wMzI2IDI3LjE1NzggMjUuMzQ1MiAyNi44NDUzQzI1LjY1NzcgMjYuNTMyNyAyNS44MzMzIDI2LjEwODggMjUuODMzMyAyNS42NjY3VjE0LjAwMDFIMTQuMTY2N1pNMTYuNjY2NyAxNC4wMDAxVjEyLjMzMzRDMTYuNjY2NyAxMS44OTE0IDE2Ljg0MjMgMTEuNDY3NSAxNy4xNTQ4IDExLjE1NDlDMTcuNDY3NCAxMC44NDIzIDE3Ljg5MTMgMTAuNjY2NyAxOC4zMzMzIDEwLjY2NjdIMjEuNjY2N0MyMi4xMDg3IDEwLjY2NjcgMjIuNTMyNiAxMC44NDIzIDIyLjg0NTIgMTEuMTU0OUMyMy4xNTc3IDExLjQ2NzUgMjMuMzMzMyAxMS44OTE0IDIzLjMzMzMgMTIuMzMzNFYxNC4wMDAxTTE4LjMzMzMgMTguMTY2N1YyMy4xNjY3TTIxLjY2NjcgMTguMTY2N1YyMy4xNjY3XCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8xMzI1Ml8xNzg2NDJcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImhhcmRBbHBoYVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMTMyNTJfMTc4NjQyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCIgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzEzMjUyXzE3ODY0MlwiIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gXHJcbiAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtbGctNiBjb2wteGwtNiBjb2wteHhsLTYgbWItNVwiPlxyXG4gICAgICA8bGFiZWwgW2Zvcl09XCIncmVwb3J0TmFtZScgKyBpXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UmVwb3J0IE5hbWUgPHNwYW4gY2xhc3M9XCJhbGVydC1yZXF1aXJlZFwiPjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicmVwb3J0TmFtZVwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZGlzYWJsZWRcIiBbaWRdPVwiJ3JlcG9ydE5hbWUnICsgaVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtbGctNiBjb2wteGwtNiBjb2wteHhsLTYgbWItNVwiPlxyXG4gICAgICA8bGFiZWwgW2Zvcl09XCInZmlsZVR5cGUnICsgaVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkZpbGUgVHlwZSA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+PC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJmaWxlVHlwZVwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZGlzYWJsZWQtaW5wdXRcIiBbaWRdPVwiJ2ZpbGVUeXBlJyArIGlcIlxyXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtuZ0NsYXNzXT1cImdldFJlcG9ydERpc2FibGVkKGkpPyAnZGlzYWJsZWQnIDogJydcIj5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtbGctMTIgY29sLXhsLTEyIGNvbC14eGwtMTIgbWItNVwiPlxyXG4gICAgPGxhYmVsIFtmb3JdPVwiJ2VtYWlsJyArIGlcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5SZWNlaXZlcnMgRW1haWwgPHNwYW4gY2xhc3M9XCJhbGVydC1yZXF1aXJlZFwiPjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm91dGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyIGZvcm0tY29udHJvbFwiIGZvcm1BcnJheU5hbWU9XCJlbWFpbFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVtYWlsIG9mIGdldEVtYWlscyhpKT8uY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTNcIj57eyBlbWFpbC52YWx1ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZXBvcnRDb25maWd1cmF0aW9uRm9ybS5lbmFibGVkXCIgKGNsaWNrKT1cInJlbW92ZUNoaXAoaSxqKVwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDNMMyA5TTMgM0w5IDlcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxpbnB1dCBzdHlsZT1cIm1pbi1oZWlnaHQ6IDQ0cHg7XCIgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCxpKVwiIHR5cGU9XCJ0ZXh0XCIgaWQ9XCJlbWFpbFZhbHVlXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRSZXBvcnREaXNhYmxlZChpKSA9PT0gdHJ1ZVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiIWdldFJlcG9ydERpc2FibGVkKGkpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItNSB3LTEwMCBmb290ZXItc2VwYXJhdG9yXCI+PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGEgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIG10LTEgbWUtNCBhbGlnbi1jb250ZW50LWNlbnRlclwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+Q2FuY2VsPC9hPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00XCIgKGNsaWNrKT1cIm9uU3VibWl0KHJlcG9ydClcIj48c3Bhbj5TYXZlXHJcbiAgICAgICAgICBDaGFuZ2VzPC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5cclxuXHJcbjxkaXYgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICdjdXN0b20nXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbVJlcG9ydExvYWRpbmdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbVJlcG9ydExvYWRpbmcgJiYgY3VzdG9tUmVwb3J0Tm9EYXRhXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPk5vIHNjaGVkdWxlZCBjdXN0b20gcmVwb3J0czwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21SZXBvcnRMb2FkaW5nICYmICFjdXN0b21SZXBvcnROb0RhdGFcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0aD5SZXBvcnRzPC90aD5cclxuICAgICAgICAgICAgPHRoPlNjaGVkdWxlPC90aD5cclxuICAgICAgICAgICAgPHRoPlJlY2VpdmVyczwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5BY3Rpb248L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdGVtcGxhdGUgb2YgY3VzdG9tUmVwb3J0TGlzdFwiPlxyXG4gICAgICAgICAgICA8dGQ+e3sgdGVtcGxhdGU/LnRlbXBsYXRlTmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57eyBmb3JtYXRTY2hlZHVsZUZyZXF1ZW5jeSh0ZW1wbGF0ZT8uc2NoZWR1bGU/LmZyZXF1ZW5jeSkgfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3sgZm9ybWF0UmVjZWl2ZXJDb3VudCh0ZW1wbGF0ZT8uc2NoZWR1bGU/LnJlY2VpdmVycz8ubGVuZ3RoKSB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICA8IS0tIEN1c3RvbS10YWIgYWN0aW9ucyBmb2xsb3cgR2xvYmFsIENvbmZpZ3VyYXRpb24gZWRpdCBhY2Nlc3MsIHRoZSBzYW1lXHJcbiAgICAgICAgICAgICAgICAgICBmbGFnIGV2ZXJ5IG90aGVyIHNldHRpbmdzLWNvbmZpZ3VyYXRpb24gc2NyZWVuIGdhdGVzIGl0cyBlZGl0cyBvbi4gLS0+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8uR2xvYmFsX0NvbmZpZ3VyYXRpb25faXNFZGl0XCIgY2xhc3M9XCJtZS0zIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRWRpdFNjaGVkdWxlTW9kYWwodGVtcGxhdGUpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfMTM0MTBfNTIyNjRfY3VzdG9tKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzNVwiIGhlaWdodD1cIjM1XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzEzNDEwXzUyMjY0X2N1c3RvbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjQuMTY3IDExLjQ5OTlDMjQuMzg1OSAxMS4yODExIDI0LjY0NTcgMTEuMTA3NCAyNC45MzE3IDEwLjk4OUMyNS4yMTc2IDEwLjg3MDUgMjUuNTI0MSAxMC44MDk2IDI1LjgzMzcgMTAuODA5NkMyNi4xNDMyIDEwLjgwOTYgMjYuNDQ5NyAxMC44NzA1IDI2LjczNTcgMTAuOTg5QzI3LjAyMTYgMTEuMTA3NCAyNy4yODE1IDExLjI4MTEgMjcuNTAwMyAxMS40OTk5QzI3LjcxOTIgMTEuNzE4OCAyNy44OTI4IDExLjk3ODYgMjguMDExMyAxMi4yNjQ2QzI4LjEyOTcgMTIuNTUwNiAyOC4xOTA3IDEyLjg1NzEgMjguMTkwNyAxMy4xNjY2QzI4LjE5MDcgMTMuNDc2MSAyOC4xMjk3IDEzLjc4MjYgMjguMDExMyAxNC4wNjg2QzI3Ljg5MjggMTQuMzU0NiAyNy43MTkyIDE0LjYxNDQgMjcuNTAwMyAxNC44MzMzTDE2LjI1MDMgMjYuMDgzM0wxMS42NjcgMjcuMzMzM0wxMi45MTcgMjIuNzQ5OUwyNC4xNjcgMTEuNDk5OVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9XCJmaWx0ZXIwX2RfMTM0MTBfNTIyNjRfY3VzdG9tXCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiIHR5cGU9XCJtYXRyaXhcIiB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImhhcmRBbHBoYVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCIgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93XzEzNDEwXzUyMjY0X2N1c3RvbVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCIgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzEzNDEwXzUyMjY0X2N1c3RvbVwiIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xMzQxMF81MjI2NF9jdXN0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxMCA5KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/Lkdsb2JhbF9Db25maWd1cmF0aW9uX2lzRWRpdFwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUN1c3RvbVJlcG9ydFNjaGVkdWxlKHRlbXBsYXRlKVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzEzMjUyXzE3ODY0Ml9jdXN0b20pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjJcIiB5PVwiMVwiIHdpZHRoPVwiMzZcIiBoZWlnaHQ9XCIzNlwiIHJ4PVwiOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM1XCIgaGVpZ2h0PVwiMzVcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyLjUgMTQuMDAwMUgxNC4xNjY3TTE0LjE2NjcgMTQuMDAwMUgyNy41TTE0LjE2NjcgMTQuMDAwMVYyNS42NjY3QzE0LjE2NjcgMjYuMTA4OCAxNC4zNDIzIDI2LjUzMjcgMTQuNjU0OCAyNi44NDUzQzE0Ljk2NzQgMjcuMTU3OCAxNS4zOTEzIDI3LjMzMzQgMTUuODMzMyAyNy4zMzM0SDI0LjE2NjdDMjQuNjA4NyAyNy4zMzM0IDI1LjAzMjYgMjcuMTU3OCAyNS4zNDUyIDI2Ljg0NTNDMjUuNjU3NyAyNi41MzI3IDI1LjgzMzMgMjYuMTA4OCAyNS44MzMzIDI1LjY2NjdWMTQuMDAwMUgxNC4xNjY3Wk0xNi42NjY3IDE0LjAwMDFWMTIuMzMzNEMxNi42NjY3IDExLjg5MTQgMTYuODQyMyAxMS40Njc1IDE3LjE1NDggMTEuMTU0OUMxNy40Njc0IDEwLjg0MjMgMTcuODkxMyAxMC42NjY3IDE4LjMzMzMgMTAuNjY2N0gyMS42NjY3QzIyLjEwODcgMTAuNjY2NyAyMi41MzI2IDEwLjg0MjMgMjIuODQ1MiAxMS4xNTQ5QzIzLjE1NzcgMTEuNDY3NSAyMy4zMzMzIDExLjg5MTQgMjMuMzMzMyAxMi4zMzM0VjE0LjAwMDFNMTguMzMzMyAxOC4xNjY3VjIzLjE2NjdNMjEuNjY2NyAxOC4xNjY3VjIzLjE2NjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9XCJmaWx0ZXIwX2RfMTMyNTJfMTc4NjQyX2N1c3RvbVwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCIgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJoYXJkQWxwaGFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd18xMzI1Ml8xNzg2NDJfY3VzdG9tXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIiBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMTMyNTJfMTc4NjQyX2N1c3RvbVwiIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PiJdfQ==