tango-app-ui-manage-settings 3.7.45 → 3.7.47

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.
@@ -6,14 +6,16 @@ import * as i1 from "../../../services/excel.service";
6
6
  import * as i2 from "../../../services/client-api.service";
7
7
  import * as i3 from "@ng-bootstrap/ng-bootstrap";
8
8
  import * as i4 from "tango-app-ui-shared";
9
- import * as i5 from "@angular/common";
10
- import * as i6 from "@angular/forms";
9
+ import * as i5 from "tango-app-ui-global";
10
+ import * as i6 from "@angular/common";
11
+ import * as i7 from "@angular/forms";
11
12
  export class StoreTimeConfigurationComponent {
12
13
  excelService;
13
14
  clientApi;
14
15
  modalService;
15
16
  ts;
16
17
  cd;
18
+ gs;
17
19
  searchValue;
18
20
  downloadDropDown = false;
19
21
  clientData;
@@ -21,12 +23,13 @@ export class StoreTimeConfigurationComponent {
21
23
  limit = 10;
22
24
  offset = 1;
23
25
  destroy$ = new Subject();
24
- constructor(excelService, clientApi, modalService, ts, cd) {
26
+ constructor(excelService, clientApi, modalService, ts, cd, gs) {
25
27
  this.excelService = excelService;
26
28
  this.clientApi = clientApi;
27
29
  this.modalService = modalService;
28
30
  this.ts = ts;
29
31
  this.cd = cd;
32
+ this.gs = gs;
30
33
  this.clientApi.clientData.pipe(takeUntil(this.destroy$)).subscribe((e) => {
31
34
  if (e) {
32
35
  this.clientData = e;
@@ -422,13 +425,13 @@ export class StoreTimeConfigurationComponent {
422
425
  }
423
426
  });
424
427
  }
425
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StoreTimeConfigurationComponent, deps: [{ token: i1.ExcelService }, { token: i2.ClientApiService }, { token: i3.NgbModal }, { token: i4.ToastService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
426
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: StoreTimeConfigurationComponent, selector: "lib-store-time-configuration", viewQueries: [{ propertyName: "inputFile", first: true, predicate: ["inputFile"], descendants: true }, { propertyName: "fileInput1", first: true, predicate: ["file1"], descendants: true }, { propertyName: "bulkUploadPopup", first: true, predicate: ["bulkUploadPopup"], descendants: true }], ngImport: i0, template: "<div class=\"row\">\r\n <ng-container>\r\n <div class=\"col-12 mb-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div class=\"badge badge-light-default\">\r\n <span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_9503_97591)\">\r\n <path\r\n d=\"M7.9987 10.6654V7.9987M7.9987 5.33203H8.00536M14.6654 7.9987C14.6654 11.6806 11.6806 14.6654 7.9987 14.6654C4.3168 14.6654 1.33203 11.6806 1.33203 7.9987C1.33203 4.3168 4.3168 1.33203 7.9987 1.33203C11.6806 1.33203 14.6654 4.3168 14.6654 7.9987Z\"\r\n stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_9503_97591\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n <span class=\"store-conf\">You Can Edit only Open time and Close time</span>\r\n </div>\r\n <ng-container *ngIf=\"!loading && storeListData?.length && !noData\">\r\n <button *ngIf=\"isEditing ===''\" (click)=\"editStoreList('edit')\" type=\"button\" class=\"btn btn-outline align-items-end\"><span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_9964_44262)\">\r\n <path d=\"M9.16797 3.33417H3.33464C2.89261 3.33417 2.46868 3.50977 2.15612 3.82233C1.84356 4.13489 1.66797 4.55881 1.66797 5.00084V16.6675C1.66797 17.1095 1.84356 17.5335 2.15612 17.846C2.46868 18.1586 2.89261 18.3342 3.33464 18.3342H15.0013C15.4433 18.3342 15.8673 18.1586 16.1798 17.846C16.4924 17.5335 16.668 17.1095 16.668 16.6675V10.8342M15.418 2.08417C15.7495 1.75265 16.1991 1.56641 16.668 1.56641C17.1368 1.56641 17.5864 1.75265 17.918 2.08417C18.2495 2.41569 18.4357 2.86533 18.4357 3.33417C18.4357 3.80301 18.2495 4.25265 17.918 4.58417L10.0013 12.5008L6.66797 13.3342L7.5013 10.0008L15.418 2.08417Z\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_9964_44262\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span>Edit Store Time</button>\r\n\r\n <div *ngIf=\"isEditing ==='edit'\" class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4\" (click)=\"onCancel()\">Cancel</a>\r\n <a type=\"submit\" class=\"btn btn-primary px-4 \" (click)=\"onSubmit()\"><span>Save Changes</span></a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-md-9 mt-3\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1 w-50\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input (change)=\"searchData()\" [(ngModel)]=\"searchValue\" type=\"text\" class=\"form-control ps-14 me-2\"\r\n autocomplete=\"off\" placeholder=\"Search with Store Name, Store ID\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 mt-3 text-end ps-15\">\r\n <div class=\"position-relative w-100 mt-5 mb-5\">\r\n <button type=\"button\"\r\n class=\"btn py-3 btn-default w-100 btn-outline btn-outline-default rounded-3 text-nowrap border-val d-flex justify-content-between\">\r\n <span class=\"me-3 cursor-pointer\" #upload (click)=\"inputFile.click()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> <span class=\"template-dropdown bg-white ms-3\">BulkUpload </span>\r\n </span>\r\n <span><input style=\"display: none;\" type=\"file\" #inputFile accept = \".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n id=\"kt_account_team_size_select_1\" (change)=\"onFileUpload($event)\" /></span>\r\n <span class=\"subtitle mx-3 me-2\"> | </span>\r\n <span class=\"cursor-pointer\" (click)=\"openDropdown($event)\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M6 9L12 15L18 9\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </button>\r\n\r\n <div *ngIf=\"dropDown\" class=\"card template-dropdown h-40px w-100 pe-5 position-absolute rounded-3 z-1 top-50px end-0\">\r\n <ul class=\"list-unstyled mb-0 w-auto cursor-pointer\" (click)=\"downloadTemplate()\">\r\n <li class=\"pe-5 fw-semibold cursor-pointer py-2\">Download Template</li>\r\n </ul>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div *ngIf=\"downloadDropDown\"\r\n class=\"card w-auto py-2 position-absolute productdrop top-10\">\r\n <ul class=\"list-unstyled mb-2\">\r\n <li class=\"producttext items cursor-pointer p-2\"\r\n (click)=\"downloadTemplate()\">\r\n Download Template</li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n\r\n</div>\r\n<ng-container *ngIf=\"noData\" >\r\n <div class=\"d-flex align-items-center justify-content-center\" >\r\n <img width=\"300px\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\"> \r\n </div>\r\n</ng-container>\r\n \r\n\r\n<ng-container *ngIf=\"loading\" >\r\n<div class=\"shimmer-card w-100\">\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 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</div>\r\n\r\n</ng-container>\r\n<div *ngIf=\"!loading && storeListData?.length && !noData\" class=\"card-body mt-2\">\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name <svg \r\n [ngClass]=\"sortedColumn === 'storeName' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('openTime')\">Open Time<svg \r\n [ngClass]=\"sortedColumn === 'openTime' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'openTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('openTime')\">Close Time<svg \r\n [ngClass]=\"sortedColumn === 'openTime' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'openTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of storeListData; let i=index;\">\r\n <td>{{obj.storeName}}</td>\r\n <td><span *ngIf=\"isEditing===''\">{{formatTime(obj.openTime)}}</span>\r\n <input *ngIf=\"isEditing==='edit'\" [(ngModel)]=\"obj.openTime\" (change)=\"updateCloseTime(obj)\" class=\"form-control form-control-sm\" type=\"time\">\r\n </td>\r\n <td> <span *ngIf=\"isEditing===''\">{{ formatTime(obj.closeTime) }}</span>\r\n <input *ngIf=\"isEditing==='edit'\" class=\"form-control form-control-sm\" type=\"time\" [(ngModel)]=\"obj.closeTime\" [min]=\"obj.openTime\" (change)=\"validateCloseTime()\">\r\n <div *ngIf=\"obj.showError\" class=\"text-danger\">\r\n Close time must be later than open time.\r\n </div> \r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table>\r\n </div>\r\n</div>\r\n<div *ngIf=\"!loading && storeListData?.length && !noData\" class=\"card-footer\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n</div>\r\n\r\n<ng-template #bulkUploadPopup let-model>\r\n <div class=\"p-5\">\r\n <div class=\"card-body py-0 d-flex flex-start flex-column p-5 text-nowrap\">\r\n <div class=\"my-5 d-flex\">\r\n <div class=\"d-flex\">\r\n <span class=\"symbol symbol-75px symbol-circle\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\"/>\r\n <path d=\"M27.5 22.5V25.8333C27.5 26.2754 27.3244 26.6993 27.0118 27.0118C26.6993 27.3244 26.2754 27.5 25.8333 27.5H14.1667C13.7246 27.5 13.3007 27.3244 12.9882 27.0118C12.6756 26.6993 12.5 26.2754 12.5 25.8333V22.5M24.1667 16.6667L20 12.5M20 12.5L15.8333 16.6667M20 12.5V22.5\" stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span class=\"ms-3 pt-2 fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">Bulk Upload</span>\r\n </div>\r\n </div>\r\n <div class=\"row w-100\">\r\n <div class=\"col-md-12\">\r\n <div class=\"upload-text\">Step1 - <span class=\"text-decoration-underline text-primary download-text\"><span (click)=\"downloadTemplateV2()\" class=\"cursor-pointer\">Download the template here</span></span></div>\r\n <div class=\"upload-text\">Step2 - Add your data to the Template File with existing store data</div>\r\n <div class=\"upload-text\">Step3 - Upload it below for processing</div>\r\n <div class=\"note-text\">**Note : On uploading, all the existing data will be replaced</div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"card-footer border-0 text-end mt-3 pt-0\">\r\n <button class=\"btn btn-md btn-default btn-outline\" (click)=\"model.close()\">Cancel</button>\r\n <button class=\"btn py-3 btn-default ms-3 btn-primary\" (click)=\"file1.click()\">Upload</button>\r\n <input style=\"visibility: hidden;\" #file1 type=\"file\" id=\"kt_account_team_size_select_2\"\r\n (change)=\"onFileUpload($event)\" />\r\n </div>\r\n \r\n \r\n </div>\r\n\r\n</ng-template>", styles: [".badge{padding:8px!important;border-radius:8px!important;background:var(--Gray-100, #F2F4F7)!important}.store-conf{color:var(--Gray-500, #667085)!important;font-size:12px!important;font-weight:500;line-height:18px}.productdrop{top:10;left:83%;z-index:10}.producttext{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.template-dropdown{background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.upload-text{color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:30px}.download-text{color:var(--Primary-800, #008EDF);font-size:14px;font-weight:500;line-height:20px}.note-text{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:20px}.rotate{rotate:180deg;transition:1s}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }] });
428
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StoreTimeConfigurationComponent, deps: [{ token: i1.ExcelService }, { token: i2.ClientApiService }, { token: i3.NgbModal }, { token: i4.ToastService }, { token: i0.ChangeDetectorRef }, { token: i5.GlobalStateService }], target: i0.ɵɵFactoryTarget.Component });
429
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: StoreTimeConfigurationComponent, selector: "lib-store-time-configuration", viewQueries: [{ propertyName: "inputFile", first: true, predicate: ["inputFile"], descendants: true }, { propertyName: "fileInput1", first: true, predicate: ["file1"], descendants: true }, { propertyName: "bulkUploadPopup", first: true, predicate: ["bulkUploadPopup"], descendants: true }], ngImport: i0, template: "<div class=\"row\">\r\n <ng-container>\r\n <div class=\"col-12 mb-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <!-- The edit hint only makes sense to users who can edit, i.e. tango users. -->\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"badge badge-light-default\">\r\n <span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_9503_97591)\">\r\n <path\r\n d=\"M7.9987 10.6654V7.9987M7.9987 5.33203H8.00536M14.6654 7.9987C14.6654 11.6806 11.6806 14.6654 7.9987 14.6654C4.3168 14.6654 1.33203 11.6806 1.33203 7.9987C1.33203 4.3168 4.3168 1.33203 7.9987 1.33203C11.6806 1.33203 14.6654 4.3168 14.6654 7.9987Z\"\r\n stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_9503_97591\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n <span class=\"store-conf\">You Can Edit only Open time and Close time</span>\r\n </div>\r\n <!-- Editing store times is for tango users only; client users see the table read-only. -->\r\n <ng-container *ngIf=\"!loading && storeListData?.length && !noData && (gs.userAccess | async)?.userType === 'tango'\">\r\n <button *ngIf=\"isEditing ===''\" (click)=\"editStoreList('edit')\" type=\"button\" class=\"btn btn-outline align-items-end\"><span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_9964_44262)\">\r\n <path d=\"M9.16797 3.33417H3.33464C2.89261 3.33417 2.46868 3.50977 2.15612 3.82233C1.84356 4.13489 1.66797 4.55881 1.66797 5.00084V16.6675C1.66797 17.1095 1.84356 17.5335 2.15612 17.846C2.46868 18.1586 2.89261 18.3342 3.33464 18.3342H15.0013C15.4433 18.3342 15.8673 18.1586 16.1798 17.846C16.4924 17.5335 16.668 17.1095 16.668 16.6675V10.8342M15.418 2.08417C15.7495 1.75265 16.1991 1.56641 16.668 1.56641C17.1368 1.56641 17.5864 1.75265 17.918 2.08417C18.2495 2.41569 18.4357 2.86533 18.4357 3.33417C18.4357 3.80301 18.2495 4.25265 17.918 4.58417L10.0013 12.5008L6.66797 13.3342L7.5013 10.0008L15.418 2.08417Z\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_9964_44262\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span>Edit Store Time</button>\r\n\r\n <div *ngIf=\"isEditing ==='edit'\" class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4\" (click)=\"onCancel()\">Cancel</a>\r\n <a type=\"submit\" class=\"btn btn-primary px-4 \" (click)=\"onSubmit()\"><span>Save Changes</span></a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-md-9 mt-3\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1 w-50\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input (change)=\"searchData()\" [(ngModel)]=\"searchValue\" type=\"text\" class=\"form-control ps-14 me-2\"\r\n autocomplete=\"off\" placeholder=\"Search with Store Name, Store ID\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 mt-3 text-end ps-15\">\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"position-relative w-100 mt-5 mb-5\">\r\n <button type=\"button\"\r\n class=\"btn py-3 btn-default w-100 btn-outline btn-outline-default rounded-3 text-nowrap border-val d-flex justify-content-between\">\r\n <span class=\"me-3 cursor-pointer\" #upload (click)=\"inputFile.click()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> <span class=\"template-dropdown bg-white ms-3\">BulkUpload </span>\r\n </span>\r\n <span><input style=\"display: none;\" type=\"file\" #inputFile accept = \".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n id=\"kt_account_team_size_select_1\" (change)=\"onFileUpload($event)\" /></span>\r\n <span class=\"subtitle mx-3 me-2\"> | </span>\r\n <span class=\"cursor-pointer\" (click)=\"openDropdown($event)\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M6 9L12 15L18 9\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </button>\r\n\r\n <div *ngIf=\"dropDown\" class=\"card template-dropdown h-40px w-100 pe-5 position-absolute rounded-3 z-1 top-50px end-0\">\r\n <ul class=\"list-unstyled mb-0 w-auto cursor-pointer\" (click)=\"downloadTemplate()\">\r\n <li class=\"pe-5 fw-semibold cursor-pointer py-2\">Download Template</li>\r\n </ul>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div *ngIf=\"downloadDropDown\"\r\n class=\"card w-auto py-2 position-absolute productdrop top-10\">\r\n <ul class=\"list-unstyled mb-2\">\r\n <li class=\"producttext items cursor-pointer p-2\"\r\n (click)=\"downloadTemplate()\">\r\n Download Template</li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n\r\n</div>\r\n<ng-container *ngIf=\"noData\" >\r\n <div class=\"d-flex align-items-center justify-content-center\" >\r\n <img width=\"300px\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\"> \r\n </div>\r\n</ng-container>\r\n \r\n\r\n<ng-container *ngIf=\"loading\" >\r\n<div class=\"shimmer-card w-100\">\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 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</div>\r\n\r\n</ng-container>\r\n<div *ngIf=\"!loading && storeListData?.length && !noData\" class=\"card-body mt-2\">\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name <svg \r\n [ngClass]=\"sortedColumn === 'storeName' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('openTime')\">Open Time<svg \r\n [ngClass]=\"sortedColumn === 'openTime' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'openTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('openTime')\">Close Time<svg \r\n [ngClass]=\"sortedColumn === 'openTime' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'openTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of storeListData; let i=index;\">\r\n <td>{{obj.storeName}}</td>\r\n <td><span *ngIf=\"isEditing===''\">{{formatTime(obj.openTime)}}</span>\r\n <input *ngIf=\"isEditing==='edit'\" [(ngModel)]=\"obj.openTime\" (change)=\"updateCloseTime(obj)\" class=\"form-control form-control-sm\" type=\"time\">\r\n </td>\r\n <td> <span *ngIf=\"isEditing===''\">{{ formatTime(obj.closeTime) }}</span>\r\n <input *ngIf=\"isEditing==='edit'\" class=\"form-control form-control-sm\" type=\"time\" [(ngModel)]=\"obj.closeTime\" [min]=\"obj.openTime\" (change)=\"validateCloseTime()\">\r\n <div *ngIf=\"obj.showError\" class=\"text-danger\">\r\n Close time must be later than open time.\r\n </div> \r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table>\r\n </div>\r\n</div>\r\n<div *ngIf=\"!loading && storeListData?.length && !noData\" class=\"card-footer\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n</div>\r\n\r\n<ng-template #bulkUploadPopup let-model>\r\n <div class=\"p-5\">\r\n <div class=\"card-body py-0 d-flex flex-start flex-column p-5 text-nowrap\">\r\n <div class=\"my-5 d-flex\">\r\n <div class=\"d-flex\">\r\n <span class=\"symbol symbol-75px symbol-circle\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\"/>\r\n <path d=\"M27.5 22.5V25.8333C27.5 26.2754 27.3244 26.6993 27.0118 27.0118C26.6993 27.3244 26.2754 27.5 25.8333 27.5H14.1667C13.7246 27.5 13.3007 27.3244 12.9882 27.0118C12.6756 26.6993 12.5 26.2754 12.5 25.8333V22.5M24.1667 16.6667L20 12.5M20 12.5L15.8333 16.6667M20 12.5V22.5\" stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span class=\"ms-3 pt-2 fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">Bulk Upload</span>\r\n </div>\r\n </div>\r\n <div class=\"row w-100\">\r\n <div class=\"col-md-12\">\r\n <div class=\"upload-text\">Step1 - <span class=\"text-decoration-underline text-primary download-text\"><span (click)=\"downloadTemplateV2()\" class=\"cursor-pointer\">Download the template here</span></span></div>\r\n <div class=\"upload-text\">Step2 - Add your data to the Template File with existing store data</div>\r\n <div class=\"upload-text\">Step3 - Upload it below for processing</div>\r\n <div class=\"note-text\">**Note : On uploading, all the existing data will be replaced</div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"card-footer border-0 text-end mt-3 pt-0\">\r\n <button class=\"btn btn-md btn-default btn-outline\" (click)=\"model.close()\">Cancel</button>\r\n <button class=\"btn py-3 btn-default ms-3 btn-primary\" (click)=\"file1.click()\">Upload</button>\r\n <input style=\"visibility: hidden;\" #file1 type=\"file\" id=\"kt_account_team_size_select_2\"\r\n (change)=\"onFileUpload($event)\" />\r\n </div>\r\n \r\n \r\n </div>\r\n\r\n</ng-template>", styles: [".badge{padding:8px!important;border-radius:8px!important;background:var(--Gray-100, #F2F4F7)!important}.store-conf{color:var(--Gray-500, #667085)!important;font-size:12px!important;font-weight:500;line-height:18px}.productdrop{top:10;left:83%;z-index:10}.producttext{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.template-dropdown{background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.upload-text{color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:30px}.download-text{color:var(--Primary-800, #008EDF);font-size:14px;font-weight:500;line-height:20px}.note-text{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:20px}.rotate{rotate:180deg;transition:1s}\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: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }] });
427
430
  }
428
431
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StoreTimeConfigurationComponent, decorators: [{
429
432
  type: Component,
430
- args: [{ selector: 'lib-store-time-configuration', template: "<div class=\"row\">\r\n <ng-container>\r\n <div class=\"col-12 mb-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div class=\"badge badge-light-default\">\r\n <span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_9503_97591)\">\r\n <path\r\n d=\"M7.9987 10.6654V7.9987M7.9987 5.33203H8.00536M14.6654 7.9987C14.6654 11.6806 11.6806 14.6654 7.9987 14.6654C4.3168 14.6654 1.33203 11.6806 1.33203 7.9987C1.33203 4.3168 4.3168 1.33203 7.9987 1.33203C11.6806 1.33203 14.6654 4.3168 14.6654 7.9987Z\"\r\n stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_9503_97591\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n <span class=\"store-conf\">You Can Edit only Open time and Close time</span>\r\n </div>\r\n <ng-container *ngIf=\"!loading && storeListData?.length && !noData\">\r\n <button *ngIf=\"isEditing ===''\" (click)=\"editStoreList('edit')\" type=\"button\" class=\"btn btn-outline align-items-end\"><span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_9964_44262)\">\r\n <path d=\"M9.16797 3.33417H3.33464C2.89261 3.33417 2.46868 3.50977 2.15612 3.82233C1.84356 4.13489 1.66797 4.55881 1.66797 5.00084V16.6675C1.66797 17.1095 1.84356 17.5335 2.15612 17.846C2.46868 18.1586 2.89261 18.3342 3.33464 18.3342H15.0013C15.4433 18.3342 15.8673 18.1586 16.1798 17.846C16.4924 17.5335 16.668 17.1095 16.668 16.6675V10.8342M15.418 2.08417C15.7495 1.75265 16.1991 1.56641 16.668 1.56641C17.1368 1.56641 17.5864 1.75265 17.918 2.08417C18.2495 2.41569 18.4357 2.86533 18.4357 3.33417C18.4357 3.80301 18.2495 4.25265 17.918 4.58417L10.0013 12.5008L6.66797 13.3342L7.5013 10.0008L15.418 2.08417Z\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_9964_44262\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span>Edit Store Time</button>\r\n\r\n <div *ngIf=\"isEditing ==='edit'\" class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4\" (click)=\"onCancel()\">Cancel</a>\r\n <a type=\"submit\" class=\"btn btn-primary px-4 \" (click)=\"onSubmit()\"><span>Save Changes</span></a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-md-9 mt-3\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1 w-50\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input (change)=\"searchData()\" [(ngModel)]=\"searchValue\" type=\"text\" class=\"form-control ps-14 me-2\"\r\n autocomplete=\"off\" placeholder=\"Search with Store Name, Store ID\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 mt-3 text-end ps-15\">\r\n <div class=\"position-relative w-100 mt-5 mb-5\">\r\n <button type=\"button\"\r\n class=\"btn py-3 btn-default w-100 btn-outline btn-outline-default rounded-3 text-nowrap border-val d-flex justify-content-between\">\r\n <span class=\"me-3 cursor-pointer\" #upload (click)=\"inputFile.click()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> <span class=\"template-dropdown bg-white ms-3\">BulkUpload </span>\r\n </span>\r\n <span><input style=\"display: none;\" type=\"file\" #inputFile accept = \".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n id=\"kt_account_team_size_select_1\" (change)=\"onFileUpload($event)\" /></span>\r\n <span class=\"subtitle mx-3 me-2\"> | </span>\r\n <span class=\"cursor-pointer\" (click)=\"openDropdown($event)\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M6 9L12 15L18 9\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </button>\r\n\r\n <div *ngIf=\"dropDown\" class=\"card template-dropdown h-40px w-100 pe-5 position-absolute rounded-3 z-1 top-50px end-0\">\r\n <ul class=\"list-unstyled mb-0 w-auto cursor-pointer\" (click)=\"downloadTemplate()\">\r\n <li class=\"pe-5 fw-semibold cursor-pointer py-2\">Download Template</li>\r\n </ul>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div *ngIf=\"downloadDropDown\"\r\n class=\"card w-auto py-2 position-absolute productdrop top-10\">\r\n <ul class=\"list-unstyled mb-2\">\r\n <li class=\"producttext items cursor-pointer p-2\"\r\n (click)=\"downloadTemplate()\">\r\n Download Template</li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n\r\n</div>\r\n<ng-container *ngIf=\"noData\" >\r\n <div class=\"d-flex align-items-center justify-content-center\" >\r\n <img width=\"300px\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\"> \r\n </div>\r\n</ng-container>\r\n \r\n\r\n<ng-container *ngIf=\"loading\" >\r\n<div class=\"shimmer-card w-100\">\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 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</div>\r\n\r\n</ng-container>\r\n<div *ngIf=\"!loading && storeListData?.length && !noData\" class=\"card-body mt-2\">\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name <svg \r\n [ngClass]=\"sortedColumn === 'storeName' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('openTime')\">Open Time<svg \r\n [ngClass]=\"sortedColumn === 'openTime' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'openTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('openTime')\">Close Time<svg \r\n [ngClass]=\"sortedColumn === 'openTime' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'openTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of storeListData; let i=index;\">\r\n <td>{{obj.storeName}}</td>\r\n <td><span *ngIf=\"isEditing===''\">{{formatTime(obj.openTime)}}</span>\r\n <input *ngIf=\"isEditing==='edit'\" [(ngModel)]=\"obj.openTime\" (change)=\"updateCloseTime(obj)\" class=\"form-control form-control-sm\" type=\"time\">\r\n </td>\r\n <td> <span *ngIf=\"isEditing===''\">{{ formatTime(obj.closeTime) }}</span>\r\n <input *ngIf=\"isEditing==='edit'\" class=\"form-control form-control-sm\" type=\"time\" [(ngModel)]=\"obj.closeTime\" [min]=\"obj.openTime\" (change)=\"validateCloseTime()\">\r\n <div *ngIf=\"obj.showError\" class=\"text-danger\">\r\n Close time must be later than open time.\r\n </div> \r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table>\r\n </div>\r\n</div>\r\n<div *ngIf=\"!loading && storeListData?.length && !noData\" class=\"card-footer\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n</div>\r\n\r\n<ng-template #bulkUploadPopup let-model>\r\n <div class=\"p-5\">\r\n <div class=\"card-body py-0 d-flex flex-start flex-column p-5 text-nowrap\">\r\n <div class=\"my-5 d-flex\">\r\n <div class=\"d-flex\">\r\n <span class=\"symbol symbol-75px symbol-circle\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\"/>\r\n <path d=\"M27.5 22.5V25.8333C27.5 26.2754 27.3244 26.6993 27.0118 27.0118C26.6993 27.3244 26.2754 27.5 25.8333 27.5H14.1667C13.7246 27.5 13.3007 27.3244 12.9882 27.0118C12.6756 26.6993 12.5 26.2754 12.5 25.8333V22.5M24.1667 16.6667L20 12.5M20 12.5L15.8333 16.6667M20 12.5V22.5\" stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span class=\"ms-3 pt-2 fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">Bulk Upload</span>\r\n </div>\r\n </div>\r\n <div class=\"row w-100\">\r\n <div class=\"col-md-12\">\r\n <div class=\"upload-text\">Step1 - <span class=\"text-decoration-underline text-primary download-text\"><span (click)=\"downloadTemplateV2()\" class=\"cursor-pointer\">Download the template here</span></span></div>\r\n <div class=\"upload-text\">Step2 - Add your data to the Template File with existing store data</div>\r\n <div class=\"upload-text\">Step3 - Upload it below for processing</div>\r\n <div class=\"note-text\">**Note : On uploading, all the existing data will be replaced</div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"card-footer border-0 text-end mt-3 pt-0\">\r\n <button class=\"btn btn-md btn-default btn-outline\" (click)=\"model.close()\">Cancel</button>\r\n <button class=\"btn py-3 btn-default ms-3 btn-primary\" (click)=\"file1.click()\">Upload</button>\r\n <input style=\"visibility: hidden;\" #file1 type=\"file\" id=\"kt_account_team_size_select_2\"\r\n (change)=\"onFileUpload($event)\" />\r\n </div>\r\n \r\n \r\n </div>\r\n\r\n</ng-template>", styles: [".badge{padding:8px!important;border-radius:8px!important;background:var(--Gray-100, #F2F4F7)!important}.store-conf{color:var(--Gray-500, #667085)!important;font-size:12px!important;font-weight:500;line-height:18px}.productdrop{top:10;left:83%;z-index:10}.producttext{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.template-dropdown{background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.upload-text{color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:30px}.download-text{color:var(--Primary-800, #008EDF);font-size:14px;font-weight:500;line-height:20px}.note-text{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:20px}.rotate{rotate:180deg;transition:1s}\n"] }]
431
- }], ctorParameters: () => [{ type: i1.ExcelService }, { type: i2.ClientApiService }, { type: i3.NgbModal }, { type: i4.ToastService }, { type: i0.ChangeDetectorRef }], propDecorators: { inputFile: [{
433
+ args: [{ selector: 'lib-store-time-configuration', template: "<div class=\"row\">\r\n <ng-container>\r\n <div class=\"col-12 mb-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <!-- The edit hint only makes sense to users who can edit, i.e. tango users. -->\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"badge badge-light-default\">\r\n <span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_9503_97591)\">\r\n <path\r\n d=\"M7.9987 10.6654V7.9987M7.9987 5.33203H8.00536M14.6654 7.9987C14.6654 11.6806 11.6806 14.6654 7.9987 14.6654C4.3168 14.6654 1.33203 11.6806 1.33203 7.9987C1.33203 4.3168 4.3168 1.33203 7.9987 1.33203C11.6806 1.33203 14.6654 4.3168 14.6654 7.9987Z\"\r\n stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_9503_97591\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n <span class=\"store-conf\">You Can Edit only Open time and Close time</span>\r\n </div>\r\n <!-- Editing store times is for tango users only; client users see the table read-only. -->\r\n <ng-container *ngIf=\"!loading && storeListData?.length && !noData && (gs.userAccess | async)?.userType === 'tango'\">\r\n <button *ngIf=\"isEditing ===''\" (click)=\"editStoreList('edit')\" type=\"button\" class=\"btn btn-outline align-items-end\"><span class=\"me-2\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_9964_44262)\">\r\n <path d=\"M9.16797 3.33417H3.33464C2.89261 3.33417 2.46868 3.50977 2.15612 3.82233C1.84356 4.13489 1.66797 4.55881 1.66797 5.00084V16.6675C1.66797 17.1095 1.84356 17.5335 2.15612 17.846C2.46868 18.1586 2.89261 18.3342 3.33464 18.3342H15.0013C15.4433 18.3342 15.8673 18.1586 16.1798 17.846C16.4924 17.5335 16.668 17.1095 16.668 16.6675V10.8342M15.418 2.08417C15.7495 1.75265 16.1991 1.56641 16.668 1.56641C17.1368 1.56641 17.5864 1.75265 17.918 2.08417C18.2495 2.41569 18.4357 2.86533 18.4357 3.33417C18.4357 3.80301 18.2495 4.25265 17.918 4.58417L10.0013 12.5008L6.66797 13.3342L7.5013 10.0008L15.418 2.08417Z\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_9964_44262\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span>Edit Store Time</button>\r\n\r\n <div *ngIf=\"isEditing ==='edit'\" class=\"d-flex justify-content-end\">\r\n <a type=\"button\" class=\"btn btn-outline mt-1 me-4\" (click)=\"onCancel()\">Cancel</a>\r\n <a type=\"submit\" class=\"btn btn-primary px-4 \" (click)=\"onSubmit()\"><span>Save Changes</span></a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-md-9 mt-3\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1 w-50\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input (change)=\"searchData()\" [(ngModel)]=\"searchValue\" type=\"text\" class=\"form-control ps-14 me-2\"\r\n autocomplete=\"off\" placeholder=\"Search with Store Name, Store ID\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 mt-3 text-end ps-15\">\r\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"position-relative w-100 mt-5 mb-5\">\r\n <button type=\"button\"\r\n class=\"btn py-3 btn-default w-100 btn-outline btn-outline-default rounded-3 text-nowrap border-val d-flex justify-content-between\">\r\n <span class=\"me-3 cursor-pointer\" #upload (click)=\"inputFile.click()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> <span class=\"template-dropdown bg-white ms-3\">BulkUpload </span>\r\n </span>\r\n <span><input style=\"display: none;\" type=\"file\" #inputFile accept = \".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n id=\"kt_account_team_size_select_1\" (change)=\"onFileUpload($event)\" /></span>\r\n <span class=\"subtitle mx-3 me-2\"> | </span>\r\n <span class=\"cursor-pointer\" (click)=\"openDropdown($event)\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M6 9L12 15L18 9\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </button>\r\n\r\n <div *ngIf=\"dropDown\" class=\"card template-dropdown h-40px w-100 pe-5 position-absolute rounded-3 z-1 top-50px end-0\">\r\n <ul class=\"list-unstyled mb-0 w-auto cursor-pointer\" (click)=\"downloadTemplate()\">\r\n <li class=\"pe-5 fw-semibold cursor-pointer py-2\">Download Template</li>\r\n </ul>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div *ngIf=\"downloadDropDown\"\r\n class=\"card w-auto py-2 position-absolute productdrop top-10\">\r\n <ul class=\"list-unstyled mb-2\">\r\n <li class=\"producttext items cursor-pointer p-2\"\r\n (click)=\"downloadTemplate()\">\r\n Download Template</li>\r\n </ul>\r\n </div>\r\n </ng-container>\r\n\r\n</div>\r\n<ng-container *ngIf=\"noData\" >\r\n <div class=\"d-flex align-items-center justify-content-center\" >\r\n <img width=\"300px\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\"> \r\n </div>\r\n</ng-container>\r\n \r\n\r\n<ng-container *ngIf=\"loading\" >\r\n<div class=\"shimmer-card w-100\">\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 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</div>\r\n\r\n</ng-container>\r\n<div *ngIf=\"!loading && storeListData?.length && !noData\" class=\"card-body mt-2\">\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name <svg \r\n [ngClass]=\"sortedColumn === 'storeName' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('openTime')\">Open Time<svg \r\n [ngClass]=\"sortedColumn === 'openTime' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'openTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></th>\r\n <th><span class=\"cursor-pointer\" (click)=\"onSort('openTime')\">Close Time<svg \r\n [ngClass]=\"sortedColumn === 'openTime' && sortOrder === 1 ? 'rotate' : ''\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'openTime' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of storeListData; let i=index;\">\r\n <td>{{obj.storeName}}</td>\r\n <td><span *ngIf=\"isEditing===''\">{{formatTime(obj.openTime)}}</span>\r\n <input *ngIf=\"isEditing==='edit'\" [(ngModel)]=\"obj.openTime\" (change)=\"updateCloseTime(obj)\" class=\"form-control form-control-sm\" type=\"time\">\r\n </td>\r\n <td> <span *ngIf=\"isEditing===''\">{{ formatTime(obj.closeTime) }}</span>\r\n <input *ngIf=\"isEditing==='edit'\" class=\"form-control form-control-sm\" type=\"time\" [(ngModel)]=\"obj.closeTime\" [min]=\"obj.openTime\" (change)=\"validateCloseTime()\">\r\n <div *ngIf=\"obj.showError\" class=\"text-danger\">\r\n Close time must be later than open time.\r\n </div> \r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table>\r\n </div>\r\n</div>\r\n<div *ngIf=\"!loading && storeListData?.length && !noData\" class=\"card-footer\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n</div>\r\n\r\n<ng-template #bulkUploadPopup let-model>\r\n <div class=\"p-5\">\r\n <div class=\"card-body py-0 d-flex flex-start flex-column p-5 text-nowrap\">\r\n <div class=\"my-5 d-flex\">\r\n <div class=\"d-flex\">\r\n <span class=\"symbol symbol-75px symbol-circle\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\">\r\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#DAF1FF\"/>\r\n <path d=\"M27.5 22.5V25.8333C27.5 26.2754 27.3244 26.6993 27.0118 27.0118C26.6993 27.3244 26.2754 27.5 25.8333 27.5H14.1667C13.7246 27.5 13.3007 27.3244 12.9882 27.0118C12.6756 26.6993 12.5 26.2754 12.5 25.8333V22.5M24.1667 16.6667L20 12.5M20 12.5L15.8333 16.6667M20 12.5V22.5\" stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span class=\"ms-3 pt-2 fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">Bulk Upload</span>\r\n </div>\r\n </div>\r\n <div class=\"row w-100\">\r\n <div class=\"col-md-12\">\r\n <div class=\"upload-text\">Step1 - <span class=\"text-decoration-underline text-primary download-text\"><span (click)=\"downloadTemplateV2()\" class=\"cursor-pointer\">Download the template here</span></span></div>\r\n <div class=\"upload-text\">Step2 - Add your data to the Template File with existing store data</div>\r\n <div class=\"upload-text\">Step3 - Upload it below for processing</div>\r\n <div class=\"note-text\">**Note : On uploading, all the existing data will be replaced</div>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n <div class=\"card-footer border-0 text-end mt-3 pt-0\">\r\n <button class=\"btn btn-md btn-default btn-outline\" (click)=\"model.close()\">Cancel</button>\r\n <button class=\"btn py-3 btn-default ms-3 btn-primary\" (click)=\"file1.click()\">Upload</button>\r\n <input style=\"visibility: hidden;\" #file1 type=\"file\" id=\"kt_account_team_size_select_2\"\r\n (change)=\"onFileUpload($event)\" />\r\n </div>\r\n \r\n \r\n </div>\r\n\r\n</ng-template>", styles: [".badge{padding:8px!important;border-radius:8px!important;background:var(--Gray-100, #F2F4F7)!important}.store-conf{color:var(--Gray-500, #667085)!important;font-size:12px!important;font-weight:500;line-height:18px}.productdrop{top:10;left:83%;z-index:10}.producttext{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.template-dropdown{background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.upload-text{color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:30px}.download-text{color:var(--Primary-800, #008EDF);font-size:14px;font-weight:500;line-height:20px}.note-text{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:20px}.rotate{rotate:180deg;transition:1s}\n"] }]
434
+ }], ctorParameters: () => [{ type: i1.ExcelService }, { type: i2.ClientApiService }, { type: i3.NgbModal }, { type: i4.ToastService }, { type: i0.ChangeDetectorRef }, { type: i5.GlobalStateService }], propDecorators: { inputFile: [{
432
435
  type: ViewChild,
433
436
  args: ["inputFile"]
434
437
  }], fileInput1: [{
@@ -438,4 +441,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
438
441
  type: ViewChild,
439
442
  args: ['bulkUploadPopup']
440
443
  }] } });
441
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtdGltZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1zZXR0aW5ncy9zcmMvbGliL2NvbXBvbmVudHMvY29uZmlndXJhdGlvbnMvc3RvcmUtdGltZS1jb25maWd1cmF0aW9uL3N0b3JlLXRpbWUtY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL3N0b3JlLXRpbWUtY29uZmlndXJhdGlvbi9zdG9yZS10aW1lLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BGLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQU8xQyxNQUFNLE9BQU8sK0JBQStCO0lBU3hCO0lBQW1DO0lBQW9DO0lBQThCO0lBQXdCO0lBUC9JLFdBQVcsQ0FBSztJQUNoQixnQkFBZ0IsR0FBRSxLQUFLLENBQUM7SUFDeEIsVUFBVSxDQUFLO0lBQ2YsV0FBVyxHQUFLLEVBQUUsQ0FBQztJQUNuQixLQUFLLEdBQUMsRUFBRSxDQUFDO0lBQ1QsTUFBTSxHQUFDLENBQUMsQ0FBQztJQUNVLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQzlDLFlBQW9CLFlBQXlCLEVBQVUsU0FBMkIsRUFBUyxZQUFxQixFQUFTLEVBQWUsRUFBUyxFQUFvQjtRQUFqSixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQVMsaUJBQVksR0FBWixZQUFZLENBQVM7UUFBUyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQVMsT0FBRSxHQUFGLEVBQUUsQ0FBa0I7UUFDbEssSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN0RSxJQUFJLENBQUMsRUFBRTtnQkFDTCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxHQUFHLEdBQUU7b0JBQ1AsUUFBUSxFQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUTtvQkFDbEMsS0FBSyxFQUFDLElBQUksQ0FBQyxLQUFLO29CQUNoQixNQUFNLEVBQUMsSUFBSSxDQUFDLE1BQU07b0JBQ2xCLFNBQVMsRUFBQyxJQUFJLENBQUMsU0FBUztvQkFDeEIsTUFBTSxFQUFDLElBQUksQ0FBQyxZQUFZO29CQUN4QixXQUFXLEVBQUMsSUFBSSxDQUFDLFdBQVc7aUJBQzdCLENBQUE7Z0JBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRSxHQUFHLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNiO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsYUFBYSxDQUFLO0lBQ2xCLFVBQVUsQ0FBRztJQUNiLE9BQU8sR0FBRSxJQUFJLENBQUM7SUFDZCxNQUFNLEdBQUUsS0FBSyxDQUFDO0lBQ2QsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLEdBQUUsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUUsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3pGLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNaLElBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUcsR0FBRyxFQUFDO29CQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDO29CQUN6QyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO29CQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFFLEtBQUssQ0FBQztvQkFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRSxLQUFLLENBQUM7b0JBQ25CLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2lCQUN6QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsYUFBYSxHQUFFLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRSxDQUFDLENBQUM7b0JBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUUsS0FBSyxDQUFDO29CQUNwQixJQUFJLENBQUMsTUFBTSxHQUFFLElBQUksQ0FBQztpQkFDbkI7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFDLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGFBQWEsR0FBRSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUUsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLENBQUMsT0FBTyxHQUFFLEtBQUssQ0FBQztnQkFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRSxJQUFJLENBQUM7WUFDcEIsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUVKLENBQUM7SUFDRCxZQUFZLENBQU07SUFDbEIsU0FBUyxDQUFNO0lBQ2YsTUFBTSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLE1BQU0sRUFBRTtZQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hEO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztTQUNwQjtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFFLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVk7WUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFDM0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFDRCxTQUFTLEdBQUUsRUFBRSxDQUFDO0lBQ2QsYUFBYSxDQUFDLElBQVE7UUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRSxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFFbkMsQ0FBQztJQUNELHlCQUF5QjtRQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVMsRUFBRSxFQUFFO1lBQ3ZDLElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNoRyxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEI7YUFDL0Q7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxJQUFZO1FBQ25DLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtJQUNwRCxDQUFDO0lBQ0MsVUFBVTtRQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFFLElBQUksQ0FBQyxXQUFXLENBQUE7UUFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUUsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFFLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWTtZQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztZQUMzQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDYixDQUFDO0lBRUQsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixZQUFZLENBQUMsS0FBUztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUNqQyxDQUFDO0lBQ3lCLFNBQVMsQ0FBYTtJQUNoRCxZQUFZLENBQUMsS0FBVTtRQUNyQixNQUFNLEtBQUssR0FBcUIsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBcUIsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hELG1GQUFtRjtRQUNuRixLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFcEIsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQztRQUMvQyxNQUFNLFlBQVksR0FBRztZQUNuQixtRUFBbUU7WUFDbkUsMEJBQTBCO1lBQzFCLFVBQVU7WUFDVixpQkFBaUI7U0FDbEIsQ0FBQztRQUVGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDM0UsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUN0RSxPQUFPO1NBQ1I7UUFDQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBZSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUMzRixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDdkIsSUFBSSxPQUFPLEdBQVUsRUFBRSxDQUFDO1lBQ3hCLElBQUksSUFBSSxHQUFVLEVBQUUsQ0FBQztZQUNyQixJQUFJO2dCQUNBLE1BQU0sRUFBRSxHQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RixNQUFNLEVBQUUsR0FBbUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELE9BQU8sR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQVcsSUFBSSxFQUFFLENBQUM7Z0JBQzFFLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUN2QztZQUFDLE9BQU8sR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGlFQUFpRSxDQUFDLENBQUM7Z0JBQ3pGLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxLQUFLLEVBQUU7WUFDUCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNCO2FBQU07WUFDSCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRUQsbUZBQW1GO0lBQ25GLG1CQUFtQixDQUFDLE9BQWMsRUFBRSxJQUFXO1FBQzNDLE1BQU0sY0FBYyxHQUFHLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxzQkFBc0IsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUNBQXVDLENBQUMsQ0FBQyxDQUFDO1lBQ2hILE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUMxRCxPQUFPO1NBQ1Y7UUFFRCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxDQUFTLEVBQUUsRUFBRTtZQUM1QyxtR0FBbUc7WUFDbkcsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUN6RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFdkQsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDWixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSywwQkFBMEIsQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDWCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQzFFO1lBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDWixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQzVFO1lBQ0QsSUFBSSxRQUFRLElBQUksU0FBUyxJQUFJLFNBQVMsR0FBRyxRQUFRLEVBQUU7Z0JBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLGdCQUFnQixTQUFTLHdCQUF3QixRQUFRLEdBQUcsQ0FBQyxDQUFDO2FBQ3JGO1lBQ0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQWEsRUFBRSxLQUFhLEVBQUUsS0FBVTtRQUN2RCxPQUFPLEtBQUssS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFDckQsQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLEtBQUssY0FBYztZQUNsQyxDQUFDLENBQUMsR0FBRyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssb0NBQW9DLENBQUM7SUFDM0UsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQWdCO1FBQzdCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNuQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFO1lBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxNQUFNLENBQUMsTUFBTSxHQUFHLFFBQVEsT0FBTyxDQUFDLENBQUM7U0FDekQ7UUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsTUFBTSxDQUFDLE1BQU0sU0FBUyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakksQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhO1FBQ3BCLE1BQU0sUUFBUSxHQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDOUYsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELHVFQUF1RTtJQUN2RSxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzNCLDBGQUEwRjtZQUMxRixJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDdkUsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNsRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELElBQUksT0FBTyxHQUFHLFlBQVksR0FBRyxFQUFFLENBQUM7WUFFaEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzlFO1FBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDM0Isa0VBQWtFO1lBQ2xFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUN4QixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3pDLElBQUksUUFBUSxFQUFFO2dCQUNWLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtvQkFBRSxPQUFPLElBQUksQ0FBQztnQkFDekMsS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2RDtZQUNELElBQUksS0FBSyxHQUFHLEVBQUUsSUFBSSxPQUFPLEdBQUcsRUFBRSxJQUFJLE9BQU8sR0FBRyxFQUFFO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzVELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM5RTtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUFXO1FBQ2IsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUNxQixVQUFVLENBQWM7SUFDZCxlQUFlLENBQU07SUFDbkQsa0JBQWtCLENBQTBCO0lBQzVDLGdCQUFnQjtRQUNkLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3JFLFFBQVEsRUFBRSxJQUFJO1lBQ2QsY0FBYztZQUNkLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLEdBQUUsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFBO1FBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2pHLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNaLElBQUcsR0FBRyxFQUFDO29CQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFFLEtBQUssQ0FBQTtvQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLHVCQUF1QixDQUFDLENBQUE7aUJBQy9EO1lBQ0gsQ0FBQztTQUNBLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRSxFQUFFLENBQUE7SUFDcEIsQ0FBQztJQUNELGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xHLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztTQUNwQztJQUNILENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN0QyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDdkIsT0FBTyxHQUFHLEtBQUssQ0FBQzthQUNuQjtpQkFBTTtnQkFDSCxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUMzQjtRQUNELENBQUMsQ0FBQyxDQUFBO1FBRUYsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELFVBQVUsQ0FBQyxJQUFZO1FBQ3JCLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxVQUFVLENBQUMsQ0FBQyxtQkFBbUI7UUFDakQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxHQUFHLEtBQUssQ0FBQztRQUUzQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDQyxRQUFRO1FBQ04sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUNyRCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsY0FBYyxDQUFDLE1BQWEsRUFBRSxPQUFvQjtRQUNoRCxJQUFJLEdBQUcsR0FBRztZQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFDcEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2hDLFdBQVcsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDNUIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDM0MsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQzthQUNoRCxDQUFDLENBQUM7U0FDUixDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNsRixJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDWixJQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFHLEdBQUcsRUFBQztvQkFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsZ0RBQWdELENBQUMsQ0FBQTtvQkFDekUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNmLElBQUksQ0FBQyxTQUFTLEdBQUUsRUFBRSxDQUFBO29CQUNsQixPQUFPLEVBQUUsRUFBRSxDQUFDO2lCQUNiO3FCQUFNO29CQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLElBQUksNENBQTRDLENBQUMsQ0FBQTtpQkFDcEY7WUFDSCxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsR0FBTyxFQUFDLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNuRixDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0YsQ0FBQztJQUNELGVBQWUsR0FBUyxFQUFFLENBQUM7SUFDM0IsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNkLGtCQUFrQjtRQUNoQixJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3JDO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsa0NBQWtDO1NBQzdFO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxZQUFZLENBQUMsVUFBa0I7UUFFN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsSUFBSSxHQUFHLEdBQUU7WUFDUCxRQUFRLEVBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRO1lBQ2xDLEtBQUssRUFBQyxJQUFJLENBQUMsS0FBSztZQUNoQixNQUFNLEVBQUMsSUFBSSxDQUFDLE1BQU07WUFDbEIsU0FBUyxFQUFDLElBQUksQ0FBQyxTQUFTO1lBQ3hCLE1BQU0sRUFBQyxJQUFJLENBQUMsWUFBWTtZQUN4QixXQUFXLEVBQUMsSUFBSSxDQUFDLFdBQVc7U0FDN0IsQ0FBQTtRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDNUUsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ1osSUFBRyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBRyxHQUFHLEVBQUM7b0JBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7b0JBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUUsS0FBSyxDQUFDO29CQUNwQixJQUFJLENBQUMsTUFBTSxHQUFFLEtBQUssQ0FBQztpQkFFbEI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRSxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUUsQ0FBQyxDQUFDO29CQUNuQixJQUFJLENBQUMsT0FBTyxHQUFFLEtBQUssQ0FBQztvQkFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRSxJQUFJLENBQUM7aUJBQ25CO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBQyxFQUFFO2dCQUNaLElBQUksQ0FBQyxhQUFhLEdBQUUsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsVUFBVSxHQUFFLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRSxLQUFLLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUUsSUFBSSxDQUFDO1lBQ3BCLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsUUFBZ0I7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRSxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixJQUFJLEdBQUcsR0FBRTtZQUNQLFFBQVEsRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVE7WUFDbEMsS0FBSyxFQUFDLElBQUksQ0FBQyxLQUFLO1lBQ2hCLE1BQU0sRUFBQyxJQUFJLENBQUMsTUFBTTtZQUNsQixTQUFTLEVBQUMsSUFBSSxDQUFDLFNBQVM7WUFDeEIsTUFBTSxFQUFDLElBQUksQ0FBQyxZQUFZO1lBQ3hCLFdBQVcsRUFBQyxJQUFJLENBQUMsV0FBVztTQUM3QixDQUFBO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM1RSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDWixJQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFHLEdBQUcsRUFBQztvQkFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQztvQkFDekMsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztvQkFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRSxLQUFLLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUUsS0FBSyxDQUFDO2lCQUVsQjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsYUFBYSxHQUFFLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRSxDQUFDLENBQUM7b0JBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUUsS0FBSyxDQUFDO29CQUNwQixJQUFJLENBQUMsTUFBTSxHQUFFLElBQUksQ0FBQztpQkFDbkI7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFDLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLGFBQWEsR0FBRSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUUsQ0FBQyxDQUFDO2dCQUNuQixJQUFJLENBQUMsT0FBTyxHQUFFLEtBQUssQ0FBQztnQkFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRSxJQUFJLENBQUM7WUFDcEIsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7d0dBNVpVLCtCQUErQjs0RkFBL0IsK0JBQStCLHVXQ1o1Qyxrb2VBd05jOzs0RkQ1TUQsK0JBQStCO2tCQUwzQyxTQUFTOytCQUNFLDhCQUE4QjtrTUEyR2QsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQTZJSixVQUFVO3NCQUE3QixTQUFTO3VCQUFDLE9BQU87Z0JBQ1ksZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwsIE5nYk1vZGFsUmVmIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgQ2xpZW50QXBpU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NsaWVudC1hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBFeGNlbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZXhjZWwuc2VydmljZVwiOyBcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItc3RvcmUtdGltZS1jb25maWd1cmF0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3RvcmUtdGltZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc3RvcmUtdGltZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU3RvcmVUaW1lQ29uZmlndXJhdGlvbkNvbXBvbmVudCB7XHJcblxyXG4gIHNlYXJjaFZhbHVlOmFueTtcclxuICBkb3dubG9hZERyb3BEb3duID1mYWxzZTtcclxuICBjbGllbnREYXRhOmFueTtcclxuICB0YWJsZU9iamVjdDphbnk9e307XHJcbiAgbGltaXQ9MTA7XHJcbiAgb2Zmc2V0PTE7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuY29uc3RydWN0b3IocHJpdmF0ZSBleGNlbFNlcnZpY2U6RXhjZWxTZXJ2aWNlLCBwcml2YXRlIGNsaWVudEFwaTogQ2xpZW50QXBpU2VydmljZSxwcml2YXRlIG1vZGFsU2VydmljZTpOZ2JNb2RhbCxwcml2YXRlIHRzOlRvYXN0U2VydmljZSxwcml2YXRlIGNkOkNoYW5nZURldGVjdG9yUmVmKXtcclxuICAgdGhpcy5jbGllbnRBcGkuY2xpZW50RGF0YS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnREYXRhID0gZTtcclxuICAgICAgICBsZXQgb2JqID17XHJcbiAgICAgICAgICBjbGllbnRJZDp0aGlzLmNsaWVudERhdGE/LmNsaWVudElkLFxyXG4gICAgICAgICAgbGltaXQ6dGhpcy5saW1pdCxcclxuICAgICAgICAgIG9mZnNldDp0aGlzLm9mZnNldCxcclxuICAgICAgICAgIHNvcnRPcmRlcjp0aGlzLnNvcnRPcmRlcixcclxuICAgICAgICAgIHNvcnRCeTp0aGlzLnNvcnRlZENvbHVtbixcclxuICAgICAgICAgIHNlYXJjaFZhbHVlOnRoaXMuc2VhcmNoVmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJsZU9iamVjdCA9b2JqO1xyXG4gICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG5zdG9yZUxpc3REYXRhOmFueTtcclxudG90YWxDb3VudDowO1xyXG5sb2FkaW5nID10cnVlO1xyXG5ub0RhdGEgPWZhbHNlO1xyXG5nZXREYXRhKCl7XHJcbiAgdGhpcy5sb2FkaW5nID10cnVlO1xyXG4gIHRoaXMubm9EYXRhID1mYWxzZTtcclxuICB0aGlzLmNsaWVudEFwaS5nZXRPcGVuQ2xvc2VMaXN0KHRoaXMudGFibGVPYmplY3QpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICBpZihyZXMgJiYgcmVzLmNvZGUgPT0yMDApe1xyXG4gICAgICAgIHRoaXMuc3RvcmVMaXN0RGF0YSA9IHJlcz8uZGF0YT8ucmVzdWx0O1xyXG4gICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXM/LmRhdGE/LmNvdW50O1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICB0aGlzLm5vRGF0YSA9ZmFsc2U7XHJcbiAgICAgIHRoaXMuc2V0UGFnaW5hdGlvblNpemVzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3REYXRhID1bXTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPTA7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID1mYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9dHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGVycm9yOiAoZXJyKT0+e1xyXG4gICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPVtdO1xyXG4gICAgICB0aGlzLnRvdGFsQ291bnQgPTA7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9ZmFsc2U7XHJcbiAgICAgIHRoaXMubm9EYXRhID10cnVlO1xyXG4gICAgfVxyXG4gIH0pXHJcbiAgXHJcbn1cclxuc29ydGVkQ29sdW1uOiBhbnk7XHJcbnNvcnRPcmRlcjogYW55O1xyXG5vblNvcnQoY29sdW1uOiBzdHJpbmcpIHtcclxuICBpZiAodGhpcy5zb3J0ZWRDb2x1bW4gPT09IGNvbHVtbikge1xyXG4gICAgdGhpcy5zb3J0T3JkZXIgPSB0aGlzLnNvcnRPcmRlciA9PT0gMSA/IC0xIDogMTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5zb3J0ZWRDb2x1bW4gPSBjb2x1bW47XHJcbiAgICB0aGlzLnNvcnRPcmRlciA9IDE7XHJcbiAgfVxyXG4gIHRoaXMudGFibGVPYmplY3QubGltaXQgPTEwO1xyXG50aGlzLnRhYmxlT2JqZWN0Lm9mZnNldCA9MTtcclxuICB0aGlzLnRhYmxlT2JqZWN0LnNvcnRCeSA9IHRoaXMuc29ydGVkQ29sdW1uLCBcclxuICB0aGlzLnRhYmxlT2JqZWN0LnNvcnRPcmRlciA9IHRoaXMuc29ydE9yZGVyLCBcclxuICB0aGlzLmdldERhdGEoKTtcclxufVxyXG5pc0VkaXRpbmcgPScnO1xyXG5lZGl0U3RvcmVMaXN0KGVkaXQ6YW55KXtcclxuICB0aGlzLmlzRWRpdGluZyA9ZWRpdDtcclxuICB0aGlzLnZhbGlkYXRlSW5pdGlhbENsb3NlVGltZXMoKTtcclxuIFxyXG59XHJcbnZhbGlkYXRlSW5pdGlhbENsb3NlVGltZXMoKSB7XHJcbiAgdGhpcy5zdG9yZUxpc3REYXRhLmZvckVhY2goKHN0b3JlOmFueSkgPT4ge1xyXG4gICAgaWYgKHRoaXMuY29udmVydFRpbWVUb0lucHV0Rm9ybWF0KHN0b3JlLmNsb3NlVGltZSkgPCB0aGlzLmNvbnZlcnRUaW1lVG9JbnB1dEZvcm1hdChzdG9yZS5vcGVuVGltZSkpIHtcclxuICAgICAgICBzdG9yZS5jbG9zZVRpbWUgPSBzdG9yZS5vcGVuVGltZTsgLy8gUmVzZXQgaW52YWxpZCBjbG9zZVRpbWVcclxuICAgIH1cclxufSk7XHJcbn1cclxuY29udmVydFRpbWVUb0lucHV0Rm9ybWF0KHRpbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgaWYgKCF0aW1lKSByZXR1cm4gXCIwMDowMFwiOyAvLyBEZWZhdWx0IHZhbHVlXHJcbiAgcmV0dXJuIHRpbWUuc3Vic3RyaW5nKDAsIDUpOyAvLyBFeHRyYWN0IG9ubHkgSEg6bW1cclxufVxyXG4gIHNlYXJjaERhdGEoKXtcclxudGhpcy50YWJsZU9iamVjdC5zZWFyY2hWYWx1ZSA9dGhpcy5zZWFyY2hWYWx1ZSBcclxudGhpcy50YWJsZU9iamVjdC5saW1pdCA9MTA7XHJcbnRoaXMudGFibGVPYmplY3Qub2Zmc2V0ID0xO1xyXG50aGlzLnRhYmxlT2JqZWN0LnNvcnRCeSA9IHRoaXMuc29ydGVkQ29sdW1uLCBcclxudGhpcy50YWJsZU9iamVjdC5zb3J0T3JkZXIgPSB0aGlzLnNvcnRPcmRlcixcclxudGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBkcm9wRG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9wZW5Ecm9wZG93bihldmVudDphbnkpIHtcclxuICAgIHRoaXMuZHJvcERvd24gPSAhdGhpcy5kcm9wRG93bjtcclxuICB9XHJcbiAgICBAVmlld0NoaWxkKFwiaW5wdXRGaWxlXCIpIGlucHV0RmlsZTogRWxlbWVudFJlZjtcclxuICBvbkZpbGVVcGxvYWQoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICBjb25zdCBmaWxlOiBGaWxlIHwgdW5kZWZpbmVkID0gaW5wdXQuZmlsZXM/LlswXTtcclxuICAgIC8vIENsZWFyIHRoZSBpbnB1dCBzbyBjaG9vc2luZyB0aGUgc2FtZSAoY29ycmVjdGVkKSBmaWxlIGFnYWluIHN0aWxsIGZpcmVzIChjaGFuZ2UpXHJcbiAgICBpbnB1dC52YWx1ZSA9IFwiXCI7XHJcbiAgICBpZiAoIWZpbGUpIHJldHVybjtcclxuXHJcbiAgY29uc3QgYWxsb3dlZEV4dGVuc2lvbnMgPSAvXFwuKHhsc3x4bHN4fGNzdikkL2k7XHJcbiAgY29uc3QgYWxsb3dlZFR5cGVzID0gW1xyXG4gICAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldFwiLFxyXG4gICAgXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIixcclxuICAgIFwidGV4dC9jc3ZcIixcclxuICAgIFwiYXBwbGljYXRpb24vY3N2XCIsXHJcbiAgXTtcclxuXHJcbiAgaWYgKCFhbGxvd2VkRXh0ZW5zaW9ucy50ZXN0KGZpbGUubmFtZSkgfHwgIWFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7XHJcbiAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoXCJPbmx5IC54bHMsIC54bHN4LCBvciAuY3N2IGZpbGVzIGFyZSBhbGxvd2VkLlwiKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgICBjb25zdCBpc0NzdiA9IC9cXC5jc3YkL2kudGVzdChmaWxlLm5hbWUpO1xyXG4gICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4gdGhpcy50cy5nZXRFcnJvclRvYXN0KFwiVW5hYmxlIHRvIHJlYWQgdGhlIGZpbGUuIFBsZWFzZSB0cnkgYWdhaW4uXCIpO1xyXG4gICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgaGVhZGVyczogYW55W10gPSBbXTtcclxuICAgICAgICBsZXQgZGF0YTogYW55W10gPSBbXTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChlLnRhcmdldC5yZXN1bHQsIHsgdHlwZTogaXNDc3YgPyAnc3RyaW5nJyA6ICdiaW5hcnknIH0pO1xyXG4gICAgICAgICAgICBjb25zdCB3czogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbd2IuU2hlZXROYW1lc1swXV07XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSAoWExTWC51dGlscy5zaGVldF90b19qc29uKHdzLCB7IGhlYWRlcjogMSB9KVswXSBhcyBhbnlbXSkgfHwgW107XHJcbiAgICAgICAgICAgIGRhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od3MpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoXCJVbmFibGUgdG8gcmVhZCB0aGUgZmlsZS4gUGxlYXNlIHVwbG9hZCB0aGUgZG93bmxvYWRlZCB0ZW1wbGF0ZS5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzVXBsb2FkZWREYXRhKGhlYWRlcnMsIGRhdGEpO1xyXG4gICAgfTtcclxuICAgIGlmIChpc0Nzdikge1xyXG4gICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGZpbGUpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBWYWxpZGF0ZSBldmVyeSB1cGxvYWRlZCByb3c7IHRoZSBBUEkgaXMgY2FsbGVkIG9ubHkgd2hlbiB0aGUgd2hvbGUgZmlsZSBpcyB2YWxpZFxyXG5wcm9jZXNzVXBsb2FkZWREYXRhKGhlYWRlcnM6IGFueVtdLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgY29uc3QgbWlzc2luZ0NvbHVtbnMgPSBbJ3N0b3JlTmFtZScsICdvcGVuVGltZScsICdjbG9zZVRpbWUnXS5maWx0ZXIoKGNvbCkgPT4gIWhlYWRlcnMuaW5jbHVkZXMoY29sKSk7XHJcbiAgICBpZiAobWlzc2luZ0NvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93VXBsb2FkRXJyb3JzKFtgTWlzc2luZyBjb2x1bW4ocyk6ICR7bWlzc2luZ0NvbHVtbnMuam9pbignLCAnKX0uIFBsZWFzZSB1c2UgdGhlIGRvd25sb2FkZWQgdGVtcGxhdGUuYF0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghZGF0YS5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoXCJObyBzdG9yZSBkYXRhIGZvdW5kIGluIHRoZSBmaWxlLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29uc3Qgc3RvcmVzID0gZGF0YS5tYXAoKHJvdzogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAvLyBfX3Jvd051bV9fIGlzIHRoZSAwLWJhc2VkIHNoZWV0IHJvdyBzZXQgYnkgc2hlZXRfdG9fanNvbjsgKzEgZ2l2ZXMgdGhlIHJvdyBudW1iZXIgc2hvd24gaW4gRXhjZWxcclxuICAgICAgICBjb25zdCByb3dObyA9IChyb3cuX19yb3dOdW1fXyA/PyBpICsgMSkgKyAxO1xyXG4gICAgICAgIGNvbnN0IHN0b3JlTmFtZSA9IFN0cmluZyhyb3cuc3RvcmVOYW1lID8/ICcnKS50cmltKCk7XHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSBzdG9yZU5hbWUgPyBgUm93ICR7cm93Tm99ICgke3N0b3JlTmFtZX0pYCA6IGBSb3cgJHtyb3dOb31gO1xyXG4gICAgICAgIGNvbnN0IG9wZW5UaW1lID0gdGhpcy5jb252ZXJ0RXhjZWxUaW1lKHJvdy5vcGVuVGltZSk7XHJcbiAgICAgICAgY29uc3QgY2xvc2VUaW1lID0gdGhpcy5jb252ZXJ0RXhjZWxUaW1lKHJvdy5jbG9zZVRpbWUpO1xyXG5cclxuICAgICAgICBpZiAoIXN0b3JlTmFtZSkge1xyXG4gICAgICAgICAgICBlcnJvcnMucHVzaChgUm93ICR7cm93Tm99OiBTdG9yZSBuYW1lIGlzIG1pc3NpbmcuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghb3BlblRpbWUpIHtcclxuICAgICAgICAgICAgZXJyb3JzLnB1c2godGhpcy5pbnZhbGlkVGltZU1lc3NhZ2UobGFiZWwsICdPcGVuIHRpbWUnLCByb3cub3BlblRpbWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjbG9zZVRpbWUpIHtcclxuICAgICAgICAgICAgZXJyb3JzLnB1c2godGhpcy5pbnZhbGlkVGltZU1lc3NhZ2UobGFiZWwsICdDbG9zZSB0aW1lJywgcm93LmNsb3NlVGltZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3BlblRpbWUgJiYgY2xvc2VUaW1lICYmIGNsb3NlVGltZSA8IG9wZW5UaW1lKSB7XHJcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKGAke2xhYmVsfTogQ2xvc2UgdGltZSAke2Nsb3NlVGltZX0gaXMgYmVmb3JlIG9wZW4gdGltZSAke29wZW5UaW1lfS5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgc3RvcmVOYW1lLCBvcGVuVGltZSwgY2xvc2VUaW1lIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1VwbG9hZEVycm9ycyhlcnJvcnMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2F2ZVN0b3JlVGltZXMoc3RvcmVzLCAoKSA9PiB0aGlzLmJ1bGtVcGxvYWRNb2RhbFJlZj8uY2xvc2UoKSk7XHJcbn1cclxuXHJcbmludmFsaWRUaW1lTWVzc2FnZShsYWJlbDogc3RyaW5nLCBmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IFN0cmluZyh2YWx1ZSkudHJpbSgpID09PSAnJ1xyXG4gICAgICAgID8gYCR7bGFiZWx9OiAke2ZpZWxkfSBpcyBtaXNzaW5nLmBcclxuICAgICAgICA6IGAke2xhYmVsfTogJHtmaWVsZH0gXCIke3ZhbHVlfVwiIGlzIG5vdCBhIHZhbGlkIHRpbWUgKHVzZSBISDptbSkuYDtcclxufVxyXG5cclxuc2hvd1VwbG9hZEVycm9ycyhlcnJvcnM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCBtYXhTaG93biA9IDU7XHJcbiAgICBjb25zdCBsaW5lcyA9IGVycm9ycy5zbGljZSgwLCBtYXhTaG93bikubWFwKChlcnIpID0+IHRoaXMuZXNjYXBlSHRtbChlcnIpKTtcclxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gbWF4U2hvd24pIHtcclxuICAgICAgICBsaW5lcy5wdXNoKGAuLi5hbmQgJHtlcnJvcnMubGVuZ3RoIC0gbWF4U2hvd259IG1vcmVgKTtcclxuICAgIH1cclxuICAgIHRoaXMudHMuZ2V0RXJyb3JUb2FzdChgVXBsb2FkIGZhaWxlZDogJHtlcnJvcnMubGVuZ3RofSBlcnJvciR7ZXJyb3JzLmxlbmd0aCA+IDEgPyAncycgOiAnJ30gZm91bmQ8YnI+JHtsaW5lcy5qb2luKCc8YnI+Jyl9YCk7XHJcbn1cclxuXHJcbmVzY2FwZUh0bWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBlbnRpdGllczogYW55ID0geyAnJic6ICcmYW1wOycsICc8JzogJyZsdDsnLCAnPic6ICcmZ3Q7JywgJ1wiJzogJyZxdW90OycsIFwiJ1wiOiAnJiMzOTsnIH07XHJcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWyY8PlwiJ10vZywgKGNoKSA9PiBlbnRpdGllc1tjaF0pO1xyXG59XHJcblxyXG4vLyBSZXR1cm5zIEhIOm1tOnNzLCBvciBudWxsIHdoZW4gdGhlIGNlbGwgaXMgYmxhbmsgb3Igbm90IGEgdmFsaWQgdGltZVxyXG5jb252ZXJ0RXhjZWxUaW1lKHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcclxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgIC8vIEV4Y2VsIHN0b3JlcyB0aW1lIGFzIGEgZnJhY3Rpb24gb2YgYSBkYXk7IGEgd2hvbGUgbnVtYmVyIChlLmcuIDkpIGlzIGEgZGF0ZSwgbm90IGEgdGltZVxyXG4gICAgICBpZiAodmFsdWUgPCAwIHx8IChOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSAhPT0gMCkpIHJldHVybiBudWxsO1xyXG4gICAgICBsZXQgdG90YWxTZWNvbmRzID0gTWF0aC5yb3VuZCgodmFsdWUgJSAxKSAqIDI0ICogNjAgKiA2MCkgJSA4NjQwMDtcclxuICAgICAgbGV0IGhvdXJzID0gTWF0aC5mbG9vcih0b3RhbFNlY29uZHMgLyAzNjAwKTtcclxuICAgICAgbGV0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAvIDYwKTtcclxuICAgICAgbGV0IHNlY29uZHMgPSB0b3RhbFNlY29uZHMgJSA2MDtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnBhZChob3VycykgKyBcIjpcIiArIHRoaXMucGFkKG1pbnV0ZXMpICsgXCI6XCIgKyB0aGlzLnBhZChzZWNvbmRzKTtcclxuICB9XHJcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAvLyBBY2NlcHRzIEg6bW0sIEhIOm1tLCBISDptbTpzcyBhbmQgMTItaG91ciB2YWx1ZXMgbGlrZSBcIjk6MzAgUE1cIlxyXG4gICAgICBjb25zdCBtYXRjaCA9IHZhbHVlLnRyaW0oKS5tYXRjaCgvXihcXGR7MSwyfSk6KFxcZHsyfSkoPzo6KFxcZHsyfSkpP1xccyooW2FwXW0pPyQvaSk7XHJcbiAgICAgIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xyXG4gICAgICBsZXQgaG91cnMgPSBOdW1iZXIobWF0Y2hbMV0pO1xyXG4gICAgICBjb25zdCBtaW51dGVzID0gTnVtYmVyKG1hdGNoWzJdKTtcclxuICAgICAgY29uc3Qgc2Vjb25kcyA9IE51bWJlcihtYXRjaFszXSB8fCAwKTtcclxuICAgICAgY29uc3QgbWVyaWRpZW0gPSBtYXRjaFs0XT8udG9Mb3dlckNhc2UoKTtcclxuICAgICAgaWYgKG1lcmlkaWVtKSB7XHJcbiAgICAgICAgICBpZiAoaG91cnMgPCAxIHx8IGhvdXJzID4gMTIpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgaG91cnMgPSAoaG91cnMgJSAxMikgKyAobWVyaWRpZW0gPT09ICdwbScgPyAxMiA6IDApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChob3VycyA+IDIzIHx8IG1pbnV0ZXMgPiA1OSB8fCBzZWNvbmRzID4gNTkpIHJldHVybiBudWxsO1xyXG4gICAgICByZXR1cm4gdGhpcy5wYWQoaG91cnMpICsgXCI6XCIgKyB0aGlzLnBhZChtaW51dGVzKSArIFwiOlwiICsgdGhpcy5wYWQoc2Vjb25kcyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxucGFkKG51bTogbnVtYmVyKTogc3RyaW5nIHtcclxuICByZXR1cm4gbnVtIDwgMTAgPyBcIjBcIiArIG51bSA6IG51bS50b1N0cmluZygpO1xyXG59XHJcbiAgQFZpZXdDaGlsZCgnZmlsZTEnKSBmaWxlSW5wdXQxITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdidWxrVXBsb2FkUG9wdXAnKSBidWxrVXBsb2FkUG9wdXA6IGFueTtcclxuICBidWxrVXBsb2FkTW9kYWxSZWY6IE5nYk1vZGFsUmVmIHwgdW5kZWZpbmVkO1xyXG4gIGRvd25sb2FkVGVtcGxhdGUoKXtcclxuICAgIHRoaXMuYnVsa1VwbG9hZE1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmJ1bGtVcGxvYWRQb3B1cCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgLy8gc2l6ZTogXCJsZ1wiLFxyXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRyb3BEb3duID1mYWxzZTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkVGVtcGxhdGVWMigpIHtcclxuICAgIHRoaXMudGFibGVPYmplY3QuZXhwb3J0ID0gdHJ1ZVxyXG4gICAgdGhpcy5jbGllbnRBcGkuZ2V0T3BlbkNsb3NlTGlzdGV4cG9ydCh0aGlzLnRhYmxlT2JqZWN0KS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgaWYocmVzKXtcclxuICAgICAgICB0aGlzLnRhYmxlT2JqZWN0LmV4cG9ydCA9ZmFsc2VcclxuICAgICAgIHRoaXMuZXhjZWxTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsICdzdG9yZSBvcGVuJmNsb3NlIHRpbWUnKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBvbkNhbmNlbCgpe1xyXG4gICAgdGhpcy5pc0VkaXRpbmcgPScnXHJcbiAgfVxyXG4gIHVwZGF0ZUNsb3NlVGltZShzdG9yZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb252ZXJ0VGltZVRvSW5wdXRGb3JtYXQoc3RvcmUuY2xvc2VUaW1lKSA8IHRoaXMuY29udmVydFRpbWVUb0lucHV0Rm9ybWF0KHN0b3JlLm9wZW5UaW1lKSkge1xyXG4gICAgICBzdG9yZS5jbG9zZVRpbWUgPSBzdG9yZS5vcGVuVGltZTsgXHJcbiAgfVxyXG59XHJcblxyXG52YWxpZGF0ZUNsb3NlVGltZSgpIHtcclxuICBsZXQgaXNWYWxpZCA9IHRydWU7XHJcbiAgdGhpcy5zdG9yZUxpc3REYXRhLmZvckVhY2goKHN0b3JlOiBhbnkpID0+IHtcclxuICBpZiAoKHN0b3JlLmNsb3NlVGltZSkgPCAoc3RvcmUub3BlblRpbWUpKSB7XHJcbiAgICAgIHN0b3JlLnNob3dFcnJvciA9IHRydWU7XHJcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICB9IGVsc2Uge1xyXG4gICAgICBzdG9yZS5zaG93RXJyb3IgPSBmYWxzZTtcclxuICB9XHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIGlzVmFsaWQ7XHJcbn1cclxuZm9ybWF0VGltZSh0aW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIGlmICghdGltZSkgcmV0dXJuIFwiMDA6MDA6MDBcIjsgLy8gRGVmYXVsdCBmYWxsYmFja1xyXG4gIGlmICh0aW1lLmxlbmd0aCA9PT0gOCkgcmV0dXJuIHRpbWU7XHJcbiAgaWYgKHRpbWUubGVuZ3RoID09PSA1KSByZXR1cm4gdGltZSArIFwiOjAwXCI7XHJcblxyXG4gIHJldHVybiB0aW1lOyBcclxufVxyXG4gIG9uU3VibWl0KCl7XHJcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUNsb3NlVGltZSgpO1xyXG5cclxuICAgIGlmICghaXNWYWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIlZhbGlkYXRpb24gZmFpbGVkLiBBUEkgY2FsbCBzdG9wcGVkLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNhdmVTdG9yZVRpbWVzKHRoaXMuc3RvcmVMaXN0RGF0YSk7XHJcbiAgfVxyXG4gIHNhdmVTdG9yZVRpbWVzKHN0b3JlczogYW55W10sIG9uU2F2ZWQ/OiAoKSA9PiB2b2lkKXtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5jbGllbnREYXRhLmNsaWVudElkLFxyXG4gICAgICBcInN0b3Jlc1wiOiBzdG9yZXMubWFwKChzdG9yZTogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICBcInN0b3JlTmFtZVwiOiBzdG9yZS5zdG9yZU5hbWUsXHJcbiAgICAgICAgICAgIFwib3BlblRpbWVcIjogdGhpcy5mb3JtYXRUaW1lKHN0b3JlLm9wZW5UaW1lKSxcclxuICAgICAgICAgICAgXCJjbG9zZVRpbWVcIjogdGhpcy5mb3JtYXRUaW1lKHN0b3JlLmNsb3NlVGltZSlcclxuICAgICAgICB9KSlcclxuICB9O1xyXG4gIHRoaXMuY2xpZW50QXBpLmdldFVwZGF0ZU9wZW5DbG9zZUxpc3Qob2JqKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgaWYocmVzICYmIHJlcy5jb2RlID09MjAwKXtcclxuICAgICAgICB0aGlzLnRzLmdldFN1Y2Nlc3NUb2FzdCgnU3RvcmUgb3BlbiBhbmQgY2xvc2UgdGltZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpXHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5pc0VkaXRpbmcgPScnXHJcbiAgICAgICAgb25TYXZlZD8uKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KHJlcz8ubWVzc2FnZSB8fCAnVW5hYmxlIHRvIHVwZGF0ZSBzdG9yZSBvcGVuIGFuZCBjbG9zZSB0aW1lJylcclxuICAgICAgfVxyXG4gICAgfSxlcnJvcjooZXJyOmFueSk9PntcclxuICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/LmVycm9yID8gZXJyPy5lcnJvcj8uZXJyb3I6IGVycj8uZXJyb3I/Lm1lc3NhZ2UpXHJcbiAgICB9XHJcbiAgfSlcclxuICB9XHJcbiAgcGFnaW5hdGlvblNpemVzOmFueVtdID0gW107XHJcbiAgcGFnZVNpemUgPSAxMDtcclxuICBzZXRQYWdpbmF0aW9uU2l6ZXMoKSB7XHJcbiAgICBpZiAodGhpcy50b3RhbENvdW50ID4gMTApIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFt0aGlzLnRvdGFsQ291bnRdOyAvLyBKdXN0IG9uZSBvcHRpb24gaWYgbGVzcyB0aGFuIDEwXHJcbiAgICB9XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uU2l6ZXNbMF07XHJcbiAgfVxyXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBudW1iZXIpIHtcclxuICAgIFxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLm9mZnNldCA9IE51bWJlcihwYWdlT2Zmc2V0KTtcclxuICAgIGxldCBvYmogPXtcclxuICAgICAgY2xpZW50SWQ6dGhpcy5jbGllbnREYXRhPy5jbGllbnRJZCxcclxuICAgICAgbGltaXQ6dGhpcy5saW1pdCxcclxuICAgICAgb2Zmc2V0OnRoaXMub2Zmc2V0LFxyXG4gICAgICBzb3J0T3JkZXI6dGhpcy5zb3J0T3JkZXIsXHJcbiAgICAgIHNvcnRCeTp0aGlzLnNvcnRlZENvbHVtbixcclxuICAgICAgc2VhcmNoVmFsdWU6dGhpcy5zZWFyY2hWYWx1ZSBcclxuICAgIH1cclxuICAgIHRoaXMuY2xpZW50QXBpLmdldE9wZW5DbG9zZUxpc3Qob2JqKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PTIwMCl7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPSByZXM/LmRhdGE/LnJlc3VsdDtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXM/LmRhdGE/LmNvdW50O1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9ZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub0RhdGEgPWZhbHNlO1xyXG4gICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0RGF0YSA9W107XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPTA7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPXRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycik9PntcclxuICAgICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPVtdO1xyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9MDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID10cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBcclxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgIHRoaXMub2Zmc2V0ID0xO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gTnVtYmVyKHBhZ2VTaXplKTtcclxuICAgIHRoaXMubGltaXQgPSBOdW1iZXIocGFnZVNpemUpO1xyXG4gICAgbGV0IG9iaiA9e1xyXG4gICAgICBjbGllbnRJZDp0aGlzLmNsaWVudERhdGE/LmNsaWVudElkLFxyXG4gICAgICBsaW1pdDp0aGlzLmxpbWl0LFxyXG4gICAgICBvZmZzZXQ6dGhpcy5vZmZzZXQsXHJcbiAgICAgIHNvcnRPcmRlcjp0aGlzLnNvcnRPcmRlciAsXHJcbiAgICAgIHNvcnRCeTp0aGlzLnNvcnRlZENvbHVtbiAsXHJcbiAgICAgIHNlYXJjaFZhbHVlOnRoaXMuc2VhcmNoVmFsdWUgXHJcbiAgICB9XHJcbiAgICB0aGlzLmNsaWVudEFwaS5nZXRPcGVuQ2xvc2VMaXN0KG9iaikucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICBpZihyZXMgJiYgcmVzLmNvZGUgPT0yMDApe1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3REYXRhID0gcmVzPy5kYXRhPy5yZXN1bHQ7XHJcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzPy5kYXRhPy5jb3VudDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID1mYWxzZTtcclxuICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPVtdO1xyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0wO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID1mYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID10cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpPT57XHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3REYXRhID1bXTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPTA7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID1mYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9dHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfOTUwM185NzU5MSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuOTk4NyAxMC42NjU0VjcuOTk4N003Ljk5ODcgNS4zMzIwM0g4LjAwNTM2TTE0LjY2NTQgNy45OTg3QzE0LjY2NTQgMTEuNjgwNiAxMS42ODA2IDE0LjY2NTQgNy45OTg3IDE0LjY2NTRDNC4zMTY4IDE0LjY2NTQgMS4zMzIwMyAxMS42ODA2IDEuMzMyMDMgNy45OTg3QzEuMzMyMDMgNC4zMTY4IDQuMzE2OCAxLjMzMjAzIDcuOTk4NyAxLjMzMjAzQzExLjY4MDYgMS4zMzIwMyAxNC42NjU0IDQuMzE2OCAxNC42NjU0IDcuOTk4N1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzk1MDNfOTc1OTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdG9yZS1jb25mXCI+WW91IENhbiBFZGl0IG9ubHkgT3BlbiB0aW1lIGFuZCBDbG9zZSB0aW1lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmcgJiYgc3RvcmVMaXN0RGF0YT8ubGVuZ3RoICYmICFub0RhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc0VkaXRpbmcgPT09JydcIiAoY2xpY2spPVwiZWRpdFN0b3JlTGlzdCgnZWRpdCcpXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGFsaWduLWl0ZW1zLWVuZFwiPjxzcGFuIGNsYXNzPVwibWUtMlwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfOTk2NF80NDI2MilcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuMTY3OTcgMy4zMzQxN0gzLjMzNDY0QzIuODkyNjEgMy4zMzQxNyAyLjQ2ODY4IDMuNTA5NzcgMi4xNTYxMiAzLjgyMjMzQzEuODQzNTYgNC4xMzQ4OSAxLjY2Nzk3IDQuNTU4ODEgMS42Njc5NyA1LjAwMDg0VjE2LjY2NzVDMS42Njc5NyAxNy4xMDk1IDEuODQzNTYgMTcuNTMzNSAyLjE1NjEyIDE3Ljg0NkMyLjQ2ODY4IDE4LjE1ODYgMi44OTI2MSAxOC4zMzQyIDMuMzM0NjQgMTguMzM0MkgxNS4wMDEzQzE1LjQ0MzMgMTguMzM0MiAxNS44NjczIDE4LjE1ODYgMTYuMTc5OCAxNy44NDZDMTYuNDkyNCAxNy41MzM1IDE2LjY2OCAxNy4xMDk1IDE2LjY2OCAxNi42Njc1VjEwLjgzNDJNMTUuNDE4IDIuMDg0MTdDMTUuNzQ5NSAxLjc1MjY1IDE2LjE5OTEgMS41NjY0MSAxNi42NjggMS41NjY0MUMxNy4xMzY4IDEuNTY2NDEgMTcuNTg2NCAxLjc1MjY1IDE3LjkxOCAyLjA4NDE3QzE4LjI0OTUgMi40MTU2OSAxOC40MzU3IDIuODY1MzMgMTguNDM1NyAzLjMzNDE3QzE4LjQzNTcgMy44MDMwMSAxOC4yNDk1IDQuMjUyNjUgMTcuOTE4IDQuNTg0MTdMMTAuMDAxMyAxMi41MDA4TDYuNjY3OTcgMTMuMzM0Mkw3LjUwMTMgMTAuMDAwOEwxNS40MTggMi4wODQxN1pcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfOTk2NF80NDI2MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+RWRpdCBTdG9yZSBUaW1lPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0VkaXRpbmcgPT09J2VkaXQnXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgbXQtMSBtZS00XCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj5DYW5jZWw8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00IFwiIChjbGljayk9XCJvblN1Ym1pdCgpXCI+PHNwYW4+U2F2ZSBDaGFuZ2VzPC9zcGFuPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTkgbXQtM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xIHctNTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiMTcuMDM2NVwiIHk9XCIxNS4xMjIzXCIgd2lkdGg9XCI4LjE1NTQ2XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IChjaGFuZ2UpPVwic2VhcmNoRGF0YSgpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHMtMTQgbWUtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHdpdGggU3RvcmUgTmFtZSwgU3RvcmUgSURcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBtdC0zIHRleHQtZW5kIHBzLTE1XCI+XHJcbiAgICAgICAgICAgIDxkaXYgIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgdy0xMDAgbXQtNSBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIHB5LTMgYnRuLWRlZmF1bHQgdy0xMDAgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTMgY3Vyc29yLXBvaW50ZXJcIiAjdXBsb2FkIChjbGljayk9XCJpbnB1dEZpbGUuY2xpY2soKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiA8c3BhbiBjbGFzcz1cInRlbXBsYXRlLWRyb3Bkb3duIGJnLXdoaXRlIG1zLTNcIj5CdWxrVXBsb2FkIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGlucHV0IHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0eXBlPVwiZmlsZVwiICNpbnB1dEZpbGUgYWNjZXB0ID0gXCIuY3N2LCBhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCwgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJrdF9hY2NvdW50X3RlYW1fc2l6ZV9zZWxlY3RfMVwiIChjaGFuZ2UpPVwib25GaWxlVXBsb2FkKCRldmVudClcIiAvPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1YnRpdGxlIG14LTMgbWUtMlwiPiB8IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9wZW5Ecm9wZG93bigkZXZlbnQpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiA5TDEyIDE1TDE4IDlcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcERvd25cIiBjbGFzcz1cImNhcmQgdGVtcGxhdGUtZHJvcGRvd24gaC00MHB4IHctMTAwIHBlLTUgcG9zaXRpb24tYWJzb2x1dGUgcm91bmRlZC0zIHotMSB0b3AtNTBweCBlbmQtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbWItMCB3LWF1dG8gY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZG93bmxvYWRUZW1wbGF0ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBlLTUgZnctc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgcHktMlwiPkRvd25sb2FkIFRlbXBsYXRlPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImRvd25sb2FkRHJvcERvd25cIlxyXG4gICAgICAgIGNsYXNzPVwiY2FyZCB3LWF1dG8gcHktMiBwb3NpdGlvbi1hYnNvbHV0ZSBwcm9kdWN0ZHJvcCB0b3AtMTBcIj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIG1iLTJcIj5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwicHJvZHVjdHRleHQgaXRlbXMgY3Vyc29yLXBvaW50ZXIgcC0yXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZFRlbXBsYXRlKClcIj5cclxuICAgICAgICAgICAgICAgIERvd25sb2FkIFRlbXBsYXRlPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG48L2Rpdj5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vRGF0YVwiID5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiA+XHJcbiAgICAgICAgPGltZyB3aWR0aD1cIjMwMHB4XCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPiAgICBcclxuICAgICAgICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbiAgICBcclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nXCIgID5cclxuPGRpdiBjbGFzcz1cInNoaW1tZXItY2FyZCB3LTEwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwvbmctY29udGFpbmVyPlxyXG48ZGl2ICAqbmdJZj1cIiFsb2FkaW5nICYmIHN0b3JlTGlzdERhdGE/Lmxlbmd0aCAmJiAhbm9EYXRhXCIgY2xhc3M9XCJjYXJkLWJvZHkgbXQtMlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ3LTEwMCB0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3N0b3JlTmFtZScpXCI+U3RvcmUgTmFtZSA8c3ZnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZU5hbWUnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZU5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdvcGVuVGltZScpXCI+T3BlbiBUaW1lPHN2ZyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnb3BlblRpbWUnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdvcGVuVGltZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdvcGVuVGltZScpXCI+Q2xvc2UgVGltZTxzdmcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ29wZW5UaW1lJyAmJiBzb3J0T3JkZXIgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnb3BlblRpbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IG9iaiBvZiBzdG9yZUxpc3REYXRhOyBsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmouc3RvcmVOYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD48c3BhbiAqbmdJZj1cImlzRWRpdGluZz09PScnXCI+e3tmb3JtYXRUaW1lKG9iai5vcGVuVGltZSl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiaXNFZGl0aW5nPT09J2VkaXQnXCIgWyhuZ01vZGVsKV09XCJvYmoub3BlblRpbWVcIiAoY2hhbmdlKT1cInVwZGF0ZUNsb3NlVGltZShvYmopXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgdHlwZT1cInRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD4gPHNwYW4gKm5nSWY9XCJpc0VkaXRpbmc9PT0nJ1wiPnt7IGZvcm1hdFRpbWUob2JqLmNsb3NlVGltZSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cImlzRWRpdGluZz09PSdlZGl0J1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHR5cGU9XCJ0aW1lXCIgWyhuZ01vZGVsKV09XCJvYmouY2xvc2VUaW1lXCIgW21pbl09XCJvYmoub3BlblRpbWVcIiAoY2hhbmdlKT1cInZhbGlkYXRlQ2xvc2VUaW1lKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm9iai5zaG93RXJyb3JcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbG9zZSB0aW1lIG11c3QgYmUgbGF0ZXIgdGhhbiBvcGVuIHRpbWUuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICBcclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgICYmIHN0b3JlTGlzdERhdGE/Lmxlbmd0aCAmJiAhbm9EYXRhXCIgY2xhc3M9XCJjYXJkLWZvb3RlclwiPlxyXG4gICAgPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwicGFnZVNpemVcIiBbY3VycmVudFBhZ2VdPVwib2Zmc2V0XCIgW3RvdGFsSXRlbXNdPVwidG90YWxDb3VudFwiXHJcbiAgICBbcGFnaW5hdGlvblNpemVzXT1cInBhZ2luYXRpb25TaXplc1wiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYnVsa1VwbG9hZFBvcHVwIGxldC1tb2RlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktMCBkLWZsZXggZmxleC1zdGFydCBmbGV4LWNvbHVtbiBwLTUgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNSBkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzeW1ib2wgc3ltYm9sLTc1cHggc3ltYm9sLWNpcmNsZVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiMjBcIiBmaWxsPVwiI0RBRjFGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI3LjUgMjIuNVYyNS44MzMzQzI3LjUgMjYuMjc1NCAyNy4zMjQ0IDI2LjY5OTMgMjcuMDExOCAyNy4wMTE4QzI2LjY5OTMgMjcuMzI0NCAyNi4yNzU0IDI3LjUgMjUuODMzMyAyNy41SDE0LjE2NjdDMTMuNzI0NiAyNy41IDEzLjMwMDcgMjcuMzI0NCAxMi45ODgyIDI3LjAxMThDMTIuNjc1NiAyNi42OTkzIDEyLjUgMjYuMjc1NCAxMi41IDI1LjgzMzNWMjIuNU0yNC4xNjY3IDE2LjY2NjdMMjAgMTIuNU0yMCAxMi41TDE1LjgzMzMgMTYuNjY2N00yMCAxMi41VjIyLjVcIiBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0zIHB0LTIgZnMtNCB0ZXh0LWdyYXktODAwIHRleHQtaG92ZXItcHJpbWFyeSBmdy1ib2xkIG1iLTAgdGl0bGUgY3Vyc29yLXBvaW50ZXJcIj5CdWxrIFVwbG9hZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdGV4dFwiPlN0ZXAxIC0gPHNwYW4gY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIHRleHQtcHJpbWFyeSBkb3dubG9hZC10ZXh0XCI+PHNwYW4gKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGVWMigpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPkRvd25sb2FkIHRoZSB0ZW1wbGF0ZSBoZXJlPC9zcGFuPjwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC10ZXh0XCI+U3RlcDIgLSBBZGQgeW91ciBkYXRhIHRvIHRoZSBUZW1wbGF0ZSBGaWxlIHdpdGggZXhpc3Rpbmcgc3RvcmUgZGF0YTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXRleHRcIj5TdGVwMyAtIFVwbG9hZCBpdCBiZWxvdyBmb3IgcHJvY2Vzc2luZzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90ZS10ZXh0XCI+KipOb3RlIDogT24gdXBsb2FkaW5nLCBhbGwgdGhlIGV4aXN0aW5nIGRhdGEgd2lsbCBiZSByZXBsYWNlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wIHRleHQtZW5kIG10LTMgcHQtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW1kIGJ0bi1kZWZhdWx0IGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm1vZGVsLmNsb3NlKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuICBweS0zIGJ0bi1kZWZhdWx0IG1zLTMgYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiZmlsZTEuY2xpY2soKVwiPlVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlbjtcIiAjZmlsZTEgdHlwZT1cImZpbGVcIiBpZD1cImt0X2FjY291bnRfdGVhbV9zaXplX3NlbGVjdF8yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlVXBsb2FkKCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbjwvbmctdGVtcGxhdGU+Il19
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtdGltZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1zZXR0aW5ncy9zcmMvbGliL2NvbXBvbmVudHMvY29uZmlndXJhdGlvbnMvc3RvcmUtdGltZS1jb25maWd1cmF0aW9uL3N0b3JlLXRpbWUtY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL3N0b3JlLXRpbWUtY29uZmlndXJhdGlvbi9zdG9yZS10aW1lLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BGLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7QUFRMUMsTUFBTSxPQUFPLCtCQUErQjtJQVN4QjtJQUFtQztJQUFvQztJQUE4QjtJQUF3QjtJQUE2QjtJQVA1SyxXQUFXLENBQUs7SUFDaEIsZ0JBQWdCLEdBQUUsS0FBSyxDQUFDO0lBQ3hCLFVBQVUsQ0FBSztJQUNmLFdBQVcsR0FBSyxFQUFFLENBQUM7SUFDbkIsS0FBSyxHQUFDLEVBQUUsQ0FBQztJQUNULE1BQU0sR0FBQyxDQUFDLENBQUM7SUFDVSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUM5QyxZQUFvQixZQUF5QixFQUFVLFNBQTJCLEVBQVMsWUFBcUIsRUFBUyxFQUFlLEVBQVMsRUFBb0IsRUFBUyxFQUFzQjtRQUFoTCxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUFVLGNBQVMs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QThCO21PQTJHZCxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBNklKLFVBQVU7c0JBQTdCLFNBQVM7dUJBQUMsT0FBTztnQkFDWSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCwgTmdiTW9kYWxSZWYgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBDbGllbnRBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY2xpZW50LWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEV4Y2VsU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9leGNlbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zdG9yZS10aW1lLWNvbmZpZ3VyYXRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zdG9yZS10aW1lLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9zdG9yZS10aW1lLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTdG9yZVRpbWVDb25maWd1cmF0aW9uQ29tcG9uZW50IHtcclxuXHJcbiAgc2VhcmNoVmFsdWU6YW55O1xyXG4gIGRvd25sb2FkRHJvcERvd24gPWZhbHNlO1xyXG4gIGNsaWVudERhdGE6YW55O1xyXG4gIHRhYmxlT2JqZWN0OmFueT17fTtcclxuICBsaW1pdD0xMDtcclxuICBvZmZzZXQ9MTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5jb25zdHJ1Y3Rvcihwcml2YXRlIGV4Y2VsU2VydmljZTpFeGNlbFNlcnZpY2UsIHByaXZhdGUgY2xpZW50QXBpOiBDbGllbnRBcGlTZXJ2aWNlLHByaXZhdGUgbW9kYWxTZXJ2aWNlOk5nYk1vZGFsLHByaXZhdGUgdHM6VG9hc3RTZXJ2aWNlLHByaXZhdGUgY2Q6Q2hhbmdlRGV0ZWN0b3JSZWYsIHB1YmxpYyBnczogR2xvYmFsU3RhdGVTZXJ2aWNlKXtcclxuICAgdGhpcy5jbGllbnRBcGkuY2xpZW50RGF0YS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnREYXRhID0gZTtcclxuICAgICAgICBsZXQgb2JqID17XHJcbiAgICAgICAgICBjbGllbnRJZDp0aGlzLmNsaWVudERhdGE/LmNsaWVudElkLFxyXG4gICAgICAgICAgbGltaXQ6dGhpcy5saW1pdCxcclxuICAgICAgICAgIG9mZnNldDp0aGlzLm9mZnNldCxcclxuICAgICAgICAgIHNvcnRPcmRlcjp0aGlzLnNvcnRPcmRlcixcclxuICAgICAgICAgIHNvcnRCeTp0aGlzLnNvcnRlZENvbHVtbixcclxuICAgICAgICAgIHNlYXJjaFZhbHVlOnRoaXMuc2VhcmNoVmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJsZU9iamVjdCA9b2JqO1xyXG4gICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG5zdG9yZUxpc3REYXRhOmFueTtcclxudG90YWxDb3VudDowO1xyXG5sb2FkaW5nID10cnVlO1xyXG5ub0RhdGEgPWZhbHNlO1xyXG5nZXREYXRhKCl7XHJcbiAgdGhpcy5sb2FkaW5nID10cnVlO1xyXG4gIHRoaXMubm9EYXRhID1mYWxzZTtcclxuICB0aGlzLmNsaWVudEFwaS5nZXRPcGVuQ2xvc2VMaXN0KHRoaXMudGFibGVPYmplY3QpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICBpZihyZXMgJiYgcmVzLmNvZGUgPT0yMDApe1xyXG4gICAgICAgIHRoaXMuc3RvcmVMaXN0RGF0YSA9IHJlcz8uZGF0YT8ucmVzdWx0O1xyXG4gICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXM/LmRhdGE/LmNvdW50O1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICB0aGlzLm5vRGF0YSA9ZmFsc2U7XHJcbiAgICAgIHRoaXMuc2V0UGFnaW5hdGlvblNpemVzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3REYXRhID1bXTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPTA7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID1mYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9dHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGVycm9yOiAoZXJyKT0+e1xyXG4gICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPVtdO1xyXG4gICAgICB0aGlzLnRvdGFsQ291bnQgPTA7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9ZmFsc2U7XHJcbiAgICAgIHRoaXMubm9EYXRhID10cnVlO1xyXG4gICAgfVxyXG4gIH0pXHJcbiAgXHJcbn1cclxuc29ydGVkQ29sdW1uOiBhbnk7XHJcbnNvcnRPcmRlcjogYW55O1xyXG5vblNvcnQoY29sdW1uOiBzdHJpbmcpIHtcclxuICBpZiAodGhpcy5zb3J0ZWRDb2x1bW4gPT09IGNvbHVtbikge1xyXG4gICAgdGhpcy5zb3J0T3JkZXIgPSB0aGlzLnNvcnRPcmRlciA9PT0gMSA/IC0xIDogMTtcclxuICB9IGVsc2Uge1xyXG4gICAgdGhpcy5zb3J0ZWRDb2x1bW4gPSBjb2x1bW47XHJcbiAgICB0aGlzLnNvcnRPcmRlciA9IDE7XHJcbiAgfVxyXG4gIHRoaXMudGFibGVPYmplY3QubGltaXQgPTEwO1xyXG50aGlzLnRhYmxlT2JqZWN0Lm9mZnNldCA9MTtcclxuICB0aGlzLnRhYmxlT2JqZWN0LnNvcnRCeSA9IHRoaXMuc29ydGVkQ29sdW1uLCBcclxuICB0aGlzLnRhYmxlT2JqZWN0LnNvcnRPcmRlciA9IHRoaXMuc29ydE9yZGVyLCBcclxuICB0aGlzLmdldERhdGEoKTtcclxufVxyXG5pc0VkaXRpbmcgPScnO1xyXG5lZGl0U3RvcmVMaXN0KGVkaXQ6YW55KXtcclxuICB0aGlzLmlzRWRpdGluZyA9ZWRpdDtcclxuICB0aGlzLnZhbGlkYXRlSW5pdGlhbENsb3NlVGltZXMoKTtcclxuIFxyXG59XHJcbnZhbGlkYXRlSW5pdGlhbENsb3NlVGltZXMoKSB7XHJcbiAgdGhpcy5zdG9yZUxpc3REYXRhLmZvckVhY2goKHN0b3JlOmFueSkgPT4ge1xyXG4gICAgaWYgKHRoaXMuY29udmVydFRpbWVUb0lucHV0Rm9ybWF0KHN0b3JlLmNsb3NlVGltZSkgPCB0aGlzLmNvbnZlcnRUaW1lVG9JbnB1dEZvcm1hdChzdG9yZS5vcGVuVGltZSkpIHtcclxuICAgICAgICBzdG9yZS5jbG9zZVRpbWUgPSBzdG9yZS5vcGVuVGltZTsgLy8gUmVzZXQgaW52YWxpZCBjbG9zZVRpbWVcclxuICAgIH1cclxufSk7XHJcbn1cclxuY29udmVydFRpbWVUb0lucHV0Rm9ybWF0KHRpbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgaWYgKCF0aW1lKSByZXR1cm4gXCIwMDowMFwiOyAvLyBEZWZhdWx0IHZhbHVlXHJcbiAgcmV0dXJuIHRpbWUuc3Vic3RyaW5nKDAsIDUpOyAvLyBFeHRyYWN0IG9ubHkgSEg6bW1cclxufVxyXG4gIHNlYXJjaERhdGEoKXtcclxudGhpcy50YWJsZU9iamVjdC5zZWFyY2hWYWx1ZSA9dGhpcy5zZWFyY2hWYWx1ZSBcclxudGhpcy50YWJsZU9iamVjdC5saW1pdCA9MTA7XHJcbnRoaXMudGFibGVPYmplY3Qub2Zmc2V0ID0xO1xyXG50aGlzLnRhYmxlT2JqZWN0LnNvcnRCeSA9IHRoaXMuc29ydGVkQ29sdW1uLCBcclxudGhpcy50YWJsZU9iamVjdC5zb3J0T3JkZXIgPSB0aGlzLnNvcnRPcmRlcixcclxudGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBkcm9wRG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9wZW5Ecm9wZG93bihldmVudDphbnkpIHtcclxuICAgIHRoaXMuZHJvcERvd24gPSAhdGhpcy5kcm9wRG93bjtcclxuICB9XHJcbiAgICBAVmlld0NoaWxkKFwiaW5wdXRGaWxlXCIpIGlucHV0RmlsZTogRWxlbWVudFJlZjtcclxuICBvbkZpbGVVcGxvYWQoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICBjb25zdCBmaWxlOiBGaWxlIHwgdW5kZWZpbmVkID0gaW5wdXQuZmlsZXM/LlswXTtcclxuICAgIC8vIENsZWFyIHRoZSBpbnB1dCBzbyBjaG9vc2luZyB0aGUgc2FtZSAoY29ycmVjdGVkKSBmaWxlIGFnYWluIHN0aWxsIGZpcmVzIChjaGFuZ2UpXHJcbiAgICBpbnB1dC52YWx1ZSA9IFwiXCI7XHJcbiAgICBpZiAoIWZpbGUpIHJldHVybjtcclxuXHJcbiAgY29uc3QgYWxsb3dlZEV4dGVuc2lvbnMgPSAvXFwuKHhsc3x4bHN4fGNzdikkL2k7XHJcbiAgY29uc3QgYWxsb3dlZFR5cGVzID0gW1xyXG4gICAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldFwiLFxyXG4gICAgXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIixcclxuICAgIFwidGV4dC9jc3ZcIixcclxuICAgIFwiYXBwbGljYXRpb24vY3N2XCIsXHJcbiAgXTtcclxuXHJcbiAgaWYgKCFhbGxvd2VkRXh0ZW5zaW9ucy50ZXN0KGZpbGUubmFtZSkgfHwgIWFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7XHJcbiAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoXCJPbmx5IC54bHMsIC54bHN4LCBvciAuY3N2IGZpbGVzIGFyZSBhbGxvd2VkLlwiKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbiAgICBjb25zdCBpc0NzdiA9IC9cXC5jc3YkL2kudGVzdChmaWxlLm5hbWUpO1xyXG4gICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4gdGhpcy50cy5nZXRFcnJvclRvYXN0KFwiVW5hYmxlIHRvIHJlYWQgdGhlIGZpbGUuIFBsZWFzZSB0cnkgYWdhaW4uXCIpO1xyXG4gICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgaGVhZGVyczogYW55W10gPSBbXTtcclxuICAgICAgICBsZXQgZGF0YTogYW55W10gPSBbXTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChlLnRhcmdldC5yZXN1bHQsIHsgdHlwZTogaXNDc3YgPyAnc3RyaW5nJyA6ICdiaW5hcnknIH0pO1xyXG4gICAgICAgICAgICBjb25zdCB3czogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbd2IuU2hlZXROYW1lc1swXV07XHJcbiAgICAgICAgICAgIGhlYWRlcnMgPSAoWExTWC51dGlscy5zaGVldF90b19qc29uKHdzLCB7IGhlYWRlcjogMSB9KVswXSBhcyBhbnlbXSkgfHwgW107XHJcbiAgICAgICAgICAgIGRhdGEgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od3MpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoXCJVbmFibGUgdG8gcmVhZCB0aGUgZmlsZS4gUGxlYXNlIHVwbG9hZCB0aGUgZG93bmxvYWRlZCB0ZW1wbGF0ZS5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzVXBsb2FkZWREYXRhKGhlYWRlcnMsIGRhdGEpO1xyXG4gICAgfTtcclxuICAgIGlmIChpc0Nzdikge1xyXG4gICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGZpbGUpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBWYWxpZGF0ZSBldmVyeSB1cGxvYWRlZCByb3c7IHRoZSBBUEkgaXMgY2FsbGVkIG9ubHkgd2hlbiB0aGUgd2hvbGUgZmlsZSBpcyB2YWxpZFxyXG5wcm9jZXNzVXBsb2FkZWREYXRhKGhlYWRlcnM6IGFueVtdLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgY29uc3QgbWlzc2luZ0NvbHVtbnMgPSBbJ3N0b3JlTmFtZScsICdvcGVuVGltZScsICdjbG9zZVRpbWUnXS5maWx0ZXIoKGNvbCkgPT4gIWhlYWRlcnMuaW5jbHVkZXMoY29sKSk7XHJcbiAgICBpZiAobWlzc2luZ0NvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93VXBsb2FkRXJyb3JzKFtgTWlzc2luZyBjb2x1bW4ocyk6ICR7bWlzc2luZ0NvbHVtbnMuam9pbignLCAnKX0uIFBsZWFzZSB1c2UgdGhlIGRvd25sb2FkZWQgdGVtcGxhdGUuYF0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghZGF0YS5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoXCJObyBzdG9yZSBkYXRhIGZvdW5kIGluIHRoZSBmaWxlLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29uc3Qgc3RvcmVzID0gZGF0YS5tYXAoKHJvdzogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAvLyBfX3Jvd051bV9fIGlzIHRoZSAwLWJhc2VkIHNoZWV0IHJvdyBzZXQgYnkgc2hlZXRfdG9fanNvbjsgKzEgZ2l2ZXMgdGhlIHJvdyBudW1iZXIgc2hvd24gaW4gRXhjZWxcclxuICAgICAgICBjb25zdCByb3dObyA9IChyb3cuX19yb3dOdW1fXyA/PyBpICsgMSkgKyAxO1xyXG4gICAgICAgIGNvbnN0IHN0b3JlTmFtZSA9IFN0cmluZyhyb3cuc3RvcmVOYW1lID8/ICcnKS50cmltKCk7XHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSBzdG9yZU5hbWUgPyBgUm93ICR7cm93Tm99ICgke3N0b3JlTmFtZX0pYCA6IGBSb3cgJHtyb3dOb31gO1xyXG4gICAgICAgIGNvbnN0IG9wZW5UaW1lID0gdGhpcy5jb252ZXJ0RXhjZWxUaW1lKHJvdy5vcGVuVGltZSk7XHJcbiAgICAgICAgY29uc3QgY2xvc2VUaW1lID0gdGhpcy5jb252ZXJ0RXhjZWxUaW1lKHJvdy5jbG9zZVRpbWUpO1xyXG5cclxuICAgICAgICBpZiAoIXN0b3JlTmFtZSkge1xyXG4gICAgICAgICAgICBlcnJvcnMucHVzaChgUm93ICR7cm93Tm99OiBTdG9yZSBuYW1lIGlzIG1pc3NpbmcuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghb3BlblRpbWUpIHtcclxuICAgICAgICAgICAgZXJyb3JzLnB1c2godGhpcy5pbnZhbGlkVGltZU1lc3NhZ2UobGFiZWwsICdPcGVuIHRpbWUnLCByb3cub3BlblRpbWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjbG9zZVRpbWUpIHtcclxuICAgICAgICAgICAgZXJyb3JzLnB1c2godGhpcy5pbnZhbGlkVGltZU1lc3NhZ2UobGFiZWwsICdDbG9zZSB0aW1lJywgcm93LmNsb3NlVGltZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob3BlblRpbWUgJiYgY2xvc2VUaW1lICYmIGNsb3NlVGltZSA8IG9wZW5UaW1lKSB7XHJcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKGAke2xhYmVsfTogQ2xvc2UgdGltZSAke2Nsb3NlVGltZX0gaXMgYmVmb3JlIG9wZW4gdGltZSAke29wZW5UaW1lfS5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgc3RvcmVOYW1lLCBvcGVuVGltZSwgY2xvc2VUaW1lIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1VwbG9hZEVycm9ycyhlcnJvcnMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2F2ZVN0b3JlVGltZXMoc3RvcmVzLCAoKSA9PiB0aGlzLmJ1bGtVcGxvYWRNb2RhbFJlZj8uY2xvc2UoKSk7XHJcbn1cclxuXHJcbmludmFsaWRUaW1lTWVzc2FnZShsYWJlbDogc3RyaW5nLCBmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IFN0cmluZyh2YWx1ZSkudHJpbSgpID09PSAnJ1xyXG4gICAgICAgID8gYCR7bGFiZWx9OiAke2ZpZWxkfSBpcyBtaXNzaW5nLmBcclxuICAgICAgICA6IGAke2xhYmVsfTogJHtmaWVsZH0gXCIke3ZhbHVlfVwiIGlzIG5vdCBhIHZhbGlkIHRpbWUgKHVzZSBISDptbSkuYDtcclxufVxyXG5cclxuc2hvd1VwbG9hZEVycm9ycyhlcnJvcnM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCBtYXhTaG93biA9IDU7XHJcbiAgICBjb25zdCBsaW5lcyA9IGVycm9ycy5zbGljZSgwLCBtYXhTaG93bikubWFwKChlcnIpID0+IHRoaXMuZXNjYXBlSHRtbChlcnIpKTtcclxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gbWF4U2hvd24pIHtcclxuICAgICAgICBsaW5lcy5wdXNoKGAuLi5hbmQgJHtlcnJvcnMubGVuZ3RoIC0gbWF4U2hvd259IG1vcmVgKTtcclxuICAgIH1cclxuICAgIHRoaXMudHMuZ2V0RXJyb3JUb2FzdChgVXBsb2FkIGZhaWxlZDogJHtlcnJvcnMubGVuZ3RofSBlcnJvciR7ZXJyb3JzLmxlbmd0aCA+IDEgPyAncycgOiAnJ30gZm91bmQ8YnI+JHtsaW5lcy5qb2luKCc8YnI+Jyl9YCk7XHJcbn1cclxuXHJcbmVzY2FwZUh0bWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBlbnRpdGllczogYW55ID0geyAnJic6ICcmYW1wOycsICc8JzogJyZsdDsnLCAnPic6ICcmZ3Q7JywgJ1wiJzogJyZxdW90OycsIFwiJ1wiOiAnJiMzOTsnIH07XHJcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWyY8PlwiJ10vZywgKGNoKSA9PiBlbnRpdGllc1tjaF0pO1xyXG59XHJcblxyXG4vLyBSZXR1cm5zIEhIOm1tOnNzLCBvciBudWxsIHdoZW4gdGhlIGNlbGwgaXMgYmxhbmsgb3Igbm90IGEgdmFsaWQgdGltZVxyXG5jb252ZXJ0RXhjZWxUaW1lKHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcclxuICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgIC8vIEV4Y2VsIHN0b3JlcyB0aW1lIGFzIGEgZnJhY3Rpb24gb2YgYSBkYXk7IGEgd2hvbGUgbnVtYmVyIChlLmcuIDkpIGlzIGEgZGF0ZSwgbm90IGEgdGltZVxyXG4gICAgICBpZiAodmFsdWUgPCAwIHx8IChOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSAhPT0gMCkpIHJldHVybiBudWxsO1xyXG4gICAgICBsZXQgdG90YWxTZWNvbmRzID0gTWF0aC5yb3VuZCgodmFsdWUgJSAxKSAqIDI0ICogNjAgKiA2MCkgJSA4NjQwMDtcclxuICAgICAgbGV0IGhvdXJzID0gTWF0aC5mbG9vcih0b3RhbFNlY29uZHMgLyAzNjAwKTtcclxuICAgICAgbGV0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKCh0b3RhbFNlY29uZHMgJSAzNjAwKSAvIDYwKTtcclxuICAgICAgbGV0IHNlY29uZHMgPSB0b3RhbFNlY29uZHMgJSA2MDtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnBhZChob3VycykgKyBcIjpcIiArIHRoaXMucGFkKG1pbnV0ZXMpICsgXCI6XCIgKyB0aGlzLnBhZChzZWNvbmRzKTtcclxuICB9XHJcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAvLyBBY2NlcHRzIEg6bW0sIEhIOm1tLCBISDptbTpzcyBhbmQgMTItaG91ciB2YWx1ZXMgbGlrZSBcIjk6MzAgUE1cIlxyXG4gICAgICBjb25zdCBtYXRjaCA9IHZhbHVlLnRyaW0oKS5tYXRjaCgvXihcXGR7MSwyfSk6KFxcZHsyfSkoPzo6KFxcZHsyfSkpP1xccyooW2FwXW0pPyQvaSk7XHJcbiAgICAgIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xyXG4gICAgICBsZXQgaG91cnMgPSBOdW1iZXIobWF0Y2hbMV0pO1xyXG4gICAgICBjb25zdCBtaW51dGVzID0gTnVtYmVyKG1hdGNoWzJdKTtcclxuICAgICAgY29uc3Qgc2Vjb25kcyA9IE51bWJlcihtYXRjaFszXSB8fCAwKTtcclxuICAgICAgY29uc3QgbWVyaWRpZW0gPSBtYXRjaFs0XT8udG9Mb3dlckNhc2UoKTtcclxuICAgICAgaWYgKG1lcmlkaWVtKSB7XHJcbiAgICAgICAgICBpZiAoaG91cnMgPCAxIHx8IGhvdXJzID4gMTIpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgaG91cnMgPSAoaG91cnMgJSAxMikgKyAobWVyaWRpZW0gPT09ICdwbScgPyAxMiA6IDApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChob3VycyA+IDIzIHx8IG1pbnV0ZXMgPiA1OSB8fCBzZWNvbmRzID4gNTkpIHJldHVybiBudWxsO1xyXG4gICAgICByZXR1cm4gdGhpcy5wYWQoaG91cnMpICsgXCI6XCIgKyB0aGlzLnBhZChtaW51dGVzKSArIFwiOlwiICsgdGhpcy5wYWQoc2Vjb25kcyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxucGFkKG51bTogbnVtYmVyKTogc3RyaW5nIHtcclxuICByZXR1cm4gbnVtIDwgMTAgPyBcIjBcIiArIG51bSA6IG51bS50b1N0cmluZygpO1xyXG59XHJcbiAgQFZpZXdDaGlsZCgnZmlsZTEnKSBmaWxlSW5wdXQxITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdidWxrVXBsb2FkUG9wdXAnKSBidWxrVXBsb2FkUG9wdXA6IGFueTtcclxuICBidWxrVXBsb2FkTW9kYWxSZWY6IE5nYk1vZGFsUmVmIHwgdW5kZWZpbmVkO1xyXG4gIGRvd25sb2FkVGVtcGxhdGUoKXtcclxuICAgIHRoaXMuYnVsa1VwbG9hZE1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmJ1bGtVcGxvYWRQb3B1cCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgLy8gc2l6ZTogXCJsZ1wiLFxyXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRyb3BEb3duID1mYWxzZTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkVGVtcGxhdGVWMigpIHtcclxuICAgIHRoaXMudGFibGVPYmplY3QuZXhwb3J0ID0gdHJ1ZVxyXG4gICAgdGhpcy5jbGllbnRBcGkuZ2V0T3BlbkNsb3NlTGlzdGV4cG9ydCh0aGlzLnRhYmxlT2JqZWN0KS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgaWYocmVzKXtcclxuICAgICAgICB0aGlzLnRhYmxlT2JqZWN0LmV4cG9ydCA9ZmFsc2VcclxuICAgICAgIHRoaXMuZXhjZWxTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsICdzdG9yZSBvcGVuJmNsb3NlIHRpbWUnKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBvbkNhbmNlbCgpe1xyXG4gICAgdGhpcy5pc0VkaXRpbmcgPScnXHJcbiAgfVxyXG4gIHVwZGF0ZUNsb3NlVGltZShzdG9yZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb252ZXJ0VGltZVRvSW5wdXRGb3JtYXQoc3RvcmUuY2xvc2VUaW1lKSA8IHRoaXMuY29udmVydFRpbWVUb0lucHV0Rm9ybWF0KHN0b3JlLm9wZW5UaW1lKSkge1xyXG4gICAgICBzdG9yZS5jbG9zZVRpbWUgPSBzdG9yZS5vcGVuVGltZTsgXHJcbiAgfVxyXG59XHJcblxyXG52YWxpZGF0ZUNsb3NlVGltZSgpIHtcclxuICBsZXQgaXNWYWxpZCA9IHRydWU7XHJcbiAgdGhpcy5zdG9yZUxpc3REYXRhLmZvckVhY2goKHN0b3JlOiBhbnkpID0+IHtcclxuICBpZiAoKHN0b3JlLmNsb3NlVGltZSkgPCAoc3RvcmUub3BlblRpbWUpKSB7XHJcbiAgICAgIHN0b3JlLnNob3dFcnJvciA9IHRydWU7XHJcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICB9IGVsc2Uge1xyXG4gICAgICBzdG9yZS5zaG93RXJyb3IgPSBmYWxzZTtcclxuICB9XHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIGlzVmFsaWQ7XHJcbn1cclxuZm9ybWF0VGltZSh0aW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIGlmICghdGltZSkgcmV0dXJuIFwiMDA6MDA6MDBcIjsgLy8gRGVmYXVsdCBmYWxsYmFja1xyXG4gIGlmICh0aW1lLmxlbmd0aCA9PT0gOCkgcmV0dXJuIHRpbWU7XHJcbiAgaWYgKHRpbWUubGVuZ3RoID09PSA1KSByZXR1cm4gdGltZSArIFwiOjAwXCI7XHJcblxyXG4gIHJldHVybiB0aW1lOyBcclxufVxyXG4gIG9uU3VibWl0KCl7XHJcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUNsb3NlVGltZSgpO1xyXG5cclxuICAgIGlmICghaXNWYWxpZCkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIlZhbGlkYXRpb24gZmFpbGVkLiBBUEkgY2FsbCBzdG9wcGVkLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNhdmVTdG9yZVRpbWVzKHRoaXMuc3RvcmVMaXN0RGF0YSk7XHJcbiAgfVxyXG4gIHNhdmVTdG9yZVRpbWVzKHN0b3JlczogYW55W10sIG9uU2F2ZWQ/OiAoKSA9PiB2b2lkKXtcclxuICAgIGxldCBvYmogPSB7XHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5jbGllbnREYXRhLmNsaWVudElkLFxyXG4gICAgICBcInN0b3Jlc1wiOiBzdG9yZXMubWFwKChzdG9yZTogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICBcInN0b3JlTmFtZVwiOiBzdG9yZS5zdG9yZU5hbWUsXHJcbiAgICAgICAgICAgIFwib3BlblRpbWVcIjogdGhpcy5mb3JtYXRUaW1lKHN0b3JlLm9wZW5UaW1lKSxcclxuICAgICAgICAgICAgXCJjbG9zZVRpbWVcIjogdGhpcy5mb3JtYXRUaW1lKHN0b3JlLmNsb3NlVGltZSlcclxuICAgICAgICB9KSlcclxuICB9O1xyXG4gIHRoaXMuY2xpZW50QXBpLmdldFVwZGF0ZU9wZW5DbG9zZUxpc3Qob2JqKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgaWYocmVzICYmIHJlcy5jb2RlID09MjAwKXtcclxuICAgICAgICB0aGlzLnRzLmdldFN1Y2Nlc3NUb2FzdCgnU3RvcmUgb3BlbiBhbmQgY2xvc2UgdGltZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpXHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5pc0VkaXRpbmcgPScnXHJcbiAgICAgICAgb25TYXZlZD8uKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KHJlcz8ubWVzc2FnZSB8fCAnVW5hYmxlIHRvIHVwZGF0ZSBzdG9yZSBvcGVuIGFuZCBjbG9zZSB0aW1lJylcclxuICAgICAgfVxyXG4gICAgfSxlcnJvcjooZXJyOmFueSk9PntcclxuICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/LmVycm9yID8gZXJyPy5lcnJvcj8uZXJyb3I6IGVycj8uZXJyb3I/Lm1lc3NhZ2UpXHJcbiAgICB9XHJcbiAgfSlcclxuICB9XHJcbiAgcGFnaW5hdGlvblNpemVzOmFueVtdID0gW107XHJcbiAgcGFnZVNpemUgPSAxMDtcclxuICBzZXRQYWdpbmF0aW9uU2l6ZXMoKSB7XHJcbiAgICBpZiAodGhpcy50b3RhbENvdW50ID4gMTApIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFt0aGlzLnRvdGFsQ291bnRdOyAvLyBKdXN0IG9uZSBvcHRpb24gaWYgbGVzcyB0aGFuIDEwXHJcbiAgICB9XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uU2l6ZXNbMF07XHJcbiAgfVxyXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBudW1iZXIpIHtcclxuICAgIFxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLm9mZnNldCA9IE51bWJlcihwYWdlT2Zmc2V0KTtcclxuICAgIGxldCBvYmogPXtcclxuICAgICAgY2xpZW50SWQ6dGhpcy5jbGllbnREYXRhPy5jbGllbnRJZCxcclxuICAgICAgbGltaXQ6dGhpcy5saW1pdCxcclxuICAgICAgb2Zmc2V0OnRoaXMub2Zmc2V0LFxyXG4gICAgICBzb3J0T3JkZXI6dGhpcy5zb3J0T3JkZXIsXHJcbiAgICAgIHNvcnRCeTp0aGlzLnNvcnRlZENvbHVtbixcclxuICAgICAgc2VhcmNoVmFsdWU6dGhpcy5zZWFyY2hWYWx1ZSBcclxuICAgIH1cclxuICAgIHRoaXMuY2xpZW50QXBpLmdldE9wZW5DbG9zZUxpc3Qob2JqKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PTIwMCl7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPSByZXM/LmRhdGE/LnJlc3VsdDtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXM/LmRhdGE/LmNvdW50O1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9ZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub0RhdGEgPWZhbHNlO1xyXG4gICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0RGF0YSA9W107XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPTA7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGEgPXRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycik9PntcclxuICAgICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPVtdO1xyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9MDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID10cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBcclxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgIHRoaXMub2Zmc2V0ID0xO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gTnVtYmVyKHBhZ2VTaXplKTtcclxuICAgIHRoaXMubGltaXQgPSBOdW1iZXIocGFnZVNpemUpO1xyXG4gICAgbGV0IG9iaiA9e1xyXG4gICAgICBjbGllbnRJZDp0aGlzLmNsaWVudERhdGE/LmNsaWVudElkLFxyXG4gICAgICBsaW1pdDp0aGlzLmxpbWl0LFxyXG4gICAgICBvZmZzZXQ6dGhpcy5vZmZzZXQsXHJcbiAgICAgIHNvcnRPcmRlcjp0aGlzLnNvcnRPcmRlciAsXHJcbiAgICAgIHNvcnRCeTp0aGlzLnNvcnRlZENvbHVtbiAsXHJcbiAgICAgIHNlYXJjaFZhbHVlOnRoaXMuc2VhcmNoVmFsdWUgXHJcbiAgICB9XHJcbiAgICB0aGlzLmNsaWVudEFwaS5nZXRPcGVuQ2xvc2VMaXN0KG9iaikucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICBpZihyZXMgJiYgcmVzLmNvZGUgPT0yMDApe1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3REYXRhID0gcmVzPy5kYXRhPy5yZXN1bHQ7XHJcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcmVzPy5kYXRhPy5jb3VudDtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPWZhbHNlO1xyXG4gICAgICAgIHRoaXMubm9EYXRhID1mYWxzZTtcclxuICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdERhdGEgPVtdO1xyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0wO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID1mYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID10cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpPT57XHJcbiAgICAgICAgdGhpcy5zdG9yZUxpc3REYXRhID1bXTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPTA7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID1mYWxzZTtcclxuICAgICAgICB0aGlzLm5vRGF0YSA9dHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFRoZSBlZGl0IGhpbnQgb25seSBtYWtlcyBzZW5zZSB0byB1c2VycyB3aG8gY2FuIGVkaXQsIGkuZS4gdGFuZ28gdXNlcnMuIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJ1wiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfOTUwM185NzU5MSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuOTk4NyAxMC42NjU0VjcuOTk4N003Ljk5ODcgNS4zMzIwM0g4LjAwNTM2TTE0LjY2NTQgNy45OTg3QzE0LjY2NTQgMTEuNjgwNiAxMS42ODA2IDE0LjY2NTQgNy45OTg3IDE0LjY2NTRDNC4zMTY4IDE0LjY2NTQgMS4zMzIwMyAxMS42ODA2IDEuMzMyMDMgNy45OTg3QzEuMzMyMDMgNC4zMTY4IDQuMzE2OCAxLjMzMjAzIDcuOTk4NyAxLjMzMjAzQzExLjY4MDYgMS4zMzIwMyAxNC42NjU0IDQuMzE2OCAxNC42NjU0IDcuOTk4N1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzk1MDNfOTc1OTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdG9yZS1jb25mXCI+WW91IENhbiBFZGl0IG9ubHkgT3BlbiB0aW1lIGFuZCBDbG9zZSB0aW1lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEVkaXRpbmcgc3RvcmUgdGltZXMgaXMgZm9yIHRhbmdvIHVzZXJzIG9ubHk7IGNsaWVudCB1c2VycyBzZWUgdGhlIHRhYmxlIHJlYWQtb25seS4gLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmcgJiYgc3RvcmVMaXN0RGF0YT8ubGVuZ3RoICYmICFub0RhdGEgJiYgKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlID09PSAndGFuZ28nXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNFZGl0aW5nID09PScnXCIgKGNsaWNrKT1cImVkaXRTdG9yZUxpc3QoJ2VkaXQnKVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBhbGlnbi1pdGVtcy1lbmRcIj48c3BhbiBjbGFzcz1cIm1lLTJcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzk5NjRfNDQyNjIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05LjE2Nzk3IDMuMzM0MTdIMy4zMzQ2NEMyLjg5MjYxIDMuMzM0MTcgMi40Njg2OCAzLjUwOTc3IDIuMTU2MTIgMy44MjIzM0MxLjg0MzU2IDQuMTM0ODkgMS42Njc5NyA0LjU1ODgxIDEuNjY3OTcgNS4wMDA4NFYxNi42Njc1QzEuNjY3OTcgMTcuMTA5NSAxLjg0MzU2IDE3LjUzMzUgMi4xNTYxMiAxNy44NDZDMi40Njg2OCAxOC4xNTg2IDIuODkyNjEgMTguMzM0MiAzLjMzNDY0IDE4LjMzNDJIMTUuMDAxM0MxNS40NDMzIDE4LjMzNDIgMTUuODY3MyAxOC4xNTg2IDE2LjE3OTggMTcuODQ2QzE2LjQ5MjQgMTcuNTMzNSAxNi42NjggMTcuMTA5NSAxNi42NjggMTYuNjY3NVYxMC44MzQyTTE1LjQxOCAyLjA4NDE3QzE1Ljc0OTUgMS43NTI2NSAxNi4xOTkxIDEuNTY2NDEgMTYuNjY4IDEuNTY2NDFDMTcuMTM2OCAxLjU2NjQxIDE3LjU4NjQgMS43NTI2NSAxNy45MTggMi4wODQxN0MxOC4yNDk1IDIuNDE1NjkgMTguNDM1NyAyLjg2NTMzIDE4LjQzNTcgMy4zMzQxN0MxOC40MzU3IDMuODAzMDEgMTguMjQ5NSA0LjI1MjY1IDE3LjkxOCA0LjU4NDE3TDEwLjAwMTMgMTIuNTAwOEw2LjY2Nzk3IDEzLjMzNDJMNy41MDEzIDEwLjAwMDhMMTUuNDE4IDIuMDg0MTdaXCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzk5NjRfNDQyNjJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPkVkaXQgU3RvcmUgVGltZTwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFZGl0aW5nID09PSdlZGl0J1wiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIG10LTEgbWUtNFwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+Q2FuY2VsPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHgtNCBcIiAoY2xpY2spPVwib25TdWJtaXQoKVwiPjxzcGFuPlNhdmUgQ2hhbmdlczwvc3Bhbj48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05IG10LTNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMSB3LTUwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCAoY2hhbmdlKT1cInNlYXJjaERhdGEoKVwiIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IG1lLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCB3aXRoIFN0b3JlIE5hbWUsIFN0b3JlIElEXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgbXQtMyB0ZXh0LWVuZCBwcy0xNVwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlID09PSAndGFuZ28nXCIgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSB3LTEwMCBtdC01IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gcHktMyBidG4tZGVmYXVsdCB3LTEwMCBidG4tb3V0bGluZSBidG4tb3V0bGluZS1kZWZhdWx0IHJvdW5kZWQtMyB0ZXh0LW5vd3JhcCBib3JkZXItdmFsIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMyBjdXJzb3ItcG9pbnRlclwiICN1cGxvYWQgKGNsaWNrKT1cImlucHV0RmlsZS5jbGljaygpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+IDxzcGFuIGNsYXNzPVwidGVtcGxhdGUtZHJvcGRvd24gYmctd2hpdGUgbXMtM1wiPkJ1bGtVcGxvYWQgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHR5cGU9XCJmaWxlXCIgI2lucHV0RmlsZSBhY2NlcHQgPSBcIi5jc3YsIGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0LCBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImt0X2FjY291bnRfdGVhbV9zaXplX3NlbGVjdF8xXCIgKGNoYW5nZSk9XCJvbkZpbGVVcGxvYWQoJGV2ZW50KVwiIC8+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VidGl0bGUgbXgtMyBtZS0yXCI+IHwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib3BlbkRyb3Bkb3duKCRldmVudClcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02IDlMMTIgMTVMMTggOVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wRG93blwiIGNsYXNzPVwiY2FyZCB0ZW1wbGF0ZS1kcm9wZG93biBoLTQwcHggdy0xMDAgcGUtNSBwb3NpdGlvbi1hYnNvbHV0ZSByb3VuZGVkLTMgei0xIHRvcC01MHB4IGVuZC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBtYi0wIHctYXV0byBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJkb3dubG9hZFRlbXBsYXRlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGUtNSBmdy1zZW1pYm9sZCBjdXJzb3ItcG9pbnRlciBweS0yXCI+RG93bmxvYWQgVGVtcGxhdGU8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZG93bmxvYWREcm9wRG93blwiXHJcbiAgICAgICAgY2xhc3M9XCJjYXJkIHctYXV0byBweS0yIHBvc2l0aW9uLWFic29sdXRlIHByb2R1Y3Rkcm9wIHRvcC0xMFwiPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbWItMlwiPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJwcm9kdWN0dGV4dCBpdGVtcyBjdXJzb3ItcG9pbnRlciBwLTJcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgRG93bmxvYWQgVGVtcGxhdGU8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbjwvZGl2PlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwibm9EYXRhXCIgPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiID5cclxuICAgICAgICA8aW1nIHdpZHRoPVwiMzAwcHhcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGEuc3ZnXCIgYWx0PVwiXCI+ICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuICAgIFxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdcIiAgPlxyXG48ZGl2IGNsYXNzPVwic2hpbW1lci1jYXJkIHctMTAwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPC9uZy1jb250YWluZXI+XHJcbjxkaXYgICpuZ0lmPVwiIWxvYWRpbmcgJiYgc3RvcmVMaXN0RGF0YT8ubGVuZ3RoICYmICFub0RhdGFcIiBjbGFzcz1cImNhcmQtYm9keSBtdC0yXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInctMTAwIHRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD48c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnc3RvcmVOYW1lJylcIj5TdG9yZSBOYW1lIDxzdmcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0b3JlTmFtZScgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0b3JlTmFtZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ29wZW5UaW1lJylcIj5PcGVuIFRpbWU8c3ZnIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdvcGVuVGltZScgJiYgc29ydE9yZGVyID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ29wZW5UaW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ29wZW5UaW1lJylcIj5DbG9zZSBUaW1lPHN2ZyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnb3BlblRpbWUnICYmIHNvcnRPcmRlciA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdvcGVuVGltZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+PC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb2JqIG9mIHN0b3JlTGlzdERhdGE7IGxldCBpPWluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD57e29iai5zdG9yZU5hbWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPjxzcGFuICpuZ0lmPVwiaXNFZGl0aW5nPT09JydcIj57e2Zvcm1hdFRpbWUob2JqLm9wZW5UaW1lKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJpc0VkaXRpbmc9PT0nZWRpdCdcIiBbKG5nTW9kZWwpXT1cIm9iai5vcGVuVGltZVwiIChjaGFuZ2UpPVwidXBkYXRlQ2xvc2VUaW1lKG9iailcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiB0eXBlPVwidGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPiA8c3BhbiAqbmdJZj1cImlzRWRpdGluZz09PScnXCI+e3sgZm9ybWF0VGltZShvYmouY2xvc2VUaW1lKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiaXNFZGl0aW5nPT09J2VkaXQnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgdHlwZT1cInRpbWVcIiBbKG5nTW9kZWwpXT1cIm9iai5jbG9zZVRpbWVcIiBbbWluXT1cIm9iai5vcGVuVGltZVwiIChjaGFuZ2UpPVwidmFsaWRhdGVDbG9zZVRpbWUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib2JqLnNob3dFcnJvclwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlIHRpbWUgbXVzdCBiZSBsYXRlciB0aGFuIG9wZW4gdGltZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCIhbG9hZGluZyAgJiYgc3RvcmVMaXN0RGF0YT8ubGVuZ3RoICYmICFub0RhdGFcIiBjbGFzcz1cImNhcmQtZm9vdGVyXCI+XHJcbiAgICA8bGliLXBhZ2luYXRpb24gW2l0ZW1zUGVyUGFnZV09XCJwYWdlU2l6ZVwiIFtjdXJyZW50UGFnZV09XCJvZmZzZXRcIiBbdG90YWxJdGVtc109XCJ0b3RhbENvdW50XCJcclxuICAgIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNidWxrVXBsb2FkUG9wdXAgbGV0LW1vZGVsPlxyXG4gICAgPGRpdiBjbGFzcz1cInAtNVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0wIGQtZmxleCBmbGV4LXN0YXJ0IGZsZXgtY29sdW1uIHAtNSB0ZXh0LW5vd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS01IGQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN5bWJvbCBzeW1ib2wtNzVweCBzeW1ib2wtY2lyY2xlXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIGZpbGw9XCIjREFGMUZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjcuNSAyMi41VjI1LjgzMzNDMjcuNSAyNi4yNzU0IDI3LjMyNDQgMjYuNjk5MyAyNy4wMTE4IDI3LjAxMThDMjYuNjk5MyAyNy4zMjQ0IDI2LjI3NTQgMjcuNSAyNS44MzMzIDI3LjVIMTQuMTY2N0MxMy43MjQ2IDI3LjUgMTMuMzAwNyAyNy4zMjQ0IDEyLjk4ODIgMjcuMDExOEMxMi42NzU2IDI2LjY5OTMgMTIuNSAyNi4yNzU0IDEyLjUgMjUuODMzM1YyMi41TTI0LjE2NjcgMTYuNjY2N0wyMCAxMi41TTIwIDEyLjVMMTUuODMzMyAxNi42NjY3TTIwIDEyLjVWMjIuNVwiIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTMgcHQtMiBmcy00IHRleHQtZ3JheS04MDAgdGV4dC1ob3Zlci1wcmltYXJ5IGZ3LWJvbGQgbWItMCB0aXRsZSBjdXJzb3ItcG9pbnRlclwiPkJ1bGsgVXBsb2FkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC10ZXh0XCI+U3RlcDEgLSA8c3BhbiBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi11bmRlcmxpbmUgdGV4dC1wcmltYXJ5IGRvd25sb2FkLXRleHRcIj48c3BhbiAoY2xpY2spPVwiZG93bmxvYWRUZW1wbGF0ZVYyKClcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+RG93bmxvYWQgdGhlIHRlbXBsYXRlIGhlcmU8L3NwYW4+PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXRleHRcIj5TdGVwMiAtIEFkZCB5b3VyIGRhdGEgdG8gdGhlIFRlbXBsYXRlIEZpbGUgd2l0aCBleGlzdGluZyBzdG9yZSBkYXRhPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdGV4dFwiPlN0ZXAzIC0gVXBsb2FkIGl0IGJlbG93IGZvciBwcm9jZXNzaW5nPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RlLXRleHRcIj4qKk5vdGUgOiBPbiB1cGxvYWRpbmcsIGFsbCB0aGUgZXhpc3RpbmcgZGF0YSB3aWxsIGJlIHJlcGxhY2VkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTAgdGV4dC1lbmQgbXQtMyBwdC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbWQgYnRuLWRlZmF1bHQgYnRuLW91dGxpbmVcIiAoY2xpY2spPVwibW9kZWwuY2xvc2UoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gIHB5LTMgYnRuLWRlZmF1bHQgbXMtMyBidG4tcHJpbWFyeVwiIChjbGljayk9XCJmaWxlMS5jbGljaygpXCI+VXBsb2FkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuO1wiICNmaWxlMSB0eXBlPVwiZmlsZVwiIGlkPVwia3RfYWNjb3VudF90ZWFtX3NpemVfc2VsZWN0XzJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVVcGxvYWQoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=