@aggdirect/coolmap 2.7.4 → 2.7.6
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/component/add-route/add-route.component.mjs +21 -23
- package/esm2022/lib/component/job-code/job-code.component.mjs +3 -3
- package/esm2022/lib/component/map/map.component.mjs +3 -3
- package/esm2022/lib/component/nav/layout/add-route-nav/add-route-nav.component.mjs +4 -4
- package/esm2022/lib/component/nav/layout/job-code-nav/job-code-nav.component.mjs +24 -24
- package/esm2022/lib/component/nav/nav.component.mjs +3 -3
- package/esm2022/lib/component/route-jobcode-list/job-code-list-card/job-code-list-card.component.mjs +3 -3
- package/esm2022/lib/component/route-jobcode-list/route-jobcode-list.component.mjs +5 -5
- package/esm2022/lib/component/route-jobcode-list/sms-card-details-overview/sms-card-details-overview.component.mjs +3 -3
- package/esm2022/lib/component/route-jobcode-list/view-route-list-card/view-route-list-card.component.mjs +3 -3
- package/esm2022/lib/component/shared/dialog/dialog.component.mjs +3 -3
- package/esm2022/lib/component/shared/estimation-display/estimation-display.component.mjs +3 -3
- package/esm2022/lib/component/shared/job-route-list/job-route-list.component.mjs +3 -3
- package/esm2022/lib/component/shared/jobcode-overview/jobcode-overview.component.mjs +3 -3
- package/esm2022/lib/component/shared/jobcode-status/jobcode-status.component.mjs +3 -3
- package/esm2022/lib/component/shared/route-info-card/route-info-card.component.mjs +12 -6
- package/esm2022/lib/coolmap.module.mjs +4 -4
- package/fesm2022/aggdirect-coolmap.mjs +99 -95
- package/fesm2022/aggdirect-coolmap.mjs.map +1 -1
- package/lib/component/add-route/add-route.component.d.ts +0 -1
- package/lib/component/nav/layout/job-code-nav/job-code-nav.component.d.ts +1 -1
- package/lib/component/shared/route-info-card/route-info-card.component.d.ts +3 -0
- package/package.json +10 -2
|
@@ -293,12 +293,12 @@ export class RouteJobCodeListComponent {
|
|
|
293
293
|
} });
|
|
294
294
|
}
|
|
295
295
|
}
|
|
296
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
297
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.2", type: RouteJobCodeListComponent, selector: "app-route-jobcode-list", inputs: { loader: "loader", type: "type", data: "data", currentNav: "currentNav", searchTerm: "searchTerm", clearListSeletion: "clearListSeletion" }, outputs: { emitroute: "emitroute", showAllRoute: "showAllRoute", clearJobDetailsFromList: "clearJobDetailsFromList" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"scrollprt addroutelist\" [class.viewroute]=\"visiblesection('addroute')\"\n [class.jobList]=\"visiblesection('jobcode')\">\n <button (click)=\"showRoute()\" [disabled]=\"loader\" *ngIf=\"selectedRoute.selected.length\" class=\"show_routebtn\">Show all\n route</button>\n <cdk-virtual-scroll-viewport itemSize=\"50\" [class.jobscroll]=\"visiblesection('jobcode')\" class=\"example-viewport\">\n <mat-spinner *ngIf=\"loader\"></mat-spinner>\n <ul *ngIf=\"!loader && data.length > 0\">\n <li [class.active]=\"route['isActive'] && visiblesection('addroute')\" *ngFor=\"let route of data\">\n <app-job-code-list-card *ngIf=\"visiblesection('jobcode')\" (toggleDrivermenu)=\"toggleDrivermenu($event)\"\n (routeSeletion)=\"selectRoute($event)\" [preventCloseDetails]=\"preventDetailsClose\" [emitJobdetails]=\"{emitroute, clearJobDetailsFromList}\" [route]=\"checkroutes(route)\"></app-job-code-list-card>\n <app-view-route-list-card [emitrouteevent]=\"emitroute\" *ngIf=\"visiblesection('addroute')\"\n [route]=\"route\"></app-view-route-list-card>\n </li>\n </ul>\n <p *ngIf=\"!loader && data.length === 0\">{{visiblesection('addroute') ? 'No Route found' : 'No Job code found.'}}</p>\n </cdk-virtual-scroll-viewport>\n</div>\n\n<div class=\"driver_list\" *ngIf=\"isDriverList\">\n <div class=\"driver_headingprt\">\n <h2>Driver List</h2>\n <button *ngIf=\"driverList.driver_list?.length > 0\" (click)=\"isSmsList = true\">SMS</button>\n <div class=\"closebtn\" (click)=\"isDriverList = false; preventMouseout = false; isSmsList = false\">\n <mat-icon>clear</mat-icon>\n </div>\n </div>\n <ul class=\"driverList\" *ngIf=\"driverList && driverList.driver_list\">\n <li *ngFor=\"let driver of driverList?.driver_list\">\n <img src=\"assets/images/driver_icon.png\" [alt]=\"driver['driver_name']\" />\n <div class=\"driver_detail\">\n <b>{{driver['driver_name']}}</b> <span>{{driver['trucking_company']}}</span>\n <div class=\"cont_del\">\n <small>Driver contact: <b>{{driver['driver_phone'] ? driver['driver_phone'] : 'N/A'}}</b></small>\n <small>Company contact: <b>{{driver['trucking_company_phone'] ? driver['trucking_company_phone'] : 'N/A'}}</b></small>\n </div>\n </div>\n </li>\n <p *ngIf=\"driverList.driver_list?.length === 0\" style=\"font-weight:700; text-align:center;\">\n No Driver found\n </p>\n </ul>\n <div class=\"smslist\" *ngIf=\"isSmsList\">\n <div class=\"heading\">\n <h2>SMS All Drivers</h2>\n <div class=\"closebtn\" (click)=\"isSmsList = false\">\n <mat-icon>clear</mat-icon>\n </div>\n </div>\n <div class=\"detailprt\">\n <app-sms-card-details-overview [jobValue]=\"driverList\"></app-sms-card-details-overview>\n <div class=\"form_input\">\n <mat-form-field class=\"example-full-width\">\n <textarea matInput placeholder=\"Text here...\" autocomplete=\"nope\" column=\"10\"\n [formControl]=\"driverMessage\"></textarea>\n <mat-hint>{{driverMessage.value?.length}} / 256</mat-hint>\n </mat-form-field>\n <button *ngIf=\"!messageLoader\" [disabled]=\"!driverMessage.value || driverMessage.invalid\" (click)=\"sendMessage()\">\n Send SMS\n </button>\n </div>\n </div>\n <div class=\"loader\">\n <mat-spinner *ngIf=\"messageLoader\"></mat-spinner>\n </div>\n </div>\n</div>\n", styles: [".driver_iconprt{position:absolute;right:10px;top:12px;z-index:9999}.driver_iconprt img{width:25px;height:25px}.driver_list{background:#fff;position:fixed;width:300px;top:10px;left:360px;border-top-left-radius:20px;border-top-right-radius:20px}.driver_list .driver_headingprt{display:flex;justify-content:space-between;align-items:center;padding:0 15px}.driver_list .driver_headingprt button{background:none;border:1px solid #ccc;border-radius:10px;padding:5px 20px}.driver_list .driver_headingprt button:hover{background:#326ad3;color:#fff}.driver_list h2{font-size:20px}.driver_list .driverList{height:300px;overflow:auto}.driver_list .driverList li{display:flex;padding:10px;align-items:flex-start;cursor:pointer;border-bottom:1px solid white;background:#eee}.driver_list .driverList li img{width:35px;height:35px;border-radius:100%;margin-right:10px}.driver_list .driverList li .driver_detail{width:calc(100% - 45px);display:flex;flex-direction:column;justify-content:flex-start}.driver_list .driverList li .driver_detail b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:135px;font-size:.9rem}.driver_list .driverList li .driver_detail span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px;font-size:.8rem}.driver_list:after{height:10px;background:#fff;border-bottom-right-radius:20px;border-bottom-left-radius:20px;content:\"\";position:absolute;bottom:-9px;width:100%}.smslist{background:#fff;position:absolute;width:480px;top:0;left:105%;border-radius:20px;padding-bottom:20px}.smslist .heading{display:flex;justify-content:space-between;align-items:center;padding:0 15px}.smslist .detailprt{padding:0 15px}.smslist .detailprt span{display:flex;margin-bottom:12px;font-size:.8rem;align-items:center}.smslist .detailprt span label{font-weight:600;width:37%}.smslist .detailprt .form_input{display:flex;flex-direction:column;font-size:.8rem}.smslist .detailprt .form_input button{background:#326ad3;padding:10px 18px;color:#fff;font-size:.8125rem;border-radius:30px;display:flex;align-self:flex-end}.closebtn{box-shadow:0 0 5px #0000001c;border-radius:100%;width:30px;height:30px;display:flex;justify-content:center;align-items:center;cursor:pointer;background:#f5f5f5}.show_routebtn{font-size:.9rem;margin-bottom:20px;padding:6px 11px;position:absolute;top:8px;right:10px;background-color:transparent;color:#3f51b5;border:1px solid #3f51b5;border-radius:10px;box-shadow:none}.show_routebtn:hover{background-color:#3f51b5;color:#fff}.cont_del{margin-top:10px}.cont_del small{display:block}.jobList ul{margin:0 .93em 0 0;width:100%}.jobList ul li{position:relative;background:#fbfbfb;padding:10px;border-radius:15px;margin-bottom:5px;border:1px solid #fbfbfb;border-left:3px solid #fbfbfb;cursor:pointer;height:inherit;width:15.62em}@media (min-width: 2500px){.jobList ul li{height:7.65vh}}@media (min-width: 3300px){.jobList ul li{height:5.61vh}}.viewroute ul{width:100%}.viewroute ul li{position:relative;background:#fbfbfb;padding:7px 10px;border-radius:15px;margin-bottom:5px;border:1px solid #fbfbfb;border-left:3px solid #fbfbfb;cursor:pointer;height:16.4vh;width:15.62em}@media (min-width: 1600px){.viewroute ul li{height:12.4vh}}.viewroute ul li.active{border:1px solid #39c471;border-left:3px solid #39c471}.loader{position:absolute;height:100%;top:0;left:0;width:100%;display:flex;align-items:center;justify-content:center;pointer-events:none}.example-viewport{height:900px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i8.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "component", type: i8.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i9.ViewRouteListCardComponent, selector: "app-view-route-list-card", inputs: ["route", "emitrouteevent"] }, { kind: "component", type: i10.SmsCardDetailsOverviewComponent, selector: "app-sms-card-details-overview", inputs: ["jobValue"] }, { kind: "component", type: i11.JobCodeListCardComponent, selector: "app-job-code-list-card", inputs: ["route", "emitJobdetails", "preventCloseDetails"], outputs: ["routeSeletion", "toggleDrivermenu"] }] });
|
|
296
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: RouteJobCodeListComponent, deps: [{ token: i1.CoolmapService }, { token: i1.UtilsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
297
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: RouteJobCodeListComponent, selector: "app-route-jobcode-list", inputs: { loader: "loader", type: "type", data: "data", currentNav: "currentNav", searchTerm: "searchTerm", clearListSeletion: "clearListSeletion" }, outputs: { emitroute: "emitroute", showAllRoute: "showAllRoute", clearJobDetailsFromList: "clearJobDetailsFromList" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"scrollprt addroutelist\" [class.viewroute]=\"visiblesection('addroute')\"\n [class.jobList]=\"visiblesection('jobcode')\">\n <button (click)=\"showRoute()\" [disabled]=\"loader\" *ngIf=\"selectedRoute.selected.length\" class=\"show_routebtn\">Show all\n route</button>\n <cdk-virtual-scroll-viewport itemSize=\"50\" [class.jobscroll]=\"visiblesection('jobcode')\" class=\"example-viewport\">\n <mat-spinner *ngIf=\"loader\"></mat-spinner>\n <ul *ngIf=\"!loader && data.length > 0\">\n <li [class.active]=\"route['isActive'] && visiblesection('addroute')\" *ngFor=\"let route of data\">\n <app-job-code-list-card *ngIf=\"visiblesection('jobcode')\" \n (toggleDrivermenu)=\"toggleDrivermenu($event)\"\n (routeSeletion)=\"selectRoute($event)\" \n [preventCloseDetails]=\"preventDetailsClose\" \n [emitJobdetails]=\"{emitroute, clearJobDetailsFromList}\" \n [route]=\"checkroutes(route)\">\n </app-job-code-list-card>\n <app-view-route-list-card *ngIf=\"visiblesection('addroute')\"\n [emitrouteevent]=\"emitroute\" \n [route]=\"route\">\n </app-view-route-list-card>\n </li>\n </ul>\n <p *ngIf=\"!loader && data.length === 0\">{{visiblesection('addroute') ? 'No Route found' : 'No Job code found.'}}</p>\n </cdk-virtual-scroll-viewport>\n</div>\n\n<div class=\"driver_list\" *ngIf=\"isDriverList\">\n <div class=\"driver_headingprt\">\n <h2>Driver List</h2>\n <button *ngIf=\"driverList.driver_list?.length > 0\" (click)=\"isSmsList = true\">SMS</button>\n <div class=\"closebtn\" (click)=\"isDriverList = false; preventMouseout = false; isSmsList = false\">\n <mat-icon>clear</mat-icon>\n </div>\n </div>\n <ul class=\"driverList\" *ngIf=\"driverList && driverList.driver_list\">\n <li *ngFor=\"let driver of driverList?.driver_list\">\n <img src=\"assets/images/driver_icon.png\" [alt]=\"driver['driver_name']\" />\n <div class=\"driver_detail\">\n <b>{{driver['driver_name']}}</b> <span>{{driver['trucking_company']}}</span>\n <div class=\"cont_del\">\n <small>Driver contact: <b>{{driver['driver_phone'] ? driver['driver_phone'] : 'N/A'}}</b></small>\n <small>Company contact: <b>{{driver['trucking_company_phone'] ? driver['trucking_company_phone'] : 'N/A'}}</b></small>\n </div>\n </div>\n </li>\n <p *ngIf=\"driverList.driver_list?.length === 0\" style=\"font-weight:700; text-align:center;\">\n No Driver found\n </p>\n </ul>\n <div class=\"smslist\" *ngIf=\"isSmsList\">\n <div class=\"heading\">\n <h2>SMS All Drivers</h2>\n <div class=\"closebtn\" (click)=\"isSmsList = false\">\n <mat-icon>clear</mat-icon>\n </div>\n </div>\n <div class=\"detailprt\">\n <app-sms-card-details-overview [jobValue]=\"driverList\"></app-sms-card-details-overview>\n <div class=\"form_input\">\n <mat-form-field class=\"example-full-width\">\n <textarea matInput placeholder=\"Text here...\" autocomplete=\"nope\" column=\"10\"\n [formControl]=\"driverMessage\"></textarea>\n <mat-hint>{{driverMessage.value?.length}} / 256</mat-hint>\n </mat-form-field>\n <button *ngIf=\"!messageLoader\" [disabled]=\"!driverMessage.value || driverMessage.invalid\" (click)=\"sendMessage()\">\n Send SMS\n </button>\n </div>\n </div>\n <div class=\"loader\">\n <mat-spinner *ngIf=\"messageLoader\"></mat-spinner>\n </div>\n </div>\n</div>\n", styles: [".driver_iconprt{position:absolute;right:10px;top:12px;z-index:9999}.driver_iconprt img{width:25px;height:25px}.driver_list{background:#fff;position:fixed;width:300px;top:10px;left:360px;border-top-left-radius:20px;border-top-right-radius:20px}.driver_list .driver_headingprt{display:flex;justify-content:space-between;align-items:center;padding:0 15px}.driver_list .driver_headingprt button{background:none;border:1px solid #ccc;border-radius:10px;padding:5px 20px}.driver_list .driver_headingprt button:hover{background:#326ad3;color:#fff}.driver_list h2{font-size:20px}.driver_list .driverList{height:300px;overflow:auto}.driver_list .driverList li{display:flex;padding:10px;align-items:flex-start;cursor:pointer;border-bottom:1px solid white;background:#eee}.driver_list .driverList li img{width:35px;height:35px;border-radius:100%;margin-right:10px}.driver_list .driverList li .driver_detail{width:calc(100% - 45px);display:flex;flex-direction:column;justify-content:flex-start}.driver_list .driverList li .driver_detail b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:135px;font-size:.9rem}.driver_list .driverList li .driver_detail span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px;font-size:.8rem}.driver_list:after{height:10px;background:#fff;border-bottom-right-radius:20px;border-bottom-left-radius:20px;content:\"\";position:absolute;bottom:-9px;width:100%}.smslist{background:#fff;position:absolute;width:480px;top:0;left:105%;border-radius:20px;padding-bottom:20px}.smslist .heading{display:flex;justify-content:space-between;align-items:center;padding:0 15px}.smslist .detailprt{padding:0 15px}.smslist .detailprt span{display:flex;margin-bottom:12px;font-size:.8rem;align-items:center}.smslist .detailprt span label{font-weight:600;width:37%}.smslist .detailprt .form_input{display:flex;flex-direction:column;font-size:.8rem}.smslist .detailprt .form_input button{background:#326ad3;padding:10px 18px;color:#fff;font-size:.8125rem;border-radius:30px;display:flex;align-self:flex-end}.closebtn{box-shadow:0 0 5px #0000001c;border-radius:100%;width:30px;height:30px;display:flex;justify-content:center;align-items:center;cursor:pointer;background:#f5f5f5}.show_routebtn{font-size:.9rem;margin-bottom:20px;padding:6px 11px;position:absolute;top:8px;right:10px;background-color:transparent;color:#3f51b5;border:1px solid #3f51b5;border-radius:10px;box-shadow:none}.show_routebtn:hover{background-color:#3f51b5;color:#fff}.cont_del{margin-top:10px}.cont_del small{display:block}.jobList ul{margin:0 .93em 0 0;width:100%}.jobList ul li{position:relative;background:#fbfbfb;padding:10px;border-radius:15px;margin-bottom:5px;border:1px solid #fbfbfb;border-left:3px solid #fbfbfb;cursor:pointer;height:inherit;width:15.62em}@media (min-width: 2500px){.jobList ul li{height:7.65vh}}@media (min-width: 3300px){.jobList ul li{height:5.61vh}}.viewroute ul{width:100%}.viewroute ul li{position:relative;background:#fbfbfb;padding:7px 10px;border-radius:15px;margin-bottom:5px;border:1px solid #fbfbfb;border-left:3px solid #fbfbfb;cursor:pointer;height:16.4vh;width:15.62em}@media (min-width: 1600px){.viewroute ul li{height:12.4vh}}.viewroute ul li.active{border:1px solid #39c471;border-left:3px solid #39c471}.loader{position:absolute;height:100%;top:0;left:0;width:100%;display:flex;align-items:center;justify-content:center;pointer-events:none}.example-viewport{height:900px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i8.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "component", type: i8.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i9.ViewRouteListCardComponent, selector: "app-view-route-list-card", inputs: ["route", "emitrouteevent"] }, { kind: "component", type: i10.SmsCardDetailsOverviewComponent, selector: "app-sms-card-details-overview", inputs: ["jobValue"] }, { kind: "component", type: i11.JobCodeListCardComponent, selector: "app-job-code-list-card", inputs: ["route", "emitJobdetails", "preventCloseDetails"], outputs: ["routeSeletion", "toggleDrivermenu"] }] });
|
|
298
298
|
}
|
|
299
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
299
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: RouteJobCodeListComponent, decorators: [{
|
|
300
300
|
type: Component,
|
|
301
|
-
args: [{ selector: 'app-route-jobcode-list', template: "<div class=\"scrollprt addroutelist\" [class.viewroute]=\"visiblesection('addroute')\"\n [class.jobList]=\"visiblesection('jobcode')\">\n <button (click)=\"showRoute()\" [disabled]=\"loader\" *ngIf=\"selectedRoute.selected.length\" class=\"show_routebtn\">Show all\n route</button>\n <cdk-virtual-scroll-viewport itemSize=\"50\" [class.jobscroll]=\"visiblesection('jobcode')\" class=\"example-viewport\">\n <mat-spinner *ngIf=\"loader\"></mat-spinner>\n <ul *ngIf=\"!loader && data.length > 0\">\n <li [class.active]=\"route['isActive'] && visiblesection('addroute')\" *ngFor=\"let route of data\">\n
|
|
301
|
+
args: [{ selector: 'app-route-jobcode-list', template: "<div class=\"scrollprt addroutelist\" [class.viewroute]=\"visiblesection('addroute')\"\n [class.jobList]=\"visiblesection('jobcode')\">\n <button (click)=\"showRoute()\" [disabled]=\"loader\" *ngIf=\"selectedRoute.selected.length\" class=\"show_routebtn\">Show all\n route</button>\n <cdk-virtual-scroll-viewport itemSize=\"50\" [class.jobscroll]=\"visiblesection('jobcode')\" class=\"example-viewport\">\n <mat-spinner *ngIf=\"loader\"></mat-spinner>\n <ul *ngIf=\"!loader && data.length > 0\">\n <li [class.active]=\"route['isActive'] && visiblesection('addroute')\" *ngFor=\"let route of data\">\n <app-job-code-list-card *ngIf=\"visiblesection('jobcode')\" \n (toggleDrivermenu)=\"toggleDrivermenu($event)\"\n (routeSeletion)=\"selectRoute($event)\" \n [preventCloseDetails]=\"preventDetailsClose\" \n [emitJobdetails]=\"{emitroute, clearJobDetailsFromList}\" \n [route]=\"checkroutes(route)\">\n </app-job-code-list-card>\n <app-view-route-list-card *ngIf=\"visiblesection('addroute')\"\n [emitrouteevent]=\"emitroute\" \n [route]=\"route\">\n </app-view-route-list-card>\n </li>\n </ul>\n <p *ngIf=\"!loader && data.length === 0\">{{visiblesection('addroute') ? 'No Route found' : 'No Job code found.'}}</p>\n </cdk-virtual-scroll-viewport>\n</div>\n\n<div class=\"driver_list\" *ngIf=\"isDriverList\">\n <div class=\"driver_headingprt\">\n <h2>Driver List</h2>\n <button *ngIf=\"driverList.driver_list?.length > 0\" (click)=\"isSmsList = true\">SMS</button>\n <div class=\"closebtn\" (click)=\"isDriverList = false; preventMouseout = false; isSmsList = false\">\n <mat-icon>clear</mat-icon>\n </div>\n </div>\n <ul class=\"driverList\" *ngIf=\"driverList && driverList.driver_list\">\n <li *ngFor=\"let driver of driverList?.driver_list\">\n <img src=\"assets/images/driver_icon.png\" [alt]=\"driver['driver_name']\" />\n <div class=\"driver_detail\">\n <b>{{driver['driver_name']}}</b> <span>{{driver['trucking_company']}}</span>\n <div class=\"cont_del\">\n <small>Driver contact: <b>{{driver['driver_phone'] ? driver['driver_phone'] : 'N/A'}}</b></small>\n <small>Company contact: <b>{{driver['trucking_company_phone'] ? driver['trucking_company_phone'] : 'N/A'}}</b></small>\n </div>\n </div>\n </li>\n <p *ngIf=\"driverList.driver_list?.length === 0\" style=\"font-weight:700; text-align:center;\">\n No Driver found\n </p>\n </ul>\n <div class=\"smslist\" *ngIf=\"isSmsList\">\n <div class=\"heading\">\n <h2>SMS All Drivers</h2>\n <div class=\"closebtn\" (click)=\"isSmsList = false\">\n <mat-icon>clear</mat-icon>\n </div>\n </div>\n <div class=\"detailprt\">\n <app-sms-card-details-overview [jobValue]=\"driverList\"></app-sms-card-details-overview>\n <div class=\"form_input\">\n <mat-form-field class=\"example-full-width\">\n <textarea matInput placeholder=\"Text here...\" autocomplete=\"nope\" column=\"10\"\n [formControl]=\"driverMessage\"></textarea>\n <mat-hint>{{driverMessage.value?.length}} / 256</mat-hint>\n </mat-form-field>\n <button *ngIf=\"!messageLoader\" [disabled]=\"!driverMessage.value || driverMessage.invalid\" (click)=\"sendMessage()\">\n Send SMS\n </button>\n </div>\n </div>\n <div class=\"loader\">\n <mat-spinner *ngIf=\"messageLoader\"></mat-spinner>\n </div>\n </div>\n</div>\n", styles: [".driver_iconprt{position:absolute;right:10px;top:12px;z-index:9999}.driver_iconprt img{width:25px;height:25px}.driver_list{background:#fff;position:fixed;width:300px;top:10px;left:360px;border-top-left-radius:20px;border-top-right-radius:20px}.driver_list .driver_headingprt{display:flex;justify-content:space-between;align-items:center;padding:0 15px}.driver_list .driver_headingprt button{background:none;border:1px solid #ccc;border-radius:10px;padding:5px 20px}.driver_list .driver_headingprt button:hover{background:#326ad3;color:#fff}.driver_list h2{font-size:20px}.driver_list .driverList{height:300px;overflow:auto}.driver_list .driverList li{display:flex;padding:10px;align-items:flex-start;cursor:pointer;border-bottom:1px solid white;background:#eee}.driver_list .driverList li img{width:35px;height:35px;border-radius:100%;margin-right:10px}.driver_list .driverList li .driver_detail{width:calc(100% - 45px);display:flex;flex-direction:column;justify-content:flex-start}.driver_list .driverList li .driver_detail b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:135px;font-size:.9rem}.driver_list .driverList li .driver_detail span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px;font-size:.8rem}.driver_list:after{height:10px;background:#fff;border-bottom-right-radius:20px;border-bottom-left-radius:20px;content:\"\";position:absolute;bottom:-9px;width:100%}.smslist{background:#fff;position:absolute;width:480px;top:0;left:105%;border-radius:20px;padding-bottom:20px}.smslist .heading{display:flex;justify-content:space-between;align-items:center;padding:0 15px}.smslist .detailprt{padding:0 15px}.smslist .detailprt span{display:flex;margin-bottom:12px;font-size:.8rem;align-items:center}.smslist .detailprt span label{font-weight:600;width:37%}.smslist .detailprt .form_input{display:flex;flex-direction:column;font-size:.8rem}.smslist .detailprt .form_input button{background:#326ad3;padding:10px 18px;color:#fff;font-size:.8125rem;border-radius:30px;display:flex;align-self:flex-end}.closebtn{box-shadow:0 0 5px #0000001c;border-radius:100%;width:30px;height:30px;display:flex;justify-content:center;align-items:center;cursor:pointer;background:#f5f5f5}.show_routebtn{font-size:.9rem;margin-bottom:20px;padding:6px 11px;position:absolute;top:8px;right:10px;background-color:transparent;color:#3f51b5;border:1px solid #3f51b5;border-radius:10px;box-shadow:none}.show_routebtn:hover{background-color:#3f51b5;color:#fff}.cont_del{margin-top:10px}.cont_del small{display:block}.jobList ul{margin:0 .93em 0 0;width:100%}.jobList ul li{position:relative;background:#fbfbfb;padding:10px;border-radius:15px;margin-bottom:5px;border:1px solid #fbfbfb;border-left:3px solid #fbfbfb;cursor:pointer;height:inherit;width:15.62em}@media (min-width: 2500px){.jobList ul li{height:7.65vh}}@media (min-width: 3300px){.jobList ul li{height:5.61vh}}.viewroute ul{width:100%}.viewroute ul li{position:relative;background:#fbfbfb;padding:7px 10px;border-radius:15px;margin-bottom:5px;border:1px solid #fbfbfb;border-left:3px solid #fbfbfb;cursor:pointer;height:16.4vh;width:15.62em}@media (min-width: 1600px){.viewroute ul li{height:12.4vh}}.viewroute ul li.active{border:1px solid #39c471;border-left:3px solid #39c471}.loader{position:absolute;height:100%;top:0;left:0;width:100%;display:flex;align-items:center;justify-content:center;pointer-events:none}.example-viewport{height:900px}\n"] }]
|
|
302
302
|
}], ctorParameters: () => [{ type: i1.CoolmapService }, { type: i1.UtilsService }], propDecorators: { loader: [{
|
|
303
303
|
type: Input
|
|
304
304
|
}], type: [{
|
|
@@ -318,4 +318,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
|
|
|
318
318
|
}], clearListSeletion: [{
|
|
319
319
|
type: Input
|
|
320
320
|
}] } });
|
|
321
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtam9iY29kZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvcm91dGUtam9iY29kZS1saXN0L3JvdXRlLWpvYmNvZGUtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb29sbWFwL3NyYy9saWIvY29tcG9uZW50L3JvdXRlLWpvYmNvZGUtbGlzdC9yb3V0ZS1qb2Jjb2RlLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBUXpELE1BQU0sT0FBTyx5QkFBeUI7SUFvQmpCO0lBQWdDO0lBbkJuQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2QsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUNsQixJQUFJLEdBQVksRUFBRSxDQUFDO0lBQ25CLFVBQVUsR0FBVyxFQUFFLENBQUE7SUFDdEIsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDL0IsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDbkQsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUNqQyxVQUFVLEdBQVksSUFBSSxDQUFDLElBQUksQ0FBQztJQUNoQixVQUFVLENBQU87SUFDakMsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUN2QixhQUFhLEdBQUcsSUFBSSxjQUFjLENBQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3hELFVBQVUsQ0FBTztJQUNqQixpQkFBaUIs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QyxFQUFFLEdBQUUsSUFBRyxHQUFHLEVBQUUsQ0FBQztnQkFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQTtZQUFBLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQTtRQUNuRCxDQUFDO0lBQ0osQ0FBQzt1R0E5TlcseUJBQXlCOzJGQUF6Qix5QkFBeUIsZ1dDVnRDLHk3R0FrRUE7OzJGRHhEYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usd0JBQXdCOzhHQUtsQixNQUFNO3NCQUFyQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNXLFNBQVM7c0JBQXpCLE1BQU07Z0JBQ1UsWUFBWTtzQkFBNUIsTUFBTTtnQkFHUyxVQUFVO3NCQUF6QixLQUFLO2dCQUtXLHVCQUF1QjtzQkFBdkMsTUFBTTtnQkFJUyxpQkFBaUI7c0JBQWhDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29vbG1hcFNlcnZpY2UsIFJvdXRlLCBVdGlsc1NlcnZpY2UgfSBmcm9tICdAYWdnZGlyZWN0L2Nvb2xtYXAtc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcm91dGUtam9iY29kZS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JvdXRlLWpvYmNvZGUtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JvdXRlLWpvYmNvZGUtbGlzdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJvdXRlSm9iQ29kZUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkZXIgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgdHlwZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhOiBSb3V0ZVtdID0gW107XG4gIEBJbnB1dCgpIHB1YmxpYyBjdXJyZW50TmF2OiBzdHJpbmcgPSAnJ1xuICBAT3V0cHV0KCkgcHVibGljIGVtaXRyb3V0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBzaG93QWxsUm91dGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHByZXZlbnRNb3VzZW91dDogYm9vbGVhbiA9IGZhbHNlO1xuICBmaWx0ZXJMaXN0OiBSb3V0ZVtdID0gdGhpcy5kYXRhO1xuICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoVGVybSE6IGFueTtcbiAgaXNEcml2ZXJMaXN0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzZWxlY3RlZFJvdXRlID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10pXG4gIGRyaXZlckxpc3QhOiBhbnk7XG4gIHByZXZlbnRMaXN0U2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xlYXJKb2JEZXRhaWxzRnJvbUxpc3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHByZXZlbnREZXRhaWxzQ2xvc2UgPSBmYWxzZTtcbiAgbWVzc2FnZUxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBkcml2ZXJNZXNzYWdlID0gbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU2KV0pO1xuICBASW5wdXQoKSBwdWJsaWMgY2xlYXJMaXN0U2VsZXRpb246IGJvb2xlYW47XG4gIGlzU21zTGlzdDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29vbE1hcDogQ29vbG1hcFNlcnZpY2UsIHB1YmxpYyB1dGlsczogVXRpbHNTZXJ2aWNlKSB7IHRoaXMuZHJpdmVyTGlzdCA9IFtdIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51dGlscy5nZXRwcmVWZW50Sm9iZGV0YWlsY2xvc2Uuc3Vic2NyaWJlKHJlcyA9PiB7IHRoaXMucHJldmVudERldGFpbHNDbG9zZSA9IHJlcyB9KTtcbiAgICB0aGlzLnV0aWxzLnJlbW92ZU1hcEVudGl0eVV0aWxpdHkuc3Vic2NyaWJlKChyZXM6IFJvdXRlKSA9PiB7dGhpcy5wYXNzUm91dGUocmVzKX0pO1xuICB9XG4gIHBhc3NSb3V0ZShqb2I6IFJvdXRlKSB7XG4gICAgdGhpcy5kYXRhLmZvckVhY2goKGVhY2gpID0+IHsgaWYgKGVhY2hbJ3JvdXRlX2lkJ10gIT09IGpvYlsncm91dGVfaWQnXSkgeyBlYWNoWydpc0FjdGl2ZSddID0gZmFsc2UgfSBlbHNlIHsgZWFjaFsnaXNBY3RpdmUnXSA9IHRydWUgfSB9KTtcbiAgICBpZiAodGhpcy50eXBlID09ICdhZGRyb3V0ZScpIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKGVsZSA9PiB0aGlzLmNvb2xNYXAuZmlsdGVyUm91dGUoZWxlWydyb3V0ZV9pZCddLCAnbm9uZScpKTtcbiAgfVxuICBzZWxlY3RSb3V0ZShyb3V0ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLnByZXZlbnRMaXN0U2VsZWN0KSB7XG4gICAgICB0aGlzLnByZXZlbnRMaXN0U2VsZWN0ID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3V0ZS50b2dnbGUocm91dGUpO1xuICAgICAgdGhpcy5jbGVhckpvYkRldGFpbHNGcm9tTGlzdC5lbWl0KHRydWUpO1xuICAgICAgdGhpcy51dGlscy5wcmVWZW50Sm9iZGV0YWlsY2xvc2UubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLmZpbHRlckxpc3QuZm9yRWFjaChlbGUgPT4gdGhpcy5jb29sTWFwLmZpbHRlclJvdXRlKGVsZVsnam9iX2lkJ10sICdub25lJykpO1xuICAgICAgdGhpcy5jbGVhckxpc3QoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZC5mb3JFYWNoKChlbGUsIGluZGV4KSA9PiB7XG4gICAgICAgIHRoaXMuY29vbE1hcC5maWx0ZXJSb3V0ZShlbGVbJ2pvYl9pZCddLCAndmlzaWJsZScsICgodGhpcy5zZWxlY3RlZFJvdXRlLnNlbGVjdGVkLmxlbmd0aCAtIDEpID09PSBpbmRleCkpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJldmVudExpc3RTZWxlY3QgPSBmYWxzZTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkUm91dGUuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucHJldmVudExpc3RTZWxlY3QgPSBmYWxzZVxuICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaChlbGUgPT4gdGhpcy5jb29sTWFwLmZpbHRlclJvdXRlKGVsZVsnam9iX2lkJ10sICd2aXNpYmxlJykpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgY2hlY2tyb3V0ZXMocm91dGU6IFJvdXRlKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3V0ZSA9IHRoaXMuc2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZDtcbiAgICB0aGlzLmZpbHRlckxpc3QgPSB0aGlzLmZpbHRlckxpc3QubWFwKGVsZSA9PiB7IGVsZVsnaXNTZWxlY3RlZCddID0gZmFsc2U7IHJldHVybiBlbGUgfSlcbiAgICBpZiAoc2VsZWN0ZWRSb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICBzZWxlY3RlZFJvdXRlLmZvckVhY2goZWxlID0+IHtcbiAgICAgICAgaWYgKHJvdXRlWydvcmRlcl9udW1iZXInXSA9PT0gZWxlWydvcmRlcl9udW1iZXInXSkgeyBlbGVbJ2lzU2VsZWN0ZWQnXSA9IHRydWUgfVxuICAgICAgfSk7XG4gICAgfSByZXR1cm4gcm91dGVcbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50TmF2ID09PSAnQWRkcm91dGUnICYmICh0aGlzLmRhdGEubGVuZ3RoIDwgdGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCkpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbHRlckxpc3QuZmluZEluZGV4KGVsZSA9PiBlbGUuaXNBY3RpdmUpO1xuICAgICAgICBpZiAoaW5kZXggPiAwKSB0aGlzLmZpbHRlckxpc3RbaW5kZXhdLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChlbGU6IFJvdXRlLCBpbmRleEZvckRhdGE6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gKGVsZVsnam9iX2lkJ10gPyBlbGVbJ2pvYl9pZCddIDogZWxlWydyb3V0ZV9pZCddKVxuICAgICAgICAgIHRoaXMuY29vbE1hcC5wbG90Um91dGUoZWxlLCBpZCwgdGhpcy50eXBlLCBmYWxzZSwgKGluZGV4Rm9yRGF0YSA9PT0gKHRoaXMuZGF0YS5sZW5ndGggLSAxKSkpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gJiYgY2hhbmdlc1snZGF0YSddWydjdXJyZW50VmFsdWUnXSkge1xuICAgICAgdGhpcy5maWx0ZXJMaXN0ID0gY2hhbmdlc1snZGF0YSddWydjdXJyZW50VmFsdWUnXTtcbiAgICAgIGlmICh0aGlzLnNlYXJjaFRlcm0pIHtcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGVybS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy51dGlscy5nZXRTZWFyY2hSZXN1bHRzKGNoYW5nZXNbJ2RhdGEnXVsnY3VycmVudFZhbHVlJ10sIHRoaXMuc2VhcmNoVGVybSk7XG4gICAgICAgICAgdGhpcy5maWx0ZXJMaXN0ID0gdGhpcy5kYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmlsdGVyTGlzdCA9IGNoYW5nZXNbJ2RhdGEnXVsnY3VycmVudFZhbHVlJ107XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2pvYmNvZGUnKSB7XG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTsgdGhpcy5jbGVhckxpc3QoKTtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyTGlzdC5sZW5ndGggPT09IDApIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnR5cGUgIT09ICdqb2Jjb2RlJykge1xuICAgICAgICBpZiAoY2hhbmdlc1snZGF0YSddWydwcmV2aW91c1ZhbHVlJ10gJiYgdGhpcy5jdXJyZW50TmF2ID09PSAnYWRkRm9ybScpIHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVSb3V0ZSA9IGNoYW5nZXNbJ2RhdGEnXVsncHJldmlvdXNWYWx1ZSddLmZpbmQoKGVsZTogUm91dGUpID0+IGVsZS5pc0FjdGl2ZSk7XG4gICAgICAgICAgaWYgKGFjdGl2ZVJvdXRlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckxpc3QubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGl0ZW0ucm91dGVfaWQgPT09IGFjdGl2ZVJvdXRlLnJvdXRlX2lkKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlc1snZGF0YSddWydwcmV2aW91c1ZhbHVlJ10gJiYgdGhpcy5jdXJyZW50TmF2ICE9PSAnYWRkRm9ybScpIHtcbiAgICAgICAgdGhpcy5jb29sTWFwLnJlbW92ZUpvYkZyb21NYXAoY2hhbmdlc1snZGF0YSddWydwcmV2aW91c1ZhbHVlJ10pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm91dGUuY2xlYXIoKTtcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5jdXJyZW50TmF2ICE9PSAnYWRkRm9ybScpIHtcbiAgICAgICAgY2hhbmdlc1snZGF0YSddWydjdXJyZW50VmFsdWUnXS5mb3JFYWNoKChlbGU6IFJvdXRlLCBpbmRleEZvckRhdGE6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gKGVsZVsnam9iX2lkJ10gPyBlbGVbJ2pvYl9pZCddIDogZWxlWydyb3V0ZV9pZCddKVxuICAgICAgICAgIGlmKHRoaXMudHlwZSA9PT0gJ2pvYmNvZGUnKSBlbGUubWF0ZXJpYWxMYWJlbCA9IGVsZS5tYXRlcmlhbDtcbiAgICAgICAgICB0aGlzLmNvb2xNYXAucGxvdFJvdXRlKGVsZSwgaWQsIHRoaXMudHlwZSwgZmFsc2UsIChpbmRleEZvckRhdGEgPT09ICh0aGlzLmRhdGEubGVuZ3RoIC0gMSkpKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleEZvckRhdGEgPT09ICh0aGlzLmRhdGEubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snc2VhcmNoVGVybSddKSB7XG4gICAgICBpZiAodGhpcy5maWx0ZXJMaXN0KSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZmlsdGVyTGlzdDtcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3NlYXJjaFRlcm0nXVsnY3VycmVudFZhbHVlJ10ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuY29vbE1hcC5yZW1vdmVSb3V0ZUFuZE1hcmtlcigxKTtcbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLnV0aWxzLmdldFNlYXJjaFJlc3VsdHModGhpcy5kYXRhLCBjaGFuZ2VzWydzZWFyY2hUZXJtJ11bJ2N1cnJlbnRWYWx1ZSddKTtcbiAgICAgICAgfSBlbHNlIHsgdGhpcy5kYXRhID0gdGhpcy5maWx0ZXJMaXN0OyB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29vbE1hcC5jbGVhckJvdW5kV2l0aENvcmRpbmF0ZXMoKTtcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50TmF2ICE9PSAnYWRkRm9ybScgJiYgIXRoaXMuc2VsZWN0ZWRSb3V0ZVsnc2VsZWN0ZWQnXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY29vbE1hcC5yZW1vdmVSb3V0ZUFuZE1hcmtlcigxKTtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRmlsdGVyUm91dGUodGhpcy5maWx0ZXJMaXN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnROYXYgIT09ICdhZGRGb3JtJyAmJiB0aGlzLnNlbGVjdGVkUm91dGVbJ3NlbGVjdGVkJ10ubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJKb2JEZXRhaWxzRnJvbUxpc3QuZW1pdCh0cnVlKVxuICAgICAgICAgICAgdGhpcy5jb29sTWFwLnJlbW92ZUpvYkZyb21NYXAodGhpcy5zZWxlY3RlZFJvdXRlLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgoZWxlLCBpbmRleEZvckRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvb2xNYXAucGxvdFJvdXRlKGVsZSwgZWxlWydqb2JfaWQnXSwgdGhpcy50eXBlLCBmYWxzZSwgKGluZGV4Rm9yRGF0YSA9PT0gKHRoaXMuZGF0YS5sZW5ndGggLSAxKSkpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGluZGV4Rm9yRGF0YSA9PT0gKHRoaXMuZGF0YS5sZW5ndGggLSAxKSkgeyB0aGlzLmxvYWRlciA9IGZhbHNlOyB0aGlzLnV0aWxzLnByZXZlbnRuYXZDaGFuZ2UubmV4dCh0cnVlKSB9XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvdXRlWydzZWxlY3RlZCddLmxlbmd0aCAmJiB0aGlzLnNlbGVjdGVkUm91dGVbJ3NlbGVjdGVkJ11bMF1bJ2pvYl9pZCddID09PSBlbGVbJ2pvYl9pZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3V0ZS5jbGVhcigpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBzaG93Um91dGUoKSB7XG4gICAgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQoZmFsc2UpO1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTsgdGhpcy5jbGVhckxpc3QoKTtcbiAgICB0aGlzLnNob3dBbGxSb3V0ZS5lbWl0KHRydWUpO1xuICAgIGlmICh0aGlzLmZpbHRlckxpc3QgJiYgdGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29vbE1hcC5yZW1vdmVKb2JGcm9tTWFwKHRoaXMuc2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGVsZSwgaW5kZXhGb3JEYXRhKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb29sTWFwLnBsb3RSb3V0ZShlbGUsIGVsZVsnam9iX2lkJ10sIHRoaXMudHlwZSwgZmFsc2UsIChpbmRleEZvckRhdGEgPT09IHRoaXMuZmlsdGVyTGlzdC5sZW5ndGggLSAxKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXhGb3JEYXRhID09PSB0aGlzLmZpbHRlckxpc3QubGVuZ3RoIC0gMSkgeyB0aGlzLmxvYWRlciA9IGZhbHNlOyB0aGlzLnV0aWxzLnByZXZlbnRuYXZDaGFuZ2UubmV4dCh0cnVlKSB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvdXRlWydzZWxlY3RlZCddLmxlbmd0aCAmJiB0aGlzLnNlbGVjdGVkUm91dGVbJ3NlbGVjdGVkJ11bMF1bJ2pvYl9pZCddID09PSBlbGVbJ2pvYl9pZCddKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3V0ZS5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgfSwgNTAwKTtcbiAgICB9XG4gIH1cbiAgdG9nZ2xlRHJpdmVybWVudShldmVudDogYW55KSB7XG4gICAgY29uc3QgbW91c2Vldm50VHlwZSA9IGV2ZW50Lm1vdXNlZXZudFR5cGU7IGxldCByb3V0ZSA9IGV2ZW50LnJvdXRlO1xuICAgIGNvbnN0IGlzSG92ZXJPdXQgPSBldmVudC5pc0hvdmVyT3V0O1xuICAgIGlmKHR5cGVvZihtb3VzZWV2bnRUeXBlKSA9PT0gJ3N0cmluZycpIHtpZih0aGlzLnByZXZlbnRNb3VzZW91dCl7dGhpcy5pc0RyaXZlckxpc3QgPSAhdGhpcy5pc0RyaXZlckxpc3R9OyB0aGlzLnByZXZlbnRNb3VzZW91dCA9IHRydWV9XG4gICAgaWYgKHR5cGVvZihtb3VzZWV2bnRUeXBlKSA9PT0gJ2Jvb2xlYW4nICYmIW1vdXNlZXZudFR5cGUgJiYgIXRoaXMucHJldmVudE1vdXNlb3V0KSB7IHRoaXMuaXNEcml2ZXJMaXN0ID0gbW91c2Vldm50VHlwZSB9O1xuICAgIGlmICh0eXBlb2YobW91c2Vldm50VHlwZSkgPT09ICdib29sZWFuJyAmJiBtb3VzZWV2bnRUeXBlICYmICF0aGlzLnByZXZlbnRNb3VzZW91dCkgeyB0aGlzLmlzRHJpdmVyTGlzdCA9IG1vdXNlZXZudFR5cGUgfTtcbiAgICBpZih0aGlzLnByZXZlbnRNb3VzZW91dCAmJiAhdGhpcy5pc0RyaXZlckxpc3QpIHRoaXMucHJldmVudE1vdXNlb3V0ID0gZmFsc2U7XG4gICAgaWYgKGlzSG92ZXJPdXQpIHtcbiAgICAgIGlmICh0aGlzLnByZXZlbnRNb3VzZW91dCkge1xuICAgICAgICByb3V0ZSA9IHRoaXMudXRpbHMuZ2V0ZGljdFZhbHVlKCdkcml2ZXItZGV0YWlscycpO1xuICAgICAgICB0aGlzLmRyaXZlckxpc3QgPSByb3V0ZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5wcmV2ZW50TW91c2VvdXQpIHtcbiAgICAgICAgdGhpcy5kcml2ZXJMaXN0ID0gcm91dGVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcml2ZXJMaXN0ID0gcm91dGVcbiAgICB9XG4gIH1cbiAgdmlzaWJsZXNlY3Rpb24odmFsdWU6IHN0cmluZykgeyBpZiAodGhpcy50eXBlID09PSB2YWx1ZSkgeyByZXR1cm4gdHJ1ZSB9IGVsc2UgcmV0dXJuIGZhbHNlIH1cbiAgdG9nZ2xlRmlsdGVyUm91dGUoZmlsdGVyTGlzdDogUm91dGVbXSkge1xuICAgIGZpbHRlckxpc3QuZm9yRWFjaCgoZWxlKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJJdGVtID0gKHRoaXMudHlwZSA9PT0gJ2pvYmNvZGUnKSA/ICdqb2JfaWQnIDogJ3JvdXRlX2lkJztcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhLmZpbmRJbmRleCgoZWxlMSkgPT4geyByZXR1cm4gKGVsZTFbYCR7ZmlsdGVySXRlbX1gXSA9PT0gZWxlW2Ake2ZpbHRlckl0ZW19YF0pIH0pO1xuICAgICAgY29uc3QgaWQgPSAoZWxlWydqb2JfaWQnXSA/IGVsZVsnam9iX2lkJ10gOiBlbGVbJ3JvdXRlX2lkJ10pO1xuICAgICAgaWYgKGlkICYmIGluZGV4IDwgMCkgdGhpcy5jb29sTWFwLmZpbHRlclJvdXRlKGlkLCAnbm9uZScpO1xuICAgICAgaWYgKGlkICYmIGluZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy5kYXRhW2luZGV4XS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvb2xNYXAuZmlsdGVyUm91dGUoaWQsICd2aXNpYmxlJyk7XG4gICAgICAgIHRoaXMuY29vbE1hcC5leHRlbmRCb3VuZChlbGVbJ3BhdGgnXSwgKGluZGV4ID09PSAodGhpcy5kYXRhLmxlbmd0aCAtIDEpKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIGNsZWFyTGlzdCgpIHtcbiAgICB0aGlzLmlzRHJpdmVyTGlzdCA9IGZhbHNlOyB0aGlzLmRyaXZlckxpc3QgPSBudWxsOyB0aGlzLnByZXZlbnRNb3VzZW91dCA9IGZhbHNlOyB0aGlzLmlzU21zTGlzdCA9IGZhbHNlO1xuICB9XG4gIHNlbmRNZXNzYWdlKCkge1xuICAgIHRoaXMubWVzc2FnZUxvYWRlciA9IHRydWVcbiAgICBpZiAodGhpcy5kcml2ZXJNZXNzYWdlLnZhbGlkKSB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBvcmRlcl9udW1iZXI6IHRoaXMuZHJpdmVyTGlzdFsnb3JkZXJfbnVtYmVyJ10sXG4gICAgICAgIGRhdGU6IHRoaXMuZHJpdmVyTGlzdFsnZGF0ZSddLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLmRyaXZlck1lc3NhZ2UudmFsdWUsXG4gICAgICB9XG4gICAgICB0aGlzLnV0aWxzLnBvc3RkYXRhKCdqb2JzX3JlcG9ydF9jaGF0JywgZGF0YSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzWydkYXRhJ11bJ3N0YXR1cyddID09PSAnU3VjY2Vzcy4nKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5kcml2ZXJNZXNzYWdlLnJlc2V0KCk7XG4gICAgICAgICAgdGhpcy51dGlscy5vcGVuU25hY2tCYXIoJ01lc3NhZ2UgU2VudCcsICdzdWNjZXNzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy51dGlscy5vcGVuU25hY2tCYXIoJ01lc3NhZ2Ugbm90IHNlbnQnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgfSwgZXJyID0+IHtpZihlcnIpIHt0aGlzLm1lc3NhZ2VMb2FkZXIgPSBmYWxzZX19KVxuICAgIH1cbiB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2Nyb2xscHJ0IGFkZHJvdXRlbGlzdFwiIFtjbGFzcy52aWV3cm91dGVdPVwidmlzaWJsZXNlY3Rpb24oJ2FkZHJvdXRlJylcIlxuICBbY2xhc3Muam9iTGlzdF09XCJ2aXNpYmxlc2VjdGlvbignam9iY29kZScpXCI+XG4gIDxidXR0b24gKGNsaWNrKT1cInNob3dSb3V0ZSgpXCIgW2Rpc2FibGVkXT1cImxvYWRlclwiICpuZ0lmPVwic2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZC5sZW5ndGhcIiBjbGFzcz1cInNob3dfcm91dGVidG5cIj5TaG93IGFsbFxuICAgIHJvdXRlPC9idXR0b24+XG4gICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBpdGVtU2l6ZT1cIjUwXCIgW2NsYXNzLmpvYnNjcm9sbF09XCJ2aXNpYmxlc2VjdGlvbignam9iY29kZScpXCIgY2xhc3M9XCJleGFtcGxlLXZpZXdwb3J0XCI+XG4gICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJsb2FkZXJcIj48L21hdC1zcGlubmVyPlxuICAgICAgPHVsICpuZ0lmPVwiIWxvYWRlciAmJiBkYXRhLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGxpIFtjbGFzcy5hY3RpdmVdPVwicm91dGVbJ2lzQWN0aXZlJ10gJiYgdmlzaWJsZXNlY3Rpb24oJ2FkZHJvdXRlJylcIiAqbmdGb3I9XCJsZXQgcm91dGUgb2YgZGF0YVwiPlxuICAgICAgICAgIDxhcHAtam9iLWNvZGUtbGlzdC1jYXJkICpuZ0lmPVwidmlzaWJsZXNlY3Rpb24oJ2pvYmNvZGUnKVwiICh0b2dnbGVEcml2ZXJtZW51KT1cInRvZ2dsZURyaXZlcm1lbnUoJGV2ZW50KVwiXG4gICAgICAgICAgICAocm91dGVTZWxldGlvbik9XCJzZWxlY3RSb3V0ZSgkZXZlbnQpXCIgW3ByZXZlbnRDbG9zZURldGFpbHNdPVwicHJldmVudERldGFpbHNDbG9zZVwiIFtlbWl0Sm9iZGV0YWlsc109XCJ7ZW1pdHJvdXRlLCBjbGVhckpvYkRldGFpbHNGcm9tTGlzdH1cIiBbcm91dGVdPVwiY2hlY2tyb3V0ZXMocm91dGUpXCI+PC9hcHAtam9iLWNvZGUtbGlzdC1jYXJkPlxuICAgICAgICAgIDxhcHAtdmlldy1yb3V0ZS1saXN0LWNhcmQgW2VtaXRyb3V0ZWV2ZW50XT1cImVtaXRyb3V0ZVwiICpuZ0lmPVwidmlzaWJsZXNlY3Rpb24oJ2FkZHJvdXRlJylcIlxuICAgICAgICAgICAgW3JvdXRlXT1cInJvdXRlXCI+PC9hcHAtdmlldy1yb3V0ZS1saXN0LWNhcmQ+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgICAgPHAgKm5nSWY9XCIhbG9hZGVyICYmIGRhdGEubGVuZ3RoID09PSAwXCI+e3t2aXNpYmxlc2VjdGlvbignYWRkcm91dGUnKSA/ICdObyBSb3V0ZSBmb3VuZCcgOiAnTm8gSm9iIGNvZGUgZm91bmQuJ319PC9wPlxuICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJkcml2ZXJfbGlzdFwiICpuZ0lmPVwiaXNEcml2ZXJMaXN0XCI+XG4gIDxkaXYgY2xhc3M9XCJkcml2ZXJfaGVhZGluZ3BydFwiPlxuICAgIDxoMj5Ecml2ZXIgTGlzdDwvaDI+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImRyaXZlckxpc3QuZHJpdmVyX2xpc3Q/Lmxlbmd0aCA+IDBcIiAoY2xpY2spPVwiaXNTbXNMaXN0ID0gdHJ1ZVwiPlNNUzwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJjbG9zZWJ0blwiIChjbGljayk9XCJpc0RyaXZlckxpc3QgPSBmYWxzZTsgcHJldmVudE1vdXNlb3V0ID0gZmFsc2U7IGlzU21zTGlzdCA9IGZhbHNlXCI+XG4gICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPHVsIGNsYXNzPVwiZHJpdmVyTGlzdFwiICpuZ0lmPVwiZHJpdmVyTGlzdCAmJiBkcml2ZXJMaXN0LmRyaXZlcl9saXN0XCI+XG4gICAgPGxpICpuZ0Zvcj1cImxldCBkcml2ZXIgb2YgZHJpdmVyTGlzdD8uZHJpdmVyX2xpc3RcIj5cbiAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ltYWdlcy9kcml2ZXJfaWNvbi5wbmdcIiBbYWx0XT1cImRyaXZlclsnZHJpdmVyX25hbWUnXVwiIC8+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHJpdmVyX2RldGFpbFwiPlxuICAgICAgICA8Yj57e2RyaXZlclsnZHJpdmVyX25hbWUnXX19PC9iPiA8c3Bhbj57e2RyaXZlclsndHJ1Y2tpbmdfY29tcGFueSddfX08L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250X2RlbFwiPlxuICAgICAgICAgIDxzbWFsbD5Ecml2ZXIgY29udGFjdDogPGI+e3tkcml2ZXJbJ2RyaXZlcl9waG9uZSddID8gZHJpdmVyWydkcml2ZXJfcGhvbmUnXSA6ICdOL0EnfX08L2I+PC9zbWFsbD5cbiAgICAgICAgICA8c21hbGw+Q29tcGFueSBjb250YWN0OiA8Yj57e2RyaXZlclsndHJ1Y2tpbmdfY29tcGFueV9waG9uZSddID8gZHJpdmVyWyd0cnVja2luZ19jb21wYW55X3Bob25lJ10gOiAnTi9BJ319PC9iPjwvc21hbGw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9saT5cbiAgICA8cCAqbmdJZj1cImRyaXZlckxpc3QuZHJpdmVyX2xpc3Q/Lmxlbmd0aCA9PT0gMFwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6NzAwOyB0ZXh0LWFsaWduOmNlbnRlcjtcIj5cbiAgICAgIE5vIERyaXZlciBmb3VuZFxuICAgIDwvcD5cbiAgPC91bD5cbiAgPGRpdiBjbGFzcz1cInNtc2xpc3RcIiAqbmdJZj1cImlzU21zTGlzdFwiPlxuICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCI+XG4gICAgICA8aDI+U01TIEFsbCBEcml2ZXJzPC9oMj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZWJ0blwiIChjbGljayk9XCJpc1Ntc0xpc3QgPSBmYWxzZVwiPlxuICAgICAgICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImRldGFpbHBydFwiPlxuICAgICAgPGFwcC1zbXMtY2FyZC1kZXRhaWxzLW92ZXJ2aWV3IFtqb2JWYWx1ZV09XCJkcml2ZXJMaXN0XCI+PC9hcHAtc21zLWNhcmQtZGV0YWlscy1vdmVydmlldz5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtX2lucHV0XCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImV4YW1wbGUtZnVsbC13aWR0aFwiPlxuICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlRleHQgaGVyZS4uLlwiIGF1dG9jb21wbGV0ZT1cIm5vcGVcIiBjb2x1bW49XCIxMFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZHJpdmVyTWVzc2FnZVwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPG1hdC1oaW50Pnt7ZHJpdmVyTWVzc2FnZS52YWx1ZT8ubGVuZ3RofX0gLyAyNTY8L21hdC1oaW50PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIW1lc3NhZ2VMb2FkZXJcIiBbZGlzYWJsZWRdPVwiIWRyaXZlck1lc3NhZ2UudmFsdWUgfHwgZHJpdmVyTWVzc2FnZS5pbnZhbGlkXCIgKGNsaWNrKT1cInNlbmRNZXNzYWdlKClcIj5cbiAgICAgICAgICBTZW5kIFNNU1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsb2FkZXJcIj5cbiAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cIm1lc3NhZ2VMb2FkZXJcIj48L21hdC1zcGlubmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
321
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtam9iY29kZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvcm91dGUtam9iY29kZS1saXN0L3JvdXRlLWpvYmNvZGUtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb29sbWFwL3NyYy9saWIvY29tcG9uZW50L3JvdXRlLWpvYmNvZGUtbGlzdC9yb3V0ZS1qb2Jjb2RlLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBUXpELE1BQU0sT0FBTyx5QkFBeUI7SUFvQmpCO0lBQWdDO0lBbkJuQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2QsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUNsQixJQUFJLEdBQVksRUFBRSxDQUFDO0lBQ25CLFVBQVUsR0FBVyxFQUFFLENBQUE7SUFDdEIsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDL0IsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDbkQsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUNqQyxVQUFVLEdBQVksSUFBSSxDQUFDLElBQUksQ0FBQztJQUNoQixVQUFVLENBQU87SUFDakMsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUN2QixhQUFhLEdBQUcsSUFBSSxjQUFjLENBQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3hELFVBQVUsQ0FBTztJQUNqQixpQkFBaUIs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QyxFQUFFLEdBQUUsSUFBRyxHQUFHLEVBQUUsQ0FBQztnQkFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQTtZQUFBLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQTtRQUNuRCxDQUFDO0lBQ0osQ0FBQzt1R0E5TlcseUJBQXlCOzJGQUF6Qix5QkFBeUIsZ1dDVnRDLDJzSEF5RUE7OzJGRC9EYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usd0JBQXdCOzhHQUtsQixNQUFNO3NCQUFyQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNXLFNBQVM7c0JBQXpCLE1BQU07Z0JBQ1UsWUFBWTtzQkFBNUIsTUFBTTtnQkFHUyxVQUFVO3NCQUF6QixLQUFLO2dCQUtXLHVCQUF1QjtzQkFBdkMsTUFBTTtnQkFJUyxpQkFBaUI7c0JBQWhDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29vbG1hcFNlcnZpY2UsIFJvdXRlLCBVdGlsc1NlcnZpY2UgfSBmcm9tICdAYWdnZGlyZWN0L2Nvb2xtYXAtc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcm91dGUtam9iY29kZS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JvdXRlLWpvYmNvZGUtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JvdXRlLWpvYmNvZGUtbGlzdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJvdXRlSm9iQ29kZUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkZXIgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgdHlwZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhOiBSb3V0ZVtdID0gW107XG4gIEBJbnB1dCgpIHB1YmxpYyBjdXJyZW50TmF2OiBzdHJpbmcgPSAnJ1xuICBAT3V0cHV0KCkgcHVibGljIGVtaXRyb3V0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBzaG93QWxsUm91dGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHByZXZlbnRNb3VzZW91dDogYm9vbGVhbiA9IGZhbHNlO1xuICBmaWx0ZXJMaXN0OiBSb3V0ZVtdID0gdGhpcy5kYXRhO1xuICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoVGVybSE6IGFueTtcbiAgaXNEcml2ZXJMaXN0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzZWxlY3RlZFJvdXRlID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10pXG4gIGRyaXZlckxpc3QhOiBhbnk7XG4gIHByZXZlbnRMaXN0U2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xlYXJKb2JEZXRhaWxzRnJvbUxpc3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHByZXZlbnREZXRhaWxzQ2xvc2UgPSBmYWxzZTtcbiAgbWVzc2FnZUxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBkcml2ZXJNZXNzYWdlID0gbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU2KV0pO1xuICBASW5wdXQoKSBwdWJsaWMgY2xlYXJMaXN0U2VsZXRpb246IGJvb2xlYW47XG4gIGlzU21zTGlzdDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29vbE1hcDogQ29vbG1hcFNlcnZpY2UsIHB1YmxpYyB1dGlsczogVXRpbHNTZXJ2aWNlKSB7IHRoaXMuZHJpdmVyTGlzdCA9IFtdIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51dGlscy5nZXRwcmVWZW50Sm9iZGV0YWlsY2xvc2Uuc3Vic2NyaWJlKHJlcyA9PiB7IHRoaXMucHJldmVudERldGFpbHNDbG9zZSA9IHJlcyB9KTtcbiAgICB0aGlzLnV0aWxzLnJlbW92ZU1hcEVudGl0eVV0aWxpdHkuc3Vic2NyaWJlKChyZXM6IFJvdXRlKSA9PiB7dGhpcy5wYXNzUm91dGUocmVzKX0pO1xuICB9XG4gIHBhc3NSb3V0ZShqb2I6IFJvdXRlKSB7XG4gICAgdGhpcy5kYXRhLmZvckVhY2goKGVhY2gpID0+IHsgaWYgKGVhY2hbJ3JvdXRlX2lkJ10gIT09IGpvYlsncm91dGVfaWQnXSkgeyBlYWNoWydpc0FjdGl2ZSddID0gZmFsc2UgfSBlbHNlIHsgZWFjaFsnaXNBY3RpdmUnXSA9IHRydWUgfSB9KTtcbiAgICBpZiAodGhpcy50eXBlID09ICdhZGRyb3V0ZScpIHRoaXMuZmlsdGVyTGlzdC5mb3JFYWNoKGVsZSA9PiB0aGlzLmNvb2xNYXAuZmlsdGVyUm91dGUoZWxlWydyb3V0ZV9pZCddLCAnbm9uZScpKTtcbiAgfVxuICBzZWxlY3RSb3V0ZShyb3V0ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLnByZXZlbnRMaXN0U2VsZWN0KSB7XG4gICAgICB0aGlzLnByZXZlbnRMaXN0U2VsZWN0ID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3V0ZS50b2dnbGUocm91dGUpO1xuICAgICAgdGhpcy5jbGVhckpvYkRldGFpbHNGcm9tTGlzdC5lbWl0KHRydWUpO1xuICAgICAgdGhpcy51dGlscy5wcmVWZW50Sm9iZGV0YWlsY2xvc2UubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLmZpbHRlckxpc3QuZm9yRWFjaChlbGUgPT4gdGhpcy5jb29sTWFwLmZpbHRlclJvdXRlKGVsZVsnam9iX2lkJ10sICdub25lJykpO1xuICAgICAgdGhpcy5jbGVhckxpc3QoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZC5mb3JFYWNoKChlbGUsIGluZGV4KSA9PiB7XG4gICAgICAgIHRoaXMuY29vbE1hcC5maWx0ZXJSb3V0ZShlbGVbJ2pvYl9pZCddLCAndmlzaWJsZScsICgodGhpcy5zZWxlY3RlZFJvdXRlLnNlbGVjdGVkLmxlbmd0aCAtIDEpID09PSBpbmRleCkpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJldmVudExpc3RTZWxlY3QgPSBmYWxzZTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkUm91dGUuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucHJldmVudExpc3RTZWxlY3QgPSBmYWxzZVxuICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaChlbGUgPT4gdGhpcy5jb29sTWFwLmZpbHRlclJvdXRlKGVsZVsnam9iX2lkJ10sICd2aXNpYmxlJykpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgY2hlY2tyb3V0ZXMocm91dGU6IFJvdXRlKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3V0ZSA9IHRoaXMuc2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZDtcbiAgICB0aGlzLmZpbHRlckxpc3QgPSB0aGlzLmZpbHRlckxpc3QubWFwKGVsZSA9PiB7IGVsZVsnaXNTZWxlY3RlZCddID0gZmFsc2U7IHJldHVybiBlbGUgfSlcbiAgICBpZiAoc2VsZWN0ZWRSb3V0ZS5sZW5ndGggPiAwKSB7XG4gICAgICBzZWxlY3RlZFJvdXRlLmZvckVhY2goZWxlID0+IHtcbiAgICAgICAgaWYgKHJvdXRlWydvcmRlcl9udW1iZXInXSA9PT0gZWxlWydvcmRlcl9udW1iZXInXSkgeyBlbGVbJ2lzU2VsZWN0ZWQnXSA9IHRydWUgfVxuICAgICAgfSk7XG4gICAgfSByZXR1cm4gcm91dGVcbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50TmF2ID09PSAnQWRkcm91dGUnICYmICh0aGlzLmRhdGEubGVuZ3RoIDwgdGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCkpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbHRlckxpc3QuZmluZEluZGV4KGVsZSA9PiBlbGUuaXNBY3RpdmUpO1xuICAgICAgICBpZiAoaW5kZXggPiAwKSB0aGlzLmZpbHRlckxpc3RbaW5kZXhdLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKChlbGU6IFJvdXRlLCBpbmRleEZvckRhdGE6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gKGVsZVsnam9iX2lkJ10gPyBlbGVbJ2pvYl9pZCddIDogZWxlWydyb3V0ZV9pZCddKVxuICAgICAgICAgIHRoaXMuY29vbE1hcC5wbG90Um91dGUoZWxlLCBpZCwgdGhpcy50eXBlLCBmYWxzZSwgKGluZGV4Rm9yRGF0YSA9PT0gKHRoaXMuZGF0YS5sZW5ndGggLSAxKSkpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gJiYgY2hhbmdlc1snZGF0YSddWydjdXJyZW50VmFsdWUnXSkge1xuICAgICAgdGhpcy5maWx0ZXJMaXN0ID0gY2hhbmdlc1snZGF0YSddWydjdXJyZW50VmFsdWUnXTtcbiAgICAgIGlmICh0aGlzLnNlYXJjaFRlcm0pIHtcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGVybS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy51dGlscy5nZXRTZWFyY2hSZXN1bHRzKGNoYW5nZXNbJ2RhdGEnXVsnY3VycmVudFZhbHVlJ10sIHRoaXMuc2VhcmNoVGVybSk7XG4gICAgICAgICAgdGhpcy5maWx0ZXJMaXN0ID0gdGhpcy5kYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmlsdGVyTGlzdCA9IGNoYW5nZXNbJ2RhdGEnXVsnY3VycmVudFZhbHVlJ107XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2pvYmNvZGUnKSB7XG4gICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTsgdGhpcy5jbGVhckxpc3QoKTtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyTGlzdC5sZW5ndGggPT09IDApIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnR5cGUgIT09ICdqb2Jjb2RlJykge1xuICAgICAgICBpZiAoY2hhbmdlc1snZGF0YSddWydwcmV2aW91c1ZhbHVlJ10gJiYgdGhpcy5jdXJyZW50TmF2ID09PSAnYWRkRm9ybScpIHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVSb3V0ZSA9IGNoYW5nZXNbJ2RhdGEnXVsncHJldmlvdXNWYWx1ZSddLmZpbmQoKGVsZTogUm91dGUpID0+IGVsZS5pc0FjdGl2ZSk7XG4gICAgICAgICAgaWYgKGFjdGl2ZVJvdXRlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckxpc3QubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGl0ZW0ucm91dGVfaWQgPT09IGFjdGl2ZVJvdXRlLnJvdXRlX2lkKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlc1snZGF0YSddWydwcmV2aW91c1ZhbHVlJ10gJiYgdGhpcy5jdXJyZW50TmF2ICE9PSAnYWRkRm9ybScpIHtcbiAgICAgICAgdGhpcy5jb29sTWFwLnJlbW92ZUpvYkZyb21NYXAoY2hhbmdlc1snZGF0YSddWydwcmV2aW91c1ZhbHVlJ10pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm91dGUuY2xlYXIoKTtcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5jdXJyZW50TmF2ICE9PSAnYWRkRm9ybScpIHtcbiAgICAgICAgY2hhbmdlc1snZGF0YSddWydjdXJyZW50VmFsdWUnXS5mb3JFYWNoKChlbGU6IFJvdXRlLCBpbmRleEZvckRhdGE6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gKGVsZVsnam9iX2lkJ10gPyBlbGVbJ2pvYl9pZCddIDogZWxlWydyb3V0ZV9pZCddKVxuICAgICAgICAgIGlmKHRoaXMudHlwZSA9PT0gJ2pvYmNvZGUnKSBlbGUubWF0ZXJpYWxMYWJlbCA9IGVsZS5tYXRlcmlhbDtcbiAgICAgICAgICB0aGlzLmNvb2xNYXAucGxvdFJvdXRlKGVsZSwgaWQsIHRoaXMudHlwZSwgZmFsc2UsIChpbmRleEZvckRhdGEgPT09ICh0aGlzLmRhdGEubGVuZ3RoIC0gMSkpKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleEZvckRhdGEgPT09ICh0aGlzLmRhdGEubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snc2VhcmNoVGVybSddKSB7XG4gICAgICBpZiAodGhpcy5maWx0ZXJMaXN0KSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZmlsdGVyTGlzdDtcbiAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ3NlYXJjaFRlcm0nXVsnY3VycmVudFZhbHVlJ10ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuY29vbE1hcC5yZW1vdmVSb3V0ZUFuZE1hcmtlcigxKTtcbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLnV0aWxzLmdldFNlYXJjaFJlc3VsdHModGhpcy5kYXRhLCBjaGFuZ2VzWydzZWFyY2hUZXJtJ11bJ2N1cnJlbnRWYWx1ZSddKTtcbiAgICAgICAgfSBlbHNlIHsgdGhpcy5kYXRhID0gdGhpcy5maWx0ZXJMaXN0OyB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29vbE1hcC5jbGVhckJvdW5kV2l0aENvcmRpbmF0ZXMoKTtcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50TmF2ICE9PSAnYWRkRm9ybScgJiYgIXRoaXMuc2VsZWN0ZWRSb3V0ZVsnc2VsZWN0ZWQnXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY29vbE1hcC5yZW1vdmVSb3V0ZUFuZE1hcmtlcigxKTtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRmlsdGVyUm91dGUodGhpcy5maWx0ZXJMaXN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnROYXYgIT09ICdhZGRGb3JtJyAmJiB0aGlzLnNlbGVjdGVkUm91dGVbJ3NlbGVjdGVkJ10ubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJKb2JEZXRhaWxzRnJvbUxpc3QuZW1pdCh0cnVlKVxuICAgICAgICAgICAgdGhpcy5jb29sTWFwLnJlbW92ZUpvYkZyb21NYXAodGhpcy5zZWxlY3RlZFJvdXRlLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmRhdGEuZm9yRWFjaCgoZWxlLCBpbmRleEZvckRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvb2xNYXAucGxvdFJvdXRlKGVsZSwgZWxlWydqb2JfaWQnXSwgdGhpcy50eXBlLCBmYWxzZSwgKGluZGV4Rm9yRGF0YSA9PT0gKHRoaXMuZGF0YS5sZW5ndGggLSAxKSkpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGluZGV4Rm9yRGF0YSA9PT0gKHRoaXMuZGF0YS5sZW5ndGggLSAxKSkgeyB0aGlzLmxvYWRlciA9IGZhbHNlOyB0aGlzLnV0aWxzLnByZXZlbnRuYXZDaGFuZ2UubmV4dCh0cnVlKSB9XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvdXRlWydzZWxlY3RlZCddLmxlbmd0aCAmJiB0aGlzLnNlbGVjdGVkUm91dGVbJ3NlbGVjdGVkJ11bMF1bJ2pvYl9pZCddID09PSBlbGVbJ2pvYl9pZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3V0ZS5jbGVhcigpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBzaG93Um91dGUoKSB7XG4gICAgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQoZmFsc2UpO1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTsgdGhpcy5jbGVhckxpc3QoKTtcbiAgICB0aGlzLnNob3dBbGxSb3V0ZS5lbWl0KHRydWUpO1xuICAgIGlmICh0aGlzLmZpbHRlckxpc3QgJiYgdGhpcy5maWx0ZXJMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29vbE1hcC5yZW1vdmVKb2JGcm9tTWFwKHRoaXMuc2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJMaXN0LmZvckVhY2goKGVsZSwgaW5kZXhGb3JEYXRhKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb29sTWFwLnBsb3RSb3V0ZShlbGUsIGVsZVsnam9iX2lkJ10sIHRoaXMudHlwZSwgZmFsc2UsIChpbmRleEZvckRhdGEgPT09IHRoaXMuZmlsdGVyTGlzdC5sZW5ndGggLSAxKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5kZXhGb3JEYXRhID09PSB0aGlzLmZpbHRlckxpc3QubGVuZ3RoIC0gMSkgeyB0aGlzLmxvYWRlciA9IGZhbHNlOyB0aGlzLnV0aWxzLnByZXZlbnRuYXZDaGFuZ2UubmV4dCh0cnVlKSB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvdXRlWydzZWxlY3RlZCddLmxlbmd0aCAmJiB0aGlzLnNlbGVjdGVkUm91dGVbJ3NlbGVjdGVkJ11bMF1bJ2pvYl9pZCddID09PSBlbGVbJ2pvYl9pZCddKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3V0ZS5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgfSwgNTAwKTtcbiAgICB9XG4gIH1cbiAgdG9nZ2xlRHJpdmVybWVudShldmVudDogYW55KSB7XG4gICAgY29uc3QgbW91c2Vldm50VHlwZSA9IGV2ZW50Lm1vdXNlZXZudFR5cGU7IGxldCByb3V0ZSA9IGV2ZW50LnJvdXRlO1xuICAgIGNvbnN0IGlzSG92ZXJPdXQgPSBldmVudC5pc0hvdmVyT3V0O1xuICAgIGlmKHR5cGVvZihtb3VzZWV2bnRUeXBlKSA9PT0gJ3N0cmluZycpIHtpZih0aGlzLnByZXZlbnRNb3VzZW91dCl7dGhpcy5pc0RyaXZlckxpc3QgPSAhdGhpcy5pc0RyaXZlckxpc3R9OyB0aGlzLnByZXZlbnRNb3VzZW91dCA9IHRydWV9XG4gICAgaWYgKHR5cGVvZihtb3VzZWV2bnRUeXBlKSA9PT0gJ2Jvb2xlYW4nICYmIW1vdXNlZXZudFR5cGUgJiYgIXRoaXMucHJldmVudE1vdXNlb3V0KSB7IHRoaXMuaXNEcml2ZXJMaXN0ID0gbW91c2Vldm50VHlwZSB9O1xuICAgIGlmICh0eXBlb2YobW91c2Vldm50VHlwZSkgPT09ICdib29sZWFuJyAmJiBtb3VzZWV2bnRUeXBlICYmICF0aGlzLnByZXZlbnRNb3VzZW91dCkgeyB0aGlzLmlzRHJpdmVyTGlzdCA9IG1vdXNlZXZudFR5cGUgfTtcbiAgICBpZih0aGlzLnByZXZlbnRNb3VzZW91dCAmJiAhdGhpcy5pc0RyaXZlckxpc3QpIHRoaXMucHJldmVudE1vdXNlb3V0ID0gZmFsc2U7XG4gICAgaWYgKGlzSG92ZXJPdXQpIHtcbiAgICAgIGlmICh0aGlzLnByZXZlbnRNb3VzZW91dCkge1xuICAgICAgICByb3V0ZSA9IHRoaXMudXRpbHMuZ2V0ZGljdFZhbHVlKCdkcml2ZXItZGV0YWlscycpO1xuICAgICAgICB0aGlzLmRyaXZlckxpc3QgPSByb3V0ZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5wcmV2ZW50TW91c2VvdXQpIHtcbiAgICAgICAgdGhpcy5kcml2ZXJMaXN0ID0gcm91dGVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kcml2ZXJMaXN0ID0gcm91dGVcbiAgICB9XG4gIH1cbiAgdmlzaWJsZXNlY3Rpb24odmFsdWU6IHN0cmluZykgeyBpZiAodGhpcy50eXBlID09PSB2YWx1ZSkgeyByZXR1cm4gdHJ1ZSB9IGVsc2UgcmV0dXJuIGZhbHNlIH1cbiAgdG9nZ2xlRmlsdGVyUm91dGUoZmlsdGVyTGlzdDogUm91dGVbXSkge1xuICAgIGZpbHRlckxpc3QuZm9yRWFjaCgoZWxlKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJJdGVtID0gKHRoaXMudHlwZSA9PT0gJ2pvYmNvZGUnKSA/ICdqb2JfaWQnIDogJ3JvdXRlX2lkJztcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhLmZpbmRJbmRleCgoZWxlMSkgPT4geyByZXR1cm4gKGVsZTFbYCR7ZmlsdGVySXRlbX1gXSA9PT0gZWxlW2Ake2ZpbHRlckl0ZW19YF0pIH0pO1xuICAgICAgY29uc3QgaWQgPSAoZWxlWydqb2JfaWQnXSA/IGVsZVsnam9iX2lkJ10gOiBlbGVbJ3JvdXRlX2lkJ10pO1xuICAgICAgaWYgKGlkICYmIGluZGV4IDwgMCkgdGhpcy5jb29sTWFwLmZpbHRlclJvdXRlKGlkLCAnbm9uZScpO1xuICAgICAgaWYgKGlkICYmIGluZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy5kYXRhW2luZGV4XS5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvb2xNYXAuZmlsdGVyUm91dGUoaWQsICd2aXNpYmxlJyk7XG4gICAgICAgIHRoaXMuY29vbE1hcC5leHRlbmRCb3VuZChlbGVbJ3BhdGgnXSwgKGluZGV4ID09PSAodGhpcy5kYXRhLmxlbmd0aCAtIDEpKSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIGNsZWFyTGlzdCgpIHtcbiAgICB0aGlzLmlzRHJpdmVyTGlzdCA9IGZhbHNlOyB0aGlzLmRyaXZlckxpc3QgPSBudWxsOyB0aGlzLnByZXZlbnRNb3VzZW91dCA9IGZhbHNlOyB0aGlzLmlzU21zTGlzdCA9IGZhbHNlO1xuICB9XG4gIHNlbmRNZXNzYWdlKCkge1xuICAgIHRoaXMubWVzc2FnZUxvYWRlciA9IHRydWVcbiAgICBpZiAodGhpcy5kcml2ZXJNZXNzYWdlLnZhbGlkKSB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBvcmRlcl9udW1iZXI6IHRoaXMuZHJpdmVyTGlzdFsnb3JkZXJfbnVtYmVyJ10sXG4gICAgICAgIGRhdGU6IHRoaXMuZHJpdmVyTGlzdFsnZGF0ZSddLFxuICAgICAgICBtZXNzYWdlOiB0aGlzLmRyaXZlck1lc3NhZ2UudmFsdWUsXG4gICAgICB9XG4gICAgICB0aGlzLnV0aWxzLnBvc3RkYXRhKCdqb2JzX3JlcG9ydF9jaGF0JywgZGF0YSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzWydkYXRhJ11bJ3N0YXR1cyddID09PSAnU3VjY2Vzcy4nKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5kcml2ZXJNZXNzYWdlLnJlc2V0KCk7XG4gICAgICAgICAgdGhpcy51dGlscy5vcGVuU25hY2tCYXIoJ01lc3NhZ2UgU2VudCcsICdzdWNjZXNzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy51dGlscy5vcGVuU25hY2tCYXIoJ01lc3NhZ2Ugbm90IHNlbnQnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgfSwgZXJyID0+IHtpZihlcnIpIHt0aGlzLm1lc3NhZ2VMb2FkZXIgPSBmYWxzZX19KVxuICAgIH1cbiB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2Nyb2xscHJ0IGFkZHJvdXRlbGlzdFwiIFtjbGFzcy52aWV3cm91dGVdPVwidmlzaWJsZXNlY3Rpb24oJ2FkZHJvdXRlJylcIlxuICBbY2xhc3Muam9iTGlzdF09XCJ2aXNpYmxlc2VjdGlvbignam9iY29kZScpXCI+XG4gIDxidXR0b24gKGNsaWNrKT1cInNob3dSb3V0ZSgpXCIgW2Rpc2FibGVkXT1cImxvYWRlclwiICpuZ0lmPVwic2VsZWN0ZWRSb3V0ZS5zZWxlY3RlZC5sZW5ndGhcIiBjbGFzcz1cInNob3dfcm91dGVidG5cIj5TaG93IGFsbFxuICAgIHJvdXRlPC9idXR0b24+XG4gICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBpdGVtU2l6ZT1cIjUwXCIgW2NsYXNzLmpvYnNjcm9sbF09XCJ2aXNpYmxlc2VjdGlvbignam9iY29kZScpXCIgY2xhc3M9XCJleGFtcGxlLXZpZXdwb3J0XCI+XG4gICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJsb2FkZXJcIj48L21hdC1zcGlubmVyPlxuICAgICAgPHVsICpuZ0lmPVwiIWxvYWRlciAmJiBkYXRhLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGxpIFtjbGFzcy5hY3RpdmVdPVwicm91dGVbJ2lzQWN0aXZlJ10gJiYgdmlzaWJsZXNlY3Rpb24oJ2FkZHJvdXRlJylcIiAqbmdGb3I9XCJsZXQgcm91dGUgb2YgZGF0YVwiPlxuICAgICAgICAgICAgPGFwcC1qb2ItY29kZS1saXN0LWNhcmQgKm5nSWY9XCJ2aXNpYmxlc2VjdGlvbignam9iY29kZScpXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9nZ2xlRHJpdmVybWVudSk9XCJ0b2dnbGVEcml2ZXJtZW51KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJvdXRlU2VsZXRpb24pPVwic2VsZWN0Um91dGUoJGV2ZW50KVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZXZlbnRDbG9zZURldGFpbHNdPVwicHJldmVudERldGFpbHNDbG9zZVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VtaXRKb2JkZXRhaWxzXT1cIntlbWl0cm91dGUsIGNsZWFySm9iRGV0YWlsc0Zyb21MaXN0fVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlXT1cImNoZWNrcm91dGVzKHJvdXRlKVwiPlxuICAgICAgICAgICAgPC9hcHAtam9iLWNvZGUtbGlzdC1jYXJkPlxuICAgICAgICAgICAgPGFwcC12aWV3LXJvdXRlLWxpc3QtY2FyZCAqbmdJZj1cInZpc2libGVzZWN0aW9uKCdhZGRyb3V0ZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VtaXRyb3V0ZWV2ZW50XT1cImVtaXRyb3V0ZVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVdPVwicm91dGVcIj5cbiAgICAgICAgICAgIDwvYXBwLXZpZXctcm91dGUtbGlzdC1jYXJkPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDxwICpuZ0lmPVwiIWxvYWRlciAmJiBkYXRhLmxlbmd0aCA9PT0gMFwiPnt7dmlzaWJsZXNlY3Rpb24oJ2FkZHJvdXRlJykgPyAnTm8gUm91dGUgZm91bmQnIDogJ05vIEpvYiBjb2RlIGZvdW5kLid9fTwvcD5cbiAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZHJpdmVyX2xpc3RcIiAqbmdJZj1cImlzRHJpdmVyTGlzdFwiPlxuICA8ZGl2IGNsYXNzPVwiZHJpdmVyX2hlYWRpbmdwcnRcIj5cbiAgICA8aDI+RHJpdmVyIExpc3Q8L2gyPlxuICAgIDxidXR0b24gKm5nSWY9XCJkcml2ZXJMaXN0LmRyaXZlcl9saXN0Py5sZW5ndGggPiAwXCIgKGNsaWNrKT1cImlzU21zTGlzdCA9IHRydWVcIj5TTVM8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiY2xvc2VidG5cIiAoY2xpY2spPVwiaXNEcml2ZXJMaXN0ID0gZmFsc2U7IHByZXZlbnRNb3VzZW91dCA9IGZhbHNlOyBpc1Ntc0xpc3QgPSBmYWxzZVwiPlxuICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx1bCBjbGFzcz1cImRyaXZlckxpc3RcIiAqbmdJZj1cImRyaXZlckxpc3QgJiYgZHJpdmVyTGlzdC5kcml2ZXJfbGlzdFwiPlxuICAgIDxsaSAqbmdGb3I9XCJsZXQgZHJpdmVyIG9mIGRyaXZlckxpc3Q/LmRyaXZlcl9saXN0XCI+XG4gICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvZHJpdmVyX2ljb24ucG5nXCIgW2FsdF09XCJkcml2ZXJbJ2RyaXZlcl9uYW1lJ11cIiAvPlxuICAgICAgPGRpdiBjbGFzcz1cImRyaXZlcl9kZXRhaWxcIj5cbiAgICAgICAgPGI+e3tkcml2ZXJbJ2RyaXZlcl9uYW1lJ119fTwvYj4gPHNwYW4+e3tkcml2ZXJbJ3RydWNraW5nX2NvbXBhbnknXX19PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udF9kZWxcIj5cbiAgICAgICAgICA8c21hbGw+RHJpdmVyIGNvbnRhY3Q6IDxiPnt7ZHJpdmVyWydkcml2ZXJfcGhvbmUnXSA/IGRyaXZlclsnZHJpdmVyX3Bob25lJ10gOiAnTi9BJ319PC9iPjwvc21hbGw+XG4gICAgICAgICAgPHNtYWxsPkNvbXBhbnkgY29udGFjdDogPGI+e3tkcml2ZXJbJ3RydWNraW5nX2NvbXBhbnlfcGhvbmUnXSA/IGRyaXZlclsndHJ1Y2tpbmdfY29tcGFueV9waG9uZSddIDogJ04vQSd9fTwvYj48L3NtYWxsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG4gICAgPHAgKm5nSWY9XCJkcml2ZXJMaXN0LmRyaXZlcl9saXN0Py5sZW5ndGggPT09IDBcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OjcwMDsgdGV4dC1hbGlnbjpjZW50ZXI7XCI+XG4gICAgICBObyBEcml2ZXIgZm91bmRcbiAgICA8L3A+XG4gIDwvdWw+XG4gIDxkaXYgY2xhc3M9XCJzbXNsaXN0XCIgKm5nSWY9XCJpc1Ntc0xpc3RcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiPlxuICAgICAgPGgyPlNNUyBBbGwgRHJpdmVyczwvaDI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2xvc2VidG5cIiAoY2xpY2spPVwiaXNTbXNMaXN0ID0gZmFsc2VcIj5cbiAgICAgICAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxwcnRcIj5cbiAgICAgIDxhcHAtc21zLWNhcmQtZGV0YWlscy1vdmVydmlldyBbam9iVmFsdWVdPVwiZHJpdmVyTGlzdFwiPjwvYXBwLXNtcy1jYXJkLWRldGFpbHMtb3ZlcnZpZXc+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybV9pbnB1dFwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJleGFtcGxlLWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJUZXh0IGhlcmUuLi5cIiBhdXRvY29tcGxldGU9XCJub3BlXCIgY29sdW1uPVwiMTBcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImRyaXZlck1lc3NhZ2VcIj48L3RleHRhcmVhPlxuICAgICAgICAgIDxtYXQtaGludD57e2RyaXZlck1lc3NhZ2UudmFsdWU/Lmxlbmd0aH19IC8gMjU2PC9tYXQtaGludD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFtZXNzYWdlTG9hZGVyXCIgW2Rpc2FibGVkXT1cIiFkcml2ZXJNZXNzYWdlLnZhbHVlIHx8IGRyaXZlck1lc3NhZ2UuaW52YWxpZFwiIChjbGljayk9XCJzZW5kTWVzc2FnZSgpXCI+XG4gICAgICAgICAgU2VuZCBTTVNcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibG9hZGVyXCI+XG4gICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJtZXNzYWdlTG9hZGVyXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -7,10 +7,10 @@ export class SmsCardDetailsOverviewComponent {
|
|
|
7
7
|
label = DriversmsCardKey;
|
|
8
8
|
overViewEnum = DriverSmsCardEnum;
|
|
9
9
|
constructor() { }
|
|
10
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
11
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
10
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: SmsCardDetailsOverviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: SmsCardDetailsOverviewComponent, selector: "app-sms-card-details-overview", inputs: { jobValue: "jobValue" }, ngImport: i0, template: "<ng-container *ngFor=\"let item of label\">\n <span>\n <label>{{overViewEnum[item]}}</label>\n <ng-container *ngIf=\"item !== 'values'\">{{jobValue[item] ? jobValue[item] : 'N/A'}}</ng-container>\n <ng-container *ngIf=\"item === 'values'\">{{jobValue[item]['Done'] + jobValue[item]['Ongoing'] + jobValue[item]['Open']}}</ng-container>\n </span>\n</ng-container>\n", styles: ["span{display:flex;margin-bottom:12px;font-size:.8rem;align-items:center}span label{font-weight:600;width:37%}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
12
12
|
}
|
|
13
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: SmsCardDetailsOverviewComponent, decorators: [{
|
|
14
14
|
type: Component,
|
|
15
15
|
args: [{ selector: 'app-sms-card-details-overview', template: "<ng-container *ngFor=\"let item of label\">\n <span>\n <label>{{overViewEnum[item]}}</label>\n <ng-container *ngIf=\"item !== 'values'\">{{jobValue[item] ? jobValue[item] : 'N/A'}}</ng-container>\n <ng-container *ngIf=\"item === 'values'\">{{jobValue[item]['Done'] + jobValue[item]['Ongoing'] + jobValue[item]['Open']}}</ng-container>\n </span>\n</ng-container>\n", styles: ["span{display:flex;margin-bottom:12px;font-size:.8rem;align-items:center}span label{font-weight:600;width:37%}\n"] }]
|
|
16
16
|
}], ctorParameters: () => [], propDecorators: { jobValue: [{
|
|
@@ -20,10 +20,10 @@ export class ViewRouteListCardComponent {
|
|
|
20
20
|
this.emitrouteevent.emit(route);
|
|
21
21
|
this.utils.routeDetailsUtility.next({ event, route });
|
|
22
22
|
}
|
|
23
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
24
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
23
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: ViewRouteListCardComponent, deps: [{ token: i1.UtilsService }, { token: 'memberData' }], target: i0.ɵɵFactoryTarget.Component });
|
|
24
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: ViewRouteListCardComponent, selector: "app-view-route-list-card", inputs: { route: "route", emitrouteevent: "emitrouteevent" }, ngImport: i0, template: "<div class=\"routebox\">\n <span>\n <mat-icon>directions</mat-icon>\n <h2 [ngClass]=\"{'routeheading': route['route_name']}\">\n {{route['route_name']}}\n </h2>\n </span>\n <h3><ng-container *ngIf=\"config?.repository === 'coolmap'\">{{route['customer_name']}} | </ng-container>{{config.repository === 'coolmap' ? route['material'] : route['materialLabel']}}</h3>\n\n <div class=\"pickdropprt\">\n <div class=\"pickprt\">\n <b>\n <h4>{{route['pickup_location']}}</h4>\n </b>\n </div>\n <div class=\"dropprt\">\n <b>\n <h4>{{route['delivery_location']}}</h4>\n </b>\n </div>\n </div>\n <div class=\"infoicon\" (click)=\"detailsDict('click', route)\" (mouseover)=\"detailsDict(true, route)\"\n (mouseleave)=\"detailsDict(false, route)\">\n <img src=\"assets/images/info_icon.png\" [alt]=\"\" />\n </div>\n <div class=\"status routestatus\" [ngClass]=\"route['unit']\">{{route['unit']}}</div>\n</div>\n\n", styles: [".routebox span{display:flex;align-items:center}.routebox span h2{margin-left:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px;margin-bottom:5px;margin-top:5px;font-size:.95rem}.routebox h3{font-size:.85rem;color:#767676;font-weight:400;margin-top:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:325px;margin-bottom:10px}.routebox .pickdropprt{font-size:.8125rem}.routebox .pickdropprt .pickprt{position:relative;display:flex;align-items:center;padding-bottom:6px}.routebox .pickdropprt .pickprt span{padding-left:0;padding-right:20px;display:block}.routebox .pickdropprt .pickprt b{position:relative;font-weight:400}.routebox .pickdropprt .pickprt b:after{background:#000;width:1px;height:100%;left:3px;content:\"\";position:absolute;top:10px}.routebox .pickdropprt .pickprt h4{position:relative;padding-left:15px;margin:0;line-height:18px;font-weight:400;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;max-width:215px}@media (min-width: 1600px){.routebox .pickdropprt .pickprt h4{max-width:265px}}.routebox .pickdropprt .pickprt h4:before{background:#000;top:4px;left:0;position:absolute;content:\"\";width:7px;height:7px;border-radius:100%}.routebox .pickdropprt .dropprt{position:relative;padding-bottom:10px;display:flex;align-items:center}.routebox .pickdropprt .dropprt span{padding-left:0;padding-right:20px;display:block}.routebox .pickdropprt .dropprt b{position:relative;font-weight:400}.routebox .pickdropprt .dropprt b:after{background:#000;width:1px;height:12px;left:3px;content:\"\";position:absolute;top:-7px}.routebox .pickdropprt .dropprt h4{position:relative;padding-left:15px;margin:0;line-height:18px;font-weight:400;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;max-width:215px}.routebox .pickdropprt .dropprt h4:before{background:#000;top:4px;left:0;position:absolute;content:\"\";width:7px;height:7px;border-radius:100%}.routebox .infoicon{position:absolute;right:10px;bottom:10px}.routebox .infoicon img{width:20px;height:20px}.routebox .status{position:absolute;border-radius:30px;top:12px;right:40px;font-size:0;color:#fff;text-transform:capitalize;font-weight:500;padding:3px 10px}.routebox .status.routestatus{right:10px;width:20px;height:20px;text-align:center;line-height:20px;padding:0 0 0 1px}.routebox .status.routestatus:first-letter{font-size:.8rem}@media (min-width: 1600px){.routebox .status.routestatus{padding:0;line-height:22px}}.routebox .status.Ton{background:#ff7272}.routebox .status.Load{background:#a3c52e}.routebox .status.Hourly{background:#ae23d1}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
25
25
|
}
|
|
26
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: ViewRouteListCardComponent, decorators: [{
|
|
27
27
|
type: Component,
|
|
28
28
|
args: [{ selector: 'app-view-route-list-card', template: "<div class=\"routebox\">\n <span>\n <mat-icon>directions</mat-icon>\n <h2 [ngClass]=\"{'routeheading': route['route_name']}\">\n {{route['route_name']}}\n </h2>\n </span>\n <h3><ng-container *ngIf=\"config?.repository === 'coolmap'\">{{route['customer_name']}} | </ng-container>{{config.repository === 'coolmap' ? route['material'] : route['materialLabel']}}</h3>\n\n <div class=\"pickdropprt\">\n <div class=\"pickprt\">\n <b>\n <h4>{{route['pickup_location']}}</h4>\n </b>\n </div>\n <div class=\"dropprt\">\n <b>\n <h4>{{route['delivery_location']}}</h4>\n </b>\n </div>\n </div>\n <div class=\"infoicon\" (click)=\"detailsDict('click', route)\" (mouseover)=\"detailsDict(true, route)\"\n (mouseleave)=\"detailsDict(false, route)\">\n <img src=\"assets/images/info_icon.png\" [alt]=\"\" />\n </div>\n <div class=\"status routestatus\" [ngClass]=\"route['unit']\">{{route['unit']}}</div>\n</div>\n\n", styles: [".routebox span{display:flex;align-items:center}.routebox span h2{margin-left:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px;margin-bottom:5px;margin-top:5px;font-size:.95rem}.routebox h3{font-size:.85rem;color:#767676;font-weight:400;margin-top:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:325px;margin-bottom:10px}.routebox .pickdropprt{font-size:.8125rem}.routebox .pickdropprt .pickprt{position:relative;display:flex;align-items:center;padding-bottom:6px}.routebox .pickdropprt .pickprt span{padding-left:0;padding-right:20px;display:block}.routebox .pickdropprt .pickprt b{position:relative;font-weight:400}.routebox .pickdropprt .pickprt b:after{background:#000;width:1px;height:100%;left:3px;content:\"\";position:absolute;top:10px}.routebox .pickdropprt .pickprt h4{position:relative;padding-left:15px;margin:0;line-height:18px;font-weight:400;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;max-width:215px}@media (min-width: 1600px){.routebox .pickdropprt .pickprt h4{max-width:265px}}.routebox .pickdropprt .pickprt h4:before{background:#000;top:4px;left:0;position:absolute;content:\"\";width:7px;height:7px;border-radius:100%}.routebox .pickdropprt .dropprt{position:relative;padding-bottom:10px;display:flex;align-items:center}.routebox .pickdropprt .dropprt span{padding-left:0;padding-right:20px;display:block}.routebox .pickdropprt .dropprt b{position:relative;font-weight:400}.routebox .pickdropprt .dropprt b:after{background:#000;width:1px;height:12px;left:3px;content:\"\";position:absolute;top:-7px}.routebox .pickdropprt .dropprt h4{position:relative;padding-left:15px;margin:0;line-height:18px;font-weight:400;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;max-width:215px}.routebox .pickdropprt .dropprt h4:before{background:#000;top:4px;left:0;position:absolute;content:\"\";width:7px;height:7px;border-radius:100%}.routebox .infoicon{position:absolute;right:10px;bottom:10px}.routebox .infoicon img{width:20px;height:20px}.routebox .status{position:absolute;border-radius:30px;top:12px;right:40px;font-size:0;color:#fff;text-transform:capitalize;font-weight:500;padding:3px 10px}.routebox .status.routestatus{right:10px;width:20px;height:20px;text-align:center;line-height:20px;padding:0 0 0 1px}.routebox .status.routestatus:first-letter{font-size:.8rem}@media (min-width: 1600px){.routebox .status.routestatus{padding:0;line-height:22px}}.routebox .status.Ton{background:#ff7272}.routebox .status.Load{background:#a3c52e}.routebox .status.Hourly{background:#ae23d1}\n"] }]
|
|
29
29
|
}], ctorParameters: () => [{ type: i1.UtilsService }, { type: i1.CoolmapConfigModel, decorators: [{
|
|
@@ -18,10 +18,10 @@ export class DialogComponent {
|
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
20
|
onClose(result) { this.dialogRef.close(result); }
|
|
21
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
22
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
21
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: DialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
22
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: DialogComponent, selector: "app-dialog", ngImport: i0, template: "<div class=\"dialogbox\">\n <h2>{{body}}</h2>\n <div class=\"twobtnprt\">\n <button class=\"delbtn\" (click)=\"onClose(true)\">{{positive}}</button>\n <button class=\"closebtn\" (click)=\"onClose(false)\">{{negative}}</button>\n </div>\n</div>\n", styles: [".dialogbox{display:flex;flex-direction:column}.dialogbox h2{font-size:1.5rem}.dialogbox .twobtnprt{display:flex;justify-content:center;margin-top:10px}.closebtn{background:#000;color:#fff;border-radius:30px;padding:10px 18px;margin:0 10px;font-size:1rem}.delbtn{background:red;color:#fff;border-radius:30px;padding:10px 18px;margin:0 10px;font-size:1rem}\n"] });
|
|
23
23
|
}
|
|
24
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: DialogComponent, decorators: [{
|
|
25
25
|
type: Component,
|
|
26
26
|
args: [{ selector: 'app-dialog', template: "<div class=\"dialogbox\">\n <h2>{{body}}</h2>\n <div class=\"twobtnprt\">\n <button class=\"delbtn\" (click)=\"onClose(true)\">{{positive}}</button>\n <button class=\"closebtn\" (click)=\"onClose(false)\">{{negative}}</button>\n </div>\n</div>\n", styles: [".dialogbox{display:flex;flex-direction:column}.dialogbox h2{font-size:1.5rem}.dialogbox .twobtnprt{display:flex;justify-content:center;margin-top:10px}.closebtn{background:#000;color:#fff;border-radius:30px;padding:10px 18px;margin:0 10px;font-size:1rem}.delbtn{background:red;color:#fff;border-radius:30px;padding:10px 18px;margin:0 10px;font-size:1rem}\n"] }]
|
|
27
27
|
}], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
@@ -6,10 +6,10 @@ export class EstimationDisplayComponent {
|
|
|
6
6
|
value;
|
|
7
7
|
label = EstinationData;
|
|
8
8
|
Estinationlabel = EstinationEnum;
|
|
9
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
10
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
9
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: EstimationDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: EstimationDisplayComponent, selector: "app-estimation-display", inputs: { value: "value" }, ngImport: i0, template: "<div class=\"d-flex\">\n <ng-container *ngFor=\"let item of label\">\n <span *ngIf=\"value[item]\" class=\"estimate\" (mousedown)=\"$event.stopPropagation()\">\n Estimation of {{Estinationlabel[item]}} - <b>{{value[item]}}</b>\n </span>\n </ng-container>\n</div>\n", styles: [".estimate{margin-right:20px;font-size:.7rem}@media (min-width: 1600px){.estimate{font-size:.95rem}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
11
11
|
}
|
|
12
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: EstimationDisplayComponent, decorators: [{
|
|
13
13
|
type: Component,
|
|
14
14
|
args: [{ selector: 'app-estimation-display', template: "<div class=\"d-flex\">\n <ng-container *ngFor=\"let item of label\">\n <span *ngIf=\"value[item]\" class=\"estimate\" (mousedown)=\"$event.stopPropagation()\">\n Estimation of {{Estinationlabel[item]}} - <b>{{value[item]}}</b>\n </span>\n </ng-container>\n</div>\n", styles: [".estimate{margin-right:20px;font-size:.7rem}@media (min-width: 1600px){.estimate{font-size:.95rem}}\n"] }]
|
|
15
15
|
}], propDecorators: { value: [{
|
|
@@ -57,10 +57,10 @@ export class JobRouteListComponent {
|
|
|
57
57
|
this.changeRoutes.emit(this.masterRoutes);
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
61
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.
|
|
60
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: JobRouteListComponent, deps: [{ token: i1.UtilsService }, { token: i1.CoolmapService }], target: i0.ɵɵFactoryTarget.Component });
|
|
61
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: JobRouteListComponent, selector: "app-job-route-list", inputs: { routes: "routes", selectedRoute: "selectedRoute", masterRoutes: "masterRoutes" }, outputs: { changeNav: "changeNav", changeRoutes: "changeRoutes", changeSelectedRoute: "changeSelectedRoute" }, ngImport: i0, template: "<div class=\"searchprt\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field class=\"full-width\">\n <mat-label>Search</mat-label>\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\">\n <mat-icon matSuffix *ngIf=\"!utils.conveySearchIcon(filterForm.value.search)\">search</mat-icon>\n <button mat-button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.reset()\" *ngIf=\"utils.conveySearchIcon(filterForm.value.search)\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" class=\"autocomplete\">\n <mat-option *ngFor=\"let option of filteredOptions | async\" (onSelectionChange)=\"filterSearch($event)\"\n [value]=\"option\">\n {{option.type | titlecase }}: {{option['label']}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n</form>\n</div>\n<div class=\"chip-list\">\n <mat-chip-grid #chipList aria-label=\"Filter selection\">\n @for (filter of filters; track filter) {\n <mat-chip-row (removed)=\"removeFromFilter(filter)\">\n {{filter.type | titlecase }}: {{filter.name}}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n</div>\n", styles: [".searchprt{padding-right:20px}::ng-deep .searchprt .mdc-button{min-width:auto}::ng-deep .autocomplete .mat-mdc-option .mdc-list-item__primary-text{display:inline-block;flex-grow:1;overflow:hidden;text-overflow:ellipsis;font-size:.8rem;white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i9.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i9.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i9.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i9.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i10.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }] });
|
|
62
62
|
}
|
|
63
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: JobRouteListComponent, decorators: [{
|
|
64
64
|
type: Component,
|
|
65
65
|
args: [{ selector: 'app-job-route-list', template: "<div class=\"searchprt\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field class=\"full-width\">\n <mat-label>Search</mat-label>\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\">\n <mat-icon matSuffix *ngIf=\"!utils.conveySearchIcon(filterForm.value.search)\">search</mat-icon>\n <button mat-button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.reset()\" *ngIf=\"utils.conveySearchIcon(filterForm.value.search)\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" class=\"autocomplete\">\n <mat-option *ngFor=\"let option of filteredOptions | async\" (onSelectionChange)=\"filterSearch($event)\"\n [value]=\"option\">\n {{option.type | titlecase }}: {{option['label']}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n</form>\n</div>\n<div class=\"chip-list\">\n <mat-chip-grid #chipList aria-label=\"Filter selection\">\n @for (filter of filters; track filter) {\n <mat-chip-row (removed)=\"removeFromFilter(filter)\">\n {{filter.type | titlecase }}: {{filter.name}}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n </mat-chip-grid>\n</div>\n", styles: [".searchprt{padding-right:20px}::ng-deep .searchprt .mdc-button{min-width:auto}::ng-deep .autocomplete .mat-mdc-option .mdc-list-item__primary-text{display:inline-block;flex-grow:1;overflow:hidden;text-overflow:ellipsis;font-size:.8rem;white-space:nowrap}\n"] }]
|
|
66
66
|
}], ctorParameters: () => [{ type: i1.UtilsService }, { type: i1.CoolmapService }], propDecorators: { changeNav: [{
|
|
@@ -12,10 +12,10 @@ export class JobcodeOverviewComponent {
|
|
|
12
12
|
obj = { label: this.overViewEnum[item], value: this.jobValue[item] };
|
|
13
13
|
return obj;
|
|
14
14
|
}
|
|
15
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
16
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
15
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: JobcodeOverviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: JobcodeOverviewComponent, selector: "app-jobcode-overview", inputs: { jobValue: "jobValue" }, ngImport: i0, template: "<div class=\"detail_view m-20\">\n <div class=\"destination\">\n <div class=\"duration\">\n <p class=\"pickprt\"><b>{{makeValueObject('pickup_location')['label']}}:</b> {{makeValueObject('pickup_location')['value']}}</p>\n <p class=\"dropprt\"><b>{{makeValueObject('delivery_location')['label']}}:</b> {{makeValueObject('delivery_location')['value']}}</p>\n </div>\n <ng-container *ngFor=\"let item of label\">\n <span *ngIf=\"item !== 'pickup_location' && item !== 'delivery_location'\" (mousedown)=\"$event.stopPropagation()\"><b>{{makeValueObject(item)['label']}}:</b> {{makeValueObject(item)['value']}}</span>\n </ng-container>\n </div>\n\n", styles: [".detail_view .destination .duration{padding:10px}.detail_view .destination span{padding:5px 0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
17
17
|
}
|
|
18
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: JobcodeOverviewComponent, decorators: [{
|
|
19
19
|
type: Component,
|
|
20
20
|
args: [{ selector: 'app-jobcode-overview', template: "<div class=\"detail_view m-20\">\n <div class=\"destination\">\n <div class=\"duration\">\n <p class=\"pickprt\"><b>{{makeValueObject('pickup_location')['label']}}:</b> {{makeValueObject('pickup_location')['value']}}</p>\n <p class=\"dropprt\"><b>{{makeValueObject('delivery_location')['label']}}:</b> {{makeValueObject('delivery_location')['value']}}</p>\n </div>\n <ng-container *ngFor=\"let item of label\">\n <span *ngIf=\"item !== 'pickup_location' && item !== 'delivery_location'\" (mousedown)=\"$event.stopPropagation()\"><b>{{makeValueObject(item)['label']}}:</b> {{makeValueObject(item)['value']}}</span>\n </ng-container>\n </div>\n\n", styles: [".detail_view .destination .duration{padding:10px}.detail_view .destination span{padding:5px 0}\n"] }]
|
|
21
21
|
}], ctorParameters: () => [], propDecorators: { jobValue: [{
|
|
@@ -3,10 +3,10 @@ import * as i0 from "@angular/core";
|
|
|
3
3
|
import * as i1 from "@angular/common";
|
|
4
4
|
export class JobcodeStatusComponent {
|
|
5
5
|
jobValue;
|
|
6
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
7
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
6
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: JobcodeStatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: JobcodeStatusComponent, selector: "app-jobcode-status", inputs: { jobValue: "jobValue" }, ngImport: i0, template: "<div class=\"statusprt\" *ngIf=\"jobValue['values']\">\n <span class=\"done\"> Done - {{jobValue['values']['Done']}} </span>\n <span class=\"ongoing\"> Ongoing - {{jobValue['values']['Ongoing']}} </span>\n <span class=\"open\"> Open - {{jobValue['values']['Open']}} </span>\n</div>\n", styles: [".statusprt span{padding:5px 10px;font-size:.9rem;margin-left:0;margin-right:5px}.statusprt span.done{border:2px solid #0b843c;color:#0b843c}.statusprt span.done:hover{background:#0b843c;color:#fff}.statusprt span.ongoing{border:2px solid #eecb27;color:#eecb27}.statusprt span.ongoing:hover{background:#eecb27;color:#fff}.statusprt span.open{border:2px solid #12afcb;color:#12afcb}.statusprt span.open:hover{background:#12afcb;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
8
8
|
}
|
|
9
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: JobcodeStatusComponent, decorators: [{
|
|
10
10
|
type: Component,
|
|
11
11
|
args: [{ selector: 'app-jobcode-status', template: "<div class=\"statusprt\" *ngIf=\"jobValue['values']\">\n <span class=\"done\"> Done - {{jobValue['values']['Done']}} </span>\n <span class=\"ongoing\"> Ongoing - {{jobValue['values']['Ongoing']}} </span>\n <span class=\"open\"> Open - {{jobValue['values']['Open']}} </span>\n</div>\n", styles: [".statusprt span{padding:5px 10px;font-size:.9rem;margin-left:0;margin-right:5px}.statusprt span.done{border:2px solid #0b843c;color:#0b843c}.statusprt span.done:hover{background:#0b843c;color:#fff}.statusprt span.ongoing{border:2px solid #eecb27;color:#eecb27}.statusprt span.ongoing:hover{background:#eecb27;color:#fff}.statusprt span.open{border:2px solid #12afcb;color:#12afcb}.statusprt span.open:hover{background:#12afcb;color:#fff}\n"] }]
|
|
12
12
|
}], propDecorators: { jobValue: [{
|
|
@@ -18,12 +18,18 @@ var CardElements;
|
|
|
18
18
|
CardElements["delivery_location"] = "Delivery";
|
|
19
19
|
})(CardElements || (CardElements = {}));
|
|
20
20
|
export class RouteInfoCardComponent {
|
|
21
|
+
cdr;
|
|
21
22
|
popupData;
|
|
22
23
|
propData;
|
|
23
24
|
cardKeysElement = CardKeysValue;
|
|
25
|
+
constructor(cdr) {
|
|
26
|
+
this.cdr = cdr;
|
|
27
|
+
}
|
|
24
28
|
ngAfterViewInit() {
|
|
25
|
-
if (this.propData['repository'] === 'customer')
|
|
29
|
+
if (this.propData['repository'] === 'customer') {
|
|
26
30
|
this.cardKeysElement = this.cardKeysElement.filter(ele => ele !== 'trucker_pay_estimate');
|
|
31
|
+
this.cdr.detectChanges();
|
|
32
|
+
}
|
|
27
33
|
}
|
|
28
34
|
createLabel(itemName) {
|
|
29
35
|
let obj;
|
|
@@ -43,15 +49,15 @@ export class RouteInfoCardComponent {
|
|
|
43
49
|
}
|
|
44
50
|
return obj;
|
|
45
51
|
}
|
|
46
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
47
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
52
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: RouteInfoCardComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
53
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: RouteInfoCardComponent, selector: "lib-route-info-card", inputs: { popupData: "popupData", propData: "propData" }, ngImport: i0, template: "<div [class]=\"propData['className']\">\n <div class=\"destination\">\n <div class=\"duration\">\n <p class=\"pickprt\"><b>Pickup:</b>{{createLabel('pickup_location')['value']}}</p>\n <p class=\"dropprt\"><b>Delivery:</b>{{createLabel('delivery_location')['value']}}</p>\n </div>\n <ng-container *ngFor=\"let item of cardKeysElement\">\n <span *ngIf=\"item !== 'pickup_location' && item !== 'delivery_location'\" [class.notes]=\"item === 'note'\"><b>{{createLabel(item)['label']}}:</b> {{createLabel(item)['value']}}</span>\n </ng-container>\n </div>\n</div>\n", styles: [".routeCard span{padding:5px 0}.routeCard span.notes{max-height:200px;overflow:auto;white-space:pre-wrap;word-break:break-all}.routeCard .duration{padding:10px}.listRoutecard .duration{background:#444343;border:1px solid #918e8e;padding:10px;color:#fff}.listRoutecard .duration b{color:#fff}.listRoutecard .pickprt:before,.listRoutecard .dropprt:before{background:#fff}.listRoutecard .pickprt b:before,.listRoutecard .dropprt b:before{background:#fff}.listRoutecard span{line-height:20px;color:#fff;padding:3px 0}.listRoutecard span b{color:#fff}.listRoutecard span.notes{max-height:200px;overflow:auto;white-space:pre-wrap;word-break:break-all}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
48
54
|
}
|
|
49
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: RouteInfoCardComponent, decorators: [{
|
|
50
56
|
type: Component,
|
|
51
57
|
args: [{ selector: 'lib-route-info-card', template: "<div [class]=\"propData['className']\">\n <div class=\"destination\">\n <div class=\"duration\">\n <p class=\"pickprt\"><b>Pickup:</b>{{createLabel('pickup_location')['value']}}</p>\n <p class=\"dropprt\"><b>Delivery:</b>{{createLabel('delivery_location')['value']}}</p>\n </div>\n <ng-container *ngFor=\"let item of cardKeysElement\">\n <span *ngIf=\"item !== 'pickup_location' && item !== 'delivery_location'\" [class.notes]=\"item === 'note'\"><b>{{createLabel(item)['label']}}:</b> {{createLabel(item)['value']}}</span>\n </ng-container>\n </div>\n</div>\n", styles: [".routeCard span{padding:5px 0}.routeCard span.notes{max-height:200px;overflow:auto;white-space:pre-wrap;word-break:break-all}.routeCard .duration{padding:10px}.listRoutecard .duration{background:#444343;border:1px solid #918e8e;padding:10px;color:#fff}.listRoutecard .duration b{color:#fff}.listRoutecard .pickprt:before,.listRoutecard .dropprt:before{background:#fff}.listRoutecard .pickprt b:before,.listRoutecard .dropprt b:before{background:#fff}.listRoutecard span{line-height:20px;color:#fff;padding:3px 0}.listRoutecard span b{color:#fff}.listRoutecard span.notes{max-height:200px;overflow:auto;white-space:pre-wrap;word-break:break-all}\n"] }]
|
|
52
|
-
}], propDecorators: { popupData: [{
|
|
58
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { popupData: [{
|
|
53
59
|
type: Input
|
|
54
60
|
}], propData: [{
|
|
55
61
|
type: Input
|
|
56
62
|
}] } });
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtaW5mby1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvc2hhcmVkL3JvdXRlLWluZm8tY2FyZC9yb3V0ZS1pbmZvLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29vbG1hcC9zcmMvbGliL2NvbXBvbmVudC9zaGFyZWQvcm91dGUtaW5mby1jYXJkL3JvdXRlLWluZm8tY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQXFCcEUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNO0lBQ3RFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBRTdJLElBQUssWUFZSjtBQVpELFdBQUssWUFBWTtJQUNmLG1DQUFtQixDQUFBO0lBQ25CLDBDQUEwQixDQUFBO0lBQzFCLHFDQUFxQixDQUFBO0lBQ3JCLDZCQUFhLENBQUE7SUFDYiwrQ0FBK0IsQ0FBQTtJQUMvQiw4Q0FBOEIsQ0FBQTtJQUM5Qiw2REFBNkMsQ0FBQTtJQUM3QyxtRUFBbUQsQ0FBQTtJQUNuRCw4QkFBYyxDQUFBO0lBQ2QsMENBQTBCLENBQUE7SUFDMUIsOENBQThCLENBQUE7QUFDaEMsQ0FBQyxFQVpJLFlBQVksS0FBWixZQUFZLFFBWWhCO0FBUUQsTUFBTSxPQUFPLHNCQUFzQjtJQUlkO0lBSFYsU0FBUyxDQUFhO0lBQ3RCLFFBQVEsQ0FBaUI7SUFDbEMsZUFBZSxHQUFHLGFBQWEsQ0FBQztJQUNoQyxZQUFtQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUFFLENBQUM7SUFDNUMsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLHNCQUFzQixDQUFDLENBQUM7WUFDMUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBRUgsQ0FBQztJQUNELFdBQVcsQ0FBQyxRQUFRO1FBQ2xCLElBQUksR0FBRyxDQUFDO1FBQ1IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlDLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQTtRQUMxRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQy9DLElBQUksUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUM1QixHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUE7WUFDakYsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQTtZQUMxRSxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksUUFBUSxLQUFLLHNCQUFzQixJQUFJLFFBQVEsS0FBSyx5QkFBeUIsRUFBRSxDQUFDO1lBQ2xGLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO3VHQTVCVSxzQkFBc0I7MkZBQXRCLHNCQUFzQixxSEM1Q25DLDZsQkFXQTs7MkZEaUNhLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxxQkFBcUI7c0ZBS3RCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmludGVyZmFjZSBDYXJkRW50aXR5IHtcbiAgcGlja3VwX2xvY2F0aW9uOiBzdHJpbmcsXG4gIGRlbGl2ZXJ5X2xvY2F0aW9uOiBzdHJpbmcsXG4gIHJvdXRlX25hbWU6IHN0cmluZyxcbiAgY3VzdG9tZXJfbmFtZTogc3RyaW5nLFxuICBtYXRlcmlhbDogc3RyaW5nLFxuICBtYXRlcmlhbE5hbWU6IHN0cmluZztcbiAgdW5pdDogc3RyaW5nLFxuICBlc3RpbWF0ZWRfZGlzdGFuY2U6IHN0cmluZyxcbiAgZXN0aW1hdGVkX3RpbWU6IHN0cmluZyxcbiAgdHJ1Y2tlcl9wYXlfZXN0aW1hdGU6IHN0cmluZyxcbiAgY3VzdG9tZXJfcHJpY2VfZXN0aW1hdGU6IHN0cmluZyxcbiAgbm90ZTogc3RyaW5nLFxufVxuXG5pbnRlcmZhY2UgQ2FyZFByb3BFbnRpdHkge1xuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgcmVwb3NpdG9yeTogc3RyaW5nXG59XG5jb25zdCBDYXJkS2V5c1ZhbHVlID0gWydyb3V0ZV9uYW1lJywgJ2N1c3RvbWVyX25hbWUnLCAnbWF0ZXJpYWwnLCAndW5pdCcsXG4gICdlc3RpbWF0ZWRfZGlzdGFuY2UnLCAnZXN0aW1hdGVkX3RpbWUnLCAndHJ1Y2tlcl9wYXlfZXN0aW1hdGUnLCAnY3VzdG9tZXJfcHJpY2VfZXN0aW1hdGUnLCAnbm90ZScsICdwaWNrdXBfbG9jYXRpb24nLCAnZGVsaXZlcnlfbG9jYXRpb24nXTtcblxuZW51bSBDYXJkRWxlbWVudHMge1xuICByb3V0ZV9uYW1lID0gJ05hbWUnLFxuICBjdXN0b21lcl9uYW1lID0gJ0N1c3RvbWVyJyxcbiAgbWF0ZXJpYWwgPSAnTWF0ZXJpYWwnLFxuICB1bml0ID0gJ1R5cGUnLFxuICBlc3RpbWF0ZWRfZGlzdGFuY2UgPSAnRGlzdGFuY2UnLFxuICBlc3RpbWF0ZWRfdGltZSA9ICdUcmF2ZWwgVGltZScsXG4gIHRydWNrZXJfcGF5X2VzdGltYXRlID0gJ1RydWNrZXIgUGF5IEVzdGltYXRlJyxcbiAgY3VzdG9tZXJfcHJpY2VfZXN0aW1hdGUgPSAnQ3VzdG9tZXIgUHJpY2UgRXN0aW1hdGUnLFxuICBub3RlID0gJ05vdGVzJyxcbiAgcGlja3VwX2xvY2F0aW9uID0gJ1BpY2t1cCcsXG4gIGRlbGl2ZXJ5X2xvY2F0aW9uID0gJ0RlbGl2ZXJ5J1xufVxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1yb3V0ZS1pbmZvLWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcm91dGUtaW5mby1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcm91dGUtaW5mby1jYXJkLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUm91dGVJbmZvQ2FyZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHBvcHVwRGF0YTogQ2FyZEVudGl0eTtcbiAgQElucHV0KCkgcHJvcERhdGE6IENhcmRQcm9wRW50aXR5O1xuICBjYXJkS2V5c0VsZW1lbnQgPSBDYXJkS2V5c1ZhbHVlO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZil7fVxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvcERhdGFbJ3JlcG9zaXRvcnknXSA9PT0gJ2N1c3RvbWVyJykge1xuICAgICAgdGhpcy5jYXJkS2V5c0VsZW1lbnQgPSB0aGlzLmNhcmRLZXlzRWxlbWVudC5maWx0ZXIoZWxlID0+IGVsZSAhPT0gJ3RydWNrZXJfcGF5X2VzdGltYXRlJyk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gIH1cbiAgY3JlYXRlTGFiZWwoaXRlbU5hbWUpIHtcbiAgICBsZXQgb2JqO1xuICAgIGlmICh0aGlzLnByb3BEYXRhWydyZXBvc2l0b3J5J10gPT09ICdjb29sbWFwJykge1xuICAgICAgb2JqID0geyBsYWJlbDogQ2FyZEVsZW1lbnRzW2l0ZW1OYW1lXSwgdmFsdWU6IHRoaXMucG9wdXBEYXRhW2l0ZW1OYW1lXSB9XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BEYXRhWydyZXBvc2l0b3J5J10gPT09ICdjdXN0b21lcicpIHtcbiAgICAgIGlmIChpdGVtTmFtZSA9PT0gJ21hdGVyaWFsJykge1xuICAgICAgICBvYmogPSB7IGxhYmVsOiBDYXJkRWxlbWVudHNbaXRlbU5hbWVdLCB2YWx1ZTogdGhpcy5wb3B1cERhdGFbJ21hdGVyaWFsTGFiZWwnXSB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmogPSB7IGxhYmVsOiBDYXJkRWxlbWVudHNbaXRlbU5hbWVdLCB2YWx1ZTogdGhpcy5wb3B1cERhdGFbaXRlbU5hbWVdIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGl0ZW1OYW1lID09PSAndHJ1Y2tlcl9wYXlfZXN0aW1hdGUnIHx8IGl0ZW1OYW1lID09PSAnY3VzdG9tZXJfcHJpY2VfZXN0aW1hdGUnKSB7XG4gICAgICBvYmpbJ3ZhbHVlJ10gPSBvYmpbJ3ZhbHVlJ10gPyAnJCcgKyBvYmpbJ3ZhbHVlJ10gOiAnJztcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufVxuIiwiPGRpdiBbY2xhc3NdPVwicHJvcERhdGFbJ2NsYXNzTmFtZSddXCI+XG4gIDxkaXYgY2xhc3M9XCJkZXN0aW5hdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cImR1cmF0aW9uXCI+XG4gICAgICAgIDxwIGNsYXNzPVwicGlja3BydFwiPjxiPlBpY2t1cDo8L2I+e3tjcmVhdGVMYWJlbCgncGlja3VwX2xvY2F0aW9uJylbJ3ZhbHVlJ119fTwvcD5cbiAgICAgICAgPHAgY2xhc3M9XCJkcm9wcHJ0XCI+PGI+RGVsaXZlcnk6PC9iPnt7Y3JlYXRlTGFiZWwoJ2RlbGl2ZXJ5X2xvY2F0aW9uJylbJ3ZhbHVlJ119fTwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjYXJkS2V5c0VsZW1lbnRcIj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtICE9PSAncGlja3VwX2xvY2F0aW9uJyAmJiBpdGVtICE9PSAnZGVsaXZlcnlfbG9jYXRpb24nXCIgW2NsYXNzLm5vdGVzXT1cIml0ZW0gPT09ICdub3RlJ1wiPjxiPnt7Y3JlYXRlTGFiZWwoaXRlbSlbJ2xhYmVsJ119fTo8L2I+IHt7Y3JlYXRlTGFiZWwoaXRlbSlbJ3ZhbHVlJ119fTwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|