tango-app-ui-store-builder 1.0.1-beta-7 → 1.0.1-beta-9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/esm2022/lib/components/create-vm/create-vm.component.mjs +14 -10
  2. package/esm2022/lib/components/fixture-template/fixture-template.component.mjs +4 -5
  3. package/esm2022/lib/components/fixture-template/template-basic-details/template-basic-details.component.mjs +43 -35
  4. package/esm2022/lib/components/fixture-template/template-products/template-products.component.mjs +39 -31
  5. package/esm2022/lib/components/fixture-template/template-summary/template-summary.component.mjs +17 -8
  6. package/esm2022/lib/components/fixture-template/template-vms/template-vms.component.mjs +24 -35
  7. package/esm2022/lib/components/fixture-template-table/fixture-template-table.component.mjs +8 -4
  8. package/esm2022/lib/components/fixture-template-table/popups/create-fixture-template/create-fixture-template.component.mjs +5 -22
  9. package/esm2022/lib/components/manage-plano-table/manage-plano-table.component.mjs +18 -5
  10. package/esm2022/lib/components/manage-store-plano/manage-store-plano-feedback/manage-store-plano-feedback.component.mjs +17 -7
  11. package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +164 -128
  12. package/esm2022/lib/components/manage-store-plano/publishtask-popup/publishtask-popup.component.mjs +3 -3
  13. package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +44 -36
  14. package/esm2022/lib/components/manage-store-plano/template-products/template-products.component.mjs +37 -20
  15. package/esm2022/lib/components/manage-store-plano/template-vms/template-vms.component.mjs +18 -29
  16. package/esm2022/lib/components/multiselect-chip-dropdown/multiselect-chip-dropdown.component.mjs +9 -6
  17. package/esm2022/lib/components/plano-configurations/plano-configurations.component.mjs +44 -14
  18. package/esm2022/lib/components/plano-configurations/popups/popups.component.mjs +15 -30
  19. package/esm2022/lib/components/plano-library/fixture-library/fixture-library.component.mjs +8 -8
  20. package/esm2022/lib/components/plano-library/vm-library/vm-library.component.mjs +20 -16
  21. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +9 -6
  22. package/esm2022/lib/components/store-plano/store-plano.component.mjs +247 -178
  23. package/esm2022/lib/components/visualize-vm-data/visualize-vm-data.component.mjs +4 -4
  24. package/esm2022/lib/services/store-builder.service.mjs +11 -7
  25. package/fesm2022/tango-app-ui-store-builder.mjs +795 -621
  26. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  27. package/lib/components/manage-plano-table/manage-plano-table.component.d.ts +3 -3
  28. package/lib/components/manage-store-plano/manage-store-plano.component.d.ts +2 -2
  29. package/lib/components/manage-store-plano/template-products/template-products.component.d.ts +1 -1
  30. package/lib/components/plano-configurations/plano-configurations.component.d.ts +2 -1
  31. package/lib/components/store-plano/store-plano.component.d.ts +23 -1
  32. package/lib/services/store-builder.service.d.ts +3 -2
  33. package/package.json +1 -1
@@ -84,16 +84,20 @@ export class CreateVmComponent {
84
84
  this.gs.dataRangeValue.pipe(takeUntil(this.destroy$)).subscribe(async (data) => {
85
85
  if (data?.client) {
86
86
  this.clientId = data?.client;
87
- await Promise.all([
88
- this.getVmTypes(),
89
- this.planoDataService.fetchBrandsList(this.clientId)
90
- ]);
91
- this.route.queryParams
92
- .pipe(map(params => params['vmId']), distinctUntilChanged())
93
- .subscribe(async (id) => {
94
- this.getVmLibDetails(id);
95
- });
96
87
  }
88
+ else {
89
+ let headerData = JSON.parse(localStorage.getItem('header-filters'));
90
+ this.clientId = headerData?.client;
91
+ }
92
+ await Promise.all([
93
+ this.getVmTypes(),
94
+ this.planoDataService.fetchBrandsList(this.clientId)
95
+ ]);
96
+ this.route.queryParams
97
+ .pipe(map(params => params['vmId']), distinctUntilChanged())
98
+ .subscribe(async (id) => {
99
+ this.getVmLibDetails(id);
100
+ });
97
101
  });
98
102
  }
99
103
  // Fetching vmDetails and stops the loading.
@@ -355,4 +359,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
355
359
  type: Component,
356
360
  args: [{ selector: 'lib-create-vm', template: "<input style=\"display: none\" type=\"file\" #fileUpload id=\"vmUpload\" accept=\"image/*\" (change)=\"addImage($event)\" />\r\n\r\n<section id=\"build-vm\" *ngIf=\"!isPageLoading\">\r\n <!-- Header section -->\r\n <div class=\"header\">\r\n <div class=\"d-flex align-items-center justify-contents-center gap-5\">\r\n <button type=\"button\" class=\"btn btn-outline p-3\" routerLink=\"/manage/planogram/library/vms\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M15.8334 9.99984H4.16675M4.16675 9.99984L10.0001 15.8332M4.16675 9.99984L10.0001 4.1665\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n <h2 class=\"m-0\">{{ vmDetails.vmName }}</h2>\r\n <div class=\"badge draft\">{{ vmDetails.status | titlecase }}</div>\r\n </div>\r\n <div class=\"d-flex align-items-center justify-contents-center gap-5\">\r\n <p class=\"m-0\" *ngIf=\"vmDetails._id\">Last update: {{ vmDetails.updatedAt | timeAgo }}</p>\r\n\r\n <div *ngIf=\"!isEditMode\">\r\n <button type=\"button\" class=\"btn btn-outline d-flex align-items-center gap-3\" (click)=\"onClickEdit()\">\r\n <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_1322_5325)\">\r\n <path\r\n d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1322_5325\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n Edit\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"isEditMode\" class=\"d-flex gap-5 justify-content-center align-items-center\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"onSubmit('draft')\">Save as draft</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onSubmit('complete')\">Complete</button>\r\n </div>\r\n\r\n <div class=\"dropdown\" *ngIf=\"this.vmDetails?._id\">\r\n <button class=\"btn btn-outline p-3\" type=\"button\" data-bs-toggle=\"dropdown\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M11 12C11 12.5523 11.4477 13 12 13C12.5523 13 13 12.5523 13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12Z\"\r\n stroke=\"#667085\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M11 19C11 19.5523 11.4477 20 12 20C12.5523 20 13 19.5523 13 19C13 18.4477 12.5523 18 12 18C11.4477 18 11 18.4477 11 19Z\"\r\n stroke=\"#667085\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M11 5C11 5.55228 11.4477 6 12 6C12.5523 6 13 5.55228 13 5C13 4.44772 12.5523 4 12 4C11.4477 4 11 4.44772 11 5Z\"\r\n stroke=\"#667085\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n <ul class=\"dropdown-menu\">\r\n <li><a class=\"dropdown-item cursor-pointer\" (click)=\"onDuplicate()\" *ngIf=\"!isEditMode\">Duplicate</a></li>\r\n <li>\r\n <a class=\"dropdown-item cursor-pointer text-danger\" (click)=\"onDelete()\"> Delete </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- VM Creation Section -->\r\n <div class=\"row gap-4 builder\">\r\n <div class=\"cols col\">\r\n <div>\r\n <h2>Visual Merchandise Details</h2>\r\n <p>Create and define your VM here</p>\r\n\r\n <form [formGroup]=\"addUpdateVmForm\">\r\n <div class=\"form-group mb-4\">\r\n <label for=\"vmName\" class=\"form-label mb-1\">Name</label>\r\n <input type=\"text\" formControlName=\"vmName\" class=\"form-control\" />\r\n\r\n <div *ngIf=\"addUpdateVmForm.get('vmName')?.touched && addUpdateVmForm.get('vmName')?.invalid\">\r\n <small class=\"text-danger\" *ngIf=\"addUpdateVmForm.get('vmName')?.errors?.['required']\">VM Name is required.</small>\r\n </div>\r\n </div>\r\n <div class=\"form-group mb-4\">\r\n <label for=\"vmType\" class=\"form-label mb-1\">Type</label>\r\n <lib-reactive-select\r\n [idField]=\"'vmType'\"\r\n [nameField]=\"'vmType'\"\r\n [data]=\"vmTypesList\"\r\n formControlName=\"vmType\"\r\n [action]=\"true\"\r\n actionLabel=\"Create Type\"\r\n (actionClick)=\"onClickCreateVmType()\"\r\n >\r\n </lib-reactive-select>\r\n <div *ngIf=\"addUpdateVmForm.get('vmType')?.touched && addUpdateVmForm.get('vmType')?.invalid\">\r\n <small class=\"text-danger\" *ngIf=\"addUpdateVmForm.get('vmType')?.errors?.['required']\">VM Type is required.</small>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-4\">\r\n <div class=\"col form-group\">\r\n <label for=\"unit\" class=\"form-label mb-1\">Unit</label>\r\n <lib-reactive-select [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"unitsList\" formControlName=\"unit\">\r\n </lib-reactive-select>\r\n </div>\r\n <div class=\"col form-group\">\r\n <label for=\"vmWidth\" class=\"form-label mb-1\">Width</label>\r\n <counter-input formControlName=\"vmWidth\" [step]=\"1\" placeholder=\"0\"></counter-input>\r\n </div>\r\n <div class=\"col form-group\">\r\n <label for=\"vmHeight\" class=\"form-label mb-1\">Height</label>\r\n <counter-input formControlName=\"vmHeight\" [step]=\"1\" placeholder=\"0\"></counter-input>\r\n </div>\r\n <div class=\"col-12\">\r\n <div *ngIf=\"addUpdateVmForm.get('unit')?.touched && addUpdateVmForm.get('unit')?.invalid\">\r\n <small class=\"text-danger\" *ngIf=\"addUpdateVmForm.get('unit')?.errors?.['required']\">Unit is required.</small>\r\n </div>\r\n <div\r\n *ngIf=\"\r\n (addUpdateVmForm.get('vmWidth')?.touched && addUpdateVmForm.get('vmWidth')?.invalid) ||\r\n (addUpdateVmForm.get('vmHeight')?.touched && addUpdateVmForm.get('vmHeight')?.invalid)\r\n \"\r\n >\r\n <small\r\n class=\"text-danger\"\r\n *ngIf=\"addUpdateVmForm.get('vmWidth')?.errors?.['min'] || addUpdateVmForm.get('vmHeight')?.errors?.['min']\"\r\n >\r\n Height & Width cannot be zero.\r\n </small>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mb-4\">\r\n <div class=\"col form-group\">\r\n <label for=\"vmBrand\" class=\"form-label mb-1\">Brand</label>\r\n <lib-reactive-select\r\n [idField]=\"'brandName'\"\r\n [nameField]=\"'brandName'\"\r\n [data]=\"brandsList\"\r\n formControlName=\"vmBrand\"\r\n >\r\n </lib-reactive-select>\r\n <div *ngIf=\"addUpdateVmForm.get('vmBrand')?.touched && addUpdateVmForm.get('vmBrand')?.invalid\">\r\n <small class=\"text-danger\" *ngIf=\"addUpdateVmForm.get('vmBrand')?.errors?.['required']\">\r\n Brand is required.\r\n </small>\r\n </div>\r\n </div>\r\n <!-- <div class=\"col form-group\">\r\n <label for=\"vmSubBrand\" class=\"form-label mb-1\">Sub-Brand</label>\r\n <lib-reactive-select\r\n [idField]=\"'subBrandName'\"\r\n [nameField]=\"'subBrandName'\"\r\n [data]=\"subBrandsList\"\r\n formControlName=\"vmSubBrand\"\r\n >\r\n </lib-reactive-select>\r\n </div> -->\r\n </div>\r\n\r\n <div class=\"row gap-3 mb-4\">\r\n <div class=\"col form-group\">\r\n <label for=\"vmCategory\" class=\"form-label mb-1\">Category</label>\r\n <lib-reactive-select [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"categoriesList\" formControlName=\"vmCategory\">\r\n </lib-reactive-select>\r\n </div>\r\n <div class=\"col form-group\">\r\n <label for=\"vmSubCategory\" class=\"form-label mb-1\">Sub-Category</label>\r\n <lib-reactive-select\r\n [idField]=\"'value'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"subCategoriesList\"\r\n formControlName=\"vmSubCategory\"\r\n >\r\n </lib-reactive-select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex gap-2 align-items-center\">\r\n <input type=\"checkbox\" class=\"form-check-input\" formControlName=\"isDoubleSided\" />\r\n <label for=\"isDoubleSided\">Enable to have a double sided VM</label>\r\n </div>\r\n </form>\r\n\r\n <div *ngIf=\"selectedVmType\" class=\"d-flex align-items-center justify-content-between mt-4 w-100\">\r\n <div class=\"d-flex flex-column\">\r\n <h3>Images Upload</h3>\r\n <p>Drag and drop the images to the right to visualize your VM</p>\r\n </div>\r\n\r\n <button\r\n (click)=\"fileUpload.click()\"\r\n type=\"button\"\r\n class=\"btn btn-outline d-inline-flex align-items-center text-nowrap\"\r\n [disabled]=\"!isEditMode\"\r\n >\r\n <svg class=\"me-2\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12 5V19M5 12H19\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n Add Image\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"selectedVmType\" class=\"row gx-2 gy-2\">\r\n <div class=\"col-md-6\" *ngFor=\"let vmImage of vmImagesList; let i = index\">\r\n <div class=\"card\">\r\n <img [src]=\"vmImage\" alt=\"Carousel Image\" class=\"carousel-img\" (click)=\"updateActiveImage(i)\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"cols col-8\">\r\n <div class=\"d-flex justify-content-center align-items-center flex-column gap-5\">\r\n @if(vmImagesList.length){\r\n <div class=\"d-flex justify-content-around w-100 align-items-center px-5 mt-5\">\r\n <svg\r\n class=\"cursor-pointer\"\r\n (click)=\"previousImage()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n >\r\n <path d=\"M15 6L9 12L15 18\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <div class=\"carousel-wrapper\">\r\n <div class=\"d-flex w-100 gap-2\">\r\n <div class=\"carousel-container\" *ngIf=\"vmImagesList.length\">\r\n <img [src]=\"vmImagesList[selectedVmImageIndex]\" alt=\"Carousel Image\" class=\"carousel-img\" />\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"yDimensionArrows\"></ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"xDimensionArrows\"></ng-container>\r\n </div>\r\n <svg\r\n class=\"cursor-pointer\"\r\n (click)=\"nextImage()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n >\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n @if(addUpdateVmForm.get('isDoubleSided')?.value){\r\n <div class=\"d-flex justify-content-around w-100 align-items-center px-5 mt-5\">\r\n <svg\r\n class=\"cursor-pointer\"\r\n (click)=\"previousImage()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n >\r\n <path d=\"M15 6L9 12L15 18\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <div class=\"carousel-wrapper\">\r\n <div class=\"d-flex w-100 gap-2\">\r\n <div class=\"carousel-container\" *ngIf=\"vmImagesList.length\">\r\n <img [src]=\"vmImagesList[selectedVmImageIndex]\" alt=\"Carousel Image\" class=\"carousel-img\" />\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"yDimensionArrows\"></ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"xDimensionArrows\"></ng-container>\r\n </div>\r\n <svg\r\n class=\"cursor-pointer\"\r\n (click)=\"nextImage()\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n >\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n } }@else {\r\n <ng-container *ngTemplateOutlet=\"vmPlaceholder\"></ng-container>\r\n @if(addUpdateVmForm.get('isDoubleSided')?.value){\r\n <ng-container *ngTemplateOutlet=\"vmPlaceholder\"></ng-container>\r\n } }\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n\r\n<section id=\"build-vm-skeleton\" *ngIf=\"isPageLoading\">\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 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</section>\r\n\r\n<ng-template #xDimensionArrows>\r\n <div class=\"horizontal-dimension\">\r\n <div class=\"arrow left\"></div>\r\n <div class=\"line\">\r\n <span>{{ addUpdateVmForm.get(\"vmWidth\")?.value }} {{ addUpdateVmForm.get(\"unit\")?.value ?? \"mm\" }}</span>\r\n </div>\r\n <div class=\"arrow right\"></div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #yDimensionArrows>\r\n <div class=\"vertical-dimension\">\r\n <div class=\"arrow up\"></div>\r\n <div class=\"line\">\r\n <span>{{ addUpdateVmForm.get(\"vmHeight\")?.value }} {{ addUpdateVmForm.get(\"unit\")?.value ?? \"mm\" }}</span>\r\n </div>\r\n <div class=\"arrow down\"></div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #vmPlaceholder>\r\n <div>\r\n <div class=\"d-flex\">\r\n <svg width=\"302\" height=\"302\" viewBox=\"0 0 302 302\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.03879 5.2019L300 295.75M299.934 5.20007L1 300.289M5.07798 301H297.001C299.21 301 301 295.627 301 289V13C301 6.37258 299.21 1 297.001 1H5.07799C2.86943 1 1.07904 6.37259 1.07904 13V289C1.07904 295.627 2.86943 301 5.07798 301Z\"\r\n stroke=\"black\"\r\n />\r\n </svg>\r\n <ng-container *ngTemplateOutlet=\"yDimensionArrows\"></ng-container>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"xDimensionArrows\"></ng-container>\r\n </div>\r\n</ng-template>\r\n", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;width:345px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .block{border:1px solid #98a2b3;padding:10px;width:100%;max-width:345px;overflow-x:auto}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid #98a2b3;min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:6px;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}#build-vm .builder{margin:16px 0 0}#build-vm .form-group{width:100%}#build-vm .form-group.disabled{opacity:.5;pointer-events:none}#build-vm h2{font-size:18px;font-weight:600}#build-vm h3{font-size:16px;font-weight:600}#build-vm p{color:var(--Gray-600, #475467);font-size:12px;font-weight:400}#build-vm .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;width:100%;max-width:320px;aspect-ratio:1/1;margin:auto;overflow:hidden}#build-vm .card-img{background:#d0d5dd;height:200px;border-radius:6px}#build-vm .horizontal-dimension .arrow.right{margin-right:26px}#build-vm .vertical-dimension .arrow.up,#build-vm .vertical-dimension .arrow.down{margin:0}#build-vm .carousel-wrapper{width:100%;max-width:320px}#build-vm .carousel-container{width:100%;max-width:320px;aspect-ratio:1/1;margin:auto;border-radius:10px;user-select:none;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}#build-vm .carousel-img{width:100%;height:100%;object-fit:contain;display:block;border-radius:10px}\n"] }]
357
361
  }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.FormBuilder }, { type: i3.StoreBuilderService }, { type: i4.PlanoDataService }, { type: i5.ToastService }, { type: i1.Router }, { type: i6.GlobalStateService }, { type: i7.NgbModal }, { type: i6.PageInfoService }] });
358
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXZtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2NyZWF0ZS12bS9jcmVhdGUtdm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvY3JlYXRlLXZtL2NyZWF0ZS12bS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdyRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUduRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU8zRixNQUFNLE9BQU8saUJBQWlCO0lBaUNsQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF4Q1YsUUFBUSxDQUFTO0lBQ2pCLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFDOUIsT0FBTyxHQUFZLEtBQUssQ0FBQztJQUV6QixTQUFTLEdBQXFCLEVBQUUsQ0FBQTtJQUNoQyxlQUFlLENBQVk7SUFFM0IsV0FBVyxHQUFvQixFQUFFLENBQUE7SUFDakMsY0FBYyxDQUE0QjtJQUUxQyxTQUFTLEdBQUc7UUFDVixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtRQUM1QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtRQUM1QixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtRQUNsQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtLQUMvQixDQUFBO0lBRUQsVUFBVSxHQUFtQixFQUFFLENBQUE7SUFDL0IsY0FBYyxHQUFpQixFQUFFLENBQUE7SUFDakMsaUJBQWlCLEdBQWlCLEVBQUUsQ0FBQTtJQUdwQyxZQUFZLEdBQWEsRUFBRSxDQUFDO0lBQzVCLG9CQUFvQixHQUFHLENBQUMsQ0FBQztJQUN6QixXQUFXLENBQU87SUFDbEIsTUFBTSxDQUFTO0lBRWYsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUVYLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRTFDLFlBQ1UsS0FBcUIsRUFDckIsRUFBZSxFQUNmLG1CQUF3QyxFQUN4QyxnQkFBa0MsRUFDbEMsS0FBbUIsRUFDbkIsTUFBYyxFQUNkLEVBQXNCLEVBQ3RCLFFBQWtCLEVBQ2xCLFFBQXlCO1FBUnpCLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNuQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtJQUMvQixDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUUxQixJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQTtRQUU5QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUU3QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO1lBQzNCLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUscUNBQXFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFO1lBQ3hHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtZQUMzRCxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLG9DQUFvQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtZQUNyRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7U0FDNUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELFdBQVc7UUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBUyxFQUFFLEVBQUU7WUFDbEYsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUM7Z0JBRTdCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2lCQUNyRCxDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO3FCQUNuQixJQUFJLENBQ0gsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsQ0FDdEQ7cUJBQ0EsU0FBUyxDQUFDLEtBQUssRUFBQyxFQUFFLEVBQUMsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLENBQUE7YUFDTDtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELDRDQUE0QztJQUM1QyxlQUFlLENBQUMsSUFBYTtRQUMzQixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFBO1lBQ3JDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLE9BQU87U0FDUjtRQUFBLENBQUM7UUFFRixJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNELElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUN2QixJQUFJLE9BQU8sRUFBRTtvQkFFWCxJQUFJLENBQUMsU0FBUyxHQUFHO3dCQUNmLEdBQUcsT0FBTztxQkFDWCxDQUFBO29CQUVELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztpQkFDNUI7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDZCxJQUFJO1lBQ0YsTUFBTSxHQUFHLEdBQVEsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM5RixJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2FBQzdCO1NBQ0Y7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDbkMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLElBQUksYUFBYSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDdEUsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNyRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbEUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3ZELFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQztZQUM5QyxhQUFhLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsSUFBSSxFQUFFLENBQUM7WUFDcEQsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLElBQUksS0FBSyxDQUFDO1NBQ3hELENBQUMsQ0FBQTtRQUdGLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRXZFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUM1RixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFekYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBYTtRQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDO1lBQUUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFFbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUU1QixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQWM7UUFDakMsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUM7WUFFeEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1lBQ2xHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxhQUFhLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1lBRXhHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3pFO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUM7WUFDMUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztTQUN6QixDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ1gsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxFQUFFLE1BQU0sS0FBSyxTQUFTLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMscUNBQXFDLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDekc7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksd0JBQXdCLENBQUMsQ0FBQztnQkFDeEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUN2RCxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlO1FBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckYsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7UUFDL0MsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsR0FBRywyQ0FBMkMsQ0FBQztRQUVyRixPQUFPLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVE7UUFDWixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEYsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEtBQUssR0FBRyxrQkFBa0IsQ0FBQztZQUN0RCxRQUFRLENBQUMsaUJBQWlCLENBQUMsV0FBVyxHQUFHLDZCQUE2QixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsdUNBQXVDLENBQUM7WUFDMUksT0FBTTtTQUNQO1FBQUEsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFBRSxPQUFPO1FBRTFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMvRSxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLEVBQUUsTUFBTSxLQUFLLFNBQVMsRUFBRTtvQkFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQTtpQkFDeEQ7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUkscUJBQXFCLENBQUMsQ0FBQztnQkFDckUsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUNqRCxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELG1CQUFtQjtRQUNqQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTVFLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNwRCxRQUFRLENBQUMsaUJBQWlCLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3BDLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUV4Qiw4RkFBOEY7Z0JBQzlGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO2dCQUMzRSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztvQkFDOUIsTUFBTSxFQUFFLGNBQWM7aUJBQ3ZCLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFBO2FBQ3BDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ3BILENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDekYsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVO1FBRWpCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUEwQixDQUFDO1FBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRXJELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFDekQsT0FBTztTQUNSO1FBRUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNoQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBSSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBRXhGLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLEdBQUcsRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFO29CQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUE7aUJBQ3JEO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLCtCQUErQixFQUFFLEdBQUcsQ0FBQyxDQUFBO1lBQ25ELENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBR0QsS0FBSyxDQUFDLGlCQUFpQjtRQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDO1FBQ2pELFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsd0VBQXdFLENBQUM7UUFDbEgsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxnREFBZ0QsQ0FBQztRQUVuRixPQUFPLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFjO1FBQzNCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUE7WUFDM0MsT0FBTztTQUNSO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRTtZQUM5QixJQUFJLE1BQU0sS0FBSyxVQUFVO2dCQUFFLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFBRSxPQUFPO1lBQ3ZFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFNUYsTUFBTSxlQUFlLEdBQUc7Z0JBQ3RCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLO2dCQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHO2dCQUMxQixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3pCLFVBQVUsRUFBRTtvQkFDVixPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsT0FBTztvQkFDN0MsTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUk7aUJBQzFDO2dCQUNELFNBQVMsRUFBRTtvQkFDVCxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsUUFBUTtvQkFDOUMsTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUk7aUJBQzFDO2dCQUNELFlBQVksRUFBRSxTQUFTO2dCQUN2QixRQUFRLEVBQUUsTUFBTTthQUNqQixDQUFBO1lBQ0QsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBRTVCLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRW5ELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzdELElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNqQixJQUFJLEdBQUcsRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFO3dCQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7d0JBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFBO3FCQUN4RDtnQkFDSCxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLDJCQUEyQixDQUFDLENBQUM7b0JBQzNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxDQUFDLENBQUE7Z0JBQ3BELENBQUM7YUFDRixDQUFDLENBQUE7U0FDSDtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFhO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFDN0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQTtJQUNuQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUU7WUFDaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRixRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDO1lBQ3BELFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsNkJBQTZCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxzQ0FBc0MsQ0FBQztZQUN6SSxPQUFNO1NBQ1A7UUFBQSxDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDdkIsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ3RCLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDN0IsbUJBQW1CLEVBQUUsT0FBTztTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXRYVSxpQkFBaUI7NEZBQWpCLGlCQUFpQixxREN0QjlCLCtqakJBOFhBOzs0RkR4V2EsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSwgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlyc3RWYWx1ZUZyb20sIG1hcCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEcm9wZG93bklGIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wbGFuby1nZW5lcmFsLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFkZFZtVHlwZUNvbXBvbmVudCB9IGZyb20gJy4vcG9wdXBzL2FkZC12bS10eXBlL2FkZC12bS10eXBlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHJlbW92ZUVtcHR5RmllbGRzIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL3BsYW5vLmZ1bmN0aW9uJztcclxuaW1wb3J0IHsgUGxhbm9EYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BsYW5vLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEJyYW5kRGV0YWlscywgVk1MaWJyYXJ5RGV0YWlscywgVk1UeXBlRGV0YWlscyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdm0tbGlicmFyeS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBDb21wbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3BvcHVwcy9jb21wbGV0ZS1jb25maXJtYXRpb24vY29tcGxldGUtY29uZmlybWF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3BvcHVwcy9kZWxldGUtY29uZmlybWF0aW9uL2RlbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2Fubm90UGVyZm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL3BvcHVwcy9jYW5ub3QtcGVyZm9ybS9jYW5ub3QtcGVyZm9ybS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItY3JlYXRlLXZtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLXZtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY3JlYXRlLXZtLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlVm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcbiAgaXNQYWdlTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB2bURldGFpbHM6IFZNTGlicmFyeURldGFpbHMgPSB7fVxyXG4gIGFkZFVwZGF0ZVZtRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICB2bVR5cGVzTGlzdDogVk1UeXBlRGV0YWlsc1tdID0gW11cclxuICBzZWxlY3RlZFZtVHlwZTogVk1UeXBlRGV0YWlscyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgdW5pdHNMaXN0ID0gW1xyXG4gICAgeyBsYWJlbDogJ21tJywgdmFsdWU6ICdtbScgfSxcclxuICAgIHsgbGFiZWw6ICdjbScsIHZhbHVlOiAnY20nIH0sXHJcbiAgICB7IGxhYmVsOiAnSW5jaGVzJywgdmFsdWU6ICdpbmNoJyB9LFxyXG4gICAgeyBsYWJlbDogJ0ZlZXQnLCB2YWx1ZTogJ2Z0JyB9LFxyXG4gIF1cclxuXHJcbiAgYnJhbmRzTGlzdDogQnJhbmREZXRhaWxzW10gPSBbXVxyXG4gIGNhdGVnb3JpZXNMaXN0OiBEcm9wZG93bklGW10gPSBbXVxyXG4gIHN1YkNhdGVnb3JpZXNMaXN0OiBEcm9wZG93bklGW10gPSBbXVxyXG5cclxuXHJcbiAgdm1JbWFnZXNMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlbGVjdGVkVm1JbWFnZUluZGV4ID0gMDtcclxuICB1cGxvYWRJbWFnZTogRmlsZTtcclxuICBpbWdDRE46IHN0cmluZztcclxuXHJcbiAgaXNFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwbGFub0RhdGFTZXJ2aWNlOiBQbGFub0RhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdiTW9kYWw6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRQYWdlRGF0YSgpO1xyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50LnN1YnNjcmliZSgoZW52KSA9PiB0aGlzLmltZ0NETiA9IGVudi5wbGFub2dyYW1DRE4pO1xyXG4gICAgdGhpcy5wbGFub0RhdGFTZXJ2aWNlLmJyYW5kc0xpc3Quc3Vic2NyaWJlKChlKSA9PiB0aGlzLmJyYW5kc0xpc3QgPSBlKTtcclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNcclxuXHJcbiAgICB0aGlzLnZtRGV0YWlscy5faWQgPSBwYXJhbXNbJ3ZtSWQnXSA/PyAnJztcclxuICAgIHRoaXMuaXNFZGl0TW9kZSA9IHBhcmFtc1snaXNFZGl0J10gPT0gJ3RydWUnO1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50SWQoKTtcclxuICB9XHJcblxyXG4gIHNldFBhZ2VEYXRhKCkge1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZShcIkNyZWF0ZSBWaXN1YWwgTWVyY2hhbmRpc2VcIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldEJyZWFkY3J1bWJzKFtcclxuICAgICAgeyB0aXRsZTogXCJQbGFub2dyYW1cIiwgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtc1wiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiBcIlwiLCBwYXRoOiBcIlwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiTGlicmFyeVwiLCBwYXRoOiBcIi9tYW5hZ2UvcGxhbm9ncmFtL2xpYnJhcnkvZml4dHVyZXNcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogXCJcIiwgcGF0aDogXCJcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0Q2xpZW50SWQoKSB7XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoYXN5bmMgKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGE/LmNsaWVudDtcclxuXHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgdGhpcy5nZXRWbVR5cGVzKCksXHJcbiAgICAgICAgICB0aGlzLnBsYW5vRGF0YVNlcnZpY2UuZmV0Y2hCcmFuZHNMaXN0KHRoaXMuY2xpZW50SWQpXHJcbiAgICAgICAgXSk7XHJcblxyXG4gICAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXNcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBtYXAocGFyYW1zID0+IHBhcmFtc1sndm1JZCddKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShhc3luYyBpZCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Vm1MaWJEZXRhaWxzKGlkKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvLyBGZXRjaGluZyB2bURldGFpbHMgYW5kIHN0b3BzIHRoZSBsb2FkaW5nLlxyXG4gIGdldFZtTGliRGV0YWlscyh2bUlkPzogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXZtSWQpIHtcclxuICAgICAgdGhpcy52bURldGFpbHMudm1OYW1lID0gJ1VudGl0bGVkIFZNJ1xyXG4gICAgICB0aGlzLmluaXRBZGRVcGRhdGVWbUZvcm0oKTtcclxuICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFZtTGlicmFyeURldGFpbHModm1JZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGRldGFpbHMgPSByZXMuZGF0YTtcclxuICAgICAgICBpZiAoZGV0YWlscykge1xyXG5cclxuICAgICAgICAgIHRoaXMudm1EZXRhaWxzID0ge1xyXG4gICAgICAgICAgICAuLi5kZXRhaWxzXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5pbml0QWRkVXBkYXRlVm1Gb3JtKCk7XHJcbiAgICAgICAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKVxyXG4gICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNFcnJvciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRWbVR5cGVzKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZ2V0Vm1UeXBlc0xpc3QodGhpcy5jbGllbnRJZCkpO1xyXG4gICAgICBpZiAocmVzPy5kYXRhKSB7XHJcbiAgICAgICAgdGhpcy52bVR5cGVzTGlzdCA9IHJlcy5kYXRhO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkBAIH4gZ2V0Vm1UeXBlcyBbRVJSXTpcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdEFkZFVwZGF0ZVZtRm9ybSgpIHtcclxuICAgIHRoaXMuYWRkVXBkYXRlVm1Gb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHZtTmFtZTogW3RoaXMudm1EZXRhaWxzPy52bU5hbWUgfHwgJ1VudGl0bGVkIFZNJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHZtVHlwZTogW3RoaXMudm1EZXRhaWxzPy52bVR5cGUsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICB1bml0OiBbdGhpcy52bURldGFpbHM/LnZtV2lkdGg/LnVuaXQgfHwgJ21tJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHZtV2lkdGg6IFt0aGlzLnZtRGV0YWlscz8udm1XaWR0aD8udmFsdWUgPz8gMCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluKDEpXV0sXHJcbiAgICAgIHZtSGVpZ2h0OiBbdGhpcy52bURldGFpbHM/LnZtSGVpZ2h0Py52YWx1ZSA/PyAwLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW4oMSldXSxcclxuICAgICAgdm1CcmFuZDogW3RoaXMudm1EZXRhaWxzPy52bUJyYW5kLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgdm1DYXRlZ29yeTogW3RoaXMudm1EZXRhaWxzPy52bUNhdGVnb3J5IHx8ICcnXSxcclxuICAgICAgdm1TdWJDYXRlZ29yeTogW3RoaXMudm1EZXRhaWxzPy52bVN1YkNhdGVnb3J5IHx8ICcnXSxcclxuICAgICAgaXNEb3VibGVTaWRlZDogW3RoaXMudm1EZXRhaWxzPy5pc0RvdWJsZVNpZGVkIHx8IGZhbHNlXSxcclxuICAgIH0pXHJcblxyXG5cclxuICAgIHRoaXMuYWRkVXBkYXRlVm1Gb3JtLmdldChcImNhdGVnb3J5XCIpPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMuYWRkVXBkYXRlVm1Gb3JtLmdldChcInN1YkNhdGVnb3J5XCIpPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlVm1UeXBlKHRoaXMudm1EZXRhaWxzPy52bVR5cGUpO1xyXG5cclxuICAgIHRoaXMuYWRkVXBkYXRlVm1Gb3JtLmdldChcInZtTmFtZVwiKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodikgPT4gdGhpcy52bURldGFpbHMudm1OYW1lID0gdilcclxuICAgIHRoaXMuYWRkVXBkYXRlVm1Gb3JtLmdldChcInZtVHlwZVwiKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodikgPT4gdGhpcy5vbkNoYW5nZVZtVHlwZSh2KSlcclxuXHJcbiAgICB0aGlzLnRvZ2dsZUNhdGVnb3J5RmllbGRzKHRoaXMudm1EZXRhaWxzPy52bUJyYW5kKTtcclxuXHJcbiAgICB0aGlzLmFkZFVwZGF0ZVZtRm9ybS5nZXQoJ3ZtQnJhbmQnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgdGhpcy5vbkNoYW5nZUJyYW5kKHZhbHVlKTtcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpIHRoaXMuYWRkVXBkYXRlVm1Gb3JtLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pXHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZVZtVHlwZSh0eXBlPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVm1UeXBlID0gdGhpcy52bVR5cGVzTGlzdC5maW5kKGUgPT4gZS52bVR5cGUgPT09IHR5cGUpO1xyXG4gICAgdGhpcy52bUltYWdlc0xpc3QgPSB0aGlzLnNlbGVjdGVkVm1UeXBlPy5pbWFnZVVybHM/Lm1hcCh1cmwgPT4gdGhpcy5pbWdDRE4gKyB1cmwpIHx8IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZFZtSW1hZ2VJbmRleCA9IHRoaXMudm1JbWFnZXNMaXN0LmZpbmRJbmRleChpbWcgPT4gaW1nLmluY2x1ZGVzKHRoaXMudm1EZXRhaWxzPy52bUltYWdlVXJsIHx8ICcnKSk7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFZtSW1hZ2VJbmRleCA8IDApIHRoaXMuc2VsZWN0ZWRWbUltYWdlSW5kZXggPSAwO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VCcmFuZChicmFuZD86IHN0cmluZykge1xyXG4gICAgdGhpcy5hZGRVcGRhdGVWbUZvcm0uZ2V0KFwidm1DYXRlZ29yeVwiKT8ucmVzZXQoKTtcclxuICAgIHRoaXMuYWRkVXBkYXRlVm1Gb3JtLmdldChcInZtU3ViQ2F0ZWdvcnlcIik/LnJlc2V0KCk7XHJcblxyXG4gICAgdGhpcy5jYXRlZ29yaWVzTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5zdWJDYXRlZ29yaWVzTGlzdCA9IFtdO1xyXG5cclxuICAgIHRoaXMudG9nZ2xlQ2F0ZWdvcnlGaWVsZHMoYnJhbmQpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQ2F0ZWdvcnlGaWVsZHMoYnJhbmQ/OiBzdHJpbmcpIHtcclxuICAgIGlmIChicmFuZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEJyYW5kID0gdGhpcy5icmFuZHNMaXN0Py5maW5kKGUgPT4gZS5icmFuZE5hbWUgPT09IGJyYW5kKTtcclxuXHJcbiAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3QgPSBzZWxlY3RlZEJyYW5kPy5jYXRlZ29yeT8ubWFwKChlKSA9PiB7IHJldHVybiB7IGxhYmVsOiBlLCB2YWx1ZTogZSB9IH0pID8/IFtdXHJcbiAgICAgIHRoaXMuc3ViQ2F0ZWdvcmllc0xpc3QgPSBzZWxlY3RlZEJyYW5kPy5zdWJDYXRlZ29yeT8ubWFwKChlKSA9PiB7IHJldHVybiB7IGxhYmVsOiBlLCB2YWx1ZTogZSB9IH0pID8/IFtdXHJcblxyXG4gICAgICB0aGlzLmFkZFVwZGF0ZVZtRm9ybS5nZXQoXCJ2bUNhdGVnb3J5XCIpPy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLmFkZFVwZGF0ZVZtRm9ybS5nZXQoXCJ2bVN1YkNhdGVnb3J5XCIpPy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EdXBsaWNhdGUoKSB7XHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZHVwbGljYXRlVm1MaWJyYXJ5KHtcclxuICAgICAgdm1JZDogdGhpcy52bURldGFpbHMuX2lkXHJcbiAgICB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QocmVzLmRhdGEubWVzc2FnZSk7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvcGxhbm9ncmFtL2NyZWF0ZS1saWJyYXJ5LXZtJ10sIHsgcXVlcnlQYXJhbXM6IHsgdm1JZDogcmVzPy5kYXRhPy5pZCB9IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyPy5lcnJvcj8uZXJyb3IgfHwgJ0ZhaWxlZCB0byBkdXBsaWNhdGUgVk0nKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkBAIH4gZHVwbGljYXRlRml4dHVyZUxpYnJhcnkgZXJyOlwiLCBlcnIpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maXJtRGVsZXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubmdiTW9kYWwub3BlbihEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHsgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aXRsZSA9ICdEZWxldGUgVk0nO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHZtID8nO1xyXG5cclxuICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09ICdvaycpXHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkRlbGV0ZSgpIHtcclxuICAgIGlmICh0aGlzLnZtRGV0YWlscy50ZW1wbGF0ZUNvdW50KSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKENhbm5vdFBlcmZvcm1Db21wb25lbnQsIHsgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gYENhbuKAmXQgZGVsZXRlIFZNIWA7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLmRlc2NyaXB0aW9uID0gYFNpbmNlIHRoaXMgVk0gaXMgbGl2ZSBpbiBcIiR7dGhpcy52bURldGFpbHMudGVtcGxhdGVDb3VudH0gdGVtcGxhdGVzLFwiIGRlbGV0aW5nIGlzIG5vdCBhbGxvd2VkLmA7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoIWF3YWl0IHRoaXMuY29uZmlybURlbGV0aW9uKCkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZGVsZXRlVm1MaWJyYXJ5KHsgdm1JZDogdGhpcy52bURldGFpbHMuX2lkIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChyZXMubWVzc2FnZSk7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvcGxhbm9ncmFtL2xpYnJhcnkvdm1zJ10pXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5lcnJvciB8fCAnRmFpbGVkIHRvIGRlbGV0ZSBWTScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBkZWxldGVWbUxpYnJhcnkgW2Vycl06XCIsIGVycilcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tDcmVhdGVWbVR5cGUoKSB7XHJcbiAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubmdiTW9kYWwub3BlbihBZGRWbVR5cGVDb21wb25lbnQsIHsgY2VudGVyZWQ6IHRydWUgfSk7XHJcblxyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2xpZW50SWQgPSB0aGlzLmNsaWVudElkO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2Uudm1UeXBlc0xpc3QgPSB0aGlzLnZtVHlwZXNMaXN0O1xyXG4gICAgbW9kZWxSZWYucmVzdWx0LnRoZW4oYXN5bmMgKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRWbVR5cGVzKCk7XHJcblxyXG4gICAgICAgIC8vIFRPRE86IFBhdGNoaW5nIHRoZSBuZXdseSBhZGRlZCB0eXBlIHRvIHRoZSBmb3JtIGJ5IGRlZmF1bHQsIGNhbiBiZSByZW1vdmVkIGlmIG5vdCByZXF1aXJlZC5cclxuICAgICAgICBjb25zdCBuZXdseUFkZGVkVHlwZSA9IHRoaXMudm1UeXBlc0xpc3RbdGhpcy52bVR5cGVzTGlzdC5sZW5ndGggLSAxXS52bVR5cGVcclxuICAgICAgICB0aGlzLmFkZFVwZGF0ZVZtRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgIHZtVHlwZTogbmV3bHlBZGRlZFR5cGVcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlVm1UeXBlKG5ld2x5QWRkZWRUeXBlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJldmlvdXNJbWFnZSgpIHtcclxuICAgIGlmICghdGhpcy5pc0VkaXRNb2RlKSByZXR1cm47XHJcbiAgICB0aGlzLnNlbGVjdGVkVm1JbWFnZUluZGV4ID0gKHRoaXMuc2VsZWN0ZWRWbUltYWdlSW5kZXggLSAxICsgdGhpcy52bUltYWdlc0xpc3QubGVuZ3RoKSAlIHRoaXMudm1JbWFnZXNMaXN0Lmxlbmd0aDtcclxuICB9XHJcblxyXG4gIG5leHRJbWFnZSgpIHtcclxuICAgIGlmICghdGhpcy5pc0VkaXRNb2RlKSByZXR1cm47XHJcbiAgICB0aGlzLnNlbGVjdGVkVm1JbWFnZUluZGV4ID0gKHRoaXMuc2VsZWN0ZWRWbUltYWdlSW5kZXggKyAxKSAlIHRoaXMudm1JbWFnZXNMaXN0Lmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGFkZEltYWdlKGV2ZW50OiBhbnkpIHtcclxuXHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKCFpbnB1dC5maWxlcyB8fCBpbnB1dC5maWxlcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXNbMF07XHJcbiAgICBpZiAoIWZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJPbmx5IGltYWdlIGZpbGVzIGFyZSBhbGxvd2VkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXBsb2FkRmlsZSA9IGV2ZW50Py50YXJnZXQ/LmZpbGVzWzBdO1xyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIHVwbG9hZEZpbGUpO1xyXG5cclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS51cGxvYWRWbVR5cGVJbWFnZShmb3JtRGF0YSwgdGhpcy5zZWxlY3RlZFZtVHlwZT8uX2lkISkuc3Vic2NyaWJlKHtcclxuXHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChcIkltYWdlIFVwbG9hZGVkXCIpO1xyXG4gICAgICAgICAgdGhpcy52bUltYWdlc0xpc3QucHVzaCh0aGlzLmltZ0NETiArIHJlcz8uZGF0YT8udXJsKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkBAIH4gdXBsb2FkVm1UeXBlSW1hZ2UgW2Vycl06XCIsIGVycilcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuICBhc3luYyBjb25maXJtQ29tcGxldGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKENvbXBsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50LCB7IGNlbnRlcmVkOiB0cnVlIH0pO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSAnQ29tcGxldGUgVk0nO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPSAnVGhpcyBhY3Rpb24gd2lsbCBtYXJrIGFzIGNvbXBsZXRlZCBhbmQgcmVhZHkgdG8gYXNzaWduIGl0IHRvIHRoZSBzdG9yZSc7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5ub3RlID0gJ1lvdSBjYW5cXCd0IGVkaXQgaXQgb25jZSBhc3NpZ25lZCB0byB0aGUgc3RvcmUuJztcclxuXHJcbiAgICByZXR1cm4gYXdhaXQgbW9kZWxSZWYucmVzdWx0LnRoZW48Ym9vbGVhbj4oKHJlc3VsdCkgPT4gcmVzdWx0ID09PSAnb2snKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uU3VibWl0KHN0YXR1czogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5hZGRVcGRhdGVWbUZvcm0uaW52YWxpZCkge1xyXG4gICAgICB0aGlzLmFkZFVwZGF0ZVZtRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIkZvcm0gaXMgaW52YWxpZFwiKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWRkVXBkYXRlVm1Gb3JtLnZhbGlkKSB7XHJcbiAgICAgIGlmIChzdGF0dXMgPT09ICdjb21wbGV0ZScpIGlmICghYXdhaXQgdGhpcy5jb25maXJtQ29tcGxldGlvbigpKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IGltYWdlUGF0aCA9IHRoaXMudm1JbWFnZXNMaXN0W3RoaXMuc2VsZWN0ZWRWbUltYWdlSW5kZXhdPy5zcGxpdCgnY2xvdWRmcm9udC5uZXQvJylbMV07XHJcblxyXG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB7XHJcbiAgICAgICAgLi4udGhpcy5hZGRVcGRhdGVWbUZvcm0udmFsdWUsXHJcbiAgICAgICAgXCJfaWRcIjogdGhpcy52bURldGFpbHM/Ll9pZCxcclxuICAgICAgICBcImNsaWVudElkXCI6IHRoaXMuY2xpZW50SWQsXHJcbiAgICAgICAgXCJ2bUhlaWdodFwiOiB7XHJcbiAgICAgICAgICBcInZhbHVlXCI6IHRoaXMuYWRkVXBkYXRlVm1Gb3JtPy52YWx1ZT8udm1XaWR0aCxcclxuICAgICAgICAgIFwidW5pdFwiOiB0aGlzLmFkZFVwZGF0ZVZtRm9ybT8udmFsdWU/LnVuaXRcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwidm1XaWR0aFwiOiB7XHJcbiAgICAgICAgICBcInZhbHVlXCI6IHRoaXMuYWRkVXBkYXRlVm1Gb3JtPy52YWx1ZT8udm1IZWlnaHQsXHJcbiAgICAgICAgICBcInVuaXRcIjogdGhpcy5hZGRVcGRhdGVWbUZvcm0/LnZhbHVlPy51bml0XHJcbiAgICAgICAgfSxcclxuICAgICAgICBcInZtSW1hZ2VVcmxcIjogaW1hZ2VQYXRoLFxyXG4gICAgICAgIFwic3RhdHVzXCI6IHN0YXR1c1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSB0cmFuc2Zvcm1lZERhdGEudW5pdDtcclxuXHJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSByZW1vdmVFbXB0eUZpZWxkcyh0cmFuc2Zvcm1lZERhdGEpO1xyXG5cclxuICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmFkZFVwZGF0ZVZtTGlicmFyeShwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgICAgdGhpcy52bURldGFpbHMuc3RhdHVzID0gc3RhdHVzXHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KHJlcy5kYXRhLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvcGxhbm9ncmFtL2xpYnJhcnkvdm1zJ10pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/LmVycm9yID8/IFwiRmFpbGVkIHRvIHNhdmUgVk0gZGV0YWlsc1wiKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBhZGRVcGRhdGVWbUxpYnJhcnkgW2Vycl06XCIsIGVycilcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBY3RpdmVJbWFnZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNFZGl0TW9kZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5zZWxlY3RlZFZtSW1hZ2VJbmRleCA9IGluZGV4XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrRWRpdCgpIHtcclxuICAgIGlmICh0aGlzLnZtRGV0YWlscy50ZW1wbGF0ZUNvdW50KSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKENhbm5vdFBlcmZvcm1Db21wb25lbnQsIHsgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gYENhbuKAmXQgZWRpdCBWTSFgO1xyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9IGBTaW5jZSB0aGlzIFZNIGlzIGxpdmUgaW4gXCIke3RoaXMudm1EZXRhaWxzLnRlbXBsYXRlQ291bnR9IHRlbXBsYXRlcyxcIiBlZGl0aW5nIGlzIG5vdCBhbGxvd2VkLmA7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfTtcclxuICAgIHRoaXMuaXNFZGl0TW9kZSA9IHRydWU7XHJcbiAgICB0aGlzLmFkZFVwZGF0ZVZtRm9ybS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xyXG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICBxdWVyeVBhcmFtczogeyBpc0VkaXQ6IHRydWUgfSxcclxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbn0iLCI8aW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgdHlwZT1cImZpbGVcIiAjZmlsZVVwbG9hZCBpZD1cInZtVXBsb2FkXCIgYWNjZXB0PVwiaW1hZ2UvKlwiIChjaGFuZ2UpPVwiYWRkSW1hZ2UoJGV2ZW50KVwiIC8+XHJcblxyXG48c2VjdGlvbiBpZD1cImJ1aWxkLXZtXCIgKm5nSWY9XCIhaXNQYWdlTG9hZGluZ1wiPlxyXG4gIDwhLS0gSGVhZGVyIHNlY3Rpb24gLS0+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50cy1jZW50ZXIgZ2FwLTVcIj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgcC0zXCIgcm91dGVyTGluaz1cIi9tYW5hZ2UvcGxhbm9ncmFtL2xpYnJhcnkvdm1zXCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTE1LjgzMzQgOS45OTk4NEg0LjE2Njc1TTQuMTY2NzUgOS45OTk4NEwxMC4wMDAxIDE1LjgzMzJNNC4xNjY3NSA5Ljk5OTg0TDEwLjAwMDEgNC4xNjY1XCJcclxuICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiXHJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxoMiBjbGFzcz1cIm0tMFwiPnt7IHZtRGV0YWlscy52bU5hbWUgfX08L2gyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYmFkZ2UgZHJhZnRcIj57eyB2bURldGFpbHMuc3RhdHVzIHwgdGl0bGVjYXNlIH19PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudHMtY2VudGVyIGdhcC01XCI+XHJcbiAgICAgIDxwIGNsYXNzPVwibS0wXCIgKm5nSWY9XCJ2bURldGFpbHMuX2lkXCI+TGFzdCB1cGRhdGU6IHt7IHZtRGV0YWlscy51cGRhdGVkQXQgfCB0aW1lQWdvIH19PC9wPlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFpc0VkaXRNb2RlXCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiIChjbGljayk9XCJvbkNsaWNrRWRpdCgpXCI+XHJcbiAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xMzIyXzUzMjUpXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgIGQ9XCJNMTQuMTY2NyAyLjQ5OTkzQzE0LjM4NTYgMi4yODEwNiAxNC42NDU1IDIuMTA3NDQgMTQuOTMxNCAxLjk4ODk5QzE1LjIxNzQgMS44NzA1NCAxNS41MjM5IDEuODA5NTcgMTUuODMzNCAxLjgwOTU3QzE2LjE0MjkgMS44MDk1NyAxNi40NDk0IDEuODcwNTQgMTYuNzM1NCAxLjk4ODk5QzE3LjAyMTQgMi4xMDc0NCAxNy4yODEyIDIuMjgxMDYgMTcuNTAwMSAyLjQ5OTkzQzE3LjcxOSAyLjcxODggMTcuODkyNiAyLjk3ODYzIDE4LjAxMSAzLjI2NDZDMTguMTI5NSAzLjU1MDU3IDE4LjE5MDQgMy44NTcwNiAxOC4xOTA0IDQuMTY2NTlDMTguMTkwNCA0LjQ3NjEyIDE4LjEyOTUgNC43ODI2MiAxOC4wMTEgNS4wNjg1OUMxNy44OTI2IDUuMzU0NTUgMTcuNzE5IDUuNjE0MzkgMTcuNTAwMSA1LjgzMzI2TDYuMjUwMDggMTcuMDgzM0wxLjY2Njc1IDE4LjMzMzNMMi45MTY3NSAxMy43NDk5TDE0LjE2NjcgMi40OTk5M1pcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTMyMl81MzI1XCI+XHJcbiAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgRWRpdFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJpc0VkaXRNb2RlXCIgY2xhc3M9XCJkLWZsZXggZ2FwLTUganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJvblN1Ym1pdCgnZHJhZnQnKVwiPlNhdmUgYXMgZHJhZnQ8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJvblN1Ym1pdCgnY29tcGxldGUnKVwiPkNvbXBsZXRlPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgKm5nSWY9XCJ0aGlzLnZtRGV0YWlscz8uX2lkXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBwLTNcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiPlxyXG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgZD1cIk0xMSAxMkMxMSAxMi41NTIzIDExLjQ0NzcgMTMgMTIgMTNDMTIuNTUyMyAxMyAxMyAxMi41NTIzIDEzIDEyQzEzIDExLjQ0NzcgMTIuNTUyMyAxMSAxMiAxMUMxMS40NDc3IDExIDExIDExLjQ0NzcgMTEgMTJaXCJcclxuICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCJcclxuICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgZD1cIk0xMSAxOUMxMSAxOS41NTIzIDExLjQ0NzcgMjAgMTIgMjBDMTIuNTUyMyAyMCAxMyAxOS41NTIzIDEzIDE5QzEzIDE4LjQ0NzcgMTIuNTUyMyAxOCAxMiAxOEMxMS40NDc3IDE4IDExIDE4LjQ0NzcgMTEgMTlaXCJcclxuICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCJcclxuICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgZD1cIk0xMSA1QzExIDUuNTUyMjggMTEuNDQ3NyA2IDEyIDZDMTIuNTUyMyA2IDEzIDUuNTUyMjggMTMgNUMxMyA0LjQ0NzcyIDEyLjU1MjMgNCAxMiA0QzExLjQ0NzcgNCAxMSA0LjQ0NzcyIDExIDVaXCJcclxuICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCJcclxuICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudVwiPlxyXG4gICAgICAgICAgPGxpPjxhIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvbkR1cGxpY2F0ZSgpXCIgKm5nSWY9XCIhaXNFZGl0TW9kZVwiPkR1cGxpY2F0ZTwvYT48L2xpPlxyXG4gICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gY3Vyc29yLXBvaW50ZXIgdGV4dC1kYW5nZXJcIiAoY2xpY2spPVwib25EZWxldGUoKVwiPiBEZWxldGUgPC9hPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIFZNIENyZWF0aW9uIFNlY3Rpb24gLS0+XHJcbiAgPGRpdiBjbGFzcz1cInJvdyBnYXAtNCBidWlsZGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29scyBjb2xcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8aDI+VmlzdWFsIE1lcmNoYW5kaXNlIERldGFpbHM8L2gyPlxyXG4gICAgICAgIDxwPkNyZWF0ZSBhbmQgZGVmaW5lIHlvdXIgVk0gaGVyZTwvcD5cclxuXHJcbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJhZGRVcGRhdGVWbUZvcm1cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInZtTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+TmFtZTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInZtTmFtZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgLz5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhZGRVcGRhdGVWbUZvcm0uZ2V0KCd2bU5hbWUnKT8udG91Y2hlZCAmJiBhZGRVcGRhdGVWbUZvcm0uZ2V0KCd2bU5hbWUnKT8uaW52YWxpZFwiPlxyXG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhZGRVcGRhdGVWbUZvcm0uZ2V0KCd2bU5hbWUnKT8uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5WTSBOYW1lIGlzIHJlcXVpcmVkLjwvc21hbGw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi00XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ2bVR5cGVcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPlR5cGU8L2xhYmVsPlxyXG4gICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxyXG4gICAgICAgICAgICAgIFtpZEZpZWxkXT1cIid2bVR5cGUnXCJcclxuICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIid2bVR5cGUnXCJcclxuICAgICAgICAgICAgICBbZGF0YV09XCJ2bVR5cGVzTGlzdFwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidm1UeXBlXCJcclxuICAgICAgICAgICAgICBbYWN0aW9uXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIGFjdGlvbkxhYmVsPVwiQ3JlYXRlIFR5cGVcIlxyXG4gICAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJvbkNsaWNrQ3JlYXRlVm1UeXBlKClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFkZFVwZGF0ZVZtRm9ybS5nZXQoJ3ZtVHlwZScpPy50b3VjaGVkICYmIGFkZFVwZGF0ZVZtRm9ybS5nZXQoJ3ZtVHlwZScpPy5pbnZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImFkZFVwZGF0ZVZtRm9ybS5nZXQoJ3ZtVHlwZScpPy5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlZNIFR5cGUgaXMgcmVxdWlyZWQuPC9zbWFsbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInVuaXRcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPlVuaXQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIiBbZGF0YV09XCJ1bml0c0xpc3RcIiBmb3JtQ29udHJvbE5hbWU9XCJ1bml0XCI+XHJcbiAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInZtV2lkdGhcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPldpZHRoPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8Y291bnRlci1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ2bVdpZHRoXCIgW3N0ZXBdPVwiMVwiIHBsYWNlaG9sZGVyPVwiMFwiPjwvY291bnRlci1pbnB1dD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ2bUhlaWdodFwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+SGVpZ2h0PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8Y291bnRlci1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ2bUhlaWdodFwiIFtzdGVwXT1cIjFcIiBwbGFjZWhvbGRlcj1cIjBcIj48L2NvdW50ZXItaW5wdXQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFkZFVwZGF0ZVZtRm9ybS5nZXQoJ3VuaXQnKT8udG91Y2hlZCAmJiBhZGRVcGRhdGVWbUZvcm0uZ2V0KCd1bml0Jyk/LmludmFsaWRcIj5cclxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhZGRVcGRhdGVWbUZvcm0uZ2V0KCd1bml0Jyk/LmVycm9ycz8uWydyZXF1aXJlZCddXCI+VW5pdCBpcyByZXF1aXJlZC48L3NtYWxsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIChhZGRVcGRhdGVWbUZvcm0uZ2V0KCd2bVdpZHRoJyk/LnRvdWNoZWQgJiYgYWRkVXBkYXRlVm1Gb3JtLmdldCgndm1XaWR0aCcpPy5pbnZhbGlkKSB8fFxyXG4gICAgICAgICAgICAgICAgICAoYWRkVXBkYXRlVm1Gb3JtLmdldCgndm1IZWlnaHQnKT8udG91Y2hlZCAmJiBhZGRVcGRhdGVWbUZvcm0uZ2V0KCd2bUhlaWdodCcpPy5pbnZhbGlkKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c21hbGxcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWRkVXBkYXRlVm1Gb3JtLmdldCgndm1XaWR0aCcpPy5lcnJvcnM/LlsnbWluJ10gfHwgYWRkVXBkYXRlVm1Gb3JtLmdldCgndm1IZWlnaHQnKT8uZXJyb3JzPy5bJ21pbiddXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgSGVpZ2h0ICYgV2lkdGggY2Fubm90IGJlIHplcm8uXHJcbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItNFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidm1CcmFuZFwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+QnJhbmQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInYnJhbmROYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidicmFuZE5hbWUnXCJcclxuICAgICAgICAgICAgICAgIFtkYXRhXT1cImJyYW5kc0xpc3RcIlxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidm1CcmFuZFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWRkVXBkYXRlVm1Gb3JtLmdldCgndm1CcmFuZCcpPy50b3VjaGVkICYmIGFkZFVwZGF0ZVZtRm9ybS5nZXQoJ3ZtQnJhbmQnKT8uaW52YWxpZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImFkZFVwZGF0ZVZtRm9ybS5nZXQoJ3ZtQnJhbmQnKT8uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5cclxuICAgICAgICAgICAgICAgICAgQnJhbmQgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidm1TdWJCcmFuZFwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+U3ViLUJyYW5kPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ3N1YkJyYW5kTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInc3ViQnJhbmROYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJzdWJCcmFuZHNMaXN0XCJcclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInZtU3ViQnJhbmRcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZ2FwLTMgbWItNFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidm1DYXRlZ29yeVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+Q2F0ZWdvcnk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIiBbZGF0YV09XCJjYXRlZ29yaWVzTGlzdFwiIGZvcm1Db250cm9sTmFtZT1cInZtQ2F0ZWdvcnlcIj5cclxuICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidm1TdWJDYXRlZ29yeVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+U3ViLUNhdGVnb3J5PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgW2RhdGFdPVwic3ViQ2F0ZWdvcmllc0xpc3RcIlxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidm1TdWJDYXRlZ29yeVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgZm9ybUNvbnRyb2xOYW1lPVwiaXNEb3VibGVTaWRlZFwiIC8+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJpc0RvdWJsZVNpZGVkXCI+RW5hYmxlIHRvIGhhdmUgYSBkb3VibGUgc2lkZWQgVk08L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mb3JtPlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRWbVR5cGVcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtNCB3LTEwMFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICA8aDM+SW1hZ2VzIFVwbG9hZDwvaDM+XHJcbiAgICAgICAgICAgIDxwPkRyYWcgYW5kIGRyb3AgdGhlIGltYWdlcyB0byB0aGUgcmlnaHQgdG8gdmlzdWFsaXplIHlvdXIgVk08L3A+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIChjbGljayk9XCJmaWxlVXBsb2FkLmNsaWNrKClcIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1pbmxpbmUtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzRWRpdE1vZGVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwibWUtMlwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDVWMTlNNSAxMkgxOVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgQWRkIEltYWdlXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkVm1UeXBlXCIgY2xhc3M9XCJyb3cgZ3gtMiBneS0yXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdGb3I9XCJsZXQgdm1JbWFnZSBvZiB2bUltYWdlc0xpc3Q7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwidm1JbWFnZVwiIGFsdD1cIkNhcm91c2VsIEltYWdlXCIgY2xhc3M9XCJjYXJvdXNlbC1pbWdcIiAoY2xpY2spPVwidXBkYXRlQWN0aXZlSW1hZ2UoaSlcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbHMgY29sLThcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtbiBnYXAtNVwiPlxyXG4gICAgICAgIEBpZih2bUltYWdlc0xpc3QubGVuZ3RoKXtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1hcm91bmQgdy0xMDAgYWxpZ24taXRlbXMtY2VudGVyIHB4LTUgbXQtNVwiPlxyXG4gICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzSW1hZ2UoKVwiXHJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjI0XCJcclxuICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTE1IDZMOSAxMkwxNSAxOFwiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcm91c2VsLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCB3LTEwMCBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJvdXNlbC1jb250YWluZXJcIiAqbmdJZj1cInZtSW1hZ2VzTGlzdC5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJ2bUltYWdlc0xpc3Rbc2VsZWN0ZWRWbUltYWdlSW5kZXhdXCIgYWx0PVwiQ2Fyb3VzZWwgSW1hZ2VcIiBjbGFzcz1cImNhcm91c2VsLWltZ1wiIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInlEaW1lbnNpb25BcnJvd3NcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ4RGltZW5zaW9uQXJyb3dzXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzdmdcclxuICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJuZXh0SW1hZ2UoKVwiXHJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjI0XCJcclxuICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTkgMThMMTUgMTJMOSA2XCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIEBpZihhZGRVcGRhdGVWbUZvcm0uZ2V0KCdpc0RvdWJsZVNpZGVkJyk/LnZhbHVlKXtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1hcm91bmQgdy0xMDAgYWxpZ24taXRlbXMtY2VudGVyIHB4LTUgbXQtNVwiPlxyXG4gICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzSW1hZ2UoKVwiXHJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjI0XCJcclxuICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTE1IDZMOSAxMkwxNSAxOFwiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcm91c2VsLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCB3LTEwMCBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJvdXNlbC1jb250YWluZXJcIiAqbmdJZj1cInZtSW1hZ2VzTGlzdC5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJ2bUltYWdlc0xpc3Rbc2VsZWN0ZWRWbUltYWdlSW5kZXhdXCIgYWx0PVwiQ2Fyb3VzZWwgSW1hZ2VcIiBjbGFzcz1cImNhcm91c2VsLWltZ1wiIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInlEaW1lbnNpb25BcnJvd3NcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ4RGltZW5zaW9uQXJyb3dzXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzdmdcclxuICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJuZXh0SW1hZ2UoKVwiXHJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjI0XCJcclxuICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTkgMThMMTUgMTJMOSA2XCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfSB9QGVsc2Uge1xyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2bVBsYWNlaG9sZGVyXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgQGlmKGFkZFVwZGF0ZVZtRm9ybS5nZXQoJ2lzRG91YmxlU2lkZWQnKT8udmFsdWUpe1xyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2bVBsYWNlaG9sZGVyXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgfSB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuXHJcbjxzZWN0aW9uIGlkPVwiYnVpbGQtdm0tc2tlbGV0b25cIiAqbmdJZj1cImlzUGFnZUxvYWRpbmdcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG5cclxuPG5nLXRlbXBsYXRlICN4RGltZW5zaW9uQXJyb3dzPlxyXG4gIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWRpbWVuc2lvblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImFycm93IGxlZnRcIj48L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJsaW5lXCI+XHJcbiAgICAgIDxzcGFuPnt7IGFkZFVwZGF0ZVZtRm9ybS5nZXQoXCJ2bVdpZHRoXCIpPy52YWx1ZSB9fSB7eyBhZGRVcGRhdGVWbUZvcm0uZ2V0KFwidW5pdFwiKT8udmFsdWUgPz8gXCJtbVwiIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXJyb3cgcmlnaHRcIj48L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjeURpbWVuc2lvbkFycm93cz5cclxuICA8ZGl2IGNsYXNzPVwidmVydGljYWwtZGltZW5zaW9uXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXJyb3cgdXBcIj48L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJsaW5lXCI+XHJcbiAgICAgIDxzcGFuPnt7IGFkZFVwZGF0ZVZtRm9ybS5nZXQoXCJ2bUhlaWdodFwiKT8udmFsdWUgfX0ge3sgYWRkVXBkYXRlVm1Gb3JtLmdldChcInVuaXRcIik/LnZhbHVlID8/IFwibW1cIiB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImFycm93IGRvd25cIj48L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdm1QbGFjZWhvbGRlcj5cclxuICA8ZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICA8c3ZnIHdpZHRoPVwiMzAyXCIgaGVpZ2h0PVwiMzAyXCIgdmlld0JveD1cIjAgMCAzMDIgMzAyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGQ9XCJNMi4wMzg3OSA1LjIwMTlMMzAwIDI5NS43NU0yOTkuOTM0IDUuMjAwMDdMMSAzMDAuMjg5TTUuMDc3OTggMzAxSDI5Ny4wMDFDMjk5LjIxIDMwMSAzMDEgMjk1LjYyNyAzMDEgMjg5VjEzQzMwMSA2LjM3MjU4IDI5OS4yMSAxIDI5Ny4wMDEgMUg1LjA3Nzk5QzIuODY5NDMgMSAxLjA3OTA0IDYuMzcyNTkgMS4wNzkwNCAxM1YyODlDMS4wNzkwNCAyOTUuNjI3IDIuODY5NDMgMzAxIDUuMDc3OTggMzAxWlwiXHJcbiAgICAgICAgICBzdHJva2U9XCJibGFja1wiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ5RGltZW5zaW9uQXJyb3dzXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ4RGltZW5zaW9uQXJyb3dzXCI+PC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXZtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2NyZWF0ZS12bS9jcmVhdGUtdm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvY3JlYXRlLXZtL2NyZWF0ZS12bS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUdyRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUduRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU8zRixNQUFNLE9BQU8saUJBQWlCO0lBaUNsQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF4Q1YsUUFBUSxDQUFTO0lBQ2pCLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFDOUIsT0FBTyxHQUFZLEtBQUssQ0FBQztJQUV6QixTQUFTLEdBQXFCLEVBQUUsQ0FBQTtJQUNoQyxlQUFlLENBQVk7SUFFM0IsV0FBVyxHQUFv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SSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUU7WUFDaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRixRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDO1lBQ3BELFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsNkJBQTZCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxzQ0FBc0MsQ0FBQztZQUN6SSxPQUFNO1NBQ1A7UUFBQSxDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDdkIsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ3RCLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDN0IsbUJBQW1CLEVBQUUsT0FBTztTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQTFYVSxpQkFBaUI7NEZBQWpCLGlCQUFpQixxREN0QjlCLCtqakJBOFhBOzs0RkR4V2EsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSwgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlyc3RWYWx1ZUZyb20sIG1hcCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEcm9wZG93bklGIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wbGFuby1nZW5lcmFsLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFkZFZtVHlwZUNvbXBvbmVudCB9IGZyb20gJy4vcG9wdXBzL2FkZC12bS10eXBlL2FkZC12bS10eXBlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHJlbW92ZUVtcHR5RmllbGRzIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL3BsYW5vLmZ1bmN0aW9uJztcclxuaW1wb3J0IHsgUGxhbm9EYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BsYW5vLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEJyYW5kRGV0YWlscywgVk1MaWJyYXJ5RGV0YWlscywgVk1UeXBlRGV0YWlscyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdm0tbGlicmFyeS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBDb21wbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3BvcHVwcy9jb21wbGV0ZS1jb25maXJtYXRpb24vY29tcGxldGUtY29uZmlybWF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3BvcHVwcy9kZWxldGUtY29uZmlybWF0aW9uL2RlbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2Fubm90UGVyZm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL3BvcHVwcy9jYW5ub3QtcGVyZm9ybS9jYW5ub3QtcGVyZm9ybS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItY3JlYXRlLXZtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLXZtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY3JlYXRlLXZtLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlVm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcbiAgaXNQYWdlTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB2bURldGFpbHM6IFZNTGlicmFyeURldGFpbHMgPSB7fVxyXG4gIGFkZFVwZGF0ZVZtRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICB2bVR5cGVzTGlzdDogVk1UeXBlRGV0YWlsc1tdID0gW11cclxuICBzZWxlY3RlZFZtVHlwZTogVk1UeXBlRGV0YWlscyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgdW5pdHNMaXN0ID0gW1xyXG4gICAgeyBsYWJlbDogJ21tJywgdmFsdWU6ICdtbScgfSxcclxuICAgIHsgbGFiZWw6ICdjbScsIHZhbHVlOiAnY20nIH0sXHJcbiAgICB7IGxhYmVsOiAnSW5jaGVzJywgdmFsdWU6ICdpbmNoJyB9LFxyXG4gICAgeyBsYWJlbDogJ0ZlZXQnLCB2YWx1ZTogJ2Z0JyB9LFxyXG4gIF1cclxuXHJcbiAgYnJhbmRzTGlzdDogQnJhbmREZXRhaWxzW10gPSBbXVxyXG4gIGNhdGVnb3JpZXNMaXN0OiBEcm9wZG93bklGW10gPSBbXVxyXG4gIHN1YkNhdGVnb3JpZXNMaXN0OiBEcm9wZG93bklGW10gPSBbXVxyXG5cclxuXHJcbiAgdm1JbWFnZXNMaXN0OiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlbGVjdGVkVm1JbWFnZUluZGV4ID0gMDtcclxuICB1cGxvYWRJbWFnZTogRmlsZTtcclxuICBpbWdDRE46IHN0cmluZztcclxuXHJcbiAgaXNFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwbGFub0RhdGFTZXJ2aWNlOiBQbGFub0RhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbmdiTW9kYWw6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRQYWdlRGF0YSgpO1xyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50LnN1YnNjcmliZSgoZW52KSA9PiB0aGlzLmltZ0NETiA9IGVudi5wbGFub2dyYW1DRE4pO1xyXG4gICAgdGhpcy5wbGFub0RhdGFTZXJ2aWNlLmJyYW5kc0xpc3Quc3Vic2NyaWJlKChlKSA9PiB0aGlzLmJyYW5kc0xpc3QgPSBlKTtcclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNcclxuXHJcbiAgICB0aGlzLnZtRGV0YWlscy5faWQgPSBwYXJhbXNbJ3ZtSWQnXSA/PyAnJztcclxuICAgIHRoaXMuaXNFZGl0TW9kZSA9IHBhcmFtc1snaXNFZGl0J10gPT0gJ3RydWUnO1xyXG5cclxuICAgIHRoaXMuZ2V0Q2xpZW50SWQoKTtcclxuICB9XHJcblxyXG4gIHNldFBhZ2VEYXRhKCkge1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZShcIkNyZWF0ZSBWaXN1YWwgTWVyY2hhbmRpc2VcIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldEJyZWFkY3J1bWJzKFtcclxuICAgICAgeyB0aXRsZTogXCJQbGFub2dyYW1cIiwgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtc1wiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiBcIlwiLCBwYXRoOiBcIlwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiTGlicmFyeVwiLCBwYXRoOiBcIi9tYW5hZ2UvcGxhbm9ncmFtL2xpYnJhcnkvZml4dHVyZXNcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogXCJcIiwgcGF0aDogXCJcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0Q2xpZW50SWQoKSB7XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoYXN5bmMgKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGE/LmNsaWVudDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2hlYWRlci1maWx0ZXJzJykgYXMgc3RyaW5nKTtcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gaGVhZGVyRGF0YT8uY2xpZW50O1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgIHRoaXMuZ2V0Vm1UeXBlcygpLFxyXG4gICAgICAgIHRoaXMucGxhbm9EYXRhU2VydmljZS5mZXRjaEJyYW5kc0xpc3QodGhpcy5jbGllbnRJZClcclxuICAgICAgXSk7XHJcblxyXG4gICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBtYXAocGFyYW1zID0+IHBhcmFtc1sndm1JZCddKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKGFzeW5jIGlkID0+IHtcclxuICAgICAgICAgIHRoaXMuZ2V0Vm1MaWJEZXRhaWxzKGlkKTtcclxuICAgICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vIEZldGNoaW5nIHZtRGV0YWlscyBhbmQgc3RvcHMgdGhlIGxvYWRpbmcuXHJcbiAgZ2V0Vm1MaWJEZXRhaWxzKHZtSWQ/OiBzdHJpbmcpIHtcclxuICAgIGlmICghdm1JZCkge1xyXG4gICAgICB0aGlzLnZtRGV0YWlscy52bU5hbWUgPSAnVW50aXRsZWQgVk0nXHJcbiAgICAgIHRoaXMuaW5pdEFkZFVwZGF0ZVZtRm9ybSgpO1xyXG4gICAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZ2V0Vm1MaWJyYXJ5RGV0YWlscyh2bUlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgZGV0YWlscyA9IHJlcy5kYXRhO1xyXG4gICAgICAgIGlmIChkZXRhaWxzKSB7XHJcblxyXG4gICAgICAgICAgdGhpcy52bURldGFpbHMgPSB7XHJcbiAgICAgICAgICAgIC4uLmRldGFpbHNcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmluaXRBZGRVcGRhdGVWbUZvcm0oKTtcclxuICAgICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnIpXHJcbiAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFZtVHlwZXMoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5nZXRWbVR5cGVzTGlzdCh0aGlzLmNsaWVudElkKSk7XHJcbiAgICAgIGlmIChyZXM/LmRhdGEpIHtcclxuICAgICAgICB0aGlzLnZtVHlwZXNMaXN0ID0gcmVzLmRhdGE7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBnZXRWbVR5cGVzIFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0QWRkVXBkYXRlVm1Gb3JtKCkge1xyXG4gICAgdGhpcy5hZGRVcGRhdGVWbUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgdm1OYW1lOiBbdGhpcy52bURldGFpbHM/LnZtTmFtZSB8fCAnVW50aXRsZWQgVk0nLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgdm1UeXBlOiBbdGhpcy52bURldGFpbHM/LnZtVHlwZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHVuaXQ6IFt0aGlzLnZtRGV0YWlscz8udm1XaWR0aD8udW5pdCB8fCAnbW0nLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgdm1XaWR0aDogW3RoaXMudm1EZXRhaWxzPy52bVdpZHRoPy52YWx1ZSA/PyAwLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW4oMSldXSxcclxuICAgICAgdm1IZWlnaHQ6IFt0aGlzLnZtRGV0YWlscz8udm1IZWlnaHQ/LnZhbHVlID8/IDAsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbigxKV1dLFxyXG4gICAgICB2bUJyYW5kOiBbdGhpcy52bURldGFpbHM/LnZtQnJhbmQsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICB2bUNhdGVnb3J5OiBbdGhpcy52bURldGFpbHM/LnZtQ2F0ZWdvcnkgfHwgJyddLFxyXG4gICAgICB2bVN1YkNhdGVnb3J5OiBbdGhpcy52bURldGFpbHM/LnZtU3ViQ2F0ZWdvcnkgfHwgJyddLFxyXG4gICAgICBpc0RvdWJsZVNpZGVkOiBbdGhpcy52bURldGFpbHM/LmlzRG91YmxlU2lkZWQgfHwgZmFsc2VdLFxyXG4gICAgfSlcclxuXHJcblxyXG4gICAgdGhpcy5hZGRVcGRhdGVWbUZvcm0uZ2V0KFwiY2F0ZWdvcnlcIik/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgdGhpcy5hZGRVcGRhdGVWbUZvcm0uZ2V0KFwic3ViQ2F0ZWdvcnlcIik/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cclxuICAgIHRoaXMub25DaGFuZ2VWbVR5cGUodGhpcy52bURldGFpbHM/LnZtVHlwZSk7XHJcblxyXG4gICAgdGhpcy5hZGRVcGRhdGVWbUZvcm0uZ2V0KFwidm1OYW1lXCIpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2KSA9PiB0aGlzLnZtRGV0YWlscy52bU5hbWUgPSB2KVxyXG4gICAgdGhpcy5hZGRVcGRhdGVWbUZvcm0uZ2V0KFwidm1UeXBlXCIpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2KSA9PiB0aGlzLm9uQ2hhbmdlVm1UeXBlKHYpKVxyXG5cclxuICAgIHRoaXMudG9nZ2xlQ2F0ZWdvcnlGaWVsZHModGhpcy52bURldGFpbHM/LnZtQnJhbmQpO1xyXG5cclxuICAgIHRoaXMuYWRkVXBkYXRlVm1Gb3JtLmdldCgndm1CcmFuZCcpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlQnJhbmQodmFsdWUpO1xyXG4gICAgfSlcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNFZGl0TW9kZSkgdGhpcy5hZGRVcGRhdGVWbUZvcm0uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSlcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlVm1UeXBlKHR5cGU/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRWbVR5cGUgPSB0aGlzLnZtVHlwZXNMaXN0LmZpbmQoZSA9PiBlLnZtVHlwZSA9PT0gdHlwZSk7XHJcbiAgICB0aGlzLnZtSW1hZ2VzTGlzdCA9IHRoaXMuc2VsZWN0ZWRWbVR5cGU/LmltYWdlVXJscz8ubWFwKHVybCA9PiB0aGlzLmltZ0NETiArIHVybCkgfHwgW107XHJcbiAgICB0aGlzLnNlbGVjdGVkVm1JbWFnZUluZGV4ID0gdGhpcy52bUltYWdlc0xpc3QuZmluZEluZGV4KGltZyA9PiBpbWcuaW5jbHVkZXModGhpcy52bURldGFpbHM/LnZtSW1hZ2VVcmwgfHwgJycpKTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkVm1JbWFnZUluZGV4IDwgMCkgdGhpcy5zZWxlY3RlZFZtSW1hZ2VJbmRleCA9IDA7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUJyYW5kKGJyYW5kPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmFkZFVwZGF0ZVZtRm9ybS5nZXQoXCJ2bUNhdGVnb3J5XCIpPy5yZXNldCgpO1xyXG4gICAgdGhpcy5hZGRVcGRhdGVWbUZvcm0uZ2V0KFwidm1TdWJDYXRlZ29yeVwiKT8ucmVzZXQoKTtcclxuXHJcbiAgICB0aGlzLmNhdGVnb3JpZXNMaXN0ID0gW107XHJcbiAgICB0aGlzLnN1YkNhdGVnb3JpZXNMaXN0ID0gW107XHJcblxyXG4gICAgdGhpcy50b2dnbGVDYXRlZ29yeUZpZWxkcyhicmFuZCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDYXRlZ29yeUZpZWxkcyhicmFuZD86IHN0cmluZykge1xyXG4gICAgaWYgKGJyYW5kKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQnJhbmQgPSB0aGlzLmJyYW5kc0xpc3Q/LmZpbmQoZSA9PiBlLmJyYW5kTmFtZSA9PT0gYnJhbmQpO1xyXG5cclxuICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdCA9IHNlbGVjdGVkQnJhbmQ/LmNhdGVnb3J5Py5tYXAoKGUpID0+IHsgcmV0dXJuIHsgbGFiZWw6IGUsIHZhbHVlOiBlIH0gfSkgPz8gW11cclxuICAgICAgdGhpcy5zdWJDYXRlZ29yaWVzTGlzdCA9IHNlbGVjdGVkQnJhbmQ/LnN1YkNhdGVnb3J5Py5tYXAoKGUpID0+IHsgcmV0dXJuIHsgbGFiZWw6IGUsIHZhbHVlOiBlIH0gfSkgPz8gW11cclxuXHJcbiAgICAgIHRoaXMuYWRkVXBkYXRlVm1Gb3JtLmdldChcInZtQ2F0ZWdvcnlcIik/LmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIHRoaXMuYWRkVXBkYXRlVm1Gb3JtLmdldChcInZtU3ViQ2F0ZWdvcnlcIik/LmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkR1cGxpY2F0ZSgpIHtcclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5kdXBsaWNhdGVWbUxpYnJhcnkoe1xyXG4gICAgICB2bUlkOiB0aGlzLnZtRGV0YWlscy5faWRcclxuICAgIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChyZXMuZGF0YS5tZXNzYWdlKTtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS9wbGFub2dyYW0vY3JlYXRlLWxpYnJhcnktdm0nXSwgeyBxdWVyeVBhcmFtczogeyB2bUlkOiByZXM/LmRhdGE/LmlkIH0gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5lcnJvciB8fCAnRmFpbGVkIHRvIGR1cGxpY2F0ZSBWTScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBkdXBsaWNhdGVGaXh0dXJlTGlicmFyeSBlcnI6XCIsIGVycilcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbmZpcm1EZWxldGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCwgeyBjZW50ZXJlZDogdHJ1ZSB9KTtcclxuICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gJ0RlbGV0ZSBWTSc7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdm0gPyc7XHJcblxyXG4gICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPGJvb2xlYW4+KChyZXN1bHQpID0+IHJlc3VsdCA9PT0gJ29rJylcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uRGVsZXRlKCkge1xyXG4gICAgaWYgKHRoaXMudm1EZXRhaWxzLnRlbXBsYXRlQ291bnQpIHtcclxuICAgICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oQ2Fubm90UGVyZm9ybUNvbXBvbmVudCwgeyBjZW50ZXJlZDogdHJ1ZSB9KTtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSBgQ2Fu4oCZdCBkZWxldGUgVk0hYDtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPSBgU2luY2UgdGhpcyBWTSBpcyBsaXZlIGluIFwiJHt0aGlzLnZtRGV0YWlscy50ZW1wbGF0ZUNvdW50fSB0ZW1wbGF0ZXMsXCIgZGVsZXRpbmcgaXMgbm90IGFsbG93ZWQuYDtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghYXdhaXQgdGhpcy5jb25maXJtRGVsZXRpb24oKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5kZWxldGVWbUxpYnJhcnkoeyB2bUlkOiB0aGlzLnZtRGV0YWlscy5faWQgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KHJlcy5tZXNzYWdlKTtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS9wbGFub2dyYW0vbGlicmFyeS92bXMnXSlcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/LmVycm9yIHx8ICdGYWlsZWQgdG8gZGVsZXRlIFZNJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJAQCB+IGRlbGV0ZVZtTGlicmFyeSBbZXJyXTpcIiwgZXJyKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25DbGlja0NyZWF0ZVZtVHlwZSgpIHtcclxuICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKEFkZFZtVHlwZUNvbXBvbmVudCwgeyBjZW50ZXJlZDogdHJ1ZSB9KTtcclxuXHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS52bVR5cGVzTGlzdCA9IHRoaXMudm1UeXBlc0xpc3Q7XHJcbiAgICBtb2RlbFJlZi5yZXN1bHQudGhlbihhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmdldFZtVHlwZXMoKTtcclxuXHJcbiAgICAgICAgLy8gVE9ETzogUGF0Y2hpbmcgdGhlIG5ld2x5IGFkZGVkIHR5cGUgdG8gdGhlIGZvcm0gYnkgZGVmYXVsdCwgY2FuIGJlIHJlbW92ZWQgaWYgbm90IHJlcXVpcmVkLlxyXG4gICAgICAgIGNvbnN0IG5ld2x5QWRkZWRUeXBlID0gdGhpcy52bVR5cGVzTGlzdFt0aGlzLnZtVHlwZXNMaXN0Lmxlbmd0aCAtIDFdLnZtVHlwZVxyXG4gICAgICAgIHRoaXMuYWRkVXBkYXRlVm1Gb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgdm1UeXBlOiBuZXdseUFkZGVkVHlwZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VWbVR5cGUobmV3bHlBZGRlZFR5cGUpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcmV2aW91c0ltYWdlKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpIHJldHVybjtcclxuICAgIHRoaXMuc2VsZWN0ZWRWbUltYWdlSW5kZXggPSAodGhpcy5zZWxlY3RlZFZtSW1hZ2VJbmRleCAtIDEgKyB0aGlzLnZtSW1hZ2VzTGlzdC5sZW5ndGgpICUgdGhpcy52bUltYWdlc0xpc3QubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgbmV4dEltYWdlKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpIHJldHVybjtcclxuICAgIHRoaXMuc2VsZWN0ZWRWbUltYWdlSW5kZXggPSAodGhpcy5zZWxlY3RlZFZtSW1hZ2VJbmRleCArIDEpICUgdGhpcy52bUltYWdlc0xpc3QubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgYWRkSW1hZ2UoZXZlbnQ6IGFueSkge1xyXG5cclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBpZiAoIWlucHV0LmZpbGVzIHx8IGlucHV0LmZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlc1swXTtcclxuICAgIGlmICghZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIk9ubHkgaW1hZ2UgZmlsZXMgYXJlIGFsbG93ZWRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1cGxvYWRGaWxlID0gZXZlbnQ/LnRhcmdldD8uZmlsZXNbMF07XHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgdXBsb2FkRmlsZSk7XHJcblxyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLnVwbG9hZFZtVHlwZUltYWdlKGZvcm1EYXRhLCB0aGlzLnNlbGVjdGVkVm1UeXBlPy5faWQhKS5zdWJzY3JpYmUoe1xyXG5cclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KFwiSW1hZ2UgVXBsb2FkZWRcIik7XHJcbiAgICAgICAgICB0aGlzLnZtSW1hZ2VzTGlzdC5wdXNoKHRoaXMuaW1nQ0ROICsgcmVzPy5kYXRhPy51cmwpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiB1cGxvYWRWbVR5cGVJbWFnZSBbZXJyXTpcIiwgZXJyKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIGFzeW5jIGNvbmZpcm1Db21wbGV0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oQ29tcGxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHsgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aXRsZSA9ICdDb21wbGV0ZSBWTSc7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9ICdUaGlzIGFjdGlvbiB3aWxsIG1hcmsgYXMgY29tcGxldGVkIGFuZCByZWFkeSB0byBhc3NpZ24gaXQgdG8gdGhlIHN0b3JlJztcclxuICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLm5vdGUgPSAnWW91IGNhblxcJ3QgZWRpdCBpdCBvbmNlIGFzc2lnbmVkIHRvIHRoZSBzdG9yZS4nO1xyXG5cclxuICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09ICdvaycpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25TdWJtaXQoc3RhdHVzOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmFkZFVwZGF0ZVZtRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuYWRkVXBkYXRlVm1Gb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFwiRm9ybSBpcyBpbnZhbGlkXCIpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hZGRVcGRhdGVWbUZvcm0udmFsaWQpIHtcclxuICAgICAgaWYgKHN0YXR1cyA9PT0gJ2NvbXBsZXRlJykgaWYgKCFhd2FpdCB0aGlzLmNvbmZpcm1Db21wbGV0aW9uKCkpIHJldHVybjtcclxuICAgICAgY29uc3QgaW1hZ2VQYXRoID0gdGhpcy52bUltYWdlc0xpc3RbdGhpcy5zZWxlY3RlZFZtSW1hZ2VJbmRleF0/LnNwbGl0KCdjbG91ZGZyb250Lm5ldC8nKVsxXTtcclxuXHJcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHtcclxuICAgICAgICAuLi50aGlzLmFkZFVwZGF0ZVZtRm9ybS52YWx1ZSxcclxuICAgICAgICBcIl9pZFwiOiB0aGlzLnZtRGV0YWlscz8uX2lkLFxyXG4gICAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5jbGllbnRJZCxcclxuICAgICAgICBcInZtSGVpZ2h0XCI6IHtcclxuICAgICAgICAgIFwidmFsdWVcIjogdGhpcy5hZGRVcGRhdGVWbUZvcm0/LnZhbHVlPy52bVdpZHRoLFxyXG4gICAgICAgICAgXCJ1bml0XCI6IHRoaXMuYWRkVXBkYXRlVm1Gb3JtPy52YWx1ZT8udW5pdFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgXCJ2bVdpZHRoXCI6IHtcclxuICAgICAgICAgIFwidmFsdWVcIjogdGhpcy5hZGRVcGRhdGVWbUZvcm0/LnZhbHVlPy52bUhlaWdodCxcclxuICAgICAgICAgIFwidW5pdFwiOiB0aGlzLmFkZFVwZGF0ZVZtRm9ybT8udmFsdWU/LnVuaXRcclxuICAgICAgICB9LFxyXG4gICAgICAgIFwidm1JbWFnZVVybFwiOiBpbWFnZVBhdGgsXHJcbiAgICAgICAgXCJzdGF0dXNcIjogc3RhdHVzXHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRyYW5zZm9ybWVkRGF0YS51bml0O1xyXG5cclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlbW92ZUVtcHR5RmllbGRzKHRyYW5zZm9ybWVkRGF0YSk7XHJcblxyXG4gICAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuYWRkVXBkYXRlVm1MaWJyYXJ5KHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgICB0aGlzLnZtRGV0YWlscy5zdGF0dXMgPSBzdGF0dXNcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QocmVzLmRhdGEubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS9wbGFub2dyYW0vbGlicmFyeS92bXMnXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyPy5lcnJvcj8uZXJyb3IgPz8gXCJGYWlsZWQgdG8gc2F2ZSBWTSBkZXRhaWxzXCIpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJAQCB+IGFkZFVwZGF0ZVZtTGlicmFyeSBbZXJyXTpcIiwgZXJyKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUFjdGl2ZUltYWdlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICghdGhpcy5pc0VkaXRNb2RlKSByZXR1cm47XHJcbiAgICB0aGlzLnNlbGVjdGVkVm1JbWFnZUluZGV4ID0gaW5kZXhcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tFZGl0KCkge1xyXG4gICAgaWYgKHRoaXMudm1EZXRhaWxzLnRlbXBsYXRlQ291bnQpIHtcclxuICAgICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oQ2Fubm90UGVyZm9ybUNvbXBvbmVudCwgeyBjZW50ZXJlZDogdHJ1ZSB9KTtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSBgQ2Fu4oCZdCBlZGl0IFZNIWA7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLmRlc2NyaXB0aW9uID0gYFNpbmNlIHRoaXMgVk0gaXMgbGl2ZSBpbiBcIiR7dGhpcy52bURldGFpbHMudGVtcGxhdGVDb3VudH0gdGVtcGxhdGVzLFwiIGVkaXRpbmcgaXMgbm90IGFsbG93ZWQuYDtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9O1xyXG4gICAgdGhpcy5pc0VkaXRNb2RlID0gdHJ1ZTtcclxuICAgIHRoaXMuYWRkVXBkYXRlVm1Gb3JtLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSlcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XHJcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IGlzRWRpdDogdHJ1ZSB9LFxyXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufSIsIjxpbnB1dCBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiB0eXBlPVwiZmlsZVwiICNmaWxlVXBsb2FkIGlkPVwidm1VcGxvYWRcIiBhY2NlcHQ9XCJpbWFnZS8qXCIgKGNoYW5nZSk9XCJhZGRJbWFnZSgkZXZlbnQpXCIgLz5cclxuXHJcbjxzZWN0aW9uIGlkPVwiYnVpbGQtdm1cIiAqbmdJZj1cIiFpc1BhZ2VMb2FkaW5nXCI+XHJcbiAgPCEtLSBIZWFkZXIgc2VjdGlvbiAtLT5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnRzLWNlbnRlciBnYXAtNVwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBwLTNcIiByb3V0ZXJMaW5rPVwiL21hbmFnZS9wbGFub2dyYW0vbGlicmFyeS92bXNcIj5cclxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMTUuODMzNCA5Ljk5OTg0SDQuMTY2NzVNNC4xNjY3NSA5Ljk5OTg0TDEwLjAwMDEgMTUuODMzMk00LjE2Njc1IDkuOTk5ODRMMTAuMDAwMSA0LjE2NjVcIlxyXG4gICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCJcclxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGgyIGNsYXNzPVwibS0wXCI+e3sgdm1EZXRhaWxzLnZtTmFtZSB9fTwvaDI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJiYWRnZSBkcmFmdFwiPnt7IHZtRGV0YWlscy5zdGF0dXMgfCB0aXRsZWNhc2UgfX08L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50cy1jZW50ZXIgZ2FwLTVcIj5cclxuICAgICAgPHAgY2xhc3M9XCJtLTBcIiAqbmdJZj1cInZtRGV0YWlscy5faWRcIj5MYXN0IHVwZGF0ZToge3sgdm1EZXRhaWxzLnVwZGF0ZWRBdCB8IHRpbWVBZ28gfX08L3A+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWlzRWRpdE1vZGVcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCIgKGNsaWNrKT1cIm9uQ2xpY2tFZGl0KClcIj5cclxuICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzEzMjJfNTMyNSlcIj5cclxuICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgZD1cIk0xNC4xNjY3IDIuNDk5OTNDMTQuMzg1NiAyLjI4MTA2IDE0LjY0NTUgMi4xMDc0NCAxNC45MzE0IDEuOTg4OTlDMTUuMjE3NCAxLjg3MDU0IDE1LjUyMzkgMS44MDk1NyAxNS44MzM0IDEuODA5NTdDMTYuMTQyOSAxLjgwOTU3IDE2LjQ0OTQgMS44NzA1NCAxNi43MzU0IDEuOTg4OTlDMTcuMDIxNCAyLjEwNzQ0IDE3LjI4MTIgMi4yODEwNiAxNy41MDAxIDIuNDk5OTNDMTcuNzE5IDIuNzE4OCAxNy44OTI2IDIuOTc4NjMgMTguMDExIDMuMjY0NkMxOC4xMjk1IDMuNTUwNTcgMTguMTkwNCAzLjg1NzA2IDE4LjE5MDQgNC4xNjY1OUMxOC4xOTA0IDQuNDc2MTIgMTguMTI5NSA0Ljc4MjYyIDE4LjAxMSA1LjA2ODU5QzE3Ljg5MjYgNS4zNTQ1NSAxNy43MTkgNS42MTQzOSAxNy41MDAxIDUuODMzMjZMNi4yNTAwOCAxNy4wODMzTDEuNjY2NzUgMTguMzMzM0wyLjkxNjc1IDEzLjc0OTlMMTQuMTY2NyAyLjQ5OTkzWlwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xMzIyXzUzMjVcIj5cclxuICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICBFZGl0XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiAqbmdJZj1cImlzRWRpdE1vZGVcIiBjbGFzcz1cImQtZmxleCBnYXAtNSBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm9uU3VibWl0KCdkcmFmdCcpXCI+U2F2ZSBhcyBkcmFmdDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cIm9uU3VibWl0KCdjb21wbGV0ZScpXCI+Q29tcGxldGU8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIiAqbmdJZj1cInRoaXMudm1EZXRhaWxzPy5faWRcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHAtM1wiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTExIDEyQzExIDEyLjU1MjMgMTEuNDQ3NyAxMyAxMiAxM0MxMi41NTIzIDEzIDEzIDEyLjU1MjMgMTMgMTJDMTMgMTEuNDQ3NyAxMi41NTIzIDExIDEyIDExQzExLjQ0NzcgMTEgMTEgMTEuNDQ3NyAxMSAxMlpcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTExIDE5QzExIDE5LjU1MjMgMTEuNDQ3NyAyMCAxMiAyMEMxMi41NTIzIDIwIDEzIDE5LjU1MjMgMTMgMTlDMTMgMTguNDQ3NyAxMi41NTIzIDE4IDEyIDE4QzExLjQ0NzcgMTggMTEgMTguNDQ3NyAxMSAxOVpcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTExIDVDMTEgNS41NTIyOCAxMS40NDc3IDYgMTIgNkMxMi41NTIzIDYgMTMgNS41NTIyOCAxMyA1QzEzIDQuNDQ3NzIgMTIuNTUyMyA0IDEyIDRDMTEuNDQ3NyA0IDExIDQuNDQ3NzIgMTEgNVpcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XHJcbiAgICAgICAgICA8bGk+PGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uRHVwbGljYXRlKClcIiAqbmdJZj1cIiFpc0VkaXRNb2RlXCI+RHVwbGljYXRlPC9hPjwvbGk+XHJcbiAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlciB0ZXh0LWRhbmdlclwiIChjbGljayk9XCJvbkRlbGV0ZSgpXCI+IERlbGV0ZSA8L2E+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gVk0gQ3JlYXRpb24gU2VjdGlvbiAtLT5cclxuICA8ZGl2IGNsYXNzPVwicm93IGdhcC00IGJ1aWxkZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xzIGNvbFwiPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxoMj5WaXN1YWwgTWVyY2hhbmRpc2UgRGV0YWlsczwvaDI+XHJcbiAgICAgICAgPHA+Q3JlYXRlIGFuZCBkZWZpbmUgeW91ciBWTSBoZXJlPC9wPlxyXG5cclxuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImFkZFVwZGF0ZVZtRm9ybVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItNFwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwidm1OYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5OYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwidm1OYW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAvPlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFkZFVwZGF0ZVZtRm9ybS5nZXQoJ3ZtTmFtZScpPy50b3VjaGVkICYmIGFkZFVwZGF0ZVZtRm9ybS5nZXQoJ3ZtTmFtZScpPy5pbnZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImFkZFVwZGF0ZVZtRm9ybS5nZXQoJ3ZtTmFtZScpPy5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlZNIE5hbWUgaXMgcmVxdWlyZWQuPC9zbWFsbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInZtVHlwZVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+VHlwZTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0XHJcbiAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ3ZtVHlwZSdcIlxyXG4gICAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ3ZtVHlwZSdcIlxyXG4gICAgICAgICAgICAgIFtkYXRhXT1cInZtVHlwZXNMaXN0XCJcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ2bVR5cGVcIlxyXG4gICAgICAgICAgICAgIFthY3Rpb25dPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgYWN0aW9uTGFiZWw9XCJDcmVhdGUgVHlwZVwiXHJcbiAgICAgICAgICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uQ2xpY2tDcmVhdGVWbVR5cGUoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWRkVXBkYXRlVm1Gb3JtLmdldCgndm1UeXBlJyk/LnRvdWNoZWQgJiYgYWRkVXBkYXRlVm1Gb3JtLmdldCgndm1UeXBlJyk/LmludmFsaWRcIj5cclxuICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYWRkVXBkYXRlVm1Gb3JtLmdldCgndm1UeXBlJyk/LmVycm9ycz8uWydyZXF1aXJlZCddXCI+Vk0gVHlwZSBpcyByZXF1aXJlZC48L3NtYWxsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItNFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidW5pdFwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+VW5pdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiIFtkYXRhXT1cInVuaXRzTGlzdFwiIGZvcm1Db250cm9sTmFtZT1cInVuaXRcIj5cclxuICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidm1XaWR0aFwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+V2lkdGg8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxjb3VudGVyLWlucHV0IGZvcm1Db250cm9sTmFtZT1cInZtV2lkdGhcIiBbc3RlcF09XCIxXCIgcGxhY2Vob2xkZXI9XCIwXCI+PC9jb3VudGVyLWlucHV0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInZtSGVpZ2h0XCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5IZWlnaHQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxjb3VudGVyLWlucHV0IGZvcm1Db250cm9sTmFtZT1cInZtSGVpZ2h0XCIgW3N0ZXBdPVwiMVwiIHBsYWNlaG9sZGVyPVwiMFwiPjwvY291bnRlci1pbnB1dD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWRkVXBkYXRlVm1Gb3JtLmdldCgndW5pdCcpPy50b3VjaGVkICYmIGFkZFVwZGF0ZVZtRm9ybS5nZXQoJ3VuaXQnKT8uaW52YWxpZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImFkZFVwZGF0ZVZtRm9ybS5nZXQoJ3VuaXQnKT8uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIj5Vbml0IGlzIHJlcXVpcmVkLjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgKGFkZFVwZGF0ZVZtRm9ybS5nZXQoJ3ZtV2lkdGgnKT8udG91Y2hlZCAmJiBhZGRVcGRhdGVWbUZvcm0uZ2V0KCd2bVdpZHRoJyk/LmludmFsaWQpIHx8XHJcbiAgICAgICAgICAgICAgICAgIChhZGRVcGRhdGVWbUZvcm0uZ2V0KCd2bUhlaWdodCcpPy50b3VjaGVkICYmIGFkZFVwZGF0ZVZtRm9ybS5nZXQoJ3ZtSGVpZ2h0Jyk/LmludmFsaWQpXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzbWFsbFxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhZGRVcGRhdGVWbUZvcm0uZ2V0KCd2bVdpZHRoJyk/LmVycm9ycz8uWydtaW4nXSB8fCBhZGRVcGRhdGVWbUZvcm0uZ2V0KCd2bUhlaWdodCcpPy5lcnJvcnM/LlsnbWluJ11cIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICBIZWlnaHQgJiBXaWR0aCBjYW5ub3QgYmUgemVyby5cclxuICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi00XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ2bUJyYW5kXCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5CcmFuZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidicmFuZE5hbWUnXCJcclxuICAgICAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ2JyYW5kTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgW2RhdGFdPVwiYnJhbmRzTGlzdFwiXHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ2bUJyYW5kXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhZGRVcGRhdGVWbUZvcm0uZ2V0KCd2bUJyYW5kJyk/LnRvdWNoZWQgJiYgYWRkVXBkYXRlVm1Gb3JtLmdldCgndm1CcmFuZCcpPy5pbnZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYWRkVXBkYXRlVm1Gb3JtLmdldCgndm1CcmFuZCcpPy5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlxyXG4gICAgICAgICAgICAgICAgICBCcmFuZCBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wgZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ2bVN1YkJyYW5kXCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5TdWItQnJhbmQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInc3ViQnJhbmROYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidzdWJCcmFuZE5hbWUnXCJcclxuICAgICAgICAgICAgICAgIFtkYXRhXT1cInN1YkJyYW5kc0xpc3RcIlxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidm1TdWJCcmFuZFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnYXAtMyBtYi00XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ2bUNhdGVnb3J5XCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5DYXRlZ29yeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiIFtkYXRhXT1cImNhdGVnb3JpZXNMaXN0XCIgZm9ybUNvbnRyb2xOYW1lPVwidm1DYXRlZ29yeVwiPlxyXG4gICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ2bVN1YkNhdGVnb3J5XCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5TdWItQ2F0ZWdvcnk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiXHJcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJzdWJDYXRlZ29yaWVzTGlzdFwiXHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ2bVN1YkNhdGVnb3J5XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBmb3JtQ29udHJvbE5hbWU9XCJpc0RvdWJsZVNpZGVkXCIgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlzRG91YmxlU2lkZWRcIj5FbmFibGUgdG8gaGF2ZSBhIGRvdWJsZSBzaWRlZCBWTTwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFZtVHlwZVwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC00IHctMTAwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgIDxoMz5JbWFnZXMgVXBsb2FkPC9oMz5cclxuICAgICAgICAgICAgPHA+RHJhZyBhbmQgZHJvcCB0aGUgaW1hZ2VzIHRvIHRoZSByaWdodCB0byB2aXN1YWxpemUgeW91ciBWTTwvcD5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKGNsaWNrKT1cImZpbGVVcGxvYWQuY2xpY2soKVwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNFZGl0TW9kZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtZS0yXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgNVYxOU01IDEySDE5XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICBBZGQgSW1hZ2VcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRWbVR5cGVcIiBjbGFzcz1cInJvdyBneC0yIGd5LTJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0Zvcj1cImxldCB2bUltYWdlIG9mIHZtSW1hZ2VzTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCJ2bUltYWdlXCIgYWx0PVwiQ2Fyb3VzZWwgSW1hZ2VcIiBjbGFzcz1cImNhcm91c2VsLWltZ1wiIChjbGljayk9XCJ1cGRhdGVBY3RpdmVJbWFnZShpKVwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29scyBjb2wtOFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uIGdhcC01XCI+XHJcbiAgICAgICAgQGlmKHZtSW1hZ2VzTGlzdC5sZW5ndGgpe1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWFyb3VuZCB3LTEwMCBhbGlnbi1pdGVtcy1jZW50ZXIgcHgtNSBtdC01XCI+XHJcbiAgICAgICAgICA8c3ZnXHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwicHJldmlvdXNJbWFnZSgpXCJcclxuICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxyXG4gICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXHJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUgNkw5IDEyTDE1IDE4XCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Fyb3VzZWwtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHctMTAwIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcm91c2VsLWNvbnRhaW5lclwiICpuZ0lmPVwidm1JbWFnZXNMaXN0Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInZtSW1hZ2VzTGlzdFtzZWxlY3RlZFZtSW1hZ2VJbmRleF1cIiBhbHQ9XCJDYXJvdXNlbCBJbWFnZVwiIGNsYXNzPVwiY2Fyb3VzZWwtaW1nXCIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwieURpbWVuc2lvbkFycm93c1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInhEaW1lbnNpb25BcnJvd3NcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRJbWFnZSgpXCJcclxuICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxyXG4gICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXHJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAxOEwxNSAxMkw5IDZcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgQGlmKGFkZFVwZGF0ZVZtRm9ybS5nZXQoJ2lzRG91YmxlU2lkZWQnKT8udmFsdWUpe1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWFyb3VuZCB3LTEwMCBhbGlnbi1pdGVtcy1jZW50ZXIgcHgtNSBtdC01XCI+XHJcbiAgICAgICAgICA8c3ZnXHJcbiAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwicHJldmlvdXNJbWFnZSgpXCJcclxuICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxyXG4gICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXHJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUgNkw5IDEyTDE1IDE4XCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Fyb3VzZWwtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHctMTAwIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcm91c2VsLWNvbnRhaW5lclwiICpuZ0lmPVwidm1JbWFnZXNMaXN0Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInZtSW1hZ2VzTGlzdFtzZWxlY3RlZFZtSW1hZ2VJbmRleF1cIiBhbHQ9XCJDYXJvdXNlbCBJbWFnZVwiIGNsYXNzPVwiY2Fyb3VzZWwtaW1nXCIgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwieURpbWVuc2lvbkFycm93c1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInhEaW1lbnNpb25BcnJvd3NcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRJbWFnZSgpXCJcclxuICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxyXG4gICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXHJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAxOEwxNSAxMkw5IDZcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9IH1AZWxzZSB7XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZtUGxhY2Vob2xkZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICBAaWYoYWRkVXBkYXRlVm1Gb3JtLmdldCgnaXNEb3VibGVTaWRlZCcpPy52YWx1ZSl7XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZtUGxhY2Vob2xkZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICB9IH1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG5cclxuPHNlY3Rpb24gaWQ9XCJidWlsZC12bS1za2VsZXRvblwiICpuZ0lmPVwiaXNQYWdlTG9hZGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcblxyXG48bmctdGVtcGxhdGUgI3hEaW1lbnNpb25BcnJvd3M+XHJcbiAgPGRpdiBjbGFzcz1cImhvcml6b250YWwtZGltZW5zaW9uXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXJyb3cgbGVmdFwiPjwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImxpbmVcIj5cclxuICAgICAgPHNwYW4+e3sgYWRkVXBkYXRlVm1Gb3JtLmdldChcInZtV2lkdGhcIik/LnZhbHVlIH19IHt7IGFkZFVwZGF0ZVZtRm9ybS5nZXQoXCJ1bml0XCIpPy52YWx1ZSA/PyBcIm1tXCIgfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJhcnJvdyByaWdodFwiPjwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN5RGltZW5zaW9uQXJyb3dzPlxyXG4gIDxkaXYgY2xhc3M9XCJ2ZXJ0aWNhbC1kaW1lbnNpb25cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJhcnJvdyB1cFwiPjwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImxpbmVcIj5cclxuICAgICAgPHNwYW4+e3sgYWRkVXBkYXRlVm1Gb3JtLmdldChcInZtSGVpZ2h0XCIpPy52YWx1ZSB9fSB7eyBhZGRVcGRhdGVWbUZvcm0uZ2V0KFwidW5pdFwiKT8udmFsdWUgPz8gXCJtbVwiIH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXJyb3cgZG93blwiPjwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN2bVBsYWNlaG9sZGVyPlxyXG4gIDxkaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgIDxzdmcgd2lkdGg9XCIzMDJcIiBoZWlnaHQ9XCIzMDJcIiB2aWV3Qm94PVwiMCAwIDMwMiAzMDJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgZD1cIk0yLjAzODc5IDUuMjAxOUwzMDAgMjk1Ljc1TTI5OS45MzQgNS4yMDAwN0wxIDMwMC4yODlNNS4wNzc5OCAzMDFIMjk3LjAwMUMyOTkuMjEgMzAxIDMwMSAyOTUuNjI3IDMwMSAyODlWMTNDMzAxIDYuMzcyNTggMjk5LjIxIDEgMjk3LjAwMSAxSDUuMDc3OTlDMi44Njk0MyAxIDEuMDc5MDQgNi4zNzI1OSAxLjA3OTA0IDEzVjI4OUMxLjA3OTA0IDI5NS42MjcgMi44Njk0MyAzMDEgNS4wNzc5OCAzMDFaXCJcclxuICAgICAgICAgIHN0cm9rZT1cImJsYWNrXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInlEaW1lbnNpb25BcnJvd3NcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInhEaW1lbnNpb25BcnJvd3NcIj48L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19