ng2-rest 13.2.9 → 16.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +135 -135
  2. package/assets/shared/shared_folder_info.txt +1 -1
  3. package/browser/README.md +24 -24
  4. package/{client/esm2020 → browser/esm2022}/lib/cookie.mjs +3 -3
  5. package/browser/esm2022/lib/helpers.mjs +25 -0
  6. package/{websql/esm2020 → browser/esm2022}/lib/models.mjs +9 -9
  7. package/browser/esm2022/lib/other/simple-resource.mjs +119 -0
  8. package/browser/esm2022/lib/request-cache.mjs +102 -0
  9. package/browser/esm2022/lib/resource.service.mjs +221 -0
  10. package/browser/esm2022/lib/rest-headers.mjs +129 -0
  11. package/browser/esm2022/lib/rest-request.mjs +323 -0
  12. package/browser/esm2022/lib/rest.class.mjs +120 -0
  13. package/browser/{fesm2020 → fesm2022}/ng2-rest.mjs +73 -73
  14. package/browser/{fesm2020 → fesm2022}/ng2-rest.mjs.map +1 -1
  15. package/browser/lib/rest-headers.d.ts +1 -1
  16. package/browser/package.json +6 -12
  17. package/client/README.md +24 -24
  18. package/{browser/esm2020 → client/esm2022}/lib/cookie.mjs +3 -3
  19. package/client/esm2022/lib/helpers.mjs +25 -0
  20. package/client/esm2022/lib/models.mjs +160 -0
  21. package/client/esm2022/lib/other/simple-resource.mjs +119 -0
  22. package/client/esm2022/lib/request-cache.mjs +102 -0
  23. package/client/esm2022/lib/resource.service.mjs +221 -0
  24. package/client/esm2022/lib/rest-headers.mjs +129 -0
  25. package/client/esm2022/lib/rest-request.mjs +323 -0
  26. package/client/esm2022/lib/rest.class.mjs +120 -0
  27. package/client/{fesm2020 → fesm2022}/ng2-rest.mjs +73 -73
  28. package/client/{fesm2020 → fesm2022}/ng2-rest.mjs.map +1 -1
  29. package/client/lib/rest-headers.d.ts +1 -1
  30. package/client/package.json +84 -82
  31. package/index.js.map +1 -1
  32. package/lib/content-type.js.map +1 -1
  33. package/lib/cookie.js.map +1 -1
  34. package/lib/helpers.js +1 -2
  35. package/lib/helpers.js.map +1 -1
  36. package/lib/index.js.map +1 -1
  37. package/lib/mapping.js.map +1 -1
  38. package/lib/models.js.map +1 -1
  39. package/lib/other/simple-resource.js +1 -2
  40. package/lib/other/simple-resource.js.map +1 -1
  41. package/lib/params.js.map +1 -1
  42. package/lib/request-cache.js +1 -2
  43. package/lib/request-cache.js.map +1 -1
  44. package/lib/resource.service.js +1 -2
  45. package/lib/resource.service.js.map +1 -1
  46. package/lib/rest-headers.d.ts +1 -1
  47. package/lib/rest-headers.js.map +1 -1
  48. package/lib/rest-request.js +1 -2
  49. package/lib/rest-request.js.map +1 -1
  50. package/lib/rest.class.js.map +1 -1
  51. package/package.json +4 -4
  52. package/package.json_devDependencies.json +217 -217
  53. package/package.json_tnp.json5 +53 -53
  54. package/tmp-environment.json +89 -87
  55. package/websql/README.md +24 -24
  56. package/websql/{esm2020 → esm2022}/lib/cookie.mjs +3 -3
  57. package/websql/esm2022/lib/helpers.mjs +25 -0
  58. package/websql/esm2022/lib/models.mjs +160 -0
  59. package/websql/esm2022/lib/other/simple-resource.mjs +119 -0
  60. package/websql/esm2022/lib/request-cache.mjs +102 -0
  61. package/websql/esm2022/lib/resource.service.mjs +221 -0
  62. package/websql/esm2022/lib/rest-headers.mjs +129 -0
  63. package/websql/esm2022/lib/rest-request.mjs +323 -0
  64. package/websql/esm2022/lib/rest.class.mjs +120 -0
  65. package/websql/{fesm2020 → fesm2022}/ng2-rest.mjs +73 -73
  66. package/websql/{fesm2020 → fesm2022}/ng2-rest.mjs.map +1 -1
  67. package/websql/lib/rest-headers.d.ts +1 -1
  68. package/websql/package.json +6 -12
  69. package/browser/esm2020/lib/helpers.mjs +0 -24
  70. package/browser/esm2020/lib/models.mjs +0 -160
  71. package/browser/esm2020/lib/other/simple-resource.mjs +0 -118
  72. package/browser/esm2020/lib/request-cache.mjs +0 -101
  73. package/browser/esm2020/lib/resource.service.mjs +0 -220
  74. package/browser/esm2020/lib/rest-headers.mjs +0 -129
  75. package/browser/esm2020/lib/rest-request.mjs +0 -322
  76. package/browser/esm2020/lib/rest.class.mjs +0 -120
  77. package/browser/fesm2015/ng2-rest.mjs +0 -1739
  78. package/browser/fesm2015/ng2-rest.mjs.map +0 -1
  79. package/client/esm2020/lib/helpers.mjs +0 -24
  80. package/client/esm2020/lib/models.mjs +0 -160
  81. package/client/esm2020/lib/other/simple-resource.mjs +0 -118
  82. package/client/esm2020/lib/request-cache.mjs +0 -101
  83. package/client/esm2020/lib/resource.service.mjs +0 -220
  84. package/client/esm2020/lib/rest-headers.mjs +0 -129
  85. package/client/esm2020/lib/rest-request.mjs +0 -322
  86. package/client/esm2020/lib/rest.class.mjs +0 -120
  87. package/client/fesm2015/ng2-rest.mjs +0 -1739
  88. package/client/fesm2015/ng2-rest.mjs.map +0 -1
  89. package/websql/esm2020/lib/helpers.mjs +0 -24
  90. package/websql/esm2020/lib/other/simple-resource.mjs +0 -118
  91. package/websql/esm2020/lib/request-cache.mjs +0 -101
  92. package/websql/esm2020/lib/resource.service.mjs +0 -220
  93. package/websql/esm2020/lib/rest-headers.mjs +0 -129
  94. package/websql/esm2020/lib/rest-request.mjs +0 -322
  95. package/websql/esm2020/lib/rest.class.mjs +0 -120
  96. package/websql/fesm2015/ng2-rest.mjs +0 -1739
  97. package/websql/fesm2015/ng2-rest.mjs.map +0 -1
  98. /package/browser/{esm2020 → esm2022}/lib/content-type.mjs +0 -0
  99. /package/browser/{esm2020 → esm2022}/lib/index.mjs +0 -0
  100. /package/browser/{esm2020 → esm2022}/lib/mapping.mjs +0 -0
  101. /package/browser/{esm2020 → esm2022}/lib/params.mjs +0 -0
  102. /package/browser/{esm2020 → esm2022}/ng2-rest.mjs +0 -0
  103. /package/browser/{esm2020 → esm2022}/public-api.mjs +0 -0
  104. /package/browser/{ng2-rest.d.ts → index.d.ts} +0 -0
  105. /package/client/{esm2020 → esm2022}/lib/content-type.mjs +0 -0
  106. /package/client/{esm2020 → esm2022}/lib/index.mjs +0 -0
  107. /package/client/{esm2020 → esm2022}/lib/mapping.mjs +0 -0
  108. /package/client/{esm2020 → esm2022}/lib/params.mjs +0 -0
  109. /package/client/{esm2020 → esm2022}/ng2-rest.mjs +0 -0
  110. /package/client/{esm2020 → esm2022}/public-api.mjs +0 -0
  111. /package/client/{ng2-rest.d.ts → index.d.ts} +0 -0
  112. /package/websql/{esm2020 → esm2022}/lib/content-type.mjs +0 -0
  113. /package/websql/{esm2020 → esm2022}/lib/index.mjs +0 -0
  114. /package/websql/{esm2020 → esm2022}/lib/mapping.mjs +0 -0
  115. /package/websql/{esm2020 → esm2022}/lib/params.mjs +0 -0
  116. /package/websql/{esm2020 → esm2022}/ng2-rest.mjs +0 -0
  117. /package/websql/{esm2020 → esm2022}/public-api.mjs +0 -0
  118. /package/websql/{ng2-rest.d.ts → index.d.ts} +0 -0
package/README.md CHANGED
@@ -1,135 +1,135 @@
1
-
2
- ## ng2-rest ##
3
-
4
- Robust isomorphic REST framework for browser (Angular, React etc.) and backend (NodeJS) JavaScript/TypeScript apps.
5
-
6
- Features:
7
- - Compatible with Angular (2+) (newest 13,14 also...) , React, Vue , NodeJS (works everywhere)
8
- - Compatible with RxJS operators (exhaustMap, switchMap, request cancelation etc.)
9
- - Based on [axios](https://axios-http.com/) => excellent alternative to Angular's [HttpClient](https://angular.io/api/common/http/HttpClient)
10
- - JSONP api request handling
11
- - Transfer class instance from server to client and back
12
- - Elegant way of dealing with REST api ( *similar to ExpressJS routes definitions* )
13
-
14
- (more documentation soon... )
15
-
16
- To install this package run:
17
-
18
- npm install ng2-rest --save
19
-
20
- Import Resource class:
21
- ```ts
22
- import { Resource } from 'ng2-rest/browser';
23
- ```
24
-
25
- Resource
26
- ========
27
-
28
- Fit you existing API (not only REST) into new fluent objects with **Resource**
29
- class observables. Use power of **async** in new angular templates;
30
-
31
- **template.html**
32
- ```html
33
- Users:
34
- <ul *ngIf="model.allUsers() | async; else loader; let users" >
35
-
36
- <li *ngFor="let user of users">
37
- {{user.id}} {{user.fullName()}}
38
- <br>
39
- <input type="name" [(NgModel)]="user.name" >
40
- <button (click)="model.update(user)" > Update </button>
41
- </li>
42
-
43
- </ul>
44
-
45
- <ng-template #loader> loading users... </ng-template>
46
-
47
- ```
48
- **component.ts**
49
- ```ts
50
- class User {
51
- name: string;
52
- surname: string;
53
- id: number;
54
-
55
- fullName() {
56
- return `Surname: ${this.surname}, Name: ${this.name}`;
57
- }
58
- }
59
-
60
- // Express.js style url endpoint model
61
- // you can ommit "<User>" part is you don't wanna see response interface
62
- // also you can ommit third argument ",User" is you don't wanna
63
- // map response object to User class objects
64
- const rest = Resource.create<User>("http://yourbackend.com/api","users/:id",{'':User} )
65
-
66
- class UserComponent {
67
-
68
- // Prepare your beautiful interface
69
- model = {
70
- allUsers: () => rest.model()
71
- .array
72
- .get()
73
- .observable // Observable resposne (useful for Angular 2+ html templates)
74
- .pipe( map({ body } => body.json) ) // get all users, body.json => User[]
75
-
76
- userBy: (id) => rest.model({id})
77
- .get() // Promise response by default
78
- .then({ body } => console.log(body.json)) // get user by id, body.json => User
79
-
80
- update: async (user:User) =>{
81
- try {
82
- await rest.model({id:user.id}).put(user) // Promise response by default
83
-
84
- alert('Update sucess')
85
- } catch(e) {
86
- alert(e)
87
- }
88
- }
89
- }
90
-
91
- constructor() { }
92
-
93
- }
94
- ```
95
-
96
- Specification
97
- ============
98
- Example **UrlParams[]** :
99
- `[ { sort: true },{ filter: 'id,5' }, { filter: 'name,test' } ]`
100
-
101
-
102
- | Name | Parameters | Description |
103
- | :---: | --- | ---: |
104
- | **.array.** | get,post,put,head,delete,jsonp | for everything, but with arrays |
105
- | **get** | `UrlParams[] ` | get model by parameters |
106
- | **post** | `model, UrlParams[] ` | post object model |
107
- | **put** | `model, UrlParams[]` | put object model |
108
- | **head** | `model, UrlParams[]` | get head for model |
109
- | **delete** | `UrlParams[]` | remove object by params |
110
- | **jsonp** | `UrlParams[]` | get jsonp data |
111
-
112
-
113
-
114
- # Production mode
115
- ===
116
- Nice things to do in production mode:
117
-
118
- **1. Disable warnings.**
119
-
120
- If you don't wanna see warning, disable it like this:
121
- ```ts
122
- if (environment.production) {
123
- Resource.enableWarnings = false;
124
- }
125
- ```
126
-
127
- # Angular 2+ ngZone
128
- If you are using Angular 2+ you need to do this in your root **app.component**:
129
- ```ts
130
- constructor(zone:NgZone) {
131
- Resource.initAngularNgZone(zone)
132
- }
133
- ```
134
-
135
-
1
+
2
+ ## ng2-rest ##
3
+
4
+ Robust isomorphic REST framework for browser (Angular, React etc.) and backend (NodeJS) JavaScript/TypeScript apps.
5
+
6
+ Features:
7
+ - Compatible with Angular (2+) (newest 13,14 also...) , React, Vue , NodeJS (works everywhere)
8
+ - Compatible with RxJS operators (exhaustMap, switchMap, request cancelation etc.)
9
+ - Based on [axios](https://axios-http.com/) => excellent alternative to Angular's [HttpClient](https://angular.io/api/common/http/HttpClient)
10
+ - JSONP api request handling
11
+ - Transfer class instance from server to client and back
12
+ - Elegant way of dealing with REST api ( *similar to ExpressJS routes definitions* )
13
+
14
+ (more documentation soon... )
15
+
16
+ To install this package run:
17
+
18
+ npm install ng2-rest --save
19
+
20
+ Import Resource class:
21
+ ```ts
22
+ import { Resource } from 'ng2-rest/browser';
23
+ ```
24
+
25
+ Resource
26
+ ========
27
+
28
+ Fit you existing API (not only REST) into new fluent objects with **Resource**
29
+ class observables. Use power of **async** in new angular templates;
30
+
31
+ **template.html**
32
+ ```html
33
+ Users:
34
+ <ul *ngIf="model.allUsers() | async; else loader; let users" >
35
+
36
+ <li *ngFor="let user of users">
37
+ {{user.id}} {{user.fullName()}}
38
+ <br>
39
+ <input type="name" [(NgModel)]="user.name" >
40
+ <button (click)="model.update(user)" > Update </button>
41
+ </li>
42
+
43
+ </ul>
44
+
45
+ <ng-template #loader> loading users... </ng-template>
46
+
47
+ ```
48
+ **component.ts**
49
+ ```ts
50
+ class User {
51
+ name: string;
52
+ surname: string;
53
+ id: number;
54
+
55
+ fullName() {
56
+ return `Surname: ${this.surname}, Name: ${this.name}`;
57
+ }
58
+ }
59
+
60
+ // Express.js style url endpoint model
61
+ // you can ommit "<User>" part is you don't wanna see response interface
62
+ // also you can ommit third argument ",User" is you don't wanna
63
+ // map response object to User class objects
64
+ const rest = Resource.create<User>("http://yourbackend.com/api","users/:id",{'':User} )
65
+
66
+ class UserComponent {
67
+
68
+ // Prepare your beautiful interface
69
+ model = {
70
+ allUsers: () => rest.model()
71
+ .array
72
+ .get()
73
+ .observable // Observable resposne (useful for Angular 2+ html templates)
74
+ .pipe( map({ body } => body.json) ) // get all users, body.json => User[]
75
+
76
+ userBy: (id) => rest.model({id})
77
+ .get() // Promise response by default
78
+ .then({ body } => console.log(body.json)) // get user by id, body.json => User
79
+
80
+ update: async (user:User) =>{
81
+ try {
82
+ await rest.model({id:user.id}).put(user) // Promise response by default
83
+
84
+ alert('Update sucess')
85
+ } catch(e) {
86
+ alert(e)
87
+ }
88
+ }
89
+ }
90
+
91
+ constructor() { }
92
+
93
+ }
94
+ ```
95
+
96
+ Specification
97
+ ============
98
+ Example **UrlParams[]** :
99
+ `[ { sort: true },{ filter: 'id,5' }, { filter: 'name,test' } ]`
100
+
101
+
102
+ | Name | Parameters | Description |
103
+ | :---: | --- | ---: |
104
+ | **.array.** | get,post,put,head,delete,jsonp | for everything, but with arrays |
105
+ | **get** | `UrlParams[] ` | get model by parameters |
106
+ | **post** | `model, UrlParams[] ` | post object model |
107
+ | **put** | `model, UrlParams[]` | put object model |
108
+ | **head** | `model, UrlParams[]` | get head for model |
109
+ | **delete** | `UrlParams[]` | remove object by params |
110
+ | **jsonp** | `UrlParams[]` | get jsonp data |
111
+
112
+
113
+
114
+ # Production mode
115
+ ===
116
+ Nice things to do in production mode:
117
+
118
+ **1. Disable warnings.**
119
+
120
+ If you don't wanna see warning, disable it like this:
121
+ ```ts
122
+ if (environment.production) {
123
+ Resource.enableWarnings = false;
124
+ }
125
+ ```
126
+
127
+ # Angular 2+ ngZone
128
+ If you are using Angular 2+ you need to do this in your root **app.component**:
129
+ ```ts
130
+ constructor(zone:NgZone) {
131
+ Resource.initAngularNgZone(zone)
132
+ }
133
+ ```
134
+
135
+
@@ -1,6 +1,6 @@
1
1
  THIS FILE IS GENERATED. THIS FILE IS GENERATED. THIS FILE IS GENERATED.
2
2
 
3
- Assets from this folder are being shipped with this npm package (ng2-rest@13.2.9)
3
+ Assets from this folder are being shipped with this npm package (ng2-rest@16.0.10)
4
4
  created from this project.
5
5
 
6
6
  THIS FILE IS GENERATED.THIS FILE IS GENERATED. THIS FILE IS GENERATED.
package/browser/README.md CHANGED
@@ -1,24 +1,24 @@
1
- # MyLib
2
-
3
- This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
4
-
5
- ## Code scaffolding
6
-
7
- Run `ng generate component component-name --project my-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project my-lib`.
8
- > Note: Don't forget to add `--project my-lib` or else it will be added to the default project in your `angular.json` file.
9
-
10
- ## Build
11
-
12
- Run `ng build my-lib` to build the project. The build artifacts will be stored in the `dist/` directory.
13
-
14
- ## Publishing
15
-
16
- After building your library with `ng build my-lib`, go to the dist folder `cd dist/my-lib` and run `npm publish`.
17
-
18
- ## Running unit tests
19
-
20
- Run `ng test my-lib` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
-
22
- ## Further help
23
-
24
- To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
1
+ # MyLib
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project my-lib` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project my-lib`.
8
+ > Note: Don't forget to add `--project my-lib` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build my-lib` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build my-lib`, go to the dist folder `cd dist/my-lib` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test my-lib` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -1,12 +1,12 @@
1
1
  export class Cookie {
2
- constructor() {
3
- }
4
2
  static get Instance() {
5
3
  if (!Cookie.__instance) {
6
4
  Cookie.__instance = new Cookie();
7
5
  }
8
6
  return Cookie.__instance;
9
7
  }
8
+ constructor() {
9
+ }
10
10
  read(name) {
11
11
  var result = new RegExp('(?:^|; )' + encodeURIComponent(name) + '=([^;]*)').exec(document.cookie);
12
12
  return result ? result[1] : null;
@@ -26,4 +26,4 @@ export class Cookie {
26
26
  }
27
27
  ;
28
28
  ({}); // @--end-of-file-for-module=ng2-rest lib/cookie.ts
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS9uZzItcmVzdC9wcm9qZWN0cy9uZzItcmVzdC9zcmMvbGliL2Nvb2tpZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sTUFBTTtJQVVmO0lBQ0EsQ0FBQztJQVRNLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztTQUNwQztRQUNELE9BQU8sTUFBTSxDQUFDLFVBQWlCLENBQUM7SUFDcEMsQ0FBQztJQU1ELElBQUksQ0FBQyxJQUFZO1FBQ2IsSUFBSSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEcsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxJQUFhO1FBQzVDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztTQUNuQjtRQUVELElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUU1RCxJQUFJLE9BQU8sR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWhELFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLFVBQVUsQ0FBQztJQUNoRSxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVk7UUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBRUo7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1EQUFtRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBDb29raWUge1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogQ29va2llIHtcbiAgICAgICAgaWYgKCFDb29raWUuX19pbnN0YW5jZSkge1xuICAgICAgICAgICAgQ29va2llLl9faW5zdGFuY2UgPSBuZXcgQ29va2llKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIENvb2tpZS5fX2luc3RhbmNlIGFzIGFueTtcbiAgICB9XG4gICAgcHJpdmF0ZSBzdGF0aWMgX19pbnN0YW5jZTtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgfVxuXG4gICAgcmVhZChuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBSZWdFeHAoJyg/Ol58OyApJyArIGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSArICc9KFteO10qKScpLmV4ZWMoZG9jdW1lbnQuY29va2llKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdFsxXSA6IG51bGw7XG4gICAgfVxuXG4gICAgd3JpdGUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBkYXlzPzogbnVtYmVyKSB7XG4gICAgICAgIGlmICghZGF5cykge1xuICAgICAgICAgICAgZGF5cyA9IDM2NSAqIDIwO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyAoZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApKTtcblxuICAgICAgICB2YXIgZXhwaXJlcyA9IFwiOyBleHBpcmVzPVwiICsgZGF0ZS50b1VUQ1N0cmluZygpO1xuXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyBcIj1cIiArIHZhbHVlICsgZXhwaXJlcyArIFwiOyBwYXRoPS9cIjtcbiAgICB9XG5cbiAgICByZW1vdmUobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMud3JpdGUobmFtZSwgXCJcIiwgLTEpO1xuICAgIH1cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9bmcyLXJlc3QgbGliL2Nvb2tpZS50cyJdfQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS9uZzItcmVzdC9wcm9qZWN0cy9uZzItcmVzdC9zcmMvbGliL2Nvb2tpZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sTUFBTTtJQUVSLE1BQU0sS0FBSyxRQUFRO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztTQUNwQztRQUNELE9BQU8sTUFBTSxDQUFDLFVBQWlCLENBQUM7SUFDcEMsQ0FBQztJQUdEO0lBQ0EsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFZO1FBQ2IsSUFBSSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEcsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxJQUFhO1FBQzVDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztTQUNuQjtRQUVELElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUU1RCxJQUFJLE9BQU8sR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWhELFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLFVBQVUsQ0FBQztJQUNoRSxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVk7UUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBRUo7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1EQUFtRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBDb29raWUge1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogQ29va2llIHtcbiAgICAgICAgaWYgKCFDb29raWUuX19pbnN0YW5jZSkge1xuICAgICAgICAgICAgQ29va2llLl9faW5zdGFuY2UgPSBuZXcgQ29va2llKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIENvb2tpZS5fX2luc3RhbmNlIGFzIGFueTtcbiAgICB9XG4gICAgcHJpdmF0ZSBzdGF0aWMgX19pbnN0YW5jZTtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgfVxuXG4gICAgcmVhZChuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBSZWdFeHAoJyg/Ol58OyApJyArIGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSArICc9KFteO10qKScpLmV4ZWMoZG9jdW1lbnQuY29va2llKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdFsxXSA6IG51bGw7XG4gICAgfVxuXG4gICAgd3JpdGUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBkYXlzPzogbnVtYmVyKSB7XG4gICAgICAgIGlmICghZGF5cykge1xuICAgICAgICAgICAgZGF5cyA9IDM2NSAqIDIwO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyAoZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApKTtcblxuICAgICAgICB2YXIgZXhwaXJlcyA9IFwiOyBleHBpcmVzPVwiICsgZGF0ZS50b1VUQ1N0cmluZygpO1xuXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyBcIj1cIiArIHZhbHVlICsgZXhwaXJlcyArIFwiOyBwYXRoPS9cIjtcbiAgICB9XG5cbiAgICByZW1vdmUobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMud3JpdGUobmFtZSwgXCJcIiwgLTEpO1xuICAgIH1cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9bmcyLXJlc3QgbGliL2Nvb2tpZS50cyJdfQ==
@@ -0,0 +1,25 @@
1
+ import { CoreHelpers } from 'tnp-core/browser';
2
+ import { Mapping } from './mapping';
3
+ import { JSON10 } from 'json10/browser';
4
+ // @ts-ignore
5
+ class Helpers extends CoreHelpers {
6
+ static { this.JSON = JSON10; }
7
+ static get Mapping() {
8
+ return {
9
+ encode(json, mapping) {
10
+ return Mapping.encode(json, mapping);
11
+ },
12
+ decode(json, autodetect = false) {
13
+ return Mapping.decode(json, autodetect);
14
+ }
15
+ };
16
+ }
17
+ static checkValidUrl(url) {
18
+ let regex = /(http|https):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%!\-\/]))?/;
19
+ return regex.test(url);
20
+ }
21
+ }
22
+ export { Helpers };
23
+ ;
24
+ ({}); // @--end-of-file-for-module=ng2-rest lib/helpers.ts
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1idW5kbGUvbmcyLXJlc3QvcHJvamVjdHMvbmcyLXJlc3Qvc3JjL2xpYi9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxhQUFhO0FBQ2IsTUFBYSxPQUFRLFNBQVEsV0FBVzthQUUvQixTQUFJLEdBQUcsTUFBTSxDQUFDO0lBRXJCLE1BQU0sS0FBSyxPQUFPO1FBQ2hCLE9BQU87WUFDTCxNQUFNLENBQWUsSUFBWSxFQUFFLE9BQXdCO2dCQUN6RCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxNQUFNLENBQUMsSUFBWSxFQUFFLFVBQVUsR0FBRyxLQUFLO2dCQUNyQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1lBQ3pDLENBQUM7U0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBVztRQUM5QixJQUFJLEtBQUssR0FBRyw2RUFBNkUsQ0FBQztRQUMxRixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQzs7U0FsQlUsT0FBTztBQXdCbkIsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxvREFBb0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBDb3JlSGVscGVycyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgTWFwcGluZyB9IGZyb20gJy4vbWFwcGluZyc7XG5pbXBvcnQgeyBKU09OMTAgfSBmcm9tICdqc29uMTAvYnJvd3Nlcic7XG5cbi8vIEB0cy1pZ25vcmVcbmV4cG9ydCBjbGFzcyBIZWxwZXJzIGV4dGVuZHMgQ29yZUhlbHBlcnMge1xuXG4gIHN0YXRpYyBKU09OID0gSlNPTjEwO1xuXG4gIHN0YXRpYyBnZXQgTWFwcGluZygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW5jb2RlPFQgPSBGdW5jdGlvbj4oanNvbjogT2JqZWN0LCBtYXBwaW5nOiBNYXBwaW5nLk1hcHBpbmcpOiBUIHtcbiAgICAgICAgcmV0dXJuIE1hcHBpbmcuZW5jb2RlKGpzb24sIG1hcHBpbmcpO1xuICAgICAgfSxcbiAgICAgIGRlY29kZShqc29uOiBPYmplY3QsIGF1dG9kZXRlY3QgPSBmYWxzZSApOiBNYXBwaW5nLk1hcHBpbmcge1xuICAgICAgICByZXR1cm4gTWFwcGluZy5kZWNvZGUoanNvbiwgYXV0b2RldGVjdClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY2hlY2tWYWxpZFVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCByZWdleCA9IC8oaHR0cHxodHRwcyk6XFwvXFwvKFxcdys6ezAsMX1cXHcqKT8oXFxTKykoOlswLTldKyk/KFxcL3xcXC8oW1xcdyMhOi4/Kz0mJSFcXC1cXC9dKSk/LztcbiAgICByZXR1cm4gcmVnZXgudGVzdCh1cmwpO1xuICB9XG5cblxuXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT1uZzItcmVzdCBsaWIvaGVscGVycy50cyJdfQ==
@@ -1,10 +1,10 @@
1
1
  import { Cookie } from './cookie';
2
2
  import { Mapping } from './mapping';
3
- import { Models as HelpersModels } from 'typescript-class-helpers/websql';
4
- import { JSON10 } from 'json10/websql';
3
+ import { Models as HelpersModels } from 'typescript-class-helpers/browser';
4
+ import { JSON10 } from 'json10/browser';
5
5
  import { RequestCache } from './request-cache';
6
- import { _ } from 'tnp-core/websql';
7
- import { Helpers } from 'tnp-core/websql';
6
+ import { _ } from 'tnp-core/browser';
7
+ import { Helpers } from 'tnp-core/browser';
8
8
  export var Models;
9
9
  (function (Models) {
10
10
  Models.MethodConfig = HelpersModels.MethodConfig;
@@ -91,17 +91,17 @@ export var Models;
91
91
  }
92
92
  Models.ErrorBody = ErrorBody;
93
93
  class BaseResponse {
94
+ static { this.cookies = Cookie.Instance; }
95
+ get cookies() {
96
+ return BaseResponse.cookies;
97
+ }
94
98
  constructor(responseText, headers, statusCode, isArray = false) {
95
99
  this.responseText = responseText;
96
100
  this.headers = headers;
97
101
  this.statusCode = statusCode;
98
102
  this.isArray = isArray;
99
103
  }
100
- get cookies() {
101
- return BaseResponse.cookies;
102
- }
103
104
  }
104
- BaseResponse.cookies = Cookie.Instance;
105
105
  Models.BaseResponse = BaseResponse;
106
106
  class HttpResponse extends BaseResponse {
107
107
  constructor(sourceRequest, responseText, headers, statusCode, entity, circular, jobid, isArray = false) {
@@ -157,4 +157,4 @@ export var Models;
157
157
  })(Models || (Models = {}));
158
158
  ;
159
159
  ({}); // @--end-of-file-for-module=ng2-rest lib/models.ts
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS13ZWJzcWwvbmcyLXJlc3QvcHJvamVjdHMvbmcyLXJlc3Qvc3JjL2xpYi9tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFBRSxNQUFNLElBQUksYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcxQyxNQUFNLEtBQVcsTUFBTSxDQTZSdEI7QUE3UkQsV0FBaUIsTUFBTTtJQUtQLG1CQUFZLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQztJQUMxQyxrQkFBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7SUFDeEMsa0JBQVcsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFBO0lBNEVwRCxDQUFDO0lBS0QsQ0FBQztJQVdELEVBQUUsQ0FBQztJQUVKLE1BQXNCLFFBQVE7UUFDbEIsTUFBTSxDQUFDLElBQUksRUFBRSxXQUFXLEdBQUcsS0FBSztZQUN4QyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUM1QixJQUFJO29CQUNGLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN0Qjtn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RixDQUFDO1FBRUQsSUFBSSxLQUFLO1lBQ1AsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNsQztZQUNELE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztLQUVGO0lBbkRZLG1CQUFZLGVBbUR4QixDQUFBO0lBRUQsTUFBYSxpQkFBa0IsU0FBUSxZQUFpQjtRQUt0RCxZQUNTLE9BQWUsRUFDdEIsWUFBcUIsRUFDckIsT0FBcUIsRUFDckIsVUFBOEIsRUFDdkIsS0FBYztZQUVyQixLQUFLLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQU5sQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1lBSWYsVUFBSyxHQUFMLEtBQUssQ0FBUztZQUdyQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3pDLENBQUM7S0FDRjtJQWZZLHdCQUFpQixvQkFlN0IsQ0FBQTtJQVlILEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztBQUVMLENBQUMsRUE3UmdCLE1BQU0sS0FBTixNQUFNLFFBNlJ0QjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsbURBQW1EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9nLCBMZXZlbCB9IGZyb20gJ25nMi1sb2dnZXIvd2Vic3FsJztcbmltcG9ydCB7IFJlc3RIZWFkZXJzIH0gZnJvbSAnLi9yZXN0LWhlYWRlcnMnO1xuaW1wb3J0IHsgUmVzdCB9IGZyb20gJy4vcmVzdC5jbGFzcyc7XG5pbXBvcnQgeyBDb29raWUgfSBmcm9tICcuL2Nvb2tpZSc7XG5pbXBvcnQgeyBNYXBwaW5nIH0gZnJvbSAnLi9tYXBwaW5nJztcbmltcG9ydCB7IEF4aW9zUmVzcG9uc2UgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBNb2RlbHMgYXMgSGVscGVyc01vZGVscyB9IGZyb20gJ3R5cGVzY3JpcHQtY2xhc3MtaGVscGVycy93ZWJzcWwnXG5pbXBvcnQgeyBKU09OMTAsIENpcmMgfSBmcm9tICdqc29uMTAvd2Vic3FsJztcbmltcG9ydCB7IFJlcXVlc3RDYWNoZSB9IGZyb20gJy4vcmVxdWVzdC1jYWNoZSc7XG5pbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvd2Vic3FsJztcbmltcG9ydCB7IENvbmZpZ01vZGVscyB9IGZyb20gJ3RucC1jb25maWcvd2Vic3FsJztcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tICd0bnAtY29yZS93ZWJzcWwnO1xuXG5cbmV4cG9ydCBuYW1lc3BhY2UgTW9kZWxzIHtcblxuICBleHBvcnQgaW1wb3J0IEh0dHBNZXRob2QgPSBDb25maWdNb2RlbHMuSHR0cE1ldGhvZDtcbiAgZXhwb3J0IGltcG9ydCBQYXJhbVR5cGUgPSBDb25maWdNb2RlbHMuUGFyYW1UeXBlO1xuXG4gIGV4cG9ydCBpbXBvcnQgTWV0aG9kQ29uZmlnID0gSGVscGVyc01vZGVscy5NZXRob2RDb25maWc7XG4gIGV4cG9ydCBpbXBvcnQgQ2xhc3NDb25maWcgPSBIZWxwZXJzTW9kZWxzLkNsYXNzQ29uZmlnO1xuICBleHBvcnQgaW1wb3J0IFBhcmFtQ29uZmlnID0gSGVscGVyc01vZGVscy5QYXJhbUNvbmZpZ1xuXG5cbiAgZXhwb3J0IGludGVyZmFjZSBIYW5kbGVSZXN1bHRPcHRpb25zIHtcbiAgICByZXM6IE1vZGVscy5Nb2NrUmVzcG9uc2U7XG4gICAgbWV0aG9kOiBNb2RlbHMuSHR0cE1ldGhvZDtcbiAgICBqb2JpZD86IG51bWJlcjtcbiAgICBpc0FycmF5PzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlUmVzdWx0U291cmNlUmVxdWVzdE9wdGlvbnMge1xuICAgIHVybDogc3RyaW5nLFxuICAgIG1ldGhvZDogTW9kZWxzLkh0dHBNZXRob2QsXG5cbiAgICBib2R5OiBhbnksXG4gICAgaXNBcnJheTogYm9vbGVhbixcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEJhY2tlbmRFcnJvciA9IHtcbiAgICBtc2c/OiBzdHJpbmc7XG4gICAgc3RhY2s/OiBzdHJpbmdbXTtcbiAgICBkYXRhOiBhbnk7XG4gIH1cblxuICBleHBvcnQgdHlwZSBNZXRhUmVxdWVzdCA9IHtcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgZW5kcG9pbnQ6IHN0cmluZztcbiAgICBlbnRpdHk6IE1hcHBpbmcuTWFwcGluZztcbiAgICBjaXJjdWxhcjogQ2lyY1tdO1xuICB9XG4gIGV4cG9ydCB0eXBlIEh0dHBDb2RlID0gMjAwIHwgNDAwIHwgNDAxIHwgNDA0IHwgNTAwO1xuXG4gIGV4cG9ydCB0eXBlIFByb21pc2VPYnNlcnZhYmxlTWl4PFQ+ID0gUHJvbWlzZTxUPiAmIHtcbiAgICBjYWNoZT86IFJlcXVlc3RDYWNoZSxcbiAgICBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFQ+O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgTWV0aG9kV2l0aG91dEJvZHk8RSwgVCwgUiA9IFByb21pc2VPYnNlcnZhYmxlTWl4PEU+PiA9IChwYXJhbXM/OiBVcmxQYXJhbXNbXSwgZG9Ob3RTZXJpYWxpemVQYXJhbXM/OiBib29sZWFuKSA9PiBSXG4gIGV4cG9ydCB0eXBlIE1ldGhvZFdpdGhCb2R5PEUsIFQsIFIgPSBQcm9taXNlT2JzZXJ2YWJsZU1peDxFPj4gPSAoaXRlbT86IFQsIHBhcmFtcz86IFVybFBhcmFtc1tdLCBkb05vdFNlcmlhbGl6ZVBhcmFtcz86IGJvb2xlYW4pID0+IFJcbiAgZXhwb3J0IHR5cGUgUmVwbGF5RGF0YSA9IHtcbiAgICBzdWJqZWN0OiBTdWJqZWN0PGFueT4sXG4gICAgZGF0YTogeyB1cmw6IHN0cmluZywgYm9keTogc3RyaW5nLCBoZWFkZXJzOiBSZXN0SGVhZGVycywgaXNBcnJheTogYm9vbGVhbjsgfSxcbiAgICAvKipcbiAgICAgKiBqb2JpZFxuICAgICAqL1xuICAgIGlkOiBudW1iZXI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFJlcVBhcmFtcyA9IHsgdXJsOiBzdHJpbmcsIG1ldGhvZDogQ29uZmlnTW9kZWxzLkh0dHBNZXRob2QsIGhlYWRlcnM/OiBSZXN0SGVhZGVycywgYm9keT86IGFueSwgam9iaWQ6IG51bWJlciwgaXNBcnJheTogYm9vbGVhbiB9O1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VNb2RlbDxBLCBUQT4ge1xuICAgIG1vZGVsOiAocGF0aE1vZGVscz86IE9iamVjdCwgcmVzcG9uc2VPYmplY3RUeXBlPzogRnVuY3Rpb24pID0+IFJlc3Q8QSwgVEE+LFxuICAgIHJlcGxheTogKG1ldGhvZDogQ29uZmlnTW9kZWxzLkh0dHBNZXRob2QpID0+IHZvaWQ7XG4gICAgaGVhZGVyczogUmVzdEhlYWRlcnM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE5nMlJlc3RNZXRob2RzPEUsIFQ+IHtcbiAgICBnZXQ6IE1ldGhvZFdpdGhvdXRCb2R5PEUsIFQ+O1xuICAgIHBvc3Q6IE1ldGhvZFdpdGhCb2R5PEUsIFQ+O1xuICAgIHB1dDogTWV0aG9kV2l0aEJvZHk8RSwgVD47XG4gICAgcGF0Y2g6IE1ldGhvZFdpdGhCb2R5PEUsIFQ+O1xuICAgIGhlYWQ6IE1ldGhvZFdpdGhvdXRCb2R5PEUsIFQ+O1xuICAgIGRlbGV0ZTogTWV0aG9kV2l0aG91dEJvZHk8RSwgVD47XG4gICAganNvbnA6IE1ldGhvZFdpdGhvdXRCb2R5PEUsIFQ+O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgTW9ja0NvbnRyb2xsZXIgPSAoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgbWV0aG9kOiBDb25maWdNb2RlbHMuSHR0cE1ldGhvZCxcbiAgICBoZWFkZXJzPzogUmVzdEhlYWRlcnMsXG4gICAgYm9keT86IGFueVxuICApID0+IE1vY2tSZXNwb25zZTtcblxuICBleHBvcnQgdHlwZSBNb2NrSHR0cCA9IChNb2NrUmVzcG9uc2UgfCBNb2NrQ29udHJvbGxlcik7XG5cbiAgZXhwb3J0IGludGVyZmFjZSBGbk1ldGhvZHNIdHRwPFQsIFRBPiBleHRlbmRzIE5nMlJlc3RNZXRob2RzPEh0dHBSZXNwb25zZTxUPiwgVD4ge1xuICAgIGFycmF5OiBOZzJSZXN0TWV0aG9kczxIdHRwUmVzcG9uc2U8VEE+LCBUQT47XG4gIH07XG5cbiAgZXhwb3J0IGludGVyZmFjZSBGbk1ldGhvZHNIdHRwV2l0aE1vY2s8VCwgVEE+IGV4dGVuZHMgTmcyUmVzdE1ldGhvZHM8SHR0cFJlc3BvbnNlPFQ+LCBUPiB7XG4gICAgYXJyYXk6IE5nMlJlc3RNZXRob2RzPEh0dHBSZXNwb25zZTxUQT4sIFRBPjtcbiAgICBtb2NrKG1vY2s6IE1vY2tIdHRwLCBjb2RlOiBIdHRwQ29kZSk6IEZuTWV0aG9kc0h0dHA8VCwgVEE+O1xuICB9O1xuXG5cblxuICBleHBvcnQgaW50ZXJmYWNlIE5lc3RlZFBhcmFtcyB7XG4gICAgW3BhcmFtczogc3RyaW5nXTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBVcmxQYXJhbXMge1xuICAgIFt1cmxNb2RlbE5hbWU6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBSZWdFeHAgfCBPYmplY3Q7XG4gICAgcmVnZXg/OiBSZWdFeHA7XG4gIH1bXTtcblxuICBleHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUJvZHkge1xuICAgIHByb3RlY3RlZCB0b0pTT04oZGF0YSwgaXNKU09OQXJyYXkgPSBmYWxzZSkge1xuICAgICAgbGV0IHIgPSBpc0pTT05BcnJheSA/IFtdIDoge307XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgciA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gciBhcyBhbnk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIEh0dHBCb2R5PFQ+IGV4dGVuZHMgQmFzZUJvZHkge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZXNwb25zZVRleHQ6IHN0cmluZyB8IEJsb2IsIHByaXZhdGUgaXNBcnJheSA9IGZhbHNlLFxuICAgICAgcHJpdmF0ZSBlbnRpdHk6IE1hcHBpbmcuTWFwcGluZyxcbiAgICAgIHByaXZhdGUgY2lyY3VsYXI6IENpcmNbXVxuICAgICkge1xuICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJsb2IoKTogQmxvYiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNwb25zZVRleHQgYXMgQmxvYjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJvb2xlYW5WYWx1ZSgpIHtcbiAgICAgIGlmICghSGVscGVycy5pc0Jsb2IodGhpcy5yZXNwb25zZVRleHQpKSB7XG4gICAgICAgIHJldHVybiBbJ29rJywgJ3RydWUnXS5pbmNsdWRlcygodGhpcy5yZXNwb25zZVRleHQgYXMgc3RyaW5nKS50cmltKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmF3SnNvbigpOiBQYXJ0aWFsPFQ+IHtcbiAgICAgIGlmICghSGVscGVycy5pc0Jsb2IodGhpcy5yZXNwb25zZVRleHQpKSB7XG4gICAgICAgIGxldCByZXMgPSB0aGlzLnRvSlNPTih0aGlzLnJlc3BvbnNlVGV4dCwgdGhpcy5pc0FycmF5KTtcbiAgICAgICAgaWYgKHRoaXMuY2lyY3VsYXIgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmNpcmN1bGFyKSkge1xuICAgICAgICAgIHJlcyA9IEpTT04xMC5wYXJzZShKU09OLnN0cmluZ2lmeShyZXMpLCB0aGlzLmNpcmN1bGFyKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGpzb24oKTogVCB7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNCbG9iKHRoaXMucmVzcG9uc2VUZXh0KSkge1xuICAgICAgICBpZiAodGhpcy5lbnRpdHkgJiYgdHlwZW9mIHRoaXMuZW50aXR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZW50aXR5KCk7IC8vIEBMQVNUXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZW50aXR5ICYmIHR5cGVvZiB0aGlzLmVudGl0eSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04odGhpcy5yZXNwb25zZVRleHQsIHRoaXMuaXNBcnJheSk7XG4gICAgICAgICAgcmV0dXJuIE1hcHBpbmcuZW5jb2RlKGpzb24sIHRoaXMuZW50aXR5LCB0aGlzLmNpcmN1bGFyKSBhcyBhbnk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlcyA9IHRoaXMudG9KU09OKHRoaXMucmVzcG9uc2VUZXh0LCB0aGlzLmlzQXJyYXkpO1xuICAgICAgICBpZiAodGhpcy5jaXJjdWxhciAmJiBBcnJheS5pc0FycmF5KHRoaXMuY2lyY3VsYXIpKSB7XG4gICAgICAgICAgcmVzID0gSlNPTjEwLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlcyksIHRoaXMuY2lyY3VsYXIpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGdldCB0ZXh0KCkge1xuICAgICAgaWYgKCFIZWxwZXJzLmlzQmxvYih0aGlzLnJlc3BvbnNlVGV4dCkpIHtcblxuICAgICAgICByZXR1cm4gKHRoaXMucmVzcG9uc2VUZXh0IGFzIHN0cmluZykucmVwbGFjZSgvXlxcXCIvLCAnJykucmVwbGFjZSgvXFxcIiQvLCAnJylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBleHBvcnQgY2xhc3MgRXJyb3JCb2R5IGV4dGVuZHMgQmFzZUJvZHkge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YSkge1xuICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGpzb24oKTogT2JqZWN0IHtcbiAgICAgIHJldHVybiB0aGlzLnRvSlNPTih0aGlzLmRhdGEpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHRleHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfVxuICB9XG5cblxuICBleHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVJlc3BvbnNlPFQ+IHtcbiAgICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IGNvb2tpZXMgPSBDb29raWUuSW5zdGFuY2U7XG5cbiAgICBwdWJsaWMgZ2V0IGNvb2tpZXMoKSB7XG4gICAgICByZXR1cm4gQmFzZVJlc3BvbnNlLmNvb2tpZXM7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgcHVibGljIHJlc3BvbnNlVGV4dD86IHN0cmluZyB8IEJsb2IsXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaGVhZGVycz86IFJlc3RIZWFkZXJzLFxuICAgICAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0NvZGU/OiBIdHRwQ29kZSB8IG51bWJlcixcbiAgICAgIHB1YmxpYyBpc0FycmF5ID0gZmFsc2VcbiAgICApIHtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgY2xhc3MgSHR0cFJlc3BvbnNlPFQ+IGV4dGVuZHMgQmFzZVJlc3BvbnNlPFQ+IHtcbiAgICBwdWJsaWMgYm9keT86IEh0dHBCb2R5PFQ+O1xuXG5cblxuXG4gICAgcnE6IFJlcXVlc3RDYWNoZTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgIHB1YmxpYyBzb3VyY2VSZXF1ZXN0OiBNb2RlbHMuSGFuZGxlUmVzdWx0U291cmNlUmVxdWVzdE9wdGlvbnMsXG4gICAgICBwdWJsaWMgcmVzcG9uc2VUZXh0Pzogc3RyaW5nIHwgQmxvYixcbiAgICAgIHB1YmxpYyBoZWFkZXJzPzogUmVzdEhlYWRlcnMsXG4gICAgICBwdWJsaWMgc3RhdHVzQ29kZT86IEh0dHBDb2RlIHwgbnVtYmVyLFxuICAgICAgcHVibGljIGVudGl0eT86IE1hcHBpbmcuTWFwcGluZyB8IEZ1bmN0aW9uLFxuICAgICAgcHVibGljIGNpcmN1bGFyPzogQ2lyY1tdLFxuICAgICAgcHVibGljIGpvYmlkPzogbnVtYmVyLFxuICAgICAgcHVibGljIGlzQXJyYXkgPSBmYWxzZSxcbiAgICApIHtcblxuXG5cbiAgICAgIHN1cGVyKHJlc3BvbnNlVGV4dCwgaGVhZGVycywgc3RhdHVzQ29kZSwgaXNBcnJheSk7XG5cbiAgICAgIHRoaXMuaW5pdCgpXG4gICAgfVxuXG4gICAgcHVibGljIGluaXQoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuZW50aXR5ID09PSAnc3RyaW5nJykge1xuXG4gICAgICAgIGxldCBlbnRpdHlKU09OID0gdGhpcy5oZWFkZXJzLmdldEFsbCh0aGlzLmVudGl0eSlcbiAgICAgICAgaWYgKCEhZW50aXR5SlNPTikge1xuICAgICAgICAgIHRoaXMuZW50aXR5ID0gSlNPTi5wYXJzZShlbnRpdHlKU09OLmpvaW4oKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jaXJjdWxhciA9PT0gJ3N0cmluZycpIHtcblxuICAgICAgICBsZXQgY2lyY3VyYWxKU09OID0gdGhpcy5oZWFkZXJzLmdldEFsbCh0aGlzLmNpcmN1bGFyKTtcbiAgICAgICAgaWYgKCEhY2lyY3VyYWxKU09OKSB7XG4gICAgICAgICAgdGhpcy5jaXJjdWxhciA9IEpTT04ucGFyc2UoY2lyY3VyYWxKU09OLmpvaW4oKSk7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgICAgdGhpcy5ib2R5ID0gbmV3IEh0dHBCb2R5KHRoaXMucmVzcG9uc2VUZXh0LCB0aGlzLmlzQXJyYXksIHRoaXMuZW50aXR5LCB0aGlzLmNpcmN1bGFyKSBhcyBhbnk7XG4gICAgfVxuXG4gICAgZ2V0IGNhY2hlKCkge1xuICAgICAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5ycSkpIHtcbiAgICAgICAgdGhpcy5ycSA9IG5ldyBSZXF1ZXN0Q2FjaGUodGhpcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJlcXVlc3RDYWNoZSh0aGlzKTtcbiAgICB9XG5cbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyBIdHRwUmVzcG9uc2VFcnJvciBleHRlbmRzIEJhc2VSZXNwb25zZTxhbnk+IHtcbiAgICBwcml2YXRlIGJvZHk6IEVycm9yQm9keTtcblxuXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICByZXNwb25zZVRleHQ/OiBzdHJpbmcsXG4gICAgICBoZWFkZXJzPzogUmVzdEhlYWRlcnMsXG4gICAgICBzdGF0dXNDb2RlPzogSHR0cENvZGUgfCBudW1iZXIsXG4gICAgICBwdWJsaWMgam9iaWQ/OiBudW1iZXIsXG4gICAgKSB7XG4gICAgICBzdXBlcihyZXNwb25zZVRleHQsIGhlYWRlcnMsIHN0YXR1c0NvZGUpO1xuICAgICAgdGhpcy5ib2R5ID0gbmV3IEVycm9yQm9keShyZXNwb25zZVRleHQpXG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNb2NrUmVzcG9uc2Uge1xuICAgIGRhdGE/OiBhbnk7XG4gICAgY29kZT86IEh0dHBDb2RlO1xuICAgIGVycm9yPzogc3RyaW5nO1xuICAgIGhlYWRlcnM/OiBSZXN0SGVhZGVycztcbiAgICBqb2JpZD86IG51bWJlcjtcbiAgICBpc0FycmF5OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUmVzcG9uc2VUeXBlQXhpb3MgPSAnYmxvYicgfCAndGV4dCdcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT1uZzItcmVzdCBsaWIvbW9kZWxzLnRzIl19
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWJ1bmRsZS9uZzItcmVzdC9wcm9qZWN0cy9uZzItcmVzdC9zcmMvbGliL21vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUFFLE1BQU0sSUFBSSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHM0MsTUFBTSxLQUFXLE1BQU0sQ0E2UnRCO0FBN1JELFdBQWlCLE1BQU07SUFLUCxtQkFBWSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUM7SUFDMUMsa0JBQVcsR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO0lBQ3hDLGtCQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQTtJQTRFcEQsQ0FBQztJQUtELENBQUM7SUFXRCxFQUFFLENBQUM7SUFFSixNQUFzQixRQUFRO1FBQ2xCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxHQUFHLEtBQUs7WUFDeEMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDNUIsSUFBSTtvQkFDRixDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdEI7Z0JBQUMs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O1FBRUQsSUFBSSxLQUFLO1lBQ1AsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNsQztZQUNELE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztLQUVGO0lBbkRZLG1CQUFZLGVBbUR4QixDQUFBO0lBRUQsTUFBYSxpQkFBa0IsU0FBUSxZQUFpQjtRQUt0RCxZQUNTLE9BQWUsRUFDdEIsWUFBcUIsRUFDckIsT0FBcUIsRUFDckIsVUFBOEIsRUFDdkIsS0FBYztZQUVyQixLQUFLLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQU5sQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1lBSWYsVUFBSyxHQUFMLEtBQUssQ0FBUztZQUdyQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3pDLENBQUM7S0FDRjtJQWZZLHdCQUFpQixvQkFlN0IsQ0FBQTtJQVlILEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztBQUVMLENBQUMsRUE3UmdCLE1BQU0sS0FBTixNQUFNLFFBNlJ0QjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsbURBQW1EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9nLCBMZXZlbCB9IGZyb20gJ25nMi1sb2dnZXIvYnJvd3Nlcic7XG5pbXBvcnQgeyBSZXN0SGVhZGVycyB9IGZyb20gJy4vcmVzdC1oZWFkZXJzJztcbmltcG9ydCB7IFJlc3QgfSBmcm9tICcuL3Jlc3QuY2xhc3MnO1xuaW1wb3J0IHsgQ29va2llIH0gZnJvbSAnLi9jb29raWUnO1xuaW1wb3J0IHsgTWFwcGluZyB9IGZyb20gJy4vbWFwcGluZyc7XG5pbXBvcnQgeyBBeGlvc1Jlc3BvbnNlIH0gZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgTW9kZWxzIGFzIEhlbHBlcnNNb2RlbHMgfSBmcm9tICd0eXBlc2NyaXB0LWNsYXNzLWhlbHBlcnMvYnJvd3NlcidcbmltcG9ydCB7IEpTT04xMCwgQ2lyYyB9IGZyb20gJ2pzb24xMC9icm93c2VyJztcbmltcG9ydCB7IFJlcXVlc3RDYWNoZSB9IGZyb20gJy4vcmVxdWVzdC1jYWNoZSc7XG5pbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBDb25maWdNb2RlbHMgfSBmcm9tICd0bnAtY29uZmlnL2Jyb3dzZXInO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuXG5cbmV4cG9ydCBuYW1lc3BhY2UgTW9kZWxzIHtcblxuICBleHBvcnQgaW1wb3J0IEh0dHBNZXRob2QgPSBDb25maWdNb2RlbHMuSHR0cE1ldGhvZDtcbiAgZXhwb3J0IGltcG9ydCBQYXJhbVR5cGUgPSBDb25maWdNb2RlbHMuUGFyYW1UeXBlO1xuXG4gIGV4cG9ydCBpbXBvcnQgTWV0aG9kQ29uZmlnID0gSGVscGVyc01vZGVscy5NZXRob2RDb25maWc7XG4gIGV4cG9ydCBpbXBvcnQgQ2xhc3NDb25maWcgPSBIZWxwZXJzTW9kZWxzLkNsYXNzQ29uZmlnO1xuICBleHBvcnQgaW1wb3J0IFBhcmFtQ29uZmlnID0gSGVscGVyc01vZGVscy5QYXJhbUNvbmZpZ1xuXG5cbiAgZXhwb3J0IGludGVyZmFjZSBIYW5kbGVSZXN1bHRPcHRpb25zIHtcbiAgICByZXM6IE1vZGVscy5Nb2NrUmVzcG9uc2U7XG4gICAgbWV0aG9kOiBNb2RlbHMuSHR0cE1ldGhvZDtcbiAgICBqb2JpZD86IG51bWJlcjtcbiAgICBpc0FycmF5PzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlUmVzdWx0U291cmNlUmVxdWVzdE9wdGlvbnMge1xuICAgIHVybDogc3RyaW5nLFxuICAgIG1ldGhvZDogTW9kZWxzLkh0dHBNZXRob2QsXG5cbiAgICBib2R5OiBhbnksXG4gICAgaXNBcnJheTogYm9vbGVhbixcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEJhY2tlbmRFcnJvciA9IHtcbiAgICBtc2c/OiBzdHJpbmc7XG4gICAgc3RhY2s/OiBzdHJpbmdbXTtcbiAgICBkYXRhOiBhbnk7XG4gIH1cblxuICBleHBvcnQgdHlwZSBNZXRhUmVxdWVzdCA9IHtcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgZW5kcG9pbnQ6IHN0cmluZztcbiAgICBlbnRpdHk6IE1hcHBpbmcuTWFwcGluZztcbiAgICBjaXJjdWxhcjogQ2lyY1tdO1xuICB9XG4gIGV4cG9ydCB0eXBlIEh0dHBDb2RlID0gMjAwIHwgNDAwIHwgNDAxIHwgNDA0IHwgNTAwO1xuXG4gIGV4cG9ydCB0eXBlIFByb21pc2VPYnNlcnZhYmxlTWl4PFQ+ID0gUHJvbWlzZTxUPiAmIHtcbiAgICBjYWNoZT86IFJlcXVlc3RDYWNoZSxcbiAgICBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFQ+O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgTWV0aG9kV2l0aG91dEJvZHk8RSwgVCwgUiA9IFByb21pc2VPYnNlcnZhYmxlTWl4PEU+PiA9IChwYXJhbXM/OiBVcmxQYXJhbXNbXSwgZG9Ob3RTZXJpYWxpemVQYXJhbXM/OiBib29sZWFuKSA9PiBSXG4gIGV4cG9ydCB0eXBlIE1ldGhvZFdpdGhCb2R5PEUsIFQsIFIgPSBQcm9taXNlT2JzZXJ2YWJsZU1peDxFPj4gPSAoaXRlbT86IFQsIHBhcmFtcz86IFVybFBhcmFtc1tdLCBkb05vdFNlcmlhbGl6ZVBhcmFtcz86IGJvb2xlYW4pID0+IFJcbiAgZXhwb3J0IHR5cGUgUmVwbGF5RGF0YSA9IHtcbiAgICBzdWJqZWN0OiBTdWJqZWN0PGFueT4sXG4gICAgZGF0YTogeyB1cmw6IHN0cmluZywgYm9keTogc3RyaW5nLCBoZWFkZXJzOiBSZXN0SGVhZGVycywgaXNBcnJheTogYm9vbGVhbjsgfSxcbiAgICAvKipcbiAgICAgKiBqb2JpZFxuICAgICAqL1xuICAgIGlkOiBudW1iZXI7XG4gIH07XG4gIGV4cG9ydCB0eXBlIFJlcVBhcmFtcyA9IHsgdXJsOiBzdHJpbmcsIG1ldGhvZDogQ29uZmlnTW9kZWxzLkh0dHBNZXRob2QsIGhlYWRlcnM/OiBSZXN0SGVhZGVycywgYm9keT86IGFueSwgam9iaWQ6IG51bWJlciwgaXNBcnJheTogYm9vbGVhbiB9O1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VNb2RlbDxBLCBUQT4ge1xuICAgIG1vZGVsOiAocGF0aE1vZGVscz86IE9iamVjdCwgcmVzcG9uc2VPYmplY3RUeXBlPzogRnVuY3Rpb24pID0+IFJlc3Q8QSwgVEE+LFxuICAgIHJlcGxheTogKG1ldGhvZDogQ29uZmlnTW9kZWxzLkh0dHBNZXRob2QpID0+IHZvaWQ7XG4gICAgaGVhZGVyczogUmVzdEhlYWRlcnM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE5nMlJlc3RNZXRob2RzPEUsIFQ+IHtcbiAgICBnZXQ6IE1ldGhvZFdpdGhvdXRCb2R5PEUsIFQ+O1xuICAgIHBvc3Q6IE1ldGhvZFdpdGhCb2R5PEUsIFQ+O1xuICAgIHB1dDogTWV0aG9kV2l0aEJvZHk8RSwgVD47XG4gICAgcGF0Y2g6IE1ldGhvZFdpdGhCb2R5PEUsIFQ+O1xuICAgIGhlYWQ6IE1ldGhvZFdpdGhvdXRCb2R5PEUsIFQ+O1xuICAgIGRlbGV0ZTogTWV0aG9kV2l0aG91dEJvZHk8RSwgVD47XG4gICAganNvbnA6IE1ldGhvZFdpdGhvdXRCb2R5PEUsIFQ+O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgTW9ja0NvbnRyb2xsZXIgPSAoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgbWV0aG9kOiBDb25maWdNb2RlbHMuSHR0cE1ldGhvZCxcbiAgICBoZWFkZXJzPzogUmVzdEhlYWRlcnMsXG4gICAgYm9keT86IGFueVxuICApID0+IE1vY2tSZXNwb25zZTtcblxuICBleHBvcnQgdHlwZSBNb2NrSHR0cCA9IChNb2NrUmVzcG9uc2UgfCBNb2NrQ29udHJvbGxlcik7XG5cbiAgZXhwb3J0IGludGVyZmFjZSBGbk1ldGhvZHNIdHRwPFQsIFRBPiBleHRlbmRzIE5nMlJlc3RNZXRob2RzPEh0dHBSZXNwb25zZTxUPiwgVD4ge1xuICAgIGFycmF5OiBOZzJSZXN0TWV0aG9kczxIdHRwUmVzcG9uc2U8VEE+LCBUQT47XG4gIH07XG5cbiAgZXhwb3J0IGludGVyZmFjZSBGbk1ldGhvZHNIdHRwV2l0aE1vY2s8VCwgVEE+IGV4dGVuZHMgTmcyUmVzdE1ldGhvZHM8SHR0cFJlc3BvbnNlPFQ+LCBUPiB7XG4gICAgYXJyYXk6IE5nMlJlc3RNZXRob2RzPEh0dHBSZXNwb25zZTxUQT4sIFRBPjtcbiAgICBtb2NrKG1vY2s6IE1vY2tIdHRwLCBjb2RlOiBIdHRwQ29kZSk6IEZuTWV0aG9kc0h0dHA8VCwgVEE+O1xuICB9O1xuXG5cblxuICBleHBvcnQgaW50ZXJmYWNlIE5lc3RlZFBhcmFtcyB7XG4gICAgW3BhcmFtczogc3RyaW5nXTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBVcmxQYXJhbXMge1xuICAgIFt1cmxNb2RlbE5hbWU6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBSZWdFeHAgfCBPYmplY3Q7XG4gICAgcmVnZXg/OiBSZWdFeHA7XG4gIH1bXTtcblxuICBleHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUJvZHkge1xuICAgIHByb3RlY3RlZCB0b0pTT04oZGF0YSwgaXNKU09OQXJyYXkgPSBmYWxzZSkge1xuICAgICAgbGV0IHIgPSBpc0pTT05BcnJheSA/IFtdIDoge307XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgciA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gciBhcyBhbnk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIEh0dHBCb2R5PFQ+IGV4dGVuZHMgQmFzZUJvZHkge1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZXNwb25zZVRleHQ6IHN0cmluZyB8IEJsb2IsIHByaXZhdGUgaXNBcnJheSA9IGZhbHNlLFxuICAgICAgcHJpdmF0ZSBlbnRpdHk6IE1hcHBpbmcuTWFwcGluZyxcbiAgICAgIHByaXZhdGUgY2lyY3VsYXI6IENpcmNbXVxuICAgICkge1xuICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJsb2IoKTogQmxvYiB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNwb25zZVRleHQgYXMgQmxvYjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJvb2xlYW5WYWx1ZSgpIHtcbiAgICAgIGlmICghSGVscGVycy5pc0Jsb2IodGhpcy5yZXNwb25zZVRleHQpKSB7XG4gICAgICAgIHJldHVybiBbJ29rJywgJ3RydWUnXS5pbmNsdWRlcygodGhpcy5yZXNwb25zZVRleHQgYXMgc3RyaW5nKS50cmltKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmF3SnNvbigpOiBQYXJ0aWFsPFQ+IHtcbiAgICAgIGlmICghSGVscGVycy5pc0Jsb2IodGhpcy5yZXNwb25zZVRleHQpKSB7XG4gICAgICAgIGxldCByZXMgPSB0aGlzLnRvSlNPTih0aGlzLnJlc3BvbnNlVGV4dCwgdGhpcy5pc0FycmF5KTtcbiAgICAgICAgaWYgKHRoaXMuY2lyY3VsYXIgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmNpcmN1bGFyKSkge1xuICAgICAgICAgIHJlcyA9IEpTT04xMC5wYXJzZShKU09OLnN0cmluZ2lmeShyZXMpLCB0aGlzLmNpcmN1bGFyKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGpzb24oKTogVCB7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNCbG9iKHRoaXMucmVzcG9uc2VUZXh0KSkge1xuICAgICAgICBpZiAodGhpcy5lbnRpdHkgJiYgdHlwZW9mIHRoaXMuZW50aXR5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZW50aXR5KCk7IC8vIEBMQVNUXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZW50aXR5ICYmIHR5cGVvZiB0aGlzLmVudGl0eSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04odGhpcy5yZXNwb25zZVRleHQsIHRoaXMuaXNBcnJheSk7XG4gICAgICAgICAgcmV0dXJuIE1hcHBpbmcuZW5jb2RlKGpzb24sIHRoaXMuZW50aXR5LCB0aGlzLmNpcmN1bGFyKSBhcyBhbnk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlcyA9IHRoaXMudG9KU09OKHRoaXMucmVzcG9uc2VUZXh0LCB0aGlzLmlzQXJyYXkpO1xuICAgICAgICBpZiAodGhpcy5jaXJjdWxhciAmJiBBcnJheS5pc0FycmF5KHRoaXMuY2lyY3VsYXIpKSB7XG4gICAgICAgICAgcmVzID0gSlNPTjEwLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlcyksIHRoaXMuY2lyY3VsYXIpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGdldCB0ZXh0KCkge1xuICAgICAgaWYgKCFIZWxwZXJzLmlzQmxvYih0aGlzLnJlc3BvbnNlVGV4dCkpIHtcblxuICAgICAgICByZXR1cm4gKHRoaXMucmVzcG9uc2VUZXh0IGFzIHN0cmluZykucmVwbGFjZSgvXlxcXCIvLCAnJykucmVwbGFjZSgvXFxcIiQvLCAnJylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBleHBvcnQgY2xhc3MgRXJyb3JCb2R5IGV4dGVuZHMgQmFzZUJvZHkge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YSkge1xuICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGpzb24oKTogT2JqZWN0IHtcbiAgICAgIHJldHVybiB0aGlzLnRvSlNPTih0aGlzLmRhdGEpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IHRleHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfVxuICB9XG5cblxuICBleHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVJlc3BvbnNlPFQ+IHtcbiAgICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IGNvb2tpZXMgPSBDb29raWUuSW5zdGFuY2U7XG5cbiAgICBwdWJsaWMgZ2V0IGNvb2tpZXMoKSB7XG4gICAgICByZXR1cm4gQmFzZVJlc3BvbnNlLmNvb2tpZXM7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgcHVibGljIHJlc3BvbnNlVGV4dD86IHN0cmluZyB8IEJsb2IsXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaGVhZGVycz86IFJlc3RIZWFkZXJzLFxuICAgICAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0NvZGU/OiBIdHRwQ29kZSB8IG51bWJlcixcbiAgICAgIHB1YmxpYyBpc0FycmF5ID0gZmFsc2VcbiAgICApIHtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgY2xhc3MgSHR0cFJlc3BvbnNlPFQ+IGV4dGVuZHMgQmFzZVJlc3BvbnNlPFQ+IHtcbiAgICBwdWJsaWMgYm9keT86IEh0dHBCb2R5PFQ+O1xuXG5cblxuXG4gICAgcnE6IFJlcXVlc3RDYWNoZTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgIHB1YmxpYyBzb3VyY2VSZXF1ZXN0OiBNb2RlbHMuSGFuZGxlUmVzdWx0U291cmNlUmVxdWVzdE9wdGlvbnMsXG4gICAgICBwdWJsaWMgcmVzcG9uc2VUZXh0Pzogc3RyaW5nIHwgQmxvYixcbiAgICAgIHB1YmxpYyBoZWFkZXJzPzogUmVzdEhlYWRlcnMsXG4gICAgICBwdWJsaWMgc3RhdHVzQ29kZT86IEh0dHBDb2RlIHwgbnVtYmVyLFxuICAgICAgcHVibGljIGVudGl0eT86IE1hcHBpbmcuTWFwcGluZyB8IEZ1bmN0aW9uLFxuICAgICAgcHVibGljIGNpcmN1bGFyPzogQ2lyY1tdLFxuICAgICAgcHVibGljIGpvYmlkPzogbnVtYmVyLFxuICAgICAgcHVibGljIGlzQXJyYXkgPSBmYWxzZSxcbiAgICApIHtcblxuXG5cbiAgICAgIHN1cGVyKHJlc3BvbnNlVGV4dCwgaGVhZGVycywgc3RhdHVzQ29kZSwgaXNBcnJheSk7XG5cbiAgICAgIHRoaXMuaW5pdCgpXG4gICAgfVxuXG4gICAgcHVibGljIGluaXQoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuZW50aXR5ID09PSAnc3RyaW5nJykge1xuXG4gICAgICAgIGxldCBlbnRpdHlKU09OID0gdGhpcy5oZWFkZXJzLmdldEFsbCh0aGlzLmVudGl0eSlcbiAgICAgICAgaWYgKCEhZW50aXR5SlNPTikge1xuICAgICAgICAgIHRoaXMuZW50aXR5ID0gSlNPTi5wYXJzZShlbnRpdHlKU09OLmpvaW4oKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jaXJjdWxhciA9PT0gJ3N0cmluZycpIHtcblxuICAgICAgICBsZXQgY2lyY3VyYWxKU09OID0gdGhpcy5oZWFkZXJzLmdldEFsbCh0aGlzLmNpcmN1bGFyKTtcbiAgICAgICAgaWYgKCEhY2lyY3VyYWxKU09OKSB7XG4gICAgICAgICAgdGhpcy5jaXJjdWxhciA9IEpTT04ucGFyc2UoY2lyY3VyYWxKU09OLmpvaW4oKSk7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgICAgdGhpcy5ib2R5ID0gbmV3IEh0dHBCb2R5KHRoaXMucmVzcG9uc2VUZXh0LCB0aGlzLmlzQXJyYXksIHRoaXMuZW50aXR5LCB0aGlzLmNpcmN1bGFyKSBhcyBhbnk7XG4gICAgfVxuXG4gICAgZ2V0IGNhY2hlKCkge1xuICAgICAgaWYgKF8uaXNVbmRlZmluZWQodGhpcy5ycSkpIHtcbiAgICAgICAgdGhpcy5ycSA9IG5ldyBSZXF1ZXN0Q2FjaGUodGhpcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJlcXVlc3RDYWNoZSh0aGlzKTtcbiAgICB9XG5cbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyBIdHRwUmVzcG9uc2VFcnJvciBleHRlbmRzIEJhc2VSZXNwb25zZTxhbnk+IHtcbiAgICBwcml2YXRlIGJvZHk6IEVycm9yQm9keTtcblxuXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICByZXNwb25zZVRleHQ/OiBzdHJpbmcsXG4gICAgICBoZWFkZXJzPzogUmVzdEhlYWRlcnMsXG4gICAgICBzdGF0dXNDb2RlPzogSHR0cENvZGUgfCBudW1iZXIsXG4gICAgICBwdWJsaWMgam9iaWQ/OiBudW1iZXIsXG4gICAgKSB7XG4gICAgICBzdXBlcihyZXNwb25zZVRleHQsIGhlYWRlcnMsIHN0YXR1c0NvZGUpO1xuICAgICAgdGhpcy5ib2R5ID0gbmV3IEVycm9yQm9keShyZXNwb25zZVRleHQpXG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNb2NrUmVzcG9uc2Uge1xuICAgIGRhdGE/OiBhbnk7XG4gICAgY29kZT86IEh0dHBDb2RlO1xuICAgIGVycm9yPzogc3RyaW5nO1xuICAgIGhlYWRlcnM/OiBSZXN0SGVhZGVycztcbiAgICBqb2JpZD86IG51bWJlcjtcbiAgICBpc0FycmF5OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUmVzcG9uc2VUeXBlQXhpb3MgPSAnYmxvYicgfCAndGV4dCdcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT1uZzItcmVzdCBsaWIvbW9kZWxzLnRzIl19