tango-app-ui-manage-settings 3.7.27 → 3.7.29
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/action-popup/action-popup.component.mjs +11 -5
- package/esm2022/lib/components/activity-logs/activity-logs.component.mjs +3 -3
- package/esm2022/lib/components/configurations/configurations.component.mjs +19 -17
- package/esm2022/lib/components/configurations/edge-app-configuration/edge-app-configuration.component.mjs +162 -0
- package/esm2022/lib/components/configurations/footfall-configuration/footfall-configuration.component.mjs +3 -3
- package/esm2022/lib/components/configurations/report-configuration/custom-report-schedule/custom-report-schedule.component.mjs +345 -0
- package/esm2022/lib/components/configurations/report-configuration/report-configuration.component.mjs +71 -3
- package/esm2022/lib/services/client-api.service.mjs +29 -1
- package/esm2022/lib/tango-manage-settings.module.mjs +7 -1
- package/fesm2022/tango-app-ui-manage-settings.mjs +625 -27
- package/fesm2022/tango-app-ui-manage-settings.mjs.map +1 -1
- package/lib/components/action-popup/action-popup.component.d.ts +3 -1
- package/lib/components/activity-logs/activity-logs.component.d.ts +1 -1
- package/lib/components/configurations/edge-app-configuration/edge-app-configuration.component.d.ts +42 -0
- package/lib/components/configurations/report-configuration/custom-report-schedule/custom-report-schedule.component.d.ts +66 -0
- package/lib/components/configurations/report-configuration/report-configuration.component.d.ts +10 -0
- package/lib/components/contact-directory/contact-directory.component.d.ts +1 -1
- package/lib/components/payments-subscription/billing/billing-group-form/billing-group-form.component.d.ts +1 -1
- package/lib/components/payments-subscription/billing/billing.component.d.ts +1 -1
- package/lib/components/payments-subscription/invoice-credits/invoice-credits.component.d.ts +2 -2
- package/lib/components/tango-manage-settings/tango-manage-settings.component.d.ts +1 -1
- package/lib/services/client-api.service.d.ts +16 -0
- package/lib/tango-manage-settings.module.d.ts +62 -60
- package/package.json +1 -1
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import * as i1 from "@ng-bootstrap/ng-bootstrap";
|
|
4
4
|
export class ActionPopupComponent {
|
|
5
5
|
activeModal;
|
|
6
|
+
title = 'Delete User?';
|
|
7
|
+
message = 'Are you sure you want to delete this user? This action cannot be undone.';
|
|
6
8
|
constructor(activeModal) {
|
|
7
9
|
this.activeModal = activeModal;
|
|
8
10
|
}
|
|
@@ -13,10 +15,14 @@ export class ActionPopupComponent {
|
|
|
13
15
|
this.activeModal.close('submit');
|
|
14
16
|
}
|
|
15
17
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActionPopupComponent, deps: [{ token: i1.NgbActiveModal }], target: i0.ɵɵFactoryTarget.Component });
|
|
16
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ActionPopupComponent, selector: "lib-action-popup", ngImport: i0, template: "<div class=\"card group-delete py-0\">\r\n <div class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#FEE4E2\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#FEF3F2\" stroke-width=\"8\"/>\r\n <path d=\"M28 24V28M28 32H28.01M38 28C38 33.5228 33.5228 38 28 38C22.4772 38 18 33.5228 18 28C18 22.4772 22.4772 18 28 18C33.5228 18 38 22.4772 38 28Z\" stroke=\"#D92D20\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n </div>\r\n </div>\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">
|
|
18
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ActionPopupComponent, selector: "lib-action-popup", inputs: { title: "title", message: "message" }, ngImport: i0, template: "<div class=\"card group-delete py-0\">\r\n <div class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#FEE4E2\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#FEF3F2\" stroke-width=\"8\"/>\r\n <path d=\"M28 24V28M28 32H28.01M38 28C38 33.5228 33.5228 38 28 38C22.4772 38 18 33.5228 18 28C18 22.4772 22.4772 18 28 18C33.5228 18 38 22.4772 38 28Z\" stroke=\"#D92D20\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n </div>\r\n </div>\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">{{ title }}</a>\r\n <span class=\"sub-title fw-normal mt-2\">{{ message }}</span>\r\n\r\n <div class=\"mt-5 w-100\">\r\n <div role=\"group\" class=\"d-flex mt-3 mb-15\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button id=\"alert-toast\" class=\"btn btn-danger w-100 ms-3\" (click)=\"onSubmit()\">Delete</button> \r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>", styles: [".sub-title{font-size:14px!important}\n"] });
|
|
17
19
|
}
|
|
18
20
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActionPopupComponent, decorators: [{
|
|
19
21
|
type: Component,
|
|
20
|
-
args: [{ selector: 'lib-action-popup', template: "<div class=\"card group-delete py-0\">\r\n <div class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#FEE4E2\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#FEF3F2\" stroke-width=\"8\"/>\r\n <path d=\"M28 24V28M28 32H28.01M38 28C38 33.5228 33.5228 38 28 38C22.4772 38 18 33.5228 18 28C18 22.4772 22.4772 18 28 18C33.5228 18 38 22.4772 38 28Z\" stroke=\"#D92D20\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n </div>\r\n </div>\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">
|
|
21
|
-
}], ctorParameters: () => [{ type: i1.NgbActiveModal }]
|
|
22
|
-
|
|
22
|
+
args: [{ selector: 'lib-action-popup', template: "<div class=\"card group-delete py-0\">\r\n <div class=\"card-body py-0 d-flex flex-start flex-column p-9 \">\r\n <div class=\"my-5\">\r\n <div class=\"symbol symbol-75px symbol-circle\">\r\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#FEE4E2\"/>\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#FEF3F2\" stroke-width=\"8\"/>\r\n <path d=\"M28 24V28M28 32H28.01M38 28C38 33.5228 33.5228 38 28 38C22.4772 38 18 33.5228 18 28C18 22.4772 22.4772 18 28 18C33.5228 18 38 22.4772 38 28Z\" stroke=\"#D92D20\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n \r\n </div>\r\n </div>\r\n <a class=\"fs-4 text-gray-800 text-hover-primary fw-bold mb-0 title cursor-pointer\">{{ title }}</a>\r\n <span class=\"sub-title fw-normal mt-2\">{{ message }}</span>\r\n\r\n <div class=\"mt-5 w-100\">\r\n <div role=\"group\" class=\"d-flex mt-3 mb-15\">\r\n <button class=\"btn btn-outline w-100 me-3\" (click)=\"cancel()\">Cancel</button>\r\n <button id=\"alert-toast\" class=\"btn btn-danger w-100 ms-3\" (click)=\"onSubmit()\">Delete</button> \r\n </div>\r\n </div>\r\n\r\n </div>\r\n</div>", styles: [".sub-title{font-size:14px!important}\n"] }]
|
|
23
|
+
}], ctorParameters: () => [{ type: i1.NgbActiveModal }], propDecorators: { title: [{
|
|
24
|
+
type: Input
|
|
25
|
+
}], message: [{
|
|
26
|
+
type: Input
|
|
27
|
+
}] } });
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXBvcHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1zZXR0aW5ncy9zcmMvbGliL2NvbXBvbmVudHMvYWN0aW9uLXBvcHVwL2FjdGlvbi1wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2FjdGlvbi1wb3B1cC9hY3Rpb24tcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVFqRCxNQUFNLE9BQU8sb0JBQW9CO0lBS1o7SUFIVixLQUFLLEdBQVcsY0FBYyxDQUFDO0lBQy9CLE9BQU8sR0FBVywwRUFBMEUsQ0FBQztJQUV4RyxZQUFxQixXQUEyQjtRQUEzQixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7SUFFaEQsQ0FBQztJQUdDLE1BQU07UUFDSixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7d0dBaEJVLG9CQUFvQjs0RkFBcEIsb0JBQW9CLHdHQ1JqQywrL0NBdUJNOzs0RkRmTyxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCO21GQU1uQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWFjdGlvbi1wb3B1cCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi1wb3B1cC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2FjdGlvbi1wb3B1cC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjdGlvblBvcHVwQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICdEZWxldGUgVXNlcj8nO1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2U6IHN0cmluZyA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdXNlcj8gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZS4nO1xyXG5cclxuY29uc3RydWN0b3IoIHByaXZhdGUgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLCl7XHJcblxyXG59XHJcblxyXG5cclxuICBjYW5jZWwoKXtcclxuICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoJ2Nsb3NlJyk7XHJcbiAgfVxyXG5cclxuICBvblN1Ym1pdCgpe1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgnc3VibWl0Jyk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkIGdyb3VwLWRlbGV0ZSBweS0wXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTAgZC1mbGV4IGZsZXgtc3RhcnQgZmxleC1jb2x1bW4gcC05IFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS01XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzeW1ib2wgc3ltYm9sLTc1cHggc3ltYm9sLWNpcmNsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0ZFRTRFMlwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNGRUYzRjJcIiBzdHJva2Utd2lkdGg9XCI4XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjggMjRWMjhNMjggMzJIMjguMDFNMzggMjhDMzggMzMuNTIyOCAzMy41MjI4IDM4IDI4IDM4QzIyLjQ3NzIgMzggMTggMzMuNTIyOCAxOCAyOEMxOCAyMi40NzcyIDIyLjQ3NzIgMTggMjggMThDMzMuNTIyOCAxOCAzOCAyMi40NzcyIDM4IDI4WlwiIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YSBjbGFzcz1cImZzLTQgdGV4dC1ncmF5LTgwMCB0ZXh0LWhvdmVyLXByaW1hcnkgZnctYm9sZCBtYi0wIHRpdGxlIGN1cnNvci1wb2ludGVyXCI+e3sgdGl0bGUgfX08L2E+XHJcbiAgICAgICAgPHNwYW4gIGNsYXNzPVwic3ViLXRpdGxlIGZ3LW5vcm1hbCBtdC0yXCI+e3sgbWVzc2FnZSB9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTUgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgcm9sZT1cImdyb3VwXCIgY2xhc3M9XCJkLWZsZXggbXQtMyBtYi0xNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdy0xMDAgbWUtM1wiIChjbGljayk9XCJjYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gIGlkPVwiYWxlcnQtdG9hc3RcIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIHctMTAwIG1zLTNcIiAoY2xpY2spPVwib25TdWJtaXQoKVwiPkRlbGV0ZTwvYnV0dG9uPiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -405,13 +405,13 @@ export class ActivityLogsComponent {
|
|
|
405
405
|
this.getActivityLogs();
|
|
406
406
|
}
|
|
407
407
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActivityLogsComponent, deps: [{ token: i1.ClientApiService }, { token: i0.ChangeDetectorRef }, { token: i2.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
|
|
408
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ActivityLogsComponent, selector: "lib-activity-logs", host: { listeners: { "document:click": "onClick($event)" } }, ngImport: i0, template: "<div class=\"activity-card\">\r\n <ng-container *ngIf=\"pageState$ | async as pageState\" >\r\n <ng-container [ngSwitch]=\"pageState\" >\r\n <ng-container *ngSwitchCase=\"'loaded'\" >\r\n <div class=\"d-flex justify-content-between align-items-center mb-10\">\r\n <div class=\"header\">Activity Logs</div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"d-flex align-items-center position-relative me-5\">\r\n <input class=\"fx-date-range form-control ps-14\" style=\"min-width: 260px !important;\" type=\"text\" matInput ngxDaterangepickerMd\r\n [drops]=\"'down'\" [opens]=\"'right'\" [ranges]=\"ranges\" [showCustomRangeLabel]=\"true\"\r\n [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\"\r\n autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\" [autoApply]=\"true\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" />\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n <!-- Searchable single-select store filter (self-contained;\r\n shows store name, sends storeId to the backend). -->\r\n <div class=\"store-filter position-relative me-5\">\r\n <button type=\"button\" (click)=\"toggleStoreDropdown($event)\"\r\n class=\"btn btn-default btn-outline btn-outline-default rounded-3 text-nowrap border-val d-flex justify-content-between align-items-center\"\r\n style=\"min-width: 180px;\">\r\n <span>{{ selectedStoreName ? selectedStoreName : 'All Stores' }}</span>\r\n <span class=\"d-flex align-items-center\">\r\n <svg *ngIf=\"selectedStoreName\" (click)=\"clearStore($event)\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\" class=\"me-1\">\r\n <path d=\"M15 5L5 15M5 5l10 10\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n </button>\r\n <div *ngIf=\"storeDropdownOpen\" class=\"card py-1 position-absolute z-1 end-0\" style=\"min-width: 220px; max-height: 280px; overflow-y: auto; top: 44px;\">\r\n <div class=\"px-3 py-2\">\r\n <input type=\"text\" [value]=\"storeSearch\" (input)=\"onStoreSearch($event)\" (click)=\"$event.stopPropagation()\"\r\n placeholder=\"Search store\" class=\"form-control py-2\" />\r\n </div>\r\n <ul class=\"list-unstyled mb-0\">\r\n <li [ngClass]=\"!selectedStoreId ? 'active' : ''\" class=\"px-5 fw-semibold cursor-pointer py-2\" (click)=\"selectStore({})\">All Stores</li>\r\n <li *ngFor=\"let s of filteredStoreOptions\" [ngClass]=\"selectedStoreId === s.storeId ? 'active' : ''\"\r\n class=\"px-5 fw-semibold cursor-pointer py-2\" (click)=\"selectStore(s)\">{{ s.storeName }}</li>\r\n <li *ngIf=\"!filteredStoreOptions.length\" class=\"px-5 py-2 text-muted\">No stores found</li>\r\n </ul>\r\n </div>\r\n </div>\r\n <lib-filters [dataObject]=\"dataObject\" (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n </div>\r\n </div>\r\n \r\n <ng-container *ngIf=\"logList?.length\" >\r\n <ng-container *ngFor=\"let item of logList\">\r\n <div *ngIf=\"item?.type === 'angleChange'; else normalLog\"\r\n class=\"log-card mb-8 d-flex align-items-center justify-content-between\">\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"header me-3\">{{ storeNameById(item.storeId) }}</span>\r\n <span class=\"angle-badge\">Angle Changed</span>\r\n </div>\r\n <div class=\"sub mt-1\">{{ item.stream }}</div>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"time me-5\">{{ item.date }}</div>\r\n <button type=\"button\" class=\"angle-eye-btn\" title=\"Preview expected vs actual\"\r\n (click)=\"openAnglePreview(item, anglePreview)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z\" stroke=\"#175CD3\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"#175CD3\" stroke-width=\"1.8\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n <ng-template #normalLog>\r\n <div class=\"log-card mb-8\">\r\n <div class=\"d-flex me-10 w-75\">\r\n <div class=\"line me-4\"></div>\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"d-flex align-items-center mb-2\">\r\n <div class=\"header me-4\">{{camelCaseToWords(item?.logSubType)}}</div>\r\n <div class=\"time\">{{formatDate(item?.date)}}</div>\r\n </div>\r\n <div class=\"sub\">{{arrayToString(item?.changes)}} <span *ngIf=\"item?.eventType\">{{item?.eventType + 'd'}}</span>\r\n </div>\r\n <div class=\"sub\">By {{item?.userName}} - {{item?.email}}</div>\r\n\r\n <div class=\"w-100\" *ngFor=\"let key of objectKeys(item?.updatedValue)\">\r\n <!-- <div class=\"header me-4\">{{camelCaseToWords(key)}}</div> -->\r\n <div class=\"sub w-75 tooltip-container\" container=\"body\"><b>{{ key }}</b> has been updated from <span class=\"red-badge\">{{\r\n (item?.updatedValue[key].previous ===\"\" || item?.updatedValue[key].previous ===null||\r\n item?.updatedValue[key].previous ===undefined)?\"null\":item?.updatedValue[key].previous}}</span> to\r\n <span\r\n class=\"green-badge\"> {{item?.updatedValue[key].current === \"\" || item?.updatedValue[key].current ===\r\n null ||item?.updatedValue[key].current === undefined?\"null\": item?.updatedValue[key].current }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"chip text-end\">\r\n {{camelCaseToWords(item?.logType)}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <div *ngIf=\"logList?.length\" class=\"my-3\">\r\n <lib-pagination [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div> \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!logList?.length\">\r\n <div class=\"d-flex align-items-center justify-content-center\" >\r\n <img width=\"300px\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\"> \r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'loading'\" >\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</div>\r\n\r\n\r\n<!-- Angle-change preview modal: Expected vs Actual camera images. -->\r\n<ng-template #anglePreview let-modal>\r\n <div class=\"modal-header align-items-center\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"header me-3\">{{ previewItem?.stream }}</span>\r\n <span class=\"angle-badge\">Angle Changed</span>\r\n </div>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"modal.dismiss()\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"text-muted mb-4\">{{ storeNameById(previewItem?.storeId) }} \u00B7 {{ previewItem?.date }}</div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-4\">\r\n <div class=\"angle-img-wrap\">\r\n <img *ngIf=\"previewItem?.expected\" [src]=\"previewItem.expected\" alt=\"Expected camera angle\" />\r\n <div *ngIf=\"!previewItem?.expected\" class=\"angle-img-empty\">No expected image</div>\r\n </div>\r\n <div class=\"angle-img-label\">Expected</div>\r\n </div>\r\n <div class=\"col-md-6 mb-4\">\r\n <div class=\"angle-img-wrap\">\r\n <img *ngIf=\"previewItem?.actual\" [src]=\"previewItem.actual\" alt=\"Actual camera angle\" />\r\n <div *ngIf=\"!previewItem?.actual\" class=\"angle-img-empty\">No actual image</div>\r\n </div>\r\n <div class=\"angle-img-label\">Actual</div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".activity-card{border-radius:8px;background:var(--White, #FFF);padding:24px}.log-card{display:flex;justify-content:space-between}.log-card .line{border-radius:2px;background:var(--Primary-600, #00A3FF);min-width:2px;height:100%}.log-card .header{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:20px}.log-card .time{color:var(--Gray-500, #667085);font-size:12px;font-weight:500;line-height:18px}.log-card .sub{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:24px}.log-card .chip{padding:2px 10px;border-radius:16px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);font-size:14px;font-weight:500;line-height:20px;height:100%;white-space:nowrap}.header{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.green-badge{color:#027a48;font-size:12px;font-weight:500;line-height:18px;border-radius:16px;background:#ecfdf3;padding:2px 8px}.tooltip-inner{max-width:800px!important;white-space:normal;word-wrap:break-word}.red-badge{color:#b42318;font-size:12px;font-weight:500;line-height:18px;border-radius:16px;background:#fef3f2;padding:2px 8px}.badge{background-color:#007bff;color:#fff;padding:4px 10px;border-radius:8px;font-weight:700;font-size:14px}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;left:-470px!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}.multi-select-dropdown{position:relative}.multi-select-dropdown .input-container{position:absolute;width:212px;right:0;z-index:1;margin-top:5px;background-color:#fff;min-height:200px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--White, #FFF);box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;display:flex;flex-direction:column;justify-content:space-between}.multi-select-dropdown .input-container ul{margin:0;padding:0}.multi-select-dropdown .input-container ul li{list-style:none;padding:10px 16px}.multi-select-dropdown .input-container .form-check{display:flex;align-items:center}.multi-select-dropdown .input-container .form-check-input{height:16px;width:16px;border-radius:4px;border:1px solid var(--Primary-600, #00A3FF)}.multi-select-dropdown .input-container .form-check-input:checked{--bs-form-check-bg-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAB4SURBVHgBhY7NDUBQEIRnqcJNKXTg6qYTStCB+Isy6IQSNMDa9SLh5eWZZPcw+81kCX/quABhD73QyKXsGoyIvNCJSto2hEhNtY4N9cwYeMXEsVqB1GaSauRQOpty2tSmO3FgloAmF5nEhgyoesMO6CuFW66fn2xdFyA3ZzcRLrMAAAAASUVORK5CYII=);background-color:#eaf8ff;border-color:#00a3ff}.multi-select-dropdown .input-container .form-check-label{color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px}.multi-select-dropdown .input-container .footer-seperator{border-top:1px solid #EAECF0}.multi-select-dropdown .input-container .btn-primary{padding:10px 16px!important;font-size:12px!important;font-weight:600!important}.multi-select-dropdown .input-container .btn-outline{padding:10px 16px;font-size:12px;font-weight:600}.tooltip-container{position:relative;display:inline-block}.angle-badge{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:12px;font-size:12px;font-weight:500;background:#fff4e5;color:#b54708;white-space:nowrap}.angle-badge:before{content:\"\";width:6px;height:6px;border-radius:50%;background:#f79009}.angle-eye-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid #D0D5DD;border-radius:8px;background:#fff;cursor:pointer}.angle-eye-btn:hover{background:#eff8ff;border-color:#b2ddff}.angle-img-wrap{width:100%;aspect-ratio:16/9;background:#f2f4f7;border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center}.angle-img-wrap img{width:100%;height:100%;object-fit:contain}.angle-img-empty{color:#98a2b3;font-size:13px}.angle-img-label{text-align:center;margin-top:8px;font-weight:600;color:#344054}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i5.FiltersComponent, selector: "lib-filters", inputs: ["dataObject"], outputs: ["appliedFilters"] }, { kind: "directive", type: i6.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
|
|
408
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ActivityLogsComponent, selector: "lib-activity-logs", host: { listeners: { "document:click": "onClick($event)" } }, ngImport: i0, template: "<div class=\"activity-card\">\r\n <ng-container *ngIf=\"pageState$ | async as pageState\" >\r\n <ng-container [ngSwitch]=\"pageState\" >\r\n <ng-container *ngSwitchCase=\"'loaded'\" >\r\n <div class=\"d-flex justify-content-between align-items-center mb-10\">\r\n <div class=\"header\">Activity Logs</div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"d-flex align-items-center position-relative me-5\">\r\n <input class=\"fx-date-range form-control ps-14\" style=\"min-width: 260px !important;\" type=\"text\" matInput ngxDaterangepickerMd\r\n [drops]=\"'down'\" [opens]=\"'right'\" [ranges]=\"ranges\" [showCustomRangeLabel]=\"true\"\r\n [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\"\r\n autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\" [autoApply]=\"true\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" />\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n <!-- Searchable single-select store filter (self-contained;\r\n shows store name, sends storeId to the backend). -->\r\n <div class=\"store-filter position-relative me-5\">\r\n <button type=\"button\" (click)=\"toggleStoreDropdown($event)\"\r\n class=\"btn btn-default btn-outline btn-outline-default rounded-3 text-nowrap border-val d-flex justify-content-between align-items-center\"\r\n style=\"min-width: 180px;\">\r\n <span>{{ selectedStoreName ? selectedStoreName : 'All Stores' }}</span>\r\n <span class=\"d-flex align-items-center\">\r\n <svg *ngIf=\"selectedStoreName\" (click)=\"clearStore($event)\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\" class=\"me-1\">\r\n <path d=\"M15 5L5 15M5 5l10 10\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n </button>\r\n <div *ngIf=\"storeDropdownOpen\" class=\"card py-1 position-absolute z-1 end-0\" style=\"min-width: 220px; max-height: 280px; overflow-y: auto; top: 44px;\">\r\n <div class=\"px-3 py-2\">\r\n <input type=\"text\" [value]=\"storeSearch\" (input)=\"onStoreSearch($event)\" (click)=\"$event.stopPropagation()\"\r\n placeholder=\"Search store\" class=\"form-control py-2\" />\r\n </div>\r\n <ul class=\"list-unstyled mb-0\">\r\n <li [ngClass]=\"!selectedStoreId ? 'active' : ''\" class=\"px-5 fw-semibold cursor-pointer py-2\" (click)=\"selectStore({})\">All Stores</li>\r\n <li *ngFor=\"let s of filteredStoreOptions\" [ngClass]=\"selectedStoreId === s.storeId ? 'active' : ''\"\r\n class=\"px-5 fw-semibold cursor-pointer py-2\" (click)=\"selectStore(s)\">{{ s.storeName }}</li>\r\n <li *ngIf=\"!filteredStoreOptions.length\" class=\"px-5 py-2 text-muted\">No stores found</li>\r\n </ul>\r\n </div>\r\n </div>\r\n <lib-filters [dataObject]=\"dataObject\" (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n </div>\r\n </div>\r\n \r\n <ng-container *ngIf=\"logList?.length\" >\r\n <ng-container *ngFor=\"let item of logList\">\r\n <div *ngIf=\"item?.type === 'angleChange'; else normalLog\"\r\n class=\"log-card mb-8 d-flex align-items-center justify-content-between\">\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"header me-3\">{{ storeNameById(item.storeId) }}</span>\r\n <span class=\"angle-badge\">Angle Changed</span>\r\n </div>\r\n <div class=\"sub mt-1\">{{ item.stream }}</div>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"time me-5\">{{ item.date }}</div>\r\n <button type=\"button\" class=\"angle-eye-btn\" title=\"Preview expected vs actual\"\r\n (click)=\"openAnglePreview(item, anglePreview)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z\" stroke=\"#175CD3\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"#175CD3\" stroke-width=\"1.8\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n <ng-template #normalLog>\r\n <div class=\"log-card mb-8\">\r\n <div class=\"d-flex me-10 w-75\">\r\n <div class=\"line me-4\"></div>\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"d-flex align-items-center mb-2\">\r\n <div class=\"header me-4\">{{camelCaseToWords(item?.logSubType)}}</div>\r\n <div class=\"time\">{{formatDate(item?.date)}}</div>\r\n </div>\r\n <div class=\"sub\">{{arrayToString(item?.changes)}} <span *ngIf=\"item?.eventType\">{{item?.eventType + 'd'}}</span>\r\n </div>\r\n <div class=\"sub\">By {{item?.userName}} - {{item?.email}}</div>\r\n\r\n <div class=\"w-100\" *ngFor=\"let key of objectKeys(item?.updatedValue)\">\r\n <!-- <div class=\"header me-4\">{{camelCaseToWords(key)}}</div> -->\r\n <div class=\"sub w-75 tooltip-container\" container=\"body\"><b>{{ key }}</b> has been updated from <span class=\"red-badge\">{{\r\n (item?.updatedValue[key].previous ===\"\" || item?.updatedValue[key].previous ===null||\r\n item?.updatedValue[key].previous ===undefined)?\"null\":item?.updatedValue[key].previous}}</span> to\r\n <span\r\n class=\"green-badge\"> {{item?.updatedValue[key].current === \"\" || item?.updatedValue[key].current ===\r\n null ||item?.updatedValue[key].current === undefined?\"null\": item?.updatedValue[key].current }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"chip text-end\">\r\n {{camelCaseToWords(item?.logType)}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <div *ngIf=\"logList?.length\" class=\"my-3\">\r\n <lib-pagination [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div> \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!logList?.length\">\r\n <div class=\"d-flex align-items-center justify-content-center\" >\r\n <img width=\"300px\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\"> \r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'loading'\" >\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</div>\r\n\r\n\n<!-- Angle-change preview modal: Expected vs Actual camera images. -->\n<ng-template #anglePreview let-modal>\n <div class=\"modal-header align-items-center\">\n <div class=\"d-flex align-items-center\">\n <span class=\"header me-3\">{{ previewItem?.stream }}</span>\n <span class=\"angle-badge\">Angle Changed</span>\n </div>\n <button type=\"button\" class=\"btn-close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"text-muted mb-4\">{{ storeNameById(previewItem?.storeId) }} \u00B7 {{ previewItem?.date }}</div>\n <div class=\"row\">\n <div class=\"col-md-6 mb-4\">\n <div class=\"angle-img-wrap\">\n <img *ngIf=\"previewItem?.expected\" [src]=\"previewItem.expected\" alt=\"Expected camera angle\" />\n <div *ngIf=\"!previewItem?.expected\" class=\"angle-img-empty\">No expected image</div>\n </div>\n <div class=\"angle-img-label\">Expected</div>\n </div>\n <div class=\"col-md-6 mb-4\">\n <div class=\"angle-img-wrap\">\n <img *ngIf=\"previewItem?.actual\" [src]=\"previewItem.actual\" alt=\"Actual camera angle\" />\n <div *ngIf=\"!previewItem?.actual\" class=\"angle-img-empty\">No actual image</div>\n </div>\n <div class=\"angle-img-label\">Actual</div>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [".activity-card{border-radius:8px;background:var(--White, #FFF);padding:24px}.log-card{display:flex;justify-content:space-between}.log-card .line{border-radius:2px;background:var(--Primary-600, #00A3FF);min-width:2px;height:100%}.log-card .header{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:20px}.log-card .time{color:var(--Gray-500, #667085);font-size:12px;font-weight:500;line-height:18px}.log-card .sub{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:24px}.log-card .chip{padding:2px 10px;border-radius:16px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);font-size:14px;font-weight:500;line-height:20px;height:100%;white-space:nowrap}.header{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.green-badge{color:#027a48;font-size:12px;font-weight:500;line-height:18px;border-radius:16px;background:#ecfdf3;padding:2px 8px}.tooltip-inner{max-width:800px!important;white-space:normal;word-wrap:break-word}.red-badge{color:#b42318;font-size:12px;font-weight:500;line-height:18px;border-radius:16px;background:#fef3f2;padding:2px 8px}.badge{background-color:#007bff;color:#fff;padding:4px 10px;border-radius:8px;font-weight:700;font-size:14px}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;left:-470px!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}.multi-select-dropdown{position:relative}.multi-select-dropdown .input-container{position:absolute;width:212px;right:0;z-index:1;margin-top:5px;background-color:#fff;min-height:200px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--White, #FFF);box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;display:flex;flex-direction:column;justify-content:space-between}.multi-select-dropdown .input-container ul{margin:0;padding:0}.multi-select-dropdown .input-container ul li{list-style:none;padding:10px 16px}.multi-select-dropdown .input-container .form-check{display:flex;align-items:center}.multi-select-dropdown .input-container .form-check-input{height:16px;width:16px;border-radius:4px;border:1px solid var(--Primary-600, #00A3FF)}.multi-select-dropdown .input-container .form-check-input:checked{--bs-form-check-bg-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAB4SURBVHgBhY7NDUBQEIRnqcJNKXTg6qYTStCB+Isy6IQSNMDa9SLh5eWZZPcw+81kCX/quABhD73QyKXsGoyIvNCJSto2hEhNtY4N9cwYeMXEsVqB1GaSauRQOpty2tSmO3FgloAmF5nEhgyoesMO6CuFW66fn2xdFyA3ZzcRLrMAAAAASUVORK5CYII=);background-color:#eaf8ff;border-color:#00a3ff}.multi-select-dropdown .input-container .form-check-label{color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px}.multi-select-dropdown .input-container .footer-seperator{border-top:1px solid #EAECF0}.multi-select-dropdown .input-container .btn-primary{padding:10px 16px!important;font-size:12px!important;font-weight:600!important}.multi-select-dropdown .input-container .btn-outline{padding:10px 16px;font-size:12px;font-weight:600}.tooltip-container{position:relative;display:inline-block}.angle-badge{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:12px;font-size:12px;font-weight:500;background:#fff4e5;color:#b54708;white-space:nowrap}.angle-badge:before{content:\"\";width:6px;height:6px;border-radius:50%;background:#f79009}.angle-eye-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid #D0D5DD;border-radius:8px;background:#fff;cursor:pointer}.angle-eye-btn:hover{background:#eff8ff;border-color:#b2ddff}.angle-img-wrap{width:100%;aspect-ratio:16/9;background:#f2f4f7;border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center}.angle-img-wrap img{width:100%;height:100%;object-fit:contain}.angle-img-empty{color:#98a2b3;font-size:13px}.angle-img-label{text-align:center;margin-top:8px;font-weight:600;color:#344054}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i5.FiltersComponent, selector: "lib-filters", inputs: ["dataObject"], outputs: ["appliedFilters"] }, { kind: "directive", type: i6.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
|
|
409
409
|
}
|
|
410
410
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActivityLogsComponent, decorators: [{
|
|
411
411
|
type: Component,
|
|
412
|
-
args: [{ selector: 'lib-activity-logs', template: "<div class=\"activity-card\">\r\n <ng-container *ngIf=\"pageState$ | async as pageState\" >\r\n <ng-container [ngSwitch]=\"pageState\" >\r\n <ng-container *ngSwitchCase=\"'loaded'\" >\r\n <div class=\"d-flex justify-content-between align-items-center mb-10\">\r\n <div class=\"header\">Activity Logs</div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"d-flex align-items-center position-relative me-5\">\r\n <input class=\"fx-date-range form-control ps-14\" style=\"min-width: 260px !important;\" type=\"text\" matInput ngxDaterangepickerMd\r\n [drops]=\"'down'\" [opens]=\"'right'\" [ranges]=\"ranges\" [showCustomRangeLabel]=\"true\"\r\n [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\"\r\n autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\" [autoApply]=\"true\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" />\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n <!-- Searchable single-select store filter (self-contained;\r\n shows store name, sends storeId to the backend). -->\r\n <div class=\"store-filter position-relative me-5\">\r\n <button type=\"button\" (click)=\"toggleStoreDropdown($event)\"\r\n class=\"btn btn-default btn-outline btn-outline-default rounded-3 text-nowrap border-val d-flex justify-content-between align-items-center\"\r\n style=\"min-width: 180px;\">\r\n <span>{{ selectedStoreName ? selectedStoreName : 'All Stores' }}</span>\r\n <span class=\"d-flex align-items-center\">\r\n <svg *ngIf=\"selectedStoreName\" (click)=\"clearStore($event)\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\" class=\"me-1\">\r\n <path d=\"M15 5L5 15M5 5l10 10\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n </button>\r\n <div *ngIf=\"storeDropdownOpen\" class=\"card py-1 position-absolute z-1 end-0\" style=\"min-width: 220px; max-height: 280px; overflow-y: auto; top: 44px;\">\r\n <div class=\"px-3 py-2\">\r\n <input type=\"text\" [value]=\"storeSearch\" (input)=\"onStoreSearch($event)\" (click)=\"$event.stopPropagation()\"\r\n placeholder=\"Search store\" class=\"form-control py-2\" />\r\n </div>\r\n <ul class=\"list-unstyled mb-0\">\r\n <li [ngClass]=\"!selectedStoreId ? 'active' : ''\" class=\"px-5 fw-semibold cursor-pointer py-2\" (click)=\"selectStore({})\">All Stores</li>\r\n <li *ngFor=\"let s of filteredStoreOptions\" [ngClass]=\"selectedStoreId === s.storeId ? 'active' : ''\"\r\n class=\"px-5 fw-semibold cursor-pointer py-2\" (click)=\"selectStore(s)\">{{ s.storeName }}</li>\r\n <li *ngIf=\"!filteredStoreOptions.length\" class=\"px-5 py-2 text-muted\">No stores found</li>\r\n </ul>\r\n </div>\r\n </div>\r\n <lib-filters [dataObject]=\"dataObject\" (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n </div>\r\n </div>\r\n \r\n <ng-container *ngIf=\"logList?.length\" >\r\n <ng-container *ngFor=\"let item of logList\">\r\n <div *ngIf=\"item?.type === 'angleChange'; else normalLog\"\r\n class=\"log-card mb-8 d-flex align-items-center justify-content-between\">\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"header me-3\">{{ storeNameById(item.storeId) }}</span>\r\n <span class=\"angle-badge\">Angle Changed</span>\r\n </div>\r\n <div class=\"sub mt-1\">{{ item.stream }}</div>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"time me-5\">{{ item.date }}</div>\r\n <button type=\"button\" class=\"angle-eye-btn\" title=\"Preview expected vs actual\"\r\n (click)=\"openAnglePreview(item, anglePreview)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z\" stroke=\"#175CD3\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"#175CD3\" stroke-width=\"1.8\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n <ng-template #normalLog>\r\n <div class=\"log-card mb-8\">\r\n <div class=\"d-flex me-10 w-75\">\r\n <div class=\"line me-4\"></div>\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"d-flex align-items-center mb-2\">\r\n <div class=\"header me-4\">{{camelCaseToWords(item?.logSubType)}}</div>\r\n <div class=\"time\">{{formatDate(item?.date)}}</div>\r\n </div>\r\n <div class=\"sub\">{{arrayToString(item?.changes)}} <span *ngIf=\"item?.eventType\">{{item?.eventType + 'd'}}</span>\r\n </div>\r\n <div class=\"sub\">By {{item?.userName}} - {{item?.email}}</div>\r\n\r\n <div class=\"w-100\" *ngFor=\"let key of objectKeys(item?.updatedValue)\">\r\n <!-- <div class=\"header me-4\">{{camelCaseToWords(key)}}</div> -->\r\n <div class=\"sub w-75 tooltip-container\" container=\"body\"><b>{{ key }}</b> has been updated from <span class=\"red-badge\">{{\r\n (item?.updatedValue[key].previous ===\"\" || item?.updatedValue[key].previous ===null||\r\n item?.updatedValue[key].previous ===undefined)?\"null\":item?.updatedValue[key].previous}}</span> to\r\n <span\r\n class=\"green-badge\"> {{item?.updatedValue[key].current === \"\" || item?.updatedValue[key].current ===\r\n null ||item?.updatedValue[key].current === undefined?\"null\": item?.updatedValue[key].current }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"chip text-end\">\r\n {{camelCaseToWords(item?.logType)}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <div *ngIf=\"logList?.length\" class=\"my-3\">\r\n <lib-pagination [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div> \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!logList?.length\">\r\n <div class=\"d-flex align-items-center justify-content-center\" >\r\n <img width=\"300px\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\"> \r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'loading'\" >\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</div>\r\n\r\n\r\n<!-- Angle-change preview modal: Expected vs Actual camera images. -->\r\n<ng-template #anglePreview let-modal>\r\n <div class=\"modal-header align-items-center\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"header me-3\">{{ previewItem?.stream }}</span>\r\n <span class=\"angle-badge\">Angle Changed</span>\r\n </div>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"modal.dismiss()\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"text-muted mb-4\">{{ storeNameById(previewItem?.storeId) }} \u00B7 {{ previewItem?.date }}</div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-4\">\r\n <div class=\"angle-img-wrap\">\r\n <img *ngIf=\"previewItem?.expected\" [src]=\"previewItem.expected\" alt=\"Expected camera angle\" />\r\n <div *ngIf=\"!previewItem?.expected\" class=\"angle-img-empty\">No expected image</div>\r\n </div>\r\n <div class=\"angle-img-label\">Expected</div>\r\n </div>\r\n <div class=\"col-md-6 mb-4\">\r\n <div class=\"angle-img-wrap\">\r\n <img *ngIf=\"previewItem?.actual\" [src]=\"previewItem.actual\" alt=\"Actual camera angle\" />\r\n <div *ngIf=\"!previewItem?.actual\" class=\"angle-img-empty\">No actual image</div>\r\n </div>\r\n <div class=\"angle-img-label\">Actual</div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".activity-card{border-radius:8px;background:var(--White, #FFF);padding:24px}.log-card{display:flex;justify-content:space-between}.log-card .line{border-radius:2px;background:var(--Primary-600, #00A3FF);min-width:2px;height:100%}.log-card .header{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:20px}.log-card .time{color:var(--Gray-500, #667085);font-size:12px;font-weight:500;line-height:18px}.log-card .sub{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:24px}.log-card .chip{padding:2px 10px;border-radius:16px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);font-size:14px;font-weight:500;line-height:20px;height:100%;white-space:nowrap}.header{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.green-badge{color:#027a48;font-size:12px;font-weight:500;line-height:18px;border-radius:16px;background:#ecfdf3;padding:2px 8px}.tooltip-inner{max-width:800px!important;white-space:normal;word-wrap:break-word}.red-badge{color:#b42318;font-size:12px;font-weight:500;line-height:18px;border-radius:16px;background:#fef3f2;padding:2px 8px}.badge{background-color:#007bff;color:#fff;padding:4px 10px;border-radius:8px;font-weight:700;font-size:14px}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;left:-470px!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}.multi-select-dropdown{position:relative}.multi-select-dropdown .input-container{position:absolute;width:212px;right:0;z-index:1;margin-top:5px;background-color:#fff;min-height:200px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--White, #FFF);box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;display:flex;flex-direction:column;justify-content:space-between}.multi-select-dropdown .input-container ul{margin:0;padding:0}.multi-select-dropdown .input-container ul li{list-style:none;padding:10px 16px}.multi-select-dropdown .input-container .form-check{display:flex;align-items:center}.multi-select-dropdown .input-container .form-check-input{height:16px;width:16px;border-radius:4px;border:1px solid var(--Primary-600, #00A3FF)}.multi-select-dropdown .input-container .form-check-input:checked{--bs-form-check-bg-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAB4SURBVHgBhY7NDUBQEIRnqcJNKXTg6qYTStCB+Isy6IQSNMDa9SLh5eWZZPcw+81kCX/quABhD73QyKXsGoyIvNCJSto2hEhNtY4N9cwYeMXEsVqB1GaSauRQOpty2tSmO3FgloAmF5nEhgyoesMO6CuFW66fn2xdFyA3ZzcRLrMAAAAASUVORK5CYII=);background-color:#eaf8ff;border-color:#00a3ff}.multi-select-dropdown .input-container .form-check-label{color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px}.multi-select-dropdown .input-container .footer-seperator{border-top:1px solid #EAECF0}.multi-select-dropdown .input-container .btn-primary{padding:10px 16px!important;font-size:12px!important;font-weight:600!important}.multi-select-dropdown .input-container .btn-outline{padding:10px 16px;font-size:12px;font-weight:600}.tooltip-container{position:relative;display:inline-block}.angle-badge{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:12px;font-size:12px;font-weight:500;background:#fff4e5;color:#b54708;white-space:nowrap}.angle-badge:before{content:\"\";width:6px;height:6px;border-radius:50%;background:#f79009}.angle-eye-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid #D0D5DD;border-radius:8px;background:#fff;cursor:pointer}.angle-eye-btn:hover{background:#eff8ff;border-color:#b2ddff}.angle-img-wrap{width:100%;aspect-ratio:16/9;background:#f2f4f7;border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center}.angle-img-wrap img{width:100%;height:100%;object-fit:contain}.angle-img-empty{color:#98a2b3;font-size:13px}.angle-img-label{text-align:center;margin-top:8px;font-weight:600;color:#344054}\n"] }]
|
|
412
|
+
args: [{ selector: 'lib-activity-logs', template: "<div class=\"activity-card\">\r\n <ng-container *ngIf=\"pageState$ | async as pageState\" >\r\n <ng-container [ngSwitch]=\"pageState\" >\r\n <ng-container *ngSwitchCase=\"'loaded'\" >\r\n <div class=\"d-flex justify-content-between align-items-center mb-10\">\r\n <div class=\"header\">Activity Logs</div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"d-flex align-items-center position-relative me-5\">\r\n <input class=\"fx-date-range form-control ps-14\" style=\"min-width: 260px !important;\" type=\"text\" matInput ngxDaterangepickerMd\r\n [drops]=\"'down'\" [opens]=\"'right'\" [ranges]=\"ranges\" [showCustomRangeLabel]=\"true\"\r\n [alwaysShowCalendars]=\"false\" [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\"\r\n autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\" [autoApply]=\"true\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" />\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n <!-- Searchable single-select store filter (self-contained;\r\n shows store name, sends storeId to the backend). -->\r\n <div class=\"store-filter position-relative me-5\">\r\n <button type=\"button\" (click)=\"toggleStoreDropdown($event)\"\r\n class=\"btn btn-default btn-outline btn-outline-default rounded-3 text-nowrap border-val d-flex justify-content-between align-items-center\"\r\n style=\"min-width: 180px;\">\r\n <span>{{ selectedStoreName ? selectedStoreName : 'All Stores' }}</span>\r\n <span class=\"d-flex align-items-center\">\r\n <svg *ngIf=\"selectedStoreName\" (click)=\"clearStore($event)\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\" class=\"me-1\">\r\n <path d=\"M15 5L5 15M5 5l10 10\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n </button>\r\n <div *ngIf=\"storeDropdownOpen\" class=\"card py-1 position-absolute z-1 end-0\" style=\"min-width: 220px; max-height: 280px; overflow-y: auto; top: 44px;\">\r\n <div class=\"px-3 py-2\">\r\n <input type=\"text\" [value]=\"storeSearch\" (input)=\"onStoreSearch($event)\" (click)=\"$event.stopPropagation()\"\r\n placeholder=\"Search store\" class=\"form-control py-2\" />\r\n </div>\r\n <ul class=\"list-unstyled mb-0\">\r\n <li [ngClass]=\"!selectedStoreId ? 'active' : ''\" class=\"px-5 fw-semibold cursor-pointer py-2\" (click)=\"selectStore({})\">All Stores</li>\r\n <li *ngFor=\"let s of filteredStoreOptions\" [ngClass]=\"selectedStoreId === s.storeId ? 'active' : ''\"\r\n class=\"px-5 fw-semibold cursor-pointer py-2\" (click)=\"selectStore(s)\">{{ s.storeName }}</li>\r\n <li *ngIf=\"!filteredStoreOptions.length\" class=\"px-5 py-2 text-muted\">No stores found</li>\r\n </ul>\r\n </div>\r\n </div>\r\n <lib-filters [dataObject]=\"dataObject\" (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n </div>\r\n </div>\r\n \r\n <ng-container *ngIf=\"logList?.length\" >\r\n <ng-container *ngFor=\"let item of logList\">\r\n <div *ngIf=\"item?.type === 'angleChange'; else normalLog\"\r\n class=\"log-card mb-8 d-flex align-items-center justify-content-between\">\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"header me-3\">{{ storeNameById(item.storeId) }}</span>\r\n <span class=\"angle-badge\">Angle Changed</span>\r\n </div>\r\n <div class=\"sub mt-1\">{{ item.stream }}</div>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"time me-5\">{{ item.date }}</div>\r\n <button type=\"button\" class=\"angle-eye-btn\" title=\"Preview expected vs actual\"\r\n (click)=\"openAnglePreview(item, anglePreview)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z\" stroke=\"#175CD3\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"#175CD3\" stroke-width=\"1.8\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n <ng-template #normalLog>\r\n <div class=\"log-card mb-8\">\r\n <div class=\"d-flex me-10 w-75\">\r\n <div class=\"line me-4\"></div>\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"d-flex align-items-center mb-2\">\r\n <div class=\"header me-4\">{{camelCaseToWords(item?.logSubType)}}</div>\r\n <div class=\"time\">{{formatDate(item?.date)}}</div>\r\n </div>\r\n <div class=\"sub\">{{arrayToString(item?.changes)}} <span *ngIf=\"item?.eventType\">{{item?.eventType + 'd'}}</span>\r\n </div>\r\n <div class=\"sub\">By {{item?.userName}} - {{item?.email}}</div>\r\n\r\n <div class=\"w-100\" *ngFor=\"let key of objectKeys(item?.updatedValue)\">\r\n <!-- <div class=\"header me-4\">{{camelCaseToWords(key)}}</div> -->\r\n <div class=\"sub w-75 tooltip-container\" container=\"body\"><b>{{ key }}</b> has been updated from <span class=\"red-badge\">{{\r\n (item?.updatedValue[key].previous ===\"\" || item?.updatedValue[key].previous ===null||\r\n item?.updatedValue[key].previous ===undefined)?\"null\":item?.updatedValue[key].previous}}</span> to\r\n <span\r\n class=\"green-badge\"> {{item?.updatedValue[key].current === \"\" || item?.updatedValue[key].current ===\r\n null ||item?.updatedValue[key].current === undefined?\"null\": item?.updatedValue[key].current }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"chip text-end\">\r\n {{camelCaseToWords(item?.logType)}}\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <div *ngIf=\"logList?.length\" class=\"my-3\">\r\n <lib-pagination [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div> \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!logList?.length\">\r\n <div class=\"d-flex align-items-center justify-content-center\" >\r\n <img width=\"300px\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\"> \r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'loading'\" >\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</div>\r\n\r\n\n<!-- Angle-change preview modal: Expected vs Actual camera images. -->\n<ng-template #anglePreview let-modal>\n <div class=\"modal-header align-items-center\">\n <div class=\"d-flex align-items-center\">\n <span class=\"header me-3\">{{ previewItem?.stream }}</span>\n <span class=\"angle-badge\">Angle Changed</span>\n </div>\n <button type=\"button\" class=\"btn-close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body\">\n <div class=\"text-muted mb-4\">{{ storeNameById(previewItem?.storeId) }} \u00B7 {{ previewItem?.date }}</div>\n <div class=\"row\">\n <div class=\"col-md-6 mb-4\">\n <div class=\"angle-img-wrap\">\n <img *ngIf=\"previewItem?.expected\" [src]=\"previewItem.expected\" alt=\"Expected camera angle\" />\n <div *ngIf=\"!previewItem?.expected\" class=\"angle-img-empty\">No expected image</div>\n </div>\n <div class=\"angle-img-label\">Expected</div>\n </div>\n <div class=\"col-md-6 mb-4\">\n <div class=\"angle-img-wrap\">\n <img *ngIf=\"previewItem?.actual\" [src]=\"previewItem.actual\" alt=\"Actual camera angle\" />\n <div *ngIf=\"!previewItem?.actual\" class=\"angle-img-empty\">No actual image</div>\n </div>\n <div class=\"angle-img-label\">Actual</div>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [".activity-card{border-radius:8px;background:var(--White, #FFF);padding:24px}.log-card{display:flex;justify-content:space-between}.log-card .line{border-radius:2px;background:var(--Primary-600, #00A3FF);min-width:2px;height:100%}.log-card .header{color:var(--Gray-700, #344054);font-size:14px;font-weight:600;line-height:20px}.log-card .time{color:var(--Gray-500, #667085);font-size:12px;font-weight:500;line-height:18px}.log-card .sub{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:24px}.log-card .chip{padding:2px 10px;border-radius:16px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);font-size:14px;font-weight:500;line-height:20px;height:100%;white-space:nowrap}.header{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.green-badge{color:#027a48;font-size:12px;font-weight:500;line-height:18px;border-radius:16px;background:#ecfdf3;padding:2px 8px}.tooltip-inner{max-width:800px!important;white-space:normal;word-wrap:break-word}.red-badge{color:#b42318;font-size:12px;font-weight:500;line-height:18px;border-radius:16px;background:#fef3f2;padding:2px 8px}.badge{background-color:#007bff;color:#fff;padding:4px 10px;border-radius:8px;font-weight:700;font-size:14px}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;left:-470px!important;height:400px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep table th{border-bottom:0px solid var(--Gray-200, #EAECF0)!important;background:transparent!important;color:var(--Gray-700, #344054)!important;text-align:center;font-size:16px!important;font-weight:500!important;line-height:24px}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}.multi-select-dropdown{position:relative}.multi-select-dropdown .input-container{position:absolute;width:212px;right:0;z-index:1;margin-top:5px;background-color:#fff;min-height:200px;border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--White, #FFF);box-shadow:0 12px 16px -4px #10182814,0 4px 6px -2px #10182808;display:flex;flex-direction:column;justify-content:space-between}.multi-select-dropdown .input-container ul{margin:0;padding:0}.multi-select-dropdown .input-container ul li{list-style:none;padding:10px 16px}.multi-select-dropdown .input-container .form-check{display:flex;align-items:center}.multi-select-dropdown .input-container .form-check-input{height:16px;width:16px;border-radius:4px;border:1px solid var(--Primary-600, #00A3FF)}.multi-select-dropdown .input-container .form-check-input:checked{--bs-form-check-bg-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAB4SURBVHgBhY7NDUBQEIRnqcJNKXTg6qYTStCB+Isy6IQSNMDa9SLh5eWZZPcw+81kCX/quABhD73QyKXsGoyIvNCJSto2hEhNtY4N9cwYeMXEsVqB1GaSauRQOpty2tSmO3FgloAmF5nEhgyoesMO6CuFW66fn2xdFyA3ZzcRLrMAAAAASUVORK5CYII=);background-color:#eaf8ff;border-color:#00a3ff}.multi-select-dropdown .input-container .form-check-label{color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px}.multi-select-dropdown .input-container .footer-seperator{border-top:1px solid #EAECF0}.multi-select-dropdown .input-container .btn-primary{padding:10px 16px!important;font-size:12px!important;font-weight:600!important}.multi-select-dropdown .input-container .btn-outline{padding:10px 16px;font-size:12px;font-weight:600}.tooltip-container{position:relative;display:inline-block}.angle-badge{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:12px;font-size:12px;font-weight:500;background:#fff4e5;color:#b54708;white-space:nowrap}.angle-badge:before{content:\"\";width:6px;height:6px;border-radius:50%;background:#f79009}.angle-eye-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid #D0D5DD;border-radius:8px;background:#fff;cursor:pointer}.angle-eye-btn:hover{background:#eff8ff;border-color:#b2ddff}.angle-img-wrap{width:100%;aspect-ratio:16/9;background:#f2f4f7;border-radius:8px;overflow:hidden;display:flex;align-items:center;justify-content:center}.angle-img-wrap img{width:100%;height:100%;object-fit:contain}.angle-img-empty{color:#98a2b3;font-size:13px}.angle-img-label{text-align:center;margin-top:8px;font-weight:600;color:#344054}\n"] }]
|
|
413
413
|
}], ctorParameters: () => [{ type: i1.ClientApiService }, { type: i0.ChangeDetectorRef }, { type: i2.NgbModal }], propDecorators: { onClick: [{
|
|
414
414
|
type: HostListener,
|
|
415
415
|
args: ['document:click', ['$event']]
|
|
416
416
|
}] } });
|
|
417
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktbG9ncy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2FjdGl2aXR5LWxvZ3MvYWN0aXZpdHktbG9ncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2FjdGl2aXR5LWxvZ3MvYWN0aXZpdHktbG9ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQXFDLE1BQU0sZUFBZSxDQUFDO0FBRzlHLE9BQVEsS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMzQixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBQ25DLE9BQU8sUUFBUSxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7O0FBQzNDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQU92QixNQUFNLE9BQU8scUJBQXFCO0lBaU1aO0lBQXNDO0lBQStCO0lBL0x6RixLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ2IsY0FBYyxDQUFNO0lBQ3BCLDhFQUE4RTtJQUM5RSx3RUFBd0U7SUFDeEUsWUFBWSxHQUFVLEVBQUUsQ0FBQyxDQUFVLHNDQUFzQztJQUN6RSxvQkFBb0IsR0FBVSxFQUFFLENBQUMsQ0FBRSx1QkFBdUI7SUFDMUQsV0FBVyxHQUFXLEVBQUUsQ0FB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QUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2lCQUNqRTtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQTtRQUNwQixJQUFJLE9BQU8sR0FBd0I7WUFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVztZQUN4QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsY0FBYyxFQUFHLElBQUksQ0FBQyxjQUFjO1NBQ3JDLENBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsT0FBTyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUE7U0FDM0U7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsT0FBTyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUE7U0FDdkU7UUFFQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7SUFDMUIsQ0FBQzt3R0ExWlkscUJBQXFCOzRGQUFyQixxQkFBcUIsdUhDakJsQyxxL1pBd0xBOzs0RkR2S2EscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjs0SUFpQjdCLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBDbGllbnRBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2xpZW50LWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0ICBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuaW1wb3J0IFwiZGF5anMvbG9jYWxlL2VuXCI7XHJcbmltcG9ydCB1dGMgZnJvbSBcImRheWpzL3BsdWdpbi91dGNcIjtcclxuaW1wb3J0IHRpbWV6b25lIGZyb20gXCJkYXlqcy9wbHVnaW4vdGltZXpvbmVcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5kYXlqcy5leHRlbmQodXRjKTtcclxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWFjdGl2aXR5LWxvZ3MnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hY3Rpdml0eS1sb2dzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYWN0aXZpdHktbG9ncy5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjdGl2aXR5TG9nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIGRheWpzID0gZGF5anNcclxuICBmaWx0ZXJCeVN0YXR1czogYW55O1xyXG4gIC8vIC0tLS0tIFNlbGYtY29udGFpbmVkIHN0b3JlIGZpbHRlciAoc2VhcmNoYWJsZSBzaW5nbGUtc2VsZWN0KS4gS2VwdCBsb2NhbCB0b1xyXG4gIC8vIHRoaXMgY29tcG9uZW50IHNvIGl0IGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgc2hhcmVkIGxpYi1maWx0ZXJzLiAtLS0tLVxyXG4gIHN0b3JlT3B0aW9uczogYW55W10gPSBbXTsgICAgICAgICAgLy8gZnVsbCBsaXN0OiBbeyBzdG9yZUlkLCBzdG9yZU5hbWUgfV1cclxuICBmaWx0ZXJlZFN0b3JlT3B0aW9uczogYW55W10gPSBbXTsgIC8vIHNlYXJjaC1maWx0ZXJlZCB2aWV3XHJcbiAgc3RvcmVTZWFyY2g6IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdGVkU3RvcmVJZDogc3RyaW5nID0gJyc7XHJcbiAgc2VsZWN0ZWRTdG9yZU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIHN0b3JlRHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5kcm9wZG93bicpKSB7XHJcbiAgICAgIHRoaXMuc2hvd0ZpbHRlcnMgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENsb3NlIHRoZSBzdG9yZSBkcm9wZG93biB3aGVuIGNsaWNraW5nIG91dHNpZGUgaXQuXHJcbiAgICBpZiAoIXRhcmdldC5jbG9zZXN0KCcuc3RvcmUtZmlsdGVyJykpIHtcclxuICAgICAgdGhpcy5zdG9yZURyb3Bkb3duT3BlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlU3RvcmVEcm9wZG93bihldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnN0b3JlRHJvcGRvd25PcGVuID0gIXRoaXMuc3RvcmVEcm9wZG93bk9wZW47XHJcbiAgfVxyXG5cclxuICBvblN0b3JlU2VhcmNoKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHRlcm0gPSAoZXZlbnQ/LnRhcmdldD8udmFsdWUgfHwgJycpLnRyaW0oKTtcclxuICAgIHRoaXMuc3RvcmVTZWFyY2ggPSB0ZXJtO1xyXG4gICAgdGhpcy5maWx0ZXJlZFN0b3JlT3B0aW9ucyA9IHRlcm1cclxuICAgICAgPyB0aGlzLnN0b3JlT3B0aW9ucy5maWx0ZXIoKHMpID0+IG5ldyBSZWdFeHAodGVybSwgJ2knKS50ZXN0KHMuc3RvcmVOYW1lIHx8ICcnKSlcclxuICAgICAgOiB0aGlzLnN0b3JlT3B0aW9ucy5zbGljZSgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0U3RvcmUoc3RvcmU6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlSWQgPSBzdG9yZT8uc3RvcmVJZCB8fCAnJztcclxuICAgIHRoaXMuc2VsZWN0ZWRTdG9yZU5hbWUgPSBzdG9yZT8uc3RvcmVOYW1lIHx8ICcnO1xyXG4gICAgdGhpcy5zdG9yZURyb3Bkb3duT3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLmdldEFjdGl2aXR5TG9ncygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTdG9yZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVJZCA9ICcnO1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlTmFtZSA9ICcnO1xyXG4gICAgdGhpcy5zdG9yZVNlYXJjaCA9ICcnO1xyXG4gICAgdGhpcy5maWx0ZXJlZFN0b3JlT3B0aW9ucyA9IHRoaXMuc3RvcmVPcHRpb25zLnNsaWNlKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMuZ2V0QWN0aXZpdHlMb2dzKCk7XHJcbiAgfVxyXG5cclxuICBpdGVtc1BlclBhZ2UgPSAxMFxyXG4gIGN1cnJlbnRQYWdlID0gMVxyXG4gIHRvdGFsSXRlbXMgPSAwXHJcbiAgcGFnaW5hdGlvblNpemVzID0gWzEwLCAyMCwgMzBdXHJcbiAgcGFnZVNpemUgPSAxMFxyXG4gIHNlbGVjdGVkRGF0ZVJhbmdlOiBhbnkgPSB7XHJcbiAgICBzdGFydERhdGU6IHRoaXMuZGF5anMoKS5zdWJ0cmFjdCgzMCwgXCJkYXlzXCIpLFxyXG4gICAgZW5kRGF0ZTogdGhpcy5kYXlqcygpXHJcbiAgfTtcclxuICBjbGllbnRMaXN0OiBhbnkgPSBbXVxyXG4gIHNlbGVjdGVkQ2xpZW50OiBhbnlcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG4gIGxvZ0xpc3Q6IGFueTtcclxuICBmaWx0ZXJTdGFydERhdGU6IHN0cmluZyA9IHRoaXMuZGF5anMoKS5zdWJ0cmFjdCgzMCwgXCJkYXlzXCIpLnRvSVNPU3RyaW5nKClcclxuICBmaWx0ZXJFbmREYXRlOiBzdHJpbmcgPXRoaXMuZGF5anMoKS5zdWJ0cmFjdCgwLCBcImRheXNcIikudG9JU09TdHJpbmcoKVxyXG4gIHNob3dGaWx0ZXJzOmJvb2xlYW4gPSBmYWxzZVxyXG4gIHBhZ2VTdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PCdsb2FkZWQnIHwgJ2xvYWRpbmcnPignbG9hZGluZycpO1xyXG4gIGZpbHRlcnMgPSBbXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOidCcmFuZCBkZXRhaWxzJyxcclxuICAgICAgaWQ6J2JyYW5kRGV0YWlscycsXHJcbiAgICAgIGlzQ2hlY2tlZDp0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDonQ29uZmlndXJhdGlvbicsXHJcbiAgICAgIGlkOidjb25maWd1cmF0aW9uJyxcclxuICAgICAgaXNDaGVja2VkOnRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOidEb2N1bWVudHMnLFxyXG4gICAgICBpZDonZG9jdW1lbnRzJyxcclxuICAgICAgaXNDaGVja2VkOnRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOidTdG9yZXMnLFxyXG4gICAgICBpZDonc3RvcmVzJyxcclxuICAgICAgaXNDaGVja2VkOnRydWVcclxuICAgIH0sICAgXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOidDbHVzdGVycycsXHJcbiAgICAgIGlkOidjbHVzdGVyJyxcclxuICAgICAgaXNDaGVja2VkOnRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOidUZWFtcycsXHJcbiAgICAgIGlkOid0ZWFtcycsXHJcbiAgICAgIGlzQ2hlY2tlZDp0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDonU3Vic2NyaXB0aW9uJyxcclxuICAgICAgaWQ6J3N1YnNjcmlwdGlvbicsXHJcbiAgICAgIGlzQ2hlY2tlZDp0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDonSW52b2ljZScsXHJcbiAgICAgIGlkOidpbnZvaWNlJyxcclxuICAgICAgaXNDaGVja2VkOnRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOidCaWxsaW5nJyxcclxuICAgICAgaWQ6J2JpbGxpbmcnLFxyXG4gICAgICBpc0NoZWNrZWQ6dHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonQ2FtZXJhJyxcclxuICAgICAgaWQ6J2NhbWVyYXMnLFxyXG4gICAgICBpc0NoZWNrZWQ6dHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonWm9uZScsXHJcbiAgICAgIGlkOid6b25lJyxcclxuICAgICAgaXNDaGVja2VkOnRydWVcclxuICAgIH0sXHJcbiAgXVxyXG4gIGRhdGFPYmplY3Q6IGFueSA9IFtcclxuICAgIHsgRGVzY3JpcHRpb246ICdTdGF0dXMgTG9ncycsIElzc3Vlczpbe1xyXG4gICAgICB0ZXh0OidCcmFuZCBkZXRhaWxzJyxcclxuICAgICAgaWQ6J2JyYW5kRGV0YWlscycsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0ZXh0OidDb25maWd1cmF0aW9uJyxcclxuICAgICAgaWQ6J2NvbmZpZ3VyYXRpb24nLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonRG9jdW1lbnRzJyxcclxuICAgICAgaWQ6J2RvY3VtZW50cycsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0ZXh0OidTdG9yZXMnLFxyXG4gICAgICBpZDonc3RvcmVzJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRleHQ6J0NhbWVyYScsXHJcbiAgICAgIGlkOidjYW1lcmFzJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRleHQ6J0NsdXN0ZXJzJyxcclxuICAgICAgaWQ6J2NsdXN0ZXInLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonVXNlcnMnLFxyXG4gICAgICBpZDondXNlcnMnLCBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRleHQ6J1RlYW1zJyxcclxuICAgICAgaWQ6J3RlYW1zJywgXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0ZXh0OidTdWJzY3JpcHRpb24nLFxyXG4gICAgICBpZDonc3Vic2NyaXB0aW9uJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonSW52b2ljZScsXHJcbiAgICAgIGlkOidpbnZvaWNlJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonQmlsbGluZycsXHJcbiAgICAgIGlkOidiaWxsaW5nJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonWm9uZScsXHJcbiAgICAgIGlkOid6b25lJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonQW5nbGUgQ2hhbmdlJyxcclxuICAgICAgaWQ6J2FuZ2xlQ2hhbmdlJ1xyXG4gICAgfSxcclxuICBdfVxyXG4gIF1cclxuICAvLyBBbmdsZS1jaGFuZ2UgaW1hZ2UgcHJldmlldyAob3BlbmVkIGZyb20gdGhlIGV5ZSBpY29uIG9uIGFuIGFuZ2xlIHJvdykuXHJcbiAgcHJldmlld0l0ZW06IGFueSA9IG51bGw7XHJcblxyXG4gIG9wZW5BbmdsZVByZXZpZXcoaXRlbTogYW55LCB0cGw6IGFueSkge1xyXG4gICAgdGhpcy5wcmV2aWV3SXRlbSA9IGl0ZW07XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRwbCwgeyBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ2xnJyB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpU2VydmljZTogQ2xpZW50QXBpU2VydmljZSwgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCkge1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLmNsaWVudElkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgaWYgKGUpIHtcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gZVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUlkID0gJydcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVOYW1lID0gJydcclxuICAgICAgICB0aGlzLnN0b3JlU2VhcmNoID0gJydcclxuICAgICAgICB0aGlzLmxvYWRTdG9yZXNGb3JGaWx0ZXIoKVxyXG4gICAgICAgIHRoaXMuZ2V0QWN0aXZpdHlMb2dzKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGxvYWRTdG9yZXNGb3JGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0U3RvcmVMaXN0KHRoaXMuY2xpZW50SWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlT3B0aW9ucyA9IHJlcz8uZGF0YT8ucmVzdWx0IHx8IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRTdG9yZU9wdGlvbnMgPSB0aGlzLnN0b3JlT3B0aW9ucy5zbGljZSgpO1xyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIC8vIFN0b3JlIGxpc3QgdW5hdmFpbGFibGUg4oaSIGVtcHR5IG9wdGlvbnM7IGxvZ3Mgc3RpbGwgbG9hZCB1bmZpbHRlcmVkLlxyXG4gICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZFN0b3JlT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIHRoaXMucGFnZVN0YXRlJC5jb21wbGV0ZSgpO1xyXG5cclxuICB9XHJcblxyXG4gIHN0b3JlTmFtZUJ5SWQoc3RvcmVJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHMgPSAodGhpcy5zdG9yZU9wdGlvbnMgfHwgW10pLmZpbmQoKHg6IGFueSkgPT4geC5zdG9yZUlkID09PSBzdG9yZUlkKTtcclxuICAgIHJldHVybiBzPy5zdG9yZU5hbWUgfHwgc3RvcmVJZDtcclxuICB9XHJcblxyXG4gIGdldEFjdGl2aXR5TG9ncygpIHtcclxuICAgIGNvbnN0IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xyXG4gICAgdGhpcy5wYWdlU3RhdGUkLm5leHQoJ2xvYWRpbmcnKVxyXG4gICAgbGV0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XHJcbiAgICAgIGxpbWl0OiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICBvZmZzZXQ6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICBsb2dUeXBlRmlsdGVycyA6IHRoaXMuZmlsdGVyQnlTdGF0dXMsXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWx0ZXJTdGFydERhdGUpIHtcclxuICAgICAgZmlsdGVycy5zdGFydERhdGUgPSBkYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5maWx0ZXJTdGFydERhdGUsICd5eXl5LU1NLWRkJylcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbHRlckVuZERhdGUpIHtcclxuICAgICAgZmlsdGVycy5lbmREYXRlID0gZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZmlsdGVyRW5kRGF0ZSwgJ3l5eXktTU0tZGQnKVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdG9yZUlkKSB7XHJcbiAgICAgIGZpbHRlcnMuc3RvcmVJZCA9IHRoaXMuc2VsZWN0ZWRTdG9yZUlkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmKHRoaXMuZ2V0Q2hlY2tlZElkcyh0aGlzLmZpbHRlcnMpPy5sZW5ndGgpe1xyXG4gICAgLy8gICBmaWx0ZXJzLmxvZ1R5cGVGaWx0ZXJzID0gdGhpcy5nZXRDaGVja2VkSWRzKHRoaXMuZmlsdGVycylcclxuICAgIC8vIH1cclxuXHJcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMuZmlsdGVyQnlTdGF0dXMgfHwgW107XHJcbiAgICBjb25zdCBpc0FuZ2xlQ2hhbmdlID0gQXJyYXkuaXNBcnJheSh0eXBlcykgJiYgdHlwZXMuaW5jbHVkZXMoJ2FuZ2xlQ2hhbmdlJyk7XHJcbiAgICBpZiAoaXNBbmdsZUNoYW5nZSkge1xyXG4gICAgICBjb25zdCBhbmdsZVBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XHJcbiAgICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICAgICAgbGltaXQ6IHRoaXMucGFnZVNpemUsXHJcbiAgICAgICAgb2Zmc2V0OiB0aGlzLmN1cnJlbnRQYWdlLFxyXG4gICAgICB9O1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFN0b3JlSWQpIHsgYW5nbGVQYXlsb2FkWydzdG9yZUlkJ10gPSB0aGlzLnNlbGVjdGVkU3RvcmVJZDsgfVxyXG4gICAgICBpZiAodGhpcy5maWx0ZXJTdGFydERhdGUpIHsgYW5nbGVQYXlsb2FkWydzdGFydERhdGUnXSA9IGRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmZpbHRlclN0YXJ0RGF0ZSwgJ3l5eXktTU0tZGQnKTsgfVxyXG4gICAgICBpZiAodGhpcy5maWx0ZXJFbmREYXRlKSB7IGFuZ2xlUGF5bG9hZFsnZW5kRGF0ZSddID0gZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZmlsdGVyRW5kRGF0ZSwgJ3l5eXktTU0tZGQnKTsgfVxyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0QW5nbGVDaGFuZ2VMb2dzKGFuZ2xlUGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wYWdlU3RhdGUkLm5leHQoJ2xvYWRlZCcpO1xyXG4gICAgICAgICAgdGhpcy5sb2dMaXN0ID0gZT8uZGF0YT8uZGF0YSB8fCBbXTtcclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IGU/LmRhdGE/LmNvdW50IHx8IDA7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VTdGF0ZSQubmV4dCgnbG9hZGVkJyk7XHJcbiAgICAgICAgICB0aGlzLmxvZ0xpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IDA7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuOyAvLyBzZXBhcmF0ZSBtb2RlIOKAlCBza2lwIHRoZSBub3JtYWwgYWN0aXZpdHktbG9nIGNhbGxcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0QWN0aXZpdHlMb2dzKGZpbHRlcnMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYWdlU3RhdGUkLm5leHQoJ2xvYWRlZCcpXHJcbiAgICAgICAgaWYgKGU/LmRhdGE/LmNvdW50KSB7XHJcbiAgICAgICAgICB0aGlzLmxvZ0xpc3QgPSBlLmRhdGEuZGF0YVxyXG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gZS5kYXRhLmNvdW50XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvZ0xpc3QgPSBbXVxyXG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMFxyXG4gICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYWdlU3RhdGUkLm5leHQoJ2xvYWRlZCcpXHJcbiAgICAgICAgdGhpcy5sb2dMaXN0ID0gW11cclxuICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwXHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBkYXRlY2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudC5zdGFydERhdGUgfHwgZXZlbnQuZW5kRGF0ZSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMVxyXG4gICAgICB0aGlzLmZpbHRlclN0YXJ0RGF0ZSA9IHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlKS51dGMoKS50b0lTT1N0cmluZygpXHJcbiAgICAgIHRoaXMuZmlsdGVyRW5kRGF0ZSA9IHRoaXMuZGF5anMoZXZlbnQuZW5kRGF0ZSkudXRjKCkudG9JU09TdHJpbmcoKVxyXG4gICAgICB0aGlzLmdldEFjdGl2aXR5TG9ncygpXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmFuZ2VzOiBhbnkgPSB7XHJcbiAgICBUb2RheTogW3RoaXMuZGF5anMoKSwgdGhpcy5kYXlqcygpXSxcclxuICAgIFllc3RlcmRheTogW3RoaXMuZGF5anMoKS5zdWJ0cmFjdCgxLCBcImRheXNcIiksIHRoaXMuZGF5anMoKS5zdWJ0cmFjdCgxLCBcImRheXNcIildLFxyXG4gICAgXCJUaGlzIFdlZWtcIjogW3RoaXMuZGF5anMoKS5zdWJ0cmFjdCg2LCBcImRheXNcIiksIHRoaXMuZGF5anMoKV0sXHJcbiAgICBcIkxhc3QgV2Vla1wiOiBbXHJcbiAgICAgIHRoaXMuZGF5anMoKS5zdWJ0cmFjdCgxMywgXCJkYXlzXCIpLnN0YXJ0T2YoXCJkYXlzXCIpLFxyXG4gICAgICB0aGlzLmRheWpzKCkuc3VidHJhY3QoNywgXCJkYXlzXCIpLmVuZE9mKFwiZGF5c1wiKSxcclxuICAgIF0sXHJcbiAgICBcIlRoaXMgTW9udGhcIjogW3RoaXMuZGF5anMoKS5zdWJ0cmFjdCgzMCwgXCJkYXlzXCIpLCAvLyBTdGFydCBkYXRlIGlzIDMwIGRheXMgYmVmb3JlIHRvZGF5XHJcbiAgICAgIHRoaXMuZGF5anMoKV0sIFxyXG4gICAgXCJMYXN0IE1vbnRoXCI6IFtcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsIFwibW9udGhcIikuc3RhcnRPZihcIm1vbnRoXCIpLFxyXG4gICAgICB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgXCJtb250aFwiKS5lbmRPZihcIm1vbnRoXCIpLFxyXG4gICAgXSxcclxuICB9O1xyXG5cclxuXHJcbiAgb25QYWdlQ2hhbmdlKHBhZ2VPZmZzZXQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VPZmZzZXRcclxuICAgIHRoaXMuZ2V0QWN0aXZpdHlMb2dzKClcclxuXHJcbiAgfVxyXG5cclxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBudW1iZXIpIHsgICBcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxIFxyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IHBhZ2VTaXplXHJcbiAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IHBhZ2VTaXplXHJcbiAgICB0aGlzLmdldEFjdGl2aXR5TG9ncygpXHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlKGlucHV0RGF0ZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBwYXJzZWREYXRlID0gdGhpcy5kYXlqcyhpbnB1dERhdGUpO1xyXG4gICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IHBhcnNlZERhdGUuZm9ybWF0KCdERC1NTS1ZWVlZIHwgaGg6bW0gQScpO1xyXG4gICAgcmV0dXJuIGZvcm1hdHRlZERhdGU7XHJcbiAgfVxyXG5cclxuICBjYW1lbENhc2VUb1dvcmRzKGNhbWVsQ2FzZVN0cmluZzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB3b3JkcyA9IGNhbWVsQ2FzZVN0cmluZy5yZXBsYWNlKC8oW0EtWl0pL2csICcgJDEnKTtcclxuICAgIHJldHVybiB3b3Jkcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmRzLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICBhcnJheVRvU3RyaW5nKGFycmF5OiBhbnkpIHtcclxuICAgIHJldHVybiBhcnJheS5qb2luKCcsICcpO1xyXG4gIH1cclxuICBvYmplY3RLZXlzKG9iajogYW55KTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA+IDAgPyBPYmplY3Qua2V5cyhvYmopIDogW107XHJcbiAgfVxyXG4gIFxyXG5cclxuICBjaGVja0lmQWxsU2VsZWN0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmV2ZXJ5KChpdGVtOmFueSkgPT4gaXRlbS5pc0NoZWNrZWQpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RBbGwoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3Qgc2VsZWN0QWxsID0gZXZlbnQuY3VycmVudFRhcmdldC5jaGVja2VkO1xyXG4gICAgdGhpcy5maWx0ZXJzLmZvckVhY2goKGl0ZW06IGFueSkgPT4gaXRlbS5pc0NoZWNrZWQgPSBzZWxlY3RBbGwpO1xyXG4gIH1cclxuXHJcbiAgIGdldENoZWNrZWRJZHMoZmlsdGVyczphbnkpIHtcclxuICAgIGNvbnN0IGNoZWNrZWRJZHMgPSBmaWx0ZXJzLmZpbHRlcigoZmlsdGVyOmFueSkgPT4gZmlsdGVyLmlzQ2hlY2tlZCkubWFwKChmaWx0ZXI6YW55KSA9PiBmaWx0ZXIuaWQpO1xyXG4gICAgcmV0dXJuIGNoZWNrZWRJZHM7XHJcbn1cclxuXHJcbmFwcGx5RmlsdGVyKCl7XHJcbiAgdGhpcy5jdXJyZW50UGFnZSA9IDFcclxuICB0aGlzLnNob3dGaWx0ZXJzID0gZmFsc2VcclxuICB0aGlzLmdldEFjdGl2aXR5TG9ncygpO1xyXG59XHJcbmFwcGx5RmlsdGVycyhldmVudDphbnkpe1xyXG4gIGNvbnN0IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xyXG4gIGlmIChldmVudD8ubGVuZ3RoKSB7XHJcbiAgICBldmVudC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQuRGVzY3JpcHRpb24gPT09IFwiU3RhdHVzIExvZ3NcIikge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyQnlTdGF0dXMgPSBlbGVtZW50Lklzc3Vlcy5tYXAoKHZhbDogYW55KSA9PiB2YWw/LmlkKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgdGhpcy5jdXJyZW50UGFnZSA9IDFcclxuICBsZXQgZmlsdGVyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcclxuICAgIGxpbWl0OiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgb2Zmc2V0OiB0aGlzLmN1cnJlbnRQYWdlLFxyXG4gICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICBsb2dUeXBlRmlsdGVycyA6IHRoaXMuZmlsdGVyQnlTdGF0dXMsXHJcbiAgfVxyXG4gIGlmICh0aGlzLmZpbHRlclN0YXJ0RGF0ZSkge1xyXG4gICAgZmlsdGVycy5zdGFydERhdGUgPSBkYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5maWx0ZXJTdGFydERhdGUsICd5eXl5LU1NLWRkJylcclxuICB9XHJcbiAgaWYgKHRoaXMuZmlsdGVyRW5kRGF0ZSkge1xyXG4gICAgZmlsdGVycy5lbmREYXRlID0gZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZmlsdGVyRW5kRGF0ZSwgJ3l5eXktTU0tZGQnKVxyXG4gIH1cclxuIFxyXG4gICAgdGhpcy5nZXRBY3Rpdml0eUxvZ3MoKVxyXG59XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImFjdGl2aXR5LWNhcmRcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYWdlU3RhdGUkIHwgYXN5bmMgYXMgcGFnZVN0YXRlXCIgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInBhZ2VTdGF0ZVwiID5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xvYWRlZCdcIiAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPkFjdGl2aXR5IExvZ3M8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBtZS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmeC1kYXRlLXJhbmdlIGZvcm0tY29udHJvbCBwcy0xNFwiIHN0eWxlPVwibWluLXdpZHRoOiAyNjBweCAhaW1wb3J0YW50O1wiIHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgbmd4RGF0ZXJhbmdlcGlja2VyTWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZHJvcHNdPVwiJ2Rvd24nXCIgW29wZW5zXT1cIidyaWdodCdcIiBbcmFuZ2VzXT1cInJhbmdlc1wiIFtzaG93Q3VzdG9tUmFuZ2VMYWJlbF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJmYWxzZVwiIFtrZWVwQ2FsZW5kYXJPcGVuaW5nV2l0aFJhbmdlXT1cInRydWVcIiBbc2hvd0NhbmNlbF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVJhbmdlXCIgW2F1dG9BcHBseV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9jYWxlXT1cInsgZm9ybWF0OiAnREQtTU0tWVlZWScsIGZpcnN0RGF5OiAxLCBtb250aE5hbWVzOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZXNVcGRhdGVkKT1cImRhdGVjaGFuZ2UoJGV2ZW50KVwiIG5hbWU9XCJkYXRlcmFuZ2VcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMuMzMzMyAxLjY2NjYzVjQuOTk5OTZNNi42NjY2NyAxLjY2NjYzVjQuOTk5OTZNMi41IDguMzMzMjlIMTcuNU00LjE2NjY3IDMuMzMzMjlIMTUuODMzM0MxNi43NTM4IDMuMzMzMjkgMTcuNSA0LjA3OTQ4IDE3LjUgNC45OTk5NlYxNi42NjY2QzE3LjUgMTcuNTg3MSAxNi43NTM4IDE4LjMzMzMgMTUuODMzMyAxOC4zMzMzSDQuMTY2NjdDMy4yNDYxOSAxOC4zMzMzIDIuNSAxNy41ODcxIDIuNSAxNi42NjY2VjQuOTk5OTZDMi41IDQuMDc5NDggMy4yNDYxOSAzLjMzMzI5IDQuMTY2NjcgMy4zMzMyOVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2hhYmxlIHNpbmdsZS1zZWxlY3Qgc3RvcmUgZmlsdGVyIChzZWxmLWNvbnRhaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93cyBzdG9yZSBuYW1lLCBzZW5kcyBzdG9yZUlkIHRvIHRoZSBiYWNrZW5kKS4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZS1maWx0ZXIgcG9zaXRpb24tcmVsYXRpdmUgbWUtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZVN0b3JlRHJvcGRvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMTgwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgc2VsZWN0ZWRTdG9yZU5hbWUgPyBzZWxlY3RlZFN0b3JlTmFtZSA6ICdBbGwgU3RvcmVzJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInNlbGVjdGVkU3RvcmVOYW1lXCIgKGNsaWNrKT1cImNsZWFyU3RvcmUoJGV2ZW50KVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm1lLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUgNUw1IDE1TTUgNWwxMCAxMFwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTUgNy41TDEwIDEyLjVMMTUgNy41XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN0b3JlRHJvcGRvd25PcGVuXCIgY2xhc3M9XCJjYXJkIHB5LTEgcG9zaXRpb24tYWJzb2x1dGUgei0xIGVuZC0wXCIgc3R5bGU9XCJtaW4td2lkdGg6IDIyMHB4OyBtYXgtaGVpZ2h0OiAyODBweDsgb3ZlcmZsb3cteTogYXV0bzsgdG9wOiA0NHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0zIHB5LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW3ZhbHVlXT1cInN0b3JlU2VhcmNoXCIgKGlucHV0KT1cIm9uU3RvcmVTZWFyY2goJGV2ZW50KVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3RvcmVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBweS0yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIG1iLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cIiFzZWxlY3RlZFN0b3JlSWQgPyAnYWN0aXZlJyA6ICcnXCIgY2xhc3M9XCJweC01IGZ3LXNlbWlib2xkIGN1cnNvci1wb2ludGVyIHB5LTJcIiAoY2xpY2spPVwic2VsZWN0U3RvcmUoe30pXCI+QWxsIFN0b3JlczwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgcyBvZiBmaWx0ZXJlZFN0b3JlT3B0aW9uc1wiIFtuZ0NsYXNzXT1cInNlbGVjdGVkU3RvcmVJZCA9PT0gcy5zdG9yZUlkID8gJ2FjdGl2ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInB4LTUgZnctc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgcHktMlwiIChjbGljayk9XCJzZWxlY3RTdG9yZShzKVwiPnt7IHMuc3RvcmVOYW1lIH19PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiIWZpbHRlcmVkU3RvcmVPcHRpb25zLmxlbmd0aFwiIGNsYXNzPVwicHgtNSBweS0yIHRleHQtbXV0ZWRcIj5ObyBzdG9yZXMgZm91bmQ8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZmlsdGVycyBbZGF0YU9iamVjdF09XCJkYXRhT2JqZWN0XCIgKGFwcGxpZWRGaWx0ZXJzKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+PC9saWItZmlsdGVycz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9nTGlzdD8ubGVuZ3RoXCIgPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsb2dMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbT8udHlwZSA9PT0gJ2FuZ2xlQ2hhbmdlJzsgZWxzZSBub3JtYWxMb2dcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibG9nLWNhcmQgbWItOCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkZXIgbWUtM1wiPnt7IHN0b3JlTmFtZUJ5SWQoaXRlbS5zdG9yZUlkKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYW5nbGUtYmFkZ2VcIj5BbmdsZSBDaGFuZ2VkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1YiBtdC0xXCI+e3sgaXRlbS5zdHJlYW0gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZSBtZS01XCI+e3sgaXRlbS5kYXRlIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYW5nbGUtZXllLWJ0blwiIHRpdGxlPVwiUHJldmlldyBleHBlY3RlZCB2cyBhY3R1YWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5BbmdsZVByZXZpZXcoaXRlbSwgYW5nbGVQcmV2aWV3KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yIDEyczMuNS03IDEwLTcgMTAgNyAxMCA3LTMuNSA3LTEwIDctMTAtNy0xMC03WlwiIHN0cm9rZT1cIiMxNzVDRDNcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIzXCIgc3Ryb2tlPVwiIzE3NUNEM1wiIHN0cm9rZS13aWR0aD1cIjEuOFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxMb2c+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nLWNhcmQgbWItOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWUtMTAgdy03NVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZSBtZS00XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyIG1lLTRcIj57e2NhbWVsQ2FzZVRvV29yZHMoaXRlbT8ubG9nU3ViVHlwZSl9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lXCI+e3tmb3JtYXREYXRlKGl0ZW0/LmRhdGUpfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1YlwiPnt7YXJyYXlUb1N0cmluZyhpdGVtPy5jaGFuZ2VzKX19IDxzcGFuICpuZ0lmPVwiaXRlbT8uZXZlbnRUeXBlXCI+e3tpdGVtPy5ldmVudFR5cGUgKyAnZCd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1YlwiPkJ5IHt7aXRlbT8udXNlck5hbWV9fSAtIHt7aXRlbT8uZW1haWx9fTwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiICpuZ0Zvcj1cImxldCBrZXkgb2Ygb2JqZWN0S2V5cyhpdGVtPy51cGRhdGVkVmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiaGVhZGVyIG1lLTRcIj57e2NhbWVsQ2FzZVRvV29yZHMoa2V5KX19PC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWIgdy03NSB0b29sdGlwLWNvbnRhaW5lclwiICBjb250YWluZXI9XCJib2R5XCI+PGI+e3sga2V5IH19PC9iPiBoYXMgYmVlbiB1cGRhdGVkIGZyb20gPHNwYW4gY2xhc3M9XCJyZWQtYmFkZ2VcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0/LnVwZGF0ZWRWYWx1ZVtrZXldLnByZXZpb3VzID09PVwiXCIgfHwgaXRlbT8udXBkYXRlZFZhbHVlW2tleV0ucHJldmlvdXMgPT09bnVsbHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPy51cGRhdGVkVmFsdWVba2V5XS5wcmV2aW91cyA9PT11bmRlZmluZWQpP1wibnVsbFwiOml0ZW0/LnVwZGF0ZWRWYWx1ZVtrZXldLnByZXZpb3VzfX08L3NwYW4+IHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyZWVuLWJhZGdlXCI+IHt7aXRlbT8udXBkYXRlZFZhbHVlW2tleV0uY3VycmVudCA9PT0gXCJcIiB8fCBpdGVtPy51cGRhdGVkVmFsdWVba2V5XS5jdXJyZW50ID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCB8fGl0ZW0/LnVwZGF0ZWRWYWx1ZVtrZXldLmN1cnJlbnQgPT09IHVuZGVmaW5lZD9cIm51bGxcIjogaXRlbT8udXBkYXRlZFZhbHVlW2tleV0uY3VycmVudCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAgdGV4dC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tjYW1lbENhc2VUb1dvcmRzKGl0ZW0/LmxvZ1R5cGUpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsb2dMaXN0Py5sZW5ndGhcIiBjbGFzcz1cIm15LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLXBhZ2luYXRpb24gW2l0ZW1zUGVyUGFnZV09XCJpdGVtc1BlclBhZ2VcIiBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIiBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCIgW3BhZ2luYXRpb25TaXplc109XCJwYWdpbmF0aW9uU2l6ZXNcIiBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCIgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICAgICAgICAgIDwvZGl2PiAgICBcclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9nTGlzdD8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyB3aWR0aD1cIjMwMHB4XCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xvYWRpbmcnXCIgID5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuXHJcbjwhLS0gQW5nbGUtY2hhbmdlIHByZXZpZXcgbW9kYWw6IEV4cGVjdGVkIHZzIEFjdHVhbCBjYW1lcmEgaW1hZ2VzLiAtLT5cclxuPG5nLXRlbXBsYXRlICNhbmdsZVByZXZpZXcgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlciBtZS0zXCI+e3sgcHJldmlld0l0ZW0/LnN0cmVhbSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbmdsZS1iYWRnZVwiPkFuZ2xlIENoYW5nZWQ8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgbWItNFwiPnt7IHN0b3JlTmFtZUJ5SWQocHJldmlld0l0ZW0/LnN0b3JlSWQpIH19IMK3IHt7IHByZXZpZXdJdGVtPy5kYXRlIH19PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFuZ2xlLWltZy13cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInByZXZpZXdJdGVtPy5leHBlY3RlZFwiIFtzcmNdPVwicHJldmlld0l0ZW0uZXhwZWN0ZWRcIiBhbHQ9XCJFeHBlY3RlZCBjYW1lcmEgYW5nbGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcHJldmlld0l0ZW0/LmV4cGVjdGVkXCIgY2xhc3M9XCJhbmdsZS1pbWctZW1wdHlcIj5ObyBleHBlY3RlZCBpbWFnZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYW5nbGUtaW1nLWxhYmVsXCI+RXhwZWN0ZWQ8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYW5nbGUtaW1nLXdyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwicHJldmlld0l0ZW0/LmFjdHVhbFwiIFtzcmNdPVwicHJldmlld0l0ZW0uYWN0dWFsXCIgYWx0PVwiQWN0dWFsIGNhbWVyYSBhbmdsZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFwcmV2aWV3SXRlbT8uYWN0dWFsXCIgY2xhc3M9XCJhbmdsZS1pbWctZW1wdHlcIj5ObyBhY3R1YWwgaW1hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFuZ2xlLWltZy1sYWJlbFwiPkFjdHVhbDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|
|
417
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktbG9ncy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2FjdGl2aXR5LWxvZ3MvYWN0aXZpdHktbG9ncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2Utc2V0dGluZ3Mvc3JjL2xpYi9jb21wb25lbnRzL2FjdGl2aXR5LWxvZ3MvYWN0aXZpdHktbG9ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQXFDLE1BQU0sZUFBZSxDQUFDO0FBRzlHLE9BQVEsS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMzQixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBQ25DLE9BQU8sUUFBUSxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7O0FBQzNDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQU92QixNQUFNLE9BQU8scUJBQXFCO0lBaU1aO0lBQXNDO0lBQStCO0lBL0x6RixLQUFLLEdBQUcsS0FBSyxDQUFBO0lBQ2IsY0FBYyxDQUFNO0lBQ3BCLDhFQUE4RTtJQUM5RSx3RUFBd0U7SUFDeEUsWUFBWSxHQUFVLEVBQUUsQ0FBQyxDQUFVLHNDQUFzQztJQUN6RSxvQkFBb0IsR0FBVSxFQUFFLENBQUMsQ0FBRSx1QkFBdUI7SUFDMUQsV0FBVyxHQUFXLEVBQUUsQ0FB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QUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2lCQUNqRTtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQTtRQUNwQixJQUFJLE9BQU8sR0FBd0I7WUFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVztZQUN4QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsY0FBYyxFQUFHLElBQUksQ0FBQyxjQUFjO1NBQ3JDLENBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsT0FBTyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUE7U0FDM0U7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsT0FBTyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUE7U0FDdkU7UUFFQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7SUFDMUIsQ0FBQzt3R0ExWlkscUJBQXFCOzRGQUFyQixxQkFBcUIsdUhDakJsQyx5N1pBd0xBOzs0RkR2S2EscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjs0SUFpQjdCLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBDbGllbnRBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2xpZW50LWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0ICBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuaW1wb3J0IFwiZGF5anMvbG9jYWxlL2VuXCI7XHJcbmltcG9ydCB1dGMgZnJvbSBcImRheWpzL3BsdWdpbi91dGNcIjtcclxuaW1wb3J0IHRpbWV6b25lIGZyb20gXCJkYXlqcy9wbHVnaW4vdGltZXpvbmVcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5kYXlqcy5leHRlbmQodXRjKTtcclxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWFjdGl2aXR5LWxvZ3MnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hY3Rpdml0eS1sb2dzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYWN0aXZpdHktbG9ncy5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjdGl2aXR5TG9nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIGRheWpzID0gZGF5anNcclxuICBmaWx0ZXJCeVN0YXR1czogYW55O1xyXG4gIC8vIC0tLS0tIFNlbGYtY29udGFpbmVkIHN0b3JlIGZpbHRlciAoc2VhcmNoYWJsZSBzaW5nbGUtc2VsZWN0KS4gS2VwdCBsb2NhbCB0b1xyXG4gIC8vIHRoaXMgY29tcG9uZW50IHNvIGl0IGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgc2hhcmVkIGxpYi1maWx0ZXJzLiAtLS0tLVxyXG4gIHN0b3JlT3B0aW9uczogYW55W10gPSBbXTsgICAgICAgICAgLy8gZnVsbCBsaXN0OiBbeyBzdG9yZUlkLCBzdG9yZU5hbWUgfV1cclxuICBmaWx0ZXJlZFN0b3JlT3B0aW9uczogYW55W10gPSBbXTsgIC8vIHNlYXJjaC1maWx0ZXJlZCB2aWV3XHJcbiAgc3RvcmVTZWFyY2g6IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdGVkU3RvcmVJZDogc3RyaW5nID0gJyc7XHJcbiAgc2VsZWN0ZWRTdG9yZU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIHN0b3JlRHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5kcm9wZG93bicpKSB7XHJcbiAgICAgIHRoaXMuc2hvd0ZpbHRlcnMgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENsb3NlIHRoZSBzdG9yZSBkcm9wZG93biB3aGVuIGNsaWNraW5nIG91dHNpZGUgaXQuXHJcbiAgICBpZiAoIXRhcmdldC5jbG9zZXN0KCcuc3RvcmUtZmlsdGVyJykpIHtcclxuICAgICAgdGhpcy5zdG9yZURyb3Bkb3duT3BlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlU3RvcmVEcm9wZG93bihldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnN0b3JlRHJvcGRvd25PcGVuID0gIXRoaXMuc3RvcmVEcm9wZG93bk9wZW47XHJcbiAgfVxyXG5cclxuICBvblN0b3JlU2VhcmNoKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHRlcm0gPSAoZXZlbnQ/LnRhcmdldD8udmFsdWUgfHwgJycpLnRyaW0oKTtcclxuICAgIHRoaXMuc3RvcmVTZWFyY2ggPSB0ZXJtO1xyXG4gICAgdGhpcy5maWx0ZXJlZFN0b3JlT3B0aW9ucyA9IHRlcm1cclxuICAgICAgPyB0aGlzLnN0b3JlT3B0aW9ucy5maWx0ZXIoKHMpID0+IG5ldyBSZWdFeHAodGVybSwgJ2knKS50ZXN0KHMuc3RvcmVOYW1lIHx8ICcnKSlcclxuICAgICAgOiB0aGlzLnN0b3JlT3B0aW9ucy5zbGljZSgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0U3RvcmUoc3RvcmU6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlSWQgPSBzdG9yZT8uc3RvcmVJZCB8fCAnJztcclxuICAgIHRoaXMuc2VsZWN0ZWRTdG9yZU5hbWUgPSBzdG9yZT8uc3RvcmVOYW1lIHx8ICcnO1xyXG4gICAgdGhpcy5zdG9yZURyb3Bkb3duT3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLmdldEFjdGl2aXR5TG9ncygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTdG9yZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVJZCA9ICcnO1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlTmFtZSA9ICcnO1xyXG4gICAgdGhpcy5zdG9yZVNlYXJjaCA9ICcnO1xyXG4gICAgdGhpcy5maWx0ZXJlZFN0b3JlT3B0aW9ucyA9IHRoaXMuc3RvcmVPcHRpb25zLnNsaWNlKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMuZ2V0QWN0aXZpdHlMb2dzKCk7XHJcbiAgfVxyXG5cclxuICBpdGVtc1BlclBhZ2UgPSAxMFxyXG4gIGN1cnJlbnRQYWdlID0gMVxyXG4gIHRvdGFsSXRlbXMgPSAwXHJcbiAgcGFnaW5hdGlvblNpemVzID0gWzEwLCAyMCwgMzBdXHJcbiAgcGFnZVNpemUgPSAxMFxyXG4gIHNlbGVjdGVkRGF0ZVJhbmdlOiBhbnkgPSB7XHJcbiAgICBzdGFydERhdGU6IHRoaXMuZGF5anMoKS5zdWJ0cmFjdCgzMCwgXCJkYXlzXCIpLFxyXG4gICAgZW5kRGF0ZTogdGhpcy5kYXlqcygpXHJcbiAgfTtcclxuICBjbGllbnRMaXN0OiBhbnkgPSBbXVxyXG4gIHNlbGVjdGVkQ2xpZW50OiBhbnlcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG4gIGxvZ0xpc3Q6IGFueTtcclxuICBmaWx0ZXJTdGFydERhdGU6IHN0cmluZyA9IHRoaXMuZGF5anMoKS5zdWJ0cmFjdCgzMCwgXCJkYXlzXCIpLnRvSVNPU3RyaW5nKClcclxuICBmaWx0ZXJFbmREYXRlOiBzdHJpbmcgPXRoaXMuZGF5anMoKS5zdWJ0cmFjdCgwLCBcImRheXNcIikudG9JU09TdHJpbmcoKVxyXG4gIHNob3dGaWx0ZXJzOmJvb2xlYW4gPSBmYWxzZVxyXG4gIHBhZ2VTdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PCdsb2FkZWQnIHwgJ2xvYWRpbmcnPignbG9hZGluZycpO1xyXG4gIGZpbHRlcnMgPSBbXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOidCcmFuZCBkZXRhaWxzJyxcclxuICAgICAgaWQ6J2JyYW5kRGV0YWlscycsXHJcbiAgICAgIGlzQ2hlY2tlZDp0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDonQ29uZmlndXJhdGlvbicsXHJcbiAgICAgIGlkOidjb25maWd1cmF0aW9uJyxcclxuICAgICAgaXNDaGVja2VkOnRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOidEb2N1bWVudHMnLFxyXG4gICAgICBpZDonZG9jdW1lbnRzJyxcclxuICAgICAgaXNDaGVja2VkOnRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOidTdG9yZXMnLFxyXG4gICAgICBpZDonc3RvcmVzJyxcclxuICAgICAgaXNDaGVja2VkOnRydWVcclxuICAgIH0sICAgXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOidDbHVzdGVycycsXHJcbiAgICAgIGlkOidjbHVzdGVyJyxcclxuICAgICAgaXNDaGVja2VkOnRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOidUZWFtcycsXHJcbiAgICAgIGlkOid0ZWFtcycsXHJcbiAgICAgIGlzQ2hlY2tlZDp0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDonU3Vic2NyaXB0aW9uJyxcclxuICAgICAgaWQ6J3N1YnNjcmlwdGlvbicsXHJcbiAgICAgIGlzQ2hlY2tlZDp0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBsYWJlbDonSW52b2ljZScsXHJcbiAgICAgIGlkOidpbnZvaWNlJyxcclxuICAgICAgaXNDaGVja2VkOnRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGxhYmVsOidCaWxsaW5nJyxcclxuICAgICAgaWQ6J2JpbGxpbmcnLFxyXG4gICAgICBpc0NoZWNrZWQ6dHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonQ2FtZXJhJyxcclxuICAgICAgaWQ6J2NhbWVyYXMnLFxyXG4gICAgICBpc0NoZWNrZWQ6dHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonWm9uZScsXHJcbiAgICAgIGlkOid6b25lJyxcclxuICAgICAgaXNDaGVja2VkOnRydWVcclxuICAgIH0sXHJcbiAgXVxyXG4gIGRhdGFPYmplY3Q6IGFueSA9IFtcclxuICAgIHsgRGVzY3JpcHRpb246ICdTdGF0dXMgTG9ncycsIElzc3Vlczpbe1xyXG4gICAgICB0ZXh0OidCcmFuZCBkZXRhaWxzJyxcclxuICAgICAgaWQ6J2JyYW5kRGV0YWlscycsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0ZXh0OidDb25maWd1cmF0aW9uJyxcclxuICAgICAgaWQ6J2NvbmZpZ3VyYXRpb24nLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonRG9jdW1lbnRzJyxcclxuICAgICAgaWQ6J2RvY3VtZW50cycsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0ZXh0OidTdG9yZXMnLFxyXG4gICAgICBpZDonc3RvcmVzJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRleHQ6J0NhbWVyYScsXHJcbiAgICAgIGlkOidjYW1lcmFzJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRleHQ6J0NsdXN0ZXJzJyxcclxuICAgICAgaWQ6J2NsdXN0ZXInLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonVXNlcnMnLFxyXG4gICAgICBpZDondXNlcnMnLCBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRleHQ6J1RlYW1zJyxcclxuICAgICAgaWQ6J3RlYW1zJywgXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0ZXh0OidTdWJzY3JpcHRpb24nLFxyXG4gICAgICBpZDonc3Vic2NyaXB0aW9uJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonSW52b2ljZScsXHJcbiAgICAgIGlkOidpbnZvaWNlJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonQmlsbGluZycsXHJcbiAgICAgIGlkOidiaWxsaW5nJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonWm9uZScsXHJcbiAgICAgIGlkOid6b25lJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdGV4dDonQW5nbGUgQ2hhbmdlJyxcclxuICAgICAgaWQ6J2FuZ2xlQ2hhbmdlJ1xyXG4gICAgfSxcclxuICBdfVxyXG4gIF1cclxuICAvLyBBbmdsZS1jaGFuZ2UgaW1hZ2UgcHJldmlldyAob3BlbmVkIGZyb20gdGhlIGV5ZSBpY29uIG9uIGFuIGFuZ2xlIHJvdykuXG4gIHByZXZpZXdJdGVtOiBhbnkgPSBudWxsO1xuXG4gIG9wZW5BbmdsZVByZXZpZXcoaXRlbTogYW55LCB0cGw6IGFueSkge1xuICAgIHRoaXMucHJldmlld0l0ZW0gPSBpdGVtO1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odHBsLCB7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbGcnIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhcGlTZXJ2aWNlOiBDbGllbnRBcGlTZXJ2aWNlLCBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsKSB7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UuY2xpZW50SWQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZSkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50SWQgPSBlXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlSWQgPSAnJ1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZU5hbWUgPSAnJ1xyXG4gICAgICAgIHRoaXMuc3RvcmVTZWFyY2ggPSAnJ1xyXG4gICAgICAgIHRoaXMubG9hZFN0b3Jlc0ZvckZpbHRlcigpXHJcbiAgICAgICAgdGhpcy5nZXRBY3Rpdml0eUxvZ3MoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbG9hZFN0b3Jlc0ZvckZpbHRlcigpIHtcclxuICAgIHRoaXMuYXBpU2VydmljZS5nZXRTdG9yZUxpc3QodGhpcy5jbGllbnRJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gcmVzPy5kYXRhPy5yZXN1bHQgfHwgW107XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZFN0b3JlT3B0aW9ucyA9IHRoaXMuc3RvcmVPcHRpb25zLnNsaWNlKCk7XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgLy8gU3RvcmUgbGlzdCB1bmF2YWlsYWJsZSDihpIgZW1wdHkgb3B0aW9uczsgbG9ncyBzdGlsbCBsb2FkIHVuZmlsdGVyZWQuXHJcbiAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMgPSBbXTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkU3RvcmVPcHRpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5wYWdlU3RhdGUkLmNvbXBsZXRlKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgc3RvcmVOYW1lQnlJZChzdG9yZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcyA9ICh0aGlzLnN0b3JlT3B0aW9ucyB8fCBbXSkuZmluZCgoeDogYW55KSA9PiB4LnN0b3JlSWQgPT09IHN0b3JlSWQpO1xyXG4gICAgcmV0dXJuIHM/LnN0b3JlTmFtZSB8fCBzdG9yZUlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWN0aXZpdHlMb2dzKCkge1xyXG4gICAgY29uc3QgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XHJcbiAgICB0aGlzLnBhZ2VTdGF0ZSQubmV4dCgnbG9hZGluZycpXHJcbiAgICBsZXQgZmlsdGVyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcclxuICAgICAgbGltaXQ6IHRoaXMucGFnZVNpemUsXHJcbiAgICAgIG9mZnNldDogdGhpcy5jdXJyZW50UGFnZSxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICAgIGxvZ1R5cGVGaWx0ZXJzIDogdGhpcy5maWx0ZXJCeVN0YXR1cyxcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpbHRlclN0YXJ0RGF0ZSkge1xyXG4gICAgICBmaWx0ZXJzLnN0YXJ0RGF0ZSA9IGRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmZpbHRlclN0YXJ0RGF0ZSwgJ3l5eXktTU0tZGQnKVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmlsdGVyRW5kRGF0ZSkge1xyXG4gICAgICBmaWx0ZXJzLmVuZERhdGUgPSBkYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5maWx0ZXJFbmREYXRlLCAneXl5eS1NTS1kZCcpXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFN0b3JlSWQpIHtcclxuICAgICAgZmlsdGVycy5zdG9yZUlkID0gdGhpcy5zZWxlY3RlZFN0b3JlSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYodGhpcy5nZXRDaGVja2VkSWRzKHRoaXMuZmlsdGVycyk/Lmxlbmd0aCl7XHJcbiAgICAvLyAgIGZpbHRlcnMubG9nVHlwZUZpbHRlcnMgPSB0aGlzLmdldENoZWNrZWRJZHModGhpcy5maWx0ZXJzKVxyXG4gICAgLy8gfVxyXG5cclxuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5maWx0ZXJCeVN0YXR1cyB8fCBbXTtcclxuICAgIGNvbnN0IGlzQW5nbGVDaGFuZ2UgPSBBcnJheS5pc0FycmF5KHR5cGVzKSAmJiB0eXBlcy5pbmNsdWRlcygnYW5nbGVDaGFuZ2UnKTtcclxuICAgIGlmIChpc0FuZ2xlQ2hhbmdlKSB7XHJcbiAgICAgIGNvbnN0IGFuZ2xlUGF5bG9hZDogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcclxuICAgICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgICBsaW1pdDogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgICBvZmZzZXQ6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgIH07XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU3RvcmVJZCkgeyBhbmdsZVBheWxvYWRbJ3N0b3JlSWQnXSA9IHRoaXMuc2VsZWN0ZWRTdG9yZUlkOyB9XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlclN0YXJ0RGF0ZSkgeyBhbmdsZVBheWxvYWRbJ3N0YXJ0RGF0ZSddID0gZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZmlsdGVyU3RhcnREYXRlLCAneXl5eS1NTS1kZCcpOyB9XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckVuZERhdGUpIHsgYW5nbGVQYXlsb2FkWydlbmREYXRlJ10gPSBkYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5maWx0ZXJFbmREYXRlLCAneXl5eS1NTS1kZCcpOyB9XHJcbiAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRBbmdsZUNoYW5nZUxvZ3MoYW5nbGVQYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VTdGF0ZSQubmV4dCgnbG9hZGVkJyk7XHJcbiAgICAgICAgICB0aGlzLmxvZ0xpc3QgPSBlPy5kYXRhPy5kYXRhIHx8IFtdO1xyXG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gZT8uZGF0YT8uY291bnQgfHwgMDtcclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucGFnZVN0YXRlJC5uZXh0KCdsb2FkZWQnKTtcclxuICAgICAgICAgIHRoaXMubG9nTGlzdCA9IFtdO1xyXG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMDtcclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47IC8vIHNlcGFyYXRlIG1vZGUg4oCUIHNraXAgdGhlIG5vcm1hbCBhY3Rpdml0eS1sb2cgY2FsbFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXBpU2VydmljZS5nZXRBY3Rpdml0eUxvZ3MoZmlsdGVycykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGUpID0+IHtcclxuICAgICAgICB0aGlzLnBhZ2VTdGF0ZSQubmV4dCgnbG9hZGVkJylcclxuICAgICAgICBpZiAoZT8uZGF0YT8uY291bnQpIHtcclxuICAgICAgICAgIHRoaXMubG9nTGlzdCA9IGUuZGF0YS5kYXRhXHJcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSBlLmRhdGEuY291bnRcclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubG9nTGlzdCA9IFtdXHJcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwXHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLnBhZ2VTdGF0ZSQubmV4dCgnbG9hZGVkJylcclxuICAgICAgICB0aGlzLmxvZ0xpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMudG90YWxJdGVtcyA9IDBcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIGRhdGVjaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50LnN0YXJ0RGF0ZSB8fCBldmVudC5lbmREYXRlKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxXHJcbiAgICAgIHRoaXMuZmlsdGVyU3RhcnREYXRlID0gdGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLnV0YygpLnRvSVNPU3RyaW5nKClcclxuICAgICAgdGhpcy5maWx0ZXJFbmREYXRlID0gdGhpcy5kYXlqcyhldmVudC5lbmREYXRlKS51dGMoKS50b0lTT1N0cmluZygpXHJcbiAgICAgIHRoaXMuZ2V0QWN0aXZpdHlMb2dzKClcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICByYW5nZXM6IGFueSA9IHtcclxuICAgIFRvZGF5OiBbdGhpcy5kYXlqcygpLCB0aGlzLmRheWpzKCldLFxyXG4gICAgWWVzdGVyZGF5OiBbdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsIFwiZGF5c1wiKSwgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsIFwiZGF5c1wiKV0sXHJcbiAgICBcIlRoaXMgV2Vla1wiOiBbdGhpcy5kYXlqcygpLnN1YnRyYWN0KDYsIFwiZGF5c1wiKSwgdGhpcy5kYXlqcygpXSxcclxuICAgIFwiTGFzdCBXZWVrXCI6IFtcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEzLCBcImRheXNcIikuc3RhcnRPZihcImRheXNcIiksXHJcbiAgICAgIHRoaXMuZGF5anMoKS5zdWJ0cmFjdCg3LCBcImRheXNcIikuZW5kT2YoXCJkYXlzXCIpLFxyXG4gICAgXSxcclxuICAgIFwiVGhpcyBNb250aFwiOiBbdGhpcy5kYXlqcygpLnN1YnRyYWN0KDMwLCBcImRheXNcIiksIC8vIFN0YXJ0IGRhdGUgaXMgMzAgZGF5cyBiZWZvcmUgdG9kYXlcclxuICAgICAgdGhpcy5kYXlqcygpXSwgXHJcbiAgICBcIkxhc3QgTW9udGhcIjogW1xyXG4gICAgICB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgXCJtb250aFwiKS5zdGFydE9mKFwibW9udGhcIiksXHJcbiAgICAgIHRoaXMuZGF5anMoKS5zdWJ0cmFjdCgxLCBcIm1vbnRoXCIpLmVuZE9mKFwibW9udGhcIiksXHJcbiAgICBdLFxyXG4gIH07XHJcblxyXG5cclxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZU9mZnNldFxyXG4gICAgdGhpcy5nZXRBY3Rpdml0eUxvZ3MoKVxyXG5cclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IG51bWJlcikgeyAgIFxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDEgXHJcbiAgICB0aGlzLnBhZ2VTaXplID0gcGFnZVNpemVcclxuICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gcGFnZVNpemVcclxuICAgIHRoaXMuZ2V0QWN0aXZpdHlMb2dzKClcclxuICB9XHJcblxyXG4gIGZvcm1hdERhdGUoaW5wdXREYXRlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHBhcnNlZERhdGUgPSB0aGlzLmRheWpzKGlucHV0RGF0ZSk7XHJcbiAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gcGFyc2VkRGF0ZS5mb3JtYXQoJ0RELU1NLVlZWVkgfCBoaDptbSBBJyk7XHJcbiAgICByZXR1cm4gZm9ybWF0dGVkRGF0ZTtcclxuICB9XHJcblxyXG4gIGNhbWVsQ2FzZVRvV29yZHMoY2FtZWxDYXNlU3RyaW5nOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHdvcmRzID0gY2FtZWxDYXNlU3RyaW5nLnJlcGxhY2UoLyhbQS1aXSkvZywgJyAkMScpO1xyXG4gICAgcmV0dXJuIHdvcmRzLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZHMuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIGFycmF5VG9TdHJpbmcoYXJyYXk6IGFueSkge1xyXG4gICAgcmV0dXJuIGFycmF5LmpvaW4oJywgJyk7XHJcbiAgfVxyXG4gIG9iamVjdEtleXMob2JqOiBhbnkpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID4gMCA/IE9iamVjdC5rZXlzKG9iaikgOiBbXTtcclxuICB9XHJcbiAgXHJcblxyXG4gIGNoZWNrSWZBbGxTZWxlY3RlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlcnMuZXZlcnkoKGl0ZW06YW55KSA9PiBpdGVtLmlzQ2hlY2tlZCk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdEFsbChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBzZWxlY3RBbGwgPSBldmVudC5jdXJyZW50VGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICB0aGlzLmZpbHRlcnMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiBpdGVtLmlzQ2hlY2tlZCA9IHNlbGVjdEFsbCk7XHJcbiAgfVxyXG5cclxuICAgZ2V0Q2hlY2tlZElkcyhmaWx0ZXJzOmFueSkge1xyXG4gICAgY29uc3QgY2hlY2tlZElkcyA9IGZpbHRlcnMuZmlsdGVyKChmaWx0ZXI6YW55KSA9PiBmaWx0ZXIuaXNDaGVja2VkKS5tYXAoKGZpbHRlcjphbnkpID0+IGZpbHRlci5pZCk7XHJcbiAgICByZXR1cm4gY2hlY2tlZElkcztcclxufVxyXG5cclxuYXBwbHlGaWx0ZXIoKXtcclxuICB0aGlzLmN1cnJlbnRQYWdlID0gMVxyXG4gIHRoaXMuc2hvd0ZpbHRlcnMgPSBmYWxzZVxyXG4gIHRoaXMuZ2V0QWN0aXZpdHlMb2dzKCk7XHJcbn1cclxuYXBwbHlGaWx0ZXJzKGV2ZW50OmFueSl7XHJcbiAgY29uc3QgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XHJcbiAgaWYgKGV2ZW50Py5sZW5ndGgpIHtcclxuICAgIGV2ZW50LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudC5EZXNjcmlwdGlvbiA9PT0gXCJTdGF0dXMgTG9nc1wiKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJCeVN0YXR1cyA9IGVsZW1lbnQuSXNzdWVzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICB0aGlzLmN1cnJlbnRQYWdlID0gMVxyXG4gIGxldCBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xyXG4gICAgbGltaXQ6IHRoaXMucGFnZVNpemUsXHJcbiAgICBvZmZzZXQ6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgIGxvZ1R5cGVGaWx0ZXJzIDogdGhpcy5maWx0ZXJCeVN0YXR1cyxcclxuICB9XHJcbiAgaWYgKHRoaXMuZmlsdGVyU3RhcnREYXRlKSB7XHJcbiAgICBmaWx0ZXJzLnN0YXJ0RGF0ZSA9IGRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmZpbHRlclN0YXJ0RGF0ZSwgJ3l5eXktTU0tZGQnKVxyXG4gIH1cclxuICBpZiAodGhpcy5maWx0ZXJFbmREYXRlKSB7XHJcbiAgICBmaWx0ZXJzLmVuZERhdGUgPSBkYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5maWx0ZXJFbmREYXRlLCAneXl5eS1NTS1kZCcpXHJcbiAgfVxyXG4gXHJcbiAgICB0aGlzLmdldEFjdGl2aXR5TG9ncygpXHJcbn1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiYWN0aXZpdHktY2FyZFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VTdGF0ZSQgfCBhc3luYyBhcyBwYWdlU3RhdGVcIiA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwicGFnZVN0YXRlXCIgPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbG9hZGVkJ1wiICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+QWN0aXZpdHkgTG9nczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG1lLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ4LWRhdGUtcmFuZ2UgZm9ybS1jb250cm9sIHBzLTE0XCIgc3R5bGU9XCJtaW4td2lkdGg6IDI2MHB4ICFpbXBvcnRhbnQ7XCIgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBuZ3hEYXRlcmFuZ2VwaWNrZXJNZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkcm9wc109XCInZG93bidcIiBbb3BlbnNdPVwiJ3JpZ2h0J1wiIFtyYW5nZXNdPVwicmFuZ2VzXCIgW3Nob3dDdXN0b21SYW5nZUxhYmVsXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbHdheXNTaG93Q2FsZW5kYXJzXT1cImZhbHNlXCIgW2tlZXBDYWxlbmRhck9wZW5pbmdXaXRoUmFuZ2VdPVwidHJ1ZVwiIFtzaG93Q2FuY2VsXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWREYXRlUmFuZ2VcIiBbYXV0b0FwcGx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2NhbGVdPVwieyBmb3JtYXQ6ICdERC1NTS1ZWVlZJywgZmlyc3REYXk6IDEsIG1vbnRoTmFtZXM6IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlc1VwZGF0ZWQpPVwiZGF0ZWNoYW5nZSgkZXZlbnQpXCIgbmFtZT1cImRhdGVyYW5nZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMy4zMzMzIDEuNjY2NjNWNC45OTk5Nk02LjY2NjY3IDEuNjY2NjNWNC45OTk5Nk0yLjUgOC4zMzMyOUgxNy41TTQuMTY2NjcgMy4zMzMyOUgxNS44MzMzQzE2Ljc1MzggMy4zMzMyOSAxNy41IDQuMDc5NDggMTcuNSA0Ljk5OTk2VjE2LjY2NjZDMTcuNSAxNy41ODcxIDE2Ljc1MzggMTguMzMzMyAxNS44MzMzIDE4LjMzMzNINC4xNjY2N0MzLjI0NjE5IDE4LjMzMzMgMi41IDE3LjU4NzEgMi41IDE2LjY2NjZWNC45OTk5NkMyLjUgNC4wNzk0OCAzLjI0NjE5IDMuMzMzMjkgNC4xNjY2NyAzLjMzMzI5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaGFibGUgc2luZ2xlLXNlbGVjdCBzdG9yZSBmaWx0ZXIgKHNlbGYtY29udGFpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dzIHN0b3JlIG5hbWUsIHNlbmRzIHN0b3JlSWQgdG8gdGhlIGJhY2tlbmQpLiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JlLWZpbHRlciBwb3NpdGlvbi1yZWxhdGl2ZSBtZS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidG9nZ2xlU3RvcmVEcm9wZG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tb3V0bGluZSBidG4tb3V0bGluZS1kZWZhdWx0IHJvdW5kZWQtMyB0ZXh0LW5vd3JhcCBib3JkZXItdmFsIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAxODBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBzZWxlY3RlZFN0b3JlTmFtZSA/IHNlbGVjdGVkU3RvcmVOYW1lIDogJ0FsbCBTdG9yZXMnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwic2VsZWN0ZWRTdG9yZU5hbWVcIiAoY2xpY2spPVwiY2xlYXJTdG9yZSgkZXZlbnQpXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIGNsYXNzPVwibWUtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNSA1TDUgMTVNNSA1bDEwIDEwXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSA3LjVMMTAgMTIuNUwxNSA3LjVcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3RvcmVEcm9wZG93bk9wZW5cIiBjbGFzcz1cImNhcmQgcHktMSBwb3NpdGlvbi1hYnNvbHV0ZSB6LTEgZW5kLTBcIiBzdHlsZT1cIm1pbi13aWR0aDogMjIwcHg7IG1heC1oZWlnaHQ6IDI4MHB4OyBvdmVyZmxvdy15OiBhdXRvOyB0b3A6IDQ0cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTMgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbdmFsdWVdPVwic3RvcmVTZWFyY2hcIiAoaW5wdXQpPVwib25TdG9yZVNlYXJjaCgkZXZlbnQpXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBzdG9yZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHB5LTJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbWItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwiIXNlbGVjdGVkU3RvcmVJZCA/ICdhY3RpdmUnIDogJydcIiBjbGFzcz1cInB4LTUgZnctc2VtaWJvbGQgY3Vyc29yLXBvaW50ZXIgcHktMlwiIChjbGljayk9XCJzZWxlY3RTdG9yZSh7fSlcIj5BbGwgU3RvcmVzPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBzIG9mIGZpbHRlcmVkU3RvcmVPcHRpb25zXCIgW25nQ2xhc3NdPVwic2VsZWN0ZWRTdG9yZUlkID09PSBzLnN0b3JlSWQgPyAnYWN0aXZlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtNSBmdy1zZW1pYm9sZCBjdXJzb3ItcG9pbnRlciBweS0yXCIgKGNsaWNrKT1cInNlbGVjdFN0b3JlKHMpXCI+e3sgcy5zdG9yZU5hbWUgfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCIhZmlsdGVyZWRTdG9yZU9wdGlvbnMubGVuZ3RoXCIgY2xhc3M9XCJweC01IHB5LTIgdGV4dC1tdXRlZFwiPk5vIHN0b3JlcyBmb3VuZDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1maWx0ZXJzIFtkYXRhT2JqZWN0XT1cImRhdGFPYmplY3RcIiAoYXBwbGllZEZpbHRlcnMpPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIj48L2xpYi1maWx0ZXJzPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2dMaXN0Py5sZW5ndGhcIiA+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxvZ0xpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy50eXBlID09PSAnYW5nbGVDaGFuZ2UnOyBlbHNlIG5vcm1hbExvZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsb2ctY2FyZCBtYi04IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlciBtZS0zXCI+e3sgc3RvcmVOYW1lQnlJZChpdGVtLnN0b3JlSWQpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbmdsZS1iYWRnZVwiPkFuZ2xlIENoYW5nZWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViIG10LTFcIj57eyBpdGVtLnN0cmVhbSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lIG1lLTVcIj57eyBpdGVtLmRhdGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhbmdsZS1leWUtYnRuXCIgdGl0bGU9XCJQcmV2aWV3IGV4cGVjdGVkIHZzIGFjdHVhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkFuZ2xlUHJldmlldyhpdGVtLCBhbmdsZVByZXZpZXcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIgMTJzMy41LTcgMTAtNyAxMCA3IDEwIDctMy41IDctMTAgNy0xMC03LTEwLTdaXCIgc3Ryb2tlPVwiIzE3NUNEM1wiIHN0cm9rZS13aWR0aD1cIjEuOFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjNcIiBzdHJva2U9XCIjMTc1Q0QzXCIgc3Ryb2tlLXdpZHRoPVwiMS44XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbExvZz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2ctY2FyZCBtYi04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtZS0xMCB3LTc1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5lIG1lLTRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgbWUtNFwiPnt7Y2FtZWxDYXNlVG9Xb3JkcyhpdGVtPy5sb2dTdWJUeXBlKX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWVcIj57e2Zvcm1hdERhdGUoaXRlbT8uZGF0ZSl9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViXCI+e3thcnJheVRvU3RyaW5nKGl0ZW0/LmNoYW5nZXMpfX0gPHNwYW4gKm5nSWY9XCJpdGVtPy5ldmVudFR5cGVcIj57e2l0ZW0/LmV2ZW50VHlwZSArICdkJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViXCI+Qnkge3tpdGVtPy51c2VyTmFtZX19IC0ge3tpdGVtPy5lbWFpbH19PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCIgKm5nRm9yPVwibGV0IGtleSBvZiBvYmplY3RLZXlzKGl0ZW0/LnVwZGF0ZWRWYWx1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJoZWFkZXIgbWUtNFwiPnt7Y2FtZWxDYXNlVG9Xb3JkcyhrZXkpfX08L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1YiB3LTc1IHRvb2x0aXAtY29udGFpbmVyXCIgIGNvbnRhaW5lcj1cImJvZHlcIj48Yj57eyBrZXkgfX08L2I+IGhhcyBiZWVuIHVwZGF0ZWQgZnJvbSA8c3BhbiBjbGFzcz1cInJlZC1iYWRnZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbT8udXBkYXRlZFZhbHVlW2tleV0ucHJldmlvdXMgPT09XCJcIiB8fCBpdGVtPy51cGRhdGVkVmFsdWVba2V5XS5wcmV2aW91cyA9PT1udWxsfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0/LnVwZGF0ZWRWYWx1ZVtrZXldLnByZXZpb3VzID09PXVuZGVmaW5lZCk/XCJudWxsXCI6aXRlbT8udXBkYXRlZFZhbHVlW2tleV0ucHJldmlvdXN9fTwvc3Bhbj4gdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JlZW4tYmFkZ2VcIj4ge3tpdGVtPy51cGRhdGVkVmFsdWVba2V5XS5jdXJyZW50ID09PSBcIlwiIHx8IGl0ZW0/LnVwZGF0ZWRWYWx1ZVtrZXldLmN1cnJlbnQgPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIHx8aXRlbT8udXBkYXRlZFZhbHVlW2tleV0uY3VycmVudCA9PT0gdW5kZWZpbmVkP1wibnVsbFwiOiBpdGVtPy51cGRhdGVkVmFsdWVba2V5XS5jdXJyZW50IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcCB0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NhbWVsQ2FzZVRvV29yZHMoaXRlbT8ubG9nVHlwZSl9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxvZ0xpc3Q/Lmxlbmd0aFwiIGNsYXNzPVwibXktM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXNcIiBbcGFnaW5hdGlvblNpemVzXT1cInBhZ2luYXRpb25TaXplc1wiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIiAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCI+PC9saWItcGFnaW5hdGlvbj5cclxuICAgICAgICAgICAgPC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2dMaXN0Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHdpZHRoPVwiMzAwcHhcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGEuc3ZnXCIgYWx0PVwiXCI+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbG9hZGluZydcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcblxyXG5cbjwhLS0gQW5nbGUtY2hhbmdlIHByZXZpZXcgbW9kYWw6IEV4cGVjdGVkIHZzIEFjdHVhbCBjYW1lcmEgaW1hZ2VzLiAtLT5cbjxuZy10ZW1wbGF0ZSAjYW5nbGVQcmV2aWV3IGxldC1tb2RhbD5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkZXIgbWUtM1wiPnt7IHByZXZpZXdJdGVtPy5zdHJlYW0gfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFuZ2xlLWJhZGdlXCI+QW5nbGUgQ2hhbmdlZDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIG1iLTRcIj57eyBzdG9yZU5hbWVCeUlkKHByZXZpZXdJdGVtPy5zdG9yZUlkKSB9fSDCtyB7eyBwcmV2aWV3SXRlbT8uZGF0ZSB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbmdsZS1pbWctd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwicHJldmlld0l0ZW0/LmV4cGVjdGVkXCIgW3NyY109XCJwcmV2aWV3SXRlbS5leHBlY3RlZFwiIGFsdD1cIkV4cGVjdGVkIGNhbWVyYSBhbmdsZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcHJldmlld0l0ZW0/LmV4cGVjdGVkXCIgY2xhc3M9XCJhbmdsZS1pbWctZW1wdHlcIj5ObyBleHBlY3RlZCBpbWFnZTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbmdsZS1pbWctbGFiZWxcIj5FeHBlY3RlZDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbmdsZS1pbWctd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwicHJldmlld0l0ZW0/LmFjdHVhbFwiIFtzcmNdPVwicHJldmlld0l0ZW0uYWN0dWFsXCIgYWx0PVwiQWN0dWFsIGNhbWVyYSBhbmdsZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcHJldmlld0l0ZW0/LmFjdHVhbFwiIGNsYXNzPVwiYW5nbGUtaW1nLWVtcHR5XCI+Tm8gYWN0dWFsIGltYWdlPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFuZ2xlLWltZy1sYWJlbFwiPkFjdHVhbDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|