@angular-architects/ngrx-toolkit 0.0.1 → 0.0.3
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 +220 -7
- package/esm2022/index.mjs +4 -1
- package/esm2022/lib/assertions/assertions.mjs +1 -1
- package/esm2022/lib/shared/empty.mjs +2 -0
- package/esm2022/lib/with-call-state.mjs +58 -0
- package/esm2022/lib/with-data-service.mjs +147 -0
- package/esm2022/lib/with-devtools.mjs +1 -1
- package/esm2022/lib/with-redux.mjs +1 -1
- package/esm2022/lib/with-undo-redo.mjs +93 -0
- package/fesm2022/angular-architects-ngrx-toolkit.mjs +293 -3
- package/fesm2022/angular-architects-ngrx-toolkit.mjs.map +1 -1
- package/index.d.ts +3 -0
- package/lib/shared/empty.d.ts +1 -0
- package/lib/with-call-state.d.ts +55 -0
- package/lib/with-data-service.d.ts +110 -0
- package/lib/with-undo-redo.d.ts +55 -0
- package/package.json +2 -3
package/README.md
CHANGED
|
@@ -1,7 +1,220 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
# NgRx Toolkit
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="https://raw.githubusercontent.com/angular-architects/ngrx-toolkit/main/logo.png" width="320" style="text-align: center">
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
NgRx Toolkit is an extension to the NgRx Signals Store. **It is still in beta** but already offers following features:
|
|
8
|
+
|
|
9
|
+
- Devtools: Integration into Redux Devtools
|
|
10
|
+
- Redux: Possibility to use the Redux Pattern (Reducer, Actions, Effects)
|
|
11
|
+
|
|
12
|
+
To install it, run
|
|
13
|
+
|
|
14
|
+
```shell
|
|
15
|
+
npm i @angular-architects/ngrx-toolkit
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Devtools: `withDevtools()`
|
|
19
|
+
|
|
20
|
+
This extension is very easy to use. Just add it to a `signalStore`. Example:
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
export const FlightStore = signalStore(
|
|
24
|
+
{ providedIn: 'root' },
|
|
25
|
+
withDevtools('flights'), // <-- add this
|
|
26
|
+
withState({ flights: [] as Flight[] }),
|
|
27
|
+
// ...
|
|
28
|
+
);
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Redux: `withRedux()`
|
|
32
|
+
|
|
33
|
+
`withRedux()` bring back the Redux pattern into the Signal Store.
|
|
34
|
+
|
|
35
|
+
It can be combined with any other extension of the Signal Store.
|
|
36
|
+
|
|
37
|
+
Example:
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
export const FlightStore = signalStore(
|
|
41
|
+
{ providedIn: 'root' },
|
|
42
|
+
withState({ flights: [] as Flight[] }),
|
|
43
|
+
withRedux({
|
|
44
|
+
actions: {
|
|
45
|
+
public: {
|
|
46
|
+
load: payload<{ from: string; to: string }>(),
|
|
47
|
+
},
|
|
48
|
+
private: {
|
|
49
|
+
loaded: payload<{ flights: Flight[] }>(),
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
reducer(actions, on) {
|
|
53
|
+
on(actions.loaded, ({ flights }, state) => {
|
|
54
|
+
patchState(state, 'flights loaded', { flights });
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
effects(actions, create) {
|
|
58
|
+
const httpClient = inject(HttpClient);
|
|
59
|
+
return {
|
|
60
|
+
load$: create(actions.load).pipe(
|
|
61
|
+
switchMap(({ from, to }) =>
|
|
62
|
+
httpClient.get<Flight[]>(
|
|
63
|
+
'https://demo.angulararchitects.io/api/flight',
|
|
64
|
+
{
|
|
65
|
+
params: new HttpParams().set('from', from).set('to', to),
|
|
66
|
+
},
|
|
67
|
+
),
|
|
68
|
+
),
|
|
69
|
+
tap((flights) => actions.loaded({ flights })),
|
|
70
|
+
),
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
}),
|
|
74
|
+
);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## DataService `withDataService()`
|
|
78
|
+
|
|
79
|
+
`withDataService()` allows to connect a Data Service to the store:
|
|
80
|
+
|
|
81
|
+
This gives you a store for a CRUD use case:
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
export const SimpleFlightBookingStore = signalStore(
|
|
85
|
+
{ providedIn: 'root' },
|
|
86
|
+
withCallState(),
|
|
87
|
+
withEntities<Flight>(),
|
|
88
|
+
withDataService({
|
|
89
|
+
dataServiceType: FlightService,
|
|
90
|
+
filter: { from: 'Paris', to: 'New York' },
|
|
91
|
+
}),
|
|
92
|
+
withUndoRedo(),
|
|
93
|
+
);
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
The features ``withCallState`` and ``withUndoRedo`` are optional, but when present, they enrich each other.
|
|
97
|
+
|
|
98
|
+
The Data Service needs to implement the ``DataService`` interface:
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
@Injectable({
|
|
102
|
+
providedIn: 'root'
|
|
103
|
+
})
|
|
104
|
+
export class FlightService implements DataService<Flight, FlightFilter> {
|
|
105
|
+
loadById(id: EntityId): Promise<Flight> { ... }
|
|
106
|
+
load(filter: FlightFilter): Promise<Flight[]> { ... }
|
|
107
|
+
|
|
108
|
+
create(entity: Flight): Promise<Flight> { ... }
|
|
109
|
+
update(entity: Flight): Promise<Flight> { ... }
|
|
110
|
+
delete(entity: Flight): Promise<void> { ... }
|
|
111
|
+
[...]
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Once the store is defined, it gives its consumers numerous signals and methods they just need to delegate to:
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
@Component(...)
|
|
119
|
+
export class FlightSearchSimpleComponent {
|
|
120
|
+
private store = inject(SimpleFlightBookingStore);
|
|
121
|
+
|
|
122
|
+
from = this.store.filter.from;
|
|
123
|
+
to = this.store.filter.to;
|
|
124
|
+
flights = this.store.entities;
|
|
125
|
+
selected = this.store.selectedEntities;
|
|
126
|
+
selectedIds = this.store.selectedIds;
|
|
127
|
+
|
|
128
|
+
loading = this.store.loading;
|
|
129
|
+
|
|
130
|
+
canUndo = this.store.canUndo;
|
|
131
|
+
canRedo = this.store.canRedo;
|
|
132
|
+
|
|
133
|
+
async search() {
|
|
134
|
+
this.store.load();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
undo(): void {
|
|
138
|
+
this.store.undo();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
redo(): void {
|
|
142
|
+
this.store.redo();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
updateCriteria(from: string, to: string): void {
|
|
146
|
+
this.store.updateFilter({ from, to });
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
updateBasket(id: number, selected: boolean): void {
|
|
150
|
+
this.store.updateSelected(id, selected);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## DataService with Dynamic Properties
|
|
157
|
+
|
|
158
|
+
To avoid naming conflicts, the properties set up by ``withDataService`` and the connected features can be configured in a typesafe way:
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
export const FlightBookingStore = signalStore(
|
|
162
|
+
{ providedIn: 'root' },
|
|
163
|
+
withCallState({
|
|
164
|
+
collection: 'flight'
|
|
165
|
+
}),
|
|
166
|
+
withEntities({
|
|
167
|
+
entity: type<Flight>(),
|
|
168
|
+
collection: 'flight'
|
|
169
|
+
}),
|
|
170
|
+
withDataService({
|
|
171
|
+
dataServiceType: FlightService,
|
|
172
|
+
filter: { from: 'Graz', to: 'Hamburg' },
|
|
173
|
+
collection: 'flight'
|
|
174
|
+
}),
|
|
175
|
+
withUndoRedo({
|
|
176
|
+
collections: ['flight'],
|
|
177
|
+
}),
|
|
178
|
+
);
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
This setup makes them use ``flight`` as part of the used property names. As these implementations respect the Type Script type system, the compiler will make sure these properties are used in a typesafe way:
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
@Component(...)
|
|
185
|
+
export class FlightSearchDynamicComponent {
|
|
186
|
+
private store = inject(FlightBookingStore);
|
|
187
|
+
|
|
188
|
+
from = this.store.flightFilter.from;
|
|
189
|
+
to = this.store.flightFilter.to;
|
|
190
|
+
flights = this.store.flightEntities;
|
|
191
|
+
selected = this.store.selectedFlightEntities;
|
|
192
|
+
selectedIds = this.store.selectedFlightIds;
|
|
193
|
+
|
|
194
|
+
loading = this.store.flightLoading;
|
|
195
|
+
|
|
196
|
+
canUndo = this.store.canUndo;
|
|
197
|
+
canRedo = this.store.canRedo;
|
|
198
|
+
|
|
199
|
+
async search() {
|
|
200
|
+
this.store.loadFlightEntities();
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
undo(): void {
|
|
204
|
+
this.store.undo();
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
redo(): void {
|
|
208
|
+
this.store.redo();
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
updateCriteria(from: string, to: string): void {
|
|
212
|
+
this.store.updateFlightFilter({ from, to });
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
updateBasket(id: number, selected: boolean): void {
|
|
216
|
+
this.store.updateSelectedFlightEntities(id, selected);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
}
|
|
220
|
+
```
|
package/esm2022/index.mjs
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
export { withDevtools, patchState } from './lib/with-devtools';
|
|
2
2
|
export * from './lib/with-redux';
|
|
3
|
-
|
|
3
|
+
export * from './lib/with-call-state';
|
|
4
|
+
export * from './lib/with-undo-redo';
|
|
5
|
+
export * from './lib/with-data-service';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RSxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgd2l0aERldnRvb2xzLCBwYXRjaFN0YXRlLCBBY3Rpb24gfSBmcm9tICcuL2xpYi93aXRoLWRldnRvb2xzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd2l0aC1yZWR1eCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dpdGgtY2FsbC1zdGF0ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dpdGgtdW5kby1yZWRvJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvd2l0aC1kYXRhLXNlcnZpY2UnO1xyXG4iXX0=
|
|
@@ -3,4 +3,4 @@ export function assertActionFnSpecs(obj) {
|
|
|
3
3
|
throw new Error('%o is not an Action Specification');
|
|
4
4
|
}
|
|
5
5
|
}
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvYXNzZXJ0aW9ucy9hc3NlcnRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsR0FBWTtJQUVaLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztLQUN0RDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb25zRm5TcGVjcyB9IGZyb20gJy4uL3dpdGgtcmVkdXgnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEFjdGlvbkZuU3BlY3MoXHJcbiAgb2JqOiB1bmtub3duXHJcbik6IGFzc2VydHMgb2JqIGlzIEFjdGlvbnNGblNwZWNzIHtcclxuICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCclbyBpcyBub3QgYW4gQWN0aW9uIFNwZWNpZmljYXRpb24nKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9lbXB0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcclxuZXhwb3J0IHR5cGUgRW10cHkgPSB7fTsiXX0=
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { computed } from '@angular/core';
|
|
2
|
+
import { signalStoreFeature, withComputed, withState, } from '@ngrx/signals';
|
|
3
|
+
export function getCallStateKeys(config) {
|
|
4
|
+
const prop = config?.collection;
|
|
5
|
+
return {
|
|
6
|
+
callStateKey: prop ? `${config.collection}CallState` : 'callState',
|
|
7
|
+
loadingKey: prop ? `${config.collection}Loading` : 'loading',
|
|
8
|
+
loadedKey: prop ? `${config.collection}Loaded` : 'loaded',
|
|
9
|
+
errorKey: prop ? `${config.collection}Error` : 'error',
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function withCallState(config) {
|
|
13
|
+
const { callStateKey, errorKey, loadedKey, loadingKey } = getCallStateKeys(config);
|
|
14
|
+
return signalStoreFeature(withState({ [callStateKey]: 'init' }), withComputed((state) => {
|
|
15
|
+
const callState = state[callStateKey];
|
|
16
|
+
return {
|
|
17
|
+
[loadingKey]: computed(() => callState() === 'loading'),
|
|
18
|
+
[loadedKey]: computed(() => callState() === 'loaded'),
|
|
19
|
+
[errorKey]: computed(() => {
|
|
20
|
+
const v = callState();
|
|
21
|
+
return typeof v === 'object' ? v.error : null;
|
|
22
|
+
})
|
|
23
|
+
};
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
export function setLoading(prop) {
|
|
27
|
+
if (prop) {
|
|
28
|
+
return { [`${prop}CallState`]: 'loading' };
|
|
29
|
+
}
|
|
30
|
+
return { callState: 'loading' };
|
|
31
|
+
}
|
|
32
|
+
export function setLoaded(prop) {
|
|
33
|
+
if (prop) {
|
|
34
|
+
return { [`${prop}CallState`]: 'loaded' };
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
return { callState: 'loaded' };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function setError(error, prop) {
|
|
41
|
+
let errorMessage = '';
|
|
42
|
+
if (!error) {
|
|
43
|
+
errorMessage = '';
|
|
44
|
+
}
|
|
45
|
+
else if (typeof error === 'object' && 'message' in error) {
|
|
46
|
+
errorMessage = String(error.message);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
errorMessage = String(error);
|
|
50
|
+
}
|
|
51
|
+
if (prop) {
|
|
52
|
+
return { [`${prop}CallState`]: { error: errorMessage } };
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
return { callState: { error: errorMessage } };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jYWxsLXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRvb2xraXQvc3JjL2xpYi93aXRoLWNhbGwtc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBRUwsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUEyQnZCLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFnQztJQUMvRCxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUUsVUFBVSxDQUFDO0lBQ2hDLE9BQU87UUFDTCxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVztRQUNuRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM1RCxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUTtRQUN6RCxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTztLQUN2RCxDQUFDO0FBQ0osQ0FBQztBQW9CRCxNQUFNLFVBQVUsYUFBYSxDQUE0QixNQUV4RDtJQUNDLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FDckQsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0IsT0FBTyxrQkFBa0IsQ0FDdkIsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUNyQyxZQUFZLENBQUMsQ0FBQyxLQUFzQyxFQUFFLEVBQUU7UUFFdEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBc0IsQ0FBQztRQUUzRCxPQUFPO1lBQ0wsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssU0FBUyxDQUFDO1lBQ3ZELENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLFFBQVEsQ0FBQztZQUNyRCxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hCLE1BQU0sQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDO2dCQUN0QixPQUFPLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2hELENBQUMsQ0FBQztTQUNILENBQUE7SUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQ3hCLElBQVc7SUFFWCxJQUFJLElBQUksRUFBRTtRQUNSLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxTQUFTLEVBQStCLENBQUM7S0FDekU7SUFFRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUN2QixJQUFXO0lBR1gsSUFBSSxJQUFJLEVBQUU7UUFDUixPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUErQixDQUFDO0tBQ3hFO1NBQ0k7UUFDSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO0tBRWhDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQ3RCLEtBQWMsRUFDZCxJQUFXO0lBR1QsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBRXRCLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixZQUFZLEdBQUcsRUFBRSxDQUFDO0tBQ25CO1NBQ0ksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksU0FBUyxJQUFJLEtBQUssRUFBRTtRQUN4RCxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN0QztTQUNJO1FBQ0gsWUFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM5QjtJQUdELElBQUksSUFBSSxFQUFFO1FBQ1IsT0FBTyxFQUFFLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUErQixDQUFDO0tBQ3ZGO1NBQ0k7UUFDSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUM7S0FDL0M7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2lnbmFsLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcclxuICBzaWduYWxTdG9yZUZlYXR1cmUsXHJcbiAgd2l0aENvbXB1dGVkLFxyXG4gIHdpdGhTdGF0ZSxcclxufSBmcm9tICdAbmdyeC9zaWduYWxzJztcclxuaW1wb3J0IHsgRW10cHkgfSBmcm9tICcuL3NoYXJlZC9lbXB0eSc7XHJcblxyXG5leHBvcnQgdHlwZSBDYWxsU3RhdGUgPSAnaW5pdCcgfCAnbG9hZGluZycgfCAnbG9hZGVkJyB8IHsgZXJyb3I6IHN0cmluZyB9O1xyXG5cclxuZXhwb3J0IHR5cGUgTmFtZWRDYWxsU3RhdGVTbGljZTxDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPiA9IHtcclxuICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0t9Q2FsbFN0YXRlYF06IENhbGxTdGF0ZTtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIENhbGxTdGF0ZVNsaWNlID0ge1xyXG4gIGNhbGxTdGF0ZTogQ2FsbFN0YXRlXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIE5hbWVkQ2FsbFN0YXRlU2lnbmFsczxQcm9wIGV4dGVuZHMgc3RyaW5nPiA9IHtcclxuICBbSyBpbiBQcm9wIGFzIGAke0t9TG9hZGluZ2BdOiBTaWduYWw8Ym9vbGVhbj47XHJcbn0gJiB7XHJcbiAgICBbSyBpbiBQcm9wIGFzIGAke0t9TG9hZGVkYF06IFNpZ25hbDxib29sZWFuPjtcclxuICB9ICYge1xyXG4gICAgW0sgaW4gUHJvcCBhcyBgJHtLfUVycm9yYF06IFNpZ25hbDxzdHJpbmcgfCBudWxsPjtcclxuICB9IFxyXG5cclxuZXhwb3J0IHR5cGUgQ2FsbFN0YXRlU2lnbmFscyA9IHtcclxuICBsb2FkaW5nOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgbG9hZGVkOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgZXJyb3I6IFNpZ25hbDxzdHJpbmcgfCBudWxsPlxyXG59IFxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENhbGxTdGF0ZUtleXMoY29uZmlnPzogeyBjb2xsZWN0aW9uPzogc3RyaW5nIH0pIHtcclxuICBjb25zdCBwcm9wID0gY29uZmlnPy5jb2xsZWN0aW9uO1xyXG4gIHJldHVybiB7XHJcbiAgICBjYWxsU3RhdGVLZXk6IHByb3AgPyAgYCR7Y29uZmlnLmNvbGxlY3Rpb259Q2FsbFN0YXRlYCA6ICdjYWxsU3RhdGUnLFxyXG4gICAgbG9hZGluZ0tleTogcHJvcCA/IGAke2NvbmZpZy5jb2xsZWN0aW9ufUxvYWRpbmdgIDogJ2xvYWRpbmcnLFxyXG4gICAgbG9hZGVkS2V5OiBwcm9wID8gYCR7Y29uZmlnLmNvbGxlY3Rpb259TG9hZGVkYCA6ICdsb2FkZWQnLFxyXG4gICAgZXJyb3JLZXk6IHByb3AgPyBgJHtjb25maWcuY29sbGVjdGlvbn1FcnJvcmAgOiAnZXJyb3InLFxyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ2FsbFN0YXRlPENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KGNvbmZpZzoge1xyXG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb247XHJcbn0pOiBTaWduYWxTdG9yZUZlYXR1cmU8XHJcbiAgeyBzdGF0ZTogRW10cHksIHNpZ25hbHM6IEVtdHB5LCBtZXRob2RzOiBFbXRweSB9LFxyXG4gIHtcclxuICAgIHN0YXRlOiBOYW1lZENhbGxTdGF0ZVNsaWNlPENvbGxlY3Rpb24+LFxyXG4gICAgc2lnbmFsczogTmFtZWRDYWxsU3RhdGVTaWduYWxzPENvbGxlY3Rpb24+LFxyXG4gICAgbWV0aG9kczogRW10cHlcclxuICB9XHJcbj47XHJcbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ2FsbFN0YXRlKCk6IFNpZ25hbFN0b3JlRmVhdHVyZTxcclxuICB7IHN0YXRlOiBFbXRweSwgc2lnbmFsczogRW10cHksIG1ldGhvZHM6IEVtdHB5IH0sXHJcbiAge1xyXG4gICAgc3RhdGU6IENhbGxTdGF0ZVNsaWNlLFxyXG4gICAgc2lnbmFsczogQ2FsbFN0YXRlU2lnbmFscyxcclxuICAgIG1ldGhvZHM6IEVtdHB5XHJcbiAgfVxyXG4+O1xyXG5leHBvcnQgZnVuY3Rpb24gd2l0aENhbGxTdGF0ZTxDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPihjb25maWc/OiB7XHJcbiAgY29sbGVjdGlvbjogQ29sbGVjdGlvbjtcclxufSk6IFNpZ25hbFN0b3JlRmVhdHVyZSB7XHJcbiAgY29uc3QgeyBjYWxsU3RhdGVLZXksIGVycm9yS2V5LCBsb2FkZWRLZXksIGxvYWRpbmdLZXkgfSA9XHJcbiAgICBnZXRDYWxsU3RhdGVLZXlzKGNvbmZpZyk7XHJcblxyXG4gIHJldHVybiBzaWduYWxTdG9yZUZlYXR1cmUoXHJcbiAgICB3aXRoU3RhdGUoeyBbY2FsbFN0YXRlS2V5XTogJ2luaXQnIH0pLFxyXG4gICAgd2l0aENvbXB1dGVkKChzdGF0ZTogUmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+PikgPT4ge1xyXG5cclxuICAgICAgY29uc3QgY2FsbFN0YXRlID0gc3RhdGVbY2FsbFN0YXRlS2V5XSBhcyBTaWduYWw8Q2FsbFN0YXRlPjtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgW2xvYWRpbmdLZXldOiBjb21wdXRlZCgoKSA9PiBjYWxsU3RhdGUoKSA9PT0gJ2xvYWRpbmcnKSxcclxuICAgICAgICBbbG9hZGVkS2V5XTogY29tcHV0ZWQoKCkgPT4gY2FsbFN0YXRlKCkgPT09ICdsb2FkZWQnKSxcclxuICAgICAgICBbZXJyb3JLZXldOiBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB2ID0gY2FsbFN0YXRlKCk7XHJcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdvYmplY3QnID8gdi5lcnJvciA6IG51bGw7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9hZGluZzxQcm9wIGV4dGVuZHMgc3RyaW5nPihcclxuICBwcm9wPzogUHJvcFxyXG4pOiBOYW1lZENhbGxTdGF0ZVNsaWNlPFByb3A+IHwgQ2FsbFN0YXRlU2xpY2Uge1xyXG4gIGlmIChwcm9wKSB7XHJcbiAgICByZXR1cm4geyBbYCR7cHJvcH1DYWxsU3RhdGVgXTogJ2xvYWRpbmcnIH0gYXMgTmFtZWRDYWxsU3RhdGVTbGljZTxQcm9wPjtcclxuICB9XHJcblxyXG4gIHJldHVybiB7IGNhbGxTdGF0ZTogJ2xvYWRpbmcnIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRMb2FkZWQ8UHJvcCBleHRlbmRzIHN0cmluZz4oXHJcbiAgcHJvcD86IFByb3BcclxuKTogTmFtZWRDYWxsU3RhdGVTbGljZTxQcm9wPiB8IENhbGxTdGF0ZVNsaWNlIHtcclxuXHJcbiAgaWYgKHByb3ApIHtcclxuICAgIHJldHVybiB7IFtgJHtwcm9wfUNhbGxTdGF0ZWBdOiAnbG9hZGVkJyB9IGFzIE5hbWVkQ2FsbFN0YXRlU2xpY2U8UHJvcD47XHJcbiAgfVxyXG4gIGVsc2Uge1xyXG4gICAgcmV0dXJuIHsgY2FsbFN0YXRlOiAnbG9hZGVkJyB9O1xyXG5cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcjxQcm9wIGV4dGVuZHMgc3RyaW5nPihcclxuICBlcnJvcjogdW5rbm93bixcclxuICBwcm9wPzogUHJvcCxcclxuICApOiBOYW1lZENhbGxTdGF0ZVNsaWNlPFByb3A+IHwgQ2FsbFN0YXRlU2xpY2Uge1xyXG5cclxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcclxuXHJcbiAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgIGVycm9yTWVzc2FnZSA9ICcnO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAnbWVzc2FnZScgaW4gZXJyb3IpIHtcclxuICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZyhlcnJvcik7XHJcbiAgICB9XHJcbiAgICBcclxuXHJcbiAgICBpZiAocHJvcCkge1xyXG4gICAgICByZXR1cm4geyBbYCR7cHJvcH1DYWxsU3RhdGVgXTogeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0gfSBhcyBOYW1lZENhbGxTdGF0ZVNsaWNlPFByb3A+O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGNhbGxTdGF0ZTogeyBlcnJvcjogZXJyb3JNZXNzYWdlIH0gfTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { computed, inject } from "@angular/core";
|
|
2
|
+
import { patchState, signalStoreFeature, withComputed, withMethods, withState } from "@ngrx/signals";
|
|
3
|
+
import { getCallStateKeys, setError, setLoaded, setLoading } from "./with-call-state";
|
|
4
|
+
import { setAllEntities, addEntity, updateEntity, removeEntity } from "@ngrx/signals/entities";
|
|
5
|
+
export function capitalize(str) {
|
|
6
|
+
return str ? str[0].toUpperCase() + str.substring(1) : str;
|
|
7
|
+
}
|
|
8
|
+
export function getDataServiceKeys(options) {
|
|
9
|
+
const filterKey = options.collection ? `${options.collection}Filter` : 'filter';
|
|
10
|
+
const selectedIdsKey = options.collection ? `selected${capitalize(options.collection)}Ids` : 'selectedIds';
|
|
11
|
+
const selectedEntitiesKey = options.collection ? `selected${capitalize(options.collection)}Entities` : 'selectedEntities';
|
|
12
|
+
const updateFilterKey = options.collection ? `update${capitalize(options.collection)}Filter` : 'updateFilter';
|
|
13
|
+
const updateSelectedKey = options.collection ? `updateSelected${capitalize(options.collection)}Entities` : 'updateSelected';
|
|
14
|
+
const loadKey = options.collection ? `load${capitalize(options.collection)}Entities` : 'load';
|
|
15
|
+
const currentKey = options.collection ? `current${capitalize(options.collection)}` : 'current';
|
|
16
|
+
const loadByIdKey = options.collection ? `load${capitalize(options.collection)}ById` : 'loadById';
|
|
17
|
+
const setCurrentKey = options.collection ? `setCurrent${capitalize(options.collection)}` : 'setCurrent';
|
|
18
|
+
const createKey = options.collection ? `create${capitalize(options.collection)}` : 'create';
|
|
19
|
+
const updateKey = options.collection ? `update${capitalize(options.collection)}` : 'update';
|
|
20
|
+
const deleteKey = options.collection ? `delete${capitalize(options.collection)}` : 'delete';
|
|
21
|
+
// TODO: Take these from @ngrx/signals/entities, when they are exported
|
|
22
|
+
const entitiesKey = options.collection ? `${options.collection}Entities` : 'entities';
|
|
23
|
+
const entityMapKey = options.collection ? `${options.collection}EntityMap` : 'entityMap';
|
|
24
|
+
const idsKey = options.collection ? `${options.collection}Ids` : 'ids';
|
|
25
|
+
return {
|
|
26
|
+
filterKey,
|
|
27
|
+
selectedIdsKey,
|
|
28
|
+
selectedEntitiesKey,
|
|
29
|
+
updateFilterKey,
|
|
30
|
+
updateSelectedKey,
|
|
31
|
+
loadKey,
|
|
32
|
+
entitiesKey,
|
|
33
|
+
entityMapKey,
|
|
34
|
+
idsKey,
|
|
35
|
+
currentKey,
|
|
36
|
+
loadByIdKey,
|
|
37
|
+
setCurrentKey,
|
|
38
|
+
createKey,
|
|
39
|
+
updateKey,
|
|
40
|
+
deleteKey
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
|
+
export function withDataService(options) {
|
|
45
|
+
const { dataServiceType, filter, collection: prefix } = options;
|
|
46
|
+
const { entitiesKey, filterKey, loadKey, selectedEntitiesKey, selectedIdsKey, updateFilterKey, updateSelectedKey, currentKey, createKey, updateKey, deleteKey, loadByIdKey, setCurrentKey } = getDataServiceKeys(options);
|
|
47
|
+
const { callStateKey } = getCallStateKeys({ collection: prefix });
|
|
48
|
+
return signalStoreFeature(withState(() => ({
|
|
49
|
+
[filterKey]: filter,
|
|
50
|
+
[selectedIdsKey]: {},
|
|
51
|
+
[currentKey]: undefined
|
|
52
|
+
})), withComputed((store) => {
|
|
53
|
+
const entities = store[entitiesKey];
|
|
54
|
+
const selectedIds = store[selectedIdsKey];
|
|
55
|
+
return {
|
|
56
|
+
[selectedEntitiesKey]: computed(() => entities().filter(e => selectedIds()[e.id]))
|
|
57
|
+
};
|
|
58
|
+
}), withMethods((store) => {
|
|
59
|
+
const dataService = inject(dataServiceType);
|
|
60
|
+
return {
|
|
61
|
+
[updateFilterKey]: (filter) => {
|
|
62
|
+
patchState(store, { [filterKey]: filter });
|
|
63
|
+
},
|
|
64
|
+
[updateSelectedKey]: (id, selected) => {
|
|
65
|
+
patchState(store, (state) => ({
|
|
66
|
+
[selectedIdsKey]: {
|
|
67
|
+
...state[selectedIdsKey],
|
|
68
|
+
[id]: selected,
|
|
69
|
+
}
|
|
70
|
+
}));
|
|
71
|
+
},
|
|
72
|
+
[loadKey]: async () => {
|
|
73
|
+
const filter = store[filterKey];
|
|
74
|
+
store[callStateKey] && patchState(store, setLoading(prefix));
|
|
75
|
+
try {
|
|
76
|
+
const result = await dataService.load(filter());
|
|
77
|
+
patchState(store, prefix ? setAllEntities(result, { collection: prefix }) : setAllEntities(result));
|
|
78
|
+
store[callStateKey] && patchState(store, setLoaded(prefix));
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
store[callStateKey] && patchState(store, setError(e, prefix));
|
|
82
|
+
throw e;
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
[loadByIdKey]: async (id) => {
|
|
86
|
+
store[callStateKey] && patchState(store, setLoading(prefix));
|
|
87
|
+
try {
|
|
88
|
+
const current = await dataService.loadById(id);
|
|
89
|
+
store[callStateKey] && patchState(store, setLoaded(prefix));
|
|
90
|
+
patchState(store, { [currentKey]: current });
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
store[callStateKey] && patchState(store, setError(e, prefix));
|
|
94
|
+
throw e;
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
[setCurrentKey]: (current) => {
|
|
98
|
+
patchState(store, { [currentKey]: current });
|
|
99
|
+
},
|
|
100
|
+
[createKey]: async (entity) => {
|
|
101
|
+
patchState(store, { [currentKey]: entity });
|
|
102
|
+
store[callStateKey] && patchState(store, setLoading(prefix));
|
|
103
|
+
try {
|
|
104
|
+
const created = await dataService.create(entity);
|
|
105
|
+
patchState(store, { [currentKey]: created });
|
|
106
|
+
patchState(store, prefix ? addEntity(created, { collection: prefix }) : addEntity(created));
|
|
107
|
+
store[callStateKey] && patchState(store, setLoaded(prefix));
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
store[callStateKey] && patchState(store, setError(e, prefix));
|
|
111
|
+
throw e;
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
[updateKey]: async (entity) => {
|
|
115
|
+
patchState(store, { [currentKey]: entity });
|
|
116
|
+
store[callStateKey] && patchState(store, setLoading(prefix));
|
|
117
|
+
try {
|
|
118
|
+
const updated = await dataService.update(entity);
|
|
119
|
+
patchState(store, { [currentKey]: updated });
|
|
120
|
+
// Why do we need this cast to Partial<Entity>?
|
|
121
|
+
const updateArg = { id: updated.id, changes: updated };
|
|
122
|
+
patchState(store, prefix ? updateEntity(updateArg, { collection: prefix }) : updateEntity(updateArg));
|
|
123
|
+
store[callStateKey] && patchState(store, setLoaded(prefix));
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
store[callStateKey] && patchState(store, setError(e, prefix));
|
|
127
|
+
throw e;
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
[deleteKey]: async (entity) => {
|
|
131
|
+
patchState(store, { [currentKey]: entity });
|
|
132
|
+
store[callStateKey] && patchState(store, setLoading(prefix));
|
|
133
|
+
try {
|
|
134
|
+
await dataService.delete(entity);
|
|
135
|
+
patchState(store, { [currentKey]: undefined });
|
|
136
|
+
patchState(store, prefix ? removeEntity(entity.id, { collection: prefix }) : removeEntity(entity.id));
|
|
137
|
+
store[callStateKey] && patchState(store, setLoaded(prefix));
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
store[callStateKey] && patchState(store, setError(e, prefix));
|
|
141
|
+
throw e;
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kYXRhLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtZGF0YS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBeUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQXNCLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SCxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsY0FBYyxFQUFZLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFnQnpHLE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBVztJQUNsQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQWdDO0lBQy9ELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDaEYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUMzRyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxVQUFVLENB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QUFZLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUMvRDtnQkFDRCxPQUFPLENBQUMsRUFBRTtvQkFDTixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQzlELE1BQU0sQ0FBQyxDQUFDO2lCQUNYO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDLENBQUMsQ0FDTCxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyVG9rZW4sIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNpZ25hbFN0b3JlRmVhdHVyZSwgcGF0Y2hTdGF0ZSwgc2lnbmFsU3RvcmVGZWF0dXJlLCB3aXRoQ29tcHV0ZWQsIHdpdGhNZXRob2RzLCB3aXRoU3RhdGUgfSBmcm9tIFwiQG5ncngvc2lnbmFsc1wiO1xyXG5pbXBvcnQgeyBDYWxsU3RhdGUsIGdldENhbGxTdGF0ZUtleXMsIHNldEVycm9yLCBzZXRMb2FkZWQsIHNldExvYWRpbmcgfSBmcm9tIFwiLi93aXRoLWNhbGwtc3RhdGVcIjtcclxuaW1wb3J0IHsgc2V0QWxsRW50aXRpZXMsIEVudGl0eUlkLCBhZGRFbnRpdHksIHVwZGF0ZUVudGl0eSwgcmVtb3ZlRW50aXR5IH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHMvZW50aXRpZXNcIjtcclxuaW1wb3J0IHsgRW50aXR5U3RhdGUsIE5hbWVkRW50aXR5U2lnbmFscyB9IGZyb20gXCJAbmdyeC9zaWduYWxzL2VudGl0aWVzL3NyYy9tb2RlbHNcIjtcclxuaW1wb3J0IHsgU3RhdGVTaWduYWwgfSBmcm9tIFwiQG5ncngvc2lnbmFscy9zcmMvc3RhdGUtc2lnbmFsXCI7XHJcbmltcG9ydCB7IEVtdHB5IH0gZnJvbSBcIi4vc2hhcmVkL2VtcHR5XCI7XHJcblxyXG5leHBvcnQgdHlwZSBGaWx0ZXIgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuZXhwb3J0IHR5cGUgRW50aXR5ID0geyBpZDogRW50aXR5SWQgfTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNlcnZpY2U8RSBleHRlbmRzIEVudGl0eSwgRiBleHRlbmRzIEZpbHRlcj4ge1xyXG4gICAgbG9hZChmaWx0ZXI6IEYpOiBQcm9taXNlPEVbXT47XHJcbiAgICBsb2FkQnlJZChpZDogRW50aXR5SWQpOiBQcm9taXNlPEU+O1xyXG4gICAgY3JlYXRlKGVudGl0eTogRSk6IFByb21pc2U8RT47XHJcbiAgICB1cGRhdGUoZW50aXR5OiBFKTogUHJvbWlzZTxFPjtcclxuICAgIGRlbGV0ZShlbnRpdHk6IEUpOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3RyID8gc3RyWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpIDogc3RyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YVNlcnZpY2VLZXlzKG9wdGlvbnM6IHsgY29sbGVjdGlvbj86IHN0cmluZyB9KSB7XHJcbiAgICBjb25zdCBmaWx0ZXJLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259RmlsdGVyYCA6ICdmaWx0ZXInO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJZHNLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgc2VsZWN0ZWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1JZHNgIDogJ3NlbGVjdGVkSWRzJztcclxuICAgIGNvbnN0IHNlbGVjdGVkRW50aXRpZXNLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgc2VsZWN0ZWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1FbnRpdGllc2AgOiAnc2VsZWN0ZWRFbnRpdGllcyc7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlRmlsdGVyS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYHVwZGF0ZSR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfUZpbHRlcmAgOiAndXBkYXRlRmlsdGVyJztcclxuICAgIGNvbnN0IHVwZGF0ZVNlbGVjdGVkS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYHVwZGF0ZVNlbGVjdGVkJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9RW50aXRpZXNgIDogJ3VwZGF0ZVNlbGVjdGVkJztcclxuICAgIGNvbnN0IGxvYWRLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgbG9hZCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfUVudGl0aWVzYCA6ICdsb2FkJztcclxuXHJcbiAgICBjb25zdCBjdXJyZW50S2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYGN1cnJlbnQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1gIDogJ2N1cnJlbnQnO1xyXG4gICAgY29uc3QgbG9hZEJ5SWRLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgbG9hZCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfUJ5SWRgIDogJ2xvYWRCeUlkJztcclxuICAgIGNvbnN0IHNldEN1cnJlbnRLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgc2V0Q3VycmVudCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfWAgOiAnc2V0Q3VycmVudCc7XHJcbiAgICBjb25zdCBjcmVhdGVLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgY3JlYXRlJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YCA6ICdjcmVhdGUnO1xyXG4gICAgY29uc3QgdXBkYXRlS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYHVwZGF0ZSR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfWAgOiAndXBkYXRlJztcclxuICAgIGNvbnN0IGRlbGV0ZUtleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGBkZWxldGUke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1gIDogJ2RlbGV0ZSc7XHJcblxyXG4gICAgLy8gVE9ETzogVGFrZSB0aGVzZSBmcm9tIEBuZ3J4L3NpZ25hbHMvZW50aXRpZXMsIHdoZW4gdGhleSBhcmUgZXhwb3J0ZWRcclxuICAgIGNvbnN0IGVudGl0aWVzS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUVudGl0aWVzYCA6ICdlbnRpdGllcyc7XHJcbiAgICBjb25zdCBlbnRpdHlNYXBLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgJHtvcHRpb25zLmNvbGxlY3Rpb259RW50aXR5TWFwYCA6ICdlbnRpdHlNYXAnO1xyXG4gICAgY29uc3QgaWRzS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUlkc2AgOiAnaWRzJztcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpbHRlcktleSxcclxuICAgICAgICBzZWxlY3RlZElkc0tleSxcclxuICAgICAgICBzZWxlY3RlZEVudGl0aWVzS2V5LFxyXG4gICAgICAgIHVwZGF0ZUZpbHRlcktleSxcclxuICAgICAgICB1cGRhdGVTZWxlY3RlZEtleSxcclxuICAgICAgICBsb2FkS2V5LFxyXG4gICAgICAgIGVudGl0aWVzS2V5LFxyXG4gICAgICAgIGVudGl0eU1hcEtleSxcclxuICAgICAgICBpZHNLZXksXHJcblxyXG4gICAgICAgIGN1cnJlbnRLZXksXHJcbiAgICAgICAgbG9hZEJ5SWRLZXksXHJcbiAgICAgICAgc2V0Q3VycmVudEtleSxcclxuICAgICAgICBjcmVhdGVLZXksXHJcbiAgICAgICAgdXBkYXRlS2V5LFxyXG4gICAgICAgIGRlbGV0ZUtleVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgTmFtZWREYXRhU2VydmljZVN0YXRlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXIsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+ID1cclxuICAgIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0t9RmlsdGVyYF06IEY7XHJcbiAgICB9ICYge1xyXG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYHNlbGVjdGVkJHtDYXBpdGFsaXplPEs+fUlkc2BdOiBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+O1xyXG4gICAgfSAmIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBjdXJyZW50JHtDYXBpdGFsaXplPEs+fWBdOiBFO1xyXG4gICAgfVxyXG5cclxuZXhwb3J0IHR5cGUgRGF0YVNlcnZpY2VTdGF0ZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPiA9IHtcclxuICAgIGZpbHRlcjogRjtcclxuICAgIHNlbGVjdGVkSWRzOiBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+O1xyXG4gICAgY3VycmVudDogRTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgTmFtZWREYXRhU2VydmljZVNpZ25hbHM8RSBleHRlbmRzIEVudGl0eSwgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4gPVxyXG4gICAge1xyXG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYHNlbGVjdGVkJHtDYXBpdGFsaXplPEs+fUVudGl0aWVzYF06IFNpZ25hbDxFW10+O1xyXG4gICAgfVxyXG5cclxuZXhwb3J0IHR5cGUgRGF0YVNlcnZpY2VTaWduYWxzPEUgZXh0ZW5kcyBFbnRpdHk+ID1cclxuICAgIHtcclxuICAgICAgICBzZWxlY3RlZEVudGl0aWVzOiBTaWduYWw8RVtdPjtcclxuICAgIH1cclxuXHJcbmV4cG9ydCB0eXBlIE5hbWVkRGF0YVNlcnZpY2VNZXRob2RzPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXIsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+ID1cclxuICAgIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGB1cGRhdGUke0NhcGl0YWxpemU8Sz59RmlsdGVyYF06IChmaWx0ZXI6IEYpID0+IHZvaWQ7XHJcbiAgICB9ICZcclxuICAgIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGB1cGRhdGVTZWxlY3RlZCR7Q2FwaXRhbGl6ZTxLPn1FbnRpdGllc2BdOiAoaWQ6IEVudGl0eUlkLCBzZWxlY3RlZDogYm9vbGVhbikgPT4gdm9pZDtcclxuICAgIH0gJlxyXG4gICAge1xyXG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYGxvYWQke0NhcGl0YWxpemU8Sz59RW50aXRpZXNgXTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcclxuICAgIH0gJlxyXG5cclxuICAgIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBzZXRDdXJyZW50JHtDYXBpdGFsaXplPEs+fWBdOiAoZW50aXR5OiBFKSA9PiB2b2lkO1xyXG4gICAgfSAmXHJcbiAgICB7XHJcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgbG9hZCR7Q2FwaXRhbGl6ZTxLPn1CeUlkYF06IChpZDogRW50aXR5SWQpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9ICZcclxuICAgIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBjcmVhdGUke0NhcGl0YWxpemU8Sz59YF06IChlbnRpdHk6IEUpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9ICZcclxuICAgIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGB1cGRhdGUke0NhcGl0YWxpemU8Sz59YF06IChlbnRpdHk6IEUpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9ICZcclxuICAgIHtcclxuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBkZWxldGUke0NhcGl0YWxpemU8Sz59YF06IChlbnRpdHk6IEUpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICB9O1xyXG5cclxuXHJcbmV4cG9ydCB0eXBlIERhdGFTZXJ2aWNlTWV0aG9kczxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPiA9XHJcbiAgICB7XHJcbiAgICAgICAgdXBkYXRlRmlsdGVyOiAoZmlsdGVyOiBGKSA9PiB2b2lkO1xyXG4gICAgICAgIHVwZGF0ZVNlbGVjdGVkOiAoaWQ6IEVudGl0eUlkLCBzZWxlY3RlZDogYm9vbGVhbikgPT4gdm9pZDtcclxuICAgICAgICBsb2FkOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAgICAgICBzZXRDdXJyZW50KGVudGl0eTogRSk6IHZvaWQ7XHJcbiAgICAgICAgbG9hZEJ5SWQoaWQ6IEVudGl0eUlkKTogUHJvbWlzZTx2b2lkPjtcclxuICAgICAgICBjcmVhdGUoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPjtcclxuICAgICAgICB1cGRhdGUoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPjtcclxuICAgICAgICBkZWxldGUoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIH1cclxuXHJcbmV4cG9ydCB0eXBlIEVtcHR5ID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gd2l0aERhdGFTZXJ2aWNlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXIsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM6IHsgZGF0YVNlcnZpY2VUeXBlOiBQcm92aWRlclRva2VuPERhdGFTZXJ2aWNlPEUsIEY+PiwgZmlsdGVyOiBGLCBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uIH0pOiBTaWduYWxTdG9yZUZlYXR1cmU8XHJcbiAgICB7XHJcbiAgICAgICAgc3RhdGU6IEVtdHB5LFxyXG4gICAgICAgIC8vIFRoZXNlIGFsdGVybmF0aXZlcyBicmVhayB0eXBlIGluZmVyZW5jZTogXHJcbiAgICAgICAgLy8gc3RhdGU6IHsgY2FsbFN0YXRlOiBDYWxsU3RhdGUgfSAmIE5hbWVkRW50aXR5U3RhdGU8RSwgQ29sbGVjdGlvbj4sXHJcbiAgICAgICAgLy8gc3RhdGU6IE5hbWVkRW50aXR5U3RhdGU8RSwgQ29sbGVjdGlvbj4sXHJcblxyXG4gICAgICAgIHNpZ25hbHM6IE5hbWVkRW50aXR5U2lnbmFsczxFLCBDb2xsZWN0aW9uPixcclxuICAgICAgICBtZXRob2RzOiBFbXRweSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgc3RhdGU6IE5hbWVkRGF0YVNlcnZpY2VTdGF0ZTxFLCBGLCBDb2xsZWN0aW9uPlxyXG4gICAgICAgIHNpZ25hbHM6IE5hbWVkRGF0YVNlcnZpY2VTaWduYWxzPEUsIENvbGxlY3Rpb24+XHJcbiAgICAgICAgbWV0aG9kczogTmFtZWREYXRhU2VydmljZU1ldGhvZHM8RSwgRiwgQ29sbGVjdGlvbj5cclxuICAgIH1cclxuPjtcclxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEYXRhU2VydmljZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPihvcHRpb25zOiB7IGRhdGFTZXJ2aWNlVHlwZTogUHJvdmlkZXJUb2tlbjxEYXRhU2VydmljZTxFLCBGPj4sIGZpbHRlcjogRiB9KTogU2lnbmFsU3RvcmVGZWF0dXJlPFxyXG4gICAge1xyXG4gICAgICAgIHN0YXRlOiB7IGNhbGxTdGF0ZTogQ2FsbFN0YXRlIH0gJiBFbnRpdHlTdGF0ZTxFPlxyXG4gICAgICAgIHNpZ25hbHM6IEVtdHB5LFxyXG4gICAgICAgIG1ldGhvZHM6IEVtdHB5LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBzdGF0ZTogRGF0YVNlcnZpY2VTdGF0ZTxFLCBGPlxyXG4gICAgICAgIHNpZ25hbHM6IERhdGFTZXJ2aWNlU2lnbmFsczxFPlxyXG4gICAgICAgIG1ldGhvZHM6IERhdGFTZXJ2aWNlTWV0aG9kczxFLCBGPlxyXG4gICAgfT47XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG5leHBvcnQgZnVuY3Rpb24gd2l0aERhdGFTZXJ2aWNlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXIsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM6IHsgZGF0YVNlcnZpY2VUeXBlOiBQcm92aWRlclRva2VuPERhdGFTZXJ2aWNlPEUsIEY+PiwgZmlsdGVyOiBGLCBjb2xsZWN0aW9uPzogQ29sbGVjdGlvbiB9KTogU2lnbmFsU3RvcmVGZWF0dXJlPGFueSwgYW55PiB7XHJcbiAgICBjb25zdCB7IGRhdGFTZXJ2aWNlVHlwZSwgZmlsdGVyLCBjb2xsZWN0aW9uOiBwcmVmaXggfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgICAgZW50aXRpZXNLZXksXHJcbiAgICAgICAgZmlsdGVyS2V5LFxyXG4gICAgICAgIGxvYWRLZXksXHJcbiAgICAgICAgc2VsZWN0ZWRFbnRpdGllc0tleSxcclxuICAgICAgICBzZWxlY3RlZElkc0tleSxcclxuICAgICAgICB1cGRhdGVGaWx0ZXJLZXksXHJcbiAgICAgICAgdXBkYXRlU2VsZWN0ZWRLZXksXHJcblxyXG4gICAgICAgIGN1cnJlbnRLZXksXHJcbiAgICAgICAgY3JlYXRlS2V5LFxyXG4gICAgICAgIHVwZGF0ZUtleSxcclxuICAgICAgICBkZWxldGVLZXksXHJcbiAgICAgICAgbG9hZEJ5SWRLZXksXHJcbiAgICAgICAgc2V0Q3VycmVudEtleVxyXG4gICAgfSA9IGdldERhdGFTZXJ2aWNlS2V5cyhvcHRpb25zKTtcclxuXHJcbiAgICBjb25zdCB7IGNhbGxTdGF0ZUtleSB9ID0gZ2V0Q2FsbFN0YXRlS2V5cyh7IGNvbGxlY3Rpb246IHByZWZpeCB9KTtcclxuXHJcbiAgICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxyXG4gICAgICAgIHdpdGhTdGF0ZSgoKSA9PiAoe1xyXG4gICAgICAgICAgICBbZmlsdGVyS2V5XTogZmlsdGVyLFxyXG4gICAgICAgICAgICBbc2VsZWN0ZWRJZHNLZXldOiB7fSBhcyBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+LFxyXG4gICAgICAgICAgICBbY3VycmVudEtleV06IHVuZGVmaW5lZCBhcyBFIHwgdW5kZWZpbmVkXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICAgIHdpdGhDb21wdXRlZCgoc3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVudGl0aWVzID0gc3RvcmVbZW50aXRpZXNLZXldIGFzIFNpZ25hbDxFW10+O1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZElkcyA9IHN0b3JlW3NlbGVjdGVkSWRzS2V5XSBhcyBTaWduYWw8UmVjb3JkPEVudGl0eUlkLCBib29sZWFuPj47XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkRW50aXRpZXNLZXldOiBjb21wdXRlZCgoKSA9PiBlbnRpdGllcygpLmZpbHRlcihlID0+IHNlbGVjdGVkSWRzKClbZS5pZF0pKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgd2l0aE1ldGhvZHMoKHN0b3JlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIFN0YXRlU2lnbmFsPG9iamVjdD4pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YVNlcnZpY2UgPSBpbmplY3QoZGF0YVNlcnZpY2VUeXBlKVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgW3VwZGF0ZUZpbHRlcktleV06IChmaWx0ZXI6IEYpOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtmaWx0ZXJLZXldOiBmaWx0ZXIgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgW3VwZGF0ZVNlbGVjdGVkS2V5XTogKGlkOiBFbnRpdHlJZCwgc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCAoc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRJZHNLZXldOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZVtzZWxlY3RlZElkc0tleV0gYXMgUmVjb3JkPEVudGl0eUlkLCBib29sZWFuPixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF06IHNlbGVjdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFtsb2FkS2V5XTogYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHN0b3JlW2ZpbHRlcktleV0gYXMgU2lnbmFsPEY+O1xyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGluZyhwcmVmaXgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YVNlcnZpY2UubG9hZChmaWx0ZXIoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHByZWZpeCA/IHNldEFsbEVudGl0aWVzKHJlc3VsdCwgeyBjb2xsZWN0aW9uOiBwcmVmaXggfSkgOiBzZXRBbGxFbnRpdGllcyhyZXN1bHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkZWQocHJlZml4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0RXJyb3IoZSwgcHJlZml4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFtsb2FkQnlJZEtleV06IGFzeW5jIChpZDogRW50aXR5SWQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBkYXRhU2VydmljZS5sb2FkQnlJZChpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogY3VycmVudCB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgW3NldEN1cnJlbnRLZXldOiAoY3VycmVudDogRSk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiBjdXJyZW50IH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFtjcmVhdGVLZXldOiBhc3luYyAoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGVudGl0eSB9KTtcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBkYXRhU2VydmljZS5jcmVhdGUoZW50aXR5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGNyZWF0ZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHByZWZpeCA/IGFkZEVudGl0eShjcmVhdGVkLCB7IGNvbGxlY3Rpb246IHByZWZpeCB9KSA6IGFkZEVudGl0eShjcmVhdGVkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldEVycm9yKGUsIHByZWZpeCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBbdXBkYXRlS2V5XTogYXN5bmMgKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiBlbnRpdHkgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkaW5nKHByZWZpeCkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgZGF0YVNlcnZpY2UudXBkYXRlKGVudGl0eSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiB1cGRhdGVkIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXaHkgZG8gd2UgbmVlZCB0aGlzIGNhc3QgdG8gUGFydGlhbDxFbnRpdHk+P1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVBcmcgPSB7IGlkOiB1cGRhdGVkLmlkLCBjaGFuZ2VzOiB1cGRhdGVkIGFzIFBhcnRpYWw8RW50aXR5PiB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBwcmVmaXggPyB1cGRhdGVFbnRpdHkodXBkYXRlQXJnLCB7IGNvbGxlY3Rpb246IHByZWZpeCB9KSA6IHVwZGF0ZUVudGl0eSh1cGRhdGVBcmcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkZWQocHJlZml4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0RXJyb3IoZSwgcHJlZml4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFtkZWxldGVLZXldOiBhc3luYyAoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGVudGl0eSB9KTtcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGRhdGFTZXJ2aWNlLmRlbGV0ZShlbnRpdHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogdW5kZWZpbmVkIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBwcmVmaXggPyByZW1vdmVFbnRpdHkoZW50aXR5LmlkLCB7IGNvbGxlY3Rpb246IHByZWZpeCB9KSA6IHJlbW92ZUVudGl0eShlbnRpdHkuaWQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkZWQocHJlZml4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0RXJyb3IoZSwgcHJlZml4KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxufSJdfQ==
|
|
@@ -76,4 +76,4 @@ export const patchState = (state, action, ...rest) => {
|
|
|
76
76
|
currentActionNames.add(action);
|
|
77
77
|
return originalPatchState(state, ...rest);
|
|
78
78
|
};
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kZXZ0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvd2l0aC1kZXZ0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxJQUFJLGtCQUFrQixHQUVqQyxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBaUJuRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQWtDLEVBQUUsQ0FBQyxDQUFDO0FBRWxFLElBQUksa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQUUzQyxJQUFJLDBCQUEwQixHQUFHLEtBQUssQ0FBQztBQUV2QyxTQUFTLG1CQUFtQjtJQUMxQixNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ1YsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLE9BQU87U0FDUjtRQUVELE1BQU0sTUFBTSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sU0FBUyxHQUE0QixFQUFFLENBQUM7UUFDOUMsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLEVBQUU7WUFDekIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztTQUMzQjtRQUVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDOUQsa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUV2QyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxHQUFZLEVBQUUsTUFBYztJQUN0RCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRTtRQUNuRCxPQUFRLEdBQThCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDaEQ7QUFDSCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBYztJQUNwQyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0tBQzdDO0lBRUQsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUtELElBQUksVUFBdUMsQ0FBQztBQUU1Qzs7R0FFRztBQUNILE1BQU0sVUFBVSxLQUFLO0lBQ25CLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDdkIsMEJBQTBCLEdBQUcsS0FBSyxDQUFDO0lBQ25DLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBWTtJQUVaLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNmLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksUUFBUSxFQUFFO1lBQ1osT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQztRQUN2RCxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDOUIsSUFBSSxFQUFFLG1CQUFtQjthQUMxQixDQUFDLENBQUM7U0FDSjtRQUVELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLEdBQUcsS0FBSztZQUNSLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVztTQUNwQixDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQywwQkFBMEIsRUFBRTtZQUMvQixtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLDBCQUEwQixHQUFHLElBQUksQ0FBQztTQUNuQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVNELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRTtJQUM1RCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIHBhdGNoU3RhdGUgYXMgb3JpZ2luYWxQYXRjaFN0YXRlLFxyXG4gIFNpZ25hbFN0b3JlRmVhdHVyZSxcclxufSBmcm9tICdAbmdyeC9zaWduYWxzJztcclxuaW1wb3J0IHsgU2lnbmFsU3RvcmVGZWF0dXJlUmVzdWx0IH0gZnJvbSAnQG5ncngvc2lnbmFscy9zcmMvc2lnbmFsLXN0b3JlLW1vZGVscyc7XHJcbmltcG9ydCB7IGVmZmVjdCwgaW5qZWN0LCBQTEFURk9STV9JRCwgc2lnbmFsLCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICBfX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fOlxyXG4gICAgICB8IHtcclxuICAgICAgICAgIGNvbm5lY3Q6IChvcHRpb25zOiB7IG5hbWU6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgICAgIHNlbmQ6IChhY3Rpb246IEFjdGlvbiwgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkO1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgIHwgdW5kZWZpbmVkO1xyXG4gIH1cclxufVxyXG5cclxudHlwZSBFbXB0eUZlYXR1cmVSZXN1bHQgPSB7IHN0YXRlOiB7fTsgc2lnbmFsczoge307IG1ldGhvZHM6IHt9IH07XHJcbmV4cG9ydCB0eXBlIEFjdGlvbiA9IHsgdHlwZTogc3RyaW5nIH07XHJcblxyXG5jb25zdCBzdG9yZVJlZ2lzdHJ5ID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4+KHt9KTtcclxuXHJcbmxldCBjdXJyZW50QWN0aW9uTmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHJcbmxldCBzeW5jaHJvbml6YXRpb25Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cclxuZnVuY3Rpb24gaW5pdFN5bmNocm9uaXphdGlvbigpIHtcclxuICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdG9yZXMgPSBzdG9yZVJlZ2lzdHJ5KCk7XHJcbiAgICBjb25zdCByb290U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gc3RvcmVzKSB7XHJcbiAgICAgIGNvbnN0IHN0b3JlID0gc3RvcmVzW25hbWVdO1xyXG4gICAgICByb290U3RhdGVbbmFtZV0gPSBzdG9yZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5hbWVzID0gQXJyYXkuZnJvbShjdXJyZW50QWN0aW9uTmFtZXMpO1xyXG4gICAgY29uc3QgdHlwZSA9IG5hbWVzLmxlbmd0aCA/IG5hbWVzLmpvaW4oJywgJykgOiAnU3RvcmUgVXBkYXRlJztcclxuICAgIGN1cnJlbnRBY3Rpb25OYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cclxuICAgIGNvbm5lY3Rpb24uc2VuZCh7IHR5cGUgfSwgcm9vdFN0YXRlKTtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VmFsdWVGcm9tU3ltYm9sKG9iajogdW5rbm93biwgc3ltYm9sOiBzeW1ib2wpIHtcclxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICYmIHN5bWJvbCBpbiBvYmopIHtcclxuICAgIHJldHVybiAob2JqIGFzIHsgW2tleTogc3ltYm9sXTogYW55IH0pW3N5bWJvbF07XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRTdG9yZVNpZ25hbChzdG9yZTogdW5rbm93bik6IFNpZ25hbDx1bmtub3duPiB7XHJcbiAgY29uc3QgW3NpZ25hbFN0YXRlS2V5XSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc3RvcmUpO1xyXG4gIGlmICghc2lnbmFsU3RhdGVLZXkpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZpbmQgU3RhdGUgU2lnbmFsJyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZ2V0VmFsdWVGcm9tU3ltYm9sKHN0b3JlLCBzaWduYWxTdGF0ZUtleSk7XHJcbn1cclxuXHJcbnR5cGUgQ29ubmVjdFJlc3BvbnNlID0ge1xyXG4gIHNlbmQ6IChhY3Rpb246IEFjdGlvbiwgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkO1xyXG59O1xyXG5sZXQgY29ubmVjdGlvbjogQ29ubmVjdFJlc3BvbnNlIHwgdW5kZWZpbmVkO1xyXG5cclxuLyoqXHJcbiAqIHJlcXVpcmVkIGZvciB0ZXN0aW5nLiBpcyBub3QgZXhwb3J0ZWQgZHVyaW5nIGJ1aWxkXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcmVzZXQoKSB7XHJcbiAgY29ubmVjdGlvbiA9IHVuZGVmaW5lZDtcclxuICBzeW5jaHJvbml6YXRpb25Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHN0b3JlUmVnaXN0cnkuc2V0KHt9KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSBuYW1lIHN0b3JlJ3MgbmFtZSBhcyBpdCBzaG91bGQgYXBwZWFyIGluIHRoZSBEZXZUb29sc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEZXZ0b29sczxJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdD4oXHJcbiAgbmFtZTogc3RyaW5nXHJcbik6IFNpZ25hbFN0b3JlRmVhdHVyZTxJbnB1dCwgRW1wdHlGZWF0dXJlUmVzdWx0PiB7XHJcbiAgcmV0dXJuIChzdG9yZSkgPT4ge1xyXG4gICAgY29uc3QgaXNTZXJ2ZXIgPSBpc1BsYXRmb3JtU2VydmVyKGluamVjdChQTEFURk9STV9JRCkpO1xyXG4gICAgaWYgKGlzU2VydmVyKSB7XHJcbiAgICAgIHJldHVybiBzdG9yZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBleHRlbnNpb25zID0gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX187XHJcbiAgICBpZiAoIWV4dGVuc2lvbnMpIHtcclxuICAgICAgcmV0dXJuIHN0b3JlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29ubmVjdGlvbikge1xyXG4gICAgICBjb25uZWN0aW9uID0gZXh0ZW5zaW9ucy5jb25uZWN0KHtcclxuICAgICAgICBuYW1lOiAnTmdSeCBTaWduYWwgU3RvcmUnLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdG9yZVNpZ25hbCA9IGdldFN0b3JlU2lnbmFsKHN0b3JlKTtcclxuICAgIHN0b3JlUmVnaXN0cnkudXBkYXRlKCh2YWx1ZSkgPT4gKHtcclxuICAgICAgLi4udmFsdWUsXHJcbiAgICAgIFtuYW1lXTogc3RvcmVTaWduYWwsXHJcbiAgICB9KSk7XHJcblxyXG4gICAgaWYgKCFzeW5jaHJvbml6YXRpb25Jbml0aWFsaXplZCkge1xyXG4gICAgICBpbml0U3luY2hyb25pemF0aW9uKCk7XHJcbiAgICAgIHN5bmNocm9uaXphdGlvbkluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RvcmU7XHJcbiAgfTtcclxufVxyXG5cclxudHlwZSBQYXRjaEZuID0gdHlwZW9mIG9yaWdpbmFsUGF0Y2hTdGF0ZSBleHRlbmRzIChcclxuICBhcmcxOiBpbmZlciBGaXJzdCxcclxuICAuLi5hcmdzOiBpbmZlciBSZXN0XHJcbikgPT4gaW5mZXIgUmV0dXJuZXJcclxuICA/IChzdGF0ZTogRmlyc3QsIGFjdGlvbjogc3RyaW5nLCAuLi5yZXN0OiBSZXN0KSA9PiBSZXR1cm5lclxyXG4gIDogbmV2ZXI7XHJcblxyXG5leHBvcnQgY29uc3QgcGF0Y2hTdGF0ZTogUGF0Y2hGbiA9IChzdGF0ZSwgYWN0aW9uLCAuLi5yZXN0KSA9PiB7XHJcbiAgY3VycmVudEFjdGlvbk5hbWVzLmFkZChhY3Rpb24pO1xyXG4gIHJldHVybiBvcmlnaW5hbFBhdGNoU3RhdGUoc3RhdGUsIC4uLnJlc3QpO1xyXG59O1xyXG4iXX0=
|
|
@@ -92,4 +92,4 @@ export function withRedux(redux) {
|
|
|
92
92
|
};
|
|
93
93
|
};
|
|
94
94
|
}
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZWR1eC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvd2l0aC1yZWR1eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQU96RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQXlDOUQsTUFBTSxVQUFVLE9BQU87SUFDckIsT0FBTyxFQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUEwQjVCLFNBQVMsZUFBZSxDQUN0QixhQUFtQixFQUNuQixlQUdDLEVBQ0QsZUFBa0UsRUFDbEUsS0FBYztJQUVkLE1BQU0sU0FBUyxHQUE2QixFQUFFLENBQUM7SUFFL0MsS0FBSyxNQUFNLElBQUksSUFBSSxhQUFhLEVBQUU7UUFDaEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFnQixFQUFFLEVBQUU7WUFDcEMsTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxPQUFPLEVBQUU7Z0JBQ1YsT0FBc0QsQ0FDckQsV0FBc0IsRUFDdEIsS0FBSyxDQUNOLENBQUM7YUFDSDtZQUNELE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFJLGFBQWEsRUFBRTtnQkFDaEIsYUFBNkMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDbEU7WUFDRCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDLENBQUM7UUFDRixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcs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QUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFNUQsT0FBTztRQUNMLE9BQU8sRUFBRSxnQkFBOEI7UUFDdkMsYUFBYSxFQUFFLGFBQWE7S0FDN0IsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUt2QixLQUlEO0lBSUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2YsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxZQUFZLENBQzdDLEtBQUssQ0FBQyxPQUFPLEVBQ2IsS0FBSyxDQUFDLE9BQTZDLEVBQ25ELEtBQUssQ0FBQyxPQUFvQyxFQUMxQyxLQUFLLENBQ04sQ0FBQztRQUNGLE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNpZ25hbFN0b3JlRmVhdHVyZSB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuaW1wb3J0IHtcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxuICBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG59IGZyb20gJ0BuZ3J4L3NpZ25hbHMvc3JjL3NpZ25hbC1zdG9yZS1tb2RlbHMnO1xuaW1wb3J0IHsgU3RhdGVTaWduYWwgfSBmcm9tICdAbmdyeC9zaWduYWxzL3NyYy9zdGF0ZS1zaWduYWwnO1xuaW1wb3J0IHsgYXNzZXJ0QWN0aW9uRm5TcGVjcyB9IGZyb20gJy4vYXNzZXJ0aW9ucy9hc3NlcnRpb25zJztcbmltcG9ydCB7IGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKiogQWN0aW9ucyAqKi9cblxudHlwZSBQYXlsb2FkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbnR5cGUgQWN0aW9uRm48XG4gIFR5cGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIEFjdGlvblBheWxvYWQgZXh0ZW5kcyBQYXlsb2FkID0gUGF5bG9hZFxuPiA9ICgocGF5bG9hZDogQWN0aW9uUGF5bG9hZCkgPT4gQWN0aW9uUGF5bG9hZCAmIHsgdHlwZTogVHlwZSB9KSAmIHtcbiAgdHlwZTogVHlwZTtcbn07XG5cbnR5cGUgQWN0aW9uRm5zID0gUmVjb3JkPHN0cmluZywgQWN0aW9uRm4+O1xuXG5leHBvcnQgdHlwZSBBY3Rpb25zRm5TcGVjcyA9IFJlY29yZDxzdHJpbmcsIFBheWxvYWQ+O1xuXG50eXBlIEFjdGlvbkZuQ3JlYXRvcjxTcGVjIGV4dGVuZHMgQWN0aW9uc0ZuU3BlY3M+ID0ge1xuICBbQWN0aW9uTmFtZSBpbiBrZXlvZiBTcGVjXTogKChcbiAgICBwYXlsb2FkOiBTcGVjW0FjdGlvbk5hbWVdXG4gICkgPT4gU3BlY1tBY3Rpb25OYW1lXSAmIHsgdHlwZTogQWN0aW9uTmFtZSB9KSAmIHsgdHlwZTogQWN0aW9uTmFtZSAmIHN0cmluZyB9O1xufTtcblxudHlwZSBBY3Rpb25GblBheWxvYWQ8QWN0aW9uPiA9IEFjdGlvbiBleHRlbmRzIChwYXlsb2FkOiBpbmZlciBQYXlsb2FkKSA9PiB2b2lkXG4gID8gUGF5bG9hZFxuICA6IG5ldmVyO1xuXG50eXBlIEFjdGlvbkZuc0NyZWF0b3I8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPiA9IFNwZWMgZXh0ZW5kcyB7XG4gIHByaXZhdGU6IFJlY29yZDxzdHJpbmcsIFBheWxvYWQ+O1xuICBwdWJsaWM6IFJlY29yZDxzdHJpbmcsIFBheWxvYWQ+O1xufVxuICA/IEFjdGlvbkZuQ3JlYXRvcjxTcGVjWydwcml2YXRlJ10+ICYgQWN0aW9uRm5DcmVhdG9yPFNwZWNbJ3B1YmxpYyddPlxuICA6IEFjdGlvbkZuQ3JlYXRvcjxTcGVjPjtcblxudHlwZSBQdWJsaWNBY3Rpb25GbnM8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPiA9IFNwZWMgZXh0ZW5kcyB7XG4gIHB1YmxpYzogUmVjb3JkPHN0cmluZywgUGF5bG9hZD47XG59XG4gID8gQWN0aW9uRm5DcmVhdG9yPFNwZWNbJ3B1YmxpYyddPlxuICA6IEFjdGlvbkZuQ3JlYXRvcjxTcGVjPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBheWxvYWQ8VHlwZSBleHRlbmRzIFBheWxvYWQ+KCk6IFR5cGUge1xuICByZXR1cm4ge30gYXMgVHlwZTtcbn1cblxuZXhwb3J0IGNvbnN0IG5vUGF5bG9hZCA9IHt9O1xuXG4vKiogUmVkdWNlciAqKi9cblxudHlwZSBSZWR1Y2VyRnVuY3Rpb248UmVkdWNlckFjdGlvbiwgU3RhdGU+ID0gKFxuICBhY3Rpb246IEFjdGlvbkZuUGF5bG9hZDxSZWR1Y2VyQWN0aW9uPixcbiAgc3RhdGU6IFN0YXRlXG4pID0+IHZvaWQ7XG5cbnR5cGUgUmVkdWNlckZhY3Rvcnk8U3RhdGVBY3Rpb25GbnMgZXh0ZW5kcyBBY3Rpb25GbnMsIFN0YXRlPiA9IChcbiAgYWN0aW9uczogU3RhdGVBY3Rpb25GbnMsXG4gIG9uOiA8UmVkdWNlckFjdGlvbiBleHRlbmRzIHsgdHlwZTogc3RyaW5nIH0+KFxuICAgIGFjdGlvbjogUmVkdWNlckFjdGlvbixcbiAgICByZWR1Y2VyRm46IFJlZHVjZXJGdW5jdGlvbjxBY3Rpb25GblBheWxvYWQ8UmVkdWNlckFjdGlvbj4sIFN0YXRlPlxuICApID0+IHZvaWRcbikgPT4gdm9pZDtcblxuLyoqIEVmZmVjdCAqKi9cblxudHlwZSBFZmZlY3RzRmFjdG9yeTxTdGF0ZUFjdGlvbkZucyBleHRlbmRzIEFjdGlvbkZucz4gPSAoXG4gIGFjdGlvbnM6IFN0YXRlQWN0aW9uRm5zLFxuICBjcmVhdGU6IDxFZmZlY3RBY3Rpb24gZXh0ZW5kcyB7IHR5cGU6IHN0cmluZyB9PihcbiAgICBhY3Rpb246IEVmZmVjdEFjdGlvblxuICApID0+IE9ic2VydmFibGU8QWN0aW9uRm5QYXlsb2FkPEVmZmVjdEFjdGlvbj4+XG4pID0+IFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGU8dW5rbm93bj4+O1xuXG5mdW5jdGlvbiBjcmVhdGVBY3Rpb25GbnM8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPihcbiAgYWN0aW9uRm5TcGVjczogU3BlYyxcbiAgcmVkdWNlclJlZ2lzdHJ5OiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIChwYXlsb2FkOiBBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4sIHN0YXRlOiB1bmtub3duKSA9PiB2b2lkXG4gID4sXG4gIGVmZmVjdHNSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgU3ViamVjdDxBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4+PixcbiAgc3RhdGU6IHVua25vd25cbikge1xuICBjb25zdCBhY3Rpb25GbnM6IFJlY29yZDxzdHJpbmcsIEFjdGlvbkZuPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgdHlwZSBpbiBhY3Rpb25GblNwZWNzKSB7XG4gICAgY29uc3QgYWN0aW9uRm4gPSAocGF5bG9hZDogUGF5bG9hZCkgPT4ge1xuICAgICAgY29uc3QgZnVsbFBheWxvYWQgPSB7IC4uLnBheWxvYWQsIHR5cGUgfTtcbiAgICAgIGNvbnN0IHJlZHVjZXIgPSByZWR1Y2VyUmVnaXN0cnlbdHlwZV07XG4gICAgICBpZiAocmVkdWNlcikge1xuICAgICAgICAocmVkdWNlciBhcyAocGF5bG9hZDogdW5rbm93biwgc3RhdGU6IHVua25vd24pID0+IHZvaWQpKFxuICAgICAgICAgIGZ1bGxQYXlsb2FkIGFzIHVua25vd24sXG4gICAgICAgICAgc3RhdGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVmZmVjdFN1YmplY3QgPSBlZmZlY3RzUmVnaXN0cnlbdHlwZV07XG4gICAgICBpZiAoZWZmZWN0U3ViamVjdCkge1xuICAgICAgICAoZWZmZWN0U3ViamVjdCBhcyB1bmtub3duIGFzIFN1YmplY3Q8dW5rbm93bj4pLm5leHQoZnVsbFBheWxvYWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bGxQYXlsb2FkO1xuICAgIH07XG4gICAgYWN0aW9uRm4udHlwZSA9IHR5cGUudG9TdHJpbmcoKTtcbiAgICBhY3Rpb25GbnNbdHlwZV0gPSBhY3Rpb25GbjtcbiAgfVxuXG4gIHJldHVybiBhY3Rpb25GbnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVB1YmxpY0FuZEFsbEFjdGlvbnNGbnM8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPihcbiAgYWN0aW9uRm5TcGVjczogU3BlYyxcbiAgcmVkdWNlclJlZ2lzdHJ5OiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIChwYXlsb2FkOiBBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4sIHN0YXRlOiB1bmtub3duKSA9PiB2b2lkXG4gID4sXG4gIGVmZmVjdHNSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgU3ViamVjdDxBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4+PixcbiAgc3RhdGU6IHVua25vd25cbik6IHsgYWxsOiBBY3Rpb25GbnM7IHB1YmxpY3M6IEFjdGlvbkZucyB9IHtcbiAgaWYgKCdwdWJsaWMnIGluIGFjdGlvbkZuU3BlY3MgfHwgJ3ByaXZhdGUnIGluIGFjdGlvbkZuU3BlY3MpIHtcbiAgICBjb25zdCBwcml2YXRlcyA9IGFjdGlvbkZuU3BlY3NbJ3ByaXZhdGUnXSB8fCB7fTtcbiAgICBjb25zdCBwdWJsaWNzID0gYWN0aW9uRm5TcGVjc1sncHVibGljJ10gfHwge307XG5cbiAgICBhc3NlcnRBY3Rpb25GblNwZWNzKHByaXZhdGVzKTtcbiAgICBhc3NlcnRBY3Rpb25GblNwZWNzKHB1YmxpY3MpO1xuXG4gICAgY29uc3QgcHJpdmF0ZUFjdGlvbkZucyA9IGNyZWF0ZUFjdGlvbkZucyhcbiAgICAgIHByaXZhdGVzLFxuICAgICAgcmVkdWNlclJlZ2lzdHJ5LFxuICAgICAgZWZmZWN0c1JlZ2lzdHJ5LFxuICAgICAgc3RhdGVcbiAgICApO1xuICAgIGNvbnN0IHB1YmxpY0FjdGlvbkZucyA9IGNyZWF0ZUFjdGlvbkZucyhcbiAgICAgIHB1YmxpY3MsXG4gICAgICByZWR1Y2VyUmVnaXN0cnksXG4gICAgICBlZmZlY3RzUmVnaXN0cnksXG4gICAgICBzdGF0ZVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWxsOiB7IC4uLnByaXZhdGVBY3Rpb25GbnMsIC4uLnB1YmxpY0FjdGlvbkZucyB9LFxuICAgICAgcHVibGljczogcHVibGljQWN0aW9uRm5zLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBhY3Rpb25GbnMgPSBjcmVhdGVBY3Rpb25GbnMoXG4gICAgYWN0aW9uRm5TcGVjcyxcbiAgICByZWR1Y2VyUmVnaXN0cnksXG4gICAgZWZmZWN0c1JlZ2lzdHJ5LFxuICAgIHN0YXRlXG4gICk7XG5cbiAgcmV0dXJuIHsgYWxsOiBhY3Rpb25GbnMsIHB1YmxpY3M6IGFjdGlvbkZucyB9O1xufVxuXG5mdW5jdGlvbiBmaWxsUmVkdWNlclJlZ2lzdHJ5KFxuICByZWR1Y2VyOiBSZWR1Y2VyRmFjdG9yeTxBY3Rpb25GbnMsIHVua25vd24+LFxuICBhY3Rpb25GbnM6IEFjdGlvbkZucyxcbiAgcmVkdWNlclJlZ2lzdHJ5OiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIChwYXlsb2FkOiBBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4sIHN0YXRlOiB1bmtub3duKSA9PiB2b2lkXG4gID5cbikge1xuICBmdW5jdGlvbiBvbihcbiAgICBhY3Rpb246IHsgdHlwZTogc3RyaW5nIH0sXG4gICAgcmVkdWNlckZuOiAocGF5bG9hZDogQWN0aW9uRm5QYXlsb2FkPHVua25vd24+LCBzdGF0ZTogdW5rbm93bikgPT4gdm9pZFxuICApIHtcbiAgICByZWR1Y2VyUmVnaXN0cnlbYWN0aW9uLnR5cGVdID0gcmVkdWNlckZuO1xuICB9XG5cbiAgcmVkdWNlcihhY3Rpb25GbnMsIG9uKTtcblxuICByZXR1cm4gcmVkdWNlclJlZ2lzdHJ5O1xufVxuXG5mdW5jdGlvbiBmaWxsRWZmZWN0cyhcbiAgZWZmZWN0czogRWZmZWN0c0ZhY3Rvcnk8QWN0aW9uRm5zPixcbiAgYWN0aW9uRm5zOiBBY3Rpb25GbnMsXG4gIGVmZmVjdHNSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgU3ViamVjdDxBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4+PiA9IHt9XG4pOiBPYnNlcnZhYmxlPHVua25vd24+W10ge1xuICBmdW5jdGlvbiBjcmVhdGUoYWN0aW9uOiB7IHR5cGU6IHN0cmluZyB9KSB7XG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPj4oKTtcbiAgICBlZmZlY3RzUmVnaXN0cnlbYWN0aW9uLnR5cGVdID0gc3ViamVjdDtcbiAgICByZXR1cm4gc3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0IGVmZmVjdE9ic2VydmFibGVzID0gZWZmZWN0cyhhY3Rpb25GbnMsIGNyZWF0ZSk7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKGVmZmVjdE9ic2VydmFibGVzKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRTdWJzY3JpcHRpb25zKG9ic2VydmFibGVzOiBPYnNlcnZhYmxlPHVua25vd24+W10pIHtcbiAgcmV0dXJuIG9ic2VydmFibGVzLm1hcCgob2JzZXJ2YWJsZSkgPT4gb2JzZXJ2YWJsZS5zdWJzY3JpYmUoKSk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NSZWR1eDxTcGVjIGV4dGVuZHMgQWN0aW9uc0ZuU3BlY3MsIFJldHVyblR5cGU+KFxuICBhY3Rpb25GblNwZWNzOiBTcGVjLFxuICByZWR1Y2VyOiBSZWR1Y2VyRmFjdG9yeTxBY3Rpb25GbnMsIHVua25vd24+LFxuICBlZmZlY3RzOiBFZmZlY3RzRmFjdG9yeTxBY3Rpb25GbnM+LFxuICBzdG9yZTogdW5rbm93blxuKSB7XG4gIGNvbnN0IHJlZHVjZXJSZWdpc3RyeTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICAocGF5bG9hZDogQWN0aW9uRm5QYXlsb2FkPHVua25vd24+LCBzdGF0ZTogdW5rbm93bikgPT4gdm9pZFxuICA+ID0ge307XG4gIGNvbnN0IGVmZmVjdHNSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgU3ViamVjdDxBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4+PiA9IHt9O1xuICBjb25zdCBhY3Rpb25zTWFwID0gY3JlYXRlUHVibGljQW5kQWxsQWN0aW9uc0ZucyhcbiAgICBhY3Rpb25GblNwZWNzLFxuICAgIHJlZHVjZXJSZWdpc3RyeSxcbiAgICBlZmZlY3RzUmVnaXN0cnksXG4gICAgc3RvcmVcbiAgKTtcbiAgY29uc3QgYWN0aW9uRm5zID0gYWN0aW9uc01hcC5hbGw7XG4gIGNvbnN0IHB1YmxpY0FjdGlvbnNGbnMgPSBhY3Rpb25zTWFwLnB1YmxpY3M7XG5cbiAgZmlsbFJlZHVjZXJSZWdpc3RyeShyZWR1Y2VyLCBhY3Rpb25GbnMsIHJlZHVjZXJSZWdpc3RyeSk7XG4gIGNvbnN0IGVmZmVjdE9ic2VydmFibGVzID0gZmlsbEVmZmVjdHMoZWZmZWN0cywgYWN0aW9uRm5zLCBlZmZlY3RzUmVnaXN0cnkpO1xuICBjb25zdCBzdWJzY3JpcHRpb25zID0gc3RhcnRTdWJzY3JpcHRpb25zKGVmZmVjdE9ic2VydmFibGVzKTtcblxuICByZXR1cm4ge1xuICAgIG1ldGhvZHM6IHB1YmxpY0FjdGlvbnNGbnMgYXMgUmV0dXJuVHlwZSxcbiAgICBzdWJzY3JpcHRpb25zOiBzdWJzY3JpcHRpb25zLFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSByZWR1eCByZWR1eFxuICpcbiAqIHByb3BlcnRpZXMgZG8gbm90IHN0YXJ0IHdpdGggYHdpdGhgIHNpbmNlIHRoZXkgYXJlIG5vdCBleHRlbnNpb24gZnVuY3Rpb25zIG9uIHRoZWlyIG93bi5cbiAqXG4gKiBubyBkZXBlbmRlbmN5IHRvIE5nUnhcbiAqXG4gKiBhY3Rpb25zIGFyZSBwYXNzZWQgdG8gcmVkdWNlciBhbmQgZWZmZWN0cywgYnV0IGl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIG90aGVyIGFjdGlvbnMuXG4gKiBlZmZlY3RzIHByb3ZpZGUgZm9yQWN0aW9uIGFuZCBkbyBub3QgcmV0dXJuIGFueXRoaW5nLiB0aGF0IGlzIGltcG9ydGFudCBiZWNhdXNlIGVmZmVjdHMgc2hvdWxkIHN0YXkgaW5hY2Nlc3NpYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmVkdXg8XG4gIFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcyxcbiAgSW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG4gIFN0YXRlQWN0aW9uRm5zIGV4dGVuZHMgQWN0aW9uRm5zQ3JlYXRvcjxTcGVjPiA9IEFjdGlvbkZuc0NyZWF0b3I8U3BlYz4sXG4gIFB1YmxpY1N0b3JlQWN0aW9uRm5zIGV4dGVuZHMgUHVibGljQWN0aW9uRm5zPFNwZWM+ID0gUHVibGljQWN0aW9uRm5zPFNwZWM+XG4+KHJlZHV4OiB7XG4gIGFjdGlvbnM6IFNwZWM7XG4gIHJlZHVjZXI6IFJlZHVjZXJGYWN0b3J5PFN0YXRlQWN0aW9uRm5zLCBTdGF0ZVNpZ25hbDxJbnB1dFsnc3RhdGUnXT4+O1xuICBlZmZlY3RzOiBFZmZlY3RzRmFjdG9yeTxTdGF0ZUFjdGlvbkZucz47XG59KTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICBJbnB1dCxcbiAgRW1wdHlGZWF0dXJlUmVzdWx0ICYgeyBtZXRob2RzOiBQdWJsaWNTdG9yZUFjdGlvbkZucyB9XG4+IHtcbiAgcmV0dXJuIChzdG9yZSkgPT4ge1xuICAgIGNvbnN0IHsgbWV0aG9kcywgc3Vic2NyaXB0aW9ucyB9ID0gcHJvY2Vzc1JlZHV4PFNwZWMsIFB1YmxpY1N0b3JlQWN0aW9uRm5zPihcbiAgICAgIHJlZHV4LmFjdGlvbnMsXG4gICAgICByZWR1eC5yZWR1Y2VyIGFzIFJlZHVjZXJGYWN0b3J5PEFjdGlvbkZucywgdW5rbm93bj4sXG4gICAgICByZWR1eC5lZmZlY3RzIGFzIEVmZmVjdHNGYWN0b3J5PEFjdGlvbkZucz4sXG4gICAgICBzdG9yZVxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0b3JlLFxuICAgICAgbWV0aG9kcyxcbiAgICB9O1xuICB9O1xufVxuIl19
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZWR1eC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvd2l0aC1yZWR1eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQU96RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQXlDOUQsTUFBTSxVQUFVLE9BQU87SUFDckIsT0FBTyxFQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUEwQjVCLFNBQVMsZUFBZSxDQUN0QixhQUFtQixFQUNuQixlQUdDLEVBQ0QsZUFBa0UsRUFDbEUsS0FBYztJQUVkLE1BQU0sU0FBUyxHQUE2QixFQUFFLENBQUM7SUFFL0MsS0FBSyxNQUFNLElBQUksSUFBSSxhQUFhLEVBQUU7UUFDaEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFnQixFQUFFLEVBQUU7WUFDcEMsTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN6QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxPQUFPLEVBQUU7Z0JBQ1YsT0FBc0QsQ0FDckQsV0FBc0IsRUFDdEIsS0FBSyxDQUNOLENBQUM7YUFDSDtZQUNELE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFJLGFBQWEsRUFBRTtnQkFDaEIsYUFBNkMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDbEU7WUFDRCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDLENBQUM7UUFDRixRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcs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QUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFNUQsT0FBTztRQUNMLE9BQU8sRUFBRSxnQkFBOEI7UUFDdkMsYUFBYSxFQUFFLGFBQWE7S0FDN0IsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUt2QixLQUlEO0lBSUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2YsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxZQUFZLENBQzdDLEtBQUssQ0FBQyxPQUFPLEVBQ2IsS0FBSyxDQUFDLE9BQTZDLEVBQ25ELEtBQUssQ0FBQyxPQUFvQyxFQUMxQyxLQUFLLENBQ04sQ0FBQztRQUNGLE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2lnbmFsU3RvcmVGZWF0dXJlIH0gZnJvbSAnQG5ncngvc2lnbmFscyc7XHJcbmltcG9ydCB7XHJcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxyXG4gIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcclxufSBmcm9tICdAbmdyeC9zaWduYWxzL3NyYy9zaWduYWwtc3RvcmUtbW9kZWxzJztcclxuaW1wb3J0IHsgU3RhdGVTaWduYWwgfSBmcm9tICdAbmdyeC9zaWduYWxzL3NyYy9zdGF0ZS1zaWduYWwnO1xyXG5pbXBvcnQgeyBhc3NlcnRBY3Rpb25GblNwZWNzIH0gZnJvbSAnLi9hc3NlcnRpb25zL2Fzc2VydGlvbnMnO1xyXG5pbXBvcnQgeyBlZmZlY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKiBBY3Rpb25zICoqL1xyXG5cclxudHlwZSBQYXlsb2FkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcblxyXG50eXBlIEFjdGlvbkZuPFxyXG4gIFR5cGUgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXHJcbiAgQWN0aW9uUGF5bG9hZCBleHRlbmRzIFBheWxvYWQgPSBQYXlsb2FkXHJcbj4gPSAoKHBheWxvYWQ6IEFjdGlvblBheWxvYWQpID0+IEFjdGlvblBheWxvYWQgJiB7IHR5cGU6IFR5cGUgfSkgJiB7XHJcbiAgdHlwZTogVHlwZTtcclxufTtcclxuXHJcbnR5cGUgQWN0aW9uRm5zID0gUmVjb3JkPHN0cmluZywgQWN0aW9uRm4+O1xyXG5cclxuZXhwb3J0IHR5cGUgQWN0aW9uc0ZuU3BlY3MgPSBSZWNvcmQ8c3RyaW5nLCBQYXlsb2FkPjtcclxuXHJcbnR5cGUgQWN0aW9uRm5DcmVhdG9yPFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcz4gPSB7XHJcbiAgW0FjdGlvbk5hbWUgaW4ga2V5b2YgU3BlY106ICgoXHJcbiAgICBwYXlsb2FkOiBTcGVjW0FjdGlvbk5hbWVdXHJcbiAgKSA9PiBTcGVjW0FjdGlvbk5hbWVdICYgeyB0eXBlOiBBY3Rpb25OYW1lIH0pICYgeyB0eXBlOiBBY3Rpb25OYW1lICYgc3RyaW5nIH07XHJcbn07XHJcblxyXG50eXBlIEFjdGlvbkZuUGF5bG9hZDxBY3Rpb24+ID0gQWN0aW9uIGV4dGVuZHMgKHBheWxvYWQ6IGluZmVyIFBheWxvYWQpID0+IHZvaWRcclxuICA/IFBheWxvYWRcclxuICA6IG5ldmVyO1xyXG5cclxudHlwZSBBY3Rpb25GbnNDcmVhdG9yPFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcz4gPSBTcGVjIGV4dGVuZHMge1xyXG4gIHByaXZhdGU6IFJlY29yZDxzdHJpbmcsIFBheWxvYWQ+O1xyXG4gIHB1YmxpYzogUmVjb3JkPHN0cmluZywgUGF5bG9hZD47XHJcbn1cclxuICA/IEFjdGlvbkZuQ3JlYXRvcjxTcGVjWydwcml2YXRlJ10+ICYgQWN0aW9uRm5DcmVhdG9yPFNwZWNbJ3B1YmxpYyddPlxyXG4gIDogQWN0aW9uRm5DcmVhdG9yPFNwZWM+O1xyXG5cclxudHlwZSBQdWJsaWNBY3Rpb25GbnM8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPiA9IFNwZWMgZXh0ZW5kcyB7XHJcbiAgcHVibGljOiBSZWNvcmQ8c3RyaW5nLCBQYXlsb2FkPjtcclxufVxyXG4gID8gQWN0aW9uRm5DcmVhdG9yPFNwZWNbJ3B1YmxpYyddPlxyXG4gIDogQWN0aW9uRm5DcmVhdG9yPFNwZWM+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBheWxvYWQ8VHlwZSBleHRlbmRzIFBheWxvYWQ+KCk6IFR5cGUge1xyXG4gIHJldHVybiB7fSBhcyBUeXBlO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3Qgbm9QYXlsb2FkID0ge307XHJcblxyXG4vKiogUmVkdWNlciAqKi9cclxuXHJcbnR5cGUgUmVkdWNlckZ1bmN0aW9uPFJlZHVjZXJBY3Rpb24sIFN0YXRlPiA9IChcclxuICBhY3Rpb246IEFjdGlvbkZuUGF5bG9hZDxSZWR1Y2VyQWN0aW9uPixcclxuICBzdGF0ZTogU3RhdGVcclxuKSA9PiB2b2lkO1xyXG5cclxudHlwZSBSZWR1Y2VyRmFjdG9yeTxTdGF0ZUFjdGlvbkZucyBleHRlbmRzIEFjdGlvbkZucywgU3RhdGU+ID0gKFxyXG4gIGFjdGlvbnM6IFN0YXRlQWN0aW9uRm5zLFxyXG4gIG9uOiA8UmVkdWNlckFjdGlvbiBleHRlbmRzIHsgdHlwZTogc3RyaW5nIH0+KFxyXG4gICAgYWN0aW9uOiBSZWR1Y2VyQWN0aW9uLFxyXG4gICAgcmVkdWNlckZuOiBSZWR1Y2VyRnVuY3Rpb248QWN0aW9uRm5QYXlsb2FkPFJlZHVjZXJBY3Rpb24+LCBTdGF0ZT5cclxuICApID0+IHZvaWRcclxuKSA9PiB2b2lkO1xyXG5cclxuLyoqIEVmZmVjdCAqKi9cclxuXHJcbnR5cGUgRWZmZWN0c0ZhY3Rvcnk8U3RhdGVBY3Rpb25GbnMgZXh0ZW5kcyBBY3Rpb25GbnM+ID0gKFxyXG4gIGFjdGlvbnM6IFN0YXRlQWN0aW9uRm5zLFxyXG4gIGNyZWF0ZTogPEVmZmVjdEFjdGlvbiBleHRlbmRzIHsgdHlwZTogc3RyaW5nIH0+KFxyXG4gICAgYWN0aW9uOiBFZmZlY3RBY3Rpb25cclxuICApID0+IE9ic2VydmFibGU8QWN0aW9uRm5QYXlsb2FkPEVmZmVjdEFjdGlvbj4+XHJcbikgPT4gUmVjb3JkPHN0cmluZywgT2JzZXJ2YWJsZTx1bmtub3duPj47XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBY3Rpb25GbnM8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPihcclxuICBhY3Rpb25GblNwZWNzOiBTcGVjLFxyXG4gIHJlZHVjZXJSZWdpc3RyeTogUmVjb3JkPFxyXG4gICAgc3RyaW5nLFxyXG4gICAgKHBheWxvYWQ6IEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPiwgc3RhdGU6IHVua25vd24pID0+IHZvaWRcclxuICA+LFxyXG4gIGVmZmVjdHNSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgU3ViamVjdDxBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4+PixcclxuICBzdGF0ZTogdW5rbm93blxyXG4pIHtcclxuICBjb25zdCBhY3Rpb25GbnM6IFJlY29yZDxzdHJpbmcsIEFjdGlvbkZuPiA9IHt9O1xyXG5cclxuICBmb3IgKGNvbnN0IHR5cGUgaW4gYWN0aW9uRm5TcGVjcykge1xyXG4gICAgY29uc3QgYWN0aW9uRm4gPSAocGF5bG9hZDogUGF5bG9hZCkgPT4ge1xyXG4gICAgICBjb25zdCBmdWxsUGF5bG9hZCA9IHsgLi4ucGF5bG9hZCwgdHlwZSB9O1xyXG4gICAgICBjb25zdCByZWR1Y2VyID0gcmVkdWNlclJlZ2lzdHJ5W3R5cGVdO1xyXG4gICAgICBpZiAocmVkdWNlcikge1xyXG4gICAgICAgIChyZWR1Y2VyIGFzIChwYXlsb2FkOiB1bmtub3duLCBzdGF0ZTogdW5rbm93bikgPT4gdm9pZCkoXHJcbiAgICAgICAgICBmdWxsUGF5bG9hZCBhcyB1bmtub3duLFxyXG4gICAgICAgICAgc3RhdGVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVmZmVjdFN1YmplY3QgPSBlZmZlY3RzUmVnaXN0cnlbdHlwZV07XHJcbiAgICAgIGlmIChlZmZlY3RTdWJqZWN0KSB7XHJcbiAgICAgICAgKGVmZmVjdFN1YmplY3QgYXMgdW5rbm93biBhcyBTdWJqZWN0PHVua25vd24+KS5uZXh0KGZ1bGxQYXlsb2FkKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZnVsbFBheWxvYWQ7XHJcbiAgICB9O1xyXG4gICAgYWN0aW9uRm4udHlwZSA9IHR5cGUudG9TdHJpbmcoKTtcclxuICAgIGFjdGlvbkZuc1t0eXBlXSA9IGFjdGlvbkZuO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGFjdGlvbkZucztcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlUHVibGljQW5kQWxsQWN0aW9uc0ZuczxTcGVjIGV4dGVuZHMgQWN0aW9uc0ZuU3BlY3M+KFxyXG4gIGFjdGlvbkZuU3BlY3M6IFNwZWMsXHJcbiAgcmVkdWNlclJlZ2lzdHJ5OiBSZWNvcmQ8XHJcbiAgICBzdHJpbmcsXHJcbiAgICAocGF5bG9hZDogQWN0aW9uRm5QYXlsb2FkPHVua25vd24+LCBzdGF0ZTogdW5rbm93bikgPT4gdm9pZFxyXG4gID4sXHJcbiAgZWZmZWN0c1JlZ2lzdHJ5OiBSZWNvcmQ8c3RyaW5nLCBTdWJqZWN0PEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPj4+LFxyXG4gIHN0YXRlOiB1bmtub3duXHJcbik6IHsgYWxsOiBBY3Rpb25GbnM7IHB1YmxpY3M6IEFjdGlvbkZucyB9IHtcclxuICBpZiAoJ3B1YmxpYycgaW4gYWN0aW9uRm5TcGVjcyB8fCAncHJpdmF0ZScgaW4gYWN0aW9uRm5TcGVjcykge1xyXG4gICAgY29uc3QgcHJpdmF0ZXMgPSBhY3Rpb25GblNwZWNzWydwcml2YXRlJ10gfHwge307XHJcbiAgICBjb25zdCBwdWJsaWNzID0gYWN0aW9uRm5TcGVjc1sncHVibGljJ10gfHwge307XHJcblxyXG4gICAgYXNzZXJ0QWN0aW9uRm5TcGVjcyhwcml2YXRlcyk7XHJcbiAgICBhc3NlcnRBY3Rpb25GblNwZWNzKHB1YmxpY3MpO1xyXG5cclxuICAgIGNvbnN0IHByaXZhdGVBY3Rpb25GbnMgPSBjcmVhdGVBY3Rpb25GbnMoXHJcbiAgICAgIHByaXZhdGVzLFxyXG4gICAgICByZWR1Y2VyUmVnaXN0cnksXHJcbiAgICAgIGVmZmVjdHNSZWdpc3RyeSxcclxuICAgICAgc3RhdGVcclxuICAgICk7XHJcbiAgICBjb25zdCBwdWJsaWNBY3Rpb25GbnMgPSBjcmVhdGVBY3Rpb25GbnMoXHJcbiAgICAgIHB1YmxpY3MsXHJcbiAgICAgIHJlZHVjZXJSZWdpc3RyeSxcclxuICAgICAgZWZmZWN0c1JlZ2lzdHJ5LFxyXG4gICAgICBzdGF0ZVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhbGw6IHsgLi4ucHJpdmF0ZUFjdGlvbkZucywgLi4ucHVibGljQWN0aW9uRm5zIH0sXHJcbiAgICAgIHB1YmxpY3M6IHB1YmxpY0FjdGlvbkZucyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb25zdCBhY3Rpb25GbnMgPSBjcmVhdGVBY3Rpb25GbnMoXHJcbiAgICBhY3Rpb25GblNwZWNzLFxyXG4gICAgcmVkdWNlclJlZ2lzdHJ5LFxyXG4gICAgZWZmZWN0c1JlZ2lzdHJ5LFxyXG4gICAgc3RhdGVcclxuICApO1xyXG5cclxuICByZXR1cm4geyBhbGw6IGFjdGlvbkZucywgcHVibGljczogYWN0aW9uRm5zIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpbGxSZWR1Y2VyUmVnaXN0cnkoXHJcbiAgcmVkdWNlcjogUmVkdWNlckZhY3Rvcnk8QWN0aW9uRm5zLCB1bmtub3duPixcclxuICBhY3Rpb25GbnM6IEFjdGlvbkZucyxcclxuICByZWR1Y2VyUmVnaXN0cnk6IFJlY29yZDxcclxuICAgIHN0cmluZyxcclxuICAgIChwYXlsb2FkOiBBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4sIHN0YXRlOiB1bmtub3duKSA9PiB2b2lkXHJcbiAgPlxyXG4pIHtcclxuICBmdW5jdGlvbiBvbihcclxuICAgIGFjdGlvbjogeyB0eXBlOiBzdHJpbmcgfSxcclxuICAgIHJlZHVjZXJGbjogKHBheWxvYWQ6IEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPiwgc3RhdGU6IHVua25vd24pID0+IHZvaWRcclxuICApIHtcclxuICAgIHJlZHVjZXJSZWdpc3RyeVthY3Rpb24udHlwZV0gPSByZWR1Y2VyRm47XHJcbiAgfVxyXG5cclxuICByZWR1Y2VyKGFjdGlvbkZucywgb24pO1xyXG5cclxuICByZXR1cm4gcmVkdWNlclJlZ2lzdHJ5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaWxsRWZmZWN0cyhcclxuICBlZmZlY3RzOiBFZmZlY3RzRmFjdG9yeTxBY3Rpb25GbnM+LFxyXG4gIGFjdGlvbkZuczogQWN0aW9uRm5zLFxyXG4gIGVmZmVjdHNSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgU3ViamVjdDxBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4+PiA9IHt9XHJcbik6IE9ic2VydmFibGU8dW5rbm93bj5bXSB7XHJcbiAgZnVuY3Rpb24gY3JlYXRlKGFjdGlvbjogeyB0eXBlOiBzdHJpbmcgfSkge1xyXG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPj4oKTtcclxuICAgIGVmZmVjdHNSZWdpc3RyeVthY3Rpb24udHlwZV0gPSBzdWJqZWN0O1xyXG4gICAgcmV0dXJuIHN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBlZmZlY3RPYnNlcnZhYmxlcyA9IGVmZmVjdHMoYWN0aW9uRm5zLCBjcmVhdGUpO1xyXG4gIHJldHVybiBPYmplY3QudmFsdWVzKGVmZmVjdE9ic2VydmFibGVzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3RhcnRTdWJzY3JpcHRpb25zKG9ic2VydmFibGVzOiBPYnNlcnZhYmxlPHVua25vd24+W10pIHtcclxuICByZXR1cm4gb2JzZXJ2YWJsZXMubWFwKChvYnNlcnZhYmxlKSA9PiBvYnNlcnZhYmxlLnN1YnNjcmliZSgpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJvY2Vzc1JlZHV4PFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcywgUmV0dXJuVHlwZT4oXHJcbiAgYWN0aW9uRm5TcGVjczogU3BlYyxcclxuICByZWR1Y2VyOiBSZWR1Y2VyRmFjdG9yeTxBY3Rpb25GbnMsIHVua25vd24+LFxyXG4gIGVmZmVjdHM6IEVmZmVjdHNGYWN0b3J5PEFjdGlvbkZucz4sXHJcbiAgc3RvcmU6IHVua25vd25cclxuKSB7XHJcbiAgY29uc3QgcmVkdWNlclJlZ2lzdHJ5OiBSZWNvcmQ8XHJcbiAgICBzdHJpbmcsXHJcbiAgICAocGF5bG9hZDogQWN0aW9uRm5QYXlsb2FkPHVua25vd24+LCBzdGF0ZTogdW5rbm93bikgPT4gdm9pZFxyXG4gID4gPSB7fTtcclxuICBjb25zdCBlZmZlY3RzUmVnaXN0cnk6IFJlY29yZDxzdHJpbmcsIFN1YmplY3Q8QWN0aW9uRm5QYXlsb2FkPHVua25vd24+Pj4gPSB7fTtcclxuICBjb25zdCBhY3Rpb25zTWFwID0gY3JlYXRlUHVibGljQW5kQWxsQWN0aW9uc0ZucyhcclxuICAgIGFjdGlvbkZuU3BlY3MsXHJcbiAgICByZWR1Y2VyUmVnaXN0cnksXHJcbiAgICBlZmZlY3RzUmVnaXN0cnksXHJcbiAgICBzdG9yZVxyXG4gICk7XHJcbiAgY29uc3QgYWN0aW9uRm5zID0gYWN0aW9uc01hcC5hbGw7XHJcbiAgY29uc3QgcHVibGljQWN0aW9uc0ZucyA9IGFjdGlvbnNNYXAucHVibGljcztcclxuXHJcbiAgZmlsbFJlZHVjZXJSZWdpc3RyeShyZWR1Y2VyLCBhY3Rpb25GbnMsIHJlZHVjZXJSZWdpc3RyeSk7XHJcbiAgY29uc3QgZWZmZWN0T2JzZXJ2YWJsZXMgPSBmaWxsRWZmZWN0cyhlZmZlY3RzLCBhY3Rpb25GbnMsIGVmZmVjdHNSZWdpc3RyeSk7XHJcbiAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IHN0YXJ0U3Vic2NyaXB0aW9ucyhlZmZlY3RPYnNlcnZhYmxlcyk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2RzOiBwdWJsaWNBY3Rpb25zRm5zIGFzIFJldHVyblR5cGUsXHJcbiAgICBzdWJzY3JpcHRpb25zOiBzdWJzY3JpcHRpb25zLFxyXG4gIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0gcmVkdXggcmVkdXhcclxuICpcclxuICogcHJvcGVydGllcyBkbyBub3Qgc3RhcnQgd2l0aCBgd2l0aGAgc2luY2UgdGhleSBhcmUgbm90IGV4dGVuc2lvbiBmdW5jdGlvbnMgb24gdGhlaXIgb3duLlxyXG4gKlxyXG4gKiBubyBkZXBlbmRlbmN5IHRvIE5nUnhcclxuICpcclxuICogYWN0aW9ucyBhcmUgcGFzc2VkIHRvIHJlZHVjZXIgYW5kIGVmZmVjdHMsIGJ1dCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBvdGhlciBhY3Rpb25zLlxyXG4gKiBlZmZlY3RzIHByb3ZpZGUgZm9yQWN0aW9uIGFuZCBkbyBub3QgcmV0dXJuIGFueXRoaW5nLiB0aGF0IGlzIGltcG9ydGFudCBiZWNhdXNlIGVmZmVjdHMgc2hvdWxkIHN0YXkgaW5hY2Nlc3NpYmxlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gd2l0aFJlZHV4PFxyXG4gIFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcyxcclxuICBJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcclxuICBTdGF0ZUFjdGlvbkZucyBleHRlbmRzIEFjdGlvbkZuc0NyZWF0b3I8U3BlYz4gPSBBY3Rpb25GbnNDcmVhdG9yPFNwZWM+LFxyXG4gIFB1YmxpY1N0b3JlQWN0aW9uRm5zIGV4dGVuZHMgUHVibGljQWN0aW9uRm5zPFNwZWM+ID0gUHVibGljQWN0aW9uRm5zPFNwZWM+XHJcbj4ocmVkdXg6IHtcclxuICBhY3Rpb25zOiBTcGVjO1xyXG4gIHJlZHVjZXI6IFJlZHVjZXJGYWN0b3J5PFN0YXRlQWN0aW9uRm5zLCBTdGF0ZVNpZ25hbDxJbnB1dFsnc3RhdGUnXT4+O1xyXG4gIGVmZmVjdHM6IEVmZmVjdHNGYWN0b3J5PFN0YXRlQWN0aW9uRm5zPjtcclxufSk6IFNpZ25hbFN0b3JlRmVhdHVyZTxcclxuICBJbnB1dCxcclxuICBFbXB0eUZlYXR1cmVSZXN1bHQgJiB7IG1ldGhvZHM6IFB1YmxpY1N0b3JlQWN0aW9uRm5zIH1cclxuPiB7XHJcbiAgcmV0dXJuIChzdG9yZSkgPT4ge1xyXG4gICAgY29uc3QgeyBtZXRob2RzLCBzdWJzY3JpcHRpb25zIH0gPSBwcm9jZXNzUmVkdXg8U3BlYywgUHVibGljU3RvcmVBY3Rpb25GbnM+KFxyXG4gICAgICByZWR1eC5hY3Rpb25zLFxyXG4gICAgICByZWR1eC5yZWR1Y2VyIGFzIFJlZHVjZXJGYWN0b3J5PEFjdGlvbkZucywgdW5rbm93bj4sXHJcbiAgICAgIHJlZHV4LmVmZmVjdHMgYXMgRWZmZWN0c0ZhY3Rvcnk8QWN0aW9uRm5zPixcclxuICAgICAgc3RvcmVcclxuICAgICk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5zdG9yZSxcclxuICAgICAgbWV0aG9kcyxcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG4iXX0=
|