tango-app-ui-store-builder 1.0.47 → 1.0.49

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 (54) hide show
  1. package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +39 -19
  2. package/esm2022/lib/components/create-fixture/create-fixture.component.mjs +233 -138
  3. package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +4 -2
  4. package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +4 -2
  5. package/esm2022/lib/components/fixture-template/template-basic-details/template-basic-details.component.mjs +40 -4
  6. package/esm2022/lib/components/fixture-template/template-products/template-products.component.mjs +3 -3
  7. package/esm2022/lib/components/fixture-template/template-summary/template-summary.component.mjs +3 -3
  8. package/esm2022/lib/components/fixture-template/template-vms/template-vms.component.mjs +108 -79
  9. package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +7 -3
  10. package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +4 -2
  11. package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +27 -4
  12. package/esm2022/lib/components/manage-store-plano/template-products/template-products.component.mjs +3 -3
  13. package/esm2022/lib/components/manage-store-plano/template-vms/template-vms.component.mjs +10 -14
  14. package/esm2022/lib/components/manage-store-plano/verification-feedback/editable-fixture/editable-fixture.component.mjs +3 -3
  15. package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +3 -3
  16. package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +4 -2
  17. package/esm2022/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.mjs +11 -5
  18. package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +14 -9
  19. package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.mjs +39 -7
  20. package/esm2022/lib/components/planogram/merch-compliance/zone-products/zone-products.component.mjs +18 -5
  21. package/esm2022/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.mjs +68 -0
  22. package/esm2022/lib/components/planogram/plano-analytics/date-range-picker/date-range-picker.component.mjs +5 -5
  23. package/esm2022/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.mjs +649 -0
  24. package/esm2022/lib/components/planogram/plano-analytics/plano-analytics.component.mjs +1197 -25
  25. package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +14 -7
  26. package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +8 -4
  27. package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +17 -9
  28. package/esm2022/lib/components/planogram/plano-table/plano-table.component.mjs +3 -3
  29. package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -2
  30. package/esm2022/lib/components/store-plano/store-plano.component.mjs +4 -2
  31. package/esm2022/lib/interfaces/fixture-library.interface.mjs +1 -1
  32. package/esm2022/lib/services/store-builder.service.mjs +4 -1
  33. package/esm2022/lib/tango-store-builder.module.mjs +8 -2
  34. package/fesm2022/tango-app-ui-store-builder.mjs +2996 -834
  35. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  36. package/lib/components/create-fixture/create-fixture.component.d.ts +15 -14
  37. package/lib/components/fixture-template/template-basic-details/template-basic-details.component.d.ts +2 -0
  38. package/lib/components/fixture-template/template-vms/template-vms.component.d.ts +12 -12
  39. package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +2 -2
  40. package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +4 -4
  41. package/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.d.ts +2 -0
  42. package/lib/components/manage-store-plano/template-vms/template-vms.component.d.ts +0 -1
  43. package/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.d.ts +4 -2
  44. package/lib/components/planogram/merch-compliance/product-locator/product-locator.component.d.ts +3 -2
  45. package/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.d.ts +10 -3
  46. package/lib/components/planogram/merch-compliance/zone-products/zone-products.component.d.ts +4 -2
  47. package/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.d.ts +25 -0
  48. package/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.d.ts +94 -0
  49. package/lib/components/planogram/plano-analytics/plano-analytics.component.d.ts +76 -3
  50. package/lib/components/planogram/plano-details-parent/plano-details-parent.component.d.ts +3 -2
  51. package/lib/interfaces/fixture-library.interface.d.ts +1 -1
  52. package/lib/services/store-builder.service.d.ts +1 -0
  53. package/lib/tango-store-builder.module.d.ts +26 -24
  54. package/package.json +1 -1
@@ -25,6 +25,7 @@ export class InstanceBasicDetailsComponent {
25
25
  shelfTypes = [
26
26
  { label: "Shelf", value: "shelf" },
27
27
  { label: "Tray", value: "tray" },
28
+ { label: "VM Only", value: "vmonly" },
28
29
  ];
29
30
  constructor(fb, toast, storeBuilderService) {
30
31
  this.fb = fb;
@@ -78,14 +79,25 @@ export class InstanceBasicDetailsComponent {
78
79
  addShelf(shelf) {
79
80
  const shelfGroup = this.fb.group({
80
81
  shelfType: [shelf?.shelfType ?? "shelf"],
81
- productPerShelf: [shelf?.productPerShelf ?? 1, [Validators.min(1)]],
82
+ productPerShelf: [shelf?.productPerShelf ?? 1],
82
83
  trayRows: [shelf?.trayRows ?? 1],
83
84
  });
85
+ this.updateProductPerShelfMinValidator(shelfGroup, shelfGroup.get("shelfType")?.value);
84
86
  this.setupShelfTypeListener(shelfGroup);
85
87
  this.shelfArray.push(shelfGroup);
86
88
  }
87
89
  setupShelfTypeListener(shelfGroup) {
90
+ let previousType = shelfGroup.get("shelfType")?.value;
88
91
  shelfGroup.get("shelfType")?.valueChanges.subscribe((type) => {
92
+ const productPerShelfControl = shelfGroup.get("productPerShelf");
93
+ if (type === "vmonly") {
94
+ productPerShelfControl?.setValue(0);
95
+ }
96
+ else if (previousType === "vmonly") {
97
+ productPerShelfControl?.setValue(1);
98
+ }
99
+ previousType = type;
100
+ this.updateProductPerShelfMinValidator(shelfGroup, type);
89
101
  const noOfRowsControl = shelfGroup.get("noOfRows");
90
102
  if (type === "tray") {
91
103
  noOfRowsControl?.setValidators([
@@ -101,6 +113,12 @@ export class InstanceBasicDetailsComponent {
101
113
  noOfRowsControl?.updateValueAndValidity();
102
114
  });
103
115
  }
116
+ updateProductPerShelfMinValidator(shelfGroup, shelfType) {
117
+ const productPerShelfControl = shelfGroup.get("productPerShelf");
118
+ const minValue = shelfType === "vmonly" ? 0 : 1;
119
+ productPerShelfControl?.setValidators([Validators.min(minValue)]);
120
+ productPerShelfControl?.updateValueAndValidity({ emitEvent: false });
121
+ }
104
122
  // If index is not given, last shelf should be removed
105
123
  removeShelf(index = this.shelfArray.controls.length - 1) {
106
124
  this.shelfArray.removeAt(index);
@@ -190,6 +208,11 @@ export class InstanceBasicDetailsComponent {
190
208
  }
191
209
  });
192
210
  }
211
+ getShelfTitle(shelf, index) {
212
+ const shelfType = shelf.get("shelfType")?.value ?? "panel";
213
+ const label = shelfType === "vmonly" ? "vmonly SHELF" : String(shelfType).toUpperCase();
214
+ return `${label} ${index + 1}`;
215
+ }
193
216
  getFixtureLibrary() {
194
217
  const d = this.fixtureTemplateDetails;
195
218
  return `${d?.fixtureCategory} ${d?.fixtureWidth?.value} ${d?.fixtureWidth?.unit}`;
@@ -198,7 +221,7 @@ export class InstanceBasicDetailsComponent {
198
221
  this.submitEvent.emit(this.fixtureTemplateBasicDetailsForm.value);
199
222
  }
200
223
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InstanceBasicDetailsComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ToastService }, { token: i3.StoreBuilderService }], target: i0.ɵɵFactoryTarget.Component });
201
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InstanceBasicDetailsComponent, isStandalone: true, selector: "lib-instance-basic-details", inputs: { fixtureData: "fixtureData", editMode: "editMode", isSubmitted: "isSubmitted" }, outputs: { submitEvent: "submitEvent" }, usesOnChanges: true, ngImport: i0, template: "<section id=\"fixture-template-basic-details\" *ngIf=\"!isPageLoading\">\r\n <div class=\"row gap-4 builder\">\r\n <div class=\"cols col\" style=\"max-width: 380px;\">\r\n <h2>Fixture Details</h2>\r\n <p>Configure your fixture details here</p>\r\n\r\n <p>Template unique ID: {{ fixtureTemplateDetails?.templateIndex }}</p>\r\n\r\n <form [formGroup]=\"fixtureTemplateBasicDetailsForm\">\r\n <div class=\"form-group mb-4\">\r\n <label for=\"description\" class=\"form-label mb-1\">Description</label>\r\n <textarea type=\"text\" class=\"form-control\" id=\"description\" formControlName=\"description\"></textarea>\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('description')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('description')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('description')?.hasError('whitespace')\">\r\n Description cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('description')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group mb-4\">\r\n <label for=\"fixtureCategory\" class=\"form-label mb-1\">Select fixture type</label>\r\n <input type=\"text\" class=\"form-control\" id=\"headerLabel\" formControlName=\"fixtureCategory\" readonly />\r\n </div>\r\n\r\n <div class=\"form-group mb-4\" *ngIf=\"fixtureTemplateDetails?.header?.isEnabled\">\r\n <label for=\"templateGroupName\" class=\"form-label mb-1\">Template Group</label>\r\n <input type=\"text\" class=\"form-control\" id=\"templateGroupName\" formControlName=\"templateGroupName\" />\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('templateGroupName')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('templateGroupName')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('templateGroupName')?.hasError('whitespace')\">\r\n Template group cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('templateGroupName')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"form-group mb-4\" *ngIf=\"fixtureTemplateDetails?.header?.isEnabled\">\r\n <label for=\"headerLabel\" class=\"form-label mb-1\">Header: label</label>\r\n <input type=\"text\" class=\"form-control\" id=\"headerLabel\" formControlName=\"headerLabel\" />\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('headerLabel')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('headerLabel')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('headerLabel')?.hasError('whitespace')\">\r\n Header label cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('headerLabel')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n\r\n <div formArrayName=\"shelf\">\r\n <label for=\"shelf\" class=\"mb-2\">Body: Product Capacity at each shelf</label>\r\n <div class=\"mb-3\">\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n <label>No of shelves</label>\r\n <div class=\"counter-container\">\r\n <svg role=\"button\" width=\"15\" height=\"14\" viewBox=\"0 0 15 14\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\" (click)=\"removeShelf();\">\r\n <path d=\"M3.76294 7H11.9296\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{ shelfArray.length }}</span>\r\n <svg role=\"button\" width=\"15\" height=\"14\" viewBox=\"0 0 15 14\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\" (click)=\"addShelf();\">\r\n <path d=\"M7.15389 2.9165V11.0832M3.07056 6.99984H11.2372\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngFor=\"let shelf of shelfArray?.controls; let i = index\" [formGroupName]=\"i\">\r\n <div class=\"shelf-container\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-3\">\r\n <p>{{ shelf.get(\"shelfType\")?.value || \"panel\" | uppercase }} {{ i + 1 }}</p>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n (click)=\"removeShelf(i); \" class=\"cursor-pointer\" *ngIf=\"shelfArray.length > 1\">\r\n <path d=\"M18 6L6 18M6 6L18 18\" stroke=\"#98A2B3\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <lib-reactive-select [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"shelfTypes\"\r\n formControlName=\"shelfType\">\r\n </lib-reactive-select>\r\n <!-- <p>{{ shelf.get(\"shelfType\")?.value || \"panel\" | uppercase }} {{ i + 1 }}</p> -->\r\n <div *ngIf=\"shelf.get('shelfType')?.value === 'tray'\"\r\n class=\"d-flex justify-content-between align-items-center mt-2\">\r\n <p class=\"m-0\">No of Rows</p>\r\n <!-- <div class=\"counter-container\" style=\"width: 40%; min-height: 35px\"> -->\r\n <counter-input style=\"width: 40%\" formControlName=\"trayRows\" [step]=\"1\" placeholder=\"0\"></counter-input>\r\n <!-- {{ shelf.get(\"trayRows\")?.value }} -->\r\n <!-- </div> -->\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\r\n <label>Product capacity</label>\r\n <counter-input style=\"width: 40%\" formControlName=\"productPerShelf\" [step]=\"1\"\r\n placeholder=\"0\"></counter-input>\r\n </div>\r\n <ng-container *ngIf=\"shelf.get('productPerShelf')?.touched && shelf.get('productPerShelf')?.errors\">\r\n <small class=\"text-danger\" *ngIf=\"shelf.get('productPerShelf')?.hasError('min')\">\r\n Product capacity cannot be negative.\r\n </small>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group mb-4\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <label for=\"footerLabel\" class=\"form-label mb-1\">Footer: label</label>\r\n <input type=\"text\" class=\"form-control\" id=\"footerLabel\" formControlName=\"footerLabel\" />\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('footerLabel')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('footerLabel')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('footerLabel')?.hasError('whitespace')\">\r\n Footer label cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('footerLabel')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"cols col\">\r\n <div class=\"d-flex justify-content-center\">\r\n <!-- Vertical arrows -->\r\n <div class=\"vertical-dimension\">\r\n <div class=\"arrow up\"></div>\r\n <div class=\"line\">\r\n <span>{{ fixtureTemplateDetails?.fixtureLength?.value }}{{ fixtureTemplateDetails?.fixtureLength?.unit }}</span>\r\n </div>\r\n <div class=\"arrow down\"></div>\r\n </div>\r\n\r\n <div>\r\n <!-- Horizontal arrows -->\r\n <ng-container *ngTemplateOutlet=\"\r\n dimensionArrows;\r\n context: {\r\n value: fixtureTemplateDetails?.fixtureWidth?.value\r\n }\r\n \"></ng-container>\r\n\r\n <div class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <p>\r\n {{ fixtureTemplateBasicDetailsForm.get(\"headerLabel\")?.value }}\r\n </p>\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div class=\"body-block\" *ngIf=\"shelfArray.length > 0\">\r\n <div *ngFor=\"let item of shelfArray.controls; let i = index\">\r\n @if(item.get('shelfType')?.value ==='shelf'){\r\n <div class=\"block shelf\">\r\n <div *ngFor=\"let product of [].constructor(item.get('productPerShelf')?.value)\" class=\"product\">\r\n </div>\r\n </div>\r\n }@else {\r\n <div class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.get('trayRows')?.value);let j=index\"\r\n class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.get('productPerShelf')?.value)\" class=\"product\">\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateBasicDetailsForm.get(\"footerLabel\")?.value }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n\r\n<section id=\"fixture-template-basic-details-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<!-- Common dimension arrows -->\r\n<ng-template #dimensionArrows let-label=\"label\" let-value=\"value\">\r\n <div class=\"horizontal-dimension\">\r\n <div class=\"arrow left\"></div>\r\n <div class=\"line\">\r\n <span>{{ value }} {{ fixtureTemplateDetails?.fixtureWidth?.unit }}</span>\r\n </div>\r\n <div class=\"arrow right\"></div>\r\n </div>\r\n</ng-template>", 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!important;color:#344054!important}.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;justify-content:start;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;min-height:52px}.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 rgba(152,162,179,.2901960784);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:0;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;border-bottom:3px solid #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}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}.footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}.sub-footer{position:relative;width:48%}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i4.UpperCasePipe, name: "uppercase" }, { kind: "component", type: CounterInputComponent, selector: "counter-input", inputs: ["step", "placeholder", "max"], outputs: ["onIncrement", "onDecrement"] }, { kind: "component", type: ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "subTextField", "searchField", "label", "data", "action", "search", "prefix", "actionLabel"], outputs: ["actionClick"] }] });
224
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InstanceBasicDetailsComponent, isStandalone: true, selector: "lib-instance-basic-details", inputs: { fixtureData: "fixtureData", editMode: "editMode", isSubmitted: "isSubmitted" }, outputs: { submitEvent: "submitEvent" }, usesOnChanges: true, ngImport: i0, template: "<section id=\"fixture-template-basic-details\" *ngIf=\"!isPageLoading\">\r\n <div class=\"row gap-4 builder\">\r\n <div class=\"cols col\" style=\"max-width: 380px;\">\r\n <h2>Fixture Details</h2>\r\n <p>Configure your fixture details here</p>\r\n\r\n <p>Template unique ID: {{ fixtureTemplateDetails?.templateIndex }}</p>\r\n\r\n <form [formGroup]=\"fixtureTemplateBasicDetailsForm\">\r\n <div class=\"form-group mb-4\">\r\n <label for=\"description\" class=\"form-label mb-1\">Description</label>\r\n <textarea type=\"text\" class=\"form-control\" id=\"description\" formControlName=\"description\"></textarea>\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('description')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('description')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('description')?.hasError('whitespace')\">\r\n Description cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('description')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group mb-4\">\r\n <label for=\"fixtureCategory\" class=\"form-label mb-1\">Select fixture type</label>\r\n <input type=\"text\" class=\"form-control\" id=\"headerLabel\" formControlName=\"fixtureCategory\" readonly />\r\n </div>\r\n\r\n <div class=\"form-group mb-4\" *ngIf=\"fixtureTemplateDetails?.header?.isEnabled\">\r\n <label for=\"templateGroupName\" class=\"form-label mb-1\">Template Group</label>\r\n <input type=\"text\" class=\"form-control\" id=\"templateGroupName\" formControlName=\"templateGroupName\" />\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('templateGroupName')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('templateGroupName')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('templateGroupName')?.hasError('whitespace')\">\r\n Template group cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('templateGroupName')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"form-group mb-4\" *ngIf=\"fixtureTemplateDetails?.header?.isEnabled\">\r\n <label for=\"headerLabel\" class=\"form-label mb-1\">Header: label</label>\r\n <input type=\"text\" class=\"form-control\" id=\"headerLabel\" formControlName=\"headerLabel\" />\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('headerLabel')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('headerLabel')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('headerLabel')?.hasError('whitespace')\">\r\n Header label cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('headerLabel')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n\r\n <div formArrayName=\"shelf\">\r\n <label for=\"shelf\" class=\"mb-2\">Body: Product Capacity at each shelf</label>\r\n <div class=\"mb-3\">\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n <label>No of shelves</label>\r\n <div class=\"counter-container\">\r\n <svg role=\"button\" width=\"15\" height=\"14\" viewBox=\"0 0 15 14\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\" (click)=\"removeShelf();\">\r\n <path d=\"M3.76294 7H11.9296\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{ shelfArray.length }}</span>\r\n <svg role=\"button\" width=\"15\" height=\"14\" viewBox=\"0 0 15 14\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\" (click)=\"addShelf();\">\r\n <path d=\"M7.15389 2.9165V11.0832M3.07056 6.99984H11.2372\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngFor=\"let shelf of shelfArray?.controls; let i = index\" [formGroupName]=\"i\">\r\n <div class=\"shelf-container\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-3\">\r\n <p>\r\n {{ shelf.get(\"shelfType\")?.value === 'vmonly' ? 'VM ONLY SHELF' : (shelf.get(\"shelfType\")?.value || 'panel') | uppercase }}\r\n {{ i + 1 }}\r\n </p>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n (click)=\"removeShelf(i)\" class=\"cursor-pointer\" *ngIf=\"shelfArray.length > 1\">\r\n <path d=\"M18 6L6 18M6 6L18 18\" stroke=\"#98A2B3\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <lib-reactive-select [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"shelfTypes\"\r\n formControlName=\"shelfType\">\r\n </lib-reactive-select>\r\n <div *ngIf=\"shelf.get('shelfType')?.value === 'tray'\"\r\n class=\"d-flex justify-content-between align-items-center mt-2\">\r\n <p class=\"m-0\">No of Rows</p>\r\n <counter-input style=\"width: 40%\" formControlName=\"trayRows\" [step]=\"1\" placeholder=\"0\"></counter-input>\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center mt-2\"\r\n *ngIf=\"shelf.get('shelfType')?.value !== 'vmonly'\">\r\n <label>Product capacity</label>\r\n <counter-input style=\"width: 40%\" formControlName=\"productPerShelf\" [step]=\"1\"\r\n placeholder=\"0\"></counter-input>\r\n </div>\r\n <ng-container *ngIf=\"\r\n shelf.get('shelfType')?.value !== 'vmonly' &&\r\n shelf.get('productPerShelf')?.touched &&\r\n shelf.get('productPerShelf')?.errors\r\n \">\r\n <small class=\"text-danger\" *ngIf=\"shelf.get('productPerShelf')?.hasError('min')\">\r\n Product capacity must be at least\r\n {{ shelf.get(\"shelfType\")?.value === \"vmonly\" ? \"0\" : \"1\" }}.\r\n </small>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group mb-4\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <label for=\"footerLabel\" class=\"form-label mb-1\">Footer: label</label>\r\n <input type=\"text\" class=\"form-control\" id=\"footerLabel\" formControlName=\"footerLabel\" />\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('footerLabel')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('footerLabel')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('footerLabel')?.hasError('whitespace')\">\r\n Footer label cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('footerLabel')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"cols col\">\r\n <div class=\"d-flex justify-content-center\">\r\n <!-- Vertical arrows -->\r\n <div class=\"vertical-dimension\">\r\n <div class=\"arrow up\"></div>\r\n <div class=\"line\">\r\n <span>{{ fixtureTemplateDetails?.fixtureLength?.value }}{{ fixtureTemplateDetails?.fixtureLength?.unit }}</span>\r\n </div>\r\n <div class=\"arrow down\"></div>\r\n </div>\r\n\r\n <div>\r\n <!-- Horizontal arrows -->\r\n <ng-container *ngTemplateOutlet=\"\r\n dimensionArrows;\r\n context: {\r\n value: fixtureTemplateDetails?.fixtureWidth?.value\r\n }\r\n \"></ng-container>\r\n\r\n <div class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <p>\r\n {{ fixtureTemplateBasicDetailsForm.get(\"headerLabel\")?.value }}\r\n </p>\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div class=\"body-block\" *ngIf=\"shelfArray.length > 0\">\r\n <div *ngFor=\"let item of shelfArray.controls; let i = index\">\r\n @if(item.get('shelfType')?.value ==='tray'){\r\n <div class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.get('trayRows')?.value);let j=index\"\r\n class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.get('productPerShelf')?.value)\" class=\"product\">\r\n </div>\r\n </div>\r\n </div>\r\n }@else {\r\n <div class=\"block shelf\">\r\n <div *ngFor=\"let product of [].constructor(item.get('productPerShelf')?.value)\" class=\"product\">\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateBasicDetailsForm.get(\"footerLabel\")?.value }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n\r\n<section id=\"fixture-template-basic-details-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<!-- Common dimension arrows -->\r\n<ng-template #dimensionArrows let-label=\"label\" let-value=\"value\">\r\n <div class=\"horizontal-dimension\">\r\n <div class=\"arrow left\"></div>\r\n <div class=\"line\">\r\n <span>{{ value }} {{ fixtureTemplateDetails?.fixtureWidth?.unit }}</span>\r\n </div>\r\n <div class=\"arrow right\"></div>\r\n </div>\r\n</ng-template>", 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!important;color:#344054!important}.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;justify-content:start;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;min-height:52px}.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 rgba(152,162,179,.2901960784);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:0;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;border-bottom:3px solid #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}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}.footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}.sub-footer{position:relative;width:48%}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i4.UpperCasePipe, name: "uppercase" }, { kind: "component", type: CounterInputComponent, selector: "counter-input", inputs: ["step", "placeholder", "max"], outputs: ["onIncrement", "onDecrement"] }, { kind: "component", type: ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "subTextField", "searchField", "label", "data", "action", "search", "prefix", "actionLabel"], outputs: ["actionClick"] }] });
202
225
  }
203
226
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InstanceBasicDetailsComponent, decorators: [{
204
227
  type: Component,
@@ -208,7 +231,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
208
231
  CommonModule,
209
232
  CounterInputComponent,
210
233
  ReactiveSelectComponent,
211
- ], standalone: true, template: "<section id=\"fixture-template-basic-details\" *ngIf=\"!isPageLoading\">\r\n <div class=\"row gap-4 builder\">\r\n <div class=\"cols col\" style=\"max-width: 380px;\">\r\n <h2>Fixture Details</h2>\r\n <p>Configure your fixture details here</p>\r\n\r\n <p>Template unique ID: {{ fixtureTemplateDetails?.templateIndex }}</p>\r\n\r\n <form [formGroup]=\"fixtureTemplateBasicDetailsForm\">\r\n <div class=\"form-group mb-4\">\r\n <label for=\"description\" class=\"form-label mb-1\">Description</label>\r\n <textarea type=\"text\" class=\"form-control\" id=\"description\" formControlName=\"description\"></textarea>\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('description')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('description')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('description')?.hasError('whitespace')\">\r\n Description cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('description')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group mb-4\">\r\n <label for=\"fixtureCategory\" class=\"form-label mb-1\">Select fixture type</label>\r\n <input type=\"text\" class=\"form-control\" id=\"headerLabel\" formControlName=\"fixtureCategory\" readonly />\r\n </div>\r\n\r\n <div class=\"form-group mb-4\" *ngIf=\"fixtureTemplateDetails?.header?.isEnabled\">\r\n <label for=\"templateGroupName\" class=\"form-label mb-1\">Template Group</label>\r\n <input type=\"text\" class=\"form-control\" id=\"templateGroupName\" formControlName=\"templateGroupName\" />\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('templateGroupName')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('templateGroupName')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('templateGroupName')?.hasError('whitespace')\">\r\n Template group cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('templateGroupName')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"form-group mb-4\" *ngIf=\"fixtureTemplateDetails?.header?.isEnabled\">\r\n <label for=\"headerLabel\" class=\"form-label mb-1\">Header: label</label>\r\n <input type=\"text\" class=\"form-control\" id=\"headerLabel\" formControlName=\"headerLabel\" />\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('headerLabel')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('headerLabel')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('headerLabel')?.hasError('whitespace')\">\r\n Header label cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('headerLabel')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n\r\n <div formArrayName=\"shelf\">\r\n <label for=\"shelf\" class=\"mb-2\">Body: Product Capacity at each shelf</label>\r\n <div class=\"mb-3\">\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n <label>No of shelves</label>\r\n <div class=\"counter-container\">\r\n <svg role=\"button\" width=\"15\" height=\"14\" viewBox=\"0 0 15 14\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\" (click)=\"removeShelf();\">\r\n <path d=\"M3.76294 7H11.9296\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{ shelfArray.length }}</span>\r\n <svg role=\"button\" width=\"15\" height=\"14\" viewBox=\"0 0 15 14\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\" (click)=\"addShelf();\">\r\n <path d=\"M7.15389 2.9165V11.0832M3.07056 6.99984H11.2372\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngFor=\"let shelf of shelfArray?.controls; let i = index\" [formGroupName]=\"i\">\r\n <div class=\"shelf-container\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-3\">\r\n <p>{{ shelf.get(\"shelfType\")?.value || \"panel\" | uppercase }} {{ i + 1 }}</p>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n (click)=\"removeShelf(i); \" class=\"cursor-pointer\" *ngIf=\"shelfArray.length > 1\">\r\n <path d=\"M18 6L6 18M6 6L18 18\" stroke=\"#98A2B3\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <lib-reactive-select [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"shelfTypes\"\r\n formControlName=\"shelfType\">\r\n </lib-reactive-select>\r\n <!-- <p>{{ shelf.get(\"shelfType\")?.value || \"panel\" | uppercase }} {{ i + 1 }}</p> -->\r\n <div *ngIf=\"shelf.get('shelfType')?.value === 'tray'\"\r\n class=\"d-flex justify-content-between align-items-center mt-2\">\r\n <p class=\"m-0\">No of Rows</p>\r\n <!-- <div class=\"counter-container\" style=\"width: 40%; min-height: 35px\"> -->\r\n <counter-input style=\"width: 40%\" formControlName=\"trayRows\" [step]=\"1\" placeholder=\"0\"></counter-input>\r\n <!-- {{ shelf.get(\"trayRows\")?.value }} -->\r\n <!-- </div> -->\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\r\n <label>Product capacity</label>\r\n <counter-input style=\"width: 40%\" formControlName=\"productPerShelf\" [step]=\"1\"\r\n placeholder=\"0\"></counter-input>\r\n </div>\r\n <ng-container *ngIf=\"shelf.get('productPerShelf')?.touched && shelf.get('productPerShelf')?.errors\">\r\n <small class=\"text-danger\" *ngIf=\"shelf.get('productPerShelf')?.hasError('min')\">\r\n Product capacity cannot be negative.\r\n </small>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group mb-4\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <label for=\"footerLabel\" class=\"form-label mb-1\">Footer: label</label>\r\n <input type=\"text\" class=\"form-control\" id=\"footerLabel\" formControlName=\"footerLabel\" />\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('footerLabel')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('footerLabel')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('footerLabel')?.hasError('whitespace')\">\r\n Footer label cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('footerLabel')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"cols col\">\r\n <div class=\"d-flex justify-content-center\">\r\n <!-- Vertical arrows -->\r\n <div class=\"vertical-dimension\">\r\n <div class=\"arrow up\"></div>\r\n <div class=\"line\">\r\n <span>{{ fixtureTemplateDetails?.fixtureLength?.value }}{{ fixtureTemplateDetails?.fixtureLength?.unit }}</span>\r\n </div>\r\n <div class=\"arrow down\"></div>\r\n </div>\r\n\r\n <div>\r\n <!-- Horizontal arrows -->\r\n <ng-container *ngTemplateOutlet=\"\r\n dimensionArrows;\r\n context: {\r\n value: fixtureTemplateDetails?.fixtureWidth?.value\r\n }\r\n \"></ng-container>\r\n\r\n <div class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <p>\r\n {{ fixtureTemplateBasicDetailsForm.get(\"headerLabel\")?.value }}\r\n </p>\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div class=\"body-block\" *ngIf=\"shelfArray.length > 0\">\r\n <div *ngFor=\"let item of shelfArray.controls; let i = index\">\r\n @if(item.get('shelfType')?.value ==='shelf'){\r\n <div class=\"block shelf\">\r\n <div *ngFor=\"let product of [].constructor(item.get('productPerShelf')?.value)\" class=\"product\">\r\n </div>\r\n </div>\r\n }@else {\r\n <div class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.get('trayRows')?.value);let j=index\"\r\n class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.get('productPerShelf')?.value)\" class=\"product\">\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateBasicDetailsForm.get(\"footerLabel\")?.value }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n\r\n<section id=\"fixture-template-basic-details-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<!-- Common dimension arrows -->\r\n<ng-template #dimensionArrows let-label=\"label\" let-value=\"value\">\r\n <div class=\"horizontal-dimension\">\r\n <div class=\"arrow left\"></div>\r\n <div class=\"line\">\r\n <span>{{ value }} {{ fixtureTemplateDetails?.fixtureWidth?.unit }}</span>\r\n </div>\r\n <div class=\"arrow right\"></div>\r\n </div>\r\n</ng-template>", 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!important;color:#344054!important}.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;justify-content:start;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;min-height:52px}.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 rgba(152,162,179,.2901960784);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:0;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;border-bottom:3px solid #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}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}.footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}.sub-footer{position:relative;width:48%}\n"] }]
234
+ ], standalone: true, template: "<section id=\"fixture-template-basic-details\" *ngIf=\"!isPageLoading\">\r\n <div class=\"row gap-4 builder\">\r\n <div class=\"cols col\" style=\"max-width: 380px;\">\r\n <h2>Fixture Details</h2>\r\n <p>Configure your fixture details here</p>\r\n\r\n <p>Template unique ID: {{ fixtureTemplateDetails?.templateIndex }}</p>\r\n\r\n <form [formGroup]=\"fixtureTemplateBasicDetailsForm\">\r\n <div class=\"form-group mb-4\">\r\n <label for=\"description\" class=\"form-label mb-1\">Description</label>\r\n <textarea type=\"text\" class=\"form-control\" id=\"description\" formControlName=\"description\"></textarea>\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('description')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('description')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('description')?.hasError('whitespace')\">\r\n Description cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('description')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"form-group mb-4\">\r\n <label for=\"fixtureCategory\" class=\"form-label mb-1\">Select fixture type</label>\r\n <input type=\"text\" class=\"form-control\" id=\"headerLabel\" formControlName=\"fixtureCategory\" readonly />\r\n </div>\r\n\r\n <div class=\"form-group mb-4\" *ngIf=\"fixtureTemplateDetails?.header?.isEnabled\">\r\n <label for=\"templateGroupName\" class=\"form-label mb-1\">Template Group</label>\r\n <input type=\"text\" class=\"form-control\" id=\"templateGroupName\" formControlName=\"templateGroupName\" />\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('templateGroupName')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('templateGroupName')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('templateGroupName')?.hasError('whitespace')\">\r\n Template group cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('templateGroupName')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"form-group mb-4\" *ngIf=\"fixtureTemplateDetails?.header?.isEnabled\">\r\n <label for=\"headerLabel\" class=\"form-label mb-1\">Header: label</label>\r\n <input type=\"text\" class=\"form-control\" id=\"headerLabel\" formControlName=\"headerLabel\" />\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('headerLabel')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('headerLabel')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('headerLabel')?.hasError('whitespace')\">\r\n Header label cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('headerLabel')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n\r\n <div formArrayName=\"shelf\">\r\n <label for=\"shelf\" class=\"mb-2\">Body: Product Capacity at each shelf</label>\r\n <div class=\"mb-3\">\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\">\r\n <label>No of shelves</label>\r\n <div class=\"counter-container\">\r\n <svg role=\"button\" width=\"15\" height=\"14\" viewBox=\"0 0 15 14\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\" (click)=\"removeShelf();\">\r\n <path d=\"M3.76294 7H11.9296\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{ shelfArray.length }}</span>\r\n <svg role=\"button\" width=\"15\" height=\"14\" viewBox=\"0 0 15 14\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\" (click)=\"addShelf();\">\r\n <path d=\"M7.15389 2.9165V11.0832M3.07056 6.99984H11.2372\" stroke=\"#667085\" stroke-width=\"2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngFor=\"let shelf of shelfArray?.controls; let i = index\" [formGroupName]=\"i\">\r\n <div class=\"shelf-container\">\r\n <div class=\"d-flex align-items-center justify-content-between mb-3\">\r\n <p>\r\n {{ shelf.get(\"shelfType\")?.value === 'vmonly' ? 'VM ONLY SHELF' : (shelf.get(\"shelfType\")?.value || 'panel') | uppercase }}\r\n {{ i + 1 }}\r\n </p>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\r\n (click)=\"removeShelf(i)\" class=\"cursor-pointer\" *ngIf=\"shelfArray.length > 1\">\r\n <path d=\"M18 6L6 18M6 6L18 18\" stroke=\"#98A2B3\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <lib-reactive-select [idField]=\"'value'\" [nameField]=\"'label'\" [data]=\"shelfTypes\"\r\n formControlName=\"shelfType\">\r\n </lib-reactive-select>\r\n <div *ngIf=\"shelf.get('shelfType')?.value === 'tray'\"\r\n class=\"d-flex justify-content-between align-items-center mt-2\">\r\n <p class=\"m-0\">No of Rows</p>\r\n <counter-input style=\"width: 40%\" formControlName=\"trayRows\" [step]=\"1\" placeholder=\"0\"></counter-input>\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center mt-2\"\r\n *ngIf=\"shelf.get('shelfType')?.value !== 'vmonly'\">\r\n <label>Product capacity</label>\r\n <counter-input style=\"width: 40%\" formControlName=\"productPerShelf\" [step]=\"1\"\r\n placeholder=\"0\"></counter-input>\r\n </div>\r\n <ng-container *ngIf=\"\r\n shelf.get('shelfType')?.value !== 'vmonly' &&\r\n shelf.get('productPerShelf')?.touched &&\r\n shelf.get('productPerShelf')?.errors\r\n \">\r\n <small class=\"text-danger\" *ngIf=\"shelf.get('productPerShelf')?.hasError('min')\">\r\n Product capacity must be at least\r\n {{ shelf.get(\"shelfType\")?.value === \"vmonly\" ? \"0\" : \"1\" }}.\r\n </small>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group mb-4\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <label for=\"footerLabel\" class=\"form-label mb-1\">Footer: label</label>\r\n <input type=\"text\" class=\"form-control\" id=\"footerLabel\" formControlName=\"footerLabel\" />\r\n <ng-container *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('footerLabel')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('footerLabel')?.invalid\r\n \">\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('footerLabel')?.hasError('whitespace')\">\r\n Footer label cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\"\r\n *ngIf=\"fixtureTemplateBasicDetailsForm.get('footerLabel')?.hasError('trimSpaces')\">\r\n No leading or trailing whitespace allowed.\r\n </small>\r\n </ng-container>\r\n </div>\r\n </form>\r\n </div>\r\n <div class=\"cols col\">\r\n <div class=\"d-flex justify-content-center\">\r\n <!-- Vertical arrows -->\r\n <div class=\"vertical-dimension\">\r\n <div class=\"arrow up\"></div>\r\n <div class=\"line\">\r\n <span>{{ fixtureTemplateDetails?.fixtureLength?.value }}{{ fixtureTemplateDetails?.fixtureLength?.unit }}</span>\r\n </div>\r\n <div class=\"arrow down\"></div>\r\n </div>\r\n\r\n <div>\r\n <!-- Horizontal arrows -->\r\n <ng-container *ngTemplateOutlet=\"\r\n dimensionArrows;\r\n context: {\r\n value: fixtureTemplateDetails?.fixtureWidth?.value\r\n }\r\n \"></ng-container>\r\n\r\n <div class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div class=\"header-block\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <p>\r\n {{ fixtureTemplateBasicDetailsForm.get(\"headerLabel\")?.value }}\r\n </p>\r\n </div>\r\n\r\n <!-- Body block -->\r\n <div class=\"body-block\" *ngIf=\"shelfArray.length > 0\">\r\n <div *ngFor=\"let item of shelfArray.controls; let i = index\">\r\n @if(item.get('shelfType')?.value ==='tray'){\r\n <div class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.get('trayRows')?.value);let j=index\"\r\n class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.get('productPerShelf')?.value)\" class=\"product\">\r\n </div>\r\n </div>\r\n </div>\r\n }@else {\r\n <div class=\"block shelf\">\r\n <div *ngFor=\"let product of [].constructor(item.get('productPerShelf')?.value)\" class=\"product\">\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div class=\"footer-block\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\r\n <div class=\"sub-footer left-box\"></div>\r\n <div class=\"sub-footer right-box\"></div>\r\n <p>{{ fixtureTemplateBasicDetailsForm.get(\"footerLabel\")?.value }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n\r\n<section id=\"fixture-template-basic-details-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<!-- Common dimension arrows -->\r\n<ng-template #dimensionArrows let-label=\"label\" let-value=\"value\">\r\n <div class=\"horizontal-dimension\">\r\n <div class=\"arrow left\"></div>\r\n <div class=\"line\">\r\n <span>{{ value }} {{ fixtureTemplateDetails?.fixtureWidth?.unit }}</span>\r\n </div>\r\n <div class=\"arrow right\"></div>\r\n </div>\r\n</ng-template>", 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!important;color:#344054!important}.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;justify-content:start;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;min-height:52px}.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 rgba(152,162,179,.2901960784);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:0;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;border-bottom:3px solid #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}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.footer-block{position:relative;box-sizing:border-box;justify-content:space-between!important}.footer-block p{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#f2f4f7;z-index:1}.sub-footer{position:relative;width:48%}\n"] }]
212
235
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ToastService }, { type: i3.StoreBuilderService }], propDecorators: { fixtureData: [{
213
236
  type: Input
214
237
  }], editMode: [{
@@ -218,4 +241,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
218
241
  }], submitEvent: [{
219
242
  type: Output
220
243
  }] } });
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtYmFzaWMtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2Utc3RvcmUtcGxhbm8vdGVtcGxhdGUtYmFzaWMtZGV0YWlscy90ZW1wbGF0ZS1iYXNpYy1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby90ZW1wbGF0ZS1iYXNpYy1kZXRhaWxzL3RlbXBsYXRlLWJhc2ljLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBS0wsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFckUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7OztBQWUxRixNQUFNLE9BQU8sNkJBQTZCO0lBbUI5QjtJQUNBO0lBQ0E7SUFwQlYsc0JBQXNCLENBQWdDO0lBQ3RELCtCQUErQixDQUFZO0lBRTNDLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFDOUIsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUVuQixXQUFXLENBQU07SUFDakIsUUFBUSxDQUFVO0lBQ2xCLFdBQVcs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XG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIEZvcm0sXHJcbiAgRm9ybUFycmF5LFxyXG4gIEZvcm1CdWlsZGVyLFxyXG4gIEZvcm1Hcm91cCxcclxuICBGb3Jtc01vZHVsZSxcclxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgRml4dHVyZVRlbXBsYXRlRGV0YWlscyB9IGZyb20gXCIuLi8uLi8uLi9pbnRlcmZhY2VzL2ZpeHR1cmUtdGVtcGxhdGUuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvc3RvcmUtYnVpbGRlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENvdW50ZXJJbnB1dENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb3VudGVyLWlucHV0L2NvdW50ZXItaW5wdXQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IGdlbmVyYWxWYWxpZGF0b3IgfSBmcm9tIFwiLi4vLi4vLi4vZnVuY3Rpb25zL3BsYW5vLmZ1bmN0aW9uXCI7XHJcbmltcG9ydCB7IERyb3Bkb3duSUYgfSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJmYWNlcy9wbGFuby1nZW5lcmFsLmludGVyZmFjZVwiO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZVNlbGVjdENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9yZWFjdGl2ZS1zZWxlY3QvcmVhY3RpdmUtc2VsZWN0LmNvbXBvbmVudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLWluc3RhbmNlLWJhc2ljLWRldGFpbHNcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3RlbXBsYXRlLWJhc2ljLWRldGFpbHMuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL3RlbXBsYXRlLWJhc2ljLWRldGFpbHMuY29tcG9uZW50LnNjc3NcIixcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBDb3VudGVySW5wdXRDb21wb25lbnQsXHJcbiAgICBSZWFjdGl2ZVNlbGVjdENvbXBvbmVudCxcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnN0YW5jZUJhc2ljRGV0YWlsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzOiBGaXh0dXJlVGVtcGxhdGVEZXRhaWxzIHwgbnVsbDtcclxuICBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgZml4dHVyZURhdGE6IGFueTtcclxuICBASW5wdXQoKSBlZGl0TW9kZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBpc1N1Ym1pdHRlZDogYm9vbGVhbjtcclxuICBAT3V0cHV0KCkgc3VibWl0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgaW5pdGlhbFN0YXRlOiBhbnkgPSAwO1xyXG5cclxuICByZWFkb25seSBzaGVsZlR5cGVzOiBEcm9wZG93bklGW10gPSBbXHJcbiAgICB7IGxhYmVsOiBcIlNoZWxmXCIsIHZhbHVlOiBcInNoZWxmXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiVHJheVwiLCB2YWx1ZTogXCJ0cmF5XCIgfSxcclxuICBdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoY2hhbmdlc1tcImZpeHR1cmVEYXRhXCJdKSB7XHJcbiAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscyA9IGNoYW5nZXNbXCJmaXh0dXJlRGF0YVwiXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzW1wiZWRpdE1vZGVcIl0pIHtcclxuICAgICAgdGhpcy5pc0VkaXRNb2RlID0gY2hhbmdlc1tcImVkaXRNb2RlXCJdLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgaWYgKHRoaXMuaXNFZGl0TW9kZSkge1xyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybT8uZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbXCJpc1N1Ym1pdHRlZFwiXSkge1xyXG4gICAgICBpZiAoY2hhbmdlc1tcImlzU3VibWl0dGVkXCJdLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc3VibWl0Rm9ybSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplRm9ybSgpIHtcclxuICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBkZXNjcmlwdGlvbjogW1xyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZGVzY3JpcHRpb24gPz8gXCJcIixcclxuICAgICAgICBnZW5lcmFsVmFsaWRhdG9yKCksXHJcbiAgICAgIF0sXHJcbiAgICAgIGZpeHR1cmVDYXRlZ29yeTogW3RoaXMuZ2V0Rml4dHVyZUxpYnJhcnkoKSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGhlYWRlckxhYmVsOiBbXHJcbiAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmxhYmVsLFxyXG4gICAgICAgIGdlbmVyYWxWYWxpZGF0b3IoKSxcclxuICAgICAgXSxcclxuICAgICAgc2hlbGY6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBmb290ZXJMYWJlbDogW1xyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZm9vdGVyPy5sYWJlbCxcclxuICAgICAgICBnZW5lcmFsVmFsaWRhdG9yKCksXHJcbiAgICAgIF0sXHJcbiAgICAgIHRlbXBsYXRlR3JvdXBOYW1lOiBbXHJcbiAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy50ZW1wbGF0ZUdyb3VwTmFtZSxcclxuICAgICAgICBnZW5lcmFsVmFsaWRhdG9yKCksXHJcbiAgICAgIF0sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnPy5mb3JFYWNoKChpKSA9PiB0aGlzLmFkZFNoZWxmKGkpKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuaXNFZGl0TW9kZSlcclxuICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYWRkU2hlbGYoc2hlbGY/OiBhbnkpIHtcclxuICAgIGNvbnN0IHNoZWxmR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgc2hlbGZUeXBlOiBbc2hlbGY/LnNoZWxmVHlwZSA/PyBcInNoZWxmXCJdLFxyXG4gICAgICBwcm9kdWN0UGVyU2hlbGY6IFtzaGVsZj8ucHJvZHVjdFBlclNoZWxmID8/IDEsIFtWYWxpZGF0b3JzLm1pbigxKV1dLFxyXG4gICAgICB0cmF5Um93czogW3NoZWxmPy50cmF5Um93cyA/PyAxXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZXR1cFNoZWxmVHlwZUxpc3RlbmVyKHNoZWxmR3JvdXApO1xyXG4gICAgdGhpcy5zaGVsZkFycmF5LnB1c2goc2hlbGZHcm91cCk7XHJcbiAgfVxyXG5cclxuICBzZXR1cFNoZWxmVHlwZUxpc3RlbmVyKHNoZWxmR3JvdXA6IEZvcm1Hcm91cCkge1xyXG4gICAgc2hlbGZHcm91cC5nZXQoXCJzaGVsZlR5cGVcIik/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHR5cGUpID0+IHtcclxuICAgICAgY29uc3Qgbm9PZlJvd3NDb250cm9sID0gc2hlbGZHcm91cC5nZXQoXCJub09mUm93c1wiKTtcclxuICAgICAgaWYgKHR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgbm9PZlJvd3NDb250cm9sPy5zZXRWYWxpZGF0b3JzKFtcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLm1pbigxKSxcclxuICAgICAgICBdKTtcclxuICAgICAgICBub09mUm93c0NvbnRyb2w/LnNldFZhbHVlKDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5vT2ZSb3dzQ29udHJvbD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgbm9PZlJvd3NDb250cm9sPy5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgfVxyXG4gICAgICBub09mUm93c0NvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gSWYgaW5kZXggaXMgbm90IGdpdmVuLCBsYXN0IHNoZWxmIHNob3VsZCBiZSByZW1vdmVkXHJcbiAgcmVtb3ZlU2hlbGYoaW5kZXg6IG51bWJlciA9IHRoaXMuc2hlbGZBcnJheS5jb250cm9scy5sZW5ndGggLSAxKSB7XHJcbiAgICB0aGlzLnNoZWxmQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNoZWxmQXJyYXkoKTogRm9ybUFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KFwic2hlbGZcIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRvdGFsUHJvZHVjdENhcGFjaXR5KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5zaGVsZkFycmF5LmNvbnRyb2xzLnJlZHVjZSgodG90YWwsIGl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgY291bnQgPSBpdGVtLmdldChcInByb2R1Y3RQZXJTaGVsZlwiKT8udmFsdWUgfHwgMDtcclxuICAgICAgY29uc3QgaXNUcmF5ID0gaXRlbS5nZXQoXCJzaGVsZlR5cGVcIik/LnZhbHVlID09PSBcInRyYXlcIjtcclxuICAgICAgY29uc3Qgcm93cyA9IGl0ZW0uZ2V0KFwidHJheVJvd3NcIik/LnZhbHVlIHx8IDE7XHJcblxyXG4gICAgICAvLyBJZiB0aGUgZml4dHVyZSBpcyBhIGZsb29yIHBhbmVsIG9yIHRyYXksIHdlIG5lZWQgdG8gbXVsdGlwbHkgdGhlIHByb2R1Y3QgY2FwYWNpdHkgYnkgdGhlIG51bWJlciBvZiByb3dzXHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgdG90YWwgK1xyXG4gICAgICAgIChpc1RyYXkgfHwgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiXHJcbiAgICAgICAgICA/IGNvdW50ICogcm93c1xyXG4gICAgICAgICAgOiBjb3VudClcclxuICAgICAgKTtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0Rm9ybSgpIHtcclxuICAgIGlmICghdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzKSByZXR1cm47XHJcblxyXG4gICAgaWYgKHRoaXMuZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIkZvcm0gaXMgaW52YWxpZFwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0udmFsaWQpIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZUZpeHR1cmVEYXRhKCk7XHJcbiAgICAgIGNvbnN0IHBheWxvYWQ6IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMgPSB7XHJcbiAgICAgICAgLi4udGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0udmFsdWUuZGVzY3JpcHRpb24sXHJcbiAgICAgICAgaGVhZGVyOiB7XHJcbiAgICAgICAgICAuLi50aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMuaGVhZGVyLFxyXG4gICAgICAgICAgbGFiZWw6IHRoaXMuZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS52YWx1ZS5oZWFkZXJMYWJlbCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZvb3Rlcjoge1xyXG4gICAgICAgICAgLi4udGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLmZvb3RlcixcclxuICAgICAgICAgIGxhYmVsOiB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0udmFsdWUuZm9vdGVyTGFiZWwsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmaXh0dXJlQ2FwYWNpdHk6IHRoaXMudG90YWxQcm9kdWN0Q2FwYWNpdHksXHJcbiAgICAgICAgdGVtcGxhdGVHcm91cE5hbWU6XHJcbiAgICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0udmFsdWUudGVtcGxhdGVHcm91cE5hbWUsXHJcbiAgICAgICAgc2hlbGZDb25maWc6IHRoaXMuZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS52YWx1ZS5zaGVsZi5tYXAoXHJcbiAgICAgICAgICAoZWxlOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgZWxlLnNoZWxmTnVtYmVyID0gaW5kZXggKyAxO1xyXG4gICAgICAgICAgICBlbGUgPSB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcz8uZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/LltpbmRleF0sXHJcbiAgICAgICAgICAgICAgLi4uZWxlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoIWVsZT8ucHJvZHVjdEJyYW5kTmFtZSkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzPy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8uW2luZGV4IC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGVsZSA9IHtcclxuICAgICAgICAgICAgICAgICAgLi4udGhpcz8uZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/LltpbmRleCAtIDFdLFxyXG4gICAgICAgICAgICAgICAgICAuLi5lbGUsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZWxlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICksXHJcbiAgICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZShEYXRlLm5vdygpKS50b0lTT1N0cmluZygpLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgcmVxID0ge1xyXG4gICAgICAgIGZpeHR1cmVJZDogdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLl9pZCxcclxuICAgICAgICBkYXRhOiBwYXlsb2FkLFxyXG4gICAgICAgIC4uLighdGhpcy5maXh0dXJlRGF0YT8udGFza1R5cGUgJiYgeyBlZGl0TW9kZTogdGhpcy5pc0VkaXRNb2RlIH0pLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLnVwZGF0ZVN0b3JlRml4dHVyZShyZXEpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzPy5kYXRhPy5pZCkge1xyXG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IGBGaXh0dXJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IGFuZCB0ZW1wbGF0ZSBpcyBjcmVhdGVkIDxhIGhyZWY9J21hbmFnZS9wbGFub2dyYW0vZml4dHVyZS10ZW1wbGF0ZS9iYXNpYy1kZXRhaWxzP3RlbXBsYXRlSWQ9JHtyZXMuZGF0YS5pZH0maXNFZGl0PWZhbHNlJz5WaWV3PC9hPmA7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KG1lc3NhZ2UpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QoXCJGaXh0dXJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zdWJtaXRFdmVudC5lbWl0KHRydWUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVGaXh0dXJlRGF0YSgpIHtcclxuICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8udm1Db25maWc/LmZvckVhY2goKHZtKSA9PiB7XHJcbiAgICAgIGlmICgodm0/LnN0YXJ0WVBvc2l0aW9uID8/IDEpID4gKHRoaXMuc2hlbGZBcnJheS5sZW5ndGggPz8gMSkpIHtcclxuICAgICAgICB2bS5zdGFydFlQb3NpdGlvbiA9IHRoaXMuc2hlbGZBcnJheS5sZW5ndGggPz8gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCh2bT8uZW5kWVBvc2l0aW9uID8/IDEpID4gKHRoaXMuc2hlbGZBcnJheS5sZW5ndGggPz8gMSkpIHtcclxuICAgICAgICB2bS5lbmRZUG9zaXRpb24gPSB0aGlzLnNoZWxmQXJyYXkubGVuZ3RoID8/IDE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rml4dHVyZUxpYnJhcnkoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGQgPSB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM7XHJcbiAgICByZXR1cm4gYCR7ZD8uZml4dHVyZUNhdGVnb3J5fSAke2Q/LmZpeHR1cmVXaWR0aD8udmFsdWV9ICR7ZD8uZml4dHVyZVdpZHRoPy51bml0fWA7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3VibWl0RXZlbnQuZW1pdCh0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0udmFsdWUpO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cImZpeHR1cmUtdGVtcGxhdGUtYmFzaWMtZGV0YWlsc1wiICpuZ0lmPVwiIWlzUGFnZUxvYWRpbmdcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGdhcC00IGJ1aWxkZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xzIGNvbFwiIHN0eWxlPVwibWF4LXdpZHRoOiAzODBweDtcIj5cclxuICAgICAgPGgyPkZpeHR1cmUgRGV0YWlsczwvaDI+XHJcbiAgICAgIDxwPkNvbmZpZ3VyZSB5b3VyIGZpeHR1cmUgZGV0YWlscyBoZXJlPC9wPlxyXG5cclxuICAgICAgPHA+VGVtcGxhdGUgdW5pcXVlIElEOiB7eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy50ZW1wbGF0ZUluZGV4IH19PC9wPlxyXG5cclxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItNFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cImRlc2NyaXB0aW9uXCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5EZXNjcmlwdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgICA8dGV4dGFyZWEgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZGVzY3JpcHRpb25cIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/LnRvdWNoZWQgJiZcclxuICAgICAgICAgICAgICBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8uaW52YWxpZFxyXG4gICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/Lmhhc0Vycm9yKCd3aGl0ZXNwYWNlJylcIj5cclxuICAgICAgICAgICAgICBEZXNjcmlwdGlvbiBjYW5ub3QgYmUgb25seSB3aGl0ZXNwYWNlLlxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8uaGFzRXJyb3IoJ3RyaW1TcGFjZXMnKVwiPlxyXG4gICAgICAgICAgICAgIE5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbGxvd2VkLlxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItNFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cImZpeHR1cmVDYXRlZ29yeVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+U2VsZWN0IGZpeHR1cmUgdHlwZTwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiaGVhZGVyTGFiZWxcIiBmb3JtQ29udHJvbE5hbWU9XCJmaXh0dXJlQ2F0ZWdvcnlcIiByZWFkb25seSAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi00XCIgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmlzRW5hYmxlZFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cInRlbXBsYXRlR3JvdXBOYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5UZW1wbGF0ZSBHcm91cDwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwidGVtcGxhdGVHcm91cE5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJ0ZW1wbGF0ZUdyb3VwTmFtZVwiIC8+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ3RlbXBsYXRlR3JvdXBOYW1lJyk/LnRvdWNoZWQgJiZcclxuICAgICAgICAgICAgICBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgndGVtcGxhdGVHcm91cE5hbWUnKT8uaW52YWxpZFxyXG4gICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ3RlbXBsYXRlR3JvdXBOYW1lJyk/Lmhhc0Vycm9yKCd3aGl0ZXNwYWNlJylcIj5cclxuICAgICAgICAgICAgICBUZW1wbGF0ZSBncm91cCBjYW5ub3QgYmUgb25seSB3aGl0ZXNwYWNlLlxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgndGVtcGxhdGVHcm91cE5hbWUnKT8uaGFzRXJyb3IoJ3RyaW1TcGFjZXMnKVwiPlxyXG4gICAgICAgICAgICAgIE5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbGxvd2VkLlxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIiAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmhlYWRlcj8uaXNFbmFibGVkXCI+XHJcbiAgICAgICAgICA8bGFiZWwgZm9yPVwiaGVhZGVyTGFiZWxcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPkhlYWRlcjogbGFiZWw8L2xhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImhlYWRlckxhYmVsXCIgZm9ybUNvbnRyb2xOYW1lPVwiaGVhZGVyTGFiZWxcIiAvPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIGZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KCdoZWFkZXJMYWJlbCcpPy50b3VjaGVkICYmXHJcbiAgICAgICAgICAgICAgZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2hlYWRlckxhYmVsJyk/LmludmFsaWRcclxuICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KCdoZWFkZXJMYWJlbCcpPy5oYXNFcnJvcignd2hpdGVzcGFjZScpXCI+XHJcbiAgICAgICAgICAgICAgSGVhZGVyIGxhYmVsIGNhbm5vdCBiZSBvbmx5IHdoaXRlc3BhY2UuXHJcbiAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KCdoZWFkZXJMYWJlbCcpPy5oYXNFcnJvcigndHJpbVNwYWNlcycpXCI+XHJcbiAgICAgICAgICAgICAgTm8gbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlIGFsbG93ZWQuXHJcbiAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwic2hlbGZcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJzaGVsZlwiIGNsYXNzPVwibWItMlwiPkJvZHk6IFByb2R1Y3QgQ2FwYWNpdHkgYXQgZWFjaCBzaGVsZjwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsPk5vIG9mIHNoZWx2ZXM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyByb2xlPVwiYnV0dG9uXCIgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNSAxNFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIChjbGljayk9XCJyZW1vdmVTaGVsZigpO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMuNzYyOTQgN0gxMS45Mjk2XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHNoZWxmQXJyYXkubGVuZ3RoIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyByb2xlPVwiYnV0dG9uXCIgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNSAxNFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIChjbGljayk9XCJhZGRTaGVsZigpO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcuMTUzODkgMi45MTY1VjExLjA4MzJNMy4wNzA1NiA2Ljk5OTg0SDExLjIzNzJcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc2hlbGYgb2Ygc2hlbGZBcnJheT8uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGVsZi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8cD57eyBzaGVsZi5nZXQoXCJzaGVsZlR5cGVcIik/LnZhbHVlIHx8IFwicGFuZWxcIiB8IHVwcGVyY2FzZSB9fSB7eyBpICsgMSB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVTaGVsZihpKTsgXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwic2hlbGZBcnJheS5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTggNkw2IDE4TTYgNkwxOCAxOFwiIHN0cm9rZT1cIiM5OEEyQjNcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIiBbZGF0YV09XCJzaGVsZlR5cGVzXCJcclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNoZWxmVHlwZVwiPlxyXG4gICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICA8IS0tIDxwPnt7IHNoZWxmLmdldChcInNoZWxmVHlwZVwiKT8udmFsdWUgfHwgXCJwYW5lbFwiIHwgdXBwZXJjYXNlIH19IHt7IGkgKyAxIH19PC9wPiAtLT5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hlbGYuZ2V0KCdzaGVsZlR5cGUnKT8udmFsdWUgPT09ICd0cmF5J1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtLTBcIj5ObyBvZiBSb3dzPC9wPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY291bnRlci1jb250YWluZXJcIiBzdHlsZT1cIndpZHRoOiA0MCU7IG1pbi1oZWlnaHQ6IDM1cHhcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8Y291bnRlci1pbnB1dCBzdHlsZT1cIndpZHRoOiA0MCVcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmF5Um93c1wiIFtzdGVwXT1cIjFcIiBwbGFjZWhvbGRlcj1cIjBcIj48L2NvdW50ZXItaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICA8IS0tIHt7IHNoZWxmLmdldChcInRyYXlSb3dzXCIpPy52YWx1ZSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5Qcm9kdWN0IGNhcGFjaXR5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxjb3VudGVyLWlucHV0IHN0eWxlPVwid2lkdGg6IDQwJVwiIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RQZXJTaGVsZlwiIFtzdGVwXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjBcIj48L2NvdW50ZXItaW5wdXQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNoZWxmLmdldCgncHJvZHVjdFBlclNoZWxmJyk/LnRvdWNoZWQgJiYgc2hlbGYuZ2V0KCdwcm9kdWN0UGVyU2hlbGYnKT8uZXJyb3JzXCI+XHJcbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwic2hlbGYuZ2V0KCdwcm9kdWN0UGVyU2hlbGYnKT8uaGFzRXJyb3IoJ21pbicpXCI+XHJcbiAgICAgICAgICAgICAgICAgIFByb2R1Y3QgY2FwYWNpdHkgY2Fubm90IGJlIG5lZ2F0aXZlLlxyXG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItNFwiXHJcbiAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZvb3Rlcj8uaXNFbmFibGVkICYmIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVUeXBlID09PSAnd2FsbCdcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJmb290ZXJMYWJlbFwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+Rm9vdGVyOiBsYWJlbDwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZm9vdGVyTGFiZWxcIiBmb3JtQ29udHJvbE5hbWU9XCJmb290ZXJMYWJlbFwiIC8+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2Zvb3RlckxhYmVsJyk/LnRvdWNoZWQgJiZcclxuICAgICAgICAgICAgICBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnZm9vdGVyTGFiZWwnKT8uaW52YWxpZFxyXG4gICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2Zvb3RlckxhYmVsJyk/Lmhhc0Vycm9yKCd3aGl0ZXNwYWNlJylcIj5cclxuICAgICAgICAgICAgICBGb290ZXIgbGFiZWwgY2Fubm90IGJlIG9ubHkgd2hpdGVzcGFjZS5cclxuICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2Zvb3RlckxhYmVsJyk/Lmhhc0Vycm9yKCd0cmltU3BhY2VzJylcIj5cclxuICAgICAgICAgICAgICBObyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UgYWxsb3dlZC5cclxuICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xzIGNvbFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICA8IS0tIFZlcnRpY2FsIGFycm93cyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidmVydGljYWwtZGltZW5zaW9uXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3cgdXBcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5lXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVMZW5ndGg/LnZhbHVlIH19e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZUxlbmd0aD8udW5pdCB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93IGRvd25cIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDwhLS0gSG9yaXpvbnRhbCBhcnJvd3MgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgZGltZW5zaW9uQXJyb3dzO1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlV2lkdGg/LnZhbHVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcIj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FsbC12aWV3cG9ydFwiPlxyXG4gICAgICAgICAgICA8IS0tIEhlYWRlciBibG9jayAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnXCI+XHJcbiAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICB7eyBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldChcImhlYWRlckxhYmVsXCIpPy52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEJvZHkgYmxvY2sgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib2R5LWJsb2NrXCIgKm5nSWY9XCJzaGVsZkFycmF5Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNoZWxmQXJyYXkuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIEBpZihpdGVtLmdldCgnc2hlbGZUeXBlJyk/LnZhbHVlID09PSdzaGVsZicpe1xyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmxvY2sgc2hlbGZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0uZ2V0KCdwcm9kdWN0UGVyU2hlbGYnKT8udmFsdWUpXCIgY2xhc3M9XCJwcm9kdWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLmdldCgndHJheVJvd3MnKT8udmFsdWUpO2xldCBqPWluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHJheSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0uZ2V0KCdwcm9kdWN0UGVyU2hlbGYnKT8udmFsdWUpXCIgY2xhc3M9XCJwcm9kdWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBGb290ZXIgYmxvY2sgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXItYmxvY2tcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZm9vdGVyPy5pc0VuYWJsZWQgJiYgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVR5cGUgPT09ICd3YWxsJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIGxlZnQtYm94XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1mb290ZXIgcmlnaHQtYm94XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPHA+e3sgZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoXCJmb290ZXJMYWJlbFwiKT8udmFsdWUgfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuXHJcbjxzZWN0aW9uIGlkPVwiZml4dHVyZS10ZW1wbGF0ZS1iYXNpYy1kZXRhaWxzLXNrZWxldG9uXCIgKm5nSWY9XCJpc1BhZ2VMb2FkaW5nXCI+XHJcbiAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuXHJcbjwhLS0gQ29tbW9uIGRpbWVuc2lvbiBhcnJvd3MgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGltZW5zaW9uQXJyb3dzIGxldC1sYWJlbD1cImxhYmVsXCIgbGV0LXZhbHVlPVwidmFsdWVcIj5cclxuICA8ZGl2IGNsYXNzPVwiaG9yaXpvbnRhbC1kaW1lbnNpb25cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJhcnJvdyBsZWZ0XCI+PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibGluZVwiPlxyXG4gICAgICA8c3Bhbj57eyB2YWx1ZSB9fSB7eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlV2lkdGg/LnVuaXQgfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJhcnJvdyByaWdodFwiPjwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtYmFzaWMtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2Utc3RvcmUtcGxhbm8vdGVtcGxhdGUtYmFzaWMtZGV0YWlscy90ZW1wbGF0ZS1iYXNpYy1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby90ZW1wbGF0ZS1iYXNpYy1kZXRhaWxzL3RlbXBsYXRlLWJhc2ljLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBS0wsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFckUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7OztBQWUxRixNQUFNLE9BQU8sNkJBQTZCO0lBb0I5QjtJQUNBO0lBQ0E7SUFyQlYsc0JBQXNCLENBQWdDO0lBQ3RELCtCQUErQixDQUFZO0lBRTNDLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFDOUIsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUVuQixXQUFXLENBQU07SUFDakIsUUFBUSxDQUFVO0lBQ2xCLFdBQVcs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QUFZO3dCQUNaLHFCQUFxQjt3QkFDckIsdUJBQXVCO3FCQUN4QixjQUNXLElBQUk7NklBU1AsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgRm9ybSxcclxuICBGb3JtQXJyYXksXHJcbiAgRm9ybUJ1aWxkZXIsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIEZvcm1zTW9kdWxlLFxyXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1zaGFyZWRcIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBGaXh0dXJlVGVtcGxhdGVEZXRhaWxzIH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyZmFjZXMvZml4dHVyZS10ZW1wbGF0ZS5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ291bnRlcklucHV0Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvdW50ZXItaW5wdXQvY291bnRlci1pbnB1dC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgZ2VuZXJhbFZhbGlkYXRvciB9IGZyb20gXCIuLi8uLi8uLi9mdW5jdGlvbnMvcGxhbm8uZnVuY3Rpb25cIjtcclxuaW1wb3J0IHsgRHJvcGRvd25JRiB9IGZyb20gXCIuLi8uLi8uLi9pbnRlcmZhY2VzL3BsYW5vLWdlbmVyYWwuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IFJlYWN0aXZlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL3JlYWN0aXZlLXNlbGVjdC9yZWFjdGl2ZS1zZWxlY3QuY29tcG9uZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItaW5zdGFuY2UtYmFzaWMtZGV0YWlsc1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vdGVtcGxhdGUtYmFzaWMtZGV0YWlscy5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vdGVtcGxhdGUtYmFzaWMtZGV0YWlscy5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIENvdW50ZXJJbnB1dENvbXBvbmVudCxcclxuICAgIFJlYWN0aXZlU2VsZWN0Q29tcG9uZW50LFxyXG4gIF0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEluc3RhbmNlQmFzaWNEZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM6IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMgfCBudWxsO1xyXG4gIGZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgaXNQYWdlTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBmaXh0dXJlRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIGVkaXRNb2RlOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGlzU3VibWl0dGVkOiBib29sZWFuO1xyXG4gIEBPdXRwdXQoKSBzdWJtaXRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBpbml0aWFsU3RhdGU6IGFueSA9IDA7XHJcblxyXG4gIHJlYWRvbmx5IHNoZWxmVHlwZXM6IERyb3Bkb3duSUZbXSA9IFtcclxuICAgIHsgbGFiZWw6IFwiU2hlbGZcIiwgdmFsdWU6IFwic2hlbGZcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJUcmF5XCIsIHZhbHVlOiBcInRyYXlcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJWTSBPbmx5XCIsIHZhbHVlOiBcInZtb25seVwiIH0sXHJcbiAgXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmVCdWlsZGVyU2VydmljZTogU3RvcmVCdWlsZGVyU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXNbXCJmaXh0dXJlRGF0YVwiXSkge1xyXG4gICAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMgPSBjaGFuZ2VzW1wiZml4dHVyZURhdGFcIl0uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1tcImVkaXRNb2RlXCJdKSB7XHJcbiAgICAgIHRoaXMuaXNFZGl0TW9kZSA9IGNoYW5nZXNbXCJlZGl0TW9kZVwiXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0/LmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzW1wiaXNTdWJtaXR0ZWRcIl0pIHtcclxuICAgICAgaWYgKGNoYW5nZXNbXCJpc1N1Ym1pdHRlZFwiXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICB0aGlzLnN1Ym1pdEZvcm0oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZUZvcm0oKSB7XHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgZGVzY3JpcHRpb246IFtcclxuICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmRlc2NyaXB0aW9uID8/IFwiXCIsXHJcbiAgICAgICAgZ2VuZXJhbFZhbGlkYXRvcigpLFxyXG4gICAgICBdLFxyXG4gICAgICBmaXh0dXJlQ2F0ZWdvcnk6IFt0aGlzLmdldEZpeHR1cmVMaWJyYXJ5KCksIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBoZWFkZXJMYWJlbDogW1xyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uaGVhZGVyPy5sYWJlbCxcclxuICAgICAgICBnZW5lcmFsVmFsaWRhdG9yKCksXHJcbiAgICAgIF0sXHJcbiAgICAgIHNoZWxmOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgICAgZm9vdGVyTGFiZWw6IFtcclxuICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZvb3Rlcj8ubGFiZWwsXHJcbiAgICAgICAgZ2VuZXJhbFZhbGlkYXRvcigpLFxyXG4gICAgICBdLFxyXG4gICAgICB0ZW1wbGF0ZUdyb3VwTmFtZTogW1xyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8udGVtcGxhdGVHcm91cE5hbWUsXHJcbiAgICAgICAgZ2VuZXJhbFZhbGlkYXRvcigpLFxyXG4gICAgICBdLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8uZm9yRWFjaCgoaSkgPT4gdGhpcy5hZGRTaGVsZihpKSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzRWRpdE1vZGUpXHJcbiAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybT8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFkZFNoZWxmKHNoZWxmPzogYW55KSB7XHJcbiAgICBjb25zdCBzaGVsZkdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHNoZWxmVHlwZTogW3NoZWxmPy5zaGVsZlR5cGUgPz8gXCJzaGVsZlwiXSxcclxuICAgICAgcHJvZHVjdFBlclNoZWxmOiBbc2hlbGY/LnByb2R1Y3RQZXJTaGVsZiA/PyAxXSxcclxuICAgICAgdHJheVJvd3M6IFtzaGVsZj8udHJheVJvd3MgPz8gMV0sXHJcbiAgICB9KTtcclxuICAgIHRoaXMudXBkYXRlUHJvZHVjdFBlclNoZWxmTWluVmFsaWRhdG9yKFxyXG4gICAgICBzaGVsZkdyb3VwLFxyXG4gICAgICBzaGVsZkdyb3VwLmdldChcInNoZWxmVHlwZVwiKT8udmFsdWVcclxuICAgICk7XHJcbiAgICB0aGlzLnNldHVwU2hlbGZUeXBlTGlzdGVuZXIoc2hlbGZHcm91cCk7XHJcbiAgICB0aGlzLnNoZWxmQXJyYXkucHVzaChzaGVsZkdyb3VwKTtcclxuICB9XHJcblxyXG4gIHNldHVwU2hlbGZUeXBlTGlzdGVuZXIoc2hlbGZHcm91cDogRm9ybUdyb3VwKSB7XHJcbiAgICBsZXQgcHJldmlvdXNUeXBlID0gc2hlbGZHcm91cC5nZXQoXCJzaGVsZlR5cGVcIik/LnZhbHVlO1xyXG4gICAgc2hlbGZHcm91cC5nZXQoXCJzaGVsZlR5cGVcIik/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHR5cGUpID0+IHtcclxuICAgICAgY29uc3QgcHJvZHVjdFBlclNoZWxmQ29udHJvbCA9IHNoZWxmR3JvdXAuZ2V0KFwicHJvZHVjdFBlclNoZWxmXCIpO1xyXG4gICAgICBpZiAodHlwZSA9PT0gXCJ2bW9ubHlcIikge1xyXG4gICAgICAgIHByb2R1Y3RQZXJTaGVsZkNvbnRyb2w/LnNldFZhbHVlKDApO1xyXG4gICAgICB9IGVsc2UgaWYgKHByZXZpb3VzVHlwZSA9PT0gXCJ2bW9ubHlcIikge1xyXG4gICAgICAgIHByb2R1Y3RQZXJTaGVsZkNvbnRyb2w/LnNldFZhbHVlKDEpO1xyXG4gICAgICB9XHJcbiAgICAgIHByZXZpb3VzVHlwZSA9IHR5cGU7XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZVByb2R1Y3RQZXJTaGVsZk1pblZhbGlkYXRvcihzaGVsZkdyb3VwLCB0eXBlKTtcclxuICAgICAgY29uc3Qgbm9PZlJvd3NDb250cm9sID0gc2hlbGZHcm91cC5nZXQoXCJub09mUm93c1wiKTtcclxuICAgICAgaWYgKHR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgbm9PZlJvd3NDb250cm9sPy5zZXRWYWxpZGF0b3JzKFtcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLm1pbigxKSxcclxuICAgICAgICBdKTtcclxuICAgICAgICBub09mUm93c0NvbnRyb2w/LnNldFZhbHVlKDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5vT2ZSb3dzQ29udHJvbD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgbm9PZlJvd3NDb250cm9sPy5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgfVxyXG4gICAgICBub09mUm93c0NvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUHJvZHVjdFBlclNoZWxmTWluVmFsaWRhdG9yKHNoZWxmR3JvdXA6IEZvcm1Hcm91cCwgc2hlbGZUeXBlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHByb2R1Y3RQZXJTaGVsZkNvbnRyb2wgPSBzaGVsZkdyb3VwLmdldChcInByb2R1Y3RQZXJTaGVsZlwiKTtcclxuICAgIGNvbnN0IG1pblZhbHVlID0gc2hlbGZUeXBlID09PSBcInZtb25seVwiID8gMCA6IDE7XHJcblxyXG4gICAgcHJvZHVjdFBlclNoZWxmQ29udHJvbD8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5taW4obWluVmFsdWUpXSk7XHJcbiAgICBwcm9kdWN0UGVyU2hlbGZDb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIC8vIElmIGluZGV4IGlzIG5vdCBnaXZlbiwgbGFzdCBzaGVsZiBzaG91bGQgYmUgcmVtb3ZlZFxyXG4gIHJlbW92ZVNoZWxmKGluZGV4OiBudW1iZXIgPSB0aGlzLnNoZWxmQXJyYXkuY29udHJvbHMubGVuZ3RoIC0gMSkge1xyXG4gICAgdGhpcy5zaGVsZkFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICB9XHJcblxyXG4gIGdldCBzaGVsZkFycmF5KCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldChcInNoZWxmXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldCB0b3RhbFByb2R1Y3RDYXBhY2l0eSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hlbGZBcnJheS5jb250cm9scy5yZWR1Y2UoKHRvdGFsLCBpdGVtKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvdW50ID0gaXRlbS5nZXQoXCJwcm9kdWN0UGVyU2hlbGZcIik/LnZhbHVlIHx8IDA7XHJcbiAgICAgIGNvbnN0IGlzVHJheSA9IGl0ZW0uZ2V0KFwic2hlbGZUeXBlXCIpPy52YWx1ZSA9PT0gXCJ0cmF5XCI7XHJcbiAgICAgIGNvbnN0IHJvd3MgPSBpdGVtLmdldChcInRyYXlSb3dzXCIpPy52YWx1ZSB8fCAxO1xyXG5cclxuICAgICAgLy8gSWYgdGhlIGZpeHR1cmUgaXMgYSBmbG9vciBwYW5lbCBvciB0cmF5LCB3ZSBuZWVkIHRvIG11bHRpcGx5IHRoZSBwcm9kdWN0IGNhcGFjaXR5IGJ5IHRoZSBudW1iZXIgb2Ygcm93c1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRvdGFsICtcclxuICAgICAgICAoaXNUcmF5IHx8IHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIlxyXG4gICAgICAgICAgPyBjb3VudCAqIHJvd3NcclxuICAgICAgICAgIDogY291bnQpXHJcbiAgICAgICk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdEZvcm0oKSB7XHJcbiAgICBpZiAoIXRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscykgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uaW52YWxpZCkge1xyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJGb3JtIGlzIGludmFsaWRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGVGaXh0dXJlRGF0YSgpO1xyXG4gICAgICBjb25zdCBwYXlsb2FkOiBGaXh0dXJlVGVtcGxhdGVEZXRhaWxzID0ge1xyXG4gICAgICAgIC4uLnRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLnZhbHVlLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgICAgLi4udGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLmhlYWRlcixcclxuICAgICAgICAgIGxhYmVsOiB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0udmFsdWUuaGVhZGVyTGFiZWwsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmb290ZXI6IHtcclxuICAgICAgICAgIC4uLnRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy5mb290ZXIsXHJcbiAgICAgICAgICBsYWJlbDogdGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLnZhbHVlLmZvb3RlckxhYmVsLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZml4dHVyZUNhcGFjaXR5OiB0aGlzLnRvdGFsUHJvZHVjdENhcGFjaXR5LFxyXG4gICAgICAgIHRlbXBsYXRlR3JvdXBOYW1lOlxyXG4gICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLnZhbHVlLnRlbXBsYXRlR3JvdXBOYW1lLFxyXG4gICAgICAgIHNoZWxmQ29uZmlnOiB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0udmFsdWUuc2hlbGYubWFwKFxyXG4gICAgICAgICAgKGVsZTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZS5zaGVsZk51bWJlciA9IGluZGV4ICsgMTtcclxuICAgICAgICAgICAgZWxlID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXM/LmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnPy5baW5kZXhdLFxyXG4gICAgICAgICAgICAgIC4uLmVsZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKCFlbGU/LnByb2R1Y3RCcmFuZE5hbWUpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcz8uZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/LltpbmRleCAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBlbGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXM/LmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnPy5baW5kZXggLSAxXSxcclxuICAgICAgICAgICAgICAgICAgLi4uZWxlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGVsZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApLFxyXG4gICAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoRGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHJlcSA9IHtcclxuICAgICAgICBmaXh0dXJlSWQ6IHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy5faWQsXHJcbiAgICAgICAgZGF0YTogcGF5bG9hZCxcclxuICAgICAgICAuLi4oIXRoaXMuZml4dHVyZURhdGE/LnRhc2tUeXBlICYmIHsgZWRpdE1vZGU6IHRoaXMuaXNFZGl0TW9kZSB9KSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS51cGRhdGVTdG9yZUZpeHR1cmUocmVxKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcz8uZGF0YT8uaWQpIHtcclxuICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBgRml4dHVyZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSBhbmQgdGVtcGxhdGUgaXMgY3JlYXRlZCA8YSBocmVmPSdtYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGUvYmFzaWMtZGV0YWlscz90ZW1wbGF0ZUlkPSR7cmVzLmRhdGEuaWR9JmlzRWRpdD1mYWxzZSc+VmlldzwvYT5gO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChtZXNzYWdlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KFwiRml4dHVyZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc3VibWl0RXZlbnQuZW1pdCh0cnVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRml4dHVyZURhdGEoKSB7XHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnZtQ29uZmlnPy5mb3JFYWNoKCh2bSkgPT4ge1xyXG4gICAgICBpZiAoKHZtPy5zdGFydFlQb3NpdGlvbiA/PyAxKSA+ICh0aGlzLnNoZWxmQXJyYXkubGVuZ3RoID8/IDEpKSB7XHJcbiAgICAgICAgdm0uc3RhcnRZUG9zaXRpb24gPSB0aGlzLnNoZWxmQXJyYXkubGVuZ3RoID8/IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICgodm0/LmVuZFlQb3NpdGlvbiA/PyAxKSA+ICh0aGlzLnNoZWxmQXJyYXkubGVuZ3RoID8/IDEpKSB7XHJcbiAgICAgICAgdm0uZW5kWVBvc2l0aW9uID0gdGhpcy5zaGVsZkFycmF5Lmxlbmd0aCA/PyAxO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFNoZWxmVGl0bGUoc2hlbGY6IEZvcm1Hcm91cCwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzaGVsZlR5cGUgPSBzaGVsZi5nZXQoXCJzaGVsZlR5cGVcIik/LnZhbHVlID8/IFwicGFuZWxcIjtcclxuICAgIGNvbnN0IGxhYmVsID1cclxuICAgICAgc2hlbGZUeXBlID09PSBcInZtb25seVwiID8gXCJ2bW9ubHkgU0hFTEZcIiA6IFN0cmluZyhzaGVsZlR5cGUpLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgcmV0dXJuIGAke2xhYmVsfSAke2luZGV4ICsgMX1gO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rml4dHVyZUxpYnJhcnkoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGQgPSB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM7XHJcbiAgICByZXR1cm4gYCR7ZD8uZml4dHVyZUNhdGVnb3J5fSAke2Q/LmZpeHR1cmVXaWR0aD8udmFsdWV9ICR7ZD8uZml4dHVyZVdpZHRoPy51bml0fWA7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3VibWl0RXZlbnQuZW1pdCh0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0udmFsdWUpO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cImZpeHR1cmUtdGVtcGxhdGUtYmFzaWMtZGV0YWlsc1wiICpuZ0lmPVwiIWlzUGFnZUxvYWRpbmdcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGdhcC00IGJ1aWxkZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xzIGNvbFwiIHN0eWxlPVwibWF4LXdpZHRoOiAzODBweDtcIj5cclxuICAgICAgPGgyPkZpeHR1cmUgRGV0YWlsczwvaDI+XHJcbiAgICAgIDxwPkNvbmZpZ3VyZSB5b3VyIGZpeHR1cmUgZGV0YWlscyBoZXJlPC9wPlxyXG5cclxuICAgICAgPHA+VGVtcGxhdGUgdW5pcXVlIElEOiB7eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy50ZW1wbGF0ZUluZGV4IH19PC9wPlxyXG5cclxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItNFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cImRlc2NyaXB0aW9uXCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5EZXNjcmlwdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgICA8dGV4dGFyZWEgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZGVzY3JpcHRpb25cIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/LnRvdWNoZWQgJiZcclxuICAgICAgICAgICAgICBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8uaW52YWxpZFxyXG4gICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/Lmhhc0Vycm9yKCd3aGl0ZXNwYWNlJylcIj5cclxuICAgICAgICAgICAgICBEZXNjcmlwdGlvbiBjYW5ub3QgYmUgb25seSB3aGl0ZXNwYWNlLlxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8uaGFzRXJyb3IoJ3RyaW1TcGFjZXMnKVwiPlxyXG4gICAgICAgICAgICAgIE5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbGxvd2VkLlxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItNFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cImZpeHR1cmVDYXRlZ29yeVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+U2VsZWN0IGZpeHR1cmUgdHlwZTwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiaGVhZGVyTGFiZWxcIiBmb3JtQ29udHJvbE5hbWU9XCJmaXh0dXJlQ2F0ZWdvcnlcIiByZWFkb25seSAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi00XCIgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmlzRW5hYmxlZFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cInRlbXBsYXRlR3JvdXBOYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5UZW1wbGF0ZSBHcm91cDwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwidGVtcGxhdGVHcm91cE5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJ0ZW1wbGF0ZUdyb3VwTmFtZVwiIC8+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ3RlbXBsYXRlR3JvdXBOYW1lJyk/LnRvdWNoZWQgJiZcclxuICAgICAgICAgICAgICBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgndGVtcGxhdGVHcm91cE5hbWUnKT8uaW52YWxpZFxyXG4gICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ3RlbXBsYXRlR3JvdXBOYW1lJyk/Lmhhc0Vycm9yKCd3aGl0ZXNwYWNlJylcIj5cclxuICAgICAgICAgICAgICBUZW1wbGF0ZSBncm91cCBjYW5ub3QgYmUgb25seSB3aGl0ZXNwYWNlLlxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgndGVtcGxhdGVHcm91cE5hbWUnKT8uaGFzRXJyb3IoJ3RyaW1TcGFjZXMnKVwiPlxyXG4gICAgICAgICAgICAgIE5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbGxvd2VkLlxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIiAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmhlYWRlcj8uaXNFbmFibGVkXCI+XHJcbiAgICAgICAgICA8bGFiZWwgZm9yPVwiaGVhZGVyTGFiZWxcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPkhlYWRlcjogbGFiZWw8L2xhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImhlYWRlckxhYmVsXCIgZm9ybUNvbnRyb2xOYW1lPVwiaGVhZGVyTGFiZWxcIiAvPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIGZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KCdoZWFkZXJMYWJlbCcpPy50b3VjaGVkICYmXHJcbiAgICAgICAgICAgICAgZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2hlYWRlckxhYmVsJyk/LmludmFsaWRcclxuICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KCdoZWFkZXJMYWJlbCcpPy5oYXNFcnJvcignd2hpdGVzcGFjZScpXCI+XHJcbiAgICAgICAgICAgICAgSGVhZGVyIGxhYmVsIGNhbm5vdCBiZSBvbmx5IHdoaXRlc3BhY2UuXHJcbiAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KCdoZWFkZXJMYWJlbCcpPy5oYXNFcnJvcigndHJpbVNwYWNlcycpXCI+XHJcbiAgICAgICAgICAgICAgTm8gbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlIGFsbG93ZWQuXHJcbiAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwic2hlbGZcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJzaGVsZlwiIGNsYXNzPVwibWItMlwiPkJvZHk6IFByb2R1Y3QgQ2FwYWNpdHkgYXQgZWFjaCBzaGVsZjwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsPk5vIG9mIHNoZWx2ZXM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyByb2xlPVwiYnV0dG9uXCIgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNSAxNFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIChjbGljayk9XCJyZW1vdmVTaGVsZigpO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMuNzYyOTQgN0gxMS45Mjk2XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHNoZWxmQXJyYXkubGVuZ3RoIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyByb2xlPVwiYnV0dG9uXCIgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNSAxNFwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIChjbGljayk9XCJhZGRTaGVsZigpO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcuMTUzODkgMi45MTY1VjExLjA4MzJNMy4wNzA1NiA2Ljk5OTg0SDExLjIzNzJcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc2hlbGYgb2Ygc2hlbGZBcnJheT8uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGVsZi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAge3sgc2hlbGYuZ2V0KFwic2hlbGZUeXBlXCIpPy52YWx1ZSA9PT0gJ3Ztb25seScgPyAnVk0gT05MWSBTSEVMRicgOiAoc2hlbGYuZ2V0KFwic2hlbGZUeXBlXCIpPy52YWx1ZSB8fCAncGFuZWwnKSB8IHVwcGVyY2FzZSB9fVxyXG4gICAgICAgICAgICAgICAgICB7eyBpICsgMSB9fVxyXG4gICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVNoZWxmKGkpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwic2hlbGZBcnJheS5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTggNkw2IDE4TTYgNkwxOCAxOFwiIHN0cm9rZT1cIiM5OEEyQjNcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIiBbZGF0YV09XCJzaGVsZlR5cGVzXCJcclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNoZWxmVHlwZVwiPlxyXG4gICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hlbGYuZ2V0KCdzaGVsZlR5cGUnKT8udmFsdWUgPT09ICd0cmF5J1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtLTBcIj5ObyBvZiBSb3dzPC9wPlxyXG4gICAgICAgICAgICAgICAgPGNvdW50ZXItaW5wdXQgc3R5bGU9XCJ3aWR0aDogNDAlXCIgZm9ybUNvbnRyb2xOYW1lPVwidHJheVJvd3NcIiBbc3RlcF09XCIxXCIgcGxhY2Vob2xkZXI9XCIwXCI+PC9jb3VudGVyLWlucHV0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaGVsZi5nZXQoJ3NoZWxmVHlwZScpPy52YWx1ZSAhPT0gJ3Ztb25seSdcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5Qcm9kdWN0IGNhcGFjaXR5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxjb3VudGVyLWlucHV0IHN0eWxlPVwid2lkdGg6IDQwJVwiIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RQZXJTaGVsZlwiIFtzdGVwXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjBcIj48L2NvdW50ZXItaW5wdXQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBzaGVsZi5nZXQoJ3NoZWxmVHlwZScpPy52YWx1ZSAhPT0gJ3Ztb25seScgJiZcclxuICAgICAgICAgICAgICAgICAgc2hlbGYuZ2V0KCdwcm9kdWN0UGVyU2hlbGYnKT8udG91Y2hlZCAmJlxyXG4gICAgICAgICAgICAgICAgICBzaGVsZi5nZXQoJ3Byb2R1Y3RQZXJTaGVsZicpPy5lcnJvcnNcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cInNoZWxmLmdldCgncHJvZHVjdFBlclNoZWxmJyk/Lmhhc0Vycm9yKCdtaW4nKVwiPlxyXG4gICAgICAgICAgICAgICAgICBQcm9kdWN0IGNhcGFjaXR5IG11c3QgYmUgYXQgbGVhc3RcclxuICAgICAgICAgICAgICAgICAge3sgc2hlbGYuZ2V0KFwic2hlbGZUeXBlXCIpPy52YWx1ZSA9PT0gXCJ2bW9ubHlcIiA/IFwiMFwiIDogXCIxXCIgfX0uXHJcbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi00XCJcclxuICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZm9vdGVyPy5pc0VuYWJsZWQgJiYgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVR5cGUgPT09ICd3YWxsJ1wiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cImZvb3RlckxhYmVsXCIgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5Gb290ZXI6IGxhYmVsPC9sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJmb290ZXJMYWJlbFwiIGZvcm1Db250cm9sTmFtZT1cImZvb3RlckxhYmVsXCIgLz5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnZm9vdGVyTGFiZWwnKT8udG91Y2hlZCAmJlxyXG4gICAgICAgICAgICAgIGZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KCdmb290ZXJMYWJlbCcpPy5pbnZhbGlkXHJcbiAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnZm9vdGVyTGFiZWwnKT8uaGFzRXJyb3IoJ3doaXRlc3BhY2UnKVwiPlxyXG4gICAgICAgICAgICAgIEZvb3RlciBsYWJlbCBjYW5ub3QgYmUgb25seSB3aGl0ZXNwYWNlLlxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnZm9vdGVyTGFiZWwnKT8uaGFzRXJyb3IoJ3RyaW1TcGFjZXMnKVwiPlxyXG4gICAgICAgICAgICAgIE5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbGxvd2VkLlxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbHMgY29sXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgIDwhLS0gVmVydGljYWwgYXJyb3dzIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJ0aWNhbC1kaW1lbnNpb25cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdyB1cFwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmVcIj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZUxlbmd0aD8udmFsdWUgfX17eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlTGVuZ3RoPy51bml0IH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3cgZG93blwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPCEtLSBIb3Jpem9udGFsIGFycm93cyAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICBkaW1lbnNpb25BcnJvd3M7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVXaWR0aD8udmFsdWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFwiPjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWxsLXZpZXdwb3J0XCI+XHJcbiAgICAgICAgICAgIDwhLS0gSGVhZGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWJsb2NrXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmhlYWRlcj8uaXNFbmFibGVkICYmIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVUeXBlID09PSAnd2FsbCdcIj5cclxuICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIHt7IGZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KFwiaGVhZGVyTGFiZWxcIik/LnZhbHVlIH19XHJcbiAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQm9keSBibG9jayAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvZHktYmxvY2tcIiAqbmdJZj1cInNoZWxmQXJyYXkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2hlbGZBcnJheS5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgQGlmKGl0ZW0uZ2V0KCdzaGVsZlR5cGUnKT8udmFsdWUgPT09J3RyYXknKXtcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLmdldCgndHJheVJvd3MnKT8udmFsdWUpO2xldCBqPWluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHJheSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0uZ2V0KCdwcm9kdWN0UGVyU2hlbGYnKT8udmFsdWUpXCIgY2xhc3M9XCJwcm9kdWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmxvY2sgc2hlbGZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0uZ2V0KCdwcm9kdWN0UGVyU2hlbGYnKT8udmFsdWUpXCIgY2xhc3M9XCJwcm9kdWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRm9vdGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWJsb2NrXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZvb3Rlcj8uaXNFbmFibGVkICYmIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVUeXBlID09PSAnd2FsbCdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWZvb3RlciBsZWZ0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIHJpZ2h0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxwPnt7IGZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KFwiZm9vdGVyTGFiZWxcIik/LnZhbHVlIH19PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcblxyXG48c2VjdGlvbiBpZD1cImZpeHR1cmUtdGVtcGxhdGUtYmFzaWMtZGV0YWlscy1za2VsZXRvblwiICpuZ0lmPVwiaXNQYWdlTG9hZGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcblxyXG48IS0tIENvbW1vbiBkaW1lbnNpb24gYXJyb3dzIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpbWVuc2lvbkFycm93cyBsZXQtbGFiZWw9XCJsYWJlbFwiIGxldC12YWx1ZT1cInZhbHVlXCI+XHJcbiAgPGRpdiBjbGFzcz1cImhvcml6b250YWwtZGltZW5zaW9uXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXJyb3cgbGVmdFwiPjwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImxpbmVcIj5cclxuICAgICAgPHNwYW4+e3sgdmFsdWUgfX0ge3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVdpZHRoPy51bml0IH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXJyb3cgcmlnaHRcIj48L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=