tango-app-ui-auth 3.5.0-beta.7 → 3.5.0-beta.9

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.
@@ -18,14 +18,33 @@ export class AuthGuard {
18
18
  }
19
19
  });
20
20
  }
21
- canActivate(route, state) {
22
- // const currentUser = localStorage.getItem('isLoggedIn');
23
- const currentUser = localStorage.getItem(this.authlocalStorageToken);
24
- if (currentUser) {
25
- // this.route.navigate(['/manage']);
26
- return true;
21
+ // canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
22
+ // // const currentUser = localStorage.getItem('isLoggedIn');
23
+ // const currentUser = localStorage.getItem(this.authlocalStorageToken);
24
+ // if (currentUser) {
25
+ // // this.route.navigate(['/manage']);
26
+ // return true;
27
+ // } else {
28
+ // this.route.navigate(['/auth/login']);
29
+ // return false;
30
+ // }
31
+ // }
32
+ canActivate() {
33
+ const tokenStr = this.authService.getCookie(this.authlocalStorageToken);
34
+ if (!tokenStr) {
35
+ this.route.navigate(['/auth/login']);
36
+ return false;
37
+ }
38
+ try {
39
+ const tokenData = JSON.parse(tokenStr);
40
+ const isValid = !!tokenData?.authenticationToken;
41
+ if (!isValid) {
42
+ this.route.navigate(['/auth/login']);
43
+ }
44
+ return isValid;
27
45
  }
28
- else {
46
+ catch (e) {
47
+ console.error('Invalid token in cookie', e);
29
48
  this.route.navigate(['/auth/login']);
30
49
  return false;
31
50
  }
@@ -37,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
37
56
  type: Injectable,
38
57
  args: [{ providedIn: 'root' }]
39
58
  }], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.GlobalStateService }, { type: i3.Router }] });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWF1dGgvc3JjL2xpYi9ndWFyZHMvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQU8zQyxNQUFNLE9BQU8sU0FBUztJQUVBO0lBQWlDO0lBQzNDO0lBRkYscUJBQXFCLENBQUs7SUFDbEMsWUFBb0IsV0FBd0IsRUFBUyxFQUFxQixFQUNoRSxLQUFhO1FBREgsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBUyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNoRSxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ3JCLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3BDLElBQUksR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ2pFO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQTZCLEVBQUUsS0FBMEI7UUFFbkUsMERBQTBEO1FBQzFELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDckUsSUFBSSxXQUFXLEVBQUU7WUFDVCx3Q0FBd0M7WUFDNUMsT0FBTyxJQUFJLENBQUM7U0FDZjthQUFNO1lBQ0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBRXpDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQzt3R0F0QlUsU0FBUzs0R0FBVCxTQUFTLGNBREksTUFBTTs7NEZBQ25CLFNBQVM7a0JBRHJCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIsIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoR3VhcmQgIHtcclxuICBwcml2YXRlIGF1dGhsb2NhbFN0b3JhZ2VUb2tlbjphbnk7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UscHJpdmF0ZSBnczpHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBSb3V0ZXIpIHtcclxuICAgIHRoaXMuZ3MuZW52aXJvbm1lbnQuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICAgaWYgKGVudikge1xyXG4gICB0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbiA9IGAke2Vudi5hcHBWZXJzaW9ufS0ke2Vudi5VU0VSREFUQV9LRVl9YDtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgY2FuQWN0aXZhdGUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XHJcblxyXG4gICAgLy8gY29uc3QgY3VycmVudFVzZXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaXNMb2dnZWRJbicpO1xyXG4gICAgY29uc3QgY3VycmVudFVzZXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbik7XHJcbiAgICBpZiAoY3VycmVudFVzZXIpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy5yb3V0ZS5uYXZpZ2F0ZShbJy9tYW5hZ2UnXSk7ICAgIFxyXG4gICAgICAgIHJldHVybiB0cnVlOyAgXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlLm5hdmlnYXRlKFsnL2F1dGgvbG9naW4nXSk7ICAgIFxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWF1dGgvc3JjL2xpYi9ndWFyZHMvYXV0aC5ndWFyZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQU8zQyxNQUFNLE9BQU8sU0FBUztJQUVBO0lBQWlDO0lBQzNDO0lBRkYscUJBQXFCLENBQUs7SUFDbEMsWUFBb0IsV0FBd0IsRUFBUyxFQUFxQixFQUNoRSxLQUFhO1FBREgsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBUyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNoRSxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ3JCLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3BDLElBQUksR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ2pFO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQ0QsMkVBQTJFO0lBRTNFLCtEQUErRDtJQUMvRCwwRUFBMEU7SUFDMUUsdUJBQXVCO0lBQ3ZCLHFEQUFxRDtJQUNyRCx1QkFBdUI7SUFDdkIsYUFBYTtJQUNiLHNEQUFzRDtJQUV0RCxzQkFBc0I7SUFDdEIsTUFBTTtJQUNOLElBQUk7SUFFSixXQUFXO1FBQ1QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFeEUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNyQyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSTtZQUNGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQztZQUVqRCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzthQUN0QztZQUVELE9BQU8sT0FBTyxDQUFDO1NBQ2hCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNyQyxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQzt3R0E5Q1UsU0FBUzs0R0FBVCxTQUFTLGNBREksTUFBTTs7NEZBQ25CLFNBQVM7a0JBRHJCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIsIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoR3VhcmQgIHtcclxuICBwcml2YXRlIGF1dGhsb2NhbFN0b3JhZ2VUb2tlbjphbnk7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UscHJpdmF0ZSBnczpHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBSb3V0ZXIpIHtcclxuICAgIHRoaXMuZ3MuZW52aXJvbm1lbnQuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICAgaWYgKGVudikge1xyXG4gICB0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbiA9IGAke2Vudi5hcHBWZXJzaW9ufS0ke2Vudi5VU0VSREFUQV9LRVl9YDtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgLy8gY2FuQWN0aXZhdGUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XHJcblxyXG4gIC8vICAgLy8gY29uc3QgY3VycmVudFVzZXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaXNMb2dnZWRJbicpO1xyXG4gIC8vICAgY29uc3QgY3VycmVudFVzZXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbik7XHJcbiAgLy8gICBpZiAoY3VycmVudFVzZXIpIHtcclxuICAvLyAgICAgICAgICAgLy8gdGhpcy5yb3V0ZS5uYXZpZ2F0ZShbJy9tYW5hZ2UnXSk7ICAgIFxyXG4gIC8vICAgICAgIHJldHVybiB0cnVlOyAgXHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgICB0aGlzLnJvdXRlLm5hdmlnYXRlKFsnL2F1dGgvbG9naW4nXSk7ICAgIFxyXG5cclxuICAvLyAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBjYW5BY3RpdmF0ZSgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHRva2VuU3RyID0gdGhpcy5hdXRoU2VydmljZS5nZXRDb29raWUodGhpcy5hdXRobG9jYWxTdG9yYWdlVG9rZW4pO1xyXG5cclxuICAgIGlmICghdG9rZW5TdHIpIHtcclxuICAgICAgdGhpcy5yb3V0ZS5uYXZpZ2F0ZShbJy9hdXRoL2xvZ2luJ10pO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdG9rZW5EYXRhID0gSlNPTi5wYXJzZSh0b2tlblN0cik7XHJcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSAhIXRva2VuRGF0YT8uYXV0aGVudGljYXRpb25Ub2tlbjtcclxuXHJcbiAgICAgIGlmICghaXNWYWxpZCkge1xyXG4gICAgICAgIHRoaXMucm91dGUubmF2aWdhdGUoWycvYXV0aC9sb2dpbiddKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGlzVmFsaWQ7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgdG9rZW4gaW4gY29va2llJywgZSk7XHJcbiAgICAgIHRoaXMucm91dGUubmF2aWdhdGUoWycvYXV0aC9sb2dpbiddKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,3 +1,4 @@
1
+ import { HttpHeaders } from "@angular/common/http";
1
2
  import { Injectable } from "@angular/core";
2
3
  import { BehaviorSubject, catchError, map, of, throwError, } from "rxjs";
3
4
  import * as i0 from "@angular/core";
@@ -33,12 +34,45 @@ export class AuthService {
33
34
  }
34
35
  });
35
36
  }
37
+ base64Encode(str) {
38
+ return btoa(encodeURIComponent(str));
39
+ }
40
+ base64Decode(str) {
41
+ return decodeURIComponent(atob(str));
42
+ }
43
+ setCookie(name, value, days = 1) {
44
+ const encodedValue = this.base64Encode(value);
45
+ const expires = new Date(Date.now() + days * 864e5).toUTCString();
46
+ document.cookie = `${name}=${encodedValue}; expires=${expires}; path=/; Secure; SameSite=Strict`;
47
+ }
48
+ getCookie(name) {
49
+ const match = document.cookie.match(new RegExp(`(^| )${name}=([^;]+)`));
50
+ return match ? this.base64Decode(match[2]) : null;
51
+ }
52
+ // getHeaders() {
53
+ // const user: any = JSON.parse(
54
+ // localStorage.getItem(this.authlocalStorageToken) || "{}"
55
+ // );
56
+ // const headers = {
57
+ // Authorization: "Bearer " + user.authenticationToken,
58
+ // };
59
+ // return headers;
60
+ // }
36
61
  getHeaders() {
37
- const user = JSON.parse(localStorage.getItem(this.authlocalStorageToken) || "{}");
38
- const headers = {
39
- Authorization: "Bearer " + user.authenticationToken,
62
+ const userTokenStr = this.getCookie(this.authlocalStorageToken);
63
+ let token = '';
64
+ if (userTokenStr) {
65
+ try {
66
+ const user = JSON.parse(userTokenStr);
67
+ token = user?.authenticationToken || '';
68
+ }
69
+ catch (e) {
70
+ console.error('Invalid token JSON in cookie');
71
+ }
72
+ }
73
+ return {
74
+ Authorization: 'Bearer ' + token
40
75
  };
41
- return headers;
42
76
  }
43
77
  logout() {
44
78
  localStorage.removeItem(this.authlocalStorageToken);
@@ -71,16 +105,32 @@ export class AuthService {
71
105
  return this.http.post(`${this.userApiUrl}/login`, data);
72
106
  }
73
107
  userProfileDet() {
108
+ // debugger
74
109
  const user = localStorage.getItem("user-info");
75
110
  if (user)
76
111
  return of(JSON.parse(user));
112
+ // console.log(this.getHeaders())
113
+ const headers = new HttpHeaders(this.getHeaders());
77
114
  return this.http
78
- .get(`${this.userApiUrl}/profileV2`, { headers: this.getHeaders() })
115
+ .get(`${this.userApiUrl}/profileV2`, { headers: headers })
79
116
  .pipe(map((response) => {
80
117
  localStorage.setItem("user-info", JSON.stringify(response.data));
81
118
  return response;
82
119
  }), catchError(this.handleError));
83
120
  }
121
+ // userProfileDet(): Observable<any> {
122
+ // const userStr = this.getCookie("user-info");
123
+ // if (userStr) return of(JSON.parse(userStr));
124
+ // return this.http
125
+ // .get(`${this.userApiUrl}/profileV2`, { headers: this.getHeaders() })
126
+ // .pipe(
127
+ // map((response: any) => {
128
+ // this.setCookie("user-info", JSON.stringify(response.data), 7);
129
+ // return response;
130
+ // }),
131
+ // catchError(this.handleError)
132
+ // );
133
+ // }
84
134
  getAllCountries() {
85
135
  return this.http.get(`${this.middlewareApiUrl}/get-countries`);
86
136
  }
@@ -114,4 +164,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
114
164
  providedIn: "root",
115
165
  }]
116
166
  }], ctorParameters: () => [{ type: i1.Router }, { type: i2.HttpClient }, { type: i3.GlobalStateService }] });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXV0aC9zcmMvbGliL3NlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFDTCxlQUFlLEVBRWYsVUFBVSxFQUNWLEdBQUcsRUFDSCxFQUFFLEVBQ0YsVUFBVSxHQUNYLE1BQU0sTUFBTSxDQUFDOzs7OztBQU1kLE1BQU0sT0FBTyxXQUFXO0lBYVo7SUFDQTtJQUNBO0lBZFYsYUFBYSxHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO0lBQy9DLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQztJQUNqRCxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQztJQUNwRCxVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLGdCQUFnQixHQUFXLEVBQUUsQ0FBQztJQUM5QixVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLHFCQUFxQixDQUFTO0lBQzlCLHlCQUF5QixDQUFTO0lBQ2xDLElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBQ0QsWUFDVSxNQUFjLEVBQ2QsSUFBZ0IsRUFDaEIsRUFBc0I7UUFGdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFFOUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUNq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LElBQUksQ0FBRTthQUN4RCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFDaEMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDN0IsQ0FBQztJQUNKLENBQUM7SUFDRCx1QkFBdUIsQ0FBQyxJQUFTO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDZixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSwwQkFBMEIsRUFBRSxJQUFJLENBQUU7YUFDekQsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQ2hDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQzdCLENBQUM7SUFDSixDQUFDO3dHQW5JVSxXQUFXOzRHQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHtcclxuICBCZWhhdmlvclN1YmplY3QsXHJcbiAgT2JzZXJ2YWJsZSxcclxuICBjYXRjaEVycm9yLFxyXG4gIG1hcCxcclxuICBvZixcclxuICB0aHJvd0Vycm9yLFxyXG59IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XHJcbiAgYWJvdXRGb3JtRGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuICBwcmljaW5nRm9ybURhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcbiAgY3VycmVudFVzZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xyXG4gIGxlYWRBcGlVcmw6IHN0cmluZyA9IFwiXCI7XHJcbiAgbWlkZGxld2FyZUFwaVVybDogc3RyaW5nID0gXCJcIjtcclxuICB1c2VyQXBpVXJsOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGF1dGhsb2NhbFN0b3JhZ2VUb2tlbjogc3RyaW5nO1xyXG4gIHBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmw6IHN0cmluZztcclxuICBnZXQgY3VycmVudFVzZXJWYWx1ZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXJTdWJqZWN0LnZhbHVlO1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuZ3MuZW52aXJvbm1lbnQuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICAgaWYgKGVudikge1xyXG4gICAgICAgIHRoaXMubGVhZEFwaVVybCA9IGVudi5sZWFkQXBpVXJsO1xyXG4gICAgICAgIHRoaXMubWlkZGxld2FyZUFwaVVybCA9IGVudi5taWRkbGV3YXJlQXBpVXJsO1xyXG4gICAgICAgIHRoaXMucGF5bWVudFN1YnNjcmlwdGlvbkFwaVVybCA9IGVudi5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsO1xyXG4gICAgICAgICh0aGlzLnVzZXJBcGlVcmwgPSBlbnYudXNlckFwaVVybCksXHJcbiAgICAgICAgICAodGhpcy5hdXRobG9jYWxTdG9yYWdlVG9rZW4gPSBgJHtlbnYuYXBwVmVyc2lvbn0tJHtlbnYuVVNFUkRBVEFfS0VZfWApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEhlYWRlcnMoKSB7XHJcbiAgICBjb25zdCB1c2VyOiBhbnkgPSBKU09OLnBhcnNlKFxyXG4gICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbikgfHwgXCJ7fVwiXHJcbiAgICApO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogXCJCZWFyZXIgXCIgKyB1c2VyLmF1dGhlbnRpY2F0aW9uVG9rZW4sXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBoZWFkZXJzO1xyXG4gIH1cclxuXHJcbiAgbG9nb3V0KCkge1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5hdXRobG9jYWxTdG9yYWdlVG9rZW4pO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL2F1dGgvbG9naW5cIl0sIHtcclxuICAgICAgcXVlcnlQYXJhbXM6IHt9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZW5kU2lnbnVwT3RwKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5taWRkbGV3YXJlQXBpVXJsfS9zaWdudXAtb3RwYCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBzaWdudXAoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmxlYWRBcGlVcmx9L3NpZ251cGAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcmVxdWVzdENhbGxiYWNrKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5taWRkbGV3YXJlQXBpVXJsfS9yZXF1ZXN0LWNhbGxiYWNrYCwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBpc0NsaWVudG5hbWVUYWtlbihkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMubGVhZEFwaVVybH0vaXNDbGllbnRFeGlzdGAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgaXNFbWFpbFRha2VuKGRhdGE6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmxlYWRBcGlVcmx9L2lzRXhpc3RzP2NvcnBvcmF0ZUVtYWlsPSR7ZGF0YX1gKTtcclxuICB9XHJcblxyXG4gIGlzTW9iaWxlVGFrZW4oZGF0YTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMubGVhZEFwaVVybH0vaXNFeGlzdHM/bW9iaWxlTnVtYmVyPSR7ZGF0YX1gKTtcclxuICB9XHJcblxyXG4gIGdldENvdW50cnlDb2RlcygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5taWRkbGV3YXJlQXBpVXJsfS9jb3VudHJ5LWNvZGVgKTtcclxuICB9XHJcblxyXG4gIGxvZ2luKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy51c2VyQXBpVXJsfS9sb2dpbmAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgdXNlclByb2ZpbGVEZXQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IHVzZXI6IGFueSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpO1xyXG4gICAgaWYgKHVzZXIpIHJldHVybiBvZihKU09OLnBhcnNlKHVzZXIpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldChgJHt0aGlzLnVzZXJBcGlVcmx9L3Byb2ZpbGVWMmAsIHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCkgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInVzZXItaW5mb1wiLCBKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhKSk7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsQ291bnRyaWVzKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLm1pZGRsZXdhcmVBcGlVcmx9L2dldC1jb3VudHJpZXNgKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUVycm9yKHJlczogYW55KSB7XHJcbiAgICByZXR1cm4gdGhyb3dFcnJvcihyZXMuZXJyb3IpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJpY2luZyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICBgJHt0aGlzLnBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmx9L2Jhc2VQcmljaW5nYCxcclxuICAgICAgZGF0YVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZvcmdvdFBhc3N3b3JkVHJpZ2dlcihwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQoYCR7dGhpcy51c2VyQXBpVXJsfS9mb3Jnb3QtcGFzc3dvcmQtZW1haWxgLCB7IHBhcmFtczogcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGZvcmdvdFBhc3N3b3JkKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAucG9zdChgJHt0aGlzLnVzZXJBcGlVcmx9L2ZvcmdvdC1wYXNzd29yZC11cGRhdGVgLCBkYXRhIClcclxuICAgIC5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKTtcclxuICB9XHJcbiAgdGVybXNBbmRDb25kaXRpb25VcGRhdGUoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgIC5wb3N0KGAke3RoaXMudXNlckFwaVVybH0vdGVybXNBbmRDb25kaXRpb25VcGRhdGVgLCBkYXRhIClcclxuICAgIC5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKTtcclxuICB9XHJcbiAgXHJcbn1cclxuIl19
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYXV0aC9zcmMvbGliL3NlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQ0wsZUFBZSxFQUVmLFVBQVUsRUFDVixHQUFHLEVBQ0gsRUFBRSxFQUNGLFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFNZCxNQUFNLE9BQU8sV0FBVztJQWFaO0lBQ0E7SUFDQTtJQWRWLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQztJQUMvQyxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDakQsa0JBQWtCLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDcEQsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixnQkFBZ0IsR0FBVyxFQUFFLENBQUM7SUFDOUIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixxQkFBcUIsQ0FBUztJQUM5Qix5QkFBeUIsQ0FBUztJQUNsQyxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7SUFDdkMsQ0FBQztJQUNELFlBQ1UsTUFBYyxFQUNkLElBQWdCLEVBQ2hCLEVBQXNCO1FBRnRCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBRTlCLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3BDLElBQUksR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQztnQkFDL0QsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7b0JBQ2hDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEdBQUcsR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQzthQUMxRTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNPLFlBQVksQ0FBQyxHQUFRO1FBQzdCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFRO1FBQzNCLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELFNBQVMsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLE9BQWUsQ0FBQztRQUNyRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEUsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxZQUFZLGFBQWEsT0FBTyxtQ0FBbUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVk7UUFDcEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNwRCxDQUFDO0lBQ0MsaUJBQWlCO0lBQ2pCLGtDQUFrQztJQUNsQywrREFBK0Q7SUFDL0QsT0FBTztJQUNQLHNCQUFzQjtJQUN0QiwyREFBMkQ7SUFDM0QsT0FBTztJQUVQLG9CQUFvQjtJQUNwQixJQUFJO0lBQ04sVUFBVTtRQUNSLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDaEUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBRWYsSUFBSSxZQUFZLEVBQUU7WUFDaEIsSUFBSTtnQkFDRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN0QyxLQUFLLEdBQUcsSUFBSSxFQUFFLG1CQUFtQixJQUFJLEVBQUUsQ0FBQzthQUN6QztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQzthQUMvQztTQUNGO1FBRUQsT0FBTztZQUNMLGFBQWEsRUFBRSxTQUFTLEdBQUcsS0FBSztTQUNqQyxDQUFDO0lBQ0osQ0FBQztJQUNDLE1BQU07UUFDSixZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDcEMsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFTO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUztRQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBUztRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSw0QkFBNEIsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQVk7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLDBCQUEwQixJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsZUFBZSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFTO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsY0FBYztRQUNaLFdBQVc7UUFDWCxNQUFNLElBQUksR0FBUSxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELElBQUksSUFBSTtZQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0QyxpQ0FBaUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLFlBQVksRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUN6RCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDcEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNqRSxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUM3QixDQUFDO0lBQ04sQ0FBQztJQUNILHNDQUFzQztJQUN0QyxpREFBaUQ7SUFDakQsaURBQWlEO0lBRWpELHFCQUFxQjtJQUNyQiwyRUFBMkU7SUFDM0UsYUFBYTtJQUNiLGlDQUFpQztJQUNqQyx5RUFBeUU7SUFDekUsMkJBQTJCO0lBQzNCLFlBQVk7SUFDWixxQ0FBcUM7SUFDckMsU0FBUztJQUNULElBQUk7SUFFRixlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsZ0JBQWdCLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVE7UUFDbEIsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBUztRQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsY0FBYyxFQUMvQyxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxNQUFXO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUNuRSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFDaEMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDN0IsQ0FBQztJQUNOLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBUztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2YsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUseUJBQXlCLEVBQUUsSUFBSSxDQUFFO2FBQ3hELElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUNoQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUM3QixDQUFDO0lBQ0osQ0FBQztJQUNELHVCQUF1QixDQUFDLElBQVM7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNmLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLDBCQUEwQixFQUFFLElBQUksQ0FBRTthQUN6RCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFDaEMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDN0IsQ0FBQztJQUNKLENBQUM7d0dBcExVLFdBQVc7NEdBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHtcclxuICBCZWhhdmlvclN1YmplY3QsXHJcbiAgT2JzZXJ2YWJsZSxcclxuICBjYXRjaEVycm9yLFxyXG4gIG1hcCxcclxuICBvZixcclxuICB0aHJvd0Vycm9yLFxyXG59IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XHJcbiAgYWJvdXRGb3JtRGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuICBwcmljaW5nRm9ybURhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcbiAgY3VycmVudFVzZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xyXG4gIGxlYWRBcGlVcmw6IHN0cmluZyA9IFwiXCI7XHJcbiAgbWlkZGxld2FyZUFwaVVybDogc3RyaW5nID0gXCJcIjtcclxuICB1c2VyQXBpVXJsOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGF1dGhsb2NhbFN0b3JhZ2VUb2tlbjogc3RyaW5nO1xyXG4gIHBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmw6IHN0cmluZztcclxuICBnZXQgY3VycmVudFVzZXJWYWx1ZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXJTdWJqZWN0LnZhbHVlO1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuZ3MuZW52aXJvbm1lbnQuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICAgaWYgKGVudikge1xyXG4gICAgICAgIHRoaXMubGVhZEFwaVVybCA9IGVudi5sZWFkQXBpVXJsO1xyXG4gICAgICAgIHRoaXMubWlkZGxld2FyZUFwaVVybCA9IGVudi5taWRkbGV3YXJlQXBpVXJsO1xyXG4gICAgICAgIHRoaXMucGF5bWVudFN1YnNjcmlwdGlvbkFwaVVybCA9IGVudi5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsO1xyXG4gICAgICAgICh0aGlzLnVzZXJBcGlVcmwgPSBlbnYudXNlckFwaVVybCksXHJcbiAgICAgICAgICAodGhpcy5hdXRobG9jYWxTdG9yYWdlVG9rZW4gPSBgJHtlbnYuYXBwVmVyc2lvbn0tJHtlbnYuVVNFUkRBVEFfS0VZfWApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBiYXNlNjRFbmNvZGUoc3RyOiBhbnkpIHtcclxuICByZXR1cm4gYnRvYShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7XHJcbn1cclxuXHJcbnByaXZhdGUgYmFzZTY0RGVjb2RlKHN0cjogYW55KSB7XHJcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChhdG9iKHN0cikpO1xyXG59XHJcbnNldENvb2tpZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGRheXM6IG51bWJlciA9IDEpOiB2b2lkIHtcclxuICBjb25zdCBlbmNvZGVkVmFsdWUgPSB0aGlzLmJhc2U2NEVuY29kZSh2YWx1ZSk7XHJcbiAgY29uc3QgZXhwaXJlcyA9IG5ldyBEYXRlKERhdGUubm93KCkgKyBkYXlzICogODY0ZTUpLnRvVVRDU3RyaW5nKCk7XHJcbiAgZG9jdW1lbnQuY29va2llID0gYCR7bmFtZX09JHtlbmNvZGVkVmFsdWV9OyBleHBpcmVzPSR7ZXhwaXJlc307IHBhdGg9LzsgU2VjdXJlOyBTYW1lU2l0ZT1TdHJpY3RgO1xyXG59XHJcblxyXG5nZXRDb29raWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cChgKF58ICkke25hbWV9PShbXjtdKylgKSk7XHJcbiAgcmV0dXJuIG1hdGNoID8gdGhpcy5iYXNlNjREZWNvZGUobWF0Y2hbMl0pIDogbnVsbDtcclxufVxyXG4gIC8vIGdldEhlYWRlcnMoKSB7XHJcbiAgLy8gICBjb25zdCB1c2VyOiBhbnkgPSBKU09OLnBhcnNlKFxyXG4gIC8vICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbikgfHwgXCJ7fVwiXHJcbiAgLy8gICApO1xyXG4gIC8vICAgY29uc3QgaGVhZGVycyA9IHtcclxuICAvLyAgICAgQXV0aG9yaXphdGlvbjogXCJCZWFyZXIgXCIgKyB1c2VyLmF1dGhlbnRpY2F0aW9uVG9rZW4sXHJcbiAgLy8gICB9O1xyXG5cclxuICAvLyAgIHJldHVybiBoZWFkZXJzO1xyXG4gIC8vIH1cclxuZ2V0SGVhZGVycygpOiB7IFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICBjb25zdCB1c2VyVG9rZW5TdHIgPSB0aGlzLmdldENvb2tpZSh0aGlzLmF1dGhsb2NhbFN0b3JhZ2VUb2tlbik7XHJcbiAgbGV0IHRva2VuID0gJyc7XHJcblxyXG4gIGlmICh1c2VyVG9rZW5TdHIpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHVzZXIgPSBKU09OLnBhcnNlKHVzZXJUb2tlblN0cik7XHJcbiAgICAgIHRva2VuID0gdXNlcj8uYXV0aGVudGljYXRpb25Ub2tlbiB8fCAnJztcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCB0b2tlbiBKU09OIGluIGNvb2tpZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIHRva2VuXHJcbiAgfTtcclxufVxyXG4gIGxvZ291dCgpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuYXV0aGxvY2FsU3RvcmFnZVRva2VuKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9hdXRoL2xvZ2luXCJdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7fSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VuZFNpZ251cE90cChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMubWlkZGxld2FyZUFwaVVybH0vc2lnbnVwLW90cGAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2lnbnVwKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5sZWFkQXBpVXJsfS9zaWdudXBgLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHJlcXVlc3RDYWxsYmFjayhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMubWlkZGxld2FyZUFwaVVybH0vcmVxdWVzdC1jYWxsYmFja2AsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgaXNDbGllbnRuYW1lVGFrZW4oZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmxlYWRBcGlVcmx9L2lzQ2xpZW50RXhpc3RgLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGlzRW1haWxUYWtlbihkYXRhOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5sZWFkQXBpVXJsfS9pc0V4aXN0cz9jb3Jwb3JhdGVFbWFpbD0ke2RhdGF9YCk7XHJcbiAgfVxyXG5cclxuICBpc01vYmlsZVRha2VuKGRhdGE6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmxlYWRBcGlVcmx9L2lzRXhpc3RzP21vYmlsZU51bWJlcj0ke2RhdGF9YCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb3VudHJ5Q29kZXMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMubWlkZGxld2FyZUFwaVVybH0vY291bnRyeS1jb2RlYCk7XHJcbiAgfVxyXG5cclxuICBsb2dpbihkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudXNlckFwaVVybH0vbG9naW5gLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHVzZXJQcm9maWxlRGV0KCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBkZWJ1Z2dlclxyXG4gICAgY29uc3QgdXNlcjogYW55ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIik7XHJcbiAgICBpZiAodXNlcikgcmV0dXJuIG9mKEpTT04ucGFyc2UodXNlcikpO1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5nZXRIZWFkZXJzKCkpXHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHRoaXMuZ2V0SGVhZGVycygpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldChgJHt0aGlzLnVzZXJBcGlVcmx9L3Byb2ZpbGVWMmAsIHsgaGVhZGVyczogaGVhZGVycyB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwidXNlci1pbmZvXCIsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEpKTtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICAgICk7XHJcbiAgfVxyXG4vLyB1c2VyUHJvZmlsZURldCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4vLyAgIGNvbnN0IHVzZXJTdHIgPSB0aGlzLmdldENvb2tpZShcInVzZXItaW5mb1wiKTtcclxuLy8gICBpZiAodXNlclN0cikgcmV0dXJuIG9mKEpTT04ucGFyc2UodXNlclN0cikpO1xyXG5cclxuLy8gICByZXR1cm4gdGhpcy5odHRwXHJcbi8vICAgICAuZ2V0KGAke3RoaXMudXNlckFwaVVybH0vcHJvZmlsZVYyYCwgeyBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSB9KVxyXG4vLyAgICAgLnBpcGUoXHJcbi8vICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4vLyAgICAgICAgIHRoaXMuc2V0Q29va2llKFwidXNlci1pbmZvXCIsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEpLCA3KTtcclxuLy8gICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbi8vICAgICAgIH0pLFxyXG4vLyAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbi8vICAgICApO1xyXG4vLyB9XHJcblxyXG4gIGdldEFsbENvdW50cmllcygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5taWRkbGV3YXJlQXBpVXJsfS9nZXQtY291bnRyaWVzYCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvcihyZXM6IGFueSkge1xyXG4gICAgcmV0dXJuIHRocm93RXJyb3IocmVzLmVycm9yKTtcclxuICB9XHJcblxyXG4gIGdldFByaWNpbmcoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgYCR7dGhpcy5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsfS9iYXNlUHJpY2luZ2AsXHJcbiAgICAgIGRhdGFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmb3Jnb3RQYXNzd29yZFRyaWdnZXIocGFyYW1zOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0KGAke3RoaXMudXNlckFwaVVybH0vZm9yZ290LXBhc3N3b3JkLWVtYWlsYCwgeyBwYXJhbXM6IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBmb3Jnb3RQYXNzd29yZChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgLnBvc3QoYCR7dGhpcy51c2VyQXBpVXJsfS9mb3Jnb3QtcGFzc3dvcmQtdXBkYXRlYCwgZGF0YSApXHJcbiAgICAucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICk7XHJcbiAgfVxyXG4gIHRlcm1zQW5kQ29uZGl0aW9uVXBkYXRlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAucG9zdChgJHt0aGlzLnVzZXJBcGlVcmx9L3Rlcm1zQW5kQ29uZGl0aW9uVXBkYXRlYCwgZGF0YSApXHJcbiAgICAucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgICk7XHJcbiAgfVxyXG4gIFxyXG59XHJcbiJdfQ==
@@ -11,6 +11,7 @@ import dayjs from 'dayjs';
11
11
  import * as CryptoJS from 'crypto-js';
12
12
  import CryptoJS__default from 'crypto-js';
13
13
  import * as i2 from '@angular/common/http';
14
+ import { HttpHeaders } from '@angular/common/http';
14
15
  import * as i4 from 'tango-app-ui-global';
15
16
  import * as i1 from '@ng-bootstrap/ng-bootstrap';
16
17
  import * as i5 from 'tango-app-ui-shared';
@@ -55,12 +56,45 @@ class AuthService {
55
56
  }
56
57
  });
57
58
  }
59
+ base64Encode(str) {
60
+ return btoa(encodeURIComponent(str));
61
+ }
62
+ base64Decode(str) {
63
+ return decodeURIComponent(atob(str));
64
+ }
65
+ setCookie(name, value, days = 1) {
66
+ const encodedValue = this.base64Encode(value);
67
+ const expires = new Date(Date.now() + days * 864e5).toUTCString();
68
+ document.cookie = `${name}=${encodedValue}; expires=${expires}; path=/; Secure; SameSite=Strict`;
69
+ }
70
+ getCookie(name) {
71
+ const match = document.cookie.match(new RegExp(`(^| )${name}=([^;]+)`));
72
+ return match ? this.base64Decode(match[2]) : null;
73
+ }
74
+ // getHeaders() {
75
+ // const user: any = JSON.parse(
76
+ // localStorage.getItem(this.authlocalStorageToken) || "{}"
77
+ // );
78
+ // const headers = {
79
+ // Authorization: "Bearer " + user.authenticationToken,
80
+ // };
81
+ // return headers;
82
+ // }
58
83
  getHeaders() {
59
- const user = JSON.parse(localStorage.getItem(this.authlocalStorageToken) || "{}");
60
- const headers = {
61
- Authorization: "Bearer " + user.authenticationToken,
84
+ const userTokenStr = this.getCookie(this.authlocalStorageToken);
85
+ let token = '';
86
+ if (userTokenStr) {
87
+ try {
88
+ const user = JSON.parse(userTokenStr);
89
+ token = user?.authenticationToken || '';
90
+ }
91
+ catch (e) {
92
+ console.error('Invalid token JSON in cookie');
93
+ }
94
+ }
95
+ return {
96
+ Authorization: 'Bearer ' + token
62
97
  };
63
- return headers;
64
98
  }
65
99
  logout() {
66
100
  localStorage.removeItem(this.authlocalStorageToken);
@@ -93,16 +127,32 @@ class AuthService {
93
127
  return this.http.post(`${this.userApiUrl}/login`, data);
94
128
  }
95
129
  userProfileDet() {
130
+ // debugger
96
131
  const user = localStorage.getItem("user-info");
97
132
  if (user)
98
133
  return of(JSON.parse(user));
134
+ // console.log(this.getHeaders())
135
+ const headers = new HttpHeaders(this.getHeaders());
99
136
  return this.http
100
- .get(`${this.userApiUrl}/profileV2`, { headers: this.getHeaders() })
137
+ .get(`${this.userApiUrl}/profileV2`, { headers: headers })
101
138
  .pipe(map((response) => {
102
139
  localStorage.setItem("user-info", JSON.stringify(response.data));
103
140
  return response;
104
141
  }), catchError(this.handleError));
105
142
  }
143
+ // userProfileDet(): Observable<any> {
144
+ // const userStr = this.getCookie("user-info");
145
+ // if (userStr) return of(JSON.parse(userStr));
146
+ // return this.http
147
+ // .get(`${this.userApiUrl}/profileV2`, { headers: this.getHeaders() })
148
+ // .pipe(
149
+ // map((response: any) => {
150
+ // this.setCookie("user-info", JSON.stringify(response.data), 7);
151
+ // return response;
152
+ // }),
153
+ // catchError(this.handleError)
154
+ // );
155
+ // }
106
156
  getAllCountries() {
107
157
  return this.http.get(`${this.middlewareApiUrl}/get-countries`);
108
158
  }
@@ -323,11 +373,21 @@ class TangoAuthLoginComponent {
323
373
  // this.router.navigateByUrl('/error/403')
324
374
  return;
325
375
  }
326
- let loginToken = localStorage.getItem(this.authlocalStorageToken);
376
+ // let loginToken: any =
377
+ // localStorage.getItem(this.authlocalStorageToken);
378
+ // if (loginToken) {
379
+ // loginToken = JSON.parse(loginToken);
380
+ // }
381
+ // localStorage.setItem(
382
+ // this.authlocalStorageToken,
383
+ // JSON.stringify(res?.data?.result)
384
+ // );
385
+ let loginToken = this.service.getCookie(this.authlocalStorageToken);
327
386
  if (loginToken) {
328
387
  loginToken = JSON.parse(loginToken);
329
388
  }
330
- localStorage.setItem(this.authlocalStorageToken, JSON.stringify(res?.data?.result));
389
+ // STEP 2: Store new token in cookie
390
+ this.service.setCookie(this.authlocalStorageToken, JSON.stringify(res?.data?.result), 7);
331
391
  if (!res?.data.termsAndCondition) {
332
392
  this.showTermsAndConditions();
333
393
  }
@@ -340,8 +400,10 @@ class TangoAuthLoginComponent {
340
400
  this.toastService.getErrorToast('Enter Valid Credentials');
341
401
  }
342
402
  else {
343
- this.credentials.password = originalPassword;
344
- this.toastService.getErrorToast('Enter Valid Credentials');
403
+ setTimeout(() => {
404
+ this.credentials.password = originalPassword;
405
+ this.toastService.getErrorToast('Enter Valid Credentials');
406
+ }, 100);
345
407
  }
346
408
  },
347
409
  error: (err) => {
@@ -1683,7 +1745,8 @@ class TangoAuthForgotPasswordComponent {
1683
1745
  const payload = {
1684
1746
  ...this.PasswordForm.value,
1685
1747
  password: encryptedPassword,
1686
- confirmPassword: encryptedPassword
1748
+ confirmPassword: encryptedPassword,
1749
+ loginType: "web",
1687
1750
  };
1688
1751
  this.authService.forgotPassword(payload).subscribe({
1689
1752
  next: (res) => {
@@ -1818,14 +1881,33 @@ class AuthGuard {
1818
1881
  }
1819
1882
  });
1820
1883
  }
1821
- canActivate(route, state) {
1822
- // const currentUser = localStorage.getItem('isLoggedIn');
1823
- const currentUser = localStorage.getItem(this.authlocalStorageToken);
1824
- if (currentUser) {
1825
- // this.route.navigate(['/manage']);
1826
- return true;
1884
+ // canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
1885
+ // // const currentUser = localStorage.getItem('isLoggedIn');
1886
+ // const currentUser = localStorage.getItem(this.authlocalStorageToken);
1887
+ // if (currentUser) {
1888
+ // // this.route.navigate(['/manage']);
1889
+ // return true;
1890
+ // } else {
1891
+ // this.route.navigate(['/auth/login']);
1892
+ // return false;
1893
+ // }
1894
+ // }
1895
+ canActivate() {
1896
+ const tokenStr = this.authService.getCookie(this.authlocalStorageToken);
1897
+ if (!tokenStr) {
1898
+ this.route.navigate(['/auth/login']);
1899
+ return false;
1827
1900
  }
1828
- else {
1901
+ try {
1902
+ const tokenData = JSON.parse(tokenStr);
1903
+ const isValid = !!tokenData?.authenticationToken;
1904
+ if (!isValid) {
1905
+ this.route.navigate(['/auth/login']);
1906
+ }
1907
+ return isValid;
1908
+ }
1909
+ catch (e) {
1910
+ console.error('Invalid token in cookie', e);
1829
1911
  this.route.navigate(['/auth/login']);
1830
1912
  return false;
1831
1913
  }