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.
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +39 -19
- package/esm2022/lib/components/create-fixture/create-fixture.component.mjs +233 -138
- package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +4 -2
- package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +4 -2
- package/esm2022/lib/components/fixture-template/template-basic-details/template-basic-details.component.mjs +40 -4
- package/esm2022/lib/components/fixture-template/template-products/template-products.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-summary/template-summary.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-vms/template-vms.component.mjs +108 -79
- package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +7 -3
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +4 -2
- package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +27 -4
- package/esm2022/lib/components/manage-store-plano/template-products/template-products.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/template-vms/template-vms.component.mjs +10 -14
- package/esm2022/lib/components/manage-store-plano/verification-feedback/editable-fixture/editable-fixture.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +3 -3
- package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +4 -2
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.mjs +11 -5
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +14 -9
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.mjs +39 -7
- package/esm2022/lib/components/planogram/merch-compliance/zone-products/zone-products.component.mjs +18 -5
- package/esm2022/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.mjs +68 -0
- package/esm2022/lib/components/planogram/plano-analytics/date-range-picker/date-range-picker.component.mjs +5 -5
- package/esm2022/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.mjs +649 -0
- package/esm2022/lib/components/planogram/plano-analytics/plano-analytics.component.mjs +1197 -25
- package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +14 -7
- package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +8 -4
- package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +17 -9
- package/esm2022/lib/components/planogram/plano-table/plano-table.component.mjs +3 -3
- package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -2
- package/esm2022/lib/components/store-plano/store-plano.component.mjs +4 -2
- package/esm2022/lib/interfaces/fixture-library.interface.mjs +1 -1
- package/esm2022/lib/services/store-builder.service.mjs +4 -1
- package/esm2022/lib/tango-store-builder.module.mjs +8 -2
- package/fesm2022/tango-app-ui-store-builder.mjs +2996 -834
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/create-fixture/create-fixture.component.d.ts +15 -14
- package/lib/components/fixture-template/template-basic-details/template-basic-details.component.d.ts +2 -0
- package/lib/components/fixture-template/template-vms/template-vms.component.d.ts +12 -12
- package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +2 -2
- package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +4 -4
- package/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.d.ts +2 -0
- package/lib/components/manage-store-plano/template-vms/template-vms.component.d.ts +0 -1
- package/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.d.ts +4 -2
- package/lib/components/planogram/merch-compliance/product-locator/product-locator.component.d.ts +3 -2
- package/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.d.ts +10 -3
- package/lib/components/planogram/merch-compliance/zone-products/zone-products.component.d.ts +4 -2
- package/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.d.ts +25 -0
- package/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.d.ts +94 -0
- package/lib/components/planogram/plano-analytics/plano-analytics.component.d.ts +76 -3
- package/lib/components/planogram/plano-details-parent/plano-details-parent.component.d.ts +3 -2
- package/lib/interfaces/fixture-library.interface.d.ts +1 -1
- package/lib/services/store-builder.service.d.ts +1 -0
- package/lib/tango-store-builder.module.d.ts +26 -24
- package/package.json +1 -1
|
@@ -30,6 +30,7 @@ export class TemplateBasicDetailsComponent {
|
|
|
30
30
|
shelfTypes = [
|
|
31
31
|
{ label: "Shelf", value: "shelf" },
|
|
32
32
|
{ label: "Tray", value: "tray" },
|
|
33
|
+
{ label: "VM Only", value: "vmonly" },
|
|
33
34
|
];
|
|
34
35
|
destroy$ = new Subject();
|
|
35
36
|
constructor(fb, route, ps, toast, ngbModal, router, pageInfo) {
|
|
@@ -114,11 +115,46 @@ export class TemplateBasicDetailsComponent {
|
|
|
114
115
|
addShelf(shelf) {
|
|
115
116
|
const shelfGroup = this.fb.group({
|
|
116
117
|
shelfType: [shelf?.shelfType ?? "shelf"],
|
|
117
|
-
productPerShelf: [shelf?.productPerShelf ?? 1
|
|
118
|
+
productPerShelf: [shelf?.productPerShelf ?? 1],
|
|
118
119
|
trayRows: [shelf?.trayRows ?? 1],
|
|
119
120
|
});
|
|
121
|
+
this.updateProductPerShelfMinValidator(shelfGroup, shelfGroup.get("shelfType")?.value);
|
|
122
|
+
this.setupShelfTypeListener(shelfGroup);
|
|
120
123
|
this.shelfArray.push(shelfGroup);
|
|
121
124
|
}
|
|
125
|
+
setupShelfTypeListener(shelfGroup) {
|
|
126
|
+
let previousType = shelfGroup.get("shelfType")?.value;
|
|
127
|
+
shelfGroup.get("shelfType")?.valueChanges.subscribe((type) => {
|
|
128
|
+
const productPerShelfControl = shelfGroup.get("productPerShelf");
|
|
129
|
+
if (type === "vmonly") {
|
|
130
|
+
productPerShelfControl?.setValue(0);
|
|
131
|
+
}
|
|
132
|
+
else if (previousType === "vmonly") {
|
|
133
|
+
productPerShelfControl?.setValue(1);
|
|
134
|
+
}
|
|
135
|
+
previousType = type;
|
|
136
|
+
this.updateProductPerShelfMinValidator(shelfGroup, type);
|
|
137
|
+
const noOfRowsControl = shelfGroup.get("trayRows");
|
|
138
|
+
if (type === "tray") {
|
|
139
|
+
noOfRowsControl?.setValidators([
|
|
140
|
+
Validators.required,
|
|
141
|
+
Validators.min(1),
|
|
142
|
+
]);
|
|
143
|
+
noOfRowsControl?.setValue(1);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
noOfRowsControl?.clearValidators();
|
|
147
|
+
noOfRowsControl?.setValue(null);
|
|
148
|
+
}
|
|
149
|
+
noOfRowsControl?.updateValueAndValidity();
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
updateProductPerShelfMinValidator(shelfGroup, shelfType) {
|
|
153
|
+
const productPerShelfControl = shelfGroup.get("productPerShelf");
|
|
154
|
+
const minValue = shelfType === "vmonly" ? 0 : 1;
|
|
155
|
+
productPerShelfControl?.setValidators([Validators.min(minValue)]);
|
|
156
|
+
productPerShelfControl?.updateValueAndValidity({ emitEvent: false });
|
|
157
|
+
}
|
|
122
158
|
// If index is not given, last shelf should be removed
|
|
123
159
|
removeShelf(index = this.shelfArray.controls.length - 1) {
|
|
124
160
|
this.shelfArray.removeAt(index);
|
|
@@ -248,7 +284,7 @@ export class TemplateBasicDetailsComponent {
|
|
|
248
284
|
});
|
|
249
285
|
}
|
|
250
286
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TemplateBasicDetailsComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ActivatedRoute }, { token: i3.PlanoDataService }, { token: i4.ToastService }, { token: i5.NgbModal }, { token: i2.Router }, { token: i6.PageInfoService }], target: i0.ɵɵFactoryTarget.Component });
|
|
251
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TemplateBasicDetailsComponent, isStandalone: true, selector: "lib-template-basic-details", 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\">\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\r\n *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('description')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('description')?.invalid\r\n \"\r\n >\r\n <small class=\"text-danger\" *ngIf=\"fixtureTemplateBasicDetailsForm.get('description')?.hasError('whitespace')\">\r\n Description cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\" *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\r\n class=\"form-group mb-4\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\"\r\n >\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\r\n *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('headerLabel')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('headerLabel')?.invalid\r\n \"\r\n >\r\n <small class=\"text-danger\" *ngIf=\"fixtureTemplateBasicDetailsForm.get('headerLabel')?.hasError('whitespace')\">\r\n Header label cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\" *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 <div class=\"mb-3\">\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\" [class.disabled-click]=\"!isEditMode\">\r\n <label>No of shelves</label>\r\n <div class=\"counter-container\">\r\n <svg\r\n role=\"button\"\r\n width=\"15\"\r\n height=\"14\"\r\n viewBox=\"0 0 15 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n (click)=\"removeShelf();\"\r\n >\r\n <path\r\n d=\"M3.76294 7H11.9296\"\r\n stroke=\"#667085\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <span>{{ shelfArray.length }}</span>\r\n <svg\r\n role=\"button\"\r\n width=\"15\"\r\n height=\"14\"\r\n viewBox=\"0 0 15 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n (click)=\"addShelf();\"\r\n >\r\n <path\r\n d=\"M7.15389 2.9165V11.0832M3.07056 6.99984H11.2372\"\r\n stroke=\"#667085\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <label for=\"shelf\" class=\"mb-2\">Body: Product Capacity at each shelf</label>\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\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n (click)=\"removeShelf(i); \"\r\n class=\"cursor-pointer\"\r\n *ngIf=\"shelfArray.length > 1\"\r\n >\r\n <path\r\n d=\"M18 6L6 18M6 6L18 18\"\r\n stroke=\"#98A2B3\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <lib-reactive-select\r\n [idField]=\"'value'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"shelfTypes\"\r\n formControlName=\"shelfType\"\r\n >\r\n </lib-reactive-select>\r\n <div\r\n *ngIf=\"shelf.get('shelfType')?.value === 'tray'\"\r\n class=\"d-flex justify-content-between align-items-center mb-2 mt-2\"\r\n >\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 class=\"counter-container\" style=\"width: 40%; min-height: 35px\"> -->\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\" 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\r\n class=\"form-group mb-4\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\"\r\n >\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\r\n *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('footerLabel')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('footerLabel')?.invalid\r\n \"\r\n >\r\n <small class=\"text-danger\" *ngIf=\"fixtureTemplateBasicDetailsForm.get('footerLabel')?.hasError('whitespace')\">\r\n Footer label cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\" *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-8\">\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\r\n *ngTemplateOutlet=\"\r\n dimensionArrows;\r\n context: {\r\n value: fixtureTemplateDetails?.fixtureWidth?.value\r\n }\r\n \"\r\n ></ng-container>\r\n\r\n <div class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div\r\n class=\"header-block\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\"\r\n >\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\"></div>\r\n </div>\r\n }@else {\r\n <div class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.get('trayRows')?.value)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.get('productPerShelf')?.value)\" class=\"product\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div\r\n class=\"footer-block\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\"\r\n >\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>\r\n", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7!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: "component", type: CounterInputComponent, selector: "counter-input", inputs: ["step", "placeholder", "max"], outputs: ["onIncrement", "onDecrement"] }, { 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: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i7.UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: NgbAccordionModule }, { kind: "component", type: ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "subTextField", "searchField", "label", "data", "action", "search", "prefix", "actionLabel"], outputs: ["actionClick"] }] });
|
|
287
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TemplateBasicDetailsComponent, isStandalone: true, selector: "lib-template-basic-details", 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\">\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\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\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 <div class=\"mb-3\">\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\" [class.disabled-click]=\"!isEditMode\">\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 <label for=\"shelf\" class=\"mb-2\">Body: Product Capacity at each shelf</label>\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\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\r\n <ng-container *ngIf=\"shelf.get('trayRows')?.touched && shelf.get('trayRows')?.errors\">\r\n <small *ngIf=\"shelf.get('trayRows')?.hasError('min')\" class=\"text-danger\">\r\n Must be at least 1 row.\r\n </small>\r\n </ng-container>\r\n </div>\r\n\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\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 1\r\n </small>\r\n </ng-container>\r\n\r\n <!-- <div *ngIf=\"shelf.get('shelfType')?.value === 'tray'\"\r\n class=\"d-flex justify-content-between align-items-center mb-2 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 {{ 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-8\">\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)\" 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: "component", type: CounterInputComponent, selector: "counter-input", inputs: ["step", "placeholder", "max"], outputs: ["onIncrement", "onDecrement"] }, { 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: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i7.UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: NgbAccordionModule }, { kind: "component", type: ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "subTextField", "searchField", "label", "data", "action", "search", "prefix", "actionLabel"], outputs: ["actionClick"] }] });
|
|
252
288
|
}
|
|
253
289
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TemplateBasicDetailsComponent, decorators: [{
|
|
254
290
|
type: Component,
|
|
@@ -259,6 +295,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
259
295
|
CommonModule,
|
|
260
296
|
NgbAccordionModule,
|
|
261
297
|
ReactiveSelectComponent,
|
|
262
|
-
], template: "<section id=\"fixture-template-basic-details\" *ngIf=\"!isPageLoading\">\r\n <div class=\"row gap-4 builder\">\r\n <div class=\"cols col\">\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\r\n *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('description')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('description')?.invalid\r\n \"\r\n >\r\n <small class=\"text-danger\" *ngIf=\"fixtureTemplateBasicDetailsForm.get('description')?.hasError('whitespace')\">\r\n Description cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\" *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\r\n class=\"form-group mb-4\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\"\r\n >\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\r\n *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('headerLabel')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('headerLabel')?.invalid\r\n \"\r\n >\r\n <small class=\"text-danger\" *ngIf=\"fixtureTemplateBasicDetailsForm.get('headerLabel')?.hasError('whitespace')\">\r\n Header label cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\" *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 <div class=\"mb-3\">\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\" [class.disabled-click]=\"!isEditMode\">\r\n <label>No of shelves</label>\r\n <div class=\"counter-container\">\r\n <svg\r\n role=\"button\"\r\n width=\"15\"\r\n height=\"14\"\r\n viewBox=\"0 0 15 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n (click)=\"removeShelf();\"\r\n >\r\n <path\r\n d=\"M3.76294 7H11.9296\"\r\n stroke=\"#667085\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <span>{{ shelfArray.length }}</span>\r\n <svg\r\n role=\"button\"\r\n width=\"15\"\r\n height=\"14\"\r\n viewBox=\"0 0 15 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n (click)=\"addShelf();\"\r\n >\r\n <path\r\n d=\"M7.15389 2.9165V11.0832M3.07056 6.99984H11.2372\"\r\n stroke=\"#667085\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <label for=\"shelf\" class=\"mb-2\">Body: Product Capacity at each shelf</label>\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\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n (click)=\"removeShelf(i); \"\r\n class=\"cursor-pointer\"\r\n *ngIf=\"shelfArray.length > 1\"\r\n >\r\n <path\r\n d=\"M18 6L6 18M6 6L18 18\"\r\n stroke=\"#98A2B3\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <lib-reactive-select\r\n [idField]=\"'value'\"\r\n [nameField]=\"'label'\"\r\n [data]=\"shelfTypes\"\r\n formControlName=\"shelfType\"\r\n >\r\n </lib-reactive-select>\r\n <div\r\n *ngIf=\"shelf.get('shelfType')?.value === 'tray'\"\r\n class=\"d-flex justify-content-between align-items-center mb-2 mt-2\"\r\n >\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 class=\"counter-container\" style=\"width: 40%; min-height: 35px\"> -->\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\" 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\r\n class=\"form-group mb-4\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\"\r\n >\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\r\n *ngIf=\"\r\n fixtureTemplateBasicDetailsForm.get('footerLabel')?.touched &&\r\n fixtureTemplateBasicDetailsForm.get('footerLabel')?.invalid\r\n \"\r\n >\r\n <small class=\"text-danger\" *ngIf=\"fixtureTemplateBasicDetailsForm.get('footerLabel')?.hasError('whitespace')\">\r\n Footer label cannot be only whitespace.\r\n </small>\r\n <small class=\"text-danger\" *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-8\">\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\r\n *ngTemplateOutlet=\"\r\n dimensionArrows;\r\n context: {\r\n value: fixtureTemplateDetails?.fixtureWidth?.value\r\n }\r\n \"\r\n ></ng-container>\r\n\r\n <div class=\"wall-viewport\">\r\n <!-- Header block -->\r\n <div\r\n class=\"header-block\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\"\r\n >\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\"></div>\r\n </div>\r\n }@else {\r\n <div class=\"block\">\r\n <div *ngFor=\"let product of [].constructor(item.get('trayRows')?.value)\" class=\"tray mb-3\">\r\n <div *ngFor=\"let product of [].constructor(item.get('productPerShelf')?.value)\" class=\"product\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Footer block -->\r\n <div\r\n class=\"footer-block\"\r\n *ngIf=\"fixtureTemplateDetails?.footer?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\"\r\n >\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>\r\n", styles: [".header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7!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"] }]
|
|
298
|
+
], template: "<section id=\"fixture-template-basic-details\" *ngIf=\"!isPageLoading\">\r\n <div class=\"row gap-4 builder\">\r\n <div class=\"cols col\">\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\"\r\n *ngIf=\"fixtureTemplateDetails?.header?.isEnabled && fixtureTemplateDetails?.fixtureType === 'wall'\">\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 <div class=\"mb-3\">\r\n <div class=\"d-flex justify-content-between align-items-center mt-3\" [class.disabled-click]=\"!isEditMode\">\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 <label for=\"shelf\" class=\"mb-2\">Body: Product Capacity at each shelf</label>\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\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\r\n <ng-container *ngIf=\"shelf.get('trayRows')?.touched && shelf.get('trayRows')?.errors\">\r\n <small *ngIf=\"shelf.get('trayRows')?.hasError('min')\" class=\"text-danger\">\r\n Must be at least 1 row.\r\n </small>\r\n </ng-container>\r\n </div>\r\n\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\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 1\r\n </small>\r\n </ng-container>\r\n\r\n <!-- <div *ngIf=\"shelf.get('shelfType')?.value === 'tray'\"\r\n class=\"d-flex justify-content-between align-items-center mb-2 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 {{ 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-8\">\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)\" 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"] }]
|
|
263
299
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ActivatedRoute }, { type: i3.PlanoDataService }, { type: i4.ToastService }, { type: i5.NgbModal }, { type: i2.Router }, { type: i6.PageInfoService }] });
|
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtYmFzaWMtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9maXh0dXJlLXRlbXBsYXRlL3RlbXBsYXRlLWJhc2ljLWRldGFpbHMvdGVtcGxhdGUtYmFzaWMtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9maXh0dXJlLXRlbXBsYXRlL3RlbXBsYXRlLWJhc2ljLWRldGFpbHMvdGVtcGxhdGUtYmFzaWMtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBSUwsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhFLE9BQU8sRUFBRSxrQkFBa0IsRUFBWSxNQUFNLDRCQUE0QixDQUFDO0FBRTFFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBR25ILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVyRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7Ozs7Ozs7O0FBZ0IxRixNQUFNLE9BQU8sNkJBQTZCO0lBYzlCO0lBQ0E7SUFDQTtJ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Q0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNwRixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsRUFBRSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQztZQUNsQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsc0JBQXNCLENBQUMsS0FBSztZQUN2QyxZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXZRVSw2QkFBNkI7NEZBQTdCLDZCQUE2QixzRkNyQzFDLDQyWUF5UkEsazNRRDVQSSxxQkFBcUIsMElBQ3JCLFdBQVcsMnBCQUNYLG1CQUFtQiw2aEJBQ25CLFlBQVksbWVBQ1osa0JBQWtCLCtCQUNsQix1QkFBdUI7OzRGQUdkLDZCQUE2QjtrQkFkekMsU0FBUzsrQkFDRSw0QkFBNEIsY0FHMUIsSUFBSSxXQUNQO3dCQUNQLHFCQUFxQjt3QkFDckIsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLFlBQVk7d0JBQ1osa0JBQWtCO3dCQUNsQix1QkFBdUI7cUJBQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgRm9ybUFycmF5LFxyXG4gIEZvcm1CdWlsZGVyLFxyXG4gIEZvcm1Hcm91cCxcclxuICBGb3Jtc01vZHVsZSxcclxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLXNoYXJlZFwiO1xyXG5pbXBvcnQgeyBOZ2JBY2NvcmRpb25Nb2R1bGUsIE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMgfSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJmYWNlcy9maXh0dXJlLXRlbXBsYXRlLmludGVyZmFjZVwiO1xyXG5pbXBvcnQgeyBDb21wbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9wb3B1cHMvY29tcGxldGUtY29uZmlybWF0aW9uL2NvbXBsZXRlLWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUGxhbm9EYXRhU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9wbGFuby1kYXRhLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1nbG9iYWxcIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBDb3VudGVySW5wdXRDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY291bnRlci1pbnB1dC9jb3VudGVyLWlucHV0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBnZW5lcmFsVmFsaWRhdG9yIH0gZnJvbSBcIi4uLy4uLy4uL2Z1bmN0aW9ucy9wbGFuby5mdW5jdGlvblwiO1xyXG5pbXBvcnQgeyBEcm9wZG93bklGIH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyZmFjZXMvcGxhbm8tZ2VuZXJhbC5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgUmVhY3RpdmVTZWxlY3RDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vcmVhY3RpdmUtc2VsZWN0L3JlYWN0aXZlLXNlbGVjdC5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi10ZW1wbGF0ZS1iYXNpYy1kZXRhaWxzXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi90ZW1wbGF0ZS1iYXNpYy1kZXRhaWxzLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi90ZW1wbGF0ZS1iYXNpYy1kZXRhaWxzLmNvbXBvbmVudC5zY3NzXCIsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb3VudGVySW5wdXRDb21wb25lbnQsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBOZ2JBY2NvcmRpb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZVNlbGVjdENvbXBvbmVudCxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVCYXNpY0RldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgZml4dHVyZVRlbXBsYXRlRGV0YWlsczogRml4dHVyZVRlbXBsYXRlRGV0YWlscyB8IG51bGw7XHJcbiAgZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc0VkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcmVhZG9ubHkgc2hlbGZUeXBlczogRHJvcGRvd25JRltdID0gW1xyXG4gICAgeyBsYWJlbDogXCJTaGVsZlwiLCB2YWx1ZTogXCJzaGVsZlwiIH0sXHJcbiAgICB7IGxhYmVsOiBcIlRyYXlcIiwgdmFsdWU6IFwidHJheVwiIH0sXHJcbiAgXTtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcHM6IFBsYW5vRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nYk1vZGFsOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHBhZ2VJbmZvOiBQYWdlSW5mb1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRQYWdlRGF0YSgpO1xyXG5cclxuICAgIHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRGV0YWlsc1xyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgZmlsdGVyKChkYXRhKSA9PiAhZGF0YT8uaWdub3JlVXBkYXRlKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0VkaXRNb2RlID0gcGFyYW1zLmdldChcImlzRWRpdFwiKSA9PT0gXCJ0cnVlXCI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybT8uZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRm9ybSRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLnN1Ym1pdEZvcm0oZGF0YSkpO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFnZURhdGEoKSB7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldFRpdGxlKFwiQmFzaWMgZGV0YWlsc1wiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiUGxhbm9ncmFtXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiXCIsIHBhdGg6IFwiXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IHRydWUgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkZpeHR1cmUgVGVtcGxhdGVcIixcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGVzXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAgeyB0aXRsZTogXCJcIiwgcGF0aDogXCJcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplRm9ybSgpIHtcclxuICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBkZXNjcmlwdGlvbjogW1xyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZGVzY3JpcHRpb24gPz8gXCJcIixcclxuICAgICAgICBnZW5lcmFsVmFsaWRhdG9yKCksXHJcbiAgICAgIF0sXHJcbiAgICAgIGZpeHR1cmVDYXRlZ29yeTogW3RoaXMuZ2V0Rml4dHVyZUxpYnJhcnkoKSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGhlYWRlckxhYmVsOiBbXHJcbiAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmxhYmVsLFxyXG4gICAgICAgIGdlbmVyYWxWYWxpZGF0b3IoKSxcclxuICAgICAgXSxcclxuICAgICAgc2hlbGY6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBmb290ZXJMYWJlbDogW1xyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZm9vdGVyPy5sYWJlbCxcclxuICAgICAgICBnZW5lcmFsVmFsaWRhdG9yKCksXHJcbiAgICAgIF0sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnPy5mb3JFYWNoKChpKSA9PiB0aGlzLmFkZFNoZWxmKGkpKTtcclxuXHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0udmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgzMDApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHYpID0+IHRoaXMudXBkYXRlQ2hhbmdlc1RvTG9jYWwodikpO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0VkaXRNb2RlKVxyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRXJyb3JUYWJzLmJhc2ljRGV0YWlscykge1xyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkU2hlbGYoc2hlbGY/OiBhbnkpIHtcclxuICAgIGNvbnN0IHNoZWxmR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgc2hlbGZUeXBlOiBbc2hlbGY/LnNoZWxmVHlwZSA/PyBcInNoZWxmXCJdLFxyXG4gICAgICBwcm9kdWN0UGVyU2hlbGY6IFtzaGVsZj8ucHJvZHVjdFBlclNoZWxmID8/IDEsIFtWYWxpZGF0b3JzLm1pbigxKV1dLFxyXG4gICAgICB0cmF5Um93czogW3NoZWxmPy50cmF5Um93cyA/PyAxXSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2hlbGZBcnJheS5wdXNoKHNoZWxmR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgLy8gSWYgaW5kZXggaXMgbm90IGdpdmVuLCBsYXN0IHNoZWxmIHNob3VsZCBiZSByZW1vdmVkXHJcbiAgcmVtb3ZlU2hlbGYoaW5kZXg6IG51bWJlciA9IHRoaXMuc2hlbGZBcnJheS5jb250cm9scy5sZW5ndGggLSAxKSB7XHJcbiAgICB0aGlzLnNoZWxmQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNoZWxmQXJyYXkoKTogRm9ybUFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KFwic2hlbGZcIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRvdGFsUHJvZHVjdENhcGFjaXR5KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5zaGVsZkFycmF5LmNvbnRyb2xzLnJlZHVjZSgodG90YWwsIGl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgY291bnQgPSBpdGVtLmdldChcInByb2R1Y3RQZXJTaGVsZlwiKT8udmFsdWUgfHwgMDtcclxuICAgICAgY29uc3QgaXNUcmF5ID0gaXRlbS5nZXQoXCJzaGVsZlR5cGVcIik/LnZhbHVlID09PSBcInRyYXlcIjtcclxuICAgICAgY29uc3Qgcm93cyA9IGl0ZW0uZ2V0KFwidHJheVJvd3NcIik/LnZhbHVlIHx8IDE7XHJcblxyXG4gICAgICAvLyBJZiB0aGUgZml4dHVyZSBpcyBhIGZsb29yIHBhbmVsIG9yIHRyYXksIHdlIG5lZWQgdG8gbXVsdGlwbHkgdGhlIHByb2R1Y3QgY2FwYWNpdHkgYnkgdGhlIG51bWJlciBvZiByb3dzXHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgdG90YWwgK1xyXG4gICAgICAgIChpc1RyYXkgfHwgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiXHJcbiAgICAgICAgICA/IGNvdW50ICogcm93c1xyXG4gICAgICAgICAgOiBjb3VudClcclxuICAgICAgKTtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29uZmlybUNvbXBsZXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubmdiTW9kYWwub3BlbihDb21wbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgIH0pO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSBcIkNvbXBsZXRlIHRlbXBsYXRlXCI7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9XHJcbiAgICAgIFwiVGVtcGxhdGUgaXMgbm93IHJlYWR5IHRvIGFzc2lnbiBpdCB0byB0aGUgc3RvcmUgYnV0IHN0aWxsIHlvdSBjYW4gY29tZSBhZ2FpbiBhbnkgdGltZSBhbmQgZWRpdCB0aGlzIHRlbXBsYXRlLlwiO1xyXG4gICAgLy8gbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2Uubm90ZSA9ICdZb3UgY2FuXFwndCBlZGl0IGl0IG9uY2UgYXNzaWduZWQgdG8gdGhlIHRlbXBsYXRlLic7XHJcblxyXG4gICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPGJvb2xlYW4+KChyZXN1bHQpID0+IHJlc3VsdCA9PT0gXCJva1wiKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHN1Ym1pdEZvcm0oZGF0YTogeyBzdGF0dXM6IHN0cmluZzsgZ29CYWNrOiBib29sZWFuIH0pIHtcclxuICAgIGNvbnN0IGV0ID0gdGhpcy5wcy5maXh0dXJlVGVtcGxhdGVFcnJvclRhYnM7XHJcbiAgICBpZiAoIXRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscykgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uaW52YWxpZCkge1xyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJGb3JtIGlzIGludmFsaWRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXQuYmFzaWNEZXRhaWxzIHx8IGV0LnByb2R1Y3RzIHx8IGV0LnZtcykgcmV0dXJuO1xyXG5cclxuICAgIGlmIChkYXRhLnN0YXR1cyA9PT0gXCJjb21wbGV0ZVwiKVxyXG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmNvbmZpcm1Db21wbGV0aW9uKCkpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcGF5bG9hZDogRml4dHVyZVRlbXBsYXRlRGV0YWlscyA9IHtcclxuICAgICAgLi4udGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLFxyXG4gICAgICBpc0VkaXRlZDogdHJ1ZSxcclxuICAgICAgLy8gc3RhdHVzOiBkYXRhLnN0YXR1cyxcclxuICAgICAgZml4dHVyZU5hbWU6IHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy5maXh0dXJlTmFtZT8udHJpbSgpLFxyXG5cclxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS52YWx1ZS5kZXNjcmlwdGlvbixcclxuICAgICAgaGVhZGVyOiB7XHJcbiAgICAgICAgLi4udGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLmhlYWRlcixcclxuICAgICAgICBsYWJlbDogdGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLnZhbHVlLmhlYWRlckxhYmVsLFxyXG4gICAgICB9LFxyXG4gICAgICBmb290ZXI6IHtcclxuICAgICAgICAuLi50aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMuZm9vdGVyLFxyXG4gICAgICAgIGxhYmVsOiB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0udmFsdWUuZm9vdGVyTGFiZWwsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZpeHR1cmVDYXBhY2l0eTogdGhpcy50b3RhbFByb2R1Y3RDYXBhY2l0eSxcclxuICAgICAgc2hlbGZDb25maWc6IHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy5zaGVsZkNvbmZpZz8ubWFwKChlLCBpKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLmUsXHJcbiAgICAgICAgICAuLi50aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0udmFsdWUuc2hlbGZbaV0sXHJcbiAgICAgICAgfTtcclxuICAgICAgfSksXHJcbiAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoRGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wcy5zdWJtaXRGaXh0dXJlVGVtcGxhdGVEZXRhaWxzKFxyXG4gICAgICBwYXlsb2FkLFxyXG5cclxuICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLl9pZCFcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xyXG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcclxuICAgICAgICBxdWVyeVBhcmFtczogeyBpc0VkaXQ6IGZhbHNlIH0sXHJcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QoXCJGaXh0dXJlIHRlbXBsYXRlIGRldGFpbHMgdXBkYXRlZC5cIik7XHJcbiAgICAgIGlmIChkYXRhLmdvQmFjaykge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9tYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGVzXCJdKTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLnN0YXR1cyA9PT0gXCJjb21wbGV0ZVwiKSB7XHJcbiAgICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgLy8gICBbXCIvbWFuYWdlL3BsYW5vZ3JhbS9maXh0dXJlLXRlbXBsYXRlL2Fzc2lnbi1zdG9yZXNcIl0sXHJcbiAgICAgICAgLy8gICB7XHJcbiAgICAgICAgLy8gICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwicHJlc2VydmVcIixcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDaGFuZ2VzVG9Mb2NhbCh2YWw6IGFueSkge1xyXG4gICAgY29uc3QgcGF5bG9hZDogRml4dHVyZVRlbXBsYXRlRGV0YWlscyA9IHtcclxuICAgICAgLi4udGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLFxyXG4gICAgICBkZXNjcmlwdGlvbjogdmFsLmRlc2NyaXB0aW9uLFxyXG4gICAgICBoZWFkZXI6IHtcclxuICAgICAgICAuLi50aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmhlYWRlcixcclxuICAgICAgICBsYWJlbDogdmFsLmhlYWRlckxhYmVsLFxyXG4gICAgICB9LFxyXG4gICAgICBmb290ZXI6IHtcclxuICAgICAgICAuLi50aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZvb3RlcixcclxuICAgICAgICBsYWJlbDogdmFsLmZvb3RlckxhYmVsLFxyXG4gICAgICB9LFxyXG4gICAgICBmaXh0dXJlQ2FwYWNpdHk6IHRoaXMudG90YWxQcm9kdWN0Q2FwYWNpdHksXHJcbiAgICAgIHNoZWxmQ29uZmlnOiB2YWw/LnNoZWxmPy5tYXAoKGU6IGFueSwgaTogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLih0aGlzPy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8uW2ldID8/XHJcbiAgICAgICAgICAgIHRoaXM/LmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnPy5bXHJcbiAgICAgICAgICAgICAgdGhpcz8uZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAuLi5lLFxyXG4gICAgICAgICAgc2hlbGZOdW1iZXI6IGkgKyAxLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pLFxyXG4gICAgICBpZ25vcmVVcGRhdGU6IHRydWUsIC8vIFVzZWQgdG8gc2tpcCB0aGUgdW5uZWNlc3NhcnkgZm9ybSBpbml0IGFuZCBvdGhlciBmdW5jdGlvbmFsaXRpZXMgYWNyb3NzIHRoZSBmaXh0dXJlIHRlbXBsYXRlIGNvbXBvbmVudHMuXHJcbiAgICB9O1xyXG4gICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzID0gcGF5bG9hZDtcclxuICAgIHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy5uZXh0KHBheWxvYWQpO1xyXG4gICAgdGhpcy5wcy5maXh0dXJlVGVtcGxhdGVFcnJvclRhYnMuYmFzaWNEZXRhaWxzID1cclxuICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmludmFsaWQ7XHJcbiAgfVxyXG5cclxuICBnZXRGaXh0dXJlTGlicmFyeSgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZCA9IHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscztcclxuICAgIHJldHVybiBgJHtkPy5maXh0dXJlQ2F0ZWdvcnl9ICR7ZD8uZml4dHVyZVdpZHRoPy52YWx1ZX0gJHtkPy5maXh0dXJlV2lkdGg/LnVuaXR9YDtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMubmV4dCh7XHJcbiAgICAgIC4uLnRoaXMucHMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy52YWx1ZSxcclxuICAgICAgaWdub3JlVXBkYXRlOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cImZpeHR1cmUtdGVtcGxhdGUtYmFzaWMtZGV0YWlsc1wiICpuZ0lmPVwiIWlzUGFnZUxvYWRpbmdcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGdhcC00IGJ1aWxkZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xzIGNvbFwiPlxyXG4gICAgICA8aDI+Rml4dHVyZSBEZXRhaWxzPC9oMj5cclxuICAgICAgPHA+Q29uZmlndXJlIHlvdXIgZml4dHVyZSBkZXRhaWxzIGhlcmU8L3A+XHJcblxyXG4gICAgICA8cD5UZW1wbGF0ZSB1bmlxdWUgSUQ6IHt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnRlbXBsYXRlSW5kZXggfX08L3A+XHJcblxyXG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi00XCI+XHJcbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZGVzY3JpcHRpb25cIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPkRlc2NyaXB0aW9uPC9sYWJlbD5cclxuICAgICAgICAgIDx0ZXh0YXJlYSB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJkZXNjcmlwdGlvblwiIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8udG91Y2hlZCAmJlxyXG4gICAgICAgICAgICAgIGZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KCdkZXNjcmlwdGlvbicpPy5pbnZhbGlkXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8uaGFzRXJyb3IoJ3doaXRlc3BhY2UnKVwiPlxyXG4gICAgICAgICAgICAgIERlc2NyaXB0aW9uIGNhbm5vdCBiZSBvbmx5IHdoaXRlc3BhY2UuXHJcbiAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8uaGFzRXJyb3IoJ3RyaW1TcGFjZXMnKVwiPlxyXG4gICAgICAgICAgICAgIE5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbGxvd2VkLlxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItNFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGZvcj1cImZpeHR1cmVDYXRlZ29yeVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+U2VsZWN0IGZpeHR1cmUgdHlwZTwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiaGVhZGVyTGFiZWxcIiBmb3JtQ29udHJvbE5hbWU9XCJmaXh0dXJlQ2F0ZWdvcnlcIiByZWFkb25seSAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tZ3JvdXAgbWItNFwiXHJcbiAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmhlYWRlcj8uaXNFbmFibGVkICYmIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVUeXBlID09PSAnd2FsbCdcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJoZWFkZXJMYWJlbFwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+SGVhZGVyOiBsYWJlbDwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiaGVhZGVyTGFiZWxcIiBmb3JtQ29udHJvbE5hbWU9XCJoZWFkZXJMYWJlbFwiIC8+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2hlYWRlckxhYmVsJyk/LnRvdWNoZWQgJiZcclxuICAgICAgICAgICAgICBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnaGVhZGVyTGFiZWwnKT8uaW52YWxpZFxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2hlYWRlckxhYmVsJyk/Lmhhc0Vycm9yKCd3aGl0ZXNwYWNlJylcIj5cclxuICAgICAgICAgICAgICBIZWFkZXIgbGFiZWwgY2Fubm90IGJlIG9ubHkgd2hpdGVzcGFjZS5cclxuICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KCdoZWFkZXJMYWJlbCcpPy5oYXNFcnJvcigndHJpbVNwYWNlcycpXCI+XHJcbiAgICAgICAgICAgICAgTm8gbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlIGFsbG93ZWQuXHJcbiAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwic2hlbGZcIj5cclxuICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0zXCIgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cIiFpc0VkaXRNb2RlXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsPk5vIG9mIHNoZWx2ZXM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNVwiXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE0XCJcclxuICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNSAxNFwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVTaGVsZigpO1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0zLjc2Mjk0IDdIMTEuOTI5NlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBzaGVsZkFycmF5Lmxlbmd0aCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzdmdcclxuICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTVcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxNFwiXHJcbiAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTUgMTRcIlxyXG4gICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkU2hlbGYoKTtcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNy4xNTM4OSAyLjkxNjVWMTEuMDgzMk0zLjA3MDU2IDYuOTk5ODRIMTEuMjM3MlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bGFiZWwgZm9yPVwic2hlbGZcIiBjbGFzcz1cIm1iLTJcIj5Cb2R5OiBQcm9kdWN0IENhcGFjaXR5IGF0IGVhY2ggc2hlbGY8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc2hlbGYgb2Ygc2hlbGZBcnJheT8uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGVsZi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8cD57eyBzaGVsZi5nZXQoXCJzaGVsZlR5cGVcIik/LnZhbHVlIHx8IFwicGFuZWxcIiB8IHVwcGVyY2FzZSB9fSB7eyBpICsgMSB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDxzdmdcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVTaGVsZihpKTsgXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hlbGZBcnJheS5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTE4IDZMNiAxOE02IDZMMTggMThcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM5OEEyQjNcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgW2RhdGFdPVwic2hlbGZUeXBlc1wiXHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzaGVsZlR5cGVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaGVsZi5nZXQoJ3NoZWxmVHlwZScpPy52YWx1ZSA9PT0gJ3RyYXknXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yIG10LTJcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibS0wXCI+Tm8gb2YgUm93czwvcD5cclxuICAgICAgICAgICAgICAgIDxjb3VudGVyLWlucHV0IHN0eWxlPVwid2lkdGg6IDQwJVwiIGZvcm1Db250cm9sTmFtZT1cInRyYXlSb3dzXCIgW3N0ZXBdPVwiMVwiIHBsYWNlaG9sZGVyPVwiMFwiPjwvY291bnRlci1pbnB1dD5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvdW50ZXItY29udGFpbmVyXCIgc3R5bGU9XCJ3aWR0aDogNDAlOyBtaW4taGVpZ2h0OiAzNXB4XCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIHt7IHNoZWxmLmdldChcInRyYXlSb3dzXCIpPy52YWx1ZSB9fSAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5Qcm9kdWN0IGNhcGFjaXR5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxjb3VudGVyLWlucHV0IHN0eWxlPVwid2lkdGg6IDQwJVwiIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RQZXJTaGVsZlwiIFtzdGVwXT1cIjFcIiBwbGFjZWhvbGRlcj1cIjBcIj48L2NvdW50ZXItaW5wdXQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNoZWxmLmdldCgncHJvZHVjdFBlclNoZWxmJyk/LnRvdWNoZWQgJiYgc2hlbGYuZ2V0KCdwcm9kdWN0UGVyU2hlbGYnKT8uZXJyb3JzXCI+XHJcbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwic2hlbGYuZ2V0KCdwcm9kdWN0UGVyU2hlbGYnKT8uaGFzRXJyb3IoJ21pbicpXCI+XHJcbiAgICAgICAgICAgICAgICAgIFByb2R1Y3QgY2FwYWNpdHkgY2Fubm90IGJlIG5lZ2F0aXZlLlxyXG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIlxyXG4gICAgICAgICAgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5mb290ZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZm9vdGVyTGFiZWxcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPkZvb3RlcjogbGFiZWw8L2xhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZvb3RlckxhYmVsXCIgZm9ybUNvbnRyb2xOYW1lPVwiZm9vdGVyTGFiZWxcIiAvPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIGZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KCdmb290ZXJMYWJlbCcpPy50b3VjaGVkICYmXHJcbiAgICAgICAgICAgICAgZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2Zvb3RlckxhYmVsJyk/LmludmFsaWRcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KCdmb290ZXJMYWJlbCcpPy5oYXNFcnJvcignd2hpdGVzcGFjZScpXCI+XHJcbiAgICAgICAgICAgICAgRm9vdGVyIGxhYmVsIGNhbm5vdCBiZSBvbmx5IHdoaXRlc3BhY2UuXHJcbiAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnZm9vdGVyTGFiZWwnKT8uaGFzRXJyb3IoJ3RyaW1TcGFjZXMnKVwiPlxyXG4gICAgICAgICAgICAgIE5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbGxvd2VkLlxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbHMgY29sLThcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgPCEtLSBWZXJ0aWNhbCBhcnJvd3MgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZlcnRpY2FsLWRpbWVuc2lvblwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFycm93IHVwXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZVwiPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlTGVuZ3RoPy52YWx1ZSB9fXt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVMZW5ndGg/LnVuaXQgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdyBkb3duXCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8IS0tIEhvcml6b250YWwgYXJyb3dzIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgIGRpbWVuc2lvbkFycm93cztcclxuICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVdpZHRoPy52YWx1ZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2FsbC12aWV3cG9ydFwiPlxyXG4gICAgICAgICAgICA8IS0tIEhlYWRlciBibG9jayAtLT5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWJsb2NrXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmhlYWRlcj8uaXNFbmFibGVkICYmIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVUeXBlID09PSAnd2FsbCdcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICB7eyBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldChcImhlYWRlckxhYmVsXCIpPy52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEJvZHkgYmxvY2sgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib2R5LWJsb2NrXCIgKm5nSWY9XCJzaGVsZkFycmF5Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNoZWxmQXJyYXkuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIEBpZihpdGVtLmdldCgnc2hlbGZUeXBlJyk/LnZhbHVlID09PSdzaGVsZicpe1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrIHNoZWxmXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5nZXQoJ3Byb2R1Y3RQZXJTaGVsZicpPy52YWx1ZSlcIiBjbGFzcz1cInByb2R1Y3RcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIFtdLmNvbnN0cnVjdG9yKGl0ZW0uZ2V0KCd0cmF5Um93cycpPy52YWx1ZSlcIiBjbGFzcz1cInRyYXkgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5nZXQoJ3Byb2R1Y3RQZXJTaGVsZicpPy52YWx1ZSlcIiBjbGFzcz1cInByb2R1Y3RcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEZvb3RlciBibG9jayAtLT5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9vdGVyLWJsb2NrXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZvb3Rlcj8uaXNFbmFibGVkICYmIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVUeXBlID09PSAnd2FsbCdcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1mb290ZXIgbGVmdC1ib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLWZvb3RlciByaWdodC1ib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8cD57eyBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldChcImZvb3RlckxhYmVsXCIpPy52YWx1ZSB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG5cclxuPHNlY3Rpb24gaWQ9XCJmaXh0dXJlLXRlbXBsYXRlLWJhc2ljLWRldGFpbHMtc2tlbGV0b25cIiAqbmdJZj1cImlzUGFnZUxvYWRpbmdcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG5cclxuPCEtLSBDb21tb24gZGltZW5zaW9uIGFycm93cyAtLT5cclxuPG5nLXRlbXBsYXRlICNkaW1lbnNpb25BcnJvd3MgbGV0LWxhYmVsPVwibGFiZWxcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJob3Jpem9udGFsLWRpbWVuc2lvblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImFycm93IGxlZnRcIj48L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJsaW5lXCI+XHJcbiAgICAgIDxzcGFuPnt7IHZhbHVlIH19IHt7IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVXaWR0aD8udW5pdCB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImFycm93IHJpZ2h0XCI+PC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|
|
300
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtYmFzaWMtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9maXh0dXJlLXRlbXBsYXRlL3RlbXBsYXRlLWJhc2ljLWRldGFpbHMvdGVtcGxhdGUtYmFzaWMtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9maXh0dXJlLXRlbXBsYXRlL3RlbXBsYXRlLWJhc2ljLWRldGFpbHMvdGVtcGxhdGUtYmFzaWMtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBSUwsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhFLE9BQU8sRUFBRSxrQkFBa0IsRUFBWSxNQUFNLDRCQUE0QixDQUFDO0FBRTFFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBR25ILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVyRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7Ozs7Ozs7O0FBZ0IxRixNQUFNLE9BQU8sNkJBQTZCO0lBZTlCO0lBQ0E7SUFDQTtJ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QixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixrQkFBa0I7d0JBQ2xCLHVCQUF1QjtxQkFDeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBGb3JtQXJyYXksXHJcbiAgRm9ybUJ1aWxkZXIsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIEZvcm1zTW9kdWxlLFxyXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcbmltcG9ydCB7IE5nYkFjY29yZGlvbk1vZHVsZSwgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgRml4dHVyZVRlbXBsYXRlRGV0YWlscyB9IGZyb20gXCIuLi8uLi8uLi9pbnRlcmZhY2VzL2ZpeHR1cmUtdGVtcGxhdGUuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IENvbXBsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL3BvcHVwcy9jb21wbGV0ZS1jb25maXJtYXRpb24vY29tcGxldGUtY29uZmlybWF0aW9uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBQbGFub0RhdGFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3BsYW5vLWRhdGEuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IENvdW50ZXJJbnB1dENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb3VudGVyLWlucHV0L2NvdW50ZXItaW5wdXQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IGdlbmVyYWxWYWxpZGF0b3IgfSBmcm9tIFwiLi4vLi4vLi4vZnVuY3Rpb25zL3BsYW5vLmZ1bmN0aW9uXCI7XHJcbmltcG9ydCB7IERyb3Bkb3duSUYgfSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJmYWNlcy9wbGFuby1nZW5lcmFsLmludGVyZmFjZVwiO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZVNlbGVjdENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9yZWFjdGl2ZS1zZWxlY3QvcmVhY3RpdmUtc2VsZWN0LmNvbXBvbmVudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXRlbXBsYXRlLWJhc2ljLWRldGFpbHNcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3RlbXBsYXRlLWJhc2ljLWRldGFpbHMuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL3RlbXBsYXRlLWJhc2ljLWRldGFpbHMuY29tcG9uZW50LnNjc3NcIixcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvdW50ZXJJbnB1dENvbXBvbmVudCxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIE5nYkFjY29yZGlvbk1vZHVsZSxcclxuICAgIFJlYWN0aXZlU2VsZWN0Q29tcG9uZW50LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUJhc2ljRGV0YWlsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzOiBGaXh0dXJlVGVtcGxhdGVEZXRhaWxzIHwgbnVsbDtcclxuICBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICByZWFkb25seSBzaGVsZlR5cGVzOiBEcm9wZG93bklGW10gPSBbXHJcbiAgICB7IGxhYmVsOiBcIlNoZWxmXCIsIHZhbHVlOiBcInNoZWxmXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiVHJheVwiLCB2YWx1ZTogXCJ0cmF5XCIgfSxcclxuICAgIHsgbGFiZWw6IFwiVk0gT25seVwiLCB2YWx1ZTogXCJ2bW9ubHlcIiB9LFxyXG4gIF07XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHBzOiBQbGFub0RhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ2JNb2RhbDogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcblxyXG4gICAgdGhpcy5wcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgICBmaWx0ZXIoKGRhdGEpID0+ICFkYXRhPy5pZ25vcmVVcGRhdGUpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0VkaXRNb2RlID0gcGFyYW1zLmdldChcImlzRWRpdFwiKSA9PT0gXCJ0cnVlXCI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuICAgICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybT8uZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRm9ybSRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLnN1Ym1pdEZvcm0oZGF0YSkpO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFnZURhdGEoKSB7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldFRpdGxlKFwiQmFzaWMgZGV0YWlsc1wiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiUGxhbm9ncmFtXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiXCIsIHBhdGg6IFwiXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IHRydWUgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkZpeHR1cmUgVGVtcGxhdGVcIixcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGVzXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAgeyB0aXRsZTogXCJcIiwgcGF0aDogXCJcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplRm9ybSgpIHtcclxuICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBkZXNjcmlwdGlvbjogW1xyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZGVzY3JpcHRpb24gPz8gXCJcIixcclxuICAgICAgICBnZW5lcmFsVmFsaWRhdG9yKCksXHJcbiAgICAgIF0sXHJcbiAgICAgIGZpeHR1cmVDYXRlZ29yeTogW3RoaXMuZ2V0Rml4dHVyZUxpYnJhcnkoKSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGhlYWRlckxhYmVsOiBbXHJcbiAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5oZWFkZXI/LmxhYmVsLFxyXG4gICAgICAgIGdlbmVyYWxWYWxpZGF0b3IoKSxcclxuICAgICAgXSxcclxuICAgICAgc2hlbGY6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBmb290ZXJMYWJlbDogW1xyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZm9vdGVyPy5sYWJlbCxcclxuICAgICAgICBnZW5lcmFsVmFsaWRhdG9yKCksXHJcbiAgICAgIF0sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnPy5mb3JFYWNoKChpKSA9PiB0aGlzLmFkZFNoZWxmKGkpKTtcclxuXHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0udmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgzMDApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHYpID0+IHRoaXMudXBkYXRlQ2hhbmdlc1RvTG9jYWwodikpO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0VkaXRNb2RlKVxyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRXJyb3JUYWJzLmJhc2ljRGV0YWlscykge1xyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkU2hlbGYoc2hlbGY/OiBhbnkpIHtcclxuICAgIGNvbnN0IHNoZWxmR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgc2hlbGZUeXBlOiBbc2hlbGY/LnNoZWxmVHlwZSA/PyBcInNoZWxmXCJdLFxyXG4gICAgICBwcm9kdWN0UGVyU2hlbGY6IFtzaGVsZj8ucHJvZHVjdFBlclNoZWxmID8/IDFdLFxyXG4gICAgICB0cmF5Um93czogW3NoZWxmPy50cmF5Um93cyA/PyAxXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51cGRhdGVQcm9kdWN0UGVyU2hlbGZNaW5WYWxpZGF0b3IoXHJcbiAgICAgIHNoZWxmR3JvdXAsXHJcbiAgICAgIHNoZWxmR3JvdXAuZ2V0KFwic2hlbGZUeXBlXCIpPy52YWx1ZSxcclxuICAgICk7XHJcbiAgICB0aGlzLnNldHVwU2hlbGZUeXBlTGlzdGVuZXIoc2hlbGZHcm91cCk7XHJcbiAgICB0aGlzLnNoZWxmQXJyYXkucHVzaChzaGVsZkdyb3VwKTtcclxuICB9XHJcblxyXG4gIHNldHVwU2hlbGZUeXBlTGlzdGVuZXIoc2hlbGZHcm91cDogRm9ybUdyb3VwKSB7XHJcbiAgICBsZXQgcHJldmlvdXNUeXBlID0gc2hlbGZHcm91cC5nZXQoXCJzaGVsZlR5cGVcIik/LnZhbHVlO1xyXG4gICAgc2hlbGZHcm91cC5nZXQoXCJzaGVsZlR5cGVcIik/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHR5cGUpID0+IHtcclxuICAgICAgY29uc3QgcHJvZHVjdFBlclNoZWxmQ29udHJvbCA9IHNoZWxmR3JvdXAuZ2V0KFwicHJvZHVjdFBlclNoZWxmXCIpO1xyXG4gICAgICBpZiAodHlwZSA9PT0gXCJ2bW9ubHlcIikge1xyXG4gICAgICAgIHByb2R1Y3RQZXJTaGVsZkNvbnRyb2w/LnNldFZhbHVlKDApO1xyXG4gICAgICB9IGVsc2UgaWYgKHByZXZpb3VzVHlwZSA9PT0gXCJ2bW9ubHlcIikge1xyXG4gICAgICAgIHByb2R1Y3RQZXJTaGVsZkNvbnRyb2w/LnNldFZhbHVlKDEpO1xyXG4gICAgICB9XHJcbiAgICAgIHByZXZpb3VzVHlwZSA9IHR5cGU7XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZVByb2R1Y3RQZXJTaGVsZk1pblZhbGlkYXRvcihzaGVsZkdyb3VwLCB0eXBlKTtcclxuICAgICAgY29uc3Qgbm9PZlJvd3NDb250cm9sID0gc2hlbGZHcm91cC5nZXQoXCJ0cmF5Um93c1wiKTtcclxuICAgICAgaWYgKHR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgbm9PZlJvd3NDb250cm9sPy5zZXRWYWxpZGF0b3JzKFtcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLm1pbigxKSxcclxuICAgICAgICBdKTtcclxuICAgICAgICBub09mUm93c0NvbnRyb2w/LnNldFZhbHVlKDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5vT2ZSb3dzQ29udHJvbD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgbm9PZlJvd3NDb250cm9sPy5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgfVxyXG4gICAgICBub09mUm93c0NvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUHJvZHVjdFBlclNoZWxmTWluVmFsaWRhdG9yKHNoZWxmR3JvdXA6IEZvcm1Hcm91cCwgc2hlbGZUeXBlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHByb2R1Y3RQZXJTaGVsZkNvbnRyb2wgPSBzaGVsZkdyb3VwLmdldChcInByb2R1Y3RQZXJTaGVsZlwiKTtcclxuICAgIGNvbnN0IG1pblZhbHVlID0gc2hlbGZUeXBlID09PSBcInZtb25seVwiID8gMCA6IDE7XHJcblxyXG4gICAgcHJvZHVjdFBlclNoZWxmQ29udHJvbD8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5taW4obWluVmFsdWUpXSk7XHJcbiAgICBwcm9kdWN0UGVyU2hlbGZDb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIC8vIElmIGluZGV4IGlzIG5vdCBnaXZlbiwgbGFzdCBzaGVsZiBzaG91bGQgYmUgcmVtb3ZlZFxyXG4gIHJlbW92ZVNoZWxmKGluZGV4OiBudW1iZXIgPSB0aGlzLnNoZWxmQXJyYXkuY29udHJvbHMubGVuZ3RoIC0gMSkge1xyXG4gICAgdGhpcy5zaGVsZkFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICB9XHJcblxyXG4gIGdldCBzaGVsZkFycmF5KCk6IEZvcm1BcnJheSB7XHJcbiAgICByZXR1cm4gdGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldChcInNoZWxmXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldCB0b3RhbFByb2R1Y3RDYXBhY2l0eSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hlbGZBcnJheS5jb250cm9scy5yZWR1Y2UoKHRvdGFsLCBpdGVtKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvdW50ID0gaXRlbS5nZXQoXCJwcm9kdWN0UGVyU2hlbGZcIik/LnZhbHVlIHx8IDA7XHJcbiAgICAgIGNvbnN0IGlzVHJheSA9IGl0ZW0uZ2V0KFwic2hlbGZUeXBlXCIpPy52YWx1ZSA9PT0gXCJ0cmF5XCI7XHJcbiAgICAgIGNvbnN0IHJvd3MgPSBpdGVtLmdldChcInRyYXlSb3dzXCIpPy52YWx1ZSB8fCAxO1xyXG5cclxuICAgICAgLy8gSWYgdGhlIGZpeHR1cmUgaXMgYSBmbG9vciBwYW5lbCBvciB0cmF5LCB3ZSBuZWVkIHRvIG11bHRpcGx5IHRoZSBwcm9kdWN0IGNhcGFjaXR5IGJ5IHRoZSBudW1iZXIgb2Ygcm93c1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRvdGFsICtcclxuICAgICAgICAoaXNUcmF5IHx8IHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIlxyXG4gICAgICAgICAgPyBjb3VudCAqIHJvd3NcclxuICAgICAgICAgIDogY291bnQpXHJcbiAgICAgICk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbmZpcm1Db21wbGV0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oQ29tcGxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gXCJDb21wbGV0ZSB0ZW1wbGF0ZVwiO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPVxyXG4gICAgICBcIlRlbXBsYXRlIGlzIG5vdyByZWFkeSB0byBhc3NpZ24gaXQgdG8gdGhlIHN0b3JlIGJ1dCBzdGlsbCB5b3UgY2FuIGNvbWUgYWdhaW4gYW55IHRpbWUgYW5kIGVkaXQgdGhpcyB0ZW1wbGF0ZS5cIjtcclxuICAgIC8vIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLm5vdGUgPSAnWW91IGNhblxcJ3QgZWRpdCBpdCBvbmNlIGFzc2lnbmVkIHRvIHRoZSB0ZW1wbGF0ZS4nO1xyXG5cclxuICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09IFwib2tcIik7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzdWJtaXRGb3JtKGRhdGE6IHsgc3RhdHVzOiBzdHJpbmc7IGdvQmFjazogYm9vbGVhbiB9KSB7XHJcbiAgICBjb25zdCBldCA9IHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRXJyb3JUYWJzO1xyXG4gICAgaWYgKCF0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMpIHJldHVybjtcclxuXHJcbiAgICBpZiAodGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFwiRm9ybSBpcyBpbnZhbGlkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV0LmJhc2ljRGV0YWlscyB8fCBldC5wcm9kdWN0cyB8fCBldC52bXMpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZGF0YS5zdGF0dXMgPT09IFwiY29tcGxldGVcIilcclxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jb25maXJtQ29tcGxldGlvbigpKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHBheWxvYWQ6IEZpeHR1cmVUZW1wbGF0ZURldGFpbHMgPSB7XHJcbiAgICAgIC4uLnRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscyxcclxuICAgICAgaXNFZGl0ZWQ6IHRydWUsXHJcbiAgICAgIC8vIHN0YXR1czogZGF0YS5zdGF0dXMsXHJcbiAgICAgIGZpeHR1cmVOYW1lOiB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMuZml4dHVyZU5hbWU/LnRyaW0oKSxcclxuXHJcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0udmFsdWUuZGVzY3JpcHRpb24sXHJcbiAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgIC4uLnRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy5oZWFkZXIsXHJcbiAgICAgICAgbGFiZWw6IHRoaXMuZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS52YWx1ZS5oZWFkZXJMYWJlbCxcclxuICAgICAgfSxcclxuICAgICAgZm9vdGVyOiB7XHJcbiAgICAgICAgLi4udGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLmZvb3RlcixcclxuICAgICAgICBsYWJlbDogdGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLnZhbHVlLmZvb3RlckxhYmVsLFxyXG4gICAgICB9LFxyXG4gICAgICBmaXh0dXJlQ2FwYWNpdHk6IHRoaXMudG90YWxQcm9kdWN0Q2FwYWNpdHksXHJcbiAgICAgIHNoZWxmQ29uZmlnOiB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMuc2hlbGZDb25maWc/Lm1hcCgoZSwgaSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5lLFxyXG4gICAgICAgICAgLi4udGhpcy5maXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLnZhbHVlLnNoZWxmW2ldLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pLFxyXG4gICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKERhdGUubm93KCkpLnRvSVNPU3RyaW5nKCksXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucHMuc3VibWl0Rml4dHVyZVRlbXBsYXRlRGV0YWlscyhcclxuICAgICAgcGF5bG9hZCxcclxuXHJcbiAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy5faWQhLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XHJcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcclxuICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7IGlzRWRpdDogZmFsc2UgfSxcclxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChcIkZpeHR1cmUgdGVtcGxhdGUgZGV0YWlscyB1cGRhdGVkLlwiKTtcclxuICAgICAgaWYgKGRhdGEuZ29CYWNrKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL21hbmFnZS9wbGFub2dyYW0vZml4dHVyZS10ZW1wbGF0ZXNcIl0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEuc3RhdHVzID09PSBcImNvbXBsZXRlXCIpIHtcclxuICAgICAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAvLyAgIFtcIi9tYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGUvYXNzaWduLXN0b3Jlc1wiXSxcclxuICAgICAgICAvLyAgIHtcclxuICAgICAgICAvLyAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJwcmVzZXJ2ZVwiLFxyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUNoYW5nZXNUb0xvY2FsKHZhbDogYW55KSB7XHJcbiAgICBjb25zdCBwYXlsb2FkOiBGaXh0dXJlVGVtcGxhdGVEZXRhaWxzID0ge1xyXG4gICAgICAuLi50aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiB2YWwuZGVzY3JpcHRpb24sXHJcbiAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgIC4uLnRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uaGVhZGVyLFxyXG4gICAgICAgIGxhYmVsOiB2YWwuaGVhZGVyTGFiZWwsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZvb3Rlcjoge1xyXG4gICAgICAgIC4uLnRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZm9vdGVyLFxyXG4gICAgICAgIGxhYmVsOiB2YWwuZm9vdGVyTGFiZWwsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZpeHR1cmVDYXBhY2l0eTogdGhpcy50b3RhbFByb2R1Y3RDYXBhY2l0eSxcclxuICAgICAgc2hlbGZDb25maWc6IHZhbD8uc2hlbGY/Lm1hcCgoZTogYW55LCBpOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uKHRoaXM/LmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnPy5baV0gPz9cclxuICAgICAgICAgICAgdGhpcz8uZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/LltcclxuICAgICAgICAgICAgICB0aGlzPy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgIC4uLmUsXHJcbiAgICAgICAgICBzaGVsZk51bWJlcjogaSArIDEsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSksXHJcbiAgICAgIGlnbm9yZVVwZGF0ZTogdHJ1ZSwgLy8gVXNlZCB0byBza2lwIHRoZSB1bm5lY2Vzc2FyeSBmb3JtIGluaXQgYW5kIG90aGVyIGZ1bmN0aW9uYWxpdGllcyBhY3Jvc3MgdGhlIGZpeHR1cmUgdGVtcGxhdGUgY29tcG9uZW50cy5cclxuICAgIH07XHJcbiAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHMgPSBwYXlsb2FkO1xyXG4gICAgdGhpcy5wcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLm5leHQocGF5bG9hZCk7XHJcbiAgICB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZUVycm9yVGFicy5iYXNpY0RldGFpbHMgPVxyXG4gICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uaW52YWxpZDtcclxuICB9XHJcblxyXG4gIGdldEZpeHR1cmVMaWJyYXJ5KCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBkID0gdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzO1xyXG4gICAgcmV0dXJuIGAke2Q/LmZpeHR1cmVDYXRlZ29yeX0gJHtkPy5maXh0dXJlV2lkdGg/LnZhbHVlfSAke2Q/LmZpeHR1cmVXaWR0aD8udW5pdH1gO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRGV0YWlscy5uZXh0KHtcclxuICAgICAgLi4udGhpcy5wcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzLnZhbHVlLFxyXG4gICAgICBpZ25vcmVVcGRhdGU6IGZhbHNlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGlkPVwiZml4dHVyZS10ZW1wbGF0ZS1iYXNpYy1kZXRhaWxzXCIgKm5nSWY9XCIhaXNQYWdlTG9hZGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3cgZ2FwLTQgYnVpbGRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbHMgY29sXCI+XHJcbiAgICAgIDxoMj5GaXh0dXJlIERldGFpbHM8L2gyPlxyXG4gICAgICA8cD5Db25maWd1cmUgeW91ciBmaXh0dXJlIGRldGFpbHMgaGVyZTwvcD5cclxuXHJcbiAgICAgIDxwPlRlbXBsYXRlIHVuaXF1ZSBJRDoge3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8udGVtcGxhdGVJbmRleCB9fTwvcD5cclxuXHJcbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZXNjcmlwdGlvblwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+RGVzY3JpcHRpb248L2xhYmVsPlxyXG4gICAgICAgICAgPHRleHRhcmVhIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImRlc2NyaXB0aW9uXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIGZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KCdkZXNjcmlwdGlvbicpPy50b3VjaGVkICYmXHJcbiAgICAgICAgICAgICAgZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/LmludmFsaWRcclxuICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KCdkZXNjcmlwdGlvbicpPy5oYXNFcnJvcignd2hpdGVzcGFjZScpXCI+XHJcbiAgICAgICAgICAgICAgRGVzY3JpcHRpb24gY2Fubm90IGJlIG9ubHkgd2hpdGVzcGFjZS5cclxuICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/Lmhhc0Vycm9yKCd0cmltU3BhY2VzJylcIj5cclxuICAgICAgICAgICAgICBObyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UgYWxsb3dlZC5cclxuICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTRcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJmaXh0dXJlQ2F0ZWdvcnlcIiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPlNlbGVjdCBmaXh0dXJlIHR5cGU8L2xhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImhlYWRlckxhYmVsXCIgZm9ybUNvbnRyb2xOYW1lPVwiZml4dHVyZUNhdGVnb3J5XCIgcmVhZG9ubHkgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItNFwiXHJcbiAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmhlYWRlcj8uaXNFbmFibGVkICYmIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVUeXBlID09PSAnd2FsbCdcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJoZWFkZXJMYWJlbFwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+SGVhZGVyOiBsYWJlbDwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiaGVhZGVyTGFiZWxcIiBmb3JtQ29udHJvbE5hbWU9XCJoZWFkZXJMYWJlbFwiIC8+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2hlYWRlckxhYmVsJyk/LnRvdWNoZWQgJiZcclxuICAgICAgICAgICAgICBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnaGVhZGVyTGFiZWwnKT8uaW52YWxpZFxyXG4gICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2hlYWRlckxhYmVsJyk/Lmhhc0Vycm9yKCd3aGl0ZXNwYWNlJylcIj5cclxuICAgICAgICAgICAgICBIZWFkZXIgbGFiZWwgY2Fubm90IGJlIG9ubHkgd2hpdGVzcGFjZS5cclxuICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2hlYWRlckxhYmVsJyk/Lmhhc0Vycm9yKCd0cmltU3BhY2VzJylcIj5cclxuICAgICAgICAgICAgICBObyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UgYWxsb3dlZC5cclxuICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJzaGVsZlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtM1wiIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCIhaXNFZGl0TW9kZVwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbD5ObyBvZiBzaGVsdmVzPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRlci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgcm9sZT1cImJ1dHRvblwiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTUgMTRcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiAoY2xpY2spPVwicmVtb3ZlU2hlbGYoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zLjc2Mjk0IDdIMTEuOTI5NlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBzaGVsZkFycmF5Lmxlbmd0aCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzdmcgcm9sZT1cImJ1dHRvblwiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTUgMTRcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiAoY2xpY2spPVwiYWRkU2hlbGYoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk03LjE1Mzg5IDIuOTE2NVYxMS4wODMyTTMuMDcwNTYgNi45OTk4NEgxMS4yMzcyXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJzaGVsZlwiIGNsYXNzPVwibWItMlwiPkJvZHk6IFByb2R1Y3QgQ2FwYWNpdHkgYXQgZWFjaCBzaGVsZjwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzaGVsZiBvZiBzaGVsZkFycmF5Py5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiIFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoZWxmLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICB7eyBzaGVsZi5nZXQoXCJzaGVsZlR5cGVcIik/LnZhbHVlID09PSAndm1vbmx5JyA/ICdWTSBPTkxZIFNIRUxGJyA6IChzaGVsZi5nZXQoXCJzaGVsZlR5cGVcIik/LnZhbHVlIHx8ICdwYW5lbCcpIHwgdXBwZXJjYXNlIH19XHJcbiAgICAgICAgICAgICAgICAgIHt7IGkgKyAxIH19XHJcbiAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlU2hlbGYoaSk7IFwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInNoZWxmQXJyYXkubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE4IDZMNiAxOE02IDZMMTggMThcIiBzdHJva2U9XCIjOThBMkIzXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCIgW2RhdGFdPVwic2hlbGZUeXBlc1wiXHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzaGVsZlR5cGVcIj5cclxuICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaGVsZi5nZXQoJ3NoZWxmVHlwZScpPy52YWx1ZSA9PT0gJ3RyYXknXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm0tMFwiPk5vIG9mIFJvd3M8L3A+XHJcbiAgICAgICAgICAgICAgICA8Y291bnRlci1pbnB1dCBzdHlsZT1cIndpZHRoOiA0MCVcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmF5Um93c1wiIFtzdGVwXT1cIjFcIiBwbGFjZWhvbGRlcj1cIjBcIj48L2NvdW50ZXItaW5wdXQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNoZWxmLmdldCgndHJheVJvd3MnKT8udG91Y2hlZCAmJiBzaGVsZi5nZXQoJ3RyYXlSb3dzJyk/LmVycm9yc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGwgKm5nSWY9XCJzaGVsZi5nZXQoJ3RyYXlSb3dzJyk/Lmhhc0Vycm9yKCdtaW4nKVwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICBNdXN0IGJlIGF0IGxlYXN0IDEgcm93LlxyXG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaGVsZi5nZXQoJ3NoZWxmVHlwZScpPy52YWx1ZSAhPT0gJ3Ztb25seSdcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5Qcm9kdWN0IGNhcGFjaXR5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxjb3VudGVyLWlucHV0IHN0eWxlPVwid2lkdGg6IDQwJVwiIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RQZXJTaGVsZlwiIFtzdGVwXT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjBcIj48L2NvdW50ZXItaW5wdXQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgc2hlbGYuZ2V0KCdzaGVsZlR5cGUnKT8udmFsdWUgIT09ICd2bW9ubHknICYmXHJcbiAgICAgICAgICAgICAgICAgIHNoZWxmLmdldCgncHJvZHVjdFBlclNoZWxmJyk/LnRvdWNoZWQgJiZcclxuICAgICAgICAgICAgICAgICAgc2hlbGYuZ2V0KCdwcm9kdWN0UGVyU2hlbGYnKT8uZXJyb3JzXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJzaGVsZi5nZXQoJ3Byb2R1Y3RQZXJTaGVsZicpPy5oYXNFcnJvcignbWluJylcIj5cclxuICAgICAgICAgICAgICAgICAgUHJvZHVjdCBjYXBhY2l0eSBtdXN0IGJlIGF0IGxlYXN0IDFcclxuICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cInNoZWxmLmdldCgnc2hlbGZUeXBlJyk/LnZhbHVlID09PSAndHJheSdcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTIgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtLTBcIj5ObyBvZiBSb3dzPC9wPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZXItY29udGFpbmVyXCIgc3R5bGU9XCJ3aWR0aDogNDAlOyBtaW4taGVpZ2h0OiAzNXB4XCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHNoZWxmLmdldChcInRyYXlSb3dzXCIpPy52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPlByb2R1Y3QgY2FwYWNpdHk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGNvdW50ZXItaW5wdXQgc3R5bGU9XCJ3aWR0aDogNDAlXCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdFBlclNoZWxmXCIgW3N0ZXBdPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMFwiPjwvY291bnRlci1pbnB1dD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hlbGYuZ2V0KCdwcm9kdWN0UGVyU2hlbGYnKT8udG91Y2hlZCAmJiBzaGVsZi5nZXQoJ3Byb2R1Y3RQZXJTaGVsZicpPy5lcnJvcnNcIj5cclxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJzaGVsZi5nZXQoJ3Byb2R1Y3RQZXJTaGVsZicpPy5oYXNFcnJvcignbWluJylcIj5cclxuICAgICAgICAgICAgICAgICAgUHJvZHVjdCBjYXBhY2l0eSBjYW5ub3QgYmUgbmVnYXRpdmUuXHJcbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItNFwiXHJcbiAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZvb3Rlcj8uaXNFbmFibGVkICYmIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVUeXBlID09PSAnd2FsbCdcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJmb290ZXJMYWJlbFwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+Rm9vdGVyOiBsYWJlbDwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZm9vdGVyTGFiZWxcIiBmb3JtQ29udHJvbE5hbWU9XCJmb290ZXJMYWJlbFwiIC8+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2Zvb3RlckxhYmVsJyk/LnRvdWNoZWQgJiZcclxuICAgICAgICAgICAgICBmaXh0dXJlVGVtcGxhdGVCYXNpY0RldGFpbHNGb3JtLmdldCgnZm9vdGVyTGFiZWwnKT8uaW52YWxpZFxyXG4gICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2Zvb3RlckxhYmVsJyk/Lmhhc0Vycm9yKCd3aGl0ZXNwYWNlJylcIj5cclxuICAgICAgICAgICAgICBGb290ZXIgbGFiZWwgY2Fubm90IGJlIG9ubHkgd2hpdGVzcGFjZS5cclxuICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZml4dHVyZVRlbXBsYXRlQmFzaWNEZXRhaWxzRm9ybS5nZXQoJ2Zvb3RlckxhYmVsJyk/Lmhhc0Vycm9yKCd0cmltU3BhY2VzJylcIj5cclxuICAgICAgICAgICAgICBObyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UgYWxsb3dlZC5cclxuICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2xzIGNvbC04XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgIDwhLS0gVmVydGljYWwgYXJyb3dzIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJ0aWNhbC1kaW1lbnNpb25cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdyB1cFwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmVcIj5cclxuICAgICAgICAgICAgPHNwYW4+e3sgZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uZml4dHVyZUxlbmd0aD8udmFsdWUgfX17eyBmaXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5maXh0dXJlTGVuZ3RoPy51bml0IH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3cgZG93blwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPCEtLSBIb3Jpem9udGFsIGFycm93cyAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICBkaW1lbnNpb25BcnJvd3M7XHJcbiAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVXaWR0aD8udmFsdWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFwiPjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3YWxsLXZpZXdwb3J0XCI+XHJcbiAgICAgICAgICAgIDwhLS0gSGVhZGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWJsb2NrXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmhlYWRlcj8uaXNFbmFibGVkICYmIGZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LmZpeHR1cmVUeXBlID09PSAnd2FsbCdcIj5cclxuICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIHt7IGZpeHR1cmVUZW1wbGF0ZUJhc2ljRGV0YWlsc0Zvcm0uZ2V0KFwiaGVhZGVyTGFiZWxcIik/LnZhbHVlIH19XHJcbiAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQm9keSBibG9jayAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvZHktYmxvY2tcIiAqbmdJZj1cInNoZWxmQXJyYXkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2hlbGZBcnJheS5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgQGlmKGl0ZW0uZ2V0KCdzaGVsZlR5cGUnKT8udmFsdWUgPT09J3RyYXknKXtcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLmdldCgndHJheVJvd3MnKT8udmFsdWUpXCIgY2xhc3M9XCJ0cmF5IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5nZXQoJ3Byb2R1Y3RQZXJTaGVsZicpPy52YWx1ZSlcIiBjbGFzcz1cInByb2R1Y3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1AZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJibG9jayBzaGVsZlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5nZXQoJ3Byb2R1Y3RQZXJTaGVsZicpPy52YWx1ZSlcIiBjbGFzcz1cInByb2R1Y3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+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==
|