tango-app-ui-store-builder 1.2.8 → 1.2.10
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/manage-store-plano/manage-store-plano.component.mjs +34 -12
- package/esm2022/lib/components/manage-store-plano/verification-feedback/zone-editable-fixture/zone-editable-fixture.component.mjs +90 -8
- package/esm2022/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.mjs +3 -3
- package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +19 -3
- package/esm2022/lib/components/plano-tools/allow-edit/allow-edit.component.mjs +14 -4
- package/esm2022/lib/components/plano-tools/delete-floor/delete-floor.component.mjs +252 -0
- package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +3 -3
- package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +8 -3
- package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +21 -5
- package/esm2022/lib/components/planogram/plano-table/plano-table.component.mjs +5 -4
- package/esm2022/lib/components/popups/publish-plano-modal/publish-plano-modal.component.mjs +10 -4
- package/esm2022/lib/components/store-plano/store-plano.component.mjs +9 -2
- package/esm2022/lib/interfaces/planogram.interface.mjs +1 -1
- package/esm2022/lib/services/store-builder.service.mjs +12 -3
- package/esm2022/lib/tango-store-builder-routing.module.mjs +6 -1
- package/esm2022/lib/tango-store-builder.module.mjs +4 -1
- package/fesm2022/tango-app-ui-store-builder.mjs +462 -41
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/manage-store-plano/manage-store-plano.component.d.ts +3 -1
- package/lib/components/manage-store-plano/verification-feedback/zone-editable-fixture/zone-editable-fixture.component.d.ts +14 -1
- package/lib/components/onboard-store-plano/onboard-store-plano.component.d.ts +2 -0
- package/lib/components/plano-tools/allow-edit/allow-edit.component.d.ts +2 -0
- package/lib/components/plano-tools/delete-floor/delete-floor.component.d.ts +85 -0
- package/lib/components/planogram/plano-details-parent/plano-details-parent.component.d.ts +2 -0
- package/lib/components/planogram/plano-overview/plano-overview.component.d.ts +1 -0
- package/lib/components/popups/publish-plano-modal/publish-plano-modal.component.d.ts +2 -0
- package/lib/interfaces/planogram.interface.d.ts +1 -0
- package/lib/services/store-builder.service.d.ts +15 -2
- package/lib/tango-store-builder.module.d.ts +59 -58
- package/package.json +1 -1
|
@@ -295,11 +295,11 @@ export class ZoneVerificationFeedbackComponent {
|
|
|
295
295
|
this.isImageLoading = false;
|
|
296
296
|
}
|
|
297
297
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ZoneVerificationFeedbackComponent, deps: [{ token: i1.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
|
|
298
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ZoneVerificationFeedbackComponent, selector: "lib-zone-verification-feedback", inputs: { floorData: "floorData", feedbackDetails: "feedbackDetails", zoneTask: "zoneTask", zoneFeedback: "zoneFeedback", totalFixtures: "totalFixtures", cdn: "cdn", showAction: "showAction" }, outputs: { changeFixture: "changeFixture", action: "action" }, viewQueries: [{ propertyName: "editableFixture", first: true, predicate: ZoneEditableFixtureComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<section id=\"verification-feedback\">\r\n\r\n <!-- Task info accordion -->\r\n <div *ngIf=\"hasZoneTask\" id=\"task-info\" ngbAccordion #accordion=\"ngbAccordion\">\r\n <div ngbAccordionItem=\"details\">\r\n <div ngbAccordionHeader ngbAccordionToggle class=\"accordion-button task-info-header\">\r\n <div class=\"w-100\">\r\n <h2>Zone verification assigned</h2>\r\n <p>{{ zoneTask?.createdAt | date: 'hh:mm:ss a - dd MMM yyyy' }}</p>\r\n </div>\r\n </div>\r\n\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"log-block\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ zoneTask?.createdByName }}</h4>\r\n <p>{{ zoneTask?.createdAt | date: 'hh:mma, dd MMM yyyy' }}</p>\r\n <h5>Assigner</h5>\r\n </div>\r\n </div>\r\n\r\n <div class=\"log-block\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ zoneTask?.userName }}</h4>\r\n <p>{{ zoneTask?.submitTime_string || zoneTask?.startTime_string }}</p>\r\n <h5>Assignee</h5>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"zoneTask?.comments?.length\">\r\n <h5 class=\"mb-2\">Comments</h5>\r\n <div class=\"log-block\" *ngFor=\"let c of zoneTask?.comments\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ c?.userName }}</h4>\r\n <p>{{ c?.createdAt | date:'hh:mm:ss a - dd MMM yyyy' }}</p>\r\n <h5>{{ c?.comment }}</h5>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <hr *ngIf=\"hasZoneTask\">\r\n\r\n <!-- Empty state: no task assigned -->\r\n <ng-container *ngIf=\"!hasZoneTask\">\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">No response</div>\r\n <div class=\"mt-4\">No zone verification task has been assigned for this floor.</div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Empty state: task assigned but not yet submitted (only on a fresh task \u2014 during a\r\n redo's open period we keep the previous round's responses visible like fixture does) -->\r\n <ng-container *ngIf=\"hasZoneTask && isTaskOpen && !zoneTask?.redoStatus\">\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">No response</div>\r\n <div class=\"mt-4\">Task assigned. Awaiting submission from the store.</div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Header strip + 3-column comparison: visible when task is inprogress / submit, OR during\r\n a redo's open period (we render the previous round's data read-only since canShowActions\r\n already gates the action buttons on checklistStatus === 'submit') -->\r\n <ng-container *ngIf=\"hasZoneTask && (!isTaskOpen || zoneTask?.redoStatus)\">\r\n\r\n <div id=\"feedback-handler\" class=\"d-flex align-items-center gap-6 my-6 px-3 fixture-navigate\">\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('previous')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M15 6L9 12L15 18\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <h3 class=\"m-0\">{{ planoFixture?.header?.label }}</h3>\r\n\r\n <div class=\"d-flex align-items-center gap-3 flex-wrap\">\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureCategory\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureCategory | titlecase }}\r\n </span>\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureWidth?.value\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureWidth.value }} {{ planoFixture.fixtureWidth?.unit ?? 'ft' }}\r\n </span>\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span class=\"badge inactive me-1\">\r\n Fixture Capacity: {{ planoFixture?.fixtureCapacity || 0 }}\r\n </span>\r\n </div>\r\n\r\n <h3 *ngIf=\"showAction\" class=\"m-0 ms-auto\">\r\n {{ currentFixtureIndex }}/{{ totalFixtures.length }}\r\n </h3>\r\n\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('next')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <div id=\"fixture-comparison\" class=\"row g-0 my-3\">\r\n\r\n @if (showAction) {\r\n <!-- Column 1: Existing template (current plano) -->\r\n <!-- <div class=\"col-4 p-2\">\r\n <div class=\"wrapper\">\r\n @if (canShowActions && hasFixtureResponse) {\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <button class=\"btn primary-btn ms-auto\" type=\"button\" (click)=\"onClickKeepPlano()\">\r\n Keep plano\r\n </button>\r\n </div>\r\n }\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.725 5.80008L10 10.0084L17.275 5.80008M10 18.4001V10.0001M17.5 13.3334V6.66675C17.4997 6.37448 17.4225 6.08742 17.2763 5.83438C17.13 5.58134 16.9198 5.37122 16.6667 5.22508L10.8333 1.89175C10.58 1.74547 10.2926 1.66846 10 1.66846C9.70744 1.66846 9.42003 1.74547 9.16667 1.89175L3.33333 5.22508C3.08022 5.37122 2.86998 5.58134 2.72372 5.83438C2.57745 6.08742 2.5003 6.37448 2.5 6.66675V13.3334C2.5003 13.6257 2.57745 13.9127 2.72372 14.1658C2.86998 14.4188 3.08022 14.6289 3.33333 14.7751L9.16667 18.1084C9.42003 18.2547 9.70744 18.3317 10 18.3317C10.2926 18.3317 10.58 18.2547 10.8333 18.1084L16.6667 14.7751C16.9198 14.6289 17.13 14.4188 17.2763 14.1658C17.4225 13.9127 17.4997 13.6257 17.5 13.3334Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <h4 class=\"m-0\">Existing template</h4>\r\n <svg *ngIf=\"isApproved && currentUserAction === 'keepPlano'\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <fixture [fixture]=\"planoFixture\" [showVMs]=\"true\" [showHeaderFooterAlways]=\"true\"></fixture>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Column 2: Store response (zone-grouped) -->\r\n <div class=\"col-6 p-2\">\r\n <div class=\"wrapper\">\r\n @if (isClFixture) {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">CL Excluded</div>\r\n </div>\r\n </div>\r\n } @else {\r\n @if (canShowActions && hasFixtureResponse) {\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <!-- <button class=\"btn quick-btn ms-auto\" type=\"button\" (click)=\"onClickEditResponse()\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9.16602 3.3332H3.33268C2.89065 3.3332 2.46673 3.50879 2.15417 3.82135C1.84161 4.13391 1.66602 4.55784 1.66602 4.99986V16.6665C1.66602 17.1086 1.84161 17.5325 2.15417 17.845C2.46673 18.1576 2.89065 18.3332 3.33268 18.3332H14.9993C15.4414 18.3332 15.8653 18.1576 16.1779 17.845C16.4904 17.5325 16.666 17.1086 16.666 16.6665V10.8332M15.416 2.0832C15.7475 1.75168 16.1972 1.56543 16.666 1.56543C17.1349 1.56543 17.5845 1.75168 17.916 2.0832C18.2475 2.41472 18.4338 2.86436 18.4338 3.3332C18.4338 3.80204 18.2475 4.25168 17.916 4.5832L9.99935 12.4999L6.66602 13.3332L7.49935 9.99986L15.416 2.0832Z\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button> -->\r\n <button class=\"btn redo-btn\" type=\"button\" (click)=\"onClickRedo()\">\r\n Redo\r\n </button>\r\n <button class=\"btn btn-outline btn-outline-cus ms-auto\" type=\"button\" (click)=\"onClickKeepPlano()\">\r\n Reject\r\n </button>\r\n <button class=\"btn primary-btn\" type=\"button\"\r\n [disabled]=\"!editableFixture?.isValid\"\r\n [title]=\"editableFixture?.validationMessage || ''\"\r\n (click)=\"onClickAcceptResponse()\">\r\n Accept\r\n </button>\r\n </div>\r\n }\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M15.6504 14.6191H4.34863V10.7373C4.23826 10.7455 4.12644 10.75 4.01367 10.75C3.97137 10.75 3.92943 10.7463 3.8877 10.7451V15.8037C3.88788 16.447 4.42222 16.9883 5.09863 16.9883H14.9004C15.5768 16.9883 16.1102 16.447 16.1104 15.8037V10.7451C16.0708 10.7462 16.0311 10.75 15.9912 10.75C15.8768 10.75 15.7629 10.7449 15.6504 10.7363V14.6191ZM15.4639 3.01172H4.53418C4.48723 3.01187 4.44973 3.03776 4.43457 3.06152V3.0625L2.67871 5.80371L2.66016 5.83301C2.04768 6.82786 2.64325 8.11739 3.73438 8.26367C3.83174 8.27561 3.92224 8.28222 4.01074 8.28223C4.58889 8.28223 5.09978 8.03419 5.45605 7.64746L6.00977 7.04688L6.56152 7.64941C6.91341 8.03371 7.42301 8.28215 8.00488 8.28223C8.58433 8.28223 9.09759 8.03349 9.44922 7.64941L10.002 7.04492L10.5557 7.64941C10.9073 8.03349 11.4206 8.28223 12 8.28223C12.5792 8.2821 13.0918 8.03337 13.4434 7.64941L13.9971 7.04492L14.5498 7.64941C14.9014 8.03349 15.4147 8.28223 15.9941 8.28223C16.0791 8.28222 16.1716 8.27533 16.2676 8.26367C17.3635 8.11504 17.9623 6.8008 17.3232 5.80371L15.5645 3.0625L15.5635 3.06152C15.5483 3.03769 15.511 3.01172 15.4639 3.01172Z\"\r\n stroke=\"#101828\" stroke-width=\"1.5\" />\r\n </svg>\r\n <h4>Store response</h4>\r\n <span *ngIf=\"hasFixtureResponse\" class=\"badge inactive me-1\">\r\n Capacity: {{ zoneFixture?.fixtureCapacity || 0 }}\r\n </span>\r\n <svg\r\n *ngIf=\"isApproved && (currentUserAction === 'acceptResponse' || currentUserAction === 'editAccepted')\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n\r\n <svg *ngIf=\"isApproved && (currentUserAction === 'keepPlano')\" class=\"ms-auto\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\r\n <rect width=\"20\" height=\"20\" rx=\"10\" fill=\"#FEE4E2\" />\r\n\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M6.225 6.225C6.56667 5.88333 7.11667 5.88333 7.45833 6.225L10 8.76667L12.5417 6.225C12.8833 5.88333 13.4333 5.88333 13.775 6.225C14.1167 6.56667 14.1167 7.11667 13.775 7.45833L11.2333 10L13.775 12.5417C14.1167 12.8833 14.1167 13.4333 13.775 13.775C13.4333 14.1167 12.8833 14.1167 12.5417 13.775L10 11.2333L7.45833 13.775C7.11667 14.1167 6.56667 14.1167 6.225 13.775C5.88333 13.4333 5.88333 12.8833 6.225 12.5417L8.76667 10L6.225 7.45833C5.88333 7.11667 5.88333 6.56667 6.225 6.225Z\"\r\n fill=\"#F04438\" />\r\n </svg>\r\n <svg *ngIf=\"currentUserAction === 'redo'\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M8.25065 15.8335C6.90343 15.8335 5.74704 15.396 4.78148 14.521C3.81593 13.646 3.33343 12.5557 3.33398 11.2502C3.33398 9.94461 3.81676 8.85433 4.78232 7.97933C5.74787 7.10433 6.90398 6.66683 8.25065 6.66683H13.5007L11.334 4.50016L12.5007 3.3335L16.6673 7.50016L12.5007 11.6668L11.334 10.5002L13.5007 8.3335H8.25065C7.37565 8.3335 6.6151 8.61127 5.96898 9.16683C5.32287 9.72238 5.0001 10.4168 5.00065 11.2502C5.00065 12.0835 5.32371 12.7779 5.96982 13.3335C6.61593 13.8891 7.37621 14.1668 8.25065 14.1668H14.1673V15.8335H8.25065Z\"\r\n fill=\"black\" />\r\n </svg>\r\n </div>\r\n </div>\r\n @if (hasFixtureResponse) {\r\n <zone-editable-fixture\r\n [fixture]=\"zoneFixture\"\r\n [showVMs]=\"false\"\r\n [showHeaderFooterAlways]=\"true\"\r\n [editable]=\"canShowActions\">\r\n </zone-editable-fixture>\r\n } @else {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div>No response for this fixture yet.</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Column 3: Store image -->\r\n <div class=\"p-2\" [ngClass]=\"{'col-6': showAction, 'col': !showAction}\">\r\n <div class=\"wrapper\">\r\n <div class=\"mb-4\" [ngStyle]=\"{'margin-top':'12px'}\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <h4>Store Image</h4>\r\n </div>\r\n </div>\r\n @if (zoneImageUrl) {\r\n <div class=\"fixture-image\" (click)=\"onClickImagePreview($event, zoneImageUrl)\">\r\n @if (isImageLoading) {\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n }\r\n <img [src]=\"zoneImageUrl\" alt=\"Store response image\"\r\n [style.display]=\"isImageLoading ? 'none' : 'block'\" (loadstart)=\"onImageLoadStart()\"\r\n (load)=\"onImageLoad()\" (error)=\"onImageError()\" (loadend)=\"onImageLoadEnd()\">\r\n </div>\r\n\r\n <div class=\"img-preview\" *ngIf=\"selectedImageForPreview\" (click)=\"closeImagePreview()\">\r\n <button class=\"preview-close\" (click)=\"$event.stopPropagation(); closeImagePreview()\">✕</button>\r\n <div class=\"preview-zoom-controls\" (click)=\"$event.stopPropagation()\">\r\n <button (click)=\"onPreviewZoomOut()\">−</button>\r\n <input type=\"range\" class=\"zoom-slider\" min=\"25\" max=\"500\" step=\"25\" [value]=\"imagePreviewZoom * 100\"\r\n (input)=\"onPreviewZoomSlider($event)\" />\r\n <span>{{ (imagePreviewZoom * 100).toFixed(0) }}%</span>\r\n <button (click)=\"onPreviewZoomIn()\">+</button>\r\n </div>\r\n <div class=\"preview-image-container\" (click)=\"$event.stopPropagation()\"\r\n (mousedown)=\"onPreviewPanStart($event)\" (mousemove)=\"onPreviewPanMove($event)\"\r\n (mouseup)=\"onPreviewPanEnd()\" (mouseleave)=\"onPreviewPanEnd()\" (wheel)=\"onPreviewWheel($event)\">\r\n <img [src]=\"selectedImageForPreview\" class=\"full-img\"\r\n [style.transform]=\"'scale(' + imagePreviewZoom + ') translate(' + imagePreviewPanX / imagePreviewZoom + 'px,' + imagePreviewPanY / imagePreviewZoom + 'px)'\"\r\n draggable=\"false\" />\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg width=\"186\" height=\"84\" viewBox=\"0 0 186 84\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M130.256 15.3284C140.092 15.3284 148.065 23.302 148.065 33.1379C148.065 37.2176 150.826 41.8684 154.906 41.8684H167.972C177.807 41.8687 185.781 49.8422 185.781 59.678C185.781 69.5141 177.807 77.4885 167.971 77.4885H81.3662C69.7186 77.4883 58.6349 68.4084 46.9873 68.4084H5.93652C2.65782 68.4084 0 65.7506 0 62.4719C0.000127823 59.1933 2.6579 56.5354 5.93652 56.5354H61.8728C63.0069 56.5354 63.9669 55.6929 64.2897 54.6056C64.7994 52.8892 63.6267 50.9485 61.8361 50.9485H43.6514C33.8153 50.9485 25.8418 42.974 25.8418 33.1379C25.842 23.302 33.8154 15.3284 43.6514 15.3284H130.256Z\"\r\n fill=\"#EAECF0\" />\r\n <path\r\n d=\"M126.664 27.335V48.65L120.959 43.75C118.229 41.405 113.819 41.405 111.089 43.75L96.5291 56.245C93.7991 58.59 89.3891 58.59 86.6591 56.245L85.4691 55.265C82.9841 53.095 79.0291 52.885 76.2291 54.775L59.0091 66.325L58.6241 66.605C57.3291 63.805 56.6641 60.48 56.6641 56.665V27.335C56.6641 14.595 64.2591 7 76.9991 7H106.329C119.069 7 126.664 14.595 126.664 27.335Z\"\r\n fill=\"#6BCAFF\" />\r\n <path\r\n d=\"M81.164 36.3299C85.7645 36.3299 89.494 32.6005 89.494 27.9999C89.494 23.3994 85.7645 19.6699 81.164 19.6699C76.5635 19.6699 72.834 23.3994 72.834 27.9999C72.834 32.6005 76.5635 36.3299 81.164 36.3299Z\"\r\n fill=\"#00A3FF\" />\r\n <path\r\n d=\"M126.665 48.65V56.665C126.665 69.405 119.07 77 106.33 77H77C68.075 77 61.635 73.255 58.625 66.605L59.01 66.325L76.23 54.775C79.03 52.885 82.985 53.095 85.47 55.265L86.66 56.245C89.39 58.59 93.8 58.59 96.53 56.245L111.09 43.75C113.82 41.405 118.23 41.405 120.96 43.75L126.665 48.65Z\"\r\n fill=\"#00A3FF\" />\r\n <circle cx=\"138.064\" cy=\"28.3128\" r=\"4.40042\" fill=\"#6BCAFF\" />\r\n <circle cx=\"47.8256\" cy=\"39.2409\" r=\"2.45255\" fill=\"#6BCAFF\" />\r\n <ellipse cx=\"139.183\" cy=\"61.0072\" rx=\"4.29197\" ry=\"4.59854\" fill=\"#00A3FF\" />\r\n </svg>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n @if (zoneFeedback?.answers?.[0]?.comments?.length) {\r\n <div id=\"fixture-comments\">\r\n <h5 class=\"mb-2\">Comments</h5>\r\n\r\n <div class=\"log-block\" *ngFor=\"let c of zoneFeedback?.answers?.[0]?.comments; let i = index\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ c?.userName }}</h4>\r\n <p>{{ c?.timeStamp | date:'hh:mm:ss a - dd MMM yyyy' }}</p>\r\n </div>\r\n\r\n @if (c?.responsetype === 'comment') {\r\n <h5>{{ c?.comment }}</h5>\r\n } @else if (c?.responsetype === 'agree') {\r\n <h5 *ngIf=\"zoneFeedback?.answers?.[0]?.userAction === 'keepPlano'\">\r\n Marked as \"Keep Plano\".\r\n </h5>\r\n <h5 *ngIf=\"zoneFeedback?.answers?.[0]?.userAction === 'acceptResponse'\">\r\n Marked as \"Accept Response\".\r\n </h5>\r\n <h5 *ngIf=\"zoneFeedback?.answers?.[0]?.userAction === 'editAccepted'\">\r\n Marked as \"Accept Response with Modification\".\r\n </h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{ c.comment }}</h5>\r\n } @else if (c?.responsetype === 'disagree') {\r\n <h5>Marked as \"Redo\"</h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{ c.comment }}</h5>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n\r\n <ng-template #skeletonLoader>\r\n <div class=\"row loader d-flex justify-content-center align-items-center overflow-hidden\">\r\n <div class=\"shimmer rounded\">\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 class=\"stroke animate description\"></div>\r\n <br />\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 <br />\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 <br />\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 <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</section>", styles: [".nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.draft{background:#f2f4f7;color:#667085}.indicator.draft path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.allocationPending{background:#fef0c7;color:#f79009}.indicator.allocationPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}.restrict-interaction{-webkit-user-select:none;user-select:none;pointer-events:none}.btn .spinner{height:22px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:4px;stroke:#071437;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}#verification-feedback{height:100%;overflow-y:auto}#verification-feedback .fixture-navigate,#verification-feedback .task-info-header{user-select:none;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}#verification-feedback h5{color:#1d2939;font-family:Inter;font-weight:600;font-size:12px;line-height:18px;margin:0}#verification-feedback .log-block{display:flex;gap:12px;padding:4px;margin-bottom:18px}#verification-feedback .log-block h4{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback .log-block p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085;margin:0}#verification-feedback #task-info .task-info-header{background-color:#fff!important;padding:6px;width:100%}#verification-feedback #task-info .task-info-header h2{font-weight:600;font-size:14px;line-height:20px;color:#1d2939}#verification-feedback #task-info .task-info-header p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085}#verification-feedback #fixture-quick-details .quick-edit-container{background:#f9fafb;padding:12px;border-radius:6px;width:100%;height:100%}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-quick-details .quick-edit-container .redo-btn{font-family:Inter;font-weight:600;font-size:14px;line-height:18px;color:#1d2939;cursor:pointer}#verification-feedback #fixture-quick-details .quick-edit-container h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .label{font-family:Inter;font-weight:500;font-size:14px;line-height:20px;color:#475467;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .value{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .diff .value{color:#d92d20!important;font-weight:600}#verification-feedback #fixture-quick-details .quick-edit-container .edit-input{padding:0 4px;border-radius:4px;width:50%;height:20px}#verification-feedback #fixture-comparison .wrapper{padding:12px;background:#f9fafb;border-radius:4px;height:100%}#verification-feedback #fixture-comparison .primary-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#009bf3;background:#eaf8ff;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .primary-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .btn-outline-cus{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .btn-outline-cus:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-comparison .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .redo-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#344054;background:#fff;border:1px solid #d0d5dd;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .redo-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison p{font-weight:400;font-size:12px;line-height:18px;color:#475467;margin:0}#verification-feedback #fixture-comparison .fixture-image{margin-bottom:12px}#verification-feedback #fixture-comparison .fixture-image img{object-fit:contain;width:100%}#verification-feedback #vm-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #vm-comparison .vm-container{padding:12px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);display:flex;gap:12px;cursor:pointer}#verification-feedback #vm-comparison .vm-container .vm-img{width:134px;height:134px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);background:var(--Gray-50, #f9fafb)}#verification-feedback #vm-comparison .vm-container .vm-img img{border-radius:2px;min-width:132px;min-height:134px;object-fit:contain;width:100%;height:100%;display:block}#verification-feedback #vm-comparison .vm-container .vm-details,#verification-feedback #vm-comparison .vm-container .vm-details h5{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#verification-feedback .disabled{pointer-events:none;cursor:not-allowed!important;opacity:.6}.loader .shimmer{height:unset}#verification-feedback .img-preview{position:fixed;inset:0;background:#000000d9;display:flex;align-items:center;justify-content:center;z-index:9999;cursor:default}#verification-feedback .preview-close{position:absolute;top:16px;right:16px;background:#ffffff26;border:none;color:#fff;font-size:20px;width:36px;height:36px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000}#verification-feedback .preview-close:hover{background:#ffffff4d}#verification-feedback .preview-zoom-controls{position:absolute;bottom:24px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:12px;background:#ffffff26;border-radius:8px;padding:6px 16px;z-index:10000}#verification-feedback .preview-zoom-controls span{color:#fff;font-size:14px;min-width:48px;text-align:center;-webkit-user-select:none;user-select:none}#verification-feedback .preview-zoom-controls button{background:none;border:none;color:#fff;font-size:18px;cursor:pointer;width:28px;height:28px;border-radius:4px;display:flex;align-items:center;justify-content:center}#verification-feedback .preview-zoom-controls button:hover{background:#fff3}#verification-feedback .preview-zoom-controls .zoom-slider{-webkit-appearance:none;appearance:none;width:120px;height:4px;background:#ffffff4d;border-radius:2px;outline:none;cursor:pointer}#verification-feedback .preview-zoom-controls .zoom-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:#fff;cursor:pointer}#verification-feedback .preview-zoom-controls .zoom-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:#fff;border:none;cursor:pointer}#verification-feedback .preview-image-container{overflow:hidden;display:flex;align-items:center;justify-content:center;width:90vw;height:85vh;cursor:default}#verification-feedback .preview-image-container:active{cursor:grabbing}#verification-feedback .full-img{max-width:90vw;max-height:85vh;border-radius:10px;object-fit:contain;cursor:grab;-webkit-user-select:none;user-select:none}#verification-feedback .full-img:active{cursor:grabbing}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i1.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i1.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i1.NgbAccordionToggle, selector: "[ngbAccordionToggle]" }, { kind: "directive", type: i1.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i1.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "component", type: i3.ZoneEditableFixtureComponent, selector: "zone-editable-fixture", inputs: ["fixture", "showColors", "showVMs", "showBCs", "showHeaderFooterAlways", "editable"] }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i2.DatePipe, name: "date" }] });
|
|
298
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ZoneVerificationFeedbackComponent, selector: "lib-zone-verification-feedback", inputs: { floorData: "floorData", feedbackDetails: "feedbackDetails", zoneTask: "zoneTask", zoneFeedback: "zoneFeedback", totalFixtures: "totalFixtures", cdn: "cdn", showAction: "showAction" }, outputs: { changeFixture: "changeFixture", action: "action" }, viewQueries: [{ propertyName: "editableFixture", first: true, predicate: ZoneEditableFixtureComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<section id=\"verification-feedback\">\r\n\r\n <!-- Task info accordion -->\r\n <div *ngIf=\"hasZoneTask\" id=\"task-info\" ngbAccordion #accordion=\"ngbAccordion\">\r\n <div ngbAccordionItem=\"details\">\r\n <div ngbAccordionHeader ngbAccordionToggle class=\"accordion-button task-info-header\">\r\n <div class=\"w-100\">\r\n <h2>Zone verification assigned</h2>\r\n <p>{{ zoneTask?.createdAt | date: 'hh:mm:ss a - dd MMM yyyy' }}</p>\r\n </div>\r\n </div>\r\n\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"log-block\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ zoneTask?.createdByName }}</h4>\r\n <p>{{ zoneTask?.createdAt | date: 'hh:mma, dd MMM yyyy' }}</p>\r\n <h5>Assigner</h5>\r\n </div>\r\n </div>\r\n\r\n <div class=\"log-block\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ zoneTask?.userName }}</h4>\r\n <p>{{ zoneTask?.submitTime_string || zoneTask?.startTime_string }}</p>\r\n <h5>Assignee</h5>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"zoneTask?.comments?.length\">\r\n <h5 class=\"mb-2\">Comments</h5>\r\n <div class=\"log-block\" *ngFor=\"let c of zoneTask?.comments\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ c?.userName }}</h4>\r\n <p>{{ c?.createdAt | date:'hh:mm:ss a - dd MMM yyyy' }}</p>\r\n <h5>{{ c?.comment }}</h5>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <hr *ngIf=\"hasZoneTask\">\r\n\r\n <!-- Empty state: no task assigned -->\r\n <ng-container *ngIf=\"!hasZoneTask\">\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">No response</div>\r\n <div class=\"mt-4\">No zone verification task has been assigned for this floor.</div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Empty state: task assigned but not yet submitted (only on a fresh task \u2014 during a\r\n redo's open period we keep the previous round's responses visible like fixture does) -->\r\n <ng-container *ngIf=\"hasZoneTask && isTaskOpen && !zoneTask?.redoStatus\">\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">No response</div>\r\n <div class=\"mt-4\">Task assigned. Awaiting submission from the store.</div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Header strip + 3-column comparison: visible when task is inprogress / submit, OR during\r\n a redo's open period (we render the previous round's data read-only since canShowActions\r\n already gates the action buttons on checklistStatus === 'submit') -->\r\n <ng-container *ngIf=\"hasZoneTask && (!isTaskOpen || zoneTask?.redoStatus)\">\r\n\r\n <div id=\"feedback-handler\" class=\"d-flex align-items-center gap-6 my-6 px-3 fixture-navigate\">\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('previous')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M15 6L9 12L15 18\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <h3 class=\"m-0\">{{ planoFixture?.header?.label }}</h3>\r\n\r\n <div class=\"d-flex align-items-center gap-3 flex-wrap\">\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureCategory\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureCategory | titlecase }}\r\n </span>\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureWidth?.value\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureWidth.value }} {{ planoFixture.fixtureWidth?.unit ?? 'ft' }}\r\n </span>\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span class=\"badge inactive me-1\">\r\n Fixture Capacity: {{ planoFixture?.fixtureCapacity || 0 }}\r\n </span>\r\n </div>\r\n\r\n <h3 *ngIf=\"showAction\" class=\"m-0 ms-auto\">\r\n {{ currentFixtureIndex }}/{{ totalFixtures.length }}\r\n </h3>\r\n\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('next')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <div id=\"fixture-comparison\" class=\"row g-0 my-3\">\r\n\r\n @if (showAction) {\r\n <!-- Column 1: Existing template (current plano) -->\r\n <!-- <div class=\"col-4 p-2\">\r\n <div class=\"wrapper\">\r\n @if (canShowActions && hasFixtureResponse) {\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <button class=\"btn primary-btn ms-auto\" type=\"button\" (click)=\"onClickKeepPlano()\">\r\n Keep plano\r\n </button>\r\n </div>\r\n }\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.725 5.80008L10 10.0084L17.275 5.80008M10 18.4001V10.0001M17.5 13.3334V6.66675C17.4997 6.37448 17.4225 6.08742 17.2763 5.83438C17.13 5.58134 16.9198 5.37122 16.6667 5.22508L10.8333 1.89175C10.58 1.74547 10.2926 1.66846 10 1.66846C9.70744 1.66846 9.42003 1.74547 9.16667 1.89175L3.33333 5.22508C3.08022 5.37122 2.86998 5.58134 2.72372 5.83438C2.57745 6.08742 2.5003 6.37448 2.5 6.66675V13.3334C2.5003 13.6257 2.57745 13.9127 2.72372 14.1658C2.86998 14.4188 3.08022 14.6289 3.33333 14.7751L9.16667 18.1084C9.42003 18.2547 9.70744 18.3317 10 18.3317C10.2926 18.3317 10.58 18.2547 10.8333 18.1084L16.6667 14.7751C16.9198 14.6289 17.13 14.4188 17.2763 14.1658C17.4225 13.9127 17.4997 13.6257 17.5 13.3334Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <h4 class=\"m-0\">Existing template</h4>\r\n <svg *ngIf=\"isApproved && currentUserAction === 'keepPlano'\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <fixture [fixture]=\"planoFixture\" [showVMs]=\"true\" [showHeaderFooterAlways]=\"true\"></fixture>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Column 2: Store response (zone-grouped) -->\r\n <div class=\"col-6 p-2\">\r\n <div class=\"wrapper\">\r\n @if (isClFixture) {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">CL Excluded</div>\r\n </div>\r\n </div>\r\n } @else {\r\n @if (canShowActions && hasFixtureResponse) {\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <!-- <button class=\"btn quick-btn ms-auto\" type=\"button\" (click)=\"onClickEditResponse()\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9.16602 3.3332H3.33268C2.89065 3.3332 2.46673 3.50879 2.15417 3.82135C1.84161 4.13391 1.66602 4.55784 1.66602 4.99986V16.6665C1.66602 17.1086 1.84161 17.5325 2.15417 17.845C2.46673 18.1576 2.89065 18.3332 3.33268 18.3332H14.9993C15.4414 18.3332 15.8653 18.1576 16.1779 17.845C16.4904 17.5325 16.666 17.1086 16.666 16.6665V10.8332M15.416 2.0832C15.7475 1.75168 16.1972 1.56543 16.666 1.56543C17.1349 1.56543 17.5845 1.75168 17.916 2.0832C18.2475 2.41472 18.4338 2.86436 18.4338 3.3332C18.4338 3.80204 18.2475 4.25168 17.916 4.5832L9.99935 12.4999L6.66602 13.3332L7.49935 9.99986L15.416 2.0832Z\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button> -->\r\n <button class=\"btn redo-btn\" type=\"button\" (click)=\"onClickRedo()\">\r\n Redo\r\n </button>\r\n <button class=\"btn btn-outline btn-outline-cus ms-auto\" type=\"button\" (click)=\"onClickKeepPlano()\">\r\n Reject\r\n </button>\r\n <button class=\"btn primary-btn\" type=\"button\"\r\n [disabled]=\"!editableFixture?.isValid\"\r\n [title]=\"editableFixture?.validationMessage || ''\"\r\n (click)=\"onClickAcceptResponse()\">\r\n Accept\r\n </button>\r\n </div>\r\n }\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M15.6504 14.6191H4.34863V10.7373C4.23826 10.7455 4.12644 10.75 4.01367 10.75C3.97137 10.75 3.92943 10.7463 3.8877 10.7451V15.8037C3.88788 16.447 4.42222 16.9883 5.09863 16.9883H14.9004C15.5768 16.9883 16.1102 16.447 16.1104 15.8037V10.7451C16.0708 10.7462 16.0311 10.75 15.9912 10.75C15.8768 10.75 15.7629 10.7449 15.6504 10.7363V14.6191ZM15.4639 3.01172H4.53418C4.48723 3.01187 4.44973 3.03776 4.43457 3.06152V3.0625L2.67871 5.80371L2.66016 5.83301C2.04768 6.82786 2.64325 8.11739 3.73438 8.26367C3.83174 8.27561 3.92224 8.28222 4.01074 8.28223C4.58889 8.28223 5.09978 8.03419 5.45605 7.64746L6.00977 7.04688L6.56152 7.64941C6.91341 8.03371 7.42301 8.28215 8.00488 8.28223C8.58433 8.28223 9.09759 8.03349 9.44922 7.64941L10.002 7.04492L10.5557 7.64941C10.9073 8.03349 11.4206 8.28223 12 8.28223C12.5792 8.2821 13.0918 8.03337 13.4434 7.64941L13.9971 7.04492L14.5498 7.64941C14.9014 8.03349 15.4147 8.28223 15.9941 8.28223C16.0791 8.28222 16.1716 8.27533 16.2676 8.26367C17.3635 8.11504 17.9623 6.8008 17.3232 5.80371L15.5645 3.0625L15.5635 3.06152C15.5483 3.03769 15.511 3.01172 15.4639 3.01172Z\"\r\n stroke=\"#101828\" stroke-width=\"1.5\" />\r\n </svg>\r\n <h4>Store response</h4>\r\n <span *ngIf=\"hasFixtureResponse\" class=\"badge inactive me-1\">\r\n Capacity: {{ zoneFixture?.fixtureCapacity || 0 }}\r\n </span>\r\n <svg\r\n *ngIf=\"isApproved && (currentUserAction === 'acceptResponse' || currentUserAction === 'editAccepted')\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n\r\n <svg *ngIf=\"isApproved && (currentUserAction === 'keepPlano')\" class=\"ms-auto\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\r\n <rect width=\"20\" height=\"20\" rx=\"10\" fill=\"#FEE4E2\" />\r\n\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M6.225 6.225C6.56667 5.88333 7.11667 5.88333 7.45833 6.225L10 8.76667L12.5417 6.225C12.8833 5.88333 13.4333 5.88333 13.775 6.225C14.1167 6.56667 14.1167 7.11667 13.775 7.45833L11.2333 10L13.775 12.5417C14.1167 12.8833 14.1167 13.4333 13.775 13.775C13.4333 14.1167 12.8833 14.1167 12.5417 13.775L10 11.2333L7.45833 13.775C7.11667 14.1167 6.56667 14.1167 6.225 13.775C5.88333 13.4333 5.88333 12.8833 6.225 12.5417L8.76667 10L6.225 7.45833C5.88333 7.11667 5.88333 6.56667 6.225 6.225Z\"\r\n fill=\"#F04438\" />\r\n </svg>\r\n <svg *ngIf=\"currentUserAction === 'redo'\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M8.25065 15.8335C6.90343 15.8335 5.74704 15.396 4.78148 14.521C3.81593 13.646 3.33343 12.5557 3.33398 11.2502C3.33398 9.94461 3.81676 8.85433 4.78232 7.97933C5.74787 7.10433 6.90398 6.66683 8.25065 6.66683H13.5007L11.334 4.50016L12.5007 3.3335L16.6673 7.50016L12.5007 11.6668L11.334 10.5002L13.5007 8.3335H8.25065C7.37565 8.3335 6.6151 8.61127 5.96898 9.16683C5.32287 9.72238 5.0001 10.4168 5.00065 11.2502C5.00065 12.0835 5.32371 12.7779 5.96982 13.3335C6.61593 13.8891 7.37621 14.1668 8.25065 14.1668H14.1673V15.8335H8.25065Z\"\r\n fill=\"black\" />\r\n </svg>\r\n </div>\r\n </div>\r\n @if (hasFixtureResponse) {\r\n <zone-editable-fixture\r\n [fixture]=\"zoneFixture\"\r\n [planoFixture]=\"planoFixture\"\r\n [showVMs]=\"false\"\r\n [showHeaderFooterAlways]=\"true\"\r\n [editable]=\"canShowActions\">\r\n </zone-editable-fixture>\r\n } @else {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div>No response for this fixture yet.</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Column 3: Store image -->\r\n <div class=\"p-2\" [ngClass]=\"{'col-6': showAction, 'col': !showAction}\">\r\n <div class=\"wrapper\">\r\n <div class=\"mb-4\" [ngStyle]=\"{'margin-top':'12px'}\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <h4>Store Image</h4>\r\n </div>\r\n </div>\r\n @if (zoneImageUrl) {\r\n <div class=\"fixture-image\" (click)=\"onClickImagePreview($event, zoneImageUrl)\">\r\n @if (isImageLoading) {\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n }\r\n <img [src]=\"zoneImageUrl\" alt=\"Store response image\"\r\n [style.display]=\"isImageLoading ? 'none' : 'block'\" (loadstart)=\"onImageLoadStart()\"\r\n (load)=\"onImageLoad()\" (error)=\"onImageError()\" (loadend)=\"onImageLoadEnd()\">\r\n </div>\r\n\r\n <div class=\"img-preview\" *ngIf=\"selectedImageForPreview\" (click)=\"closeImagePreview()\">\r\n <button class=\"preview-close\" (click)=\"$event.stopPropagation(); closeImagePreview()\">✕</button>\r\n <div class=\"preview-zoom-controls\" (click)=\"$event.stopPropagation()\">\r\n <button (click)=\"onPreviewZoomOut()\">−</button>\r\n <input type=\"range\" class=\"zoom-slider\" min=\"25\" max=\"500\" step=\"25\" [value]=\"imagePreviewZoom * 100\"\r\n (input)=\"onPreviewZoomSlider($event)\" />\r\n <span>{{ (imagePreviewZoom * 100).toFixed(0) }}%</span>\r\n <button (click)=\"onPreviewZoomIn()\">+</button>\r\n </div>\r\n <div class=\"preview-image-container\" (click)=\"$event.stopPropagation()\"\r\n (mousedown)=\"onPreviewPanStart($event)\" (mousemove)=\"onPreviewPanMove($event)\"\r\n (mouseup)=\"onPreviewPanEnd()\" (mouseleave)=\"onPreviewPanEnd()\" (wheel)=\"onPreviewWheel($event)\">\r\n <img [src]=\"selectedImageForPreview\" class=\"full-img\"\r\n [style.transform]=\"'scale(' + imagePreviewZoom + ') translate(' + imagePreviewPanX / imagePreviewZoom + 'px,' + imagePreviewPanY / imagePreviewZoom + 'px)'\"\r\n draggable=\"false\" />\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg width=\"186\" height=\"84\" viewBox=\"0 0 186 84\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M130.256 15.3284C140.092 15.3284 148.065 23.302 148.065 33.1379C148.065 37.2176 150.826 41.8684 154.906 41.8684H167.972C177.807 41.8687 185.781 49.8422 185.781 59.678C185.781 69.5141 177.807 77.4885 167.971 77.4885H81.3662C69.7186 77.4883 58.6349 68.4084 46.9873 68.4084H5.93652C2.65782 68.4084 0 65.7506 0 62.4719C0.000127823 59.1933 2.6579 56.5354 5.93652 56.5354H61.8728C63.0069 56.5354 63.9669 55.6929 64.2897 54.6056C64.7994 52.8892 63.6267 50.9485 61.8361 50.9485H43.6514C33.8153 50.9485 25.8418 42.974 25.8418 33.1379C25.842 23.302 33.8154 15.3284 43.6514 15.3284H130.256Z\"\r\n fill=\"#EAECF0\" />\r\n <path\r\n d=\"M126.664 27.335V48.65L120.959 43.75C118.229 41.405 113.819 41.405 111.089 43.75L96.5291 56.245C93.7991 58.59 89.3891 58.59 86.6591 56.245L85.4691 55.265C82.9841 53.095 79.0291 52.885 76.2291 54.775L59.0091 66.325L58.6241 66.605C57.3291 63.805 56.6641 60.48 56.6641 56.665V27.335C56.6641 14.595 64.2591 7 76.9991 7H106.329C119.069 7 126.664 14.595 126.664 27.335Z\"\r\n fill=\"#6BCAFF\" />\r\n <path\r\n d=\"M81.164 36.3299C85.7645 36.3299 89.494 32.6005 89.494 27.9999C89.494 23.3994 85.7645 19.6699 81.164 19.6699C76.5635 19.6699 72.834 23.3994 72.834 27.9999C72.834 32.6005 76.5635 36.3299 81.164 36.3299Z\"\r\n fill=\"#00A3FF\" />\r\n <path\r\n d=\"M126.665 48.65V56.665C126.665 69.405 119.07 77 106.33 77H77C68.075 77 61.635 73.255 58.625 66.605L59.01 66.325L76.23 54.775C79.03 52.885 82.985 53.095 85.47 55.265L86.66 56.245C89.39 58.59 93.8 58.59 96.53 56.245L111.09 43.75C113.82 41.405 118.23 41.405 120.96 43.75L126.665 48.65Z\"\r\n fill=\"#00A3FF\" />\r\n <circle cx=\"138.064\" cy=\"28.3128\" r=\"4.40042\" fill=\"#6BCAFF\" />\r\n <circle cx=\"47.8256\" cy=\"39.2409\" r=\"2.45255\" fill=\"#6BCAFF\" />\r\n <ellipse cx=\"139.183\" cy=\"61.0072\" rx=\"4.29197\" ry=\"4.59854\" fill=\"#00A3FF\" />\r\n </svg>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n @if (zoneFeedback?.answers?.[0]?.comments?.length) {\r\n <div id=\"fixture-comments\">\r\n <h5 class=\"mb-2\">Comments</h5>\r\n\r\n <div class=\"log-block\" *ngFor=\"let c of zoneFeedback?.answers?.[0]?.comments; let i = index\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ c?.userName }}</h4>\r\n <p>{{ c?.timeStamp | date:'hh:mm:ss a - dd MMM yyyy' }}</p>\r\n </div>\r\n\r\n @if (c?.responsetype === 'comment') {\r\n <h5>{{ c?.comment }}</h5>\r\n } @else if (c?.responsetype === 'agree') {\r\n <h5 *ngIf=\"zoneFeedback?.answers?.[0]?.userAction === 'keepPlano'\">\r\n Marked as \"Keep Plano\".\r\n </h5>\r\n <h5 *ngIf=\"zoneFeedback?.answers?.[0]?.userAction === 'acceptResponse'\">\r\n Marked as \"Accept Response\".\r\n </h5>\r\n <h5 *ngIf=\"zoneFeedback?.answers?.[0]?.userAction === 'editAccepted'\">\r\n Marked as \"Accept Response with Modification\".\r\n </h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{ c.comment }}</h5>\r\n } @else if (c?.responsetype === 'disagree') {\r\n <h5>Marked as \"Redo\"</h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{ c.comment }}</h5>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n\r\n <ng-template #skeletonLoader>\r\n <div class=\"row loader d-flex justify-content-center align-items-center overflow-hidden\">\r\n <div class=\"shimmer rounded\">\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 class=\"stroke animate description\"></div>\r\n <br />\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 <br />\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 <br />\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 <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</section>", styles: [".nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.draft{background:#f2f4f7;color:#667085}.indicator.draft path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.allocationPending{background:#fef0c7;color:#f79009}.indicator.allocationPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}.restrict-interaction{-webkit-user-select:none;user-select:none;pointer-events:none}.btn .spinner{height:22px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:4px;stroke:#071437;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}#verification-feedback{height:100%;overflow-y:auto}#verification-feedback .fixture-navigate,#verification-feedback .task-info-header{user-select:none;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}#verification-feedback h5{color:#1d2939;font-family:Inter;font-weight:600;font-size:12px;line-height:18px;margin:0}#verification-feedback .log-block{display:flex;gap:12px;padding:4px;margin-bottom:18px}#verification-feedback .log-block h4{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback .log-block p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085;margin:0}#verification-feedback #task-info .task-info-header{background-color:#fff!important;padding:6px;width:100%}#verification-feedback #task-info .task-info-header h2{font-weight:600;font-size:14px;line-height:20px;color:#1d2939}#verification-feedback #task-info .task-info-header p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085}#verification-feedback #fixture-quick-details .quick-edit-container{background:#f9fafb;padding:12px;border-radius:6px;width:100%;height:100%}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-quick-details .quick-edit-container .redo-btn{font-family:Inter;font-weight:600;font-size:14px;line-height:18px;color:#1d2939;cursor:pointer}#verification-feedback #fixture-quick-details .quick-edit-container h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .label{font-family:Inter;font-weight:500;font-size:14px;line-height:20px;color:#475467;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .value{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .diff .value{color:#d92d20!important;font-weight:600}#verification-feedback #fixture-quick-details .quick-edit-container .edit-input{padding:0 4px;border-radius:4px;width:50%;height:20px}#verification-feedback #fixture-comparison .wrapper{padding:12px;background:#f9fafb;border-radius:4px;height:100%}#verification-feedback #fixture-comparison .primary-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#009bf3;background:#eaf8ff;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .primary-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .btn-outline-cus{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .btn-outline-cus:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-comparison .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .redo-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#344054;background:#fff;border:1px solid #d0d5dd;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .redo-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison p{font-weight:400;font-size:12px;line-height:18px;color:#475467;margin:0}#verification-feedback #fixture-comparison .fixture-image{margin-bottom:12px}#verification-feedback #fixture-comparison .fixture-image img{object-fit:contain;width:100%}#verification-feedback #vm-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #vm-comparison .vm-container{padding:12px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);display:flex;gap:12px;cursor:pointer}#verification-feedback #vm-comparison .vm-container .vm-img{width:134px;height:134px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);background:var(--Gray-50, #f9fafb)}#verification-feedback #vm-comparison .vm-container .vm-img img{border-radius:2px;min-width:132px;min-height:134px;object-fit:contain;width:100%;height:100%;display:block}#verification-feedback #vm-comparison .vm-container .vm-details,#verification-feedback #vm-comparison .vm-container .vm-details h5{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#verification-feedback .disabled{pointer-events:none;cursor:not-allowed!important;opacity:.6}.loader .shimmer{height:unset}#verification-feedback .img-preview{position:fixed;inset:0;background:#000000d9;display:flex;align-items:center;justify-content:center;z-index:9999;cursor:default}#verification-feedback .preview-close{position:absolute;top:16px;right:16px;background:#ffffff26;border:none;color:#fff;font-size:20px;width:36px;height:36px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000}#verification-feedback .preview-close:hover{background:#ffffff4d}#verification-feedback .preview-zoom-controls{position:absolute;bottom:24px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:12px;background:#ffffff26;border-radius:8px;padding:6px 16px;z-index:10000}#verification-feedback .preview-zoom-controls span{color:#fff;font-size:14px;min-width:48px;text-align:center;-webkit-user-select:none;user-select:none}#verification-feedback .preview-zoom-controls button{background:none;border:none;color:#fff;font-size:18px;cursor:pointer;width:28px;height:28px;border-radius:4px;display:flex;align-items:center;justify-content:center}#verification-feedback .preview-zoom-controls button:hover{background:#fff3}#verification-feedback .preview-zoom-controls .zoom-slider{-webkit-appearance:none;appearance:none;width:120px;height:4px;background:#ffffff4d;border-radius:2px;outline:none;cursor:pointer}#verification-feedback .preview-zoom-controls .zoom-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:#fff;cursor:pointer}#verification-feedback .preview-zoom-controls .zoom-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:#fff;border:none;cursor:pointer}#verification-feedback .preview-image-container{overflow:hidden;display:flex;align-items:center;justify-content:center;width:90vw;height:85vh;cursor:default}#verification-feedback .preview-image-container:active{cursor:grabbing}#verification-feedback .full-img{max-width:90vw;max-height:85vh;border-radius:10px;object-fit:contain;cursor:grab;-webkit-user-select:none;user-select:none}#verification-feedback .full-img:active{cursor:grabbing}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i1.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i1.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i1.NgbAccordionToggle, selector: "[ngbAccordionToggle]" }, { kind: "directive", type: i1.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i1.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }, { kind: "component", type: i3.ZoneEditableFixtureComponent, selector: "zone-editable-fixture", inputs: ["fixture", "planoFixture", "showColors", "showVMs", "showBCs", "showHeaderFooterAlways", "editable"] }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i2.DatePipe, name: "date" }] });
|
|
299
299
|
}
|
|
300
300
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ZoneVerificationFeedbackComponent, decorators: [{
|
|
301
301
|
type: Component,
|
|
302
|
-
args: [{ selector: "lib-zone-verification-feedback", template: "<section id=\"verification-feedback\">\r\n\r\n <!-- Task info accordion -->\r\n <div *ngIf=\"hasZoneTask\" id=\"task-info\" ngbAccordion #accordion=\"ngbAccordion\">\r\n <div ngbAccordionItem=\"details\">\r\n <div ngbAccordionHeader ngbAccordionToggle class=\"accordion-button task-info-header\">\r\n <div class=\"w-100\">\r\n <h2>Zone verification assigned</h2>\r\n <p>{{ zoneTask?.createdAt | date: 'hh:mm:ss a - dd MMM yyyy' }}</p>\r\n </div>\r\n </div>\r\n\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"log-block\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ zoneTask?.createdByName }}</h4>\r\n <p>{{ zoneTask?.createdAt | date: 'hh:mma, dd MMM yyyy' }}</p>\r\n <h5>Assigner</h5>\r\n </div>\r\n </div>\r\n\r\n <div class=\"log-block\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ zoneTask?.userName }}</h4>\r\n <p>{{ zoneTask?.submitTime_string || zoneTask?.startTime_string }}</p>\r\n <h5>Assignee</h5>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"zoneTask?.comments?.length\">\r\n <h5 class=\"mb-2\">Comments</h5>\r\n <div class=\"log-block\" *ngFor=\"let c of zoneTask?.comments\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ c?.userName }}</h4>\r\n <p>{{ c?.createdAt | date:'hh:mm:ss a - dd MMM yyyy' }}</p>\r\n <h5>{{ c?.comment }}</h5>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <hr *ngIf=\"hasZoneTask\">\r\n\r\n <!-- Empty state: no task assigned -->\r\n <ng-container *ngIf=\"!hasZoneTask\">\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">No response</div>\r\n <div class=\"mt-4\">No zone verification task has been assigned for this floor.</div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Empty state: task assigned but not yet submitted (only on a fresh task \u2014 during a\r\n redo's open period we keep the previous round's responses visible like fixture does) -->\r\n <ng-container *ngIf=\"hasZoneTask && isTaskOpen && !zoneTask?.redoStatus\">\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">No response</div>\r\n <div class=\"mt-4\">Task assigned. Awaiting submission from the store.</div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Header strip + 3-column comparison: visible when task is inprogress / submit, OR during\r\n a redo's open period (we render the previous round's data read-only since canShowActions\r\n already gates the action buttons on checklistStatus === 'submit') -->\r\n <ng-container *ngIf=\"hasZoneTask && (!isTaskOpen || zoneTask?.redoStatus)\">\r\n\r\n <div id=\"feedback-handler\" class=\"d-flex align-items-center gap-6 my-6 px-3 fixture-navigate\">\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('previous')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M15 6L9 12L15 18\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <h3 class=\"m-0\">{{ planoFixture?.header?.label }}</h3>\r\n\r\n <div class=\"d-flex align-items-center gap-3 flex-wrap\">\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureCategory\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureCategory | titlecase }}\r\n </span>\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureWidth?.value\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureWidth.value }} {{ planoFixture.fixtureWidth?.unit ?? 'ft' }}\r\n </span>\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span class=\"badge inactive me-1\">\r\n Fixture Capacity: {{ planoFixture?.fixtureCapacity || 0 }}\r\n </span>\r\n </div>\r\n\r\n <h3 *ngIf=\"showAction\" class=\"m-0 ms-auto\">\r\n {{ currentFixtureIndex }}/{{ totalFixtures.length }}\r\n </h3>\r\n\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('next')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <div id=\"fixture-comparison\" class=\"row g-0 my-3\">\r\n\r\n @if (showAction) {\r\n <!-- Column 1: Existing template (current plano) -->\r\n <!-- <div class=\"col-4 p-2\">\r\n <div class=\"wrapper\">\r\n @if (canShowActions && hasFixtureResponse) {\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <button class=\"btn primary-btn ms-auto\" type=\"button\" (click)=\"onClickKeepPlano()\">\r\n Keep plano\r\n </button>\r\n </div>\r\n }\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.725 5.80008L10 10.0084L17.275 5.80008M10 18.4001V10.0001M17.5 13.3334V6.66675C17.4997 6.37448 17.4225 6.08742 17.2763 5.83438C17.13 5.58134 16.9198 5.37122 16.6667 5.22508L10.8333 1.89175C10.58 1.74547 10.2926 1.66846 10 1.66846C9.70744 1.66846 9.42003 1.74547 9.16667 1.89175L3.33333 5.22508C3.08022 5.37122 2.86998 5.58134 2.72372 5.83438C2.57745 6.08742 2.5003 6.37448 2.5 6.66675V13.3334C2.5003 13.6257 2.57745 13.9127 2.72372 14.1658C2.86998 14.4188 3.08022 14.6289 3.33333 14.7751L9.16667 18.1084C9.42003 18.2547 9.70744 18.3317 10 18.3317C10.2926 18.3317 10.58 18.2547 10.8333 18.1084L16.6667 14.7751C16.9198 14.6289 17.13 14.4188 17.2763 14.1658C17.4225 13.9127 17.4997 13.6257 17.5 13.3334Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <h4 class=\"m-0\">Existing template</h4>\r\n <svg *ngIf=\"isApproved && currentUserAction === 'keepPlano'\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <fixture [fixture]=\"planoFixture\" [showVMs]=\"true\" [showHeaderFooterAlways]=\"true\"></fixture>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Column 2: Store response (zone-grouped) -->\r\n <div class=\"col-6 p-2\">\r\n <div class=\"wrapper\">\r\n @if (isClFixture) {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">CL Excluded</div>\r\n </div>\r\n </div>\r\n } @else {\r\n @if (canShowActions && hasFixtureResponse) {\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <!-- <button class=\"btn quick-btn ms-auto\" type=\"button\" (click)=\"onClickEditResponse()\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9.16602 3.3332H3.33268C2.89065 3.3332 2.46673 3.50879 2.15417 3.82135C1.84161 4.13391 1.66602 4.55784 1.66602 4.99986V16.6665C1.66602 17.1086 1.84161 17.5325 2.15417 17.845C2.46673 18.1576 2.89065 18.3332 3.33268 18.3332H14.9993C15.4414 18.3332 15.8653 18.1576 16.1779 17.845C16.4904 17.5325 16.666 17.1086 16.666 16.6665V10.8332M15.416 2.0832C15.7475 1.75168 16.1972 1.56543 16.666 1.56543C17.1349 1.56543 17.5845 1.75168 17.916 2.0832C18.2475 2.41472 18.4338 2.86436 18.4338 3.3332C18.4338 3.80204 18.2475 4.25168 17.916 4.5832L9.99935 12.4999L6.66602 13.3332L7.49935 9.99986L15.416 2.0832Z\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button> -->\r\n <button class=\"btn redo-btn\" type=\"button\" (click)=\"onClickRedo()\">\r\n Redo\r\n </button>\r\n <button class=\"btn btn-outline btn-outline-cus ms-auto\" type=\"button\" (click)=\"onClickKeepPlano()\">\r\n Reject\r\n </button>\r\n <button class=\"btn primary-btn\" type=\"button\"\r\n [disabled]=\"!editableFixture?.isValid\"\r\n [title]=\"editableFixture?.validationMessage || ''\"\r\n (click)=\"onClickAcceptResponse()\">\r\n Accept\r\n </button>\r\n </div>\r\n }\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M15.6504 14.6191H4.34863V10.7373C4.23826 10.7455 4.12644 10.75 4.01367 10.75C3.97137 10.75 3.92943 10.7463 3.8877 10.7451V15.8037C3.88788 16.447 4.42222 16.9883 5.09863 16.9883H14.9004C15.5768 16.9883 16.1102 16.447 16.1104 15.8037V10.7451C16.0708 10.7462 16.0311 10.75 15.9912 10.75C15.8768 10.75 15.7629 10.7449 15.6504 10.7363V14.6191ZM15.4639 3.01172H4.53418C4.48723 3.01187 4.44973 3.03776 4.43457 3.06152V3.0625L2.67871 5.80371L2.66016 5.83301C2.04768 6.82786 2.64325 8.11739 3.73438 8.26367C3.83174 8.27561 3.92224 8.28222 4.01074 8.28223C4.58889 8.28223 5.09978 8.03419 5.45605 7.64746L6.00977 7.04688L6.56152 7.64941C6.91341 8.03371 7.42301 8.28215 8.00488 8.28223C8.58433 8.28223 9.09759 8.03349 9.44922 7.64941L10.002 7.04492L10.5557 7.64941C10.9073 8.03349 11.4206 8.28223 12 8.28223C12.5792 8.2821 13.0918 8.03337 13.4434 7.64941L13.9971 7.04492L14.5498 7.64941C14.9014 8.03349 15.4147 8.28223 15.9941 8.28223C16.0791 8.28222 16.1716 8.27533 16.2676 8.26367C17.3635 8.11504 17.9623 6.8008 17.3232 5.80371L15.5645 3.0625L15.5635 3.06152C15.5483 3.03769 15.511 3.01172 15.4639 3.01172Z\"\r\n stroke=\"#101828\" stroke-width=\"1.5\" />\r\n </svg>\r\n <h4>Store response</h4>\r\n <span *ngIf=\"hasFixtureResponse\" class=\"badge inactive me-1\">\r\n Capacity: {{ zoneFixture?.fixtureCapacity || 0 }}\r\n </span>\r\n <svg\r\n *ngIf=\"isApproved && (currentUserAction === 'acceptResponse' || currentUserAction === 'editAccepted')\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n\r\n <svg *ngIf=\"isApproved && (currentUserAction === 'keepPlano')\" class=\"ms-auto\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\r\n <rect width=\"20\" height=\"20\" rx=\"10\" fill=\"#FEE4E2\" />\r\n\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M6.225 6.225C6.56667 5.88333 7.11667 5.88333 7.45833 6.225L10 8.76667L12.5417 6.225C12.8833 5.88333 13.4333 5.88333 13.775 6.225C14.1167 6.56667 14.1167 7.11667 13.775 7.45833L11.2333 10L13.775 12.5417C14.1167 12.8833 14.1167 13.4333 13.775 13.775C13.4333 14.1167 12.8833 14.1167 12.5417 13.775L10 11.2333L7.45833 13.775C7.11667 14.1167 6.56667 14.1167 6.225 13.775C5.88333 13.4333 5.88333 12.8833 6.225 12.5417L8.76667 10L6.225 7.45833C5.88333 7.11667 5.88333 6.56667 6.225 6.225Z\"\r\n fill=\"#F04438\" />\r\n </svg>\r\n <svg *ngIf=\"currentUserAction === 'redo'\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M8.25065 15.8335C6.90343 15.8335 5.74704 15.396 4.78148 14.521C3.81593 13.646 3.33343 12.5557 3.33398 11.2502C3.33398 9.94461 3.81676 8.85433 4.78232 7.97933C5.74787 7.10433 6.90398 6.66683 8.25065 6.66683H13.5007L11.334 4.50016L12.5007 3.3335L16.6673 7.50016L12.5007 11.6668L11.334 10.5002L13.5007 8.3335H8.25065C7.37565 8.3335 6.6151 8.61127 5.96898 9.16683C5.32287 9.72238 5.0001 10.4168 5.00065 11.2502C5.00065 12.0835 5.32371 12.7779 5.96982 13.3335C6.61593 13.8891 7.37621 14.1668 8.25065 14.1668H14.1673V15.8335H8.25065Z\"\r\n fill=\"black\" />\r\n </svg>\r\n </div>\r\n </div>\r\n @if (hasFixtureResponse) {\r\n <zone-editable-fixture\r\n [fixture]=\"zoneFixture\"\r\n [showVMs]=\"false\"\r\n [showHeaderFooterAlways]=\"true\"\r\n [editable]=\"canShowActions\">\r\n </zone-editable-fixture>\r\n } @else {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div>No response for this fixture yet.</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Column 3: Store image -->\r\n <div class=\"p-2\" [ngClass]=\"{'col-6': showAction, 'col': !showAction}\">\r\n <div class=\"wrapper\">\r\n <div class=\"mb-4\" [ngStyle]=\"{'margin-top':'12px'}\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <h4>Store Image</h4>\r\n </div>\r\n </div>\r\n @if (zoneImageUrl) {\r\n <div class=\"fixture-image\" (click)=\"onClickImagePreview($event, zoneImageUrl)\">\r\n @if (isImageLoading) {\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n }\r\n <img [src]=\"zoneImageUrl\" alt=\"Store response image\"\r\n [style.display]=\"isImageLoading ? 'none' : 'block'\" (loadstart)=\"onImageLoadStart()\"\r\n (load)=\"onImageLoad()\" (error)=\"onImageError()\" (loadend)=\"onImageLoadEnd()\">\r\n </div>\r\n\r\n <div class=\"img-preview\" *ngIf=\"selectedImageForPreview\" (click)=\"closeImagePreview()\">\r\n <button class=\"preview-close\" (click)=\"$event.stopPropagation(); closeImagePreview()\">✕</button>\r\n <div class=\"preview-zoom-controls\" (click)=\"$event.stopPropagation()\">\r\n <button (click)=\"onPreviewZoomOut()\">−</button>\r\n <input type=\"range\" class=\"zoom-slider\" min=\"25\" max=\"500\" step=\"25\" [value]=\"imagePreviewZoom * 100\"\r\n (input)=\"onPreviewZoomSlider($event)\" />\r\n <span>{{ (imagePreviewZoom * 100).toFixed(0) }}%</span>\r\n <button (click)=\"onPreviewZoomIn()\">+</button>\r\n </div>\r\n <div class=\"preview-image-container\" (click)=\"$event.stopPropagation()\"\r\n (mousedown)=\"onPreviewPanStart($event)\" (mousemove)=\"onPreviewPanMove($event)\"\r\n (mouseup)=\"onPreviewPanEnd()\" (mouseleave)=\"onPreviewPanEnd()\" (wheel)=\"onPreviewWheel($event)\">\r\n <img [src]=\"selectedImageForPreview\" class=\"full-img\"\r\n [style.transform]=\"'scale(' + imagePreviewZoom + ') translate(' + imagePreviewPanX / imagePreviewZoom + 'px,' + imagePreviewPanY / imagePreviewZoom + 'px)'\"\r\n draggable=\"false\" />\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg width=\"186\" height=\"84\" viewBox=\"0 0 186 84\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M130.256 15.3284C140.092 15.3284 148.065 23.302 148.065 33.1379C148.065 37.2176 150.826 41.8684 154.906 41.8684H167.972C177.807 41.8687 185.781 49.8422 185.781 59.678C185.781 69.5141 177.807 77.4885 167.971 77.4885H81.3662C69.7186 77.4883 58.6349 68.4084 46.9873 68.4084H5.93652C2.65782 68.4084 0 65.7506 0 62.4719C0.000127823 59.1933 2.6579 56.5354 5.93652 56.5354H61.8728C63.0069 56.5354 63.9669 55.6929 64.2897 54.6056C64.7994 52.8892 63.6267 50.9485 61.8361 50.9485H43.6514C33.8153 50.9485 25.8418 42.974 25.8418 33.1379C25.842 23.302 33.8154 15.3284 43.6514 15.3284H130.256Z\"\r\n fill=\"#EAECF0\" />\r\n <path\r\n d=\"M126.664 27.335V48.65L120.959 43.75C118.229 41.405 113.819 41.405 111.089 43.75L96.5291 56.245C93.7991 58.59 89.3891 58.59 86.6591 56.245L85.4691 55.265C82.9841 53.095 79.0291 52.885 76.2291 54.775L59.0091 66.325L58.6241 66.605C57.3291 63.805 56.6641 60.48 56.6641 56.665V27.335C56.6641 14.595 64.2591 7 76.9991 7H106.329C119.069 7 126.664 14.595 126.664 27.335Z\"\r\n fill=\"#6BCAFF\" />\r\n <path\r\n d=\"M81.164 36.3299C85.7645 36.3299 89.494 32.6005 89.494 27.9999C89.494 23.3994 85.7645 19.6699 81.164 19.6699C76.5635 19.6699 72.834 23.3994 72.834 27.9999C72.834 32.6005 76.5635 36.3299 81.164 36.3299Z\"\r\n fill=\"#00A3FF\" />\r\n <path\r\n d=\"M126.665 48.65V56.665C126.665 69.405 119.07 77 106.33 77H77C68.075 77 61.635 73.255 58.625 66.605L59.01 66.325L76.23 54.775C79.03 52.885 82.985 53.095 85.47 55.265L86.66 56.245C89.39 58.59 93.8 58.59 96.53 56.245L111.09 43.75C113.82 41.405 118.23 41.405 120.96 43.75L126.665 48.65Z\"\r\n fill=\"#00A3FF\" />\r\n <circle cx=\"138.064\" cy=\"28.3128\" r=\"4.40042\" fill=\"#6BCAFF\" />\r\n <circle cx=\"47.8256\" cy=\"39.2409\" r=\"2.45255\" fill=\"#6BCAFF\" />\r\n <ellipse cx=\"139.183\" cy=\"61.0072\" rx=\"4.29197\" ry=\"4.59854\" fill=\"#00A3FF\" />\r\n </svg>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n @if (zoneFeedback?.answers?.[0]?.comments?.length) {\r\n <div id=\"fixture-comments\">\r\n <h5 class=\"mb-2\">Comments</h5>\r\n\r\n <div class=\"log-block\" *ngFor=\"let c of zoneFeedback?.answers?.[0]?.comments; let i = index\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ c?.userName }}</h4>\r\n <p>{{ c?.timeStamp | date:'hh:mm:ss a - dd MMM yyyy' }}</p>\r\n </div>\r\n\r\n @if (c?.responsetype === 'comment') {\r\n <h5>{{ c?.comment }}</h5>\r\n } @else if (c?.responsetype === 'agree') {\r\n <h5 *ngIf=\"zoneFeedback?.answers?.[0]?.userAction === 'keepPlano'\">\r\n Marked as \"Keep Plano\".\r\n </h5>\r\n <h5 *ngIf=\"zoneFeedback?.answers?.[0]?.userAction === 'acceptResponse'\">\r\n Marked as \"Accept Response\".\r\n </h5>\r\n <h5 *ngIf=\"zoneFeedback?.answers?.[0]?.userAction === 'editAccepted'\">\r\n Marked as \"Accept Response with Modification\".\r\n </h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{ c.comment }}</h5>\r\n } @else if (c?.responsetype === 'disagree') {\r\n <h5>Marked as \"Redo\"</h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{ c.comment }}</h5>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n\r\n <ng-template #skeletonLoader>\r\n <div class=\"row loader d-flex justify-content-center align-items-center overflow-hidden\">\r\n <div class=\"shimmer rounded\">\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 class=\"stroke animate description\"></div>\r\n <br />\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 <br />\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 <br />\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 <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</section>", styles: [".nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.draft{background:#f2f4f7;color:#667085}.indicator.draft path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.allocationPending{background:#fef0c7;color:#f79009}.indicator.allocationPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}.restrict-interaction{-webkit-user-select:none;user-select:none;pointer-events:none}.btn .spinner{height:22px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:4px;stroke:#071437;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}#verification-feedback{height:100%;overflow-y:auto}#verification-feedback .fixture-navigate,#verification-feedback .task-info-header{user-select:none;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}#verification-feedback h5{color:#1d2939;font-family:Inter;font-weight:600;font-size:12px;line-height:18px;margin:0}#verification-feedback .log-block{display:flex;gap:12px;padding:4px;margin-bottom:18px}#verification-feedback .log-block h4{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback .log-block p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085;margin:0}#verification-feedback #task-info .task-info-header{background-color:#fff!important;padding:6px;width:100%}#verification-feedback #task-info .task-info-header h2{font-weight:600;font-size:14px;line-height:20px;color:#1d2939}#verification-feedback #task-info .task-info-header p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085}#verification-feedback #fixture-quick-details .quick-edit-container{background:#f9fafb;padding:12px;border-radius:6px;width:100%;height:100%}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-quick-details .quick-edit-container .redo-btn{font-family:Inter;font-weight:600;font-size:14px;line-height:18px;color:#1d2939;cursor:pointer}#verification-feedback #fixture-quick-details .quick-edit-container h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .label{font-family:Inter;font-weight:500;font-size:14px;line-height:20px;color:#475467;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .value{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .diff .value{color:#d92d20!important;font-weight:600}#verification-feedback #fixture-quick-details .quick-edit-container .edit-input{padding:0 4px;border-radius:4px;width:50%;height:20px}#verification-feedback #fixture-comparison .wrapper{padding:12px;background:#f9fafb;border-radius:4px;height:100%}#verification-feedback #fixture-comparison .primary-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#009bf3;background:#eaf8ff;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .primary-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .btn-outline-cus{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .btn-outline-cus:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-comparison .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .redo-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#344054;background:#fff;border:1px solid #d0d5dd;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .redo-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison p{font-weight:400;font-size:12px;line-height:18px;color:#475467;margin:0}#verification-feedback #fixture-comparison .fixture-image{margin-bottom:12px}#verification-feedback #fixture-comparison .fixture-image img{object-fit:contain;width:100%}#verification-feedback #vm-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #vm-comparison .vm-container{padding:12px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);display:flex;gap:12px;cursor:pointer}#verification-feedback #vm-comparison .vm-container .vm-img{width:134px;height:134px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);background:var(--Gray-50, #f9fafb)}#verification-feedback #vm-comparison .vm-container .vm-img img{border-radius:2px;min-width:132px;min-height:134px;object-fit:contain;width:100%;height:100%;display:block}#verification-feedback #vm-comparison .vm-container .vm-details,#verification-feedback #vm-comparison .vm-container .vm-details h5{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#verification-feedback .disabled{pointer-events:none;cursor:not-allowed!important;opacity:.6}.loader .shimmer{height:unset}#verification-feedback .img-preview{position:fixed;inset:0;background:#000000d9;display:flex;align-items:center;justify-content:center;z-index:9999;cursor:default}#verification-feedback .preview-close{position:absolute;top:16px;right:16px;background:#ffffff26;border:none;color:#fff;font-size:20px;width:36px;height:36px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000}#verification-feedback .preview-close:hover{background:#ffffff4d}#verification-feedback .preview-zoom-controls{position:absolute;bottom:24px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:12px;background:#ffffff26;border-radius:8px;padding:6px 16px;z-index:10000}#verification-feedback .preview-zoom-controls span{color:#fff;font-size:14px;min-width:48px;text-align:center;-webkit-user-select:none;user-select:none}#verification-feedback .preview-zoom-controls button{background:none;border:none;color:#fff;font-size:18px;cursor:pointer;width:28px;height:28px;border-radius:4px;display:flex;align-items:center;justify-content:center}#verification-feedback .preview-zoom-controls button:hover{background:#fff3}#verification-feedback .preview-zoom-controls .zoom-slider{-webkit-appearance:none;appearance:none;width:120px;height:4px;background:#ffffff4d;border-radius:2px;outline:none;cursor:pointer}#verification-feedback .preview-zoom-controls .zoom-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:#fff;cursor:pointer}#verification-feedback .preview-zoom-controls .zoom-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:#fff;border:none;cursor:pointer}#verification-feedback .preview-image-container{overflow:hidden;display:flex;align-items:center;justify-content:center;width:90vw;height:85vh;cursor:default}#verification-feedback .preview-image-container:active{cursor:grabbing}#verification-feedback .full-img{max-width:90vw;max-height:85vh;border-radius:10px;object-fit:contain;cursor:grab;-webkit-user-select:none;user-select:none}#verification-feedback .full-img:active{cursor:grabbing}\n"] }]
|
|
302
|
+
args: [{ selector: "lib-zone-verification-feedback", template: "<section id=\"verification-feedback\">\r\n\r\n <!-- Task info accordion -->\r\n <div *ngIf=\"hasZoneTask\" id=\"task-info\" ngbAccordion #accordion=\"ngbAccordion\">\r\n <div ngbAccordionItem=\"details\">\r\n <div ngbAccordionHeader ngbAccordionToggle class=\"accordion-button task-info-header\">\r\n <div class=\"w-100\">\r\n <h2>Zone verification assigned</h2>\r\n <p>{{ zoneTask?.createdAt | date: 'hh:mm:ss a - dd MMM yyyy' }}</p>\r\n </div>\r\n </div>\r\n\r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody>\r\n <ng-template>\r\n <div class=\"log-block\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ zoneTask?.createdByName }}</h4>\r\n <p>{{ zoneTask?.createdAt | date: 'hh:mma, dd MMM yyyy' }}</p>\r\n <h5>Assigner</h5>\r\n </div>\r\n </div>\r\n\r\n <div class=\"log-block\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ zoneTask?.userName }}</h4>\r\n <p>{{ zoneTask?.submitTime_string || zoneTask?.startTime_string }}</p>\r\n <h5>Assignee</h5>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"zoneTask?.comments?.length\">\r\n <h5 class=\"mb-2\">Comments</h5>\r\n <div class=\"log-block\" *ngFor=\"let c of zoneTask?.comments\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ c?.userName }}</h4>\r\n <p>{{ c?.createdAt | date:'hh:mm:ss a - dd MMM yyyy' }}</p>\r\n <h5>{{ c?.comment }}</h5>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <hr *ngIf=\"hasZoneTask\">\r\n\r\n <!-- Empty state: no task assigned -->\r\n <ng-container *ngIf=\"!hasZoneTask\">\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">No response</div>\r\n <div class=\"mt-4\">No zone verification task has been assigned for this floor.</div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Empty state: task assigned but not yet submitted (only on a fresh task \u2014 during a\r\n redo's open period we keep the previous round's responses visible like fixture does) -->\r\n <ng-container *ngIf=\"hasZoneTask && isTaskOpen && !zoneTask?.redoStatus\">\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">No response</div>\r\n <div class=\"mt-4\">Task assigned. Awaiting submission from the store.</div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Header strip + 3-column comparison: visible when task is inprogress / submit, OR during\r\n a redo's open period (we render the previous round's data read-only since canShowActions\r\n already gates the action buttons on checklistStatus === 'submit') -->\r\n <ng-container *ngIf=\"hasZoneTask && (!isTaskOpen || zoneTask?.redoStatus)\">\r\n\r\n <div id=\"feedback-handler\" class=\"d-flex align-items-center gap-6 my-6 px-3 fixture-navigate\">\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('previous')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M15 6L9 12L15 18\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <h3 class=\"m-0\">{{ planoFixture?.header?.label }}</h3>\r\n\r\n <div class=\"d-flex align-items-center gap-3 flex-wrap\">\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureCategory\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureCategory | titlecase }}\r\n </span>\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span *ngIf=\"planoFixture?.fixtureWidth?.value\" class=\"badge inactive me-1\">\r\n {{ planoFixture.fixtureWidth.value }} {{ planoFixture.fixtureWidth?.unit ?? 'ft' }}\r\n </span>\r\n\r\n <svg width=\"5\" height=\"5\" viewBox=\"0 0 5 5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <circle cx=\"2.5\" cy=\"2.5\" r=\"2.5\" fill=\"#EAECF0\" />\r\n </svg>\r\n\r\n <span class=\"badge inactive me-1\">\r\n Fixture Capacity: {{ planoFixture?.fixtureCapacity || 0 }}\r\n </span>\r\n </div>\r\n\r\n <h3 *ngIf=\"showAction\" class=\"m-0 ms-auto\">\r\n {{ currentFixtureIndex }}/{{ totalFixtures.length }}\r\n </h3>\r\n\r\n <svg *ngIf=\"showAction\" (click)=\"onChangeFixture('next')\" class=\"cursor-pointer\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 18L15 12L9 6\" stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n <div id=\"fixture-comparison\" class=\"row g-0 my-3\">\r\n\r\n @if (showAction) {\r\n <!-- Column 1: Existing template (current plano) -->\r\n <!-- <div class=\"col-4 p-2\">\r\n <div class=\"wrapper\">\r\n @if (canShowActions && hasFixtureResponse) {\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <button class=\"btn primary-btn ms-auto\" type=\"button\" (click)=\"onClickKeepPlano()\">\r\n Keep plano\r\n </button>\r\n </div>\r\n }\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.725 5.80008L10 10.0084L17.275 5.80008M10 18.4001V10.0001M17.5 13.3334V6.66675C17.4997 6.37448 17.4225 6.08742 17.2763 5.83438C17.13 5.58134 16.9198 5.37122 16.6667 5.22508L10.8333 1.89175C10.58 1.74547 10.2926 1.66846 10 1.66846C9.70744 1.66846 9.42003 1.74547 9.16667 1.89175L3.33333 5.22508C3.08022 5.37122 2.86998 5.58134 2.72372 5.83438C2.57745 6.08742 2.5003 6.37448 2.5 6.66675V13.3334C2.5003 13.6257 2.57745 13.9127 2.72372 14.1658C2.86998 14.4188 3.08022 14.6289 3.33333 14.7751L9.16667 18.1084C9.42003 18.2547 9.70744 18.3317 10 18.3317C10.2926 18.3317 10.58 18.2547 10.8333 18.1084L16.6667 14.7751C16.9198 14.6289 17.13 14.4188 17.2763 14.1658C17.4225 13.9127 17.4997 13.6257 17.5 13.3334Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <h4 class=\"m-0\">Existing template</h4>\r\n <svg *ngIf=\"isApproved && currentUserAction === 'keepPlano'\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <fixture [fixture]=\"planoFixture\" [showVMs]=\"true\" [showHeaderFooterAlways]=\"true\"></fixture>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Column 2: Store response (zone-grouped) -->\r\n <div class=\"col-6 p-2\">\r\n <div class=\"wrapper\">\r\n @if (isClFixture) {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div class=\"fw-bold h3 mt-2\">CL Excluded</div>\r\n </div>\r\n </div>\r\n } @else {\r\n @if (canShowActions && hasFixtureResponse) {\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <!-- <button class=\"btn quick-btn ms-auto\" type=\"button\" (click)=\"onClickEditResponse()\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M9.16602 3.3332H3.33268C2.89065 3.3332 2.46673 3.50879 2.15417 3.82135C1.84161 4.13391 1.66602 4.55784 1.66602 4.99986V16.6665C1.66602 17.1086 1.84161 17.5325 2.15417 17.845C2.46673 18.1576 2.89065 18.3332 3.33268 18.3332H14.9993C15.4414 18.3332 15.8653 18.1576 16.1779 17.845C16.4904 17.5325 16.666 17.1086 16.666 16.6665V10.8332M15.416 2.0832C15.7475 1.75168 16.1972 1.56543 16.666 1.56543C17.1349 1.56543 17.5845 1.75168 17.916 2.0832C18.2475 2.41472 18.4338 2.86436 18.4338 3.3332C18.4338 3.80204 18.2475 4.25168 17.916 4.5832L9.99935 12.4999L6.66602 13.3332L7.49935 9.99986L15.416 2.0832Z\"\r\n stroke=\"#1D2939\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </button> -->\r\n <button class=\"btn redo-btn\" type=\"button\" (click)=\"onClickRedo()\">\r\n Redo\r\n </button>\r\n <button class=\"btn btn-outline btn-outline-cus ms-auto\" type=\"button\" (click)=\"onClickKeepPlano()\">\r\n Reject\r\n </button>\r\n <button class=\"btn primary-btn\" type=\"button\"\r\n [disabled]=\"!editableFixture?.isValid\"\r\n [title]=\"editableFixture?.validationMessage || ''\"\r\n (click)=\"onClickAcceptResponse()\">\r\n Accept\r\n </button>\r\n </div>\r\n }\r\n <div class=\"mb-4\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M15.6504 14.6191H4.34863V10.7373C4.23826 10.7455 4.12644 10.75 4.01367 10.75C3.97137 10.75 3.92943 10.7463 3.8877 10.7451V15.8037C3.88788 16.447 4.42222 16.9883 5.09863 16.9883H14.9004C15.5768 16.9883 16.1102 16.447 16.1104 15.8037V10.7451C16.0708 10.7462 16.0311 10.75 15.9912 10.75C15.8768 10.75 15.7629 10.7449 15.6504 10.7363V14.6191ZM15.4639 3.01172H4.53418C4.48723 3.01187 4.44973 3.03776 4.43457 3.06152V3.0625L2.67871 5.80371L2.66016 5.83301C2.04768 6.82786 2.64325 8.11739 3.73438 8.26367C3.83174 8.27561 3.92224 8.28222 4.01074 8.28223C4.58889 8.28223 5.09978 8.03419 5.45605 7.64746L6.00977 7.04688L6.56152 7.64941C6.91341 8.03371 7.42301 8.28215 8.00488 8.28223C8.58433 8.28223 9.09759 8.03349 9.44922 7.64941L10.002 7.04492L10.5557 7.64941C10.9073 8.03349 11.4206 8.28223 12 8.28223C12.5792 8.2821 13.0918 8.03337 13.4434 7.64941L13.9971 7.04492L14.5498 7.64941C14.9014 8.03349 15.4147 8.28223 15.9941 8.28223C16.0791 8.28222 16.1716 8.27533 16.2676 8.26367C17.3635 8.11504 17.9623 6.8008 17.3232 5.80371L15.5645 3.0625L15.5635 3.06152C15.5483 3.03769 15.511 3.01172 15.4639 3.01172Z\"\r\n stroke=\"#101828\" stroke-width=\"1.5\" />\r\n </svg>\r\n <h4>Store response</h4>\r\n <span *ngIf=\"hasFixtureResponse\" class=\"badge inactive me-1\">\r\n Capacity: {{ zoneFixture?.fixtureCapacity || 0 }}\r\n </span>\r\n <svg\r\n *ngIf=\"isApproved && (currentUserAction === 'acceptResponse' || currentUserAction === 'editAccepted')\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect y=\"8.74228e-07\" width=\"20\" height=\"20\" rx=\"10\" fill=\"#D1FADF\" />\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M14.2464 6.15839L8.27969 11.9167L6.69635 10.2251C6.40469 9.95005 5.94635 9.93339 5.61302 10.1667C5.28802 10.4084 5.19635 10.8334 5.39635 11.1751L7.27135 14.2251C7.45469 14.5084 7.77135 14.6834 8.12969 14.6834C8.47135 14.6834 8.79635 14.5084 8.97969 14.2251C9.27969 13.8334 15.0047 7.00839 15.0047 7.00839C15.7547 6.24172 14.8464 5.56672 14.2464 6.15005L14.2464 6.15839Z\"\r\n fill=\"#12B76A\" />\r\n </svg>\r\n\r\n <svg *ngIf=\"isApproved && (currentUserAction === 'keepPlano')\" class=\"ms-auto\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n\r\n <rect width=\"20\" height=\"20\" rx=\"10\" fill=\"#FEE4E2\" />\r\n\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M6.225 6.225C6.56667 5.88333 7.11667 5.88333 7.45833 6.225L10 8.76667L12.5417 6.225C12.8833 5.88333 13.4333 5.88333 13.775 6.225C14.1167 6.56667 14.1167 7.11667 13.775 7.45833L11.2333 10L13.775 12.5417C14.1167 12.8833 14.1167 13.4333 13.775 13.775C13.4333 14.1167 12.8833 14.1167 12.5417 13.775L10 11.2333L7.45833 13.775C7.11667 14.1167 6.56667 14.1167 6.225 13.775C5.88333 13.4333 5.88333 12.8833 6.225 12.5417L8.76667 10L6.225 7.45833C5.88333 7.11667 5.88333 6.56667 6.225 6.225Z\"\r\n fill=\"#F04438\" />\r\n </svg>\r\n <svg *ngIf=\"currentUserAction === 'redo'\"\r\n class=\"ms-auto\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M8.25065 15.8335C6.90343 15.8335 5.74704 15.396 4.78148 14.521C3.81593 13.646 3.33343 12.5557 3.33398 11.2502C3.33398 9.94461 3.81676 8.85433 4.78232 7.97933C5.74787 7.10433 6.90398 6.66683 8.25065 6.66683H13.5007L11.334 4.50016L12.5007 3.3335L16.6673 7.50016L12.5007 11.6668L11.334 10.5002L13.5007 8.3335H8.25065C7.37565 8.3335 6.6151 8.61127 5.96898 9.16683C5.32287 9.72238 5.0001 10.4168 5.00065 11.2502C5.00065 12.0835 5.32371 12.7779 5.96982 13.3335C6.61593 13.8891 7.37621 14.1668 8.25065 14.1668H14.1673V15.8335H8.25065Z\"\r\n fill=\"black\" />\r\n </svg>\r\n </div>\r\n </div>\r\n @if (hasFixtureResponse) {\r\n <zone-editable-fixture\r\n [fixture]=\"zoneFixture\"\r\n [planoFixture]=\"planoFixture\"\r\n [showVMs]=\"false\"\r\n [showHeaderFooterAlways]=\"true\"\r\n [editable]=\"canShowActions\">\r\n </zone-editable-fixture>\r\n } @else {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"94\" height=\"94\" viewBox=\"0 0 94 94\" fill=\"none\">\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M35.9502 48.1997C35.6489 48.2315 35.3422 48.2505 35.0312 48.2505C34.8617 48.2505 34.6944 48.2436 34.5293 48.2339V58.6069C34.5293 60.0349 35.7123 61.226 37.2002 61.2261H56.8047C58.2927 61.2261 59.4756 60.035 59.4756 58.6069V48.2349C59.3137 48.2441 59.1498 48.2505 58.9854 48.2505C58.6714 48.2505 58.3608 48.2325 58.0547 48.1997V55.9878H35.9502V48.1997ZM57.9316 32.7739H36.0732C35.8959 32.7739 35.7406 32.8667 35.6631 32.9878L35.6611 32.9897L32.1514 38.4731L32.0566 38.6206C30.8311 40.7404 32.0957 43.4674 34.4473 43.7769C34.6482 43.8013 34.8379 43.8159 35.0254 43.8159C36.2555 43.8159 37.3434 43.2872 38.1006 42.4653L39.0225 41.4644L39.9414 42.4683C40.6903 43.2863 41.777 43.8159 43.0146 43.8159C44.2467 43.8158 45.3386 43.2856 46.0869 42.4683L47.0088 41.4614L47.9307 42.4683C48.679 43.2857 49.7707 43.8159 51.0029 43.8159C52.2351 43.8159 53.3268 43.2857 54.0752 42.4683L54.9971 41.4614L55.9189 42.4683C56.6673 43.2857 57.76 43.8159 58.9922 43.8159C59.1736 43.8159 59.3687 43.8021 59.5684 43.7778H59.5674C61.9611 43.4573 63.2293 40.6078 61.8613 38.4731L61.8604 38.4741L58.3438 32.9907L58.3428 32.9878C58.2653 32.8665 58.1092 32.7739 57.9316 32.7739Z\"\r\n stroke=\"#009BF3\" stroke-width=\"2.5\" />\r\n </svg>\r\n </div>\r\n <div class=\"mt-3 text-center\">\r\n <div>No response for this fixture yet.</div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Column 3: Store image -->\r\n <div class=\"p-2\" [ngClass]=\"{'col-6': showAction, 'col': !showAction}\">\r\n <div class=\"wrapper\">\r\n <div class=\"mb-4\" [ngStyle]=\"{'margin-top':'12px'}\">\r\n <div class=\"d-flex align-items-center gap-2 my-4\">\r\n <h4>Store Image</h4>\r\n </div>\r\n </div>\r\n @if (zoneImageUrl) {\r\n <div class=\"fixture-image\" (click)=\"onClickImagePreview($event, zoneImageUrl)\">\r\n @if (isImageLoading) {\r\n <ng-container *ngTemplateOutlet=\"skeletonLoader\"></ng-container>\r\n }\r\n <img [src]=\"zoneImageUrl\" alt=\"Store response image\"\r\n [style.display]=\"isImageLoading ? 'none' : 'block'\" (loadstart)=\"onImageLoadStart()\"\r\n (load)=\"onImageLoad()\" (error)=\"onImageError()\" (loadend)=\"onImageLoadEnd()\">\r\n </div>\r\n\r\n <div class=\"img-preview\" *ngIf=\"selectedImageForPreview\" (click)=\"closeImagePreview()\">\r\n <button class=\"preview-close\" (click)=\"$event.stopPropagation(); closeImagePreview()\">✕</button>\r\n <div class=\"preview-zoom-controls\" (click)=\"$event.stopPropagation()\">\r\n <button (click)=\"onPreviewZoomOut()\">−</button>\r\n <input type=\"range\" class=\"zoom-slider\" min=\"25\" max=\"500\" step=\"25\" [value]=\"imagePreviewZoom * 100\"\r\n (input)=\"onPreviewZoomSlider($event)\" />\r\n <span>{{ (imagePreviewZoom * 100).toFixed(0) }}%</span>\r\n <button (click)=\"onPreviewZoomIn()\">+</button>\r\n </div>\r\n <div class=\"preview-image-container\" (click)=\"$event.stopPropagation()\"\r\n (mousedown)=\"onPreviewPanStart($event)\" (mousemove)=\"onPreviewPanMove($event)\"\r\n (mouseup)=\"onPreviewPanEnd()\" (mouseleave)=\"onPreviewPanEnd()\" (wheel)=\"onPreviewWheel($event)\">\r\n <img [src]=\"selectedImageForPreview\" class=\"full-img\"\r\n [style.transform]=\"'scale(' + imagePreviewZoom + ') translate(' + imagePreviewPanX / imagePreviewZoom + 'px,' + imagePreviewPanY / imagePreviewZoom + 'px)'\"\r\n draggable=\"false\" />\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"my-6\">\r\n <div class=\"text-center\">\r\n <svg width=\"186\" height=\"84\" viewBox=\"0 0 186 84\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M130.256 15.3284C140.092 15.3284 148.065 23.302 148.065 33.1379C148.065 37.2176 150.826 41.8684 154.906 41.8684H167.972C177.807 41.8687 185.781 49.8422 185.781 59.678C185.781 69.5141 177.807 77.4885 167.971 77.4885H81.3662C69.7186 77.4883 58.6349 68.4084 46.9873 68.4084H5.93652C2.65782 68.4084 0 65.7506 0 62.4719C0.000127823 59.1933 2.6579 56.5354 5.93652 56.5354H61.8728C63.0069 56.5354 63.9669 55.6929 64.2897 54.6056C64.7994 52.8892 63.6267 50.9485 61.8361 50.9485H43.6514C33.8153 50.9485 25.8418 42.974 25.8418 33.1379C25.842 23.302 33.8154 15.3284 43.6514 15.3284H130.256Z\"\r\n fill=\"#EAECF0\" />\r\n <path\r\n d=\"M126.664 27.335V48.65L120.959 43.75C118.229 41.405 113.819 41.405 111.089 43.75L96.5291 56.245C93.7991 58.59 89.3891 58.59 86.6591 56.245L85.4691 55.265C82.9841 53.095 79.0291 52.885 76.2291 54.775L59.0091 66.325L58.6241 66.605C57.3291 63.805 56.6641 60.48 56.6641 56.665V27.335C56.6641 14.595 64.2591 7 76.9991 7H106.329C119.069 7 126.664 14.595 126.664 27.335Z\"\r\n fill=\"#6BCAFF\" />\r\n <path\r\n d=\"M81.164 36.3299C85.7645 36.3299 89.494 32.6005 89.494 27.9999C89.494 23.3994 85.7645 19.6699 81.164 19.6699C76.5635 19.6699 72.834 23.3994 72.834 27.9999C72.834 32.6005 76.5635 36.3299 81.164 36.3299Z\"\r\n fill=\"#00A3FF\" />\r\n <path\r\n d=\"M126.665 48.65V56.665C126.665 69.405 119.07 77 106.33 77H77C68.075 77 61.635 73.255 58.625 66.605L59.01 66.325L76.23 54.775C79.03 52.885 82.985 53.095 85.47 55.265L86.66 56.245C89.39 58.59 93.8 58.59 96.53 56.245L111.09 43.75C113.82 41.405 118.23 41.405 120.96 43.75L126.665 48.65Z\"\r\n fill=\"#00A3FF\" />\r\n <circle cx=\"138.064\" cy=\"28.3128\" r=\"4.40042\" fill=\"#6BCAFF\" />\r\n <circle cx=\"47.8256\" cy=\"39.2409\" r=\"2.45255\" fill=\"#6BCAFF\" />\r\n <ellipse cx=\"139.183\" cy=\"61.0072\" rx=\"4.29197\" ry=\"4.59854\" fill=\"#00A3FF\" />\r\n </svg>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n @if (zoneFeedback?.answers?.[0]?.comments?.length) {\r\n <div id=\"fixture-comments\">\r\n <h5 class=\"mb-2\">Comments</h5>\r\n\r\n <div class=\"log-block\" *ngFor=\"let c of zoneFeedback?.answers?.[0]?.comments; let i = index\">\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect width=\"32\" height=\"32\" rx=\"16\" fill=\"#EAF8FF\" />\r\n <path\r\n d=\"M22.6673 23.5V21.8333C22.6673 20.9493 22.3161 20.1014 21.691 19.4763C21.0659 18.8512 20.218 18.5 19.334 18.5H12.6673C11.7833 18.5 10.9354 18.8512 10.3103 19.4763C9.68517 20.1014 9.33398 20.9493 9.33398 21.8333V23.5M19.334 11.8333C19.334 13.6743 17.8416 15.1667 16.0007 15.1667C14.1597 15.1667 12.6673 13.6743 12.6673 11.8333C12.6673 9.99238 14.1597 8.5 16.0007 8.5C17.8416 8.5 19.334 9.99238 19.334 11.8333Z\"\r\n stroke=\"#00A3FF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <div class=\"d-flex gap-1 flex-column\">\r\n <h4>{{ c?.userName }}</h4>\r\n <p>{{ c?.timeStamp | date:'hh:mm:ss a - dd MMM yyyy' }}</p>\r\n </div>\r\n\r\n @if (c?.responsetype === 'comment') {\r\n <h5>{{ c?.comment }}</h5>\r\n } @else if (c?.responsetype === 'agree') {\r\n <h5 *ngIf=\"zoneFeedback?.answers?.[0]?.userAction === 'keepPlano'\">\r\n Marked as \"Keep Plano\".\r\n </h5>\r\n <h5 *ngIf=\"zoneFeedback?.answers?.[0]?.userAction === 'acceptResponse'\">\r\n Marked as \"Accept Response\".\r\n </h5>\r\n <h5 *ngIf=\"zoneFeedback?.answers?.[0]?.userAction === 'editAccepted'\">\r\n Marked as \"Accept Response with Modification\".\r\n </h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{ c.comment }}</h5>\r\n } @else if (c?.responsetype === 'disagree') {\r\n <h5>Marked as \"Redo\"</h5>\r\n <h5 *ngIf=\"c?.comment\">Note: {{ c.comment }}</h5>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n\r\n <ng-template #skeletonLoader>\r\n <div class=\"row loader d-flex justify-content-center align-items-center overflow-hidden\">\r\n <div class=\"shimmer rounded\">\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 class=\"stroke animate description\"></div>\r\n <br />\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 <br />\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 <br />\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 <br />\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</section>", styles: [".nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.draft{color:#009bf3;background:#eaf8ff}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.draft{background:#f2f4f7;color:#667085}.indicator.draft path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.allocationPending{background:#fef0c7;color:#f79009}.indicator.allocationPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}.restrict-interaction{-webkit-user-select:none;user-select:none;pointer-events:none}.btn .spinner{height:22px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:4px;stroke:#071437;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}#verification-feedback{height:100%;overflow-y:auto}#verification-feedback .fixture-navigate,#verification-feedback .task-info-header{user-select:none;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}#verification-feedback h5{color:#1d2939;font-family:Inter;font-weight:600;font-size:12px;line-height:18px;margin:0}#verification-feedback .log-block{display:flex;gap:12px;padding:4px;margin-bottom:18px}#verification-feedback .log-block h4{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback .log-block p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085;margin:0}#verification-feedback #task-info .task-info-header{background-color:#fff!important;padding:6px;width:100%}#verification-feedback #task-info .task-info-header h2{font-weight:600;font-size:14px;line-height:20px;color:#1d2939}#verification-feedback #task-info .task-info-header p{font-family:Inter;font-weight:400;font-size:12px;line-height:18px;color:#667085}#verification-feedback #fixture-quick-details .quick-edit-container{background:#f9fafb;padding:12px;border-radius:6px;width:100%;height:100%}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-quick-details .quick-edit-container .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-quick-details .quick-edit-container .redo-btn{font-family:Inter;font-weight:600;font-size:14px;line-height:18px;color:#1d2939;cursor:pointer}#verification-feedback #fixture-quick-details .quick-edit-container h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .label{font-family:Inter;font-weight:500;font-size:14px;line-height:20px;color:#475467;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .quick-details .value{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin-bottom:0}#verification-feedback #fixture-quick-details .quick-edit-container .diff .value{color:#d92d20!important;font-weight:600}#verification-feedback #fixture-quick-details .quick-edit-container .edit-input{padding:0 4px;border-radius:4px;width:50%;height:20px}#verification-feedback #fixture-comparison .wrapper{padding:12px;background:#f9fafb;border-radius:4px;height:100%}#verification-feedback #fixture-comparison .primary-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#009bf3;background:#eaf8ff;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .primary-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .btn-outline-cus{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .btn-outline-cus:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .quick-btn{font-size:13px!important;line-height:10px!important;padding:6px 8px!important;border:1px solid rgb(208,213,221);box-shadow:0 1px 2px #1018280d;background:#fff}#verification-feedback #fixture-comparison .quick-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison .redo-btn{font-weight:600;font-size:12px;padding:8px 16px;line-height:18px;border-radius:8px;color:#344054;background:#fff;border:1px solid #d0d5dd;box-shadow:0 1px 2px #1018280d}#verification-feedback #fixture-comparison .redo-btn:hover{box-shadow:0 1px 2px #10182834}#verification-feedback #fixture-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison h4{font-family:Inter;font-weight:500;font-size:16px;line-height:24px;color:#1d2939;margin:0}#verification-feedback #fixture-comparison p{font-weight:400;font-size:12px;line-height:18px;color:#475467;margin:0}#verification-feedback #fixture-comparison .fixture-image{margin-bottom:12px}#verification-feedback #fixture-comparison .fixture-image img{object-fit:contain;width:100%}#verification-feedback #vm-comparison h5{font-family:Inter;font-weight:600;font-size:14px;line-height:20px;color:#1d2939;margin:0}#verification-feedback #vm-comparison .vm-container{padding:12px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);display:flex;gap:12px;cursor:pointer}#verification-feedback #vm-comparison .vm-container .vm-img{width:134px;height:134px;border-radius:4px;border:1px solid var(--Gray-200, #eaecf0);background:var(--Gray-50, #f9fafb)}#verification-feedback #vm-comparison .vm-container .vm-img img{border-radius:2px;min-width:132px;min-height:134px;object-fit:contain;width:100%;height:100%;display:block}#verification-feedback #vm-comparison .vm-container .vm-details,#verification-feedback #vm-comparison .vm-container .vm-details h5{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#verification-feedback .disabled{pointer-events:none;cursor:not-allowed!important;opacity:.6}.loader .shimmer{height:unset}#verification-feedback .img-preview{position:fixed;inset:0;background:#000000d9;display:flex;align-items:center;justify-content:center;z-index:9999;cursor:default}#verification-feedback .preview-close{position:absolute;top:16px;right:16px;background:#ffffff26;border:none;color:#fff;font-size:20px;width:36px;height:36px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000}#verification-feedback .preview-close:hover{background:#ffffff4d}#verification-feedback .preview-zoom-controls{position:absolute;bottom:24px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:12px;background:#ffffff26;border-radius:8px;padding:6px 16px;z-index:10000}#verification-feedback .preview-zoom-controls span{color:#fff;font-size:14px;min-width:48px;text-align:center;-webkit-user-select:none;user-select:none}#verification-feedback .preview-zoom-controls button{background:none;border:none;color:#fff;font-size:18px;cursor:pointer;width:28px;height:28px;border-radius:4px;display:flex;align-items:center;justify-content:center}#verification-feedback .preview-zoom-controls button:hover{background:#fff3}#verification-feedback .preview-zoom-controls .zoom-slider{-webkit-appearance:none;appearance:none;width:120px;height:4px;background:#ffffff4d;border-radius:2px;outline:none;cursor:pointer}#verification-feedback .preview-zoom-controls .zoom-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:#fff;cursor:pointer}#verification-feedback .preview-zoom-controls .zoom-slider::-moz-range-thumb{width:14px;height:14px;border-radius:50%;background:#fff;border:none;cursor:pointer}#verification-feedback .preview-image-container{overflow:hidden;display:flex;align-items:center;justify-content:center;width:90vw;height:85vh;cursor:default}#verification-feedback .preview-image-container:active{cursor:grabbing}#verification-feedback .full-img{max-width:90vw;max-height:85vh;border-radius:10px;object-fit:contain;cursor:grab;-webkit-user-select:none;user-select:none}#verification-feedback .full-img:active{cursor:grabbing}\n"] }]
|
|
303
303
|
}], ctorParameters: () => [{ type: i1.NgbModal }], propDecorators: { floorData: [{
|
|
304
304
|
type: Input
|
|
305
305
|
}], feedbackDetails: [{
|
|
@@ -322,4 +322,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
322
322
|
type: ViewChild,
|
|
323
323
|
args: [ZoneEditableFixtureComponent]
|
|
324
324
|
}] } });
|
|
325
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZS12ZXJpZmljYXRpb24tZmVlZGJhY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvbWFuYWdlLXN0b3JlLXBsYW5vL3pvbmUtdmVyaWZpY2F0aW9uLWZlZWRiYWNrL3pvbmUtdmVyaWZpY2F0aW9uLWZlZWRiYWNrLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby96b25lLXZlcmlmaWNhdGlvbi1mZWVkYmFjay96b25lLXZlcmlmaWNhdGlvbi1mZWVkYmFjay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUMzSCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQzs7Ozs7QUFROUgsTUFBTSxPQUFPLGlDQUFpQztJQW1CeEI7SUFsQlgsU0FBUyxDQUFNO0lBQ2YsZUFBZSxDQUFNO0lBQ3JCLFFBQVEsQ0FBTTtJQUNkLFlBQVksQ0FBTTtJQUNsQixhQUFhLEdBQVUsRUFBRSxDQUFDO0lBQzFCLEdBQUcsQ0FBUztJQUNaLFVBQVUsR0FBWSxJQUFJLENBQUM7SUFFMUIsYUFBYSxHQUFHLElBQUksWUFBWSxFQUd0QyxDQUFDO0lBRUssTUFBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFHM0MsZUFBZSxDQUFnQztJQUUvQyxZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQUcs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LFNBQVM7K0JBQ0UsZ0NBQWdDOzZFQUtqQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFLRyxNQUFNO3NCQUFmLE1BQU07Z0JBR1AsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IEFjdGlvbkNvbmZpcm1Qb3B1cENvbXBvbmVudCB9IGZyb20gXCIuLi92ZXJpZmljYXRpb24tZmVlZGJhY2svYWN0aW9uLWNvbmZpcm0tcG9wdXAvYWN0aW9uLWNvbmZpcm0tcG9wdXAuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpvbmVFZGl0YWJsZUZpeHR1cmVDb21wb25lbnQgfSBmcm9tIFwiLi4vdmVyaWZpY2F0aW9uLWZlZWRiYWNrL3pvbmUtZWRpdGFibGUtZml4dHVyZS96b25lLWVkaXRhYmxlLWZpeHR1cmUuY29tcG9uZW50XCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXpvbmUtdmVyaWZpY2F0aW9uLWZlZWRiYWNrXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96b25lLXZlcmlmaWNhdGlvbi1mZWVkYmFjay5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vem9uZS12ZXJpZmljYXRpb24tZmVlZGJhY2suY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFpvbmVWZXJpZmljYXRpb25GZWVkYmFja0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgZmxvb3JEYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgZmVlZGJhY2tEZXRhaWxzOiBhbnk7XHJcbiAgQElucHV0KCkgem9uZVRhc2s6IGFueTtcclxuICBASW5wdXQoKSB6b25lRmVlZGJhY2s6IGFueTtcclxuICBASW5wdXQoKSB0b3RhbEZpeHR1cmVzOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGNkbjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNob3dBY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBAT3V0cHV0KCkgY2hhbmdlRml4dHVyZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgY3VycmVudEZpeHR1cmU6IHN0cmluZztcclxuICAgIGFjdGlvbjogXCJuZXh0XCIgfCBcInByZXZpb3VzXCI7XHJcbiAgfT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKFpvbmVFZGl0YWJsZUZpeHR1cmVDb21wb25lbnQpXHJcbiAgZWRpdGFibGVGaXh0dXJlPzogWm9uZUVkaXRhYmxlRml4dHVyZUNvbXBvbmVudDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ2JNb2RhbDogTmdiTW9kYWwpIHt9XHJcblxyXG4gIHBsYW5vRml4dHVyZTogYW55O1xyXG4gIHpvbmVGaXh0dXJlOiBhbnk7XHJcbiAgY3VycmVudEZpeHR1cmVJbmRleDogbnVtYmVyID0gMDtcclxuXHJcbiAgc2VsZWN0ZWRJbWFnZUZvclByZXZpZXc6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIGltYWdlUHJldmlld1pvb206IG51bWJlciA9IDE7XHJcbiAgaW1hZ2VQcmV2aWV3UGFuWDogbnVtYmVyID0gMDtcclxuICBpbWFnZVByZXZpZXdQYW5ZOiBudW1iZXIgPSAwO1xyXG4gIGlzUGFubmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcGFuTGFzdFg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBwYW5MYXN0WTogbnVtYmVyID0gMDtcclxuXHJcbiAgaXNJbWFnZUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHByZXZpb3VzSW1hZ2VVcmw6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzW1wiZmVlZGJhY2tEZXRhaWxzXCJdIHx8IGNoYW5nZXNbXCJ6b25lRmVlZGJhY2tcIl0gfHwgY2hhbmdlc1tcImNkblwiXSkge1xyXG4gICAgICB0aGlzLnBsYW5vRml4dHVyZSA9IHRoaXMuZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LkZpeHR1cmVEYXRhO1xyXG4gICAgICB0aGlzLmN1cnJlbnRGaXh0dXJlSW5kZXggPVxyXG4gICAgICAgIHRoaXMudG90YWxGaXh0dXJlcy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAoZjogYW55KSA9PlxyXG4gICAgICAgICAgICBmLl9pZCA9PT0gdGhpcy5mZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8uZml4dHVyZUlkLFxyXG4gICAgICAgICkgKyAxO1xyXG4gICAgICB0aGlzLnpvbmVGaXh0dXJlID0gdGhpcy5idWlsZFpvbmVGaXh0dXJlKFxyXG4gICAgICAgIHRoaXMuem9uZUZlZWRiYWNrLFxyXG4gICAgICAgIHRoaXMucGxhbm9GaXh0dXJlLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgbmV3SW1hZ2VVcmwgPSB0aGlzLnpvbmVJbWFnZVVybDtcclxuXHJcbiAgICAgIGlmIChuZXdJbWFnZVVybCAmJiBuZXdJbWFnZVVybCAhPT0gdGhpcy5wcmV2aW91c0ltYWdlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0ltYWdlVXJsID0gbmV3SW1hZ2VVcmw7XHJcbiAgICAgICAgdGhpcy5pc0ltYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoIW5ld0ltYWdlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0ltYWdlVXJsID0gXCJcIjtcclxuICAgICAgICB0aGlzLmlzSW1hZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRab25lRml4dHVyZShyb3c6IGFueSwgcGxhbm9GaXh0dXJlOiBhbnkpOiBhbnkge1xyXG4gICAgY29uc3QgYW5zID0gcm93Py5hbnN3ZXJzPy5bMF07XHJcbiAgICBpZiAoIWFucykgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYW5zLnNoZWxmQ29uZmlnKSB8fCBhbnMuc2hlbGZDb25maWcubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZml4dHVyZUlkOiByb3c/LmZpeHR1cmVJZCxcclxuICAgICAgZml4dHVyZTogYW5zLmZpeHR1cmUsXHJcbiAgICAgIGZpeHR1cmVUeXBlOiBhbnMuZml4dHVyZVR5cGUgPz8gcGxhbm9GaXh0dXJlPy5maXh0dXJlVHlwZSxcclxuICAgICAgZml4dHVyZUNhdGVnb3J5OiBhbnMuZml4dHVyZUNhdGVnb3J5ID8/IHBsYW5vRml4dHVyZT8uZml4dHVyZUNhdGVnb3J5LFxyXG4gICAgICBmaXh0dXJlQ2FwYWNpdHk6IGFucy5maXh0dXJlQ2FwYWNpdHksXHJcbiAgICAgIGZpeHR1cmVJbWFnZTogYW5zLmZpeHR1cmVJbWFnZSxcclxuICAgICAgaXNFbXB0eTogYW5zLmlzRW1wdHksXHJcbiAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgIC4uLihwbGFub0ZpeHR1cmU/LmhlYWRlciA/PyB7fSksXHJcbiAgICAgICAgLi4uKGFucy5oZWFkZXIgPz8ge30pLFxyXG4gICAgICB9LFxyXG4gICAgICBmb290ZXI6IHBsYW5vRml4dHVyZT8uZm9vdGVyLFxyXG4gICAgICBwcm9kdWN0UmVzb2x1dGlvbkxldmVsOiBwbGFub0ZpeHR1cmU/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwsXHJcbiAgICAgIHNoZWxmQ29uZmlnOiBhbnMuc2hlbGZDb25maWcsXHJcbiAgICAgIHZtQ29uZmlnOiBbXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzWm9uZVRhc2soKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnpvbmVUYXNrO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzVGFza09wZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy56b25lVGFzaz8uY2hlY2tsaXN0U3RhdHVzID09PSBcIm9wZW5cIjtcclxuICB9XHJcblxyXG4gIGdldCBoYXNGaXh0dXJlUmVzcG9uc2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnpvbmVGaXh0dXJlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRVc2VyQWN0aW9uKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuem9uZUZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/LnVzZXJBY3Rpb24gPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldCBpc0FwcHJvdmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5jdXJyZW50VXNlckFjdGlvbjtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGFjdGlvbiA9PT0gXCJrZWVwUGxhbm9cIiB8fFxyXG4gICAgICBhY3Rpb24gPT09IFwiYWNjZXB0UmVzcG9uc2VcIiB8fFxyXG4gICAgICBhY3Rpb24gPT09IFwiZWRpdEFjY2VwdGVkXCJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBUcnVlIGZvciBhbnkgYWN0aW9uIHRha2VuIChhcHByb3ZlLXN0eWxlIG9yIHJlZG8pLiBVc2VkIHRvIGhpZGUgdGhlIGFjdGlvbiByb3dcclxuICAvLyBvbmNlIHRoZSB1c2VyIGhhcyBkZWNpZGVkIOKAlCBtaXJyb3JzIGZpeHR1cmUgdmVyaWZpY2F0aW9uLlxyXG4gIGdldCBpc0FjdGlvbmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNBcHByb3ZlZCB8fCB0aGlzLmN1cnJlbnRVc2VyQWN0aW9uID09PSBcInJlZG9cIjtcclxuICB9XHJcblxyXG4gIGdldCBpc0NsRml4dHVyZSgpOiBib29sZWFuIHtcclxuICAgIC8vIE1hdGNoIHRoZSBjb21wbGlhbmNlLXNpZGUgQ0wgcnVsZTogaGVhZGVyLmxhYmVsID09PSAnQ0wnIE9SIHRlbXBsYXRlR3JvdXBOYW1lXHJcbiAgICAvLyA9PT0gJ0NMJy4gcGxhbm9GaXh0dXJlIGlzIHRoZSBsaXZlIHN0b3JlIGZpeHR1cmUgcmVjb3JkIHNvIHRlbXBsYXRlR3JvdXBOYW1lXHJcbiAgICAvLyBpcyBhbHdheXMgcG9wdWxhdGVkOyB0aGlzIGNhdGNoZXMgQ0wgZml4dHVyZXMgd2hvc2UgbW9iaWxlLXNpZGUgaGVhZGVyIHdhc1xyXG4gICAgLy8gcmVwb3J0ZWQgd2l0aCBhIGJyYW5kLXNwZWNpZmljIGxhYmVsLlxyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5wbGFub0ZpeHR1cmU/LmhlYWRlcj8ubGFiZWwgPT09IFwiQ0xcIiB8fFxyXG4gICAgICB0aGlzLnBsYW5vRml4dHVyZT8udGVtcGxhdGVHcm91cE5hbWUgPT09IFwiQ0xcIlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldCB6b25lSW1hZ2VVcmwoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlbCA9XHJcbiAgICAgIHRoaXMuem9uZUZpeHR1cmU/LmZpeHR1cmVJbWFnZSA/P1xyXG4gICAgICB0aGlzLnpvbmVGZWVkYmFjaz8uYW5zd2Vycz8uWzBdPy5maXh0dXJlSW1hZ2UgPz9cclxuICAgICAgXCJcIjtcclxuICAgIHJldHVybiB0aGlzLmNkbiAmJiByZWwgPyB0aGlzLmNkbiArIHJlbCA6IFwiXCI7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FuU2hvd0FjdGlvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnNob3dBY3Rpb24gJiZcclxuICAgICAgISF0aGlzLnpvbmVUYXNrICYmXHJcbiAgICAgIHRoaXMuem9uZVRhc2s/LmNoZWNrbGlzdFN0YXR1cyA9PT0gXCJzdWJtaXRcIiAmJlxyXG4gICAgICAhdGhpcy5pc0FjdGlvbmVkICYmXHJcbiAgICAgICF0aGlzLmlzQ2xGaXh0dXJlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25DbGlja0tlZXBQbGFubygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybUFjdGlvbihcInJlamVjdFJlc3BvbnNlXCIpO1xyXG4gICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQuYWN0aW9uID09PSBcIm5vdE9rXCIpIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMuZWRpdGFibGVGaXh0dXJlPy5yZXNldFRvT3JpZ2luYWwoKTtcclxuXHJcbiAgICAgIHRoaXMuYWN0aW9uLmVtaXQoe1xyXG4gICAgICAgIGFjdGlvbjogXCJrZWVwUGxhbm9cIixcclxuICAgICAgICB0eXBlOiBcImFncmVlXCIsXHJcbiAgICAgICAgZml4dHVyZURhdGE6IHRoaXMucGxhbm9GaXh0dXJlLFxyXG4gICAgICAgIGZlZWRiYWNrOiB0aGlzLnpvbmVGZWVkYmFjayxcclxuICAgICAgICByZW1hcmtzOiByZXN1bHQucmVtYXJrLFxyXG4gICAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhPy5wbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhPy5faWQsXHJcbiAgICAgICAgdGFza1R5cGU6IFwiem9uZVZlcmlmaWNhdGlvblwiLFxyXG4gICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBab25lIG9uQ2xpY2tLZWVwUGxhbm8gW0VSUl06XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQ2xpY2tBY2NlcHRSZXNwb25zZSgpIHtcclxuICAgIGlmICghdGhpcy5oYXNGaXh0dXJlUmVzcG9uc2UpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5lZGl0YWJsZUZpeHR1cmU/LmlzVmFsaWQpIHJldHVybjtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybUFjdGlvbihcImFjY2VwdFJlc3BvbnNlXCIpO1xyXG4gICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQuYWN0aW9uID09PSBcIm5vdE9rXCIpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGlzTW9kaWZpZWQgPSAhIXRoaXMuZWRpdGFibGVGaXh0dXJlPy5pc0RpcnR5O1xyXG5cclxuICAgICAgdGhpcy5hY3Rpb24uZW1pdCh7XHJcbiAgICAgICAgYWN0aW9uOiBpc01vZGlmaWVkID8gXCJlZGl0QWNjZXB0ZWRcIiA6IFwiYWNjZXB0UmVzcG9uc2VcIixcclxuICAgICAgICB0eXBlOiBcImFncmVlXCIsXHJcbiAgICAgICAgZml4dHVyZURhdGE6IHRoaXMuem9uZUZpeHR1cmUsXHJcbiAgICAgICAgZmVlZGJhY2s6IHRoaXMuem9uZUZlZWRiYWNrLFxyXG4gICAgICAgIHJlbWFya3M6IHJlc3VsdC5yZW1hcmssXHJcbiAgICAgICAgcGxhbm9JZDogdGhpcy5mbG9vckRhdGE/LnBsYW5vSWQsXHJcbiAgICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGE/Ll9pZCxcclxuICAgICAgICB0YXNrVHlwZTogXCJ6b25lVmVyaWZpY2F0aW9uXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IFpvbmUgb25DbGlja0FjY2VwdFJlc3BvbnNlIFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrRWRpdFJlc3BvbnNlKCkge1xyXG4gICAgaWYgKCF0aGlzLmhhc0ZpeHR1cmVSZXNwb25zZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5hY3Rpb24uZW1pdCh7XHJcbiAgICAgIGFjdGlvbjogXCJlZGl0V2l0aFJlc3BvbnNlXCIsXHJcbiAgICAgIHR5cGU6IFwiYWdyZWVcIixcclxuICAgICAgZml4dHVyZURhdGE6IHRoaXMuem9uZUZpeHR1cmUsXHJcbiAgICAgIGZlZWRiYWNrOiB0aGlzLnpvbmVGZWVkYmFjayxcclxuICAgICAgcGxhbm9JZDogdGhpcy5mbG9vckRhdGE/LnBsYW5vSWQsXHJcbiAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhPy5faWQsXHJcbiAgICAgIHRhc2tUeXBlOiBcInpvbmVWZXJpZmljYXRpb25cIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25DbGlja1JlZG8oKSB7XHJcbiAgICBpZiAoIXRoaXMuaGFzRml4dHVyZVJlc3BvbnNlKSByZXR1cm47XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbmZpcm1BY3Rpb24oXCJyZWRvXCIpO1xyXG4gICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQuYWN0aW9uID09PSBcIm5vdE9rXCIpIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMuZWRpdGFibGVGaXh0dXJlPy5yZXNldFRvT3JpZ2luYWwoKTtcclxuXHJcbiAgICAgIHRoaXMuYWN0aW9uLmVtaXQoe1xyXG4gICAgICAgIGFjdGlvbjogXCJyZWRvXCIsXHJcbiAgICAgICAgdHlwZTogXCJkaXNhZ3JlZVwiLFxyXG4gICAgICAgIGZpeHR1cmVEYXRhOiBudWxsLFxyXG4gICAgICAgIGZlZWRiYWNrOiB0aGlzLnpvbmVGZWVkYmFjayxcclxuICAgICAgICByZW1hcmtzOiByZXN1bHQucmVtYXJrLFxyXG4gICAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhPy5wbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhPy5faWQsXHJcbiAgICAgICAgdGFza1R5cGU6IFwiem9uZVZlcmlmaWNhdGlvblwiLFxyXG4gICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBab25lIG9uQ2xpY2tSZWRvIFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNvbmZpcm1BY3Rpb24oXHJcbiAgICB0eXBlOiBcImtlZXBQbGFub1wiIHwgXCJhY2NlcHRSZXNwb25zZVwiIHwgXCJyZWplY3RSZXNwb25zZVwiIHwgXCJyZWRvXCIsXHJcbiAgKTogUHJvbWlzZTx7IGFjdGlvbjogc3RyaW5nOyByZW1hcms6IHN0cmluZyB8IG51bGwgfSB8IG51bGw+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKEFjdGlvbkNvbmZpcm1Qb3B1cENvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgICAgfSk7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0eXBlO1xyXG5cclxuICAgICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPHtcclxuICAgICAgICBhY3Rpb246IHN0cmluZztcclxuICAgICAgICByZW1hcms6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgIH0+KChyZXN1bHQpID0+IHJlc3VsdCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlRml4dHVyZShhY3Rpb246IFwibmV4dFwiIHwgXCJwcmV2aW91c1wiKSB7XHJcbiAgICBjb25zdCBmaXh0dXJlSWQgPSB0aGlzLmZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy5maXh0dXJlSWQ7XHJcbiAgICBpZiAoIWZpeHR1cmVJZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5jaGFuZ2VGaXh0dXJlLmVtaXQoeyBjdXJyZW50Rml4dHVyZTogZml4dHVyZUlkLCBhY3Rpb24gfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrSW1hZ2VQcmV2aWV3KGV2ZW50OiBNb3VzZUV2ZW50LCBpbWdVcmw6IHN0cmluZykge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2VGb3JQcmV2aWV3ID0gaW1nVXJsO1xyXG4gICAgdGhpcy5pbWFnZVByZXZpZXdab29tID0gMTtcclxuICAgIHRoaXMuaW1hZ2VQcmV2aWV3UGFuWCA9IDA7XHJcbiAgICB0aGlzLmltYWdlUHJldmlld1BhblkgPSAwO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VJbWFnZVByZXZpZXcoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2VGb3JQcmV2aWV3ID0gbnVsbDtcclxuICAgIHRoaXMuaW1hZ2VQcmV2aWV3Wm9vbSA9IDE7XHJcbiAgICB0aGlzLmltYWdlUHJldmlld1BhblggPSAwO1xyXG4gICAgdGhpcy5pbWFnZVByZXZpZXdQYW5ZID0gMDtcclxuICB9XHJcblxyXG4gIG9uUHJldmlld1pvb21JbigpIHtcclxuICAgIHRoaXMuaW1hZ2VQcmV2aWV3Wm9vbSA9IE1hdGgubWluKHRoaXMuaW1hZ2VQcmV2aWV3Wm9vbSArIDAuMjUsIDUpO1xyXG4gICAgaWYgKHRoaXMuaW1hZ2VQcmV2aWV3Wm9vbSA8PSAxKSB0aGlzLnJlc2V0UGFuKCk7XHJcbiAgfVxyXG5cclxuICBvblByZXZpZXdab29tT3V0KCkge1xyXG4gICAgdGhpcy5pbWFnZVByZXZpZXdab29tID0gTWF0aC5tYXgodGhpcy5pbWFnZVByZXZpZXdab29tIC0gMC4yNSwgMC4yNSk7XHJcbiAgICBpZiAodGhpcy5pbWFnZVByZXZpZXdab29tIDw9IDEpIHRoaXMucmVzZXRQYW4oKTtcclxuICB9XHJcblxyXG4gIG9uUHJldmlld1pvb21TbGlkZXIoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9ICsoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xyXG4gICAgdGhpcy5pbWFnZVByZXZpZXdab29tID0gdmFsdWUgLyAxMDA7XHJcbiAgICBpZiAodGhpcy5pbWFnZVByZXZpZXdab29tIDw9IDEpIHRoaXMucmVzZXRQYW4oKTtcclxuICB9XHJcblxyXG4gIG9uUHJldmlld1doZWVsKGV2ZW50OiBXaGVlbEV2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKGV2ZW50LmRlbHRhWSA8IDApIHtcclxuICAgICAgdGhpcy5vblByZXZpZXdab29tSW4oKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub25QcmV2aWV3Wm9vbU91dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25QcmV2aWV3UGFuU3RhcnQoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmltYWdlUHJldmlld1pvb20gPD0gMSkgcmV0dXJuO1xyXG4gICAgdGhpcy5pc1Bhbm5pbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5wYW5MYXN0WCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICB0aGlzLnBhbkxhc3RZID0gZXZlbnQuY2xpZW50WTtcclxuICB9XHJcblxyXG4gIG9uUHJldmlld1Bhbk1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc1Bhbm5pbmcpIHJldHVybjtcclxuICAgIGNvbnN0IGR4ID0gZXZlbnQuY2xpZW50WCAtIHRoaXMucGFuTGFzdFg7XHJcbiAgICBjb25zdCBkeSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLnBhbkxhc3RZO1xyXG4gICAgdGhpcy5wYW5MYXN0WCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICB0aGlzLnBhbkxhc3RZID0gZXZlbnQuY2xpZW50WTtcclxuICAgIHRoaXMuaW1hZ2VQcmV2aWV3UGFuWCArPSBkeDtcclxuICAgIHRoaXMuaW1hZ2VQcmV2aWV3UGFuWSArPSBkeTtcclxuICB9XHJcblxyXG4gIG9uUHJldmlld1BhbkVuZCgpIHtcclxuICAgIHRoaXMuaXNQYW5uaW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0UGFuKCkge1xyXG4gICAgdGhpcy5pbWFnZVByZXZpZXdQYW5YID0gMDtcclxuICAgIHRoaXMuaW1hZ2VQcmV2aWV3UGFuWSA9IDA7XHJcbiAgfVxyXG5cclxuICBvbkltYWdlTG9hZCgpIHtcclxuICAgIHRoaXMuaXNJbWFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uSW1hZ2VFcnJvcigpIHtcclxuICAgIHRoaXMuaXNJbWFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uSW1hZ2VMb2FkU3RhcnQoKSB7XHJcbiAgICB0aGlzLmlzSW1hZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uSW1hZ2VMb2FkRW5kKCkge1xyXG4gICAgdGhpcy5pc0ltYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cInZlcmlmaWNhdGlvbi1mZWVkYmFja1wiPlxyXG5cclxuICA8IS0tIFRhc2sgaW5mbyBhY2NvcmRpb24gLS0+XHJcbiAgPGRpdiAqbmdJZj1cImhhc1pvbmVUYXNrXCIgaWQ9XCJ0YXNrLWluZm9cIiBuZ2JBY2NvcmRpb24gI2FjY29yZGlvbj1cIm5nYkFjY29yZGlvblwiPlxyXG4gICAgPGRpdiBuZ2JBY2NvcmRpb25JdGVtPVwiZGV0YWlsc1wiPlxyXG4gICAgICA8ZGl2IG5nYkFjY29yZGlvbkhlYWRlciBuZ2JBY2NvcmRpb25Ub2dnbGUgY2xhc3M9XCJhY2NvcmRpb24tYnV0dG9uIHRhc2staW5mby1oZWFkZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICAgIDxoMj5ab25lIHZlcmlmaWNhdGlvbiBhc3NpZ25lZDwvaDI+XHJcbiAgICAgICAgICA8cD57eyB6b25lVGFzaz8uY3JlYXRlZEF0IHwgZGF0ZTogJ2hoOm1tOnNzIGEgLSBkZCBNTU0geXl5eScgfX08L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2ctYmxvY2tcIj5cclxuICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHJ4PVwiMTZcIiBmaWxsPVwiI0VBRjhGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICBkPVwiTTIyLjY2NzMgMjMuNVYyMS44MzMzQzIyLjY2NzMgMjAuOTQ5MyAyMi4zMTYxIDIwLjEwMTQgMjEuNjkxIDE5LjQ3NjNDMjEuMDY1OSAxOC44NTEyIDIwLjIxOCAxOC41IDE5LjMzNCAxOC41SDEyLjY2NzNDMTEuNzgzMyAxOC41IDEwLjkzNTQgMTguODUxMiAxMC4zMTAzIDE5LjQ3NjNDOS42ODUxNyAyMC4xMDE0IDkuMzMzOTggMjAuOTQ5MyA5LjMzMzk4IDIxLjgzMzNWMjMuNU0xOS4zMzQgMTEuODMzM0MxOS4zMzQgMTMuNjc0MyAxNy44NDE2IDE1LjE2NjcgMTYuMDAwNyAxNS4xNjY3QzE0LjE1OTcgMTUuMTY2NyAxMi42NjczIDEzLjY3NDMgMTIuNjY3MyAxMS44MzMzQzEyLjY2NzMgOS45OTIzOCAxNC4xNTk3IDguNSAxNi4wMDA3IDguNUMxNy44NDE2IDguNSAxOS4zMzQgOS45OTIzOCAxOS4zMzQgMTEuODMzM1pcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTEgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxoND57eyB6b25lVGFzaz8uY3JlYXRlZEJ5TmFtZSB9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8cD57eyB6b25lVGFzaz8uY3JlYXRlZEF0IHwgZGF0ZTogJ2hoOm1tYSwgZGQgTU1NIHl5eXknIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPGg1PkFzc2lnbmVyPC9oNT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiByeD1cIjE2XCIgZmlsbD1cIiNFQUY4RkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgZD1cIk0yMi42NjczIDIzLjVWMjEuODMzM0MyMi42NjczIDIwLjk0OTMgMjIuMzE2MSAyMC4xMDE0IDIxLjY5MSAxOS40NzYzQzIxLjA2NTkgMTguODUxMiAyMC4yMTggMTguNSAxOS4zMzQgMTguNUgxMi42NjczQzExLjc4MzMgMTguNSAxMC45MzU0IDE4Ljg1MTIgMTAuMzEwMyAxOS40NzYzQzkuNjg1MTcgMjAuMTAxNCA5LjMzMzk4IDIwLjk0OTMgOS4zMzM5OCAyMS44MzMzVjIzLjVNMTkuMzM0IDExLjgzMzNDMTkuMzM0IDEzLjY3NDMgMTcuODQxNiAxNS4xNjY3IDE2LjAwMDcgMTUuMTY2N0MxNC4xNTk3IDE1LjE2NjcgMTIuNjY3MyAxMy42NzQzIDEyLjY2NzMgMTEuODMzM0MxMi42NjczIDkuOTkyMzggMTQuMTU5NyA4LjUgMTYuMDAwNyA4LjVDMTcuODQxNiA4LjUgMTkuMzM0IDkuOTkyMzggMTkuMzM0IDExLjgzMzNaXCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8aDQ+e3sgem9uZVRhc2s/LnVzZXJOYW1lIH19PC9oND5cclxuICAgICAgICAgICAgICAgIDxwPnt7IHpvbmVUYXNrPy5zdWJtaXRUaW1lX3N0cmluZyB8fCB6b25lVGFzaz8uc3RhcnRUaW1lX3N0cmluZyB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDxoNT5Bc3NpZ25lZTwvaDU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInpvbmVUYXNrPy5jb21tZW50cz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPkNvbW1lbnRzPC9oNT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nLWJsb2NrXCIgKm5nRm9yPVwibGV0IGMgb2Ygem9uZVRhc2s/LmNvbW1lbnRzXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgcng9XCIxNlwiIGZpbGw9XCIjRUFGOEZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTIyLjY2NzMgMjMuNVYyMS44MzMzQzIyLjY2NzMgMjAuOTQ5MyAyMi4zMTYxIDIwLjEwMTQgMjEuNjkxIDE5LjQ3NjNDMjEuMDY1OSAxOC44NTEyIDIwLjIxOCAxOC41IDE5LjMzNCAxOC41SDEyLjY2NzNDMTEuNzgzMyAxOC41IDEwLjkzNTQgMTguODUxMiAxMC4zMTAzIDE5LjQ3NjNDOS42ODUxNyAyMC4xMDE0IDkuMzMzOTggMjAuOTQ5MyA5LjMzMzk4IDIxLjgzMzNWMjMuNU0xOS4zMzQgMTEuODMzM0MxOS4zMzQgMTMuNjc0MyAxNy44NDE2IDE1LjE2NjcgMTYuMDAwNyAxNS4xNjY3QzE0LjE1OTcgMTUuMTY2NyAxMi42NjczIDEzLjY3NDMgMTIuNjY3MyAxMS44MzMzQzEyLjY2NzMgOS45OTIzOCAxNC4xNTk3IDguNSAxNi4wMDA3IDguNUMxNy44NDE2IDguNSAxOS4zMzQgOS45OTIzOCAxOS4zMzQgMTEuODMzM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMSBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICA8aDQ+e3sgYz8udXNlck5hbWUgfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgICA8cD57eyBjPy5jcmVhdGVkQXQgfCBkYXRlOidoaDptbTpzcyBhIC0gZGQgTU1NIHl5eXknIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICA8aDU+e3sgYz8uY29tbWVudCB9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8aHIgKm5nSWY9XCJoYXNab25lVGFza1wiPlxyXG5cclxuICA8IS0tIEVtcHR5IHN0YXRlOiBubyB0YXNrIGFzc2lnbmVkIC0tPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGFzWm9uZVRhc2tcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJteS02XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiOTRcIiBoZWlnaHQ9XCI5NFwiIHZpZXdCb3g9XCIwIDAgOTQgOTRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgPHJlY3QgeD1cIjdcIiB5PVwiN1wiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIHJ4PVwiNDBcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XHJcbiAgICAgICAgICA8cmVjdCB4PVwiN1wiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCIxMy4zMzMzXCIgLz5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMzUuOTUwMiA0OC4xOTk3QzM1LjY0ODkgNDguMjMxNSAzNS4zNDIyIDQ4LjI1MDUgMzUuMDMxMiA0OC4yNTA1QzM0Ljg2MTcgNDguMjUwNSAzNC42OTQ0IDQ4LjI0MzYgMzQuNTI5MyA0OC4yMzM5VjU4LjYwNjlDMzQuNTI5MyA2MC4wMzQ5IDM1LjcxMjMgNjEuMjI2IDM3LjIwMDIgNjEuMjI2MUg1Ni44MDQ3QzU4LjI5MjcgNjEuMjI2MSA1OS40NzU2IDYwLjAzNSA1OS40NzU2IDU4LjYwNjlWNDguMjM0OUM1OS4zMTM3IDQ4LjI0NDEgNTkuMTQ5OCA0OC4yNTA1IDU4Ljk4NTQgNDguMjUwNUM1OC42NzE0IDQ4LjI1MDUgNTguMzYwOCA0OC4yMzI1IDU4LjA1NDcgNDguMTk5N1Y1NS45ODc4SDM1Ljk1MDJWNDguMTk5N1pNNTcuOTMxNiAzMi43NzM5SDM2LjA3MzJDMzUuODk1OSAzMi43NzM5IDM1Ljc0MDYgMzIuODY2NyAzNS42NjMxIDMyLjk4NzhMMzUuNjYxMSAzMi45ODk3TDMyLjE1MTQgMzguNDczMUwzMi4wNTY2IDM4LjYyMDZDMzAuODMxMSA0MC43NDA0IDMyLjA5NTcgNDMuNDY3NCAzNC40NDczIDQzLjc3NjlDMzQuNjQ4MiA0My44MDEzIDM0LjgzNzkgNDMuODE1OSAzNS4wMjU0IDQzLjgxNTlDMzYuMjU1NSA0My44MTU5IDM3LjM0MzQgNDMuMjg3MiAzOC4xMDA2IDQyLjQ2NTNMMzkuMDIyNSA0MS40NjQ0TDM5Ljk0MTQgNDIuNDY4M0M0MC42OTAzIDQzLjI4NjMgNDEuNzc3IDQzLjgxNTkgNDMuMDE0NiA0My44MTU5QzQ0LjI0NjcgNDMuODE1OCA0NS4zMzg2IDQzLjI4NTYgNDYuMDg2OSA0Mi40NjgzTDQ3LjAwODggNDEuNDYxNEw0Ny45MzA3IDQyLjQ2ODNDNDguNjc5IDQzLjI4NTcgNDkuNzcwNyA0My44MTU5IDUxLjAwMjkgNDMuODE1OUM1Mi4yMzUxIDQzLjgxNTkgNTMuMzI2OCA0My4yODU3IDU0LjA3NTIgNDIuNDY4M0w1NC45OTcxIDQxLjQ2MTRMNTUuOTE4OSA0Mi40NjgzQzU2LjY2NzMgNDMuMjg1NyA1Ny43NiA0My44MTU5IDU4Ljk5MjIgNDMuODE1OUM1OS4xNzM2IDQzLjgxNTkgNTkuMzY4NyA0My44MDIxIDU5LjU2ODQgNDMuNzc3OEg1OS41Njc0QzYxLjk2MTEgNDMuNDU3MyA2My4yMjkzIDQwLjYwNzggNjEuODYxMyAzOC40NzMxTDYxLjg2MDQgMzguNDc0MUw1OC4zNDM4IDMyLjk5MDdMNTguMzQyOCAzMi45ODc4QzU4LjI2NTMgMzIuODY2NSA1OC4xMDkyIDMyLjc3MzkgNTcuOTMxNiAzMi43NzM5WlwiXHJcbiAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIyLjVcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm10LTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZCBoMyBtdC0yXCI+Tm8gcmVzcG9uc2U8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPk5vIHpvbmUgdmVyaWZpY2F0aW9uIHRhc2sgaGFzIGJlZW4gYXNzaWduZWQgZm9yIHRoaXMgZmxvb3IuPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gRW1wdHkgc3RhdGU6IHRhc2sgYXNzaWduZWQgYnV0IG5vdCB5ZXQgc3VibWl0dGVkIChvbmx5IG9uIGEgZnJlc2ggdGFzayDigJQgZHVyaW5nIGFcclxuICAgICAgIHJlZG8ncyBvcGVuIHBlcmlvZCB3ZSBrZWVwIHRoZSBwcmV2aW91cyByb3VuZCdzIHJlc3BvbnNlcyB2aXNpYmxlIGxpa2UgZml4dHVyZSBkb2VzKSAtLT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzWm9uZVRhc2sgJiYgaXNUYXNrT3BlbiAmJiAhem9uZVRhc2s/LnJlZG9TdGF0dXNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJteS02XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiOTRcIiBoZWlnaHQ9XCI5NFwiIHZpZXdCb3g9XCIwIDAgOTQgOTRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgPHJlY3QgeD1cIjdcIiB5PVwiN1wiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIHJ4PVwiNDBcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XHJcbiAgICAgICAgICA8cmVjdCB4PVwiN1wiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCIxMy4zMzMzXCIgLz5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMzUuOTUwMiA0OC4xOTk3QzM1LjY0ODkgNDguMjMxNSAzNS4zNDIyIDQ4LjI1MDUgMzUuMDMxMiA0OC4yNTA1QzM0Ljg2MTcgNDguMjUwNSAzNC42OTQ0IDQ4LjI0MzYgMzQuNTI5MyA0OC4yMzM5VjU4LjYwNjlDMzQuNTI5MyA2MC4wMzQ5IDM1LjcxMjMgNjEuMjI2IDM3LjIwMDIgNjEuMjI2MUg1Ni44MDQ3QzU4LjI5MjcgNjEuMjI2MSA1OS40NzU2IDYwLjAzNSA1OS40NzU2IDU4LjYwNjlWNDguMjM0OUM1OS4zMTM3IDQ4LjI0NDEgNTkuMTQ5OCA0OC4yNTA1IDU4Ljk4NTQgNDguMjUwNUM1OC42NzE0IDQ4LjI1MDUgNTguMzYwOCA0OC4yMzI1IDU4LjA1NDcgNDguMTk5N1Y1NS45ODc4SDM1Ljk1MDJWNDguMTk5N1pNNTcuOTMxNiAzMi43NzM5SDM2LjA3MzJDMzUuODk1OSAzMi43NzM5IDM1Ljc0MDYgMzIuODY2NyAzNS42NjMxIDMyLjk4NzhMMzUuNjYxMSAzMi45ODk3TDMyLjE1MTQgMzguNDczMUwzMi4wNTY2IDM4LjYyMDZDMzAuODMxMSA0MC43NDA0IDMyLjA5NTcgNDMuNDY3NCAzNC40NDczIDQzLjc3NjlDMzQuNjQ4MiA0My44MDEzIDM0LjgzNzkgNDMuODE1OSAzNS4wMjU0IDQzLjgxNTlDMzYuMjU1NSA0My44MTU5IDM3LjM0MzQgNDMuMjg3MiAzOC4xMDA2IDQyLjQ2NTNMMzkuMDIyNSA0MS40NjQ0TDM5Ljk0MTQgNDIuNDY4M0M0MC42OTAzIDQzLjI4NjMgNDEuNzc3IDQzLjgxNTkgNDMuMDE0NiA0My44MTU5QzQ0LjI0NjcgNDMuODE1OCA0NS4zMzg2IDQzLjI4NTYgNDYuMDg2OSA0Mi40NjgzTDQ3LjAwODggNDEuNDYxNEw0Ny45MzA3IDQyLjQ2ODNDNDguNjc5IDQzLjI4NTcgNDkuNzcwNyA0My44MTU5IDUxLjAwMjkgNDMuODE1OUM1Mi4yMzUxIDQzLjgxNTkgNTMuMzI2OCA0My4yODU3IDU0LjA3NTIgNDIuNDY4M0w1NC45OTcxIDQxLjQ2MTRMNTUuOTE4OSA0Mi40NjgzQzU2LjY2NzMgNDMuMjg1NyA1Ny43NiA0My44MTU5IDU4Ljk5MjIgNDMuODE1OUM1OS4xNzM2IDQzLjgxNTkgNTkuMzY4NyA0My44MDIxIDU5LjU2ODQgNDMuNzc3OEg1OS41Njc0QzYxLjk2MTEgNDMuNDU3MyA2My4yMjkzIDQwLjYwNzggNjEuODYxMyAzOC40NzMxTDYxLjg2MDQgMzguNDc0MUw1OC4zNDM4IDMyLjk5MDdMNTguMzQyOCAzMi45ODc4QzU4LjI2NTMgMzIuODY2NSA1OC4xMDkyIDMyLjc3MzkgNTcuOTMxNiAzMi43NzM5WlwiXHJcbiAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIyLjVcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm10LTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZCBoMyBtdC0yXCI+Tm8gcmVzcG9uc2U8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlRhc2sgYXNzaWduZWQuIEF3YWl0aW5nIHN1Ym1pc3Npb24gZnJvbSB0aGUgc3RvcmUuPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gSGVhZGVyIHN0cmlwICsgMy1jb2x1bW4gY29tcGFyaXNvbjogdmlzaWJsZSB3aGVuIHRhc2sgaXMgaW5wcm9ncmVzcyAvIHN1Ym1pdCwgT1IgZHVyaW5nXHJcbiAgICAgICBhIHJlZG8ncyBvcGVuIHBlcmlvZCAod2UgcmVuZGVyIHRoZSBwcmV2aW91cyByb3VuZCdzIGRhdGEgcmVhZC1vbmx5IHNpbmNlIGNhblNob3dBY3Rpb25zXHJcbiAgICAgICBhbHJlYWR5IGdhdGVzIHRoZSBhY3Rpb24gYnV0dG9ucyBvbiBjaGVja2xpc3RTdGF0dXMgPT09ICdzdWJtaXQnKSAtLT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzWm9uZVRhc2sgJiYgKCFpc1Rhc2tPcGVuIHx8IHpvbmVUYXNrPy5yZWRvU3RhdHVzKVwiPlxyXG5cclxuICAgIDxkaXYgaWQ9XCJmZWVkYmFjay1oYW5kbGVyXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC02IG15LTYgcHgtMyBmaXh0dXJlLW5hdmlnYXRlXCI+XHJcbiAgICAgIDxzdmcgKm5nSWY9XCJzaG93QWN0aW9uXCIgKGNsaWNrKT1cIm9uQ2hhbmdlRml4dHVyZSgncHJldmlvdXMnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICA8cGF0aCBkPVwiTTE1IDZMOSAxMkwxNSAxOFwiIHN0cm9rZT1cIiMxRDI5MzlcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgPC9zdmc+XHJcblxyXG4gICAgICA8aDMgY2xhc3M9XCJtLTBcIj57eyBwbGFub0ZpeHR1cmU/LmhlYWRlcj8ubGFiZWwgfX08L2gzPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgZmxleC13cmFwXCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIgdmlld0JveD1cIjAgMCA1IDVcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY3g9XCIyLjVcIiBjeT1cIjIuNVwiIHI9XCIyLjVcIiBmaWxsPVwiI0VBRUNGMFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwicGxhbm9GaXh0dXJlPy5maXh0dXJlQ2F0ZWdvcnlcIiBjbGFzcz1cImJhZGdlIGluYWN0aXZlIG1lLTFcIj5cclxuICAgICAgICAgIHt7IHBsYW5vRml4dHVyZS5maXh0dXJlQ2F0ZWdvcnkgfCB0aXRsZWNhc2UgfX1cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiNVwiIHZpZXdCb3g9XCIwIDAgNSA1XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiMi41XCIgY3k9XCIyLjVcIiByPVwiMi41XCIgZmlsbD1cIiNFQUVDRjBcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cInBsYW5vRml4dHVyZT8uZml4dHVyZVdpZHRoPy52YWx1ZVwiIGNsYXNzPVwiYmFkZ2UgaW5hY3RpdmUgbWUtMVwiPlxyXG4gICAgICAgICAge3sgcGxhbm9GaXh0dXJlLmZpeHR1cmVXaWR0aC52YWx1ZSB9fSB7eyBwbGFub0ZpeHR1cmUuZml4dHVyZVdpZHRoPy51bml0ID8/ICdmdCcgfX1cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiNVwiIHZpZXdCb3g9XCIwIDAgNSA1XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiMi41XCIgY3k9XCIyLjVcIiByPVwiMi41XCIgZmlsbD1cIiNFQUVDRjBcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGluYWN0aXZlIG1lLTFcIj5cclxuICAgICAgICAgIEZpeHR1cmUgQ2FwYWNpdHk6IHt7IHBsYW5vRml4dHVyZT8uZml4dHVyZUNhcGFjaXR5IHx8IDAgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGgzICpuZ0lmPVwic2hvd0FjdGlvblwiIGNsYXNzPVwibS0wIG1zLWF1dG9cIj5cclxuICAgICAgICB7eyBjdXJyZW50Rml4dHVyZUluZGV4IH19L3t7IHRvdGFsRml4dHVyZXMubGVuZ3RoIH19XHJcbiAgICAgIDwvaDM+XHJcblxyXG4gICAgICA8c3ZnICpuZ0lmPVwic2hvd0FjdGlvblwiIChjbGljayk9XCJvbkNoYW5nZUZpeHR1cmUoJ25leHQnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICA8cGF0aCBkPVwiTTkgMThMMTUgMTJMOSA2XCIgc3Ryb2tlPVwiIzFEMjkzOVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgaWQ9XCJmaXh0dXJlLWNvbXBhcmlzb25cIiBjbGFzcz1cInJvdyBnLTAgbXktM1wiPlxyXG5cclxuICAgICAgQGlmIChzaG93QWN0aW9uKSB7XHJcbiAgICAgICAgPCEtLSBDb2x1bW4gMTogRXhpc3RpbmcgdGVtcGxhdGUgKGN1cnJlbnQgcGxhbm8pIC0tPlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC00IHAtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICBAaWYgKGNhblNob3dBY3Rpb25zICYmIGhhc0ZpeHR1cmVSZXNwb25zZSkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gcHJpbWFyeS1idG4gbXMtYXV0b1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DbGlja0tlZXBQbGFubygpXCI+XHJcbiAgICAgICAgICAgICAgICBLZWVwIHBsYW5vXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbXktNFwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgZD1cIk0yLjcyNSA1LjgwMDA4TDEwIDEwLjAwODRMMTcuMjc1IDUuODAwMDhNMTAgMTguNDAwMVYxMC4wMDAxTTE3LjUgMTMuMzMzNFY2LjY2Njc1QzE3LjQ5OTcgNi4zNzQ0OCAxNy40MjI1IDYuMDg3NDIgMTcuMjc2MyA1LjgzNDM4QzE3LjEzIDUuNTgxMzQgMTYuOTE5OCA1LjM3MTIyIDE2LjY2NjcgNS4yMjUwOEwxMC44MzMzIDEuODkxNzVDMTAuNTggMS43NDU0NyAxMC4yOTI2IDEuNjY4NDYgMTAgMS42Njg0NkM5LjcwNzQ0IDEuNjY4NDYgOS40MjAwMyAxLjc0NTQ3IDkuMTY2NjcgMS44OTE3NUwzLjMzMzMzIDUuMjI1MDhDMy4wODAyMiA1LjM3MTIyIDIuODY5OTggNS41ODEzNCAyLjcyMzcyIDUuODM0MzhDMi41Nzc0NSA2LjA4NzQyIDIuNTAwMyA2LjM3NDQ4IDIuNSA2LjY2Njc1VjEzLjMzMzRDMi41MDAzIDEzLjYyNTcgMi41Nzc0NSAxMy45MTI3IDIuNzIzNzIgMTQuMTY1OEMyLjg2OTk4IDE0LjQxODggMy4wODAyMiAxNC42Mjg5IDMuMzMzMzMgMTQuNzc1MUw5LjE2NjY3IDE4LjEwODRDOS40MjAwMyAxOC4yNTQ3IDkuNzA3NDQgMTguMzMxNyAxMCAxOC4zMzE3QzEwLjI5MjYgMTguMzMxNyAxMC41OCAxOC4yNTQ3IDEwLjgzMzMgMTguMTA4NEwxNi42NjY3IDE0Ljc3NTFDMTYuOTE5OCAxNC42Mjg5IDE3LjEzIDE0LjQxODggMTcuMjc2MyAxNC4xNjU4QzE3LjQyMjUgMTMuOTEyNyAxNy40OTk3IDEzLjYyNTcgMTcuNSAxMy4zMzM0WlwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtLTBcIj5FeGlzdGluZyB0ZW1wbGF0ZTwvaDQ+XHJcbiAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImlzQXBwcm92ZWQgJiYgY3VycmVudFVzZXJBY3Rpb24gPT09ICdrZWVwUGxhbm8nXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXMtYXV0b1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxyZWN0IHk9XCI4Ljc0MjI4ZS0wN1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHJ4PVwiMTBcIiBmaWxsPVwiI0QxRkFERlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuMjQ2NCA2LjE1ODM5TDguMjc5NjkgMTEuOTE2N0w2LjY5NjM1IDEwLjIyNTFDNi40MDQ2OSA5Ljk1MDA1IDUuOTQ2MzUgOS45MzMzOSA1LjYxMzAyIDEwLjE2NjdDNS4yODgwMiAxMC40MDg0IDUuMTk2MzUgMTAuODMzNCA1LjM5NjM1IDExLjE3NTFMNy4yNzEzNSAxNC4yMjUxQzcuNDU0NjkgMTQuNTA4NCA3Ljc3MTM1IDE0LjY4MzQgOC4xMjk2OSAxNC42ODM0QzguNDcxMzUgMTQuNjgzNCA4Ljc5NjM1IDE0LjUwODQgOC45Nzk2OSAxNC4yMjUxQzkuMjc5NjkgMTMuODMzNCAxNS4wMDQ3IDcuMDA4MzkgMTUuMDA0NyA3LjAwODM5QzE1Ljc1NDcgNi4yNDE3MiAxNC44NDY0IDUuNTY2NzIgMTQuMjQ2NCA2LjE1MDA1TDE0LjI0NjQgNi4xNTgzOVpcIlxyXG4gICAgICAgICAgICAgICAgICBmaWxsPVwiIzEyQjc2QVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8Zml4dHVyZSBbZml4dHVyZV09XCJwbGFub0ZpeHR1cmVcIiBbc2hvd1ZNc109XCJ0cnVlXCIgW3Nob3dIZWFkZXJGb290ZXJBbHdheXNdPVwidHJ1ZVwiPjwvZml4dHVyZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICA8IS0tIENvbHVtbiAyOiBTdG9yZSByZXNwb25zZSAoem9uZS1ncm91cGVkKSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgcC0yXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICBAaWYgKGlzQ2xGaXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTZcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjk0XCIgaGVpZ2h0PVwiOTRcIiB2aWV3Qm94PVwiMCAwIDk0IDk0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiN1wiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIGZpbGw9XCIjREFGMUZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiN1wiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCIxMy4zMzMzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk0zNS45NTAyIDQ4LjE5OTdDMzUuNjQ4OSA0OC4yMzE1IDM1LjM0MjIgNDguMjUwNSAzNS4wMzEyIDQ4LjI1MDVDMzQuODYxNyA0OC4yNTA1IDM0LjY5NDQgNDguMjQzNiAzNC41MjkzIDQ4LjIzMzlWNTguNjA2OUMzNC41MjkzIDYwLjAzNDkgMzUuNzEyMyA2MS4yMjYgMzcuMjAwMiA2MS4yMjYxSDU2LjgwNDdDNTguMjkyNyA2MS4yMjYxIDU5LjQ3NTYgNjAuMDM1IDU5LjQ3NTYgNTguNjA2OVY0OC4yMzQ5QzU5LjMxMzcgNDguMjQ0MSA1OS4xNDk4IDQ4LjI1MDUgNTguOTg1NCA0OC4yNTA1QzU4LjY3MTQgNDguMjUwNSA1OC4zNjA4IDQ4LjIzMjUgNTguMDU0NyA0OC4xOTk3VjU1Ljk4NzhIMzUuOTUwMlY0OC4xOTk3Wk01Ny45MzE2IDMyLjc3MzlIMzYuMDczMkMzNS44OTU5IDMyLjc3MzkgMzUuNzQwNiAzMi44NjY3IDM1LjY2MzEgMzIuOTg3OEwzNS42NjExIDMyLjk4OTdMMzIuMTUxNCAzOC40NzMxTDMyLjA1NjYgMzguNjIwNkMzMC44MzExIDQwLjc0MDQgMzIuMDk1NyA0My40Njc0IDM0LjQ0NzMgNDMuNzc2OUMzNC42NDgyIDQzLjgwMTMgMzQuODM3OSA0My44MTU5IDM1LjAyNTQgNDMuODE1OUMzNi4yNTU1IDQzLjgxNTkgMzcuMzQzNCA0My4yODcyIDM4LjEwMDYgNDIuNDY1M0wzOS4wMjI1IDQxLjQ2NDRMMzkuOTQxNCA0Mi40NjgzQzQwLjY5MDMgNDMuMjg2MyA0MS43NzcgNDMuODE1OSA0My4wMTQ2IDQzLjgxNTlDNDQuMjQ2NyA0My44MTU4IDQ1LjMzODYgNDMuMjg1NiA0Ni4wODY5IDQyLjQ2ODNMNDcuMDA4OCA0MS40NjE0TDQ3LjkzMDcgNDIuNDY4M0M0OC42NzkgNDMuMjg1NyA0OS43NzA3IDQzLjgxNTkgNTEuMDAyOSA0My44MTU5QzUyLjIzNTEgNDMuODE1OSA1My4zMjY4IDQzLjI4NTcgNTQuMDc1MiA0Mi40NjgzTDU0Ljk5NzEgNDEuNDYxNEw1NS45MTg5IDQyLjQ2ODNDNTYuNjY3MyA0My4yODU3IDU3Ljc2IDQzLjgxNTkgNTguOTkyMiA0My44MTU5QzU5LjE3MzYgNDMuODE1OSA1OS4zNjg3IDQzLjgwMjEgNTkuNTY4NCA0My43Nzc4SDU5LjU2NzRDNjEuOTYxMSA0My40NTczIDYzLjIyOTMgNDAuNjA3OCA2MS44NjEzIDM4LjQ3MzFMNjEuODYwNCAzOC40NzQxTDU4LjM0MzggMzIuOTkwN0w1OC4zNDI4IDMyLjk4NzhDNTguMjY1MyAzMi44NjY1IDU4LjEwOTIgMzIuNzczOSA1Ny45MzE2IDMyLjc3MzlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIyLjVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGQgaDMgbXQtMlwiPkNMIEV4Y2x1ZGVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgQGlmIChjYW5TaG93QWN0aW9ucyAmJiBoYXNGaXh0dXJlUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImJ0biBxdWljay1idG4gbXMtYXV0b1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DbGlja0VkaXRSZXNwb25zZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkuMTY2MDIgMy4zMzMySDMuMzMyNjhDMi44OTA2NSAzLjMzMzIgMi40NjY3MyAzLjUwODc5IDIuMTU0MTcgMy44MjEzNUMxLjg0MTYxIDQuMTMzOTEgMS42NjYwMiA0LjU1Nzg0IDEuNjY2MDIgNC45OTk4NlYxNi42NjY1QzEuNjY2MDIgMTcuMTA4NiAxLjg0MTYxIDE3LjUzMjUgMi4xNTQxNyAxNy44NDVDMi40NjY3MyAxOC4xNTc2IDIuODkwNjUgMTguMzMzMiAzLjMzMjY4IDE4LjMzMzJIMTQuOTk5M0MxNS40NDE0IDE4LjMzMzIgMTUuODY1MyAxOC4xNTc2IDE2LjE3NzkgMTcuODQ1QzE2LjQ5MDQgMTcuNTMyNSAxNi42NjYgMTcuMTA4NiAxNi42NjYgMTYuNjY2NVYxMC44MzMyTTE1LjQxNiAyLjA4MzJDMTUuNzQ3NSAxLjc1MTY4IDE2LjE5NzIgMS41NjU0MyAxNi42NjYgMS41NjU0M0MxNy4xMzQ5IDEuNTY1NDMgMTcuNTg0NSAxLjc1MTY4IDE3LjkxNiAyLjA4MzJDMTguMjQ3NSAyLjQxNDcyIDE4LjQzMzggMi44NjQzNiAxOC40MzM4IDMuMzMzMkMxOC40MzM4IDMuODAyMDQgMTguMjQ3NSA0LjI1MTY4IDE3LjkxNiA0LjU4MzJMOS45OTkzNSAxMi40OTk5TDYuNjY2MDIgMTMuMzMzMkw3LjQ5OTM1IDkuOTk5ODZMMTUuNDE2IDIuMDgzMlpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMUQyOTM5XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biByZWRvLWJ0blwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DbGlja1JlZG8oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFJlZG9cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtY3VzIG1zLWF1dG9cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2xpY2tLZWVwUGxhbm8oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFJlamVjdFxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBwcmltYXJ5LWJ0blwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZWRpdGFibGVGaXh0dXJlPy5pc1ZhbGlkXCJcclxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZWRpdGFibGVGaXh0dXJlPy52YWxpZGF0aW9uTWVzc2FnZSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tBY2NlcHRSZXNwb25zZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQWNjZXB0XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBteS00XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE1LjY1MDQgMTQuNjE5MUg0LjM0ODYzVjEwLjczNzNDNC4yMzgyNiAxMC43NDU1IDQuMTI2NDQgMTAuNzUgNC4wMTM2NyAxMC43NUMzLjk3MTM3IDEwLjc1IDMuOTI5NDMgMTAuNzQ2MyAzLjg4NzcgMTAuNzQ1MVYxNS44MDM3QzMuODg3ODggMTYuNDQ3IDQuNDIyMjIgMTYuOTg4MyA1LjA5ODYzIDE2Ljk4ODNIMTQuOTAwNEMxNS41NzY4IDE2Ljk4ODMgMTYuMTEwMiAxNi40NDcgMTYuMTEwNCAxNS44MDM3VjEwLjc0NTFDMTYuMDcwOCAxMC43NDYyIDE2LjAzMTEgMTAuNzUgMTUuOTkxMiAxMC43NUMxNS44NzY4IDEwLjc1IDE1Ljc2MjkgMTAuNzQ0OSAxNS42NTA0IDEwLjczNjNWMTQuNjE5MVpNMTUuNDYzOSAzLjAxMTcySDQuNTM0MThDNC40ODcyMyAzLjAxMTg3IDQuNDQ5NzMgMy4wMzc3NiA0LjQzNDU3IDMuMDYxNTJWMy4wNjI1TDIuNjc4NzEgNS44MDM3MUwyLjY2MDE2IDUuODMzMDFDMi4wNDc2OCA2LjgyNzg2IDIuNjQzMjUgOC4xMTczOSAzLjczNDM4IDguMjYzNjdDMy44MzE3NCA4LjI3NTYxIDMuOTIyMjQgOC4yODIyMiA0LjAxMDc0IDguMjgyMjNDNC41ODg4OSA4LjI4MjIzIDUuMDk5NzggOC4wMzQxOSA1LjQ1NjA1IDcuNjQ3NDZMNi4wMDk3NyA3LjA0Njg4TDYuNTYxNTIgNy42NDk0MUM2LjkxMzQxIDguMDMzNzEgNy40MjMwMSA4LjI4MjE1IDguMDA0ODggOC4yODIyM0M4LjU4NDMzIDguMjgyMjMgOS4wOTc1OSA4LjAzMzQ5IDkuNDQ5MjIgNy42NDk0MUwxMC4wMDIgNy4wNDQ5MkwxMC41NTU3IDcuNjQ5NDFDMTAuOTA3MyA4LjAzMzQ5IDExLjQyMDYgOC4yODIyMyAxMiA4LjI4MjIzQzEyLjU3OTIgOC4yODIxIDEzLjA5MTggOC4wMzMzNyAxMy40NDM0IDcuNjQ5NDFMMTMuOTk3MSA3LjA0NDkyTDE0LjU0OTggNy42NDk0MUMxNC45MDE0IDguMDMzNDkgMTUuNDE0NyA4LjI4MjIzIDE1Ljk5NDEgOC4yODIyM0MxNi4wNzkxIDguMjgyMjIgMTYuMTcxNiA4LjI3NTMzIDE2LjI2NzYgOC4yNjM2N0MxNy4zNjM1IDguMTE1MDQgMTcuOTYyMyA2LjgwMDggMTcuMzIzMiA1LjgwMzcxTDE1LjU2NDUgMy4wNjI1TDE1LjU2MzUgMy4wNjE1MkMxNS41NDgzIDMuMDM3NjkgMTUuNTExIDMuMDExNzIgMTUuNDYzOSAzLjAxMTcyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDxoND5TdG9yZSByZXNwb25zZTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaGFzRml4dHVyZVJlc3BvbnNlXCIgY2xhc3M9XCJiYWRnZSBpbmFjdGl2ZSBtZS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQ2FwYWNpdHk6IHt7IHpvbmVGaXh0dXJlPy5maXh0dXJlQ2FwYWNpdHkgfHwgMCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzQXBwcm92ZWQgJiYgKGN1cnJlbnRVc2VyQWN0aW9uID09PSAnYWNjZXB0UmVzcG9uc2UnIHx8IGN1cnJlbnRVc2VyQWN0aW9uID09PSAnZWRpdEFjY2VwdGVkJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXMtYXV0b1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHk9XCI4Ljc0MjI4ZS0wN1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHJ4PVwiMTBcIiBmaWxsPVwiI0QxRkFERlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC4yNDY0IDYuMTU4MzlMOC4yNzk2OSAxMS45MTY3TDYuNjk2MzUgMTAuMjI1MUM2LjQwNDY5IDkuOTUwMDUgNS45NDYzNSA5LjkzMzM5IDUuNjEzMDIgMTAuMTY2N0M1LjI4ODAyIDEwLjQwODQgNS4xOTYzNSAxMC44MzM0IDUuMzk2MzUgMTEuMTc1MUw3LjI3MTM1IDE0LjIyNTFDNy40NTQ2OSAxNC41MDg0IDcuNzcxMzUgMTQuNjgzNCA4LjEyOTY5IDE0LjY4MzRDOC40NzEzNSAxNC42ODM0IDguNzk2MzUgMTQuNTA4NCA4Ljk3OTY5IDE0LjIyNTFDOS4yNzk2OSAxMy44MzM0IDE1LjAwNDcgNy4wMDgzOSAxNS4wMDQ3IDcuMDA4MzlDMTUuNzU0NyA2LjI0MTcyIDE0Ljg0NjQgNS41NjY3MiAxNC4yNDY0IDYuMTUwMDVMMTQuMjQ2NCA2LjE1ODM5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzEyQjc2QVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImlzQXBwcm92ZWQgJiYgKGN1cnJlbnRVc2VyQWN0aW9uID09PSAna2VlcFBsYW5vJylcIiBjbGFzcz1cIm1zLWF1dG9cIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgcng9XCIxMFwiIGZpbGw9XCIjRkVFNEUyXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjIyNSA2LjIyNUM2LjU2NjY3IDUuODgzMzMgNy4xMTY2NyA1Ljg4MzMzIDcuNDU4MzMgNi4yMjVMMTAgOC43NjY2N0wxMi41NDE3IDYuMjI1QzEyLjg4MzMgNS44ODMzMyAxMy40MzMzIDUuODgzMzMgMTMuNzc1IDYuMjI1QzE0LjExNjcgNi41NjY2NyAxNC4xMTY3IDcuMTE2NjcgMTMuNzc1IDcuNDU4MzNMMTEuMjMzMyAxMEwxMy43NzUgMTIuNTQxN0MxNC4xMTY3IDEyLjg4MzMgMTQuMTE2NyAxMy40MzMzIDEzLjc3NSAxMy43NzVDMTMuNDMzMyAxNC4xMTY3IDEyLjg4MzMgMTQuMTE2NyAxMi41NDE3IDEzLjc3NUwxMCAxMS4yMzMzTDcuNDU4MzMgMTMuNzc1QzcuMTE2NjcgMTQuMTE2NyA2LjU2NjY3IDE0LjExNjcgNi4yMjUgMTMuNzc1QzUuODgzMzMgMTMuNDMzMyA1Ljg4MzMzIDEyLjg4MzMgNi4yMjUgMTIuNTQxN0w4Ljc2NjY3IDEwTDYuMjI1IDcuNDU4MzNDNS44ODMzMyA3LjExNjY3IDUuODgzMzMgNi41NjY2NyA2LjIyNSA2LjIyNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGMDQ0MzhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImN1cnJlbnRVc2VyQWN0aW9uID09PSAncmVkbydcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXMtYXV0b1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMjUwNjUgMTUuODMzNUM2LjkwMzQzIDE1LjgzMzUgNS43NDcwNCAxNS4zOTYgNC43ODE0OCAxNC41MjFDMy44MTU5MyAxMy42NDYgMy4zMzM0MyAxMi41NTU3IDMuMzMzOTggMTEuMjUwMkMzLjMzMzk4IDkuOTQ0NjEgMy44MTY3NiA4Ljg1NDMzIDQuNzgyMzIgNy45NzkzM0M1Ljc0Nzg3IDcuMTA0MzMgNi45MDM5OCA2LjY2NjgzIDguMjUwNjUgNi42NjY4M0gxMy41MDA3TDExLjMzNCA0LjUwMDE2TDEyLjUwMDcgMy4zMzM1TDE2LjY2NzMgNy41MDAxNkwxMi41MDA3IDExLjY2NjhMMTEuMzM0IDEwLjUwMDJMMTMuNTAwNyA4LjMzMzVIOC4yNTA2NUM3LjM3NTY1IDguMzMzNSA2LjYxNTEgOC42MTEyNyA1Ljk2ODk4IDkuMTY2ODNDNS4zMjI4NyA5LjcyMjM4IDUuMDAwMSAxMC40MTY4IDUuMDAwNjUgMTEuMjUwMkM1LjAwMDY1IDEyLjA4MzUgNS4zMjM3MSAxMi43Nzc5IDUuOTY5ODIgMTMuMzMzNUM2LjYxNTkzIDEzLjg4OTEgNy4zNzYyMSAxNC4xNjY4IDguMjUwNjUgMTQuMTY2OEgxNC4xNjczVjE1LjgzMzVIOC4yNTA2NVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImJsYWNrXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICBAaWYgKGhhc0ZpeHR1cmVSZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgPHpvbmUtZWRpdGFibGUtZml4dHVyZVxyXG4gICAgICAgICAgICAgICAgICBbZml4dHVyZV09XCJ6b25lRml4dHVyZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93Vk1zXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dIZWFkZXJGb290ZXJBbHdheXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtlZGl0YWJsZV09XCJjYW5TaG93QWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPC96b25lLWVkaXRhYmxlLWZpeHR1cmU+XHJcbiAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNlwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjk0XCIgaGVpZ2h0PVwiOTRcIiB2aWV3Qm94PVwiMCAwIDk0IDk0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI3XCIgeT1cIjdcIiB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiByeD1cIjQwXCIgZmlsbD1cIiNEQUYxRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjdcIiB5PVwiN1wiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIHJ4PVwiNDBcIiBzdHJva2U9XCIjRUFGOEZGXCIgc3Ryb2tlLXdpZHRoPVwiMTMuMzMzM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTM1Ljk1MDIgNDguMTk5N0MzNS42NDg5IDQ4LjIzMTUgMzUuMzQyMiA0OC4yNTA1IDM1LjAzMTIgNDguMjUwNUMzNC44NjE3IDQ4LjI1MDUgMzQuNjk0NCA0OC4yNDM2IDM0LjUyOTMgNDguMjMzOVY1OC42MDY5QzM0LjUyOTMgNjAuMDM0OSAzNS43MTIzIDYxLjIyNiAzNy4yMDAyIDYxLjIyNjFINTYuODA0N0M1OC4yOTI3IDYxLjIyNjEgNTkuNDc1NiA2MC4wMzUgNTkuNDc1NiA1OC42MDY5VjQ4LjIzNDlDNTkuMzEzNyA0OC4yNDQxIDU5LjE0OTggNDguMjUwNSA1OC45ODU0IDQ4LjI1MDVDNTguNjcxNCA0OC4yNTA1IDU4LjM2MDggNDguMjMyNSA1OC4wNTQ3IDQ4LjE5OTdWNTUuOTg3OEgzNS45NTAyVjQ4LjE5OTdaTTU3LjkzMTYgMzIuNzczOUgzNi4wNzMyQzM1Ljg5NTkgMzIuNzczOSAzNS43NDA2IDMyLjg2NjcgMzUuNjYzMSAzMi45ODc4TDM1LjY2MTEgMzIuOTg5N0wzMi4xNTE0IDM4LjQ3MzFMMzIuMDU2NiAzOC42MjA2QzMwLjgzMTEgNDAuNzQwNCAzMi4wOTU3IDQzLjQ2NzQgMzQuNDQ3MyA0My43NzY5QzM0LjY0ODIgNDMuODAxMyAzNC44Mzc5IDQzLjgxNTkgMzUuMDI1NCA0My44MTU5QzM2LjI1NTUgNDMuODE1OSAzNy4zNDM0IDQzLjI4NzIgMzguMTAwNiA0Mi40NjUzTDM5LjAyMjUgNDEuNDY0NEwzOS45NDE0IDQyLjQ2ODNDNDAuNjkwMyA0My4yODYzIDQxLjc3NyA0My44MTU5IDQzLjAxNDYgNDMuODE1OUM0NC4yNDY3IDQzLjgxNTggNDUuMzM4NiA0My4yODU2IDQ2LjA4NjkgNDIuNDY4M0w0Ny4wMDg4IDQxLjQ2MTRMNDcuOTMwNyA0Mi40NjgzQzQ4LjY3OSA0My4yODU3IDQ5Ljc3MDcgNDMuODE1OSA1MS4wMDI5IDQzLjgxNTlDNTIuMjM1MSA0My44MTU5IDUzLjMyNjggNDMuMjg1NyA1NC4wNzUyIDQyLjQ2ODNMNTQuOTk3MSA0MS40NjE0TDU1LjkxODkgNDIuNDY4M0M1Ni42NjczIDQzLjI4NTcgNTcuNzYgNDMuODE1OSA1OC45OTIyIDQzLjgxNTlDNTkuMTczNiA0My44MTU5IDU5LjM2ODcgNDMuODAyMSA1OS41Njg0IDQzLjc3NzhINTkuNTY3NEM2MS45NjExIDQzLjQ1NzMgNjMuMjI5MyA0MC42MDc4IDYxLjg2MTMgMzguNDczMUw2MS44NjA0IDM4LjQ3NDFMNTguMzQzOCAzMi45OTA3TDU4LjM0MjggMzIuOTg3OEM1OC4yNjUzIDMyLjg2NjUgNTguMTA5MiAzMi43NzM5IDU3LjkzMTYgMzIuNzczOVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMi41XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5ObyByZXNwb25zZSBmb3IgdGhpcyBmaXh0dXJlIHlldC48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcblxyXG4gICAgICA8IS0tIENvbHVtbiAzOiBTdG9yZSBpbWFnZSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInAtMlwiIFtuZ0NsYXNzXT1cInsnY29sLTYnOiBzaG93QWN0aW9uLCAnY29sJzogIXNob3dBY3Rpb259XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi00XCIgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzonMTJweCd9XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG15LTRcIj5cclxuICAgICAgICAgICAgICA8aDQ+U3RvcmUgSW1hZ2U8L2g0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgQGlmICh6b25lSW1hZ2VVcmwpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtaW1hZ2VcIiAoY2xpY2spPVwib25DbGlja0ltYWdlUHJldmlldygkZXZlbnQsIHpvbmVJbWFnZVVybClcIj5cclxuICAgICAgICAgICAgICBAaWYgKGlzSW1hZ2VMb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2tlbGV0b25Mb2FkZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInpvbmVJbWFnZVVybFwiIGFsdD1cIlN0b3JlIHJlc3BvbnNlIGltYWdlXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImlzSW1hZ2VMb2FkaW5nID8gJ25vbmUnIDogJ2Jsb2NrJ1wiIChsb2Fkc3RhcnQpPVwib25JbWFnZUxvYWRTdGFydCgpXCJcclxuICAgICAgICAgICAgICAgIChsb2FkKT1cIm9uSW1hZ2VMb2FkKClcIiAoZXJyb3IpPVwib25JbWFnZUVycm9yKClcIiAobG9hZGVuZCk9XCJvbkltYWdlTG9hZEVuZCgpXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLXByZXZpZXdcIiAqbmdJZj1cInNlbGVjdGVkSW1hZ2VGb3JQcmV2aWV3XCIgKGNsaWNrKT1cImNsb3NlSW1hZ2VQcmV2aWV3KClcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmV2aWV3LWNsb3NlXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgY2xvc2VJbWFnZVByZXZpZXcoKVwiPiYjeDI3MTU7PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy16b29tLWNvbnRyb2xzXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvblByZXZpZXdab29tT3V0KClcIj4mI3gyMjEyOzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgY2xhc3M9XCJ6b29tLXNsaWRlclwiIG1pbj1cIjI1XCIgbWF4PVwiNTAwXCIgc3RlcD1cIjI1XCIgW3ZhbHVlXT1cImltYWdlUHJldmlld1pvb20gKiAxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvblByZXZpZXdab29tU2xpZGVyKCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyAoaW1hZ2VQcmV2aWV3Wm9vbSAqIDEwMCkudG9GaXhlZCgwKSB9fSU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uUHJldmlld1pvb21JbigpXCI+JiN4MkI7PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWltYWdlLWNvbnRhaW5lclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uUHJldmlld1BhblN0YXJ0KCRldmVudClcIiAobW91c2Vtb3ZlKT1cIm9uUHJldmlld1Bhbk1vdmUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChtb3VzZXVwKT1cIm9uUHJldmlld1BhbkVuZCgpXCIgKG1vdXNlbGVhdmUpPVwib25QcmV2aWV3UGFuRW5kKClcIiAod2hlZWwpPVwib25QcmV2aWV3V2hlZWwoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwic2VsZWN0ZWRJbWFnZUZvclByZXZpZXdcIiBjbGFzcz1cImZ1bGwtaW1nXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cIidzY2FsZSgnICsgaW1hZ2VQcmV2aWV3Wm9vbSArICcpIHRyYW5zbGF0ZSgnICsgaW1hZ2VQcmV2aWV3UGFuWCAvIGltYWdlUHJldmlld1pvb20gKyAncHgsJyArIGltYWdlUHJldmlld1BhblkgLyBpbWFnZVByZXZpZXdab29tICsgJ3B4KSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnYWJsZT1cImZhbHNlXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxODZcIiBoZWlnaHQ9XCI4NFwiIHZpZXdCb3g9XCIwIDAgMTg2IDg0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMwLjI1NiAxNS4zMjg0QzE0MC4wOTIgMTUuMzI4NCAxNDguMDY1IDIzLjMwMiAxNDguMDY1IDMzLjEzNzlDMTQ4LjA2NSAzNy4yMTc2IDE1MC44MjYgNDEuODY4NCAxNTQuOTA2IDQxLjg2ODRIMTY3Ljk3MkMxNzcuODA3IDQxLjg2ODcgMTg1Ljc4MSA0OS44NDIyIDE4NS43ODEgNTkuNjc4QzE4NS43ODEgNjkuNTE0MSAxNzcuODA3IDc3LjQ4ODUgMTY3Ljk3MSA3Ny40ODg1SDgxLjM2NjJDNjkuNzE4NiA3Ny40ODgzIDU4LjYzNDkgNjguNDA4NCA0Ni45ODczIDY4LjQwODRINS45MzY1MkMyLjY1NzgyIDY4LjQwODQgMCA2NS43NTA2IDAgNjIuNDcxOUMwLjAwMDEyNzgyMyA1OS4xOTMzIDIuNjU3OSA1Ni41MzU0IDUuOTM2NTIgNTYuNTM1NEg2MS44NzI4QzYzLjAwNjkgNTYuNTM1NCA2My45NjY5IDU1LjY5MjkgNjQuMjg5NyA1NC42MDU2QzY0Ljc5OTQgNTIuODg5MiA2My42MjY3IDUwLjk0ODUgNjEuODM2MSA1MC45NDg1SDQzLjY1MTRDMzMuODE1MyA1MC45NDg1IDI1Ljg0MTggNDIuOTc0IDI1Ljg0MTggMzMuMTM3OUMyNS44NDIgMjMuMzAyIDMzLjgxNTQgMTUuMzI4NCA0My42NTE0IDE1LjMyODRIMTMwLjI1NlpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNFQUVDRjBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyNi42NjQgMjcuMzM1VjQ4LjY1TDEyMC45NTkgNDMuNzVDMTE4LjIyOSA0MS40MDUgMTEzLjgxOSA0MS40MDUgMTExLjA4OSA0My43NUw5Ni41MjkxIDU2LjI0NUM5My43OTkxIDU4LjU5IDg5LjM4OTEgNTguNTkgODYuNjU5MSA1Ni4yNDVMODUuNDY5MSA1NS4yNjVDODIuOTg0MSA1My4wOTUgNzkuMDI5MSA1Mi44ODUgNzYuMjI5MSA1NC43NzVMNTkuMDA5MSA2Ni4zMjVMNTguNjI0MSA2Ni42MDVDNTcuMzI5MSA2My44MDUgNTYuNjY0MSA2MC40OCA1Ni42NjQxIDU2LjY2NVYyNy4zMzVDNTYuNjY0MSAxNC41OTUgNjQuMjU5MSA3IDc2Ljk5OTEgN0gxMDYuMzI5QzExOS4wNjkgNyAxMjYuNjY0IDE0LjU5NSAxMjYuNjY0IDI3LjMzNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM2QkNBRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTgxLjE2NCAzNi4zMjk5Qzg1Ljc2NDUgMzYuMzI5OSA4OS40OTQgMzIuNjAwNSA4OS40OTQgMjcuOTk5OUM4OS40OTQgMjMuMzk5NCA4NS43NjQ1IDE5LjY2OTkgODEuMTY0IDE5LjY2OTlDNzYuNTYzNSAxOS42Njk5IDcyLjgzNCAyMy4zOTk0IDcyLjgzNCAyNy45OTk5QzcyLjgzNCAzMi42MDA1IDc2LjU2MzUgMzYuMzI5OSA4MS4xNjQgMzYuMzI5OVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMEEzRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyNi42NjUgNDguNjVWNTYuNjY1QzEyNi42NjUgNjkuNDA1IDExOS4wNyA3NyAxMDYuMzMgNzdINzdDNjguMDc1IDc3IDYxLjYzNSA3My4yNTUgNTguNjI1IDY2LjYwNUw1OS4wMSA2Ni4zMjVMNzYuMjMgNTQuNzc1Qzc5LjAzIDUyLjg4NSA4Mi45ODUgNTMuMDk1IDg1LjQ3IDU1LjI2NUw4Ni42NiA1Ni4yNDVDODkuMzkgNTguNTkgOTMuOCA1OC41OSA5Ni41MyA1Ni4yNDVMMTExLjA5IDQzLjc1QzExMy44MiA0MS40MDUgMTE4LjIzIDQxLjQwNSAxMjAuOTYgNDMuNzVMMTI2LjY2NSA0OC42NVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMEEzRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMzguMDY0XCIgY3k9XCIyOC4zMTI4XCIgcj1cIjQuNDAwNDJcIiBmaWxsPVwiIzZCQ0FGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjQ3LjgyNTZcIiBjeT1cIjM5LjI0MDlcIiByPVwiMi40NTI1NVwiIGZpbGw9XCIjNkJDQUZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZWxsaXBzZSBjeD1cIjEzOS4xODNcIiBjeT1cIjYxLjAwNzJcIiByeD1cIjQuMjkxOTdcIiByeT1cIjQuNTk4NTRcIiBmaWxsPVwiIzAwQTNGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICBAaWYgKHpvbmVGZWVkYmFjaz8uYW5zd2Vycz8uWzBdPy5jb21tZW50cz8ubGVuZ3RoKSB7XHJcbiAgICAgIDxkaXYgaWQ9XCJmaXh0dXJlLWNvbW1lbnRzXCI+XHJcbiAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPkNvbW1lbnRzPC9oNT5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvZy1ibG9ja1wiICpuZ0Zvcj1cImxldCBjIG9mIHpvbmVGZWVkYmFjaz8uYW5zd2Vycz8uWzBdPy5jb21tZW50czsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHJ4PVwiMTZcIiBmaWxsPVwiI0VBRjhGRlwiIC8+XHJcbiAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgZD1cIk0yMi42NjczIDIzLjVWMjEuODMzM0MyMi42NjczIDIwLjk0OTMgMjIuMzE2MSAyMC4xMDE0IDIxLjY5MSAxOS40NzYzQzIxLjA2NTkgMTguODUxMiAyMC4yMTggMTguNSAxOS4zMzQgMTguNUgxMi42NjczQzExLjc4MzMgMTguNSAxMC45MzU0IDE4Ljg1MTIgMTAuMzEwMyAxOS40NzYzQzkuNjg1MTcgMjAuMTAxNCA5LjMzMzk4IDIwLjk0OTMgOS4zMzM5OCAyMS44MzMzVjIzLjVNMTkuMzM0IDExLjgzMzNDMTkuMzM0IDEzLjY3NDMgMTcuODQxNiAxNS4xNjY3IDE2LjAwMDcgMTUuMTY2N0MxNC4xNTk3IDE1LjE2NjcgMTIuNjY3MyAxMy42NzQzIDEyLjY2NzMgMTEuODMzM0MxMi42NjczIDkuOTkyMzggMTQuMTU5NyA4LjUgMTYuMDAwNyA4LjVDMTcuODQxNiA4LjUgMTkuMzM0IDkuOTkyMzggMTkuMzM0IDExLjgzMzNaXCJcclxuICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTEgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICA8aDQ+e3sgYz8udXNlck5hbWUgfX08L2g0PlxyXG4gICAgICAgICAgICAgIDxwPnt7IGM/LnRpbWVTdGFtcCB8IGRhdGU6J2hoOm1tOnNzIGEgLSBkZCBNTU0geXl5eScgfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgQGlmIChjPy5yZXNwb25zZXR5cGUgPT09ICdjb21tZW50Jykge1xyXG4gICAgICAgICAgICAgIDxoNT57eyBjPy5jb21tZW50IH19PC9oNT5cclxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoYz8ucmVzcG9uc2V0eXBlID09PSAnYWdyZWUnKSB7XHJcbiAgICAgICAgICAgICAgPGg1ICpuZ0lmPVwiem9uZUZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/LnVzZXJBY3Rpb24gPT09ICdrZWVwUGxhbm8nXCI+XHJcbiAgICAgICAgICAgICAgICBNYXJrZWQgYXMgXCJLZWVwIFBsYW5vXCIuXHJcbiAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICA8aDUgKm5nSWY9XCJ6b25lRmVlZGJhY2s/LmFuc3dlcnM/LlswXT8udXNlckFjdGlvbiA9PT0gJ2FjY2VwdFJlc3BvbnNlJ1wiPlxyXG4gICAgICAgICAgICAgICAgTWFya2VkIGFzIFwiQWNjZXB0IFJlc3BvbnNlXCIuXHJcbiAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICA8aDUgKm5nSWY9XCJ6b25lRmVlZGJhY2s/LmFuc3dlcnM/LlswXT8udXNlckFjdGlvbiA9PT0gJ2VkaXRBY2NlcHRlZCdcIj5cclxuICAgICAgICAgICAgICAgIE1hcmtlZCBhcyBcIkFjY2VwdCBSZXNwb25zZSB3aXRoIE1vZGlmaWNhdGlvblwiLlxyXG4gICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgPGg1ICpuZ0lmPVwiYz8uY29tbWVudFwiPk5vdGU6IHt7IGMuY29tbWVudCB9fTwvaDU+XHJcbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKGM/LnJlc3BvbnNldHlwZSA9PT0gJ2Rpc2FncmVlJykge1xyXG4gICAgICAgICAgICAgIDxoNT5NYXJrZWQgYXMgXCJSZWRvXCI8L2g1PlxyXG4gICAgICAgICAgICAgIDxoNSAqbmdJZj1cImM/LmNvbW1lbnRcIj5Ob3RlOiB7eyBjLmNvbW1lbnQgfX08L2g1PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjc2tlbGV0b25Mb2FkZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyIHJvdW5kZWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9zZWN0aW9uPiJdfQ==
|
|
325
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZS12ZXJpZmljYXRpb24tZmVlZGJhY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvbWFuYWdlLXN0b3JlLXBsYW5vL3pvbmUtdmVyaWZpY2F0aW9uLWZlZWRiYWNrL3pvbmUtdmVyaWZpY2F0aW9uLWZlZWRiYWNrLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby96b25lLXZlcmlmaWNhdGlvbi1mZWVkYmFjay96b25lLXZlcmlmaWNhdGlvbi1mZWVkYmFjay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUMzSCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQzs7Ozs7QUFROUgsTUFBTSxPQUFPLGlDQUFpQztJQW1CeEI7SUFsQlgsU0FBUyxDQUFNO0lBQ2YsZUFBZSxDQUFNO0lBQ3JCLFFBQVEsQ0FBTTtJQUNkLFlBQVksQ0FBTTtJQUNsQixhQUFhLEdBQVUsRUFBRSxDQUFDO0lBQzFCLEdBQUcsQ0FBUztJQUNaLFVBQVUsR0FBWSxJQUFJLENBQUM7SUFFMUIsYUFBYSxHQUFHLElBQUksWUFBWSxFQUd0QyxDQUFDO0lBRUssTUFBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFHM0MsZUFBZSxDQUFnQztJQUUvQyxZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQUcs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LFNBQVM7K0JBQ0UsZ0NBQWdDOzZFQUtqQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFLRyxNQUFNO3NCQUFmLE1BQU07Z0JBR1AsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IEFjdGlvbkNvbmZpcm1Qb3B1cENvbXBvbmVudCB9IGZyb20gXCIuLi92ZXJpZmljYXRpb24tZmVlZGJhY2svYWN0aW9uLWNvbmZpcm0tcG9wdXAvYWN0aW9uLWNvbmZpcm0tcG9wdXAuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpvbmVFZGl0YWJsZUZpeHR1cmVDb21wb25lbnQgfSBmcm9tIFwiLi4vdmVyaWZpY2F0aW9uLWZlZWRiYWNrL3pvbmUtZWRpdGFibGUtZml4dHVyZS96b25lLWVkaXRhYmxlLWZpeHR1cmUuY29tcG9uZW50XCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXpvbmUtdmVyaWZpY2F0aW9uLWZlZWRiYWNrXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96b25lLXZlcmlmaWNhdGlvbi1mZWVkYmFjay5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vem9uZS12ZXJpZmljYXRpb24tZmVlZGJhY2suY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFpvbmVWZXJpZmljYXRpb25GZWVkYmFja0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgZmxvb3JEYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgZmVlZGJhY2tEZXRhaWxzOiBhbnk7XHJcbiAgQElucHV0KCkgem9uZVRhc2s6IGFueTtcclxuICBASW5wdXQoKSB6b25lRmVlZGJhY2s6IGFueTtcclxuICBASW5wdXQoKSB0b3RhbEZpeHR1cmVzOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGNkbjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNob3dBY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBAT3V0cHV0KCkgY2hhbmdlRml4dHVyZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgY3VycmVudEZpeHR1cmU6IHN0cmluZztcclxuICAgIGFjdGlvbjogXCJuZXh0XCIgfCBcInByZXZpb3VzXCI7XHJcbiAgfT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKFpvbmVFZGl0YWJsZUZpeHR1cmVDb21wb25lbnQpXHJcbiAgZWRpdGFibGVGaXh0dXJlPzogWm9uZUVkaXRhYmxlRml4dHVyZUNvbXBvbmVudDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ2JNb2RhbDogTmdiTW9kYWwpIHt9XHJcblxyXG4gIHBsYW5vRml4dHVyZTogYW55O1xyXG4gIHpvbmVGaXh0dXJlOiBhbnk7XHJcbiAgY3VycmVudEZpeHR1cmVJbmRleDogbnVtYmVyID0gMDtcclxuXHJcbiAgc2VsZWN0ZWRJbWFnZUZvclByZXZpZXc6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIGltYWdlUHJldmlld1pvb206IG51bWJlciA9IDE7XHJcbiAgaW1hZ2VQcmV2aWV3UGFuWDogbnVtYmVyID0gMDtcclxuICBpbWFnZVByZXZpZXdQYW5ZOiBudW1iZXIgPSAwO1xyXG4gIGlzUGFubmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcGFuTGFzdFg6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBwYW5MYXN0WTogbnVtYmVyID0gMDtcclxuXHJcbiAgaXNJbWFnZUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHByZXZpb3VzSW1hZ2VVcmw6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzW1wiZmVlZGJhY2tEZXRhaWxzXCJdIHx8IGNoYW5nZXNbXCJ6b25lRmVlZGJhY2tcIl0gfHwgY2hhbmdlc1tcImNkblwiXSkge1xyXG4gICAgICB0aGlzLnBsYW5vRml4dHVyZSA9IHRoaXMuZmVlZGJhY2tEZXRhaWxzPy5maXh0dXJlRmVlZGJhY2s/LkZpeHR1cmVEYXRhO1xyXG4gICAgICB0aGlzLmN1cnJlbnRGaXh0dXJlSW5kZXggPVxyXG4gICAgICAgIHRoaXMudG90YWxGaXh0dXJlcy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAoZjogYW55KSA9PlxyXG4gICAgICAgICAgICBmLl9pZCA9PT0gdGhpcy5mZWVkYmFja0RldGFpbHM/LmZpeHR1cmVGZWVkYmFjaz8uZml4dHVyZUlkLFxyXG4gICAgICAgICkgKyAxO1xyXG4gICAgICB0aGlzLnpvbmVGaXh0dXJlID0gdGhpcy5idWlsZFpvbmVGaXh0dXJlKFxyXG4gICAgICAgIHRoaXMuem9uZUZlZWRiYWNrLFxyXG4gICAgICAgIHRoaXMucGxhbm9GaXh0dXJlLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgbmV3SW1hZ2VVcmwgPSB0aGlzLnpvbmVJbWFnZVVybDtcclxuXHJcbiAgICAgIGlmIChuZXdJbWFnZVVybCAmJiBuZXdJbWFnZVVybCAhPT0gdGhpcy5wcmV2aW91c0ltYWdlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0ltYWdlVXJsID0gbmV3SW1hZ2VVcmw7XHJcbiAgICAgICAgdGhpcy5pc0ltYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoIW5ld0ltYWdlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0ltYWdlVXJsID0gXCJcIjtcclxuICAgICAgICB0aGlzLmlzSW1hZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRab25lRml4dHVyZShyb3c6IGFueSwgcGxhbm9GaXh0dXJlOiBhbnkpOiBhbnkge1xyXG4gICAgY29uc3QgYW5zID0gcm93Py5hbnN3ZXJzPy5bMF07XHJcbiAgICBpZiAoIWFucykgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYW5zLnNoZWxmQ29uZmlnKSB8fCBhbnMuc2hlbGZDb25maWcubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZml4dHVyZUlkOiByb3c/LmZpeHR1cmVJZCxcclxuICAgICAgZml4dHVyZTogYW5zLmZpeHR1cmUsXHJcbiAgICAgIGZpeHR1cmVUeXBlOiBhbnMuZml4dHVyZVR5cGUgPz8gcGxhbm9GaXh0dXJlPy5maXh0dXJlVHlwZSxcclxuICAgICAgZml4dHVyZUNhdGVnb3J5OiBhbnMuZml4dHVyZUNhdGVnb3J5ID8/IHBsYW5vRml4dHVyZT8uZml4dHVyZUNhdGVnb3J5LFxyXG4gICAgICBmaXh0dXJlQ2FwYWNpdHk6IGFucy5maXh0dXJlQ2FwYWNpdHksXHJcbiAgICAgIGZpeHR1cmVJbWFnZTogYW5zLmZpeHR1cmVJbWFnZSxcclxuICAgICAgaXNFbXB0eTogYW5zLmlzRW1wdHksXHJcbiAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgIC4uLihwbGFub0ZpeHR1cmU/LmhlYWRlciA/PyB7fSksXHJcbiAgICAgICAgLi4uKGFucy5oZWFkZXIgPz8ge30pLFxyXG4gICAgICB9LFxyXG4gICAgICBmb290ZXI6IHBsYW5vRml4dHVyZT8uZm9vdGVyLFxyXG4gICAgICBwcm9kdWN0UmVzb2x1dGlvbkxldmVsOiBwbGFub0ZpeHR1cmU/LnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwsXHJcbiAgICAgIHNoZWxmQ29uZmlnOiBhbnMuc2hlbGZDb25maWcsXHJcbiAgICAgIHZtQ29uZmlnOiBbXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzWm9uZVRhc2soKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnpvbmVUYXNrO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzVGFza09wZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy56b25lVGFzaz8uY2hlY2tsaXN0U3RhdHVzID09PSBcIm9wZW5cIjtcclxuICB9XHJcblxyXG4gIGdldCBoYXNGaXh0dXJlUmVzcG9uc2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnpvbmVGaXh0dXJlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRVc2VyQWN0aW9uKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuem9uZUZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/LnVzZXJBY3Rpb24gPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldCBpc0FwcHJvdmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5jdXJyZW50VXNlckFjdGlvbjtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGFjdGlvbiA9PT0gXCJrZWVwUGxhbm9cIiB8fFxyXG4gICAgICBhY3Rpb24gPT09IFwiYWNjZXB0UmVzcG9uc2VcIiB8fFxyXG4gICAgICBhY3Rpb24gPT09IFwiZWRpdEFjY2VwdGVkXCJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBUcnVlIGZvciBhbnkgYWN0aW9uIHRha2VuIChhcHByb3ZlLXN0eWxlIG9yIHJlZG8pLiBVc2VkIHRvIGhpZGUgdGhlIGFjdGlvbiByb3dcclxuICAvLyBvbmNlIHRoZSB1c2VyIGhhcyBkZWNpZGVkIOKAlCBtaXJyb3JzIGZpeHR1cmUgdmVyaWZpY2F0aW9uLlxyXG4gIGdldCBpc0FjdGlvbmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNBcHByb3ZlZCB8fCB0aGlzLmN1cnJlbnRVc2VyQWN0aW9uID09PSBcInJlZG9cIjtcclxuICB9XHJcblxyXG4gIGdldCBpc0NsRml4dHVyZSgpOiBib29sZWFuIHtcclxuICAgIC8vIE1hdGNoIHRoZSBjb21wbGlhbmNlLXNpZGUgQ0wgcnVsZTogaGVhZGVyLmxhYmVsID09PSAnQ0wnIE9SIHRlbXBsYXRlR3JvdXBOYW1lXHJcbiAgICAvLyA9PT0gJ0NMJy4gcGxhbm9GaXh0dXJlIGlzIHRoZSBsaXZlIHN0b3JlIGZpeHR1cmUgcmVjb3JkIHNvIHRlbXBsYXRlR3JvdXBOYW1lXHJcbiAgICAvLyBpcyBhbHdheXMgcG9wdWxhdGVkOyB0aGlzIGNhdGNoZXMgQ0wgZml4dHVyZXMgd2hvc2UgbW9iaWxlLXNpZGUgaGVhZGVyIHdhc1xyXG4gICAgLy8gcmVwb3J0ZWQgd2l0aCBhIGJyYW5kLXNwZWNpZmljIGxhYmVsLlxyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5wbGFub0ZpeHR1cmU/LmhlYWRlcj8ubGFiZWwgPT09IFwiQ0xcIiB8fFxyXG4gICAgICB0aGlzLnBsYW5vRml4dHVyZT8udGVtcGxhdGVHcm91cE5hbWUgPT09IFwiQ0xcIlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldCB6b25lSW1hZ2VVcmwoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlbCA9XHJcbiAgICAgIHRoaXMuem9uZUZpeHR1cmU/LmZpeHR1cmVJbWFnZSA/P1xyXG4gICAgICB0aGlzLnpvbmVGZWVkYmFjaz8uYW5zd2Vycz8uWzBdPy5maXh0dXJlSW1hZ2UgPz9cclxuICAgICAgXCJcIjtcclxuICAgIHJldHVybiB0aGlzLmNkbiAmJiByZWwgPyB0aGlzLmNkbiArIHJlbCA6IFwiXCI7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FuU2hvd0FjdGlvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLnNob3dBY3Rpb24gJiZcclxuICAgICAgISF0aGlzLnpvbmVUYXNrICYmXHJcbiAgICAgIHRoaXMuem9uZVRhc2s/LmNoZWNrbGlzdFN0YXR1cyA9PT0gXCJzdWJtaXRcIiAmJlxyXG4gICAgICAhdGhpcy5pc0FjdGlvbmVkICYmXHJcbiAgICAgICF0aGlzLmlzQ2xGaXh0dXJlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25DbGlja0tlZXBQbGFubygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybUFjdGlvbihcInJlamVjdFJlc3BvbnNlXCIpO1xyXG4gICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQuYWN0aW9uID09PSBcIm5vdE9rXCIpIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMuZWRpdGFibGVGaXh0dXJlPy5yZXNldFRvT3JpZ2luYWwoKTtcclxuXHJcbiAgICAgIHRoaXMuYWN0aW9uLmVtaXQoe1xyXG4gICAgICAgIGFjdGlvbjogXCJrZWVwUGxhbm9cIixcclxuICAgICAgICB0eXBlOiBcImFncmVlXCIsXHJcbiAgICAgICAgZml4dHVyZURhdGE6IHRoaXMucGxhbm9GaXh0dXJlLFxyXG4gICAgICAgIGZlZWRiYWNrOiB0aGlzLnpvbmVGZWVkYmFjayxcclxuICAgICAgICByZW1hcmtzOiByZXN1bHQucmVtYXJrLFxyXG4gICAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhPy5wbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhPy5faWQsXHJcbiAgICAgICAgdGFza1R5cGU6IFwiem9uZVZlcmlmaWNhdGlvblwiLFxyXG4gICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBab25lIG9uQ2xpY2tLZWVwUGxhbm8gW0VSUl06XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQ2xpY2tBY2NlcHRSZXNwb25zZSgpIHtcclxuICAgIGlmICghdGhpcy5oYXNGaXh0dXJlUmVzcG9uc2UpIHJldHVybjtcclxuICAgIGlmICghdGhpcy5lZGl0YWJsZUZpeHR1cmU/LmlzVmFsaWQpIHJldHVybjtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybUFjdGlvbihcImFjY2VwdFJlc3BvbnNlXCIpO1xyXG4gICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQuYWN0aW9uID09PSBcIm5vdE9rXCIpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGlzTW9kaWZpZWQgPSAhIXRoaXMuZWRpdGFibGVGaXh0dXJlPy5pc0RpcnR5O1xyXG5cclxuICAgICAgdGhpcy5hY3Rpb24uZW1pdCh7XHJcbiAgICAgICAgYWN0aW9uOiBpc01vZGlmaWVkID8gXCJlZGl0QWNjZXB0ZWRcIiA6IFwiYWNjZXB0UmVzcG9uc2VcIixcclxuICAgICAgICB0eXBlOiBcImFncmVlXCIsXHJcbiAgICAgICAgZml4dHVyZURhdGE6IHRoaXMuem9uZUZpeHR1cmUsXHJcbiAgICAgICAgZmVlZGJhY2s6IHRoaXMuem9uZUZlZWRiYWNrLFxyXG4gICAgICAgIHJlbWFya3M6IHJlc3VsdC5yZW1hcmssXHJcbiAgICAgICAgcGxhbm9JZDogdGhpcy5mbG9vckRhdGE/LnBsYW5vSWQsXHJcbiAgICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGE/Ll9pZCxcclxuICAgICAgICB0YXNrVHlwZTogXCJ6b25lVmVyaWZpY2F0aW9uXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IFpvbmUgb25DbGlja0FjY2VwdFJlc3BvbnNlIFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrRWRpdFJlc3BvbnNlKCkge1xyXG4gICAgaWYgKCF0aGlzLmhhc0ZpeHR1cmVSZXNwb25zZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5hY3Rpb24uZW1pdCh7XHJcbiAgICAgIGFjdGlvbjogXCJlZGl0V2l0aFJlc3BvbnNlXCIsXHJcbiAgICAgIHR5cGU6IFwiYWdyZWVcIixcclxuICAgICAgZml4dHVyZURhdGE6IHRoaXMuem9uZUZpeHR1cmUsXHJcbiAgICAgIGZlZWRiYWNrOiB0aGlzLnpvbmVGZWVkYmFjayxcclxuICAgICAgcGxhbm9JZDogdGhpcy5mbG9vckRhdGE/LnBsYW5vSWQsXHJcbiAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhPy5faWQsXHJcbiAgICAgIHRhc2tUeXBlOiBcInpvbmVWZXJpZmljYXRpb25cIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25DbGlja1JlZG8oKSB7XHJcbiAgICBpZiAoIXRoaXMuaGFzRml4dHVyZVJlc3BvbnNlKSByZXR1cm47XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbmZpcm1BY3Rpb24oXCJyZWRvXCIpO1xyXG4gICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQuYWN0aW9uID09PSBcIm5vdE9rXCIpIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMuZWRpdGFibGVGaXh0dXJlPy5yZXNldFRvT3JpZ2luYWwoKTtcclxuXHJcbiAgICAgIHRoaXMuYWN0aW9uLmVtaXQoe1xyXG4gICAgICAgIGFjdGlvbjogXCJyZWRvXCIsXHJcbiAgICAgICAgdHlwZTogXCJkaXNhZ3JlZVwiLFxyXG4gICAgICAgIGZpeHR1cmVEYXRhOiBudWxsLFxyXG4gICAgICAgIGZlZWRiYWNrOiB0aGlzLnpvbmVGZWVkYmFjayxcclxuICAgICAgICByZW1hcmtzOiByZXN1bHQucmVtYXJrLFxyXG4gICAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhPy5wbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhPy5faWQsXHJcbiAgICAgICAgdGFza1R5cGU6IFwiem9uZVZlcmlmaWNhdGlvblwiLFxyXG4gICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBab25lIG9uQ2xpY2tSZWRvIFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNvbmZpcm1BY3Rpb24oXHJcbiAgICB0eXBlOiBcImtlZXBQbGFub1wiIHwgXCJhY2NlcHRSZXNwb25zZVwiIHwgXCJyZWplY3RSZXNwb25zZVwiIHwgXCJyZWRvXCIsXHJcbiAgKTogUHJvbWlzZTx7IGFjdGlvbjogc3RyaW5nOyByZW1hcms6IHN0cmluZyB8IG51bGwgfSB8IG51bGw+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKEFjdGlvbkNvbmZpcm1Qb3B1cENvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgICAgfSk7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0eXBlO1xyXG5cclxuICAgICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPHtcclxuICAgICAgICBhY3Rpb246IHN0cmluZztcclxuICAgICAgICByZW1hcms6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgIH0+KChyZXN1bHQpID0+IHJlc3VsdCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlRml4dHVyZShhY3Rpb246IFwibmV4dFwiIHwgXCJwcmV2aW91c1wiKSB7XHJcbiAgICBjb25zdCBmaXh0dXJlSWQgPSB0aGlzLmZlZWRiYWNrRGV0YWlscz8uZml4dHVyZUZlZWRiYWNrPy5maXh0dXJlSWQ7XHJcbiAgICBpZiAoIWZpeHR1cmVJZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5jaGFuZ2VGaXh0dXJlLmVtaXQoeyBjdXJyZW50Rml4dHVyZTogZml4dHVyZUlkLCBhY3Rpb24gfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrSW1hZ2VQcmV2aWV3KGV2ZW50OiBNb3VzZUV2ZW50LCBpbWdVcmw6IHN0cmluZykge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2VGb3JQcmV2aWV3ID0gaW1nVXJsO1xyXG4gICAgdGhpcy5pbWFnZVByZXZpZXdab29tID0gMTtcclxuICAgIHRoaXMuaW1hZ2VQcmV2aWV3UGFuWCA9IDA7XHJcbiAgICB0aGlzLmltYWdlUHJldmlld1BhblkgPSAwO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VJbWFnZVByZXZpZXcoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2VGb3JQcmV2aWV3ID0gbnVsbDtcclxuICAgIHRoaXMuaW1hZ2VQcmV2aWV3Wm9vbSA9IDE7XHJcbiAgICB0aGlzLmltYWdlUHJldmlld1BhblggPSAwO1xyXG4gICAgdGhpcy5pbWFnZVByZXZpZXdQYW5ZID0gMDtcclxuICB9XHJcblxyXG4gIG9uUHJldmlld1pvb21JbigpIHtcclxuICAgIHRoaXMuaW1hZ2VQcmV2aWV3Wm9vbSA9IE1hdGgubWluKHRoaXMuaW1hZ2VQcmV2aWV3Wm9vbSArIDAuMjUsIDUpO1xyXG4gICAgaWYgKHRoaXMuaW1hZ2VQcmV2aWV3Wm9vbSA8PSAxKSB0aGlzLnJlc2V0UGFuKCk7XHJcbiAgfVxyXG5cclxuICBvblByZXZpZXdab29tT3V0KCkge1xyXG4gICAgdGhpcy5pbWFnZVByZXZpZXdab29tID0gTWF0aC5tYXgodGhpcy5pbWFnZVByZXZpZXdab29tIC0gMC4yNSwgMC4yNSk7XHJcbiAgICBpZiAodGhpcy5pbWFnZVByZXZpZXdab29tIDw9IDEpIHRoaXMucmVzZXRQYW4oKTtcclxuICB9XHJcblxyXG4gIG9uUHJldmlld1pvb21TbGlkZXIoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9ICsoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xyXG4gICAgdGhpcy5pbWFnZVByZXZpZXdab29tID0gdmFsdWUgLyAxMDA7XHJcbiAgICBpZiAodGhpcy5pbWFnZVByZXZpZXdab29tIDw9IDEpIHRoaXMucmVzZXRQYW4oKTtcclxuICB9XHJcblxyXG4gIG9uUHJldmlld1doZWVsKGV2ZW50OiBXaGVlbEV2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKGV2ZW50LmRlbHRhWSA8IDApIHtcclxuICAgICAgdGhpcy5vblByZXZpZXdab29tSW4oKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub25QcmV2aWV3Wm9vbU91dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25QcmV2aWV3UGFuU3RhcnQoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmltYWdlUHJldmlld1pvb20gPD0gMSkgcmV0dXJuO1xyXG4gICAgdGhpcy5pc1Bhbm5pbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5wYW5MYXN0WCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICB0aGlzLnBhbkxhc3RZID0gZXZlbnQuY2xpZW50WTtcclxuICB9XHJcblxyXG4gIG9uUHJldmlld1Bhbk1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc1Bhbm5pbmcpIHJldHVybjtcclxuICAgIGNvbnN0IGR4ID0gZXZlbnQuY2xpZW50WCAtIHRoaXMucGFuTGFzdFg7XHJcbiAgICBjb25zdCBkeSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLnBhbkxhc3RZO1xyXG4gICAgdGhpcy5wYW5MYXN0WCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICB0aGlzLnBhbkxhc3RZID0gZXZlbnQuY2xpZW50WTtcclxuICAgIHRoaXMuaW1hZ2VQcmV2aWV3UGFuWCArPSBkeDtcclxuICAgIHRoaXMuaW1hZ2VQcmV2aWV3UGFuWSArPSBkeTtcclxuICB9XHJcblxyXG4gIG9uUHJldmlld1BhbkVuZCgpIHtcclxuICAgIHRoaXMuaXNQYW5uaW5nID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0UGFuKCkge1xyXG4gICAgdGhpcy5pbWFnZVByZXZpZXdQYW5YID0gMDtcclxuICAgIHRoaXMuaW1hZ2VQcmV2aWV3UGFuWSA9IDA7XHJcbiAgfVxyXG5cclxuICBvbkltYWdlTG9hZCgpIHtcclxuICAgIHRoaXMuaXNJbWFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uSW1hZ2VFcnJvcigpIHtcclxuICAgIHRoaXMuaXNJbWFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uSW1hZ2VMb2FkU3RhcnQoKSB7XHJcbiAgICB0aGlzLmlzSW1hZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uSW1hZ2VMb2FkRW5kKCkge1xyXG4gICAgdGhpcy5pc0ltYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cInZlcmlmaWNhdGlvbi1mZWVkYmFja1wiPlxyXG5cclxuICA8IS0tIFRhc2sgaW5mbyBhY2NvcmRpb24gLS0+XHJcbiAgPGRpdiAqbmdJZj1cImhhc1pvbmVUYXNrXCIgaWQ9XCJ0YXNrLWluZm9cIiBuZ2JBY2NvcmRpb24gI2FjY29yZGlvbj1cIm5nYkFjY29yZGlvblwiPlxyXG4gICAgPGRpdiBuZ2JBY2NvcmRpb25JdGVtPVwiZGV0YWlsc1wiPlxyXG4gICAgICA8ZGl2IG5nYkFjY29yZGlvbkhlYWRlciBuZ2JBY2NvcmRpb25Ub2dnbGUgY2xhc3M9XCJhY2NvcmRpb24tYnV0dG9uIHRhc2staW5mby1oZWFkZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICAgIDxoMj5ab25lIHZlcmlmaWNhdGlvbiBhc3NpZ25lZDwvaDI+XHJcbiAgICAgICAgICA8cD57eyB6b25lVGFzaz8uY3JlYXRlZEF0IHwgZGF0ZTogJ2hoOm1tOnNzIGEgLSBkZCBNTU0geXl5eScgfX08L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2ctYmxvY2tcIj5cclxuICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHJ4PVwiMTZcIiBmaWxsPVwiI0VBRjhGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICBkPVwiTTIyLjY2NzMgMjMuNVYyMS44MzMzQzIyLjY2NzMgMjAuOTQ5MyAyMi4zMTYxIDIwLjEwMTQgMjEuNjkxIDE5LjQ3NjNDMjEuMDY1OSAxOC44NTEyIDIwLjIxOCAxOC41IDE5LjMzNCAxOC41SDEyLjY2NzNDMTEuNzgzMyAxOC41IDEwLjkzNTQgMTguODUxMiAxMC4zMTAzIDE5LjQ3NjNDOS42ODUxNyAyMC4xMDE0IDkuMzMzOTggMjAuOTQ5MyA5LjMzMzk4IDIxLjgzMzNWMjMuNU0xOS4zMzQgMTEuODMzM0MxOS4zMzQgMTMuNjc0MyAxNy44NDE2IDE1LjE2NjcgMTYuMDAwNyAxNS4xNjY3QzE0LjE1OTcgMTUuMTY2NyAxMi42NjczIDEzLjY3NDMgMTIuNjY3MyAxMS44MzMzQzEyLjY2NzMgOS45OTIzOCAxNC4xNTk3IDguNSAxNi4wMDA3IDguNUMxNy44NDE2IDguNSAxOS4zMzQgOS45OTIzOCAxOS4zMzQgMTEuODMzM1pcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTEgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxoND57eyB6b25lVGFzaz8uY3JlYXRlZEJ5TmFtZSB9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8cD57eyB6b25lVGFzaz8uY3JlYXRlZEF0IHwgZGF0ZTogJ2hoOm1tYSwgZGQgTU1NIHl5eXknIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPGg1PkFzc2lnbmVyPC9oNT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjMyXCIgaGVpZ2h0PVwiMzJcIiByeD1cIjE2XCIgZmlsbD1cIiNFQUY4RkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgZD1cIk0yMi42NjczIDIzLjVWMjEuODMzM0MyMi42NjczIDIwLjk0OTMgMjIuMzE2MSAyMC4xMDE0IDIxLjY5MSAxOS40NzYzQzIxLjA2NTkgMTguODUxMiAyMC4yMTggMTguNSAxOS4zMzQgMTguNUgxMi42NjczQzExLjc4MzMgMTguNSAxMC45MzU0IDE4Ljg1MTIgMTAuMzEwMyAxOS40NzYzQzkuNjg1MTcgMjAuMTAxNCA5LjMzMzk4IDIwLjk0OTMgOS4zMzM5OCAyMS44MzMzVjIzLjVNMTkuMzM0IDExLjgzMzNDMTkuMzM0IDEzLjY3NDMgMTcuODQxNiAxNS4xNjY3IDE2LjAwMDcgMTUuMTY2N0MxNC4xNTk3IDE1LjE2NjcgMTIuNjY3MyAxMy42NzQzIDEyLjY2NzMgMTEuODMzM0MxMi42NjczIDkuOTkyMzggMTQuMTU5NyA4LjUgMTYuMDAwNyA4LjVDMTcuODQxNiA4LjUgMTkuMzM0IDkuOTkyMzggMTkuMzM0IDExLjgzMzNaXCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8aDQ+e3sgem9uZVRhc2s/LnVzZXJOYW1lIH19PC9oND5cclxuICAgICAgICAgICAgICAgIDxwPnt7IHpvbmVUYXNrPy5zdWJtaXRUaW1lX3N0cmluZyB8fCB6b25lVGFzaz8uc3RhcnRUaW1lX3N0cmluZyB9fTwvcD5cclxuICAgICAgICAgICAgICAgIDxoNT5Bc3NpZ25lZTwvaDU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInpvbmVUYXNrPy5jb21tZW50cz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPkNvbW1lbnRzPC9oNT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nLWJsb2NrXCIgKm5nRm9yPVwibGV0IGMgb2Ygem9uZVRhc2s/LmNvbW1lbnRzXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgcng9XCIxNlwiIGZpbGw9XCIjRUFGOEZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTIyLjY2NzMgMjMuNVYyMS44MzMzQzIyLjY2NzMgMjAuOTQ5MyAyMi4zMTYxIDIwLjEwMTQgMjEuNjkxIDE5LjQ3NjNDMjEuMDY1OSAxOC44NTEyIDIwLjIxOCAxOC41IDE5LjMzNCAxOC41SDEyLjY2NzNDMTEuNzgzMyAxOC41IDEwLjkzNTQgMTguODUxMiAxMC4zMTAzIDE5LjQ3NjNDOS42ODUxNyAyMC4xMDE0IDkuMzMzOTggMjAuOTQ5MyA5LjMzMzk4IDIxLjgzMzNWMjMuNU0xOS4zMzQgMTEuODMzM0MxOS4zMzQgMTMuNjc0MyAxNy44NDE2IDE1LjE2NjcgMTYuMDAwNyAxNS4xNjY3QzE0LjE1OTcgMTUuMTY2NyAxMi42NjczIDEzLjY3NDMgMTIuNjY3MyAxMS44MzMzQzEyLjY2NzMgOS45OTIzOCAxNC4xNTk3IDguNSAxNi4wMDA3IDguNUMxNy44NDE2IDguNSAxOS4zMzQgOS45OTIzOCAxOS4zMzQgMTEuODMzM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMSBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICA8aDQ+e3sgYz8udXNlck5hbWUgfX08L2g0PlxyXG4gICAgICAgICAgICAgICAgICA8cD57eyBjPy5jcmVhdGVkQXQgfCBkYXRlOidoaDptbTpzcyBhIC0gZGQgTU1NIHl5eXknIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgICA8aDU+e3sgYz8uY29tbWVudCB9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8aHIgKm5nSWY9XCJoYXNab25lVGFza1wiPlxyXG5cclxuICA8IS0tIEVtcHR5IHN0YXRlOiBubyB0YXNrIGFzc2lnbmVkIC0tPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGFzWm9uZVRhc2tcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJteS02XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiOTRcIiBoZWlnaHQ9XCI5NFwiIHZpZXdCb3g9XCIwIDAgOTQgOTRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgPHJlY3QgeD1cIjdcIiB5PVwiN1wiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIHJ4PVwiNDBcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XHJcbiAgICAgICAgICA8cmVjdCB4PVwiN1wiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCIxMy4zMzMzXCIgLz5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMzUuOTUwMiA0OC4xOTk3QzM1LjY0ODkgNDguMjMxNSAzNS4zNDIyIDQ4LjI1MDUgMzUuMDMxMiA0OC4yNTA1QzM0Ljg2MTcgNDguMjUwNSAzNC42OTQ0IDQ4LjI0MzYgMzQuNTI5MyA0OC4yMzM5VjU4LjYwNjlDMzQuNTI5MyA2MC4wMzQ5IDM1LjcxMjMgNjEuMjI2IDM3LjIwMDIgNjEuMjI2MUg1Ni44MDQ3QzU4LjI5MjcgNjEuMjI2MSA1OS40NzU2IDYwLjAzNSA1OS40NzU2IDU4LjYwNjlWNDguMjM0OUM1OS4zMTM3IDQ4LjI0NDEgNTkuMTQ5OCA0OC4yNTA1IDU4Ljk4NTQgNDguMjUwNUM1OC42NzE0IDQ4LjI1MDUgNTguMzYwOCA0OC4yMzI1IDU4LjA1NDcgNDguMTk5N1Y1NS45ODc4SDM1Ljk1MDJWNDguMTk5N1pNNTcuOTMxNiAzMi43NzM5SDM2LjA3MzJDMzUuODk1OSAzMi43NzM5IDM1Ljc0MDYgMzIuODY2NyAzNS42NjMxIDMyLjk4NzhMMzUuNjYxMSAzMi45ODk3TDMyLjE1MTQgMzguNDczMUwzMi4wNTY2IDM4LjYyMDZDMzAuODMxMSA0MC43NDA0IDMyLjA5NTcgNDMuNDY3NCAzNC40NDczIDQzLjc3NjlDMzQuNjQ4MiA0My44MDEzIDM0LjgzNzkgNDMuODE1OSAzNS4wMjU0IDQzLjgxNTlDMzYuMjU1NSA0My44MTU5IDM3LjM0MzQgNDMuMjg3MiAzOC4xMDA2IDQyLjQ2NTNMMzkuMDIyNSA0MS40NjQ0TDM5Ljk0MTQgNDIuNDY4M0M0MC42OTAzIDQzLjI4NjMgNDEuNzc3IDQzLjgxNTkgNDMuMDE0NiA0My44MTU5QzQ0LjI0NjcgNDMuODE1OCA0NS4zMzg2IDQzLjI4NTYgNDYuMDg2OSA0Mi40NjgzTDQ3LjAwODggNDEuNDYxNEw0Ny45MzA3IDQyLjQ2ODNDNDguNjc5IDQzLjI4NTcgNDkuNzcwNyA0My44MTU5IDUxLjAwMjkgNDMuODE1OUM1Mi4yMzUxIDQzLjgxNTkgNTMuMzI2OCA0My4yODU3IDU0LjA3NTIgNDIuNDY4M0w1NC45OTcxIDQxLjQ2MTRMNTUuOTE4OSA0Mi40NjgzQzU2LjY2NzMgNDMuMjg1NyA1Ny43NiA0My44MTU5IDU4Ljk5MjIgNDMuODE1OUM1OS4xNzM2IDQzLjgxNTkgNTkuMzY4NyA0My44MDIxIDU5LjU2ODQgNDMuNzc3OEg1OS41Njc0QzYxLjk2MTEgNDMuNDU3MyA2My4yMjkzIDQwLjYwNzggNjEuODYxMyAzOC40NzMxTDYxLjg2MDQgMzguNDc0MUw1OC4zNDM4IDMyLjk5MDdMNTguMzQyOCAzMi45ODc4QzU4LjI2NTMgMzIuODY2NSA1OC4xMDkyIDMyLjc3MzkgNTcuOTMxNiAzMi43NzM5WlwiXHJcbiAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIyLjVcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm10LTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZCBoMyBtdC0yXCI+Tm8gcmVzcG9uc2U8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPk5vIHpvbmUgdmVyaWZpY2F0aW9uIHRhc2sgaGFzIGJlZW4gYXNzaWduZWQgZm9yIHRoaXMgZmxvb3IuPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gRW1wdHkgc3RhdGU6IHRhc2sgYXNzaWduZWQgYnV0IG5vdCB5ZXQgc3VibWl0dGVkIChvbmx5IG9uIGEgZnJlc2ggdGFzayDigJQgZHVyaW5nIGFcclxuICAgICAgIHJlZG8ncyBvcGVuIHBlcmlvZCB3ZSBrZWVwIHRoZSBwcmV2aW91cyByb3VuZCdzIHJlc3BvbnNlcyB2aXNpYmxlIGxpa2UgZml4dHVyZSBkb2VzKSAtLT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzWm9uZVRhc2sgJiYgaXNUYXNrT3BlbiAmJiAhem9uZVRhc2s/LnJlZG9TdGF0dXNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJteS02XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiOTRcIiBoZWlnaHQ9XCI5NFwiIHZpZXdCb3g9XCIwIDAgOTQgOTRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgPHJlY3QgeD1cIjdcIiB5PVwiN1wiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIHJ4PVwiNDBcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XHJcbiAgICAgICAgICA8cmVjdCB4PVwiN1wiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCIxMy4zMzMzXCIgLz5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMzUuOTUwMiA0OC4xOTk3QzM1LjY0ODkgNDguMjMxNSAzNS4zNDIyIDQ4LjI1MDUgMzUuMDMxMiA0OC4yNTA1QzM0Ljg2MTcgNDguMjUwNSAzNC42OTQ0IDQ4LjI0MzYgMzQuNTI5MyA0OC4yMzM5VjU4LjYwNjlDMzQuNTI5MyA2MC4wMzQ5IDM1LjcxMjMgNjEuMjI2IDM3LjIwMDIgNjEuMjI2MUg1Ni44MDQ3QzU4LjI5MjcgNjEuMjI2MSA1OS40NzU2IDYwLjAzNSA1OS40NzU2IDU4LjYwNjlWNDguMjM0OUM1OS4zMTM3IDQ4LjI0NDEgNTkuMTQ5OCA0OC4yNTA1IDU4Ljk4NTQgNDguMjUwNUM1OC42NzE0IDQ4LjI1MDUgNTguMzYwOCA0OC4yMzI1IDU4LjA1NDcgNDguMTk5N1Y1NS45ODc4SDM1Ljk1MDJWNDguMTk5N1pNNTcuOTMxNiAzMi43NzM5SDM2LjA3MzJDMzUuODk1OSAzMi43NzM5IDM1Ljc0MDYgMzIuODY2NyAzNS42NjMxIDMyLjk4NzhMMzUuNjYxMSAzMi45ODk3TDMyLjE1MTQgMzguNDczMUwzMi4wNTY2IDM4LjYyMDZDMzAuODMxMSA0MC43NDA0IDMyLjA5NTcgNDMuNDY3NCAzNC40NDczIDQzLjc3NjlDMzQuNjQ4MiA0My44MDEzIDM0LjgzNzkgNDMuODE1OSAzNS4wMjU0IDQzLjgxNTlDMzYuMjU1NSA0My44MTU5IDM3LjM0MzQgNDMuMjg3MiAzOC4xMDA2IDQyLjQ2NTNMMzkuMDIyNSA0MS40NjQ0TDM5Ljk0MTQgNDIuNDY4M0M0MC42OTAzIDQzLjI4NjMgNDEuNzc3IDQzLjgxNTkgNDMuMDE0NiA0My44MTU5QzQ0LjI0NjcgNDMuODE1OCA0NS4zMzg2IDQzLjI4NTYgNDYuMDg2OSA0Mi40NjgzTDQ3LjAwODggNDEuNDYxNEw0Ny45MzA3IDQyLjQ2ODNDNDguNjc5IDQzLjI4NTcgNDkuNzcwNyA0My44MTU5IDUxLjAwMjkgNDMuODE1OUM1Mi4yMzUxIDQzLjgxNTkgNTMuMzI2OCA0My4yODU3IDU0LjA3NTIgNDIuNDY4M0w1NC45OTcxIDQxLjQ2MTRMNTUuOTE4OSA0Mi40NjgzQzU2LjY2NzMgNDMuMjg1NyA1Ny43NiA0My44MTU5IDU4Ljk5MjIgNDMuODE1OUM1OS4xNzM2IDQzLjgxNTkgNTkuMzY4NyA0My44MDIxIDU5LjU2ODQgNDMuNzc3OEg1OS41Njc0QzYxLjk2MTEgNDMuNDU3MyA2My4yMjkzIDQwLjYwNzggNjEuODYxMyAzOC40NzMxTDYxLjg2MDQgMzguNDc0MUw1OC4zNDM4IDMyLjk5MDdMNTguMzQyOCAzMi45ODc4QzU4LjI2NTMgMzIuODY2NSA1OC4xMDkyIDMyLjc3MzkgNTcuOTMxNiAzMi43NzM5WlwiXHJcbiAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIyLjVcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm10LTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZCBoMyBtdC0yXCI+Tm8gcmVzcG9uc2U8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlRhc2sgYXNzaWduZWQuIEF3YWl0aW5nIHN1Ym1pc3Npb24gZnJvbSB0aGUgc3RvcmUuPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gSGVhZGVyIHN0cmlwICsgMy1jb2x1bW4gY29tcGFyaXNvbjogdmlzaWJsZSB3aGVuIHRhc2sgaXMgaW5wcm9ncmVzcyAvIHN1Ym1pdCwgT1IgZHVyaW5nXHJcbiAgICAgICBhIHJlZG8ncyBvcGVuIHBlcmlvZCAod2UgcmVuZGVyIHRoZSBwcmV2aW91cyByb3VuZCdzIGRhdGEgcmVhZC1vbmx5IHNpbmNlIGNhblNob3dBY3Rpb25zXHJcbiAgICAgICBhbHJlYWR5IGdhdGVzIHRoZSBhY3Rpb24gYnV0dG9ucyBvbiBjaGVja2xpc3RTdGF0dXMgPT09ICdzdWJtaXQnKSAtLT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzWm9uZVRhc2sgJiYgKCFpc1Rhc2tPcGVuIHx8IHpvbmVUYXNrPy5yZWRvU3RhdHVzKVwiPlxyXG5cclxuICAgIDxkaXYgaWQ9XCJmZWVkYmFjay1oYW5kbGVyXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC02IG15LTYgcHgtMyBmaXh0dXJlLW5hdmlnYXRlXCI+XHJcbiAgICAgIDxzdmcgKm5nSWY9XCJzaG93QWN0aW9uXCIgKGNsaWNrKT1cIm9uQ2hhbmdlRml4dHVyZSgncHJldmlvdXMnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICA8cGF0aCBkPVwiTTE1IDZMOSAxMkwxNSAxOFwiIHN0cm9rZT1cIiMxRDI5MzlcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgPC9zdmc+XHJcblxyXG4gICAgICA8aDMgY2xhc3M9XCJtLTBcIj57eyBwbGFub0ZpeHR1cmU/LmhlYWRlcj8ubGFiZWwgfX08L2gzPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgZmxleC13cmFwXCI+XHJcbiAgICAgICAgPHN2ZyB3aWR0aD1cIjVcIiBoZWlnaHQ9XCI1XCIgdmlld0JveD1cIjAgMCA1IDVcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY3g9XCIyLjVcIiBjeT1cIjIuNVwiIHI9XCIyLjVcIiBmaWxsPVwiI0VBRUNGMFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwicGxhbm9GaXh0dXJlPy5maXh0dXJlQ2F0ZWdvcnlcIiBjbGFzcz1cImJhZGdlIGluYWN0aXZlIG1lLTFcIj5cclxuICAgICAgICAgIHt7IHBsYW5vRml4dHVyZS5maXh0dXJlQ2F0ZWdvcnkgfCB0aXRsZWNhc2UgfX1cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiNVwiIHZpZXdCb3g9XCIwIDAgNSA1XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiMi41XCIgY3k9XCIyLjVcIiByPVwiMi41XCIgZmlsbD1cIiNFQUVDRjBcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cInBsYW5vRml4dHVyZT8uZml4dHVyZVdpZHRoPy52YWx1ZVwiIGNsYXNzPVwiYmFkZ2UgaW5hY3RpdmUgbWUtMVwiPlxyXG4gICAgICAgICAge3sgcGxhbm9GaXh0dXJlLmZpeHR1cmVXaWR0aC52YWx1ZSB9fSB7eyBwbGFub0ZpeHR1cmUuZml4dHVyZVdpZHRoPy51bml0ID8/ICdmdCcgfX1cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiNVwiIHZpZXdCb3g9XCIwIDAgNSA1XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiMi41XCIgY3k9XCIyLjVcIiByPVwiMi41XCIgZmlsbD1cIiNFQUVDRjBcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGluYWN0aXZlIG1lLTFcIj5cclxuICAgICAgICAgIEZpeHR1cmUgQ2FwYWNpdHk6IHt7IHBsYW5vRml4dHVyZT8uZml4dHVyZUNhcGFjaXR5IHx8IDAgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGgzICpuZ0lmPVwic2hvd0FjdGlvblwiIGNsYXNzPVwibS0wIG1zLWF1dG9cIj5cclxuICAgICAgICB7eyBjdXJyZW50Rml4dHVyZUluZGV4IH19L3t7IHRvdGFsRml4dHVyZXMubGVuZ3RoIH19XHJcbiAgICAgIDwvaDM+XHJcblxyXG4gICAgICA8c3ZnICpuZ0lmPVwic2hvd0FjdGlvblwiIChjbGljayk9XCJvbkNoYW5nZUZpeHR1cmUoJ25leHQnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICA8cGF0aCBkPVwiTTkgMThMMTUgMTJMOSA2XCIgc3Ryb2tlPVwiIzFEMjkzOVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgaWQ9XCJmaXh0dXJlLWNvbXBhcmlzb25cIiBjbGFzcz1cInJvdyBnLTAgbXktM1wiPlxyXG5cclxuICAgICAgQGlmIChzaG93QWN0aW9uKSB7XHJcbiAgICAgICAgPCEtLSBDb2x1bW4gMTogRXhpc3RpbmcgdGVtcGxhdGUgKGN1cnJlbnQgcGxhbm8pIC0tPlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC00IHAtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICBAaWYgKGNhblNob3dBY3Rpb25zICYmIGhhc0ZpeHR1cmVSZXNwb25zZSkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gcHJpbWFyeS1idG4gbXMtYXV0b1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DbGlja0tlZXBQbGFubygpXCI+XHJcbiAgICAgICAgICAgICAgICBLZWVwIHBsYW5vXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbXktNFwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgZD1cIk0yLjcyNSA1LjgwMDA4TDEwIDEwLjAwODRMMTcuMjc1IDUuODAwMDhNMTAgMTguNDAwMVYxMC4wMDAxTTE3LjUgMTMuMzMzNFY2LjY2Njc1QzE3LjQ5OTcgNi4zNzQ0OCAxNy40MjI1IDYuMDg3NDIgMTcuMjc2MyA1LjgzNDM4QzE3LjEzIDUuNTgxMzQgMTYuOTE5OCA1LjM3MTIyIDE2LjY2NjcgNS4yMjUwOEwxMC44MzMzIDEuODkxNzVDMTAuNTggMS43NDU0NyAxMC4yOTI2IDEuNjY4NDYgMTAgMS42Njg0NkM5LjcwNzQ0IDEuNjY4NDYgOS40MjAwMyAxLjc0NTQ3IDkuMTY2NjcgMS44OTE3NUwzLjMzMzMzIDUuMjI1MDhDMy4wODAyMiA1LjM3MTIyIDIuODY5OTggNS41ODEzNCAyLjcyMzcyIDUuODM0MzhDMi41Nzc0NSA2LjA4NzQyIDIuNTAwMyA2LjM3NDQ4IDIuNSA2LjY2Njc1VjEzLjMzMzRDMi41MDAzIDEzLjYyNTcgMi41Nzc0NSAxMy45MTI3IDIuNzIzNzIgMTQuMTY1OEMyLjg2OTk4IDE0LjQxODggMy4wODAyMiAxNC42Mjg5IDMuMzMzMzMgMTQuNzc1MUw5LjE2NjY3IDE4LjEwODRDOS40MjAwMyAxOC4yNTQ3IDkuNzA3NDQgMTguMzMxNyAxMCAxOC4zMzE3QzEwLjI5MjYgMTguMzMxNyAxMC41OCAxOC4yNTQ3IDEwLjgzMzMgMTguMTA4NEwxNi42NjY3IDE0Ljc3NTFDMTYuOTE5OCAxNC42Mjg5IDE3LjEzIDE0LjQxODggMTcuMjc2MyAxNC4xNjU4QzE3LjQyMjUgMTMuOTEyNyAxNy40OTk3IDEzLjYyNTcgMTcuNSAxMy4zMzM0WlwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtLTBcIj5FeGlzdGluZyB0ZW1wbGF0ZTwvaDQ+XHJcbiAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImlzQXBwcm92ZWQgJiYgY3VycmVudFVzZXJBY3Rpb24gPT09ICdrZWVwUGxhbm8nXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibXMtYXV0b1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxyZWN0IHk9XCI4Ljc0MjI4ZS0wN1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHJ4PVwiMTBcIiBmaWxsPVwiI0QxRkFERlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuMjQ2NCA2LjE1ODM5TDguMjc5NjkgMTEuOTE2N0w2LjY5NjM1IDEwLjIyNTFDNi40MDQ2OSA5Ljk1MDA1IDUuOTQ2MzUgOS45MzMzOSA1LjYxMzAyIDEwLjE2NjdDNS4yODgwMiAxMC40MDg0IDUuMTk2MzUgMTAuODMzNCA1LjM5NjM1IDExLjE3NTFMNy4yNzEzNSAxNC4yMjUxQzcuNDU0NjkgMTQuNTA4NCA3Ljc3MTM1IDE0LjY4MzQgOC4xMjk2OSAxNC42ODM0QzguNDcxMzUgMTQuNjgzNCA4Ljc5NjM1IDE0LjUwODQgOC45Nzk2OSAxNC4yMjUxQzkuMjc5NjkgMTMuODMzNCAxNS4wMDQ3IDcuMDA4MzkgMTUuMDA0NyA3LjAwODM5QzE1Ljc1NDcgNi4yNDE3MiAxNC44NDY0IDUuNTY2NzIgMTQuMjQ2NCA2LjE1MDA1TDE0LjI0NjQgNi4xNTgzOVpcIlxyXG4gICAgICAgICAgICAgICAgICBmaWxsPVwiIzEyQjc2QVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8Zml4dHVyZSBbZml4dHVyZV09XCJwbGFub0ZpeHR1cmVcIiBbc2hvd1ZNc109XCJ0cnVlXCIgW3Nob3dIZWFkZXJGb290ZXJBbHdheXNdPVwidHJ1ZVwiPjwvZml4dHVyZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICA8IS0tIENvbHVtbiAyOiBTdG9yZSByZXNwb25zZSAoem9uZS1ncm91cGVkKSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgcC0yXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICBAaWYgKGlzQ2xGaXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTZcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjk0XCIgaGVpZ2h0PVwiOTRcIiB2aWV3Qm94PVwiMCAwIDk0IDk0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiN1wiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIGZpbGw9XCIjREFGMUZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiN1wiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCIxMy4zMzMzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk0zNS45NTAyIDQ4LjE5OTdDMzUuNjQ4OSA0OC4yMzE1IDM1LjM0MjIgNDguMjUwNSAzNS4wMzEyIDQ4LjI1MDVDMzQuODYxNyA0OC4yNTA1IDM0LjY5NDQgNDguMjQzNiAzNC41MjkzIDQ4LjIzMzlWNTguNjA2OUMzNC41MjkzIDYwLjAzNDkgMzUuNzEyMyA2MS4yMjYgMzcuMjAwMiA2MS4yMjYxSDU2LjgwNDdDNTguMjkyNyA2MS4yMjYxIDU5LjQ3NTYgNjAuMDM1IDU5LjQ3NTYgNTguNjA2OVY0OC4yMzQ5QzU5LjMxMzcgNDguMjQ0MSA1OS4xNDk4IDQ4LjI1MDUgNTguOTg1NCA0OC4yNTA1QzU4LjY3MTQgNDguMjUwNSA1OC4zNjA4IDQ4LjIzMjUgNTguMDU0NyA0OC4xOTk3VjU1Ljk4NzhIMzUuOTUwMlY0OC4xOTk3Wk01Ny45MzE2IDMyLjc3MzlIMzYuMDczMkMzNS44OTU5IDMyLjc3MzkgMzUuNzQwNiAzMi44NjY3IDM1LjY2MzEgMzIuOTg3OEwzNS42NjExIDMyLjk4OTdMMzIuMTUxNCAzOC40NzMxTDMyLjA1NjYgMzguNjIwNkMzMC44MzExIDQwLjc0MDQgMzIuMDk1NyA0My40Njc0IDM0LjQ0NzMgNDMuNzc2OUMzNC42NDgyIDQzLjgwMTMgMzQuODM3OSA0My44MTU5IDM1LjAyNTQgNDMuODE1OUMzNi4yNTU1IDQzLjgxNTkgMzcuMzQzNCA0My4yODcyIDM4LjEwMDYgNDIuNDY1M0wzOS4wMjI1IDQxLjQ2NDRMMzkuOTQxNCA0Mi40NjgzQzQwLjY5MDMgNDMuMjg2MyA0MS43NzcgNDMuODE1OSA0My4wMTQ2IDQzLjgxNTlDNDQuMjQ2NyA0My44MTU4IDQ1LjMzODYgNDMuMjg1NiA0Ni4wODY5IDQyLjQ2ODNMNDcuMDA4OCA0MS40NjE0TDQ3LjkzMDcgNDIuNDY4M0M0OC42NzkgNDMuMjg1NyA0OS43NzA3IDQzLjgxNTkgNTEuMDAyOSA0My44MTU5QzUyLjIzNTEgNDMuODE1OSA1My4zMjY4IDQzLjI4NTcgNTQuMDc1MiA0Mi40NjgzTDU0Ljk5NzEgNDEuNDYxNEw1NS45MTg5IDQyLjQ2ODNDNTYuNjY3MyA0My4yODU3IDU3Ljc2IDQzLjgxNTkgNTguOTkyMiA0My44MTU5QzU5LjE3MzYgNDMuODE1OSA1OS4zNjg3IDQzLjgwMjEgNTkuNTY4NCA0My43Nzc4SDU5LjU2NzRDNjEuOTYxMSA0My40NTczIDYzLjIyOTMgNDAuNjA3OCA2MS44NjEzIDM4LjQ3MzFMNjEuODYwNCAzOC40NzQxTDU4LjM0MzggMzIuOTkwN0w1OC4zNDI4IDMyLjk4NzhDNTguMjY1MyAzMi44NjY1IDU4LjEwOTIgMzIuNzczOSA1Ny45MzE2IDMyLjc3MzlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIyLjVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGQgaDMgbXQtMlwiPkNMIEV4Y2x1ZGVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgQGlmIChjYW5TaG93QWN0aW9ucyAmJiBoYXNGaXh0dXJlUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImJ0biBxdWljay1idG4gbXMtYXV0b1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DbGlja0VkaXRSZXNwb25zZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkuMTY2MDIgMy4zMzMySDMuMzMyNjhDMi44OTA2NSAzLjMzMzIgMi40NjY3MyAzLjUwODc5IDIuMTU0MTcgMy44MjEzNUMxLjg0MTYxIDQuMTMzOTEgMS42NjYwMiA0LjU1Nzg0IDEuNjY2MDIgNC45OTk4NlYxNi42NjY1QzEuNjY2MDIgMTcuMTA4NiAxLjg0MTYxIDE3LjUzMjUgMi4xNTQxNyAxNy44NDVDMi40NjY3MyAxOC4xNTc2IDIuODkwNjUgMTguMzMzMiAzLjMzMjY4IDE4LjMzMzJIMTQuOTk5M0MxNS40NDE0IDE4LjMzMzIgMTUuODY1MyAxOC4xNTc2IDE2LjE3NzkgMTcuODQ1QzE2LjQ5MDQgMTcuNTMyNSAxNi42NjYgMTcuMTA4NiAxNi42NjYgMTYuNjY2NVYxMC44MzMyTTE1LjQxNiAyLjA4MzJDMTUuNzQ3NSAxLjc1MTY4IDE2LjE5NzIgMS41NjU0MyAxNi42NjYgMS41NjU0M0MxNy4xMzQ5IDEuNTY1NDMgMTcuNTg0NSAxLjc1MTY4IDE3LjkxNiAyLjA4MzJDMTguMjQ3NSAyLjQxNDcyIDE4LjQzMzggMi44NjQzNiAxOC40MzM4IDMuMzMzMkMxOC40MzM4IDMuODAyMDQgMTguMjQ3NSA0LjI1MTY4IDE3LjkxNiA0LjU4MzJMOS45OTkzNSAxMi40OTk5TDYuNjY2MDIgMTMuMzMzMkw3LjQ5OTM1IDkuOTk5ODZMMTUuNDE2IDIuMDgzMlpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMUQyOTM5XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biByZWRvLWJ0blwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25DbGlja1JlZG8oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFJlZG9cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtY3VzIG1zLWF1dG9cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2xpY2tLZWVwUGxhbm8oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFJlamVjdFxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBwcmltYXJ5LWJ0blwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZWRpdGFibGVGaXh0dXJlPy5pc1ZhbGlkXCJcclxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZWRpdGFibGVGaXh0dXJlPy52YWxpZGF0aW9uTWVzc2FnZSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tBY2NlcHRSZXNwb25zZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQWNjZXB0XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBteS00XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE1LjY1MDQgMTQuNjE5MUg0LjM0ODYzVjEwLjczNzNDNC4yMzgyNiAxMC43NDU1IDQuMTI2NDQgMTAuNzUgNC4wMTM2NyAxMC43NUMzLjk3MTM3IDEwLjc1IDMuOTI5NDMgMTAuNzQ2MyAzLjg4NzcgMTAuNzQ1MVYxNS44MDM3QzMuODg3ODggMTYuNDQ3IDQuNDIyMjIgMTYuOTg4MyA1LjA5ODYzIDE2Ljk4ODNIMTQuOTAwNEMxNS41NzY4IDE2Ljk4ODMgMTYuMTEwMiAxNi40NDcgMTYuMTEwNCAxNS44MDM3VjEwLjc0NTFDMTYuMDcwOCAxMC43NDYyIDE2LjAzMTEgMTAuNzUgMTUuOTkxMiAxMC43NUMxNS44NzY4IDEwLjc1IDE1Ljc2MjkgMTAuNzQ0OSAxNS42NTA0IDEwLjczNjNWMTQuNjE5MVpNMTUuNDYzOSAzLjAxMTcySDQuNTM0MThDNC40ODcyMyAzLjAxMTg3IDQuNDQ5NzMgMy4wMzc3NiA0LjQzNDU3IDMuMDYxNTJWMy4wNjI1TDIuNjc4NzEgNS44MDM3MUwyLjY2MDE2IDUuODMzMDFDMi4wNDc2OCA2LjgyNzg2IDIuNjQzMjUgOC4xMTczOSAzLjczNDM4IDguMjYzNjdDMy44MzE3NCA4LjI3NTYxIDMuOTIyMjQgOC4yODIyMiA0LjAxMDc0IDguMjgyMjNDNC41ODg4OSA4LjI4MjIzIDUuMDk5NzggOC4wMzQxOSA1LjQ1NjA1IDcuNjQ3NDZMNi4wMDk3NyA3LjA0Njg4TDYuNTYxNTIgNy42NDk0MUM2LjkxMzQxIDguMDMzNzEgNy40MjMwMSA4LjI4MjE1IDguMDA0ODggOC4yODIyM0M4LjU4NDMzIDguMjgyMjMgOS4wOTc1OSA4LjAzMzQ5IDkuNDQ5MjIgNy42NDk0MUwxMC4wMDIgNy4wNDQ5MkwxMC41NTU3IDcuNjQ5NDFDMTAuOTA3MyA4LjAzMzQ5IDExLjQyMDYgOC4yODIyMyAxMiA4LjI4MjIzQzEyLjU3OTIgOC4yODIxIDEzLjA5MTggOC4wMzMzNyAxMy40NDM0IDcuNjQ5NDFMMTMuOTk3MSA3LjA0NDkyTDE0LjU0OTggNy42NDk0MUMxNC45MDE0IDguMDMzNDkgMTUuNDE0NyA4LjI4MjIzIDE1Ljk5NDEgOC4yODIyM0MxNi4wNzkxIDguMjgyMjIgMTYuMTcxNiA4LjI3NTMzIDE2LjI2NzYgOC4yNjM2N0MxNy4zNjM1IDguMTE1MDQgMTcuOTYyMyA2LjgwMDggMTcuMzIzMiA1LjgwMzcxTDE1LjU2NDUgMy4wNjI1TDE1LjU2MzUgMy4wNjE1MkMxNS41NDgzIDMuMDM3NjkgMTUuNTExIDMuMDExNzIgMTUuNDYzOSAzLjAxMTcyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDxoND5TdG9yZSByZXNwb25zZTwvaDQ+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaGFzRml4dHVyZVJlc3BvbnNlXCIgY2xhc3M9XCJiYWRnZSBpbmFjdGl2ZSBtZS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQ2FwYWNpdHk6IHt7IHpvbmVGaXh0dXJlPy5maXh0dXJlQ2FwYWNpdHkgfHwgMCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzQXBwcm92ZWQgJiYgKGN1cnJlbnRVc2VyQWN0aW9uID09PSAnYWNjZXB0UmVzcG9uc2UnIHx8IGN1cnJlbnRVc2VyQWN0aW9uID09PSAnZWRpdEFjY2VwdGVkJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXMtYXV0b1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHk9XCI4Ljc0MjI4ZS0wN1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHJ4PVwiMTBcIiBmaWxsPVwiI0QxRkFERlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNC4yNDY0IDYuMTU4MzlMOC4yNzk2OSAxMS45MTY3TDYuNjk2MzUgMTAuMjI1MUM2LjQwNDY5IDkuOTUwMDUgNS45NDYzNSA5LjkzMzM5IDUuNjEzMDIgMTAuMTY2N0M1LjI4ODAyIDEwLjQwODQgNS4xOTYzNSAxMC44MzM0IDUuMzk2MzUgMTEuMTc1MUw3LjI3MTM1IDE0LjIyNTFDNy40NTQ2OSAxNC41MDg0IDcuNzcxMzUgMTQuNjgzNCA4LjEyOTY5IDE0LjY4MzRDOC40NzEzNSAxNC42ODM0IDguNzk2MzUgMTQuNTA4NCA4Ljk3OTY5IDE0LjIyNTFDOS4yNzk2OSAxMy44MzM0IDE1LjAwNDcgNy4wMDgzOSAxNS4wMDQ3IDcuMDA4MzlDMTUuNzU0NyA2LjI0MTcyIDE0Ljg0NjQgNS41NjY3MiAxNC4yNDY0IDYuMTUwMDVMMTQuMjQ2NCA2LjE1ODM5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzEyQjc2QVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImlzQXBwcm92ZWQgJiYgKGN1cnJlbnRVc2VyQWN0aW9uID09PSAna2VlcFBsYW5vJylcIiBjbGFzcz1cIm1zLWF1dG9cIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgcng9XCIxMFwiIGZpbGw9XCIjRkVFNEUyXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjIyNSA2LjIyNUM2LjU2NjY3IDUuODgzMzMgNy4xMTY2NyA1Ljg4MzMzIDcuNDU4MzMgNi4yMjVMMTAgOC43NjY2N0wxMi41NDE3IDYuMjI1QzEyLjg4MzMgNS44ODMzMyAxMy40MzMzIDUuODgzMzMgMTMuNzc1IDYuMjI1QzE0LjExNjcgNi41NjY2NyAxNC4xMTY3IDcuMTE2NjcgMTMuNzc1IDcuNDU4MzNMMTEuMjMzMyAxMEwxMy43NzUgMTIuNTQxN0MxNC4xMTY3IDEyLjg4MzMgMTQuMTE2NyAxMy40MzMzIDEzLjc3NSAxMy43NzVDMTMuNDMzMyAxNC4xMTY3IDEyLjg4MzMgMTQuMTE2NyAxMi41NDE3IDEzLjc3NUwxMCAxMS4yMzMzTDcuNDU4MzMgMTMuNzc1QzcuMTE2NjcgMTQuMTE2NyA2LjU2NjY3IDE0LjExNjcgNi4yMjUgMTMuNzc1QzUuODgzMzMgMTMuNDMzMyA1Ljg4MzMzIDEyLjg4MzMgNi4yMjUgMTIuNTQxN0w4Ljc2NjY3IDEwTDYuMjI1IDcuNDU4MzNDNS44ODMzMyA3LjExNjY3IDUuODgzMzMgNi41NjY2NyA2LjIyNSA2LjIyNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGMDQ0MzhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImN1cnJlbnRVc2VyQWN0aW9uID09PSAncmVkbydcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXMtYXV0b1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMjUwNjUgMTUuODMzNUM2LjkwMzQzIDE1LjgzMzUgNS43NDcwNCAxNS4zOTYgNC43ODE0OCAxNC41MjFDMy44MTU5MyAxMy42NDYgMy4zMzM0MyAxMi41NTU3IDMuMzMzOTggMTEuMjUwMkMzLjMzMzk4IDkuOTQ0NjEgMy44MTY3NiA4Ljg1NDMzIDQuNzgyMzIgNy45NzkzM0M1Ljc0Nzg3IDcuMTA0MzMgNi45MDM5OCA2LjY2NjgzIDguMjUwNjUgNi42NjY4M0gxMy41MDA3TDExLjMzNCA0LjUwMDE2TDEyLjUwMDcgMy4zMzM1TDE2LjY2NzMgNy41MDAxNkwxMi41MDA3IDExLjY2NjhMMTEuMzM0IDEwLjUwMDJMMTMuNTAwNyA4LjMzMzVIOC4yNTA2NUM3LjM3NTY1IDguMzMzNSA2LjYxNTEgOC42MTEyNyA1Ljk2ODk4IDkuMTY2ODNDNS4zMjI4NyA5LjcyMjM4IDUuMDAwMSAxMC40MTY4IDUuMDAwNjUgMTEuMjUwMkM1LjAwMDY1IDEyLjA4MzUgNS4zMjM3MSAxMi43Nzc5IDUuOTY5ODIgMTMuMzMzNUM2LjYxNTkzIDEzLjg4OTEgNy4zNzYyMSAxNC4xNjY4IDguMjUwNjUgMTQuMTY2OEgxNC4xNjczVjE1LjgzMzVIOC4yNTA2NVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImJsYWNrXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICBAaWYgKGhhc0ZpeHR1cmVSZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgPHpvbmUtZWRpdGFibGUtZml4dHVyZVxyXG4gICAgICAgICAgICAgICAgICBbZml4dHVyZV09XCJ6b25lRml4dHVyZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtwbGFub0ZpeHR1cmVdPVwicGxhbm9GaXh0dXJlXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dWTXNdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0hlYWRlckZvb3RlckFsd2F5c109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW2VkaXRhYmxlXT1cImNhblNob3dBY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8L3pvbmUtZWRpdGFibGUtZml4dHVyZT5cclxuICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS02XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiOTRcIiBoZWlnaHQ9XCI5NFwiIHZpZXdCb3g9XCIwIDAgOTQgOTRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjdcIiB5PVwiN1wiIHdpZHRoPVwiODBcIiBoZWlnaHQ9XCI4MFwiIHJ4PVwiNDBcIiBmaWxsPVwiI0RBRjFGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiN1wiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCIxMy4zMzMzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMzUuOTUwMiA0OC4xOTk3QzM1LjY0ODkgNDguMjMxNSAzNS4zNDIyIDQ4LjI1MDUgMzUuMDMxMiA0OC4yNTA1QzM0Ljg2MTcgNDguMjUwNSAzNC42OTQ0IDQ4LjI0MzYgMzQuNTI5MyA0OC4yMzM5VjU4LjYwNjlDMzQuNTI5MyA2MC4wMzQ5IDM1LjcxMjMgNjEuMjI2IDM3LjIwMDIgNjEuMjI2MUg1Ni44MDQ3QzU4LjI5MjcgNjEuMjI2MSA1OS40NzU2IDYwLjAzNSA1OS40NzU2IDU4LjYwNjlWNDguMjM0OUM1OS4zMTM3IDQ4LjI0NDEgNTkuMTQ5OCA0OC4yNTA1IDU4Ljk4NTQgNDguMjUwNUM1OC42NzE0IDQ4LjI1MDUgNTguMzYwOCA0OC4yMzI1IDU4LjA1NDcgNDguMTk5N1Y1NS45ODc4SDM1Ljk1MDJWNDguMTk5N1pNNTcuOTMxNiAzMi43NzM5SDM2LjA3MzJDMzUuODk1OSAzMi43NzM5IDM1Ljc0MDYgMzIuODY2NyAzNS42NjMxIDMyLjk4NzhMMzUuNjYxMSAzMi45ODk3TDMyLjE1MTQgMzguNDczMUwzMi4wNTY2IDM4LjYyMDZDMzAuODMxMSA0MC43NDA0IDMyLjA5NTcgNDMuNDY3NCAzNC40NDczIDQzLjc3NjlDMzQuNjQ4MiA0My44MDEzIDM0LjgzNzkgNDMuODE1OSAzNS4wMjU0IDQzLjgxNTlDMzYuMjU1NSA0My44MTU5IDM3LjM0MzQgNDMuMjg3MiAzOC4xMDA2IDQyLjQ2NTNMMzkuMDIyNSA0MS40NjQ0TDM5Ljk0MTQgNDIuNDY4M0M0MC42OTAzIDQzLjI4NjMgNDEuNzc3IDQzLjgxNTkgNDMuMDE0NiA0My44MTU5QzQ0LjI0NjcgNDMuODE1OCA0NS4zMzg2IDQzLjI4NTYgNDYuMDg2OSA0Mi40NjgzTDQ3LjAwODggNDEuNDYxNEw0Ny45MzA3IDQyLjQ2ODNDNDguNjc5IDQzLjI4NTcgNDkuNzcwNyA0My44MTU5IDUxLjAwMjkgNDMuODE1OUM1Mi4yMzUxIDQzLjgxNTkgNTMuMzI2OCA0My4yODU3IDU0LjA3NTIgNDIuNDY4M0w1NC45OTcxIDQxLjQ2MTRMNTUuOTE4OSA0Mi40NjgzQzU2LjY2NzMgNDMuMjg1NyA1Ny43NiA0My44MTU5IDU4Ljk5MjIgNDMuODE1OUM1OS4xNzM2IDQzLjgxNTkgNTkuMzY4NyA0My44MDIxIDU5LjU2ODQgNDMuNzc3OEg1OS41Njc0QzYxLjk2MTEgNDMuNDU3MyA2My4yMjkzIDQwLjYwNzggNjEuODYxMyAzOC40NzMxTDYxLjg2MDQgMzguNDc0MUw1OC4zNDM4IDMyLjk5MDdMNTguMzQyOCAzMi45ODc4QzU4LjI2NTMgMzIuODY2NSA1OC4xMDkyIDMyLjc3MzkgNTcuOTMxNiAzMi43NzM5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIyLjVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pk5vIHJlc3BvbnNlIGZvciB0aGlzIGZpeHR1cmUgeWV0LjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDwhLS0gQ29sdW1uIDM6IFN0b3JlIGltYWdlIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicC0yXCIgW25nQ2xhc3NdPVwieydjb2wtNic6IHNob3dBY3Rpb24sICdjb2wnOiAhc2hvd0FjdGlvbn1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTRcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOicxMnB4J31cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbXktNFwiPlxyXG4gICAgICAgICAgICAgIDxoND5TdG9yZSBJbWFnZTwvaDQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICBAaWYgKHpvbmVJbWFnZVVybCkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZml4dHVyZS1pbWFnZVwiIChjbGljayk9XCJvbkNsaWNrSW1hZ2VQcmV2aWV3KCRldmVudCwgem9uZUltYWdlVXJsKVwiPlxyXG4gICAgICAgICAgICAgIEBpZiAoaXNJbWFnZUxvYWRpbmcpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza2VsZXRvbkxvYWRlclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiem9uZUltYWdlVXJsXCIgYWx0PVwiU3RvcmUgcmVzcG9uc2UgaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwiaXNJbWFnZUxvYWRpbmcgPyAnbm9uZScgOiAnYmxvY2snXCIgKGxvYWRzdGFydCk9XCJvbkltYWdlTG9hZFN0YXJ0KClcIlxyXG4gICAgICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQoKVwiIChlcnJvcik9XCJvbkltYWdlRXJyb3IoKVwiIChsb2FkZW5kKT1cIm9uSW1hZ2VMb2FkRW5kKClcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWctcHJldmlld1wiICpuZ0lmPVwic2VsZWN0ZWRJbWFnZUZvclByZXZpZXdcIiAoY2xpY2spPVwiY2xvc2VJbWFnZVByZXZpZXcoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByZXZpZXctY2xvc2VcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBjbG9zZUltYWdlUHJldmlldygpXCI+JiN4MjcxNTs8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LXpvb20tY29udHJvbHNcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uUHJldmlld1pvb21PdXQoKVwiPiYjeDIyMTI7PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBjbGFzcz1cInpvb20tc2xpZGVyXCIgbWluPVwiMjVcIiBtYXg9XCI1MDBcIiBzdGVwPVwiMjVcIiBbdmFsdWVdPVwiaW1hZ2VQcmV2aWV3Wm9vbSAqIDEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uUHJldmlld1pvb21TbGlkZXIoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IChpbWFnZVByZXZpZXdab29tICogMTAwKS50b0ZpeGVkKDApIH19JTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib25QcmV2aWV3Wm9vbUluKClcIj4mI3gyQjs8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctaW1hZ2UtY29udGFpbmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25QcmV2aWV3UGFuU3RhcnQoJGV2ZW50KVwiIChtb3VzZW1vdmUpPVwib25QcmV2aWV3UGFuTW92ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKG1vdXNldXApPVwib25QcmV2aWV3UGFuRW5kKClcIiAobW91c2VsZWF2ZSk9XCJvblByZXZpZXdQYW5FbmQoKVwiICh3aGVlbCk9XCJvblByZXZpZXdXaGVlbCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJzZWxlY3RlZEltYWdlRm9yUHJldmlld1wiIGNsYXNzPVwiZnVsbC1pbWdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3NjYWxlKCcgKyBpbWFnZVByZXZpZXdab29tICsgJykgdHJhbnNsYXRlKCcgKyBpbWFnZVByZXZpZXdQYW5YIC8gaW1hZ2VQcmV2aWV3Wm9vbSArICdweCwnICsgaW1hZ2VQcmV2aWV3UGFuWSAvIGltYWdlUHJldmlld1pvb20gKyAncHgpJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlPVwiZmFsc2VcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS02XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE4NlwiIGhlaWdodD1cIjg0XCIgdmlld0JveD1cIjAgMCAxODYgODRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMzAuMjU2IDE1LjMyODRDMTQwLjA5MiAxNS4zMjg0IDE0OC4wNjUgMjMuMzAyIDE0OC4wNjUgMzMuMTM3OUMxNDguMDY1IDM3LjIxNzYgMTUwLjgyNiA0MS44Njg0IDE1NC45MDYgNDEuODY4NEgxNjcuOTcyQzE3Ny44MDcgNDEuODY4NyAxODUuNzgxIDQ5Ljg0MjIgMTg1Ljc4MSA1OS42NzhDMTg1Ljc4MSA2OS41MTQxIDE3Ny44MDcgNzcuNDg4NSAxNjcuOTcxIDc3LjQ4ODVIODEuMzY2MkM2OS43MTg2IDc3LjQ4ODMgNTguNjM0OSA2OC40MDg0IDQ2Ljk4NzMgNjguNDA4NEg1LjkzNjUyQzIuNjU3ODIgNjguNDA4NCAwIDY1Ljc1MDYgMCA2Mi40NzE5QzAuMDAwMTI3ODIzIDU5LjE5MzMgMi42NTc5IDU2LjUzNTQgNS45MzY1MiA1Ni41MzU0SDYxLjg3MjhDNjMuMDA2OSA1Ni41MzU0IDYzLjk2NjkgNTUuNjkyOSA2NC4yODk3IDU0LjYwNTZDNjQuNzk5NCA1Mi44ODkyIDYzLjYyNjcgNTAuOTQ4NSA2MS44MzYxIDUwLjk0ODVINDMuNjUxNEMzMy44MTUzIDUwLjk0ODUgMjUuODQxOCA0Mi45NzQgMjUuODQxOCAzMy4xMzc5QzI1Ljg0MiAyMy4zMDIgMzMuODE1NCAxNS4zMjg0IDQzLjY1MTQgMTUuMzI4NEgxMzAuMjU2WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0VBRUNGMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTI2LjY2NCAyNy4zMzVWNDguNjVMMTIwLjk1OSA0My43NUMxMTguMjI5IDQxLjQwNSAxMTMuODE5IDQxLjQwNSAxMTEuMDg5IDQzLjc1TDk2LjUyOTEgNTYuMjQ1QzkzLjc5OTEgNTguNTkgODkuMzg5MSA1OC41OSA4Ni42NTkxIDU2LjI0NUw4NS40NjkxIDU1LjI2NUM4Mi45ODQxIDUzLjA5NSA3OS4wMjkxIDUyLjg4NSA3Ni4yMjkxIDU0Ljc3NUw1OS4wMDkxIDY2LjMyNUw1OC42MjQxIDY2LjYwNUM1Ny4zMjkxIDYzLjgwNSA1Ni42NjQxIDYwLjQ4IDU2LjY2NDEgNTYuNjY1VjI3LjMzNUM1Ni42NjQxIDE0LjU5NSA2NC4yNTkxIDcgNzYuOTk5MSA3SDEwNi4zMjlDMTE5LjA2OSA3IDEyNi42NjQgMTQuNTk1IDEyNi42NjQgMjcuMzM1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzZCQ0FGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNODEuMTY0IDM2LjMyOTlDODUuNzY0NSAzNi4zMjk5IDg5LjQ5NCAzMi42MDA1IDg5LjQ5NCAyNy45OTk5Qzg5LjQ5NCAyMy4zOTk0IDg1Ljc2NDUgMTkuNjY5OSA4MS4xNjQgMTkuNjY5OUM3Ni41NjM1IDE5LjY2OTkgNzIuODM0IDIzLjM5OTQgNzIuODM0IDI3Ljk5OTlDNzIuODM0IDMyLjYwMDUgNzYuNTYzNSAzNi4zMjk5IDgxLjE2NCAzNi4zMjk5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzAwQTNGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTI2LjY2NSA0OC42NVY1Ni42NjVDMTI2LjY2NSA2OS40MDUgMTE5LjA3IDc3IDEwNi4zMyA3N0g3N0M2OC4wNzUgNzcgNjEuNjM1IDczLjI1NSA1OC42MjUgNjYuNjA1TDU5LjAxIDY2LjMyNUw3Ni4yMyA1NC43NzVDNzkuMDMgNTIuODg1IDgyLjk4NSA1My4wOTUgODUuNDcgNTUuMjY1TDg2LjY2IDU2LjI0NUM4OS4zOSA1OC41OSA5My44IDU4LjU5IDk2LjUzIDU2LjI0NUwxMTEuMDkgNDMuNzVDMTEzLjgyIDQxLjQwNSAxMTguMjMgNDEuNDA1IDEyMC45NiA0My43NUwxMjYuNjY1IDQ4LjY1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzAwQTNGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEzOC4wNjRcIiBjeT1cIjI4LjMxMjhcIiByPVwiNC40MDA0MlwiIGZpbGw9XCIjNkJDQUZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiNDcuODI1NlwiIGN5PVwiMzkuMjQwOVwiIHI9XCIyLjQ1MjU1XCIgZmlsbD1cIiM2QkNBRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxlbGxpcHNlIGN4PVwiMTM5LjE4M1wiIGN5PVwiNjEuMDA3MlwiIHJ4PVwiNC4yOTE5N1wiIHJ5PVwiNC41OTg1NFwiIGZpbGw9XCIjMDBBM0ZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIEBpZiAoem9uZUZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/LmNvbW1lbnRzPy5sZW5ndGgpIHtcclxuICAgICAgPGRpdiBpZD1cImZpeHR1cmUtY29tbWVudHNcIj5cclxuICAgICAgICA8aDUgY2xhc3M9XCJtYi0yXCI+Q29tbWVudHM8L2g1PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9nLWJsb2NrXCIgKm5nRm9yPVwibGV0IGMgb2Ygem9uZUZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/LmNvbW1lbnRzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMlwiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgcng9XCIxNlwiIGZpbGw9XCIjRUFGOEZGXCIgLz5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTIyLjY2NzMgMjMuNVYyMS44MzMzQzIyLjY2NzMgMjAuOTQ5MyAyMi4zMTYxIDIwLjEwMTQgMjEuNjkxIDE5LjQ3NjNDMjEuMDY1OSAxOC44NTEyIDIwLjIxOCAxOC41IDE5LjMzNCAxOC41SDEyLjY2NzNDMTEuNzgzMyAxOC41IDEwLjkzNTQgMTguODUxMiAxMC4zMTAzIDE5LjQ3NjNDOS42ODUxNyAyMC4xMDE0IDkuMzMzOTggMjAuOTQ5MyA5LjMzMzk4IDIxLjgzMzNWMjMuNU0xOS4zMzQgMTEuODMzM0MxOS4zMzQgMTMuNjc0MyAxNy44NDE2IDE1LjE2NjcgMTYuMDAwNyAxNS4xNjY3QzE0LjE1OTcgMTUuMTY2NyAxMi42NjczIDEzLjY3NDMgMTIuNjY3MyAxMS44MzMzQzEyLjY2NzMgOS45OTIzOCAxNC4xNTk3IDguNSAxNi4wMDA3IDguNUMxNy44NDE2IDguNSAxOS4zMzQgOS45OTIzOCAxOS4zMzQgMTEuODMzM1pcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTEgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMSBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgIDxoND57eyBjPy51c2VyTmFtZSB9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgPHA+e3sgYz8udGltZVN0YW1wIHwgZGF0ZTonaGg6bW06c3MgYSAtIGRkIE1NTSB5eXl5JyB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICBAaWYgKGM/LnJlc3BvbnNldHlwZSA9PT0gJ2NvbW1lbnQnKSB7XHJcbiAgICAgICAgICAgICAgPGg1Pnt7IGM/LmNvbW1lbnQgfX08L2g1PlxyXG4gICAgICAgICAgICB9IEBlbHNlIGlmIChjPy5yZXNwb25zZXR5cGUgPT09ICdhZ3JlZScpIHtcclxuICAgICAgICAgICAgICA8aDUgKm5nSWY9XCJ6b25lRmVlZGJhY2s/LmFuc3dlcnM/LlswXT8udXNlckFjdGlvbiA9PT0gJ2tlZXBQbGFubydcIj5cclxuICAgICAgICAgICAgICAgIE1hcmtlZCBhcyBcIktlZXAgUGxhbm9cIi5cclxuICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgIDxoNSAqbmdJZj1cInpvbmVGZWVkYmFjaz8uYW5zd2Vycz8uWzBdPy51c2VyQWN0aW9uID09PSAnYWNjZXB0UmVzcG9uc2UnXCI+XHJcbiAgICAgICAgICAgICAgICBNYXJrZWQgYXMgXCJBY2NlcHQgUmVzcG9uc2VcIi5cclxuICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgIDxoNSAqbmdJZj1cInpvbmVGZWVkYmFjaz8uYW5zd2Vycz8uWzBdPy51c2VyQWN0aW9uID09PSAnZWRpdEFjY2VwdGVkJ1wiPlxyXG4gICAgICAgICAgICAgICAgTWFya2VkIGFzIFwiQWNjZXB0IFJlc3BvbnNlIHdpdGggTW9kaWZpY2F0aW9uXCIuXHJcbiAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICA8aDUgKm5nSWY9XCJjPy5jb21tZW50XCI+Tm90ZToge3sgYy5jb21tZW50IH19PC9oNT5cclxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoYz8ucmVzcG9uc2V0eXBlID09PSAnZGlzYWdyZWUnKSB7XHJcbiAgICAgICAgICAgICAgPGg1Pk1hcmtlZCBhcyBcIlJlZG9cIjwvaDU+XHJcbiAgICAgICAgICAgICAgPGg1ICpuZ0lmPVwiYz8uY29tbWVudFwiPk5vdGU6IHt7IGMuY29tbWVudCB9fTwvaDU+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNza2VsZXRvbkxvYWRlcj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXIgcm91bmRlZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L3NlY3Rpb24+Il19
|