http-request-manager 4.1.7 → 15.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +160 -66
- package/esm2022/lib/http-request-manager.module.mjs +14 -14
- package/esm2022/lib/http-request-services-demo/http-request-services-demo.component.mjs +5 -5
- package/esm2022/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.mjs +5 -5
- package/esm2022/lib/interceptors/request-error.interceptor.mjs +2 -2
- package/esm2022/lib/services/request-manager-services/http-manager.service.mjs +2 -2
- package/esm2022/lib/services/request-manager-services/rxjs-operators/request-streaming.mjs +1 -1
- package/fesm2022/http-request-manager.mjs +376 -595
- package/fesm2022/http-request-manager.mjs.map +1 -1
- package/http-request-manager-15.0.4.tgz +0 -0
- package/lib/http-request-manager.module.d.ts +10 -10
- package/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.d.ts +1 -1
- package/package.json +3 -19
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.mjs +0 -80
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.mjs +0 -42
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.mjs +0 -85
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.mjs +0 -11
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.mjs +0 -29
- package/http-request-manager-4.1.7.tgz +0 -0
- package/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.d.ts +0 -26
- package/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.d.ts +0 -13
- package/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.d.ts +0 -26
- package/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.d.ts +0 -12
- package/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.d.ts +0 -16
package/README.md
CHANGED
|
@@ -1,98 +1,192 @@
|
|
|
1
|
-
# Request Manager Service
|
|
1
|
+
# Request Manager Service Documentation
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## Summary of the Lib
|
|
4
|
+
The HTTPManagerService is designed to handle HTTP requests and return Observables, providing an efficient and streamlined way to interact with external APIs or services in your Angular application. This service can be imported and used directly or extended to suit your specific needs.
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
## Features of the Lib
|
|
7
|
+
### Error Handling
|
|
8
|
+
The example defines an errorRetry$ observable that captures errors using the catchError operator and enables retry logic. This observable can be utilized in your component templates to handle and display errors, making error management more flexible.
|
|
6
9
|
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
### ApiRequest Configuration
|
|
11
|
+
The ApiRequest object encapsulates all the necessary details for making an HTTP request:
|
|
9
12
|
|
|
10
|
-
|
|
13
|
+
```ts
|
|
14
|
+
apiRequest = ApiRequest.adapt({
|
|
15
|
+
server: 'nodebff/reporting-common-apis/v1',
|
|
16
|
+
path: ['dimensions','locations'],
|
|
17
|
+
adapter: DistrictData.adapt
|
|
18
|
+
});
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### ApiRequest Options
|
|
22
|
+
The following are the available options when configuring an ApiRequest object:
|
|
11
23
|
|
|
12
24
|
```ts
|
|
13
|
-
|
|
14
|
-
server:
|
|
15
|
-
path: [
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
25
|
+
apiRequest = ApiRequest.adapt({
|
|
26
|
+
server: string,
|
|
27
|
+
path: any[],
|
|
28
|
+
headers: any,
|
|
29
|
+
adapter?: any,
|
|
30
|
+
mapper?: any,
|
|
31
|
+
polling?: number, // in seconds (undefined | 0 = none)
|
|
32
|
+
retry: RetryOptions,
|
|
33
|
+
stream?: boolean
|
|
34
|
+
displayError: boolean
|
|
35
|
+
});
|
|
21
36
|
```
|
|
22
|
-
|
|
23
|
-
|
|
37
|
+
|
|
38
|
+
- server: The base URL or service endpoint for the API request.
|
|
39
|
+
- path: Additional paths to append to the base URL for constructing the full API endpoint.
|
|
40
|
+
- headers: Custom headers to include in the request, provided as an object.
|
|
41
|
+
- adapter (incoming): A model adapter used to transform incoming data (e.g., DistrictData.adapt).
|
|
42
|
+
- mapper (outgoing): A model adapter used to map outgoing data before sending it to the server (e.g., DistrictData.mapper).
|
|
43
|
+
- polling: Enables periodic polling, where the request will be made every specified number of seconds.
|
|
44
|
+
- retry: Retry logic using RetryOptions, which includes:
|
|
45
|
+
- times: Number of retry attempts.
|
|
46
|
+
- delay: Delay in milliseconds between each retry.
|
|
47
|
+
- stream: A flag to indicate whether the request expects a stream of data from the server.
|
|
48
|
+
- displayError: A flag to indicate whether to present the error from the request in a snackBar notification
|
|
49
|
+
|
|
50
|
+
### Additional Observables for Request Status
|
|
51
|
+
- countdown$: If polling is active, this property gives feedback on when the next request will take place. It starts from the specified time in seconds and counts down to 0, triggering the next request and restarting the countdown.
|
|
52
|
+
- error$: This returns any HTTP error that occurs during the request.
|
|
53
|
+
- isPending$: This boolean value indicates whether the request is pending (true) or has been completed (false).
|
|
54
|
+
- data$: You can access the data fetched in the request using the data$ observable. This provides the response from the server, which can be used for further processing or displaying in the UI.
|
|
55
|
+
|
|
56
|
+
## Usage
|
|
57
|
+
To utilize the HTTPManagerService, you must import it into your service or component. Alternatively, you can extend the service by defining the required generic type for custom implementations.
|
|
58
|
+
|
|
59
|
+
### Import Example #1
|
|
24
60
|
|
|
25
61
|
```ts
|
|
26
|
-
|
|
62
|
+
import { HTTPManagerService } from 'path-to-service';
|
|
63
|
+
|
|
64
|
+
// Injecting HTTPManagerService in a Service
|
|
65
|
+
|
|
66
|
+
export class DistrictService {
|
|
67
|
+
|
|
68
|
+
httpManagerService = inject(HTTPManagerService);
|
|
69
|
+
|
|
70
|
+
private errorRetry = new BehaviorSubject<{ func: Function, message: string } | null>(null);
|
|
71
|
+
errorRetry$ = this.errorRetry.asObservable();
|
|
72
|
+
|
|
73
|
+
apiRequest = ApiRequest.adapt({
|
|
74
|
+
server: 'nodebff/reporting-common-apis/v1',
|
|
75
|
+
path: ['dimensions','locations'],
|
|
76
|
+
adapter: DistrictData.adapt
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
params = {
|
|
80
|
+
type: 'DISTRICT',
|
|
81
|
+
excludeEcom: true
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
fetchDistrictData(params = this.params) {
|
|
85
|
+
|
|
86
|
+
return this.httpManagerService.getRequest(this.apiRequest, [params])
|
|
87
|
+
.pipe(
|
|
88
|
+
catchError((error: HttpErrorResponse) => {
|
|
89
|
+
|
|
90
|
+
// custom retry logic
|
|
91
|
+
const func = this.fetchDistrictData.bind(this);
|
|
92
|
+
const message = error.message;
|
|
93
|
+
this.errorRetry.next({ func, message });
|
|
94
|
+
|
|
95
|
+
return EMPTY;
|
|
96
|
+
})
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
}
|
|
27
102
|
```
|
|
28
103
|
|
|
29
|
-
|
|
104
|
+
### Import Example #2
|
|
30
105
|
|
|
31
|
-
|
|
106
|
+
In this new example:
|
|
32
107
|
|
|
33
|
-
|
|
108
|
+
- Extending HTTPManagerService:
|
|
109
|
+
The DistrictService extends the HTTPManagerService with a generic type of DistrictData, which allows for reusability and scalability. By extending, the fetchDistrictData method uses the getRequest function provided by the parent class to make the request.
|
|
34
110
|
|
|
35
|
-
|
|
111
|
+
- Function to Make the Request:
|
|
112
|
+
The fetchDistrictData() method calls the getRequest function and immediately subscribes to the result. Since it subscribes, the request is made and the result is handled within the data$ observable.
|
|
113
|
+
If an error occurs during the request, the error is caught using catchError. The errorRetry$ observable is updated with the error details, which can be handled in the component or template.
|
|
36
114
|
|
|
37
|
-
|
|
115
|
+
```ts
|
|
116
|
+
fetchDistrictData() {
|
|
117
|
+
|
|
118
|
+
this.getRequest(this.apiRequest, [this.params])
|
|
119
|
+
.pipe(
|
|
120
|
+
catchError((error: HttpErrorResponse) => {
|
|
121
|
+
|
|
122
|
+
const func = this.fetchDistrictData.bind(this)
|
|
123
|
+
const message = error.message
|
|
124
|
+
this.errorRetry.next({ func, message })
|
|
125
|
+
|
|
126
|
+
return EMPTY
|
|
127
|
+
})
|
|
128
|
+
).subscribe()
|
|
129
|
+
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Data Observable
|
|
134
|
+
The result of the request is stored in the data$ observable, which is inherited from the parent class (HTTPManagerService). This observable is connected to a component for further usage.
|
|
38
135
|
|
|
39
|
-
|
|
136
|
+
### Component Example
|
|
137
|
+
In the component, the data fetched by fetchDistrictData() can be accessed by assigning the result to data$, like this:
|
|
40
138
|
|
|
41
|
-
|
|
139
|
+
```ts
|
|
140
|
+
this.data$ = this.awardsFilterStoresService.fetchData(this.payload)
|
|
141
|
+
```
|
|
42
142
|
|
|
43
|
-
|
|
44
|
-
|
|
143
|
+
This data$ observable is then used in the template to display the data asynchronously:
|
|
144
|
+
|
|
145
|
+
```html
|
|
146
|
+
<div *ngIf="data$ | async as data">
|
|
147
|
+
<!-- Use data here -->
|
|
148
|
+
</div>
|
|
149
|
+
```
|
|
45
150
|
|
|
46
|
-
|
|
47
|
-
- proxy-debugger for debugging api requests
|
|
48
|
-
- request-error for catching all requests the error with 400-500 status and presents a toast-message (snackbar) with the error
|
|
49
|
-
- request-header provides a few properties that are added to all requests
|
|
151
|
+
By extending the HTTPManagerService, you benefit from reusable request logic and observables that provide seamless integration with Angular components and templates.
|
|
50
152
|
|
|
51
|
-
- 'Content-Type': 'application/json', // BE header for json type requests
|
|
52
|
-
- 'Accept-Language': this.language || 'en-CA', //language localization
|
|
53
|
-
- 'Current-Date': this.currentDate //todays date
|
|
54
|
-
Support: This allows for proxies to be used when requests are made that are defined.
|
|
55
153
|
|
|
56
|
-
|
|
154
|
+
# Interceptors
|
|
57
155
|
|
|
58
|
-
|
|
59
|
-
- add the selector `<app-http-request-services-demo></app-http-request-services-demo>` to a template
|
|
60
|
-
- explore the many options - Top right menus toggles between the above services
|
|
156
|
+
There are 3 interceptors that you can import into your project for api requests.
|
|
61
157
|
|
|
62
|
-
|
|
158
|
+
You may add these interceptors in your `AppModule` file as providers and import them into as providers.
|
|
159
|
+
|
|
160
|
+
```ts
|
|
161
|
+
providers: [
|
|
162
|
+
{ provide: HTTP_INTERCEPTORS, useClass: WithCredentialsInterceptor, multi: true },
|
|
163
|
+
{ provide: HTTP_INTERCEPTORS, useClass: RequestHeadersInterceptor, multi: true },
|
|
164
|
+
{ provide: HTTP_INTERCEPTORS, useClass: RequestErrorInterceptor, multi: true }
|
|
165
|
+
],
|
|
166
|
+
```
|
|
63
167
|
|
|
64
|
-
|
|
65
|
-
- Unification of features for both `HttpServiceManager` and `HttpRequestStateManager`
|
|
66
|
-
- DatabaseManagerService automatically extends `HttpRequestStateManager` service
|
|
168
|
+
Or you can use all intercepts above by importing the `HttpRequestManagerModule` in your `AppModule`
|
|
67
169
|
|
|
68
|
-
|
|
170
|
+
- **RequestErrorInterceptor**
|
|
69
171
|
|
|
70
|
-
|
|
71
|
-
- Rest and Query Param support
|
|
72
|
-
- State Management (ComponentStore),
|
|
73
|
-
- Recursive Pagination request caching
|
|
74
|
-
- Local Database to manager data request states and requests (beta)
|
|
75
|
-
- Streaming requests (AI)
|
|
76
|
-
- Polling, Next Poll Countdown request %
|
|
77
|
-
- Error Catching and Toast-Display on error
|
|
78
|
-
- Request Retry
|
|
79
|
-
- Pending Request States
|
|
80
|
-
- Downloading File and Streaming Support
|
|
172
|
+
This interceptor handles errors of type 400 and 500. This interceptor is applicable when you need to display UI for the user to indicate a server or request error has occurred. The Status and Error Text is displayed in a `toast-message` modal.
|
|
81
173
|
|
|
82
|
-
|
|
174
|
+
- **WithCredentialsInterceptor**
|
|
83
175
|
|
|
84
|
-
|
|
85
|
-
- Observable to maintain changes in storage
|
|
176
|
+
Adds to your request header
|
|
86
177
|
|
|
87
|
-
|
|
178
|
+
```json
|
|
179
|
+
{ credentials: true }
|
|
180
|
+
```
|
|
88
181
|
|
|
89
|
-
-
|
|
90
|
-
- ExpiredIn
|
|
91
|
-
- Updating, Deleting, Creating
|
|
92
|
-
- Supports data objects (no JSON.stringify or JSON.parse)
|
|
182
|
+
- **RequestHeadersInterceptor**
|
|
93
183
|
|
|
94
|
-
|
|
184
|
+
Adds to your request - current local `language` (i18n) selection and `current date` to every request
|
|
95
185
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
186
|
+
```json
|
|
187
|
+
{
|
|
188
|
+
'Content-Type': 'application/json',
|
|
189
|
+
'Accept-Language': this.language || 'en-CA',
|
|
190
|
+
'Current-Date': this.currentDate
|
|
191
|
+
}
|
|
192
|
+
```
|
|
@@ -2,7 +2,12 @@ import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
|
2
2
|
import { NgModule } from '@angular/core';
|
|
3
3
|
import { WithCredentialsInterceptor, RequestHeadersInterceptor } from './interceptors';
|
|
4
4
|
import { TranslateModule } from '@ngx-translate/core';
|
|
5
|
+
import { RequestManagerDemoComponent } from './http-request-services-demo/request-manager-demo/request-manager-demo.component';
|
|
6
|
+
import { RequestManagerStateDemoComponent } from './http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component';
|
|
7
|
+
import { LocalStorageDemoComponent } from './http-request-services-demo/local-storage-demo/local-storage-demo.component';
|
|
8
|
+
// import { DatabaseDataDemoComponent } from './global-data-demo/database-data-demo/database-data-demo.component';
|
|
5
9
|
import { CommonModule } from '@angular/common';
|
|
10
|
+
import { ToastMessageDisplayModule } from 'toast-message-display';
|
|
6
11
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
7
12
|
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
8
13
|
import { MatButtonModule } from '@angular/material/button';
|
|
@@ -20,18 +25,13 @@ import { MatToolbarModule } from '@angular/material/toolbar';
|
|
|
20
25
|
import { MatTableModule } from '@angular/material/table';
|
|
21
26
|
import { MatButtonToggleModule } from '@angular/material/button-toggle';
|
|
22
27
|
import { ProxyDebuggerInterceptor } from './interceptors/proxy-debugger.interceptor';
|
|
28
|
+
import { HttpRequestServicesDemoComponent } from './http-request-services-demo/http-request-services-demo.component';
|
|
23
29
|
import { ConfigOptions } from './models';
|
|
24
30
|
import { CONFIG_SETTINGS_TOKEN } from './models/config-token.model';
|
|
25
31
|
import { HTTPManagerService, LocalStorageManagerService } from './services';
|
|
26
|
-
import {
|
|
27
|
-
import { FileDownloaderModule } from './http-request-services-demo/request-manager-demo/file-downloader/file-download.module';
|
|
28
|
-
import { HttpRequestServicesDemoComponent } from './http-request-services-demo/http-request-services-demo.component';
|
|
29
|
-
import { RequestManagerStateDemoComponent } from './http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component';
|
|
30
|
-
import { RequestManagerDemoComponent } from './http-request-services-demo/request-manager-demo/request-manager-demo.component';
|
|
31
|
-
import { LocalStorageDemoComponent } from './http-request-services-demo/local-storage-demo/local-storage-demo.component';
|
|
32
|
+
import { FileDownloaderActionModule } from 'file-downloader-action';
|
|
32
33
|
import * as i0 from "@angular/core";
|
|
33
34
|
import * as i1 from "@ngx-translate/core";
|
|
34
|
-
// import { DatabaseDataDemoComponent } from './http-request-services-demo/database-data-demo/database-data-demo.component';
|
|
35
35
|
export class HttpRequestManagerModule {
|
|
36
36
|
static forRoot(config = ConfigOptions.adapt()) {
|
|
37
37
|
return {
|
|
@@ -58,7 +58,6 @@ export class HttpRequestManagerModule {
|
|
|
58
58
|
MatMenuModule,
|
|
59
59
|
MatIconModule,
|
|
60
60
|
MatTableModule,
|
|
61
|
-
MatToolbarModule,
|
|
62
61
|
MatButtonToggleModule,
|
|
63
62
|
MatAutocompleteModule,
|
|
64
63
|
MatProgressBarModule,
|
|
@@ -66,8 +65,9 @@ export class HttpRequestManagerModule {
|
|
|
66
65
|
MatDividerModule,
|
|
67
66
|
MatFormFieldModule,
|
|
68
67
|
MatInputModule,
|
|
68
|
+
MatToolbarModule,
|
|
69
69
|
MatSlideToggleModule, i1.TranslateModule, MatSidenavModule,
|
|
70
|
-
|
|
70
|
+
FileDownloaderActionModule], exports: [HttpRequestServicesDemoComponent] }); }
|
|
71
71
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HttpRequestManagerModule, providers: [
|
|
72
72
|
{ provide: HTTP_INTERCEPTORS, useClass: WithCredentialsInterceptor, multi: true },
|
|
73
73
|
{ provide: HTTP_INTERCEPTORS, useClass: RequestHeadersInterceptor, multi: true },
|
|
@@ -84,7 +84,6 @@ export class HttpRequestManagerModule {
|
|
|
84
84
|
MatMenuModule,
|
|
85
85
|
MatIconModule,
|
|
86
86
|
MatTableModule,
|
|
87
|
-
MatToolbarModule,
|
|
88
87
|
MatButtonToggleModule,
|
|
89
88
|
MatAutocompleteModule,
|
|
90
89
|
MatProgressBarModule,
|
|
@@ -92,10 +91,11 @@ export class HttpRequestManagerModule {
|
|
|
92
91
|
MatDividerModule,
|
|
93
92
|
MatFormFieldModule,
|
|
94
93
|
MatInputModule,
|
|
94
|
+
MatToolbarModule,
|
|
95
95
|
MatSlideToggleModule,
|
|
96
96
|
TranslateModule.forRoot(),
|
|
97
97
|
MatSidenavModule,
|
|
98
|
-
|
|
98
|
+
FileDownloaderActionModule] }); }
|
|
99
99
|
}
|
|
100
100
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HttpRequestManagerModule, decorators: [{
|
|
101
101
|
type: NgModule,
|
|
@@ -111,7 +111,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
111
111
|
MatMenuModule,
|
|
112
112
|
MatIconModule,
|
|
113
113
|
MatTableModule,
|
|
114
|
-
MatToolbarModule,
|
|
115
114
|
MatButtonToggleModule,
|
|
116
115
|
MatAutocompleteModule,
|
|
117
116
|
MatProgressBarModule,
|
|
@@ -119,10 +118,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
119
118
|
MatDividerModule,
|
|
120
119
|
MatFormFieldModule,
|
|
121
120
|
MatInputModule,
|
|
121
|
+
MatToolbarModule,
|
|
122
122
|
MatSlideToggleModule,
|
|
123
123
|
TranslateModule.forRoot(),
|
|
124
124
|
MatSidenavModule,
|
|
125
|
-
|
|
125
|
+
FileDownloaderActionModule,
|
|
126
126
|
],
|
|
127
127
|
declarations: [
|
|
128
128
|
HttpRequestServicesDemoComponent,
|
|
@@ -143,4 +143,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
143
143
|
],
|
|
144
144
|
}]
|
|
145
145
|
}] });
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXF1ZXN0LW1hbmFnZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9odHRwLXJlcXVlc3QtbWFuYWdlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwy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LEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUNuRSxrQkFBa0IsRUFBRSwwQkFBMEI7cUJBQy9DO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSFRUUF9JTlRFUkNFUFRPUlMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBXaXRoQ3JlZGVudGlhbHNJbnRlcmNlcHRvciwgUmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvciB9IGZyb20gJy4vaW50ZXJjZXB0b3JzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Q2hpcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFNpZGVuYXZNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE1hdFRvb2xiYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sYmFyJztcbmltcG9ydCB7IE1hdFRhYmxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XG5pbXBvcnQgeyBQcm94eURlYnVnZ2VySW50ZXJjZXB0b3IgfSBmcm9tICcuL2ludGVyY2VwdG9ycy9wcm94eS1kZWJ1Z2dlci5pbnRlcmNlcHRvcic7XG5cbmltcG9ydCB7IENvbmZpZ09wdGlvbnMgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBDT05GSUdfU0VUVElOR1NfVE9LRU4gfSBmcm9tICcuL21vZGVscy9jb25maWctdG9rZW4ubW9kZWwnO1xuaW1wb3J0IHsgSFRUUE1hbmFnZXJTZXJ2aWNlLCBMb2NhbFN0b3JhZ2VNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMnO1xuXG5cbmltcG9ydCB7IFRvYXN0TWVzc2FnZURpc3BsYXlNb2R1bGUgfSBmcm9tICd0b2FzdC1tZXNzYWdlLWRpc3BsYXknO1xuXG5pbXBvcnQgeyBGaWxlRG93bmxvYWRlck1vZHVsZSB9IGZyb20gJy4vaHR0cC1yZXF1ZXN0LXNlcnZpY2VzLWRlbW8vcmVxdWVzdC1tYW5hZ2VyLWRlbW8vZmlsZS1kb3dubG9hZGVyL2ZpbGUtZG93bmxvYWQubW9kdWxlJztcblxuaW1wb3J0IHsgSHR0cFJlcXVlc3RTZXJ2aWNlc0RlbW9Db21wb25lbnQgfSBmcm9tICcuL2h0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vL2h0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IFJlcXVlc3RNYW5hZ2VyU3RhdGVEZW1vQ29tcG9uZW50IH0gZnJvbSAnLi9odHRwLXJlcXVlc3Qtc2VydmljZXMtZGVtby9yZXF1ZXN0LW1hbmFnZXItc3RhdGUtZGVtby9yZXF1ZXN0LW1hbmFnZXItc3RhdGUtZGVtby5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVxdWVzdE1hbmFnZXJEZW1vQ29tcG9uZW50IH0gZnJvbSAnLi9odHRwLXJlcXVlc3Qtc2VydmljZXMtZGVtby9yZXF1ZXN0LW1hbmFnZXItZGVtby9yZXF1ZXN0LW1hbmFnZXItZGVtby5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlRGVtb0NvbXBvbmVudCB9IGZyb20gJy4vaHR0cC1yZXF1ZXN0LXNlcnZpY2VzLWRlbW8vbG9jYWwtc3RvcmFnZS1kZW1vL2xvY2FsLXN0b3JhZ2UtZGVtby5jb21wb25lbnQnO1xuLy8gaW1wb3J0IHsgRGF0YWJhc2VEYXRhRGVtb0NvbXBvbmVudCB9IGZyb20gJy4vaHR0cC1yZXF1ZXN0LXNlcnZpY2VzLWRlbW8vZGF0YWJhc2UtZGF0YS1kZW1vL2RhdGFiYXNlLWRhdGEtZGVtby5jb21wb25lbnQnO1xuXG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVG9hc3RNZXNzYWdlRGlzcGxheU1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgTWF0Q2hpcHNNb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIE1hdFRvb2xiYXJNb2R1bGUsXG4gICAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLFxuICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUuZm9yUm9vdCgpLFxuICAgIE1hdFNpZGVuYXZNb2R1bGUsXG4gICAgRmlsZURvd25sb2FkZXJNb2R1bGUsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEh0dHBSZXF1ZXN0U2VydmljZXNEZW1vQ29tcG9uZW50LFxuICAgIFJlcXVlc3RNYW5hZ2VyU3RhdGVEZW1vQ29tcG9uZW50LFxuICAgIFJlcXVlc3RNYW5hZ2VyRGVtb0NvbXBvbmVudCxcbiAgICBMb2NhbFN0b3JhZ2VEZW1vQ29tcG9uZW50XG4gICAgLy8gRGF0YWJhc2VEYXRhRGVtb0NvbXBvbmVudCxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEh0dHBSZXF1ZXN0U2VydmljZXNEZW1vQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLCB1c2VDbGFzczogV2l0aENyZWRlbnRpYWxzSW50ZXJjZXB0b3IsIG11bHRpOiB0cnVlIH0sXG4gICAgeyBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUywgdXNlQ2xhc3M6IFJlcXVlc3RIZWFkZXJzSW50ZXJjZXB0b3IsIG11bHRpOiB0cnVlIH0sXG4gICAgeyBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUywgdXNlQ2xhc3M6IFByb3h5RGVidWdnZXJJbnRlcmNlcHRvciwgbXVsdGk6IHRydWUgfSxcbiAgICB7IHByb3ZpZGU6IENPTkZJR19TRVRUSU5HU19UT0tFTiwgdXNlVmFsdWU6IENvbmZpZ09wdGlvbnMuYWRhcHQoKSB9LFxuICAgIEhUVFBNYW5hZ2VyU2VydmljZSwgTG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2VcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSHR0cFJlcXVlc3RNYW5hZ2VyTW9kdWxlIHtcblxuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IENvbmZpZ09wdGlvbnMgPSBDb25maWdPcHRpb25zLmFkYXB0KCkpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEh0dHBSZXF1ZXN0TWFuYWdlck1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogSHR0cFJlcXVlc3RNYW5hZ2VyTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQ09ORklHX1NFVFRJTkdTX1RPS0VOLCB1c2VWYWx1ZTogQ29uZmlnT3B0aW9ucy5hZGFwdChjb25maWcpIH0sXG4gICAgICAgIEhUVFBNYW5hZ2VyU2VydmljZSwgTG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2UgLy9hbGwgc2VydmljZXMgdGhhdCBuZWVkIGFjY2VzcyB0byBjb25maWdcbiAgICAgIF0sXG4gICAgfTtcbiAgICB9XG5cbn1cblxuXG4iXX0=
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXF1ZXN0LW1hbmFnZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9odHRwLXJlcXVlc3QtbWFuYWdlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtGQUFrRixDQUFDO0FBQy9ILE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDhGQUE4RixDQUFDO0FBQ2hKLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhFQUE4RSxDQUFDO0FBQ3pILGtIQUFrSDtBQUVsSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFF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USxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDbkUsa0JBQWtCLEVBQUUsMEJBQTBCO3FCQUMvQztpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhUVFBfSU5URVJDRVBUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5pbXBvcnQgeyBXaXRoQ3JlZGVudGlhbHNJbnRlcmNlcHRvciwgUmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvciB9IGZyb20gJy4vaW50ZXJjZXB0b3JzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBSZXF1ZXN0TWFuYWdlckRlbW9Db21wb25lbnQgfSBmcm9tICcuL2h0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vL3JlcXVlc3QtbWFuYWdlci1kZW1vL3JlcXVlc3QtbWFuYWdlci1kZW1vLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXF1ZXN0TWFuYWdlclN0YXRlRGVtb0NvbXBvbmVudCB9IGZyb20gJy4vaHR0cC1yZXF1ZXN0LXNlcnZpY2VzLWRlbW8vcmVxdWVzdC1tYW5hZ2VyLXN0YXRlLWRlbW8vcmVxdWVzdC1tYW5hZ2VyLXN0YXRlLWRlbW8uY29tcG9uZW50JztcbmltcG9ydCB7IExvY2FsU3RvcmFnZURlbW9Db21wb25lbnQgfSBmcm9tICcuL2h0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vL2xvY2FsLXN0b3JhZ2UtZGVtby9sb2NhbC1zdG9yYWdlLWRlbW8uY29tcG9uZW50Jztcbi8vIGltcG9ydCB7IERhdGFiYXNlRGF0YURlbW9Db21wb25lbnQgfSBmcm9tICcuL2dsb2JhbC1kYXRhLWRlbW8vZGF0YWJhc2UtZGF0YS1kZW1vL2RhdGFiYXNlLWRhdGEtZGVtby5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVG9hc3RNZXNzYWdlRGlzcGxheU1vZHVsZSB9IGZyb20gJ3RvYXN0LW1lc3NhZ2UtZGlzcGxheSc7XG5cbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0U2lkZW5hdk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0VG9vbGJhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2xiYXInO1xuaW1wb3J0IHsgTWF0VGFibGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcbmltcG9ydCB7IFByb3h5RGVidWdnZXJJbnRlcmNlcHRvciB9IGZyb20gJy4vaW50ZXJjZXB0b3JzL3Byb3h5LWRlYnVnZ2VyLmludGVyY2VwdG9yJztcblxuaW1wb3J0IHsgSHR0cFJlcXVlc3RTZXJ2aWNlc0RlbW9Db21wb25lbnQgfSBmcm9tICcuL2h0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vL2h0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IENvbmZpZ09wdGlvbnMgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBDT05GSUdfU0VUVElOR1NfVE9LRU4gfSBmcm9tICcuL21vZGVscy9jb25maWctdG9rZW4ubW9kZWwnO1xuaW1wb3J0IHsgSFRUUE1hbmFnZXJTZXJ2aWNlLCBMb2NhbFN0b3JhZ2VNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMnO1xuXG5pbXBvcnQgeyBGaWxlRG93bmxvYWRlckFjdGlvbk1vZHVsZSB9IGZyb20gJ2ZpbGUtZG93bmxvYWRlci1hY3Rpb24nO1xuXG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVG9hc3RNZXNzYWdlRGlzcGxheU1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgTWF0Q2hpcHNNb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIE1hdEJ1dHRvblRvZ2dsZU1vZHVsZSxcbiAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUsXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0VG9vbGJhck1vZHVsZSxcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUuZm9yUm9vdCgpLFxuICAgIE1hdFNpZGVuYXZNb2R1bGUsXG4gICAgRmlsZURvd25sb2FkZXJBY3Rpb25Nb2R1bGUsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEh0dHBSZXF1ZXN0U2VydmljZXNEZW1vQ29tcG9uZW50LFxuICAgIFJlcXVlc3RNYW5hZ2VyU3RhdGVEZW1vQ29tcG9uZW50LFxuICAgIFJlcXVlc3RNYW5hZ2VyRGVtb0NvbXBvbmVudCxcbiAgICBMb2NhbFN0b3JhZ2VEZW1vQ29tcG9uZW50XG4gICAgLy8gRGF0YWJhc2VEYXRhRGVtb0NvbXBvbmVudCxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEh0dHBSZXF1ZXN0U2VydmljZXNEZW1vQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLCB1c2VDbGFzczogV2l0aENyZWRlbnRpYWxzSW50ZXJjZXB0b3IsIG11bHRpOiB0cnVlIH0sXG4gICAgeyBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUywgdXNlQ2xhc3M6IFJlcXVlc3RIZWFkZXJzSW50ZXJjZXB0b3IsIG11bHRpOiB0cnVlIH0sXG4gICAgeyBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUywgdXNlQ2xhc3M6IFByb3h5RGVidWdnZXJJbnRlcmNlcHRvciwgbXVsdGk6IHRydWUgfSxcbiAgICB7IHByb3ZpZGU6IENPTkZJR19TRVRUSU5HU19UT0tFTiwgdXNlVmFsdWU6IENvbmZpZ09wdGlvbnMuYWRhcHQoKSB9LFxuICAgIEhUVFBNYW5hZ2VyU2VydmljZSwgTG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2VcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSHR0cFJlcXVlc3RNYW5hZ2VyTW9kdWxlIHtcblxuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IENvbmZpZ09wdGlvbnMgPSBDb25maWdPcHRpb25zLmFkYXB0KCkpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEh0dHBSZXF1ZXN0TWFuYWdlck1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogSHR0cFJlcXVlc3RNYW5hZ2VyTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQ09ORklHX1NFVFRJTkdTX1RPS0VOLCB1c2VWYWx1ZTogQ29uZmlnT3B0aW9ucy5hZGFwdChjb25maWcpIH0sXG4gICAgICAgIEhUVFBNYW5hZ2VyU2VydmljZSwgTG9jYWxTdG9yYWdlTWFuYWdlclNlcnZpY2UgLy9hbGwgc2VydmljZXMgdGhhdCBuZWVkIGFjY2VzcyB0byBjb25maWdcbiAgICAgIF0sXG4gICAgfTtcbiAgICB9XG5cbn1cblxuXG4iXX0=
|
|
@@ -4,8 +4,8 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
import * as i1 from "@angular/common";
|
|
5
5
|
import * as i2 from "@angular/material/button";
|
|
6
6
|
import * as i3 from "@angular/material/menu";
|
|
7
|
-
import * as i4 from "@angular/material/
|
|
8
|
-
import * as i5 from "@angular/material/
|
|
7
|
+
import * as i4 from "@angular/material/divider";
|
|
8
|
+
import * as i5 from "@angular/material/toolbar";
|
|
9
9
|
import * as i6 from "./request-manager-state-demo/request-manager-state-demo.component";
|
|
10
10
|
import * as i7 from "./request-manager-demo/request-manager-demo.component";
|
|
11
11
|
import * as i8 from "./local-storage-demo/local-storage-demo.component";
|
|
@@ -29,13 +29,13 @@ export class HttpRequestServicesDemoComponent {
|
|
|
29
29
|
this.selectedService = this.requestTypes[type].value;
|
|
30
30
|
}
|
|
31
31
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HttpRequestServicesDemoComponent, deps: [{ token: CONFIG_SETTINGS_TOKEN }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HttpRequestServicesDemoComponent, selector: "app-http-request-services-demo", ngImport: i0, template: "<mat-toolbar style=\"display:flex\">\n <div>Global Data</div>\n <div style=\"flex:1\"></div>\n <button mat-stroked-button [matMenuTriggerFor]=\"menu\">Services</button>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let type of requestTypes; index as i\">\n <div\n *ngIf=\"type?.divider\"\n style=\"margin-top: .5rem; margin-bottom: .5rem;\"\n >\n <mat-divider></mat-divider>\n </div>\n <button\n mat-menu-item\n (click)=\"onSelected(i)\"\n [disabled]=\"type.disabled\"\n >\n {{ type.name }}\n </button>\n </ng-container>\n\n </mat-menu>\n</mat-toolbar>\n\n<span [ngSwitch]=\"selectedService\">\n <p *ngSwitchCase=\"'http_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-demo></app-request-manager-demo>\n </p>\n <p *ngSwitchCase=\"'http_state_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-state-demo></app-request-manager-state-demo>\n </p>\n <p *ngSwitchCase=\"'database_service'\">\n <!-- <app-database-data-demo></app-database-data-demo> -->\n </p>\n <p *ngSwitchCase=\"'local_storage_service'\">\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-demo></app-local-storage-demo>\n </p>\n <p *ngSwitchDefault>\n Other\n </p>\n</span>\n\n<ng-template #HTTP_OPTIONS>\n <ng-container *ngIf=\"injectionOptions?.httpRequestOptions\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - HTTP Options</h3>\n {{ injectionOptions?.httpRequestOptions| json }}\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #LOCAL_OPTIONS>\n <ng-container class=\"box\" *ngIf=\"injectionOptions?.LocalStorageOptions\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - LocalStorage Options</h3>\n {{ injectionOptions?.LocalStorageOptions
|
|
32
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: HttpRequestServicesDemoComponent, selector: "app-http-request-services-demo", ngImport: i0, template: "<mat-toolbar style=\"display:flex\">\n <div>Global Data</div>\n <div style=\"flex:1\"></div>\n <button mat-stroked-button [matMenuTriggerFor]=\"menu\">Services</button>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let type of requestTypes; index as i\">\n <div\n *ngIf=\"type?.divider\"\n style=\"margin-top: .5rem; margin-bottom: .5rem;\"\n >\n <mat-divider></mat-divider>\n </div>\n <button\n mat-menu-item\n (click)=\"onSelected(i)\"\n [disabled]=\"type.disabled\"\n >\n {{ type.name }}\n </button>\n </ng-container>\n\n </mat-menu>\n</mat-toolbar>\n\n<span [ngSwitch]=\"selectedService\">\n <p *ngSwitchCase=\"'http_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-demo></app-request-manager-demo>\n </p>\n <p *ngSwitchCase=\"'http_state_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-state-demo></app-request-manager-state-demo>\n </p>\n <p *ngSwitchCase=\"'database_service'\">\n <!-- <app-database-data-demo></app-database-data-demo> -->\n </p>\n <p *ngSwitchCase=\"'local_storage_service'\">\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-demo></app-local-storage-demo>\n </p>\n <p *ngSwitchDefault>\n Other\n </p>\n</span>\n\n<ng-template #HTTP_OPTIONS>\n <ng-container *ngIf=\"injectionOptions?.httpRequestOptions\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - HTTP Options</h3>\n {{ injectionOptions?.httpRequestOptions| json }}\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #LOCAL_OPTIONS>\n <ng-container class=\"box\" *ngIf=\"injectionOptions?.LocalStorageOptions\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - LocalStorage Options</h3>\n {{ injectionOptions?.LocalStorageOptions| json }}\n </div>\n </ng-container>\n</ng-template>\n\n\n", styles: [".box{padding:1rem;background-color:#f5f5f5;border:thin gray solid;margin-top:1rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i5.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i6.RequestManagerStateDemoComponent, selector: "app-request-manager-state-demo" }, { kind: "component", type: i7.RequestManagerDemoComponent, selector: "app-request-manager-demo" }, { kind: "component", type: i8.LocalStorageDemoComponent, selector: "app-local-storage-demo" }, { kind: "pipe", type: i1.JsonPipe, name: "json" }] }); }
|
|
33
33
|
}
|
|
34
34
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HttpRequestServicesDemoComponent, decorators: [{
|
|
35
35
|
type: Component,
|
|
36
|
-
args: [{ selector: 'app-http-request-services-demo', template: "<mat-toolbar style=\"display:flex\">\n <div>Global Data</div>\n <div style=\"flex:1\"></div>\n <button mat-stroked-button [matMenuTriggerFor]=\"menu\">Services</button>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let type of requestTypes; index as i\">\n <div\n *ngIf=\"type?.divider\"\n style=\"margin-top: .5rem; margin-bottom: .5rem;\"\n >\n <mat-divider></mat-divider>\n </div>\n <button\n mat-menu-item\n (click)=\"onSelected(i)\"\n [disabled]=\"type.disabled\"\n >\n {{ type.name }}\n </button>\n </ng-container>\n\n </mat-menu>\n</mat-toolbar>\n\n<span [ngSwitch]=\"selectedService\">\n <p *ngSwitchCase=\"'http_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-demo></app-request-manager-demo>\n </p>\n <p *ngSwitchCase=\"'http_state_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-state-demo></app-request-manager-state-demo>\n </p>\n <p *ngSwitchCase=\"'database_service'\">\n <!-- <app-database-data-demo></app-database-data-demo> -->\n </p>\n <p *ngSwitchCase=\"'local_storage_service'\">\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-demo></app-local-storage-demo>\n </p>\n <p *ngSwitchDefault>\n Other\n </p>\n</span>\n\n<ng-template #HTTP_OPTIONS>\n <ng-container *ngIf=\"injectionOptions?.httpRequestOptions\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - HTTP Options</h3>\n {{ injectionOptions?.httpRequestOptions| json }}\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #LOCAL_OPTIONS>\n <ng-container class=\"box\" *ngIf=\"injectionOptions?.LocalStorageOptions\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - LocalStorage Options</h3>\n {{ injectionOptions?.LocalStorageOptions
|
|
36
|
+
args: [{ selector: 'app-http-request-services-demo', template: "<mat-toolbar style=\"display:flex\">\n <div>Global Data</div>\n <div style=\"flex:1\"></div>\n <button mat-stroked-button [matMenuTriggerFor]=\"menu\">Services</button>\n <mat-menu #menu=\"matMenu\">\n <ng-container *ngFor=\"let type of requestTypes; index as i\">\n <div\n *ngIf=\"type?.divider\"\n style=\"margin-top: .5rem; margin-bottom: .5rem;\"\n >\n <mat-divider></mat-divider>\n </div>\n <button\n mat-menu-item\n (click)=\"onSelected(i)\"\n [disabled]=\"type.disabled\"\n >\n {{ type.name }}\n </button>\n </ng-container>\n\n </mat-menu>\n</mat-toolbar>\n\n<span [ngSwitch]=\"selectedService\">\n <p *ngSwitchCase=\"'http_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-demo></app-request-manager-demo>\n </p>\n <p *ngSwitchCase=\"'http_state_service'\">\n <ng-container *ngTemplateOutlet=\"HTTP_OPTIONS\"></ng-container>\n <app-request-manager-state-demo></app-request-manager-state-demo>\n </p>\n <p *ngSwitchCase=\"'database_service'\">\n <!-- <app-database-data-demo></app-database-data-demo> -->\n </p>\n <p *ngSwitchCase=\"'local_storage_service'\">\n <ng-container *ngTemplateOutlet=\"LOCAL_OPTIONS\"></ng-container>\n <app-local-storage-demo></app-local-storage-demo>\n </p>\n <p *ngSwitchDefault>\n Other\n </p>\n</span>\n\n<ng-template #HTTP_OPTIONS>\n <ng-container *ngIf=\"injectionOptions?.httpRequestOptions\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - HTTP Options</h3>\n {{ injectionOptions?.httpRequestOptions| json }}\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #LOCAL_OPTIONS>\n <ng-container class=\"box\" *ngIf=\"injectionOptions?.LocalStorageOptions\">\n <div class=\"box\">\n <h3 style=\"font-weight: bold;\">Injection Token Detected - LocalStorage Options</h3>\n {{ injectionOptions?.LocalStorageOptions| json }}\n </div>\n </ng-container>\n</ng-template>\n\n\n", styles: [".box{padding:1rem;background-color:#f5f5f5;border:thin gray solid;margin-top:1rem}\n"] }]
|
|
37
37
|
}], ctorParameters: function () { return [{ type: i9.ConfigOptions, decorators: [{
|
|
38
38
|
type: Inject,
|
|
39
39
|
args: [CONFIG_SETTINGS_TOKEN]
|
|
40
40
|
}] }]; } });
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXF1ZXN0LXNlcnZpY2VzLWRlbW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9odHRwLXJlcXVlc3Qtc2VydmljZXMtZGVtby9odHRwLXJlcXVlc3Qtc2VydmljZXMtZGVtby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL2h0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vL2h0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRTFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7OztBQVFyRSxNQUFNLE9BQU8sZ0NBQWdDO0lBYTNDLFlBQW1ELGFBQTZCO1FBQTdCLGtCQUFhLEdBQWIsYUFBYSxDQUFnQjtRQVhoRixpQkFBWSxHQUFHO1lBQ2IsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUU7WUFDL0MsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFO1lBQzNELEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7WUFDdEYsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFO1NBQ2xFLENBQUE7UUFFRCxvQkFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBSXdDLENBQUM7SUFFckYsUUFBUTtRQUNOLElBQUcsSUFBSSxDQUFDLGFBQWE7WUFBRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQTtJQUNuRSxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVk7UUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQTtJQUN0RCxDQUFDOytHQXJCVSxnQ0FBZ0Msa0JBYXZCLHFCQUFxQjttR0FiOUIsZ0NBQWdDLHNFQ1Y3QyxzaEVBZ0VBOzs0RkR0RGEsZ0NBQWdDO2tCQUw1QyxTQUFTOytCQUNFLGdDQUFnQzs7MEJBaUI3QixNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ09ORklHX1NFVFRJTkdTX1RPS0VOIH0gZnJvbSAnLi4vbW9kZWxzL2NvbmZpZy10b2tlbi5tb2RlbCc7XG5pbXBvcnQgeyBDb25maWdPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzL2NvbmZpZy1vcHRpb25zLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWh0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2h0dHAtcmVxdWVzdC1zZXJ2aWNlcy1kZW1vLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaHR0cC1yZXF1ZXN0LXNlcnZpY2VzLWRlbW8uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBIdHRwUmVxdWVzdFNlcnZpY2VzRGVtb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcmVxdWVzdFR5cGVzID0gW1xuICAgIHsgbmFtZTogXCJIdHRwIFNlcnZpY2VcIiwgdmFsdWU6ICdodHRwX3NlcnZpY2UnIH0sXG4gICAgeyBuYW1lOiBcIkh0dHAgU3RhdGUgU2VydmljZVwiLCB2YWx1ZTogJ2h0dHBfc3RhdGVfc2VydmljZScgfSxcbiAgICB7IG5hbWU6IFwiRGF0YWJhc2UgU2VydmljZVwiLCB2YWx1ZTogJ2RhdGFiYXNlX3NlcnZpY2UnLCBkaXZpZGVyOiB0cnVlLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJMb2NhbCBTdG9yYWdlIFNlcnZpY2VcIiwgdmFsdWU6ICdsb2NhbF9zdG9yYWdlX3NlcnZpY2UnIH0sXG4gIF1cblxuICBzZWxlY3RlZFNlcnZpY2UgPSB0aGlzLnJlcXVlc3RUeXBlc1swXS52YWx1ZVxuXG4gIGluamVjdGlvbk9wdGlvbnM/OiBDb25maWdPcHRpb25zXG5cbiAgY29uc3RydWN0b3IoQEluamVjdChDT05GSUdfU0VUVElOR1NfVE9LRU4pIHByaXZhdGUgY29uZmlnT3B0aW9ucz86IENvbmZpZ09wdGlvbnMpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmKHRoaXMuY29uZmlnT3B0aW9ucykgdGhpcy5pbmplY3Rpb25PcHRpb25zID0gdGhpcy5jb25maWdPcHRpb25zXG4gIH1cblxuICBvblNlbGVjdGVkKHR5cGU6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlID0gdGhpcy5yZXF1ZXN0VHlwZXNbdHlwZV0udmFsdWVcbiAgfVxuXG59XG4iLCI8bWF0LXRvb2xiYXIgIHN0eWxlPVwiZGlzcGxheTpmbGV4XCI+XG4gIDxkaXY+R2xvYmFsIERhdGE8L2Rpdj5cbiAgPGRpdiBzdHlsZT1cImZsZXg6MVwiPjwvZGl2PlxuICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiPlNlcnZpY2VzPC9idXR0b24+XG4gIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0eXBlIG9mIHJlcXVlc3RUeXBlczsgaW5kZXggYXMgaVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInR5cGU/LmRpdmlkZXJcIlxuICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IC41cmVtOyBtYXJnaW4tYm90dG9tOiAuNXJlbTtcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtbWVudS1pdGVtXG4gICAgICAgIChjbGljayk9XCJvblNlbGVjdGVkKGkpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInR5cGUuZGlzYWJsZWRcIlxuICAgICAgICA+XG4gICAgICAgIHt7IHR5cGUubmFtZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgPC9tYXQtbWVudT5cbjwvbWF0LXRvb2xiYXI+XG5cbjxzcGFuIFtuZ1N3aXRjaF09XCJzZWxlY3RlZFNlcnZpY2VcIj5cbiAgPHAgKm5nU3dpdGNoQ2FzZT1cIidodHRwX3NlcnZpY2UnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkhUVFBfT1BUSU9OU1wiPjwvbmctY29udGFpbmVyPlxuICAgIDxhcHAtcmVxdWVzdC1tYW5hZ2VyLWRlbW8+PC9hcHAtcmVxdWVzdC1tYW5hZ2VyLWRlbW8+XG4gIDwvcD5cbiAgPHAgKm5nU3dpdGNoQ2FzZT1cIidodHRwX3N0YXRlX3NlcnZpY2UnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkhUVFBfT1BUSU9OU1wiPjwvbmctY29udGFpbmVyPlxuICAgIDxhcHAtcmVxdWVzdC1tYW5hZ2VyLXN0YXRlLWRlbW8+PC9hcHAtcmVxdWVzdC1tYW5hZ2VyLXN0YXRlLWRlbW8+XG4gIDwvcD5cbiAgPHAgKm5nU3dpdGNoQ2FzZT1cIidkYXRhYmFzZV9zZXJ2aWNlJ1wiPlxuICAgIDwhLS0gPGFwcC1kYXRhYmFzZS1kYXRhLWRlbW8+PC9hcHAtZGF0YWJhc2UtZGF0YS1kZW1vPiAtLT5cbiAgPC9wPlxuICA8cCAqbmdTd2l0Y2hDYXNlPVwiJ2xvY2FsX3N0b3JhZ2Vfc2VydmljZSdcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiTE9DQUxfT1BUSU9OU1wiPjwvbmctY29udGFpbmVyPlxuICAgIDxhcHAtbG9jYWwtc3RvcmFnZS1kZW1vPjwvYXBwLWxvY2FsLXN0b3JhZ2UtZGVtbz5cbiAgPC9wPlxuICA8cCAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgIE90aGVyXG4gIDwvcD5cbjwvc3Bhbj5cblxuPG5nLXRlbXBsYXRlICNIVFRQX09QVElPTlM+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbmplY3Rpb25PcHRpb25zPy5odHRwUmVxdWVzdE9wdGlvbnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYm94XCI+XG4gICAgICA8aDMgc3R5bGU9XCJmb250LXdlaWdodDogYm9sZDtcIj5JbmplY3Rpb24gVG9rZW4gRGV0ZWN0ZWQgLSBIVFRQIE9wdGlvbnM8L2gzPlxuICAgICAge3sgaW5qZWN0aW9uT3B0aW9ucz8uaHR0cFJlcXVlc3RPcHRpb25zfCBqc29uIH19XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNMT0NBTF9PUFRJT05TPlxuICA8bmctY29udGFpbmVyIGNsYXNzPVwiYm94XCIgKm5nSWY9XCJpbmplY3Rpb25PcHRpb25zPy5Mb2NhbFN0b3JhZ2VPcHRpb25zXCI+XG4gICAgPGRpdiBjbGFzcz1cImJveFwiPlxuICAgICAgPGgzIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7XCI+SW5qZWN0aW9uIFRva2VuIERldGVjdGVkIC0gTG9jYWxTdG9yYWdlIE9wdGlvbnM8L2gzPlxuICAgICAge3sgaW5qZWN0aW9uT3B0aW9ucz8uTG9jYWxTdG9yYWdlT3B0aW9uc3wganNvbiB9fVxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cblxuIl19
|