@rljson/io 0.0.50 → 0.0.51
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.
|
@@ -1,4 +1,71 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"_hash": "jERNpYntKnsV66yxoS2xOg",
|
|
4
|
+
"key": "tableCfgs",
|
|
5
|
+
"type": "tableCfgs",
|
|
6
|
+
"isHead": false,
|
|
7
|
+
"isRoot": false,
|
|
8
|
+
"isShared": true,
|
|
9
|
+
"previous": "",
|
|
10
|
+
"columns": [
|
|
11
|
+
{
|
|
12
|
+
"key": "_hash",
|
|
13
|
+
"type": "string",
|
|
14
|
+
"titleShort": "Hash",
|
|
15
|
+
"titleLong": "Row Hash",
|
|
16
|
+
"_hash": "2QxgcOKzL6zsVCo9Yi_5Ke"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"key": "key",
|
|
20
|
+
"type": "string",
|
|
21
|
+
"titleShort": "Key",
|
|
22
|
+
"titleLong": "Table Key",
|
|
23
|
+
"_hash": "vXW6G031fGusGpEgdnVWmt"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"key": "type",
|
|
27
|
+
"type": "string",
|
|
28
|
+
"titleShort": "Type",
|
|
29
|
+
"titleLong": "Content Type",
|
|
30
|
+
"_hash": "X2upWVtQ02TKW3mj6SqU0c"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"key": "isHead",
|
|
34
|
+
"type": "boolean",
|
|
35
|
+
"titleShort": "Is Head",
|
|
36
|
+
"titleLong": "Is Head Table",
|
|
37
|
+
"_hash": "A-q9m5MVPMRVN6hk4pAMLH"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"key": "isRoot",
|
|
41
|
+
"type": "boolean",
|
|
42
|
+
"titleShort": "Is Root",
|
|
43
|
+
"titleLong": "Is Root Table",
|
|
44
|
+
"_hash": "qYiiwGCxzUtxlqIvZeU1rh"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"key": "isShared",
|
|
48
|
+
"type": "boolean",
|
|
49
|
+
"titleShort": "Is Shared",
|
|
50
|
+
"titleLong": "Is Shared Table",
|
|
51
|
+
"_hash": "jS9CqQBxXDhz1IB6PET4-P"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"key": "previous",
|
|
55
|
+
"type": "string",
|
|
56
|
+
"titleShort": "Previous",
|
|
57
|
+
"titleLong": "Previous Table Configuration Hash",
|
|
58
|
+
"_hash": "0EgSa6oJSjOqjUCqlJzb5E"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"key": "columns",
|
|
62
|
+
"type": "jsonArray",
|
|
63
|
+
"titleShort": "Columns",
|
|
64
|
+
"titleLong": "Column Configurations",
|
|
65
|
+
"_hash": "GRV_4vc3xouarDpc1ZXE2_"
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
},
|
|
2
69
|
{
|
|
3
70
|
"key": "revisions",
|
|
4
71
|
"type": "revisions",
|
|
@@ -61,99 +128,32 @@
|
|
|
61
128
|
{
|
|
62
129
|
"key": "_hash",
|
|
63
130
|
"type": "string",
|
|
64
|
-
"titleShort": "
|
|
131
|
+
"titleShort": "_hash",
|
|
65
132
|
"titleLong": "Hash",
|
|
66
|
-
"_hash": "
|
|
133
|
+
"_hash": "L9iUlNEZRCGaQQts9mi--U"
|
|
67
134
|
},
|
|
68
135
|
{
|
|
69
136
|
"key": "col0",
|
|
70
137
|
"type": "string",
|
|
71
|
-
"titleShort": "
|
|
72
|
-
"titleLong": "
|
|
73
|
-
"_hash": "
|
|
138
|
+
"titleShort": "col0",
|
|
139
|
+
"titleLong": "Col0",
|
|
140
|
+
"_hash": "dCXjY3cV-nGTHT-40a9SLj"
|
|
74
141
|
},
|
|
75
142
|
{
|
|
76
143
|
"key": "col1",
|
|
77
144
|
"type": "string",
|
|
78
|
-
"titleShort": "
|
|
79
|
-
"titleLong": "
|
|
80
|
-
"_hash": "
|
|
145
|
+
"titleShort": "col1",
|
|
146
|
+
"titleLong": "Col1",
|
|
147
|
+
"_hash": "FMQLo4Apkp7E3LwlW9Fzuy"
|
|
81
148
|
},
|
|
82
149
|
{
|
|
83
150
|
"key": "col2",
|
|
84
151
|
"type": "string",
|
|
85
|
-
"titleShort": "
|
|
86
|
-
"titleLong": "
|
|
87
|
-
"_hash": "
|
|
152
|
+
"titleShort": "col2",
|
|
153
|
+
"titleLong": "Col2",
|
|
154
|
+
"_hash": "jeJdZQXgk22xyinIGX6IeM"
|
|
88
155
|
}
|
|
89
156
|
],
|
|
90
|
-
"_hash": "
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
"_hash": "jERNpYntKnsV66yxoS2xOg",
|
|
94
|
-
"key": "tableCfgs",
|
|
95
|
-
"type": "tableCfgs",
|
|
96
|
-
"isHead": false,
|
|
97
|
-
"isRoot": false,
|
|
98
|
-
"isShared": true,
|
|
99
|
-
"previous": "",
|
|
100
|
-
"columns": [
|
|
101
|
-
{
|
|
102
|
-
"key": "_hash",
|
|
103
|
-
"type": "string",
|
|
104
|
-
"titleShort": "Hash",
|
|
105
|
-
"titleLong": "Row Hash",
|
|
106
|
-
"_hash": "2QxgcOKzL6zsVCo9Yi_5Ke"
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
"key": "key",
|
|
110
|
-
"type": "string",
|
|
111
|
-
"titleShort": "Key",
|
|
112
|
-
"titleLong": "Table Key",
|
|
113
|
-
"_hash": "vXW6G031fGusGpEgdnVWmt"
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
"key": "type",
|
|
117
|
-
"type": "string",
|
|
118
|
-
"titleShort": "Type",
|
|
119
|
-
"titleLong": "Content Type",
|
|
120
|
-
"_hash": "X2upWVtQ02TKW3mj6SqU0c"
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"key": "isHead",
|
|
124
|
-
"type": "boolean",
|
|
125
|
-
"titleShort": "Is Head",
|
|
126
|
-
"titleLong": "Is Head Table",
|
|
127
|
-
"_hash": "A-q9m5MVPMRVN6hk4pAMLH"
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
"key": "isRoot",
|
|
131
|
-
"type": "boolean",
|
|
132
|
-
"titleShort": "Is Root",
|
|
133
|
-
"titleLong": "Is Root Table",
|
|
134
|
-
"_hash": "qYiiwGCxzUtxlqIvZeU1rh"
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
"key": "isShared",
|
|
138
|
-
"type": "boolean",
|
|
139
|
-
"titleShort": "Is Shared",
|
|
140
|
-
"titleLong": "Is Shared Table",
|
|
141
|
-
"_hash": "jS9CqQBxXDhz1IB6PET4-P"
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
"key": "previous",
|
|
145
|
-
"type": "string",
|
|
146
|
-
"titleShort": "Previous",
|
|
147
|
-
"titleLong": "Previous Table Configuration Hash",
|
|
148
|
-
"_hash": "0EgSa6oJSjOqjUCqlJzb5E"
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
"key": "columns",
|
|
152
|
-
"type": "jsonArray",
|
|
153
|
-
"titleShort": "Columns",
|
|
154
|
-
"titleLong": "Column Configurations",
|
|
155
|
-
"_hash": "GRV_4vc3xouarDpc1ZXE2_"
|
|
156
|
-
}
|
|
157
|
-
]
|
|
157
|
+
"_hash": "XyGTK9tL8OKBWGtsV0Ni-6"
|
|
158
158
|
}
|
|
159
159
|
]
|
|
@@ -5,17 +5,16 @@
|
|
|
5
5
|
// found in the LICENSE file in the root of this package.
|
|
6
6
|
|
|
7
7
|
import { Io, IoMem, IoTestSetup } from '@rljson/io';
|
|
8
|
-
import { IoPeer } from '../src/io-peer';
|
|
9
|
-
import { IoServer } from '../src/io-server';
|
|
10
|
-
import { PeerServerSocketMock } from '../src/peer-server-socket-mock';
|
|
11
8
|
|
|
12
9
|
// ..............................................................................
|
|
13
|
-
|
|
10
|
+
class MyIoTestSetup implements IoTestSetup {
|
|
14
11
|
async beforeAll(): Promise<void> {
|
|
15
12
|
// This method can be used for any additional setup required before init.
|
|
16
13
|
// Currently, it does nothing.
|
|
17
14
|
}
|
|
18
|
-
async beforeEach(): Promise<void> {
|
|
15
|
+
async beforeEach(): Promise<void> {
|
|
16
|
+
this._io = await IoMem.example();
|
|
17
|
+
}
|
|
19
18
|
|
|
20
19
|
async afterEach(): Promise<void> {
|
|
21
20
|
await this.io.close();
|
|
@@ -32,42 +31,8 @@ abstract class GenericIoTestSetup implements IoTestSetup {
|
|
|
32
31
|
return this._io;
|
|
33
32
|
}
|
|
34
33
|
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
class IoMemTestSetup extends GenericIoTestSetup {
|
|
39
|
-
async beforeEach(): Promise<void> {
|
|
40
|
-
this._io = await IoMem.example();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
class IoPeerTestSetup extends GenericIoTestSetup {
|
|
45
|
-
async beforeEach(): Promise<void> {
|
|
46
|
-
this._io = await IoPeer.example();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
class IoPeerServerTestSetup extends GenericIoTestSetup {
|
|
51
|
-
async beforeEach(): Promise<void> {
|
|
52
|
-
//Io of Server --> IoMem
|
|
53
|
-
const ioMemServer = await IoMem.example();
|
|
54
|
-
|
|
55
|
-
//Socket between Server and Peer
|
|
56
|
-
const socket = new PeerServerSocketMock();
|
|
57
|
-
|
|
58
|
-
//IoPeer of Peer --> Socket
|
|
59
|
-
const ioServer = new IoServer(ioMemServer);
|
|
60
|
-
ioServer.addSocket(socket);
|
|
61
|
-
|
|
62
|
-
//IoPeer of Peer --> Socket
|
|
63
|
-
const io = new IoPeer(socket);
|
|
64
|
-
await io.init();
|
|
65
|
-
|
|
66
|
-
this._io = io;
|
|
67
|
-
}
|
|
34
|
+
private _io: Io | null = null;
|
|
68
35
|
}
|
|
69
36
|
|
|
70
37
|
// .............................................................................
|
|
71
|
-
export const
|
|
72
|
-
export const testPeerSetup = () => new IoPeerTestSetup();
|
|
73
|
-
export const testPeerServerSetup = () => new IoPeerServerTestSetup();
|
|
38
|
+
export const testSetup = () => new MyIoTestSetup();
|
|
@@ -36,34 +36,21 @@ import {
|
|
|
36
36
|
|
|
37
37
|
import { Io, IoTestSetup, IoTools } from '@rljson/io';
|
|
38
38
|
|
|
39
|
-
import {
|
|
40
|
-
testMemSetup,
|
|
41
|
-
testPeerServerSetup,
|
|
42
|
-
testPeerSetup,
|
|
43
|
-
} from './io-conformance.setup.ts';
|
|
39
|
+
import { testSetup } from './io-conformance.setup.ts';
|
|
44
40
|
import { expectGolden, ExpectGoldenOptions } from './setup/goldens.ts';
|
|
45
41
|
|
|
46
42
|
const ego: ExpectGoldenOptions = {
|
|
47
43
|
npmUpdateGoldensEnabled: false,
|
|
48
44
|
};
|
|
49
45
|
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
IoPeer: testPeerSetup(),
|
|
53
|
-
IoPeerServer: testPeerServerSetup(),
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
export const runIoConformanceTests = (
|
|
57
|
-
setupName: string,
|
|
58
|
-
ioTestSetup: IoTestSetup,
|
|
59
|
-
) => {
|
|
60
|
-
return describe('Io Conformance - ' + setupName, async () => {
|
|
46
|
+
export const runIoConformanceTests = (testSetup: IoTestSetup) => {
|
|
47
|
+
return describe('Io Conformance', async () => {
|
|
61
48
|
let io: Io;
|
|
62
49
|
let ioTools: IoTools;
|
|
63
50
|
let setup: IoTestSetup;
|
|
64
51
|
|
|
65
52
|
beforeAll(async () => {
|
|
66
|
-
setup =
|
|
53
|
+
setup = testSetup;
|
|
67
54
|
await setup.beforeAll();
|
|
68
55
|
});
|
|
69
56
|
|
|
@@ -129,14 +116,14 @@ export const runIoConformanceTests = (
|
|
|
129
116
|
{
|
|
130
117
|
key: '_hash',
|
|
131
118
|
type: 'string',
|
|
132
|
-
titleShort: '
|
|
119
|
+
titleShort: '_hash',
|
|
133
120
|
titleLong: 'Hash',
|
|
134
121
|
},
|
|
135
122
|
{
|
|
136
123
|
key: 'col0',
|
|
137
124
|
type: 'string',
|
|
138
|
-
titleShort: '
|
|
139
|
-
titleLong: '
|
|
125
|
+
titleShort: 'col0',
|
|
126
|
+
titleLong: 'Col0',
|
|
140
127
|
},
|
|
141
128
|
],
|
|
142
129
|
};
|
|
@@ -145,8 +132,8 @@ export const runIoConformanceTests = (
|
|
|
145
132
|
{
|
|
146
133
|
key: 'col1',
|
|
147
134
|
type: 'string',
|
|
148
|
-
titleShort: '
|
|
149
|
-
titleLong: '
|
|
135
|
+
titleShort: 'col1',
|
|
136
|
+
titleLong: 'Col1',
|
|
150
137
|
},
|
|
151
138
|
]);
|
|
152
139
|
|
|
@@ -154,8 +141,8 @@ export const runIoConformanceTests = (
|
|
|
154
141
|
{
|
|
155
142
|
key: 'col2',
|
|
156
143
|
type: 'string',
|
|
157
|
-
titleShort: '
|
|
158
|
-
titleLong: '
|
|
144
|
+
titleShort: 'col2',
|
|
145
|
+
titleLong: 'Col2',
|
|
159
146
|
},
|
|
160
147
|
]);
|
|
161
148
|
|
|
@@ -164,64 +151,12 @@ export const runIoConformanceTests = (
|
|
|
164
151
|
await io.createOrExtendTable({ tableCfg: tableV2 });
|
|
165
152
|
|
|
166
153
|
// Check the tableCfgs
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
actualTableCfgs,
|
|
154
|
+
// Sort it in advance to have a stable order for the golden file
|
|
155
|
+
const actualTableCfgs = (await ioTools.tableCfgs()).sort((a, b) =>
|
|
156
|
+
(a as any)._hash.localeCompare(b._hash),
|
|
171
157
|
);
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
describe('rawTableCfgs()', () => {
|
|
176
|
-
it('returns an array of all table configurations', async () => {
|
|
177
|
-
//create four tables with two versions each
|
|
178
|
-
const tableV0: TableCfg = {
|
|
179
|
-
key: 'table0',
|
|
180
|
-
type: 'components',
|
|
181
|
-
isHead: false,
|
|
182
|
-
isRoot: false,
|
|
183
|
-
isShared: true,
|
|
184
|
-
columns: [
|
|
185
|
-
{
|
|
186
|
-
key: '_hash',
|
|
187
|
-
type: 'string',
|
|
188
|
-
titleShort: 'Hash',
|
|
189
|
-
titleLong: 'Hash',
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
key: 'col0',
|
|
193
|
-
type: 'string',
|
|
194
|
-
titleShort: 'Col 0',
|
|
195
|
-
titleLong: 'Column 0',
|
|
196
|
-
},
|
|
197
|
-
],
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
const tableV1 = addColumnsToTableCfg(tableV0, [
|
|
201
|
-
{
|
|
202
|
-
key: 'col1',
|
|
203
|
-
type: 'string',
|
|
204
|
-
titleShort: 'Col 1',
|
|
205
|
-
titleLong: 'Column 1',
|
|
206
|
-
},
|
|
207
|
-
]);
|
|
208
158
|
|
|
209
|
-
|
|
210
|
-
{
|
|
211
|
-
key: 'col2',
|
|
212
|
-
type: 'string',
|
|
213
|
-
titleShort: 'Col 2',
|
|
214
|
-
titleLong: 'Column 2',
|
|
215
|
-
},
|
|
216
|
-
]);
|
|
217
|
-
|
|
218
|
-
await io.createOrExtendTable({ tableCfg: tableV0 });
|
|
219
|
-
await io.createOrExtendTable({ tableCfg: tableV1 });
|
|
220
|
-
await io.createOrExtendTable({ tableCfg: tableV2 });
|
|
221
|
-
|
|
222
|
-
// Check the tableCfgs
|
|
223
|
-
const actualTableCfgs = await io.rawTableCfgs();
|
|
224
|
-
await expectGolden('io-conformance/rawTableCfgs.json', ego).toBe(
|
|
159
|
+
await expectGolden('io-conformance/tableCfgs-1.json', ego).toBe(
|
|
225
160
|
actualTableCfgs,
|
|
226
161
|
);
|
|
227
162
|
});
|
|
@@ -232,14 +167,6 @@ export const runIoConformanceTests = (
|
|
|
232
167
|
const tableCfg: TableCfg = hip(exampleTableCfg({ key: 'table1' }));
|
|
233
168
|
tableCfg._hash = 'wrongHash';
|
|
234
169
|
let message: string = '';
|
|
235
|
-
|
|
236
|
-
await expect(
|
|
237
|
-
io.createOrExtendTable({ tableCfg: tableCfg }),
|
|
238
|
-
).rejects.toThrow(
|
|
239
|
-
'Hash "wrongHash" does not match the newly calculated one "9jZWK-5WPpnlQHCWSPg80D". ' +
|
|
240
|
-
'Please make sure that all systems are producing the same hashes.',
|
|
241
|
-
);
|
|
242
|
-
|
|
243
170
|
try {
|
|
244
171
|
await io.createOrExtendTable({ tableCfg: tableCfg });
|
|
245
172
|
} catch (err: any) {
|
|
@@ -299,8 +226,8 @@ export const runIoConformanceTests = (
|
|
|
299
226
|
{
|
|
300
227
|
key: 'x',
|
|
301
228
|
type: 'unknown' as any,
|
|
302
|
-
titleShort: '
|
|
303
|
-
titleLong: '
|
|
229
|
+
titleShort: 'x',
|
|
230
|
+
titleLong: 'X',
|
|
304
231
|
},
|
|
305
232
|
],
|
|
306
233
|
});
|
|
@@ -474,19 +401,19 @@ export const runIoConformanceTests = (
|
|
|
474
401
|
{
|
|
475
402
|
key: 'keyA1',
|
|
476
403
|
type: 'string',
|
|
477
|
-
titleShort: '
|
|
404
|
+
titleShort: 'keyA1',
|
|
478
405
|
titleLong: 'Key A1',
|
|
479
406
|
},
|
|
480
407
|
{
|
|
481
408
|
key: 'keyA2',
|
|
482
409
|
type: 'string',
|
|
483
|
-
titleShort: '
|
|
410
|
+
titleShort: 'keyA2',
|
|
484
411
|
titleLong: 'Key A2',
|
|
485
412
|
},
|
|
486
413
|
{
|
|
487
414
|
key: 'keyB2',
|
|
488
415
|
type: 'string',
|
|
489
|
-
titleShort: '
|
|
416
|
+
titleShort: 'keyB2',
|
|
490
417
|
titleLong: 'Key B2',
|
|
491
418
|
},
|
|
492
419
|
]);
|
|
@@ -534,7 +461,7 @@ export const runIoConformanceTests = (
|
|
|
534
461
|
keyB2: 'b2',
|
|
535
462
|
},
|
|
536
463
|
],
|
|
537
|
-
_tableCfg: '
|
|
464
|
+
_tableCfg: 'yKzxBoq_P6qkCSXiNpJttx',
|
|
538
465
|
_type: 'components',
|
|
539
466
|
},
|
|
540
467
|
});
|
|
@@ -550,25 +477,25 @@ export const runIoConformanceTests = (
|
|
|
550
477
|
{
|
|
551
478
|
key: '_hash',
|
|
552
479
|
type: 'string',
|
|
553
|
-
titleShort: '
|
|
480
|
+
titleShort: '_hash',
|
|
554
481
|
titleLong: 'Hash',
|
|
555
482
|
},
|
|
556
483
|
{
|
|
557
484
|
key: 'keyA1',
|
|
558
485
|
type: 'string',
|
|
559
|
-
titleShort: '
|
|
486
|
+
titleShort: 'keyA1',
|
|
560
487
|
titleLong: 'Key A1',
|
|
561
488
|
},
|
|
562
489
|
{
|
|
563
490
|
key: 'keyA2',
|
|
564
491
|
type: 'string',
|
|
565
|
-
titleShort: '
|
|
492
|
+
titleShort: 'keyA2',
|
|
566
493
|
titleLong: 'Key A2',
|
|
567
494
|
},
|
|
568
495
|
{
|
|
569
496
|
key: 'keyB2',
|
|
570
497
|
type: 'string',
|
|
571
|
-
titleShort: '
|
|
498
|
+
titleShort: 'keyB2',
|
|
572
499
|
titleLong: 'Key B2',
|
|
573
500
|
},
|
|
574
501
|
],
|
|
@@ -634,43 +561,43 @@ export const runIoConformanceTests = (
|
|
|
634
561
|
{
|
|
635
562
|
key: '_hash',
|
|
636
563
|
type: 'string',
|
|
637
|
-
titleShort: '
|
|
564
|
+
titleShort: '_hash',
|
|
638
565
|
titleLong: 'Hash',
|
|
639
566
|
},
|
|
640
567
|
{
|
|
641
568
|
key: 'string',
|
|
642
569
|
type: 'string',
|
|
643
|
-
titleShort: '
|
|
570
|
+
titleShort: 'string',
|
|
644
571
|
titleLong: 'String',
|
|
645
572
|
},
|
|
646
573
|
{
|
|
647
574
|
key: 'number',
|
|
648
575
|
type: 'number',
|
|
649
|
-
titleShort: '
|
|
576
|
+
titleShort: 'number',
|
|
650
577
|
titleLong: 'Number',
|
|
651
578
|
},
|
|
652
579
|
{
|
|
653
580
|
key: 'null',
|
|
654
581
|
type: 'string',
|
|
655
|
-
titleShort: '
|
|
582
|
+
titleShort: 'null',
|
|
656
583
|
titleLong: 'Null',
|
|
657
584
|
},
|
|
658
585
|
{
|
|
659
586
|
key: 'boolean',
|
|
660
587
|
type: 'boolean',
|
|
661
|
-
titleShort: '
|
|
588
|
+
titleShort: 'boolean',
|
|
662
589
|
titleLong: 'Boolean',
|
|
663
590
|
},
|
|
664
591
|
{
|
|
665
592
|
key: 'array',
|
|
666
593
|
type: 'jsonArray',
|
|
667
|
-
titleShort: '
|
|
594
|
+
titleShort: 'array',
|
|
668
595
|
titleLong: 'Array',
|
|
669
596
|
},
|
|
670
597
|
{
|
|
671
598
|
key: 'object',
|
|
672
599
|
type: 'json',
|
|
673
|
-
titleShort: '
|
|
600
|
+
titleShort: 'object',
|
|
674
601
|
titleLong: 'Object',
|
|
675
602
|
},
|
|
676
603
|
],
|
|
@@ -759,43 +686,43 @@ export const runIoConformanceTests = (
|
|
|
759
686
|
{
|
|
760
687
|
key: '_hash',
|
|
761
688
|
type: 'string',
|
|
762
|
-
titleShort: '
|
|
689
|
+
titleShort: '_hash',
|
|
763
690
|
titleLong: 'Hash',
|
|
764
691
|
},
|
|
765
692
|
{
|
|
766
693
|
key: 'string',
|
|
767
694
|
type: 'string',
|
|
768
|
-
titleShort: '
|
|
695
|
+
titleShort: 'string',
|
|
769
696
|
titleLong: 'String',
|
|
770
697
|
},
|
|
771
698
|
{
|
|
772
699
|
key: 'number',
|
|
773
700
|
type: 'number',
|
|
774
|
-
titleShort: '
|
|
701
|
+
titleShort: 'number',
|
|
775
702
|
titleLong: 'Number',
|
|
776
703
|
},
|
|
777
704
|
{
|
|
778
705
|
key: 'null',
|
|
779
706
|
type: 'string',
|
|
780
|
-
titleShort: '
|
|
707
|
+
titleShort: 'null',
|
|
781
708
|
titleLong: 'Null',
|
|
782
709
|
},
|
|
783
710
|
{
|
|
784
711
|
key: 'boolean',
|
|
785
712
|
type: 'boolean',
|
|
786
|
-
titleShort: '
|
|
713
|
+
titleShort: 'boolean',
|
|
787
714
|
titleLong: 'Boolean',
|
|
788
715
|
},
|
|
789
716
|
{
|
|
790
717
|
key: 'array',
|
|
791
718
|
type: 'jsonArray',
|
|
792
|
-
titleShort: '
|
|
719
|
+
titleShort: 'array',
|
|
793
720
|
titleLong: 'Array',
|
|
794
721
|
},
|
|
795
722
|
{
|
|
796
723
|
key: 'object',
|
|
797
724
|
type: 'json',
|
|
798
|
-
titleShort: '
|
|
725
|
+
titleShort: 'object',
|
|
799
726
|
titleLong: 'Object',
|
|
800
727
|
},
|
|
801
728
|
],
|
|
@@ -1167,17 +1094,8 @@ export const runIoConformanceTests = (
|
|
|
1167
1094
|
const contentType = await io.contentType({ table: 'table1' });
|
|
1168
1095
|
expect(contentType).toBe('components');
|
|
1169
1096
|
});
|
|
1170
|
-
|
|
1171
|
-
it('returns error if table is not existing', async () => {
|
|
1172
|
-
await expect(io.contentType({ table: 'unknown' })).rejects.toThrow(
|
|
1173
|
-
'Table "unknown" not found',
|
|
1174
|
-
);
|
|
1175
|
-
});
|
|
1176
1097
|
});
|
|
1177
1098
|
});
|
|
1178
1099
|
};
|
|
1179
1100
|
|
|
1180
|
-
|
|
1181
|
-
for (const [setupName, setup] of Object.entries(setups)) {
|
|
1182
|
-
runIoConformanceTests(setupName, setup);
|
|
1183
|
-
}
|
|
1101
|
+
runIoConformanceTests(testSetup());
|
package/dist/io.js
CHANGED
|
@@ -179,6 +179,7 @@ class IoTools {
|
|
|
179
179
|
newestVersion[table.key] = table;
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
|
+
/* v8 ignore next -- @preserve */
|
|
182
183
|
const resultData = Object.values(newestVersion).sort((a, b) => {
|
|
183
184
|
if (a.key < b.key) {
|
|
184
185
|
return -1;
|
|
@@ -256,6 +257,7 @@ class IoTools {
|
|
|
256
257
|
const deletedColumnKeys = existing.columns.map((column) => column.key).filter(
|
|
257
258
|
(key) => !update.columns.some((column) => column.key === key)
|
|
258
259
|
);
|
|
260
|
+
/* v8 ignore next -- @preserve */
|
|
259
261
|
if (deletedColumnKeys.length > 0) {
|
|
260
262
|
const deletedColumns = deletedColumnKeys.join(", ");
|
|
261
263
|
throw new Error(
|
|
@@ -292,6 +294,7 @@ class IoTools {
|
|
|
292
294
|
await iterateTables(data, async (tableKey) => {
|
|
293
295
|
const tableCfg = await this.tableCfg(tableKey);
|
|
294
296
|
const table = data[tableKey];
|
|
297
|
+
/* v8 ignore next -- @preserve */
|
|
295
298
|
if (table._type === "tableCfgs") return;
|
|
296
299
|
errors.push(...validateRljsonAgainstTableCfg(table._data, tableCfg));
|
|
297
300
|
});
|
|
@@ -311,12 +314,15 @@ ${errors.map((e) => `- ${e}`).join("\n")}`
|
|
|
311
314
|
table._data.sort((a, b) => {
|
|
312
315
|
const hashA = a._hash;
|
|
313
316
|
const hashB = b._hash;
|
|
317
|
+
/* v8 ignore next -- @preserve */
|
|
314
318
|
if (hashA < hashB) {
|
|
315
319
|
return -1;
|
|
316
320
|
}
|
|
321
|
+
/* v8 ignore next -- @preserve */
|
|
317
322
|
if (hashA > hashB) {
|
|
318
323
|
return 1;
|
|
319
324
|
}
|
|
325
|
+
/* v8 ignore next -- @preserve */
|
|
320
326
|
return 0;
|
|
321
327
|
});
|
|
322
328
|
table._hash = "";
|
|
@@ -574,6 +580,7 @@ const exampleTestSetup = () => {
|
|
|
574
580
|
};
|
|
575
581
|
// @license
|
|
576
582
|
const exampleIo = "Checkout @rljson/io-mem for an example implementation";
|
|
583
|
+
/* v8 ignore file -- @preserve */
|
|
577
584
|
// @license
|
|
578
585
|
const calcReverseRefs = (rljson) => {
|
|
579
586
|
const result = {};
|
|
@@ -682,4 +689,4 @@ export {
|
|
|
682
689
|
exampleIo,
|
|
683
690
|
exampleTestSetup
|
|
684
691
|
};
|
|
685
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pby10b29scy50cyIsIi4uL3NyYy9pby1tZW0udHMiLCIuLi9zcmMvaW8tdGVzdC1zZXR1cC50cyIsIi4uL3NyYy9pby50cyIsIi4uL3NyYy9yZXZlcnNlLXJlZi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgaGlwIH0gZnJvbSAnQHJsanNvbi9oYXNoJztcbmltcG9ydCB7XG4gIGl0ZXJhdGVUYWJsZXMsXG4gIFJsanNvbixcbiAgVGFibGVDZmcsXG4gIFRhYmxlS2V5LFxuICBUYWJsZVR5cGUsXG4gIHRocm93T25JbnZhbGlkVGFibGVDZmcsXG4gIHZhbGlkYXRlUmxqc29uQWdhaW5zdFRhYmxlQ2ZnLFxufSBmcm9tICdAcmxqc29uL3JsanNvbic7XG5cbmltcG9ydCB7IElvTWVtIH0gZnJvbSAnLi9pby1tZW0udHMnO1xuaW1wb3J0IHsgSW8gfSBmcm9tICcuL2lvLnRzJztcblxuZXhwb3J0IHR5cGUgSW9PYnNlcnZlciA9IChkYXRhOiBSbGpzb24pID0+IHZvaWQ7XG5cbi8qKlxuICogUHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBJbyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBJb1Rvb2xzIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBpbyBUaGUgSW8gaW50ZXJmYWNlIHRvIHVzZVxuICAgKi9cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGlvOiBJbykge31cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFibGUgY29uZmlndXJhdGlvbiBvZiB0aGUgdGFibGVDZmdzIHRhYmxlLlxuICAgKi9cbiAgc3RhdGljIGdldCB0YWJsZUNmZ3NUYWJsZUNmZygpIHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IGhpcDxUYWJsZUNmZz4oe1xuICAgICAgX2hhc2g6ICcnLFxuICAgICAga2V5OiAndGFibGVDZmdzJyxcbiAgICAgIHR5cGU6ICd0YWJsZUNmZ3MnLFxuICAgICAgaXNIZWFkOiBmYWxzZSxcbiAgICAgIGlzUm9vdDogZmFsc2UsXG4gICAgICBpc1NoYXJlZDogdHJ1ZSxcbiAgICAgIHByZXZpb3VzOiAnJyxcblxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAga2V5OiAnX2hhc2gnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdIYXNoJyxcbiAgICAgICAgICB0aXRsZUxvbmc6ICdSb3cgSGFzaCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6ICdrZXknLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdLZXknLFxuICAgICAgICAgIHRpdGxlTG9uZzogJ1RhYmxlIEtleScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6ICd0eXBlJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB0aXRsZVNob3J0OiAnVHlwZScsXG4gICAgICAgICAgdGl0bGVMb25nOiAnQ29udGVudCBUeXBlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ2lzSGVhZCcsXG4gICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdJcyBIZWFkJyxcbiAgICAgICAgICB0aXRsZUxvbmc6ICdJcyBIZWFkIFRhYmxlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ2lzUm9vdCcsXG4gICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdJcyBSb290JyxcbiAgICAgICAgICB0aXRsZUxvbmc6ICdJcyBSb290IFRhYmxlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ2lzU2hhcmVkJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgdGl0bGVTaG9ydDogJ0lzIFNoYXJlZCcsXG4gICAgICAgICAgdGl0bGVMb25nOiAnSXMgU2hhcmVkIFRhYmxlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ3ByZXZpb3VzJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB0aXRsZVNob3J0OiAnUHJldmlvdXMnLFxuICAgICAgICAgIHRpdGxlTG9uZzogJ1ByZXZpb3VzIFRhYmxlIENvbmZpZ3VyYXRpb24gSGFzaCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6ICdjb2x1bW5zJyxcbiAgICAgICAgICB0eXBlOiAnanNvbkFycmF5JyxcbiAgICAgICAgICB0aXRsZVNob3J0OiAnQ29sdW1ucycsXG4gICAgICAgICAgdGl0bGVMb25nOiAnQ29sdW1uIENvbmZpZ3VyYXRpb25zJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGFibGVDZmc7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHJldmlzaW9ucyB0YWJsZS5cbiAgICovXG4gIGluaXRSZXZpc2lvbnNUYWJsZSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YWJsZUNmZzogVGFibGVDZmcgPSB7XG4gICAgICBrZXk6ICdyZXZpc2lvbnMnLFxuICAgICAgdHlwZTogJ3JldmlzaW9ucycsXG4gICAgICBpc0hlYWQ6IHRydWUsXG4gICAgICBpc1Jvb3Q6IHRydWUsXG4gICAgICBpc1NoYXJlZDogZmFsc2UsXG5cbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ19oYXNoJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB0aXRsZVNob3J0OiAnSGFzaCcsXG4gICAgICAgICAgdGl0bGVMb25nOiAnUm93IEhhc2gnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiAndGFibGUnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdUYWJsZScsXG4gICAgICAgICAgdGl0bGVMb25nOiAnVGFibGUgS2V5JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ3ByZWRlY2Vzc29yJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB0aXRsZVNob3J0OiAnUHJlZGVjZXNzb3InLFxuICAgICAgICAgIHRpdGxlTG9uZzogJ1ByZWRlY2Vzc29yIFJldmlzaW9uIEhhc2gnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiAnc3VjY2Vzc29yJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB0aXRsZVNob3J0OiAnU3VjY2Vzc29yJyxcbiAgICAgICAgICB0aXRsZUxvbmc6ICdTdWNjZXNzb3IgUmV2aXNpb24gSGFzaCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6ICd0aW1lc3RhbXAnLFxuICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdUaW1lc3RhbXAnLFxuICAgICAgICAgIHRpdGxlTG9uZzogJ1JldmlzaW9uIFRpbWVzdGFtcCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6ICdpZCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgdGl0bGVTaG9ydDogJ0lEJyxcbiAgICAgICAgICB0aXRsZUxvbmc6ICdSZXZpc2lvbiBJRCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLmlvLmNyZWF0ZU9yRXh0ZW5kVGFibGUoeyB0YWJsZUNmZyB9KTtcbiAgfTtcblxuICAvKipcbiAgICogRXhhbXBsZSBvYmplY3QgZm9yIHRlc3QgcHVycG9zZXNcbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgaW8gdG9vbHNcbiAgICovXG4gIHN0YXRpYyBleGFtcGxlID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlvID0gYXdhaXQgSW9NZW0uZXhhbXBsZSgpO1xuICAgIGF3YWl0IGlvLmluaXQoKTtcbiAgICBhd2FpdCBpby5pc1JlYWR5KCk7XG4gICAgcmV0dXJuIG5ldyBJb1Rvb2xzKGlvKTtcbiAgfTtcblxuICAvKipcbiAgICogVGhyb3dzIGlmIHRoZSB0YWJsZSBkb2VzIG5vdCBleGlzdFxuICAgKi9cbiAgYXN5bmMgdGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5pby50YWJsZUV4aXN0cyh0YWJsZSk7XG4gICAgaWYgKCFleGlzdHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgXCIke3RhYmxlfVwiIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgaWYgYW55IG9mIHRoZSB0YWJsZXMgaW4gcmxqc29uIGRvIG5vdCBleGlzdFxuICAgKiBAcGFyYW0gcmxqc29uIC0gVGhlIFJsanNvbiBvYmplY3QgdG8gY2hlY2tcbiAgICovXG4gIGFzeW5jIHRocm93V2hlblRhYmxlc0RvTm90RXhpc3Qocmxqc29uOiBSbGpzb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgaXRlcmF0ZVRhYmxlcyhybGpzb24sIGFzeW5jICh0YWJsZUtleSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdHMgPSBhd2FpdCB0aGlzLmlvLnRhYmxlRXhpc3RzKHRhYmxlS2V5KTtcbiAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIFwiJHt0YWJsZUtleX1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbWlzc2luZ1RhYmxlcyA9IChlIGFzIEFycmF5PGFueT4pLm1hcCgoZSkgPT4gZS50YWJsZUtleSk7XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBmb2xsb3dpbmcgdGFibGVzIGRvIG5vdCBleGlzdDogJHttaXNzaW5nVGFibGVzLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGFibGUgY2ZncyBvZiBhbGwgdGFibGVzXG4gICAqIEByZXR1cm5zIFRoZSB0YWJsZSBjb25maWd1cmF0aW9uIG9mIGFsbCB0YWJsZXNcbiAgICovXG4gIGFzeW5jIHRhYmxlQ2ZncygpOiBQcm9taXNlPFRhYmxlQ2ZnW10+IHtcbiAgICBjb25zdCB0YWJsZXMgPSBhd2FpdCB0aGlzLmlvLnJhd1RhYmxlQ2ZncygpO1xuXG4gICAgLy8gVGFrZSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZWFjaCB0eXBlIGtleVxuICAgIGNvbnN0IG5ld2VzdFZlcnNpb246IFJlY29yZDxUYWJsZUtleSwgVGFibGVDZmc+ID0ge307XG4gICAgZm9yIChsZXQgaSA9IHRhYmxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgdGFibGUgPSB0YWJsZXNbaV07XG4gICAgICBjb25zdCBleGlzdGluZyA9IG5ld2VzdFZlcnNpb25bdGFibGUua2V5XTtcbiAgICAgIC8qIHY4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgaWYgKCFleGlzdGluZyB8fCBleGlzdGluZy5jb2x1bW5zLmxlbmd0aCA8IHRhYmxlLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIG5ld2VzdFZlcnNpb25bdGFibGUua2V5XSA9IHRhYmxlO1xuICAgICAgfVxuICAgICAgLyogdjggaWdub3JlIGVuZCAqL1xuICAgIH1cblxuICAgIC8vIFNvcnQgdGhlIHRhYmxlcyBieSBrZXlcbiAgICBjb25zdCByZXN1bHREYXRhID0gT2JqZWN0LnZhbHVlcyhuZXdlc3RWZXJzaW9uKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoYS5rZXkgPCBiLmtleSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAoYS5rZXkgPiBiLmtleSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0ICovXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAwO1xuICAgICAgLyogdjggaWdub3JlIGVuZCAqL1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHREYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IHdpdGggYWxsIHRhYmxlIG5hbWVzXG4gICAqL1xuICBhc3luYyBhbGxUYWJsZUtleXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB0aGlzLnRhYmxlQ2ZncygpKS5tYXAoKGUpID0+IGUua2V5KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBnaXZlbiB0YWJsZVxuICAgKi9cbiAgYXN5bmMgdGFibGVDZmcodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTxUYWJsZUNmZz4ge1xuICAgIGNvbnN0IHRhYmxlQ2ZnID0gYXdhaXQgdGhpcy50YWJsZUNmZ09yTnVsbCh0YWJsZSk7XG4gICAgaWYgKCF0YWJsZUNmZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBcIiR7dGFibGV9XCIgbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlQ2ZnITtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgZ2l2ZW4gdGFibGUgb3IgbnVsbCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cblxuICAgKi9cbiAgYXN5bmMgdGFibGVDZmdPck51bGwodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTxUYWJsZUNmZyB8IG51bGw+IHtcbiAgICBjb25zdCB0YWJsZUNmZ3MgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZncygpO1xuICAgIGNvbnN0IHRhYmxlQ2ZnID0gdGFibGVDZmdzLmZpbmQoKGUpID0+IGUua2V5ID09PSB0YWJsZSk7XG4gICAgcmV0dXJuIHRhYmxlQ2ZnID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGNvbHVtbiBuYW1lcyBvZiBhIGdpdmVuIHRhYmxlXG4gICAqL1xuICBhc3luYyBhbGxDb2x1bW5LZXlzKHRhYmxlOiBUYWJsZUtleSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRhYmxlQ2ZnLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIHdoZW4gYSBjb2x1bW4gZG9lcyBub3QgZXhpc3QgaW4gYSBnaXZlbiB0YWJsZVxuICAgKiBAcGFyYW0gdGFibGUgLSBUaGUgdGFibGUgdG8gY2hlY2tcbiAgICogQHBhcmFtIGNvbHVtbnMgLSBUaGUgY29sdW1uIHRvIGNoZWNrXG4gICAqL1xuICBhc3luYyB0aHJvd1doZW5Db2x1bW5Eb2VzTm90RXhpc3QoXG4gICAgdGFibGU6IFRhYmxlS2V5LFxuICAgIGNvbHVtbnM6IHN0cmluZ1tdLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGUpO1xuICAgIGNvbnN0IGNvbHVtbktleXMgPSB0YWJsZUNmZy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5KTtcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKFxuICAgICAgKGNvbHVtbikgPT4gIWNvbHVtbktleXMuaW5jbHVkZXMoY29sdW1uKSxcbiAgICApO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgZm9sbG93aW5nIGNvbHVtbnMgZG8gbm90IGV4aXN0IGluIHRhYmxlIFwiJHt0YWJsZX1cIjogJHttaXNzaW5nQ29sdW1ucy5qb2luKFxuICAgICAgICAgICcsICcsXG4gICAgICAgICl9LmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3Mgd2hlbiBhIHRhYmxlIHVwZGF0ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IHRhYmxlXG4gICAqIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBhc3luYyB0aHJvd1doZW5UYWJsZUlzTm90Q29tcGF0aWJsZSh1cGRhdGU6IFRhYmxlQ2ZnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJlZml4ID0gYEludmFsaWQgdXBkYXRlIG9mIHRhYmxlIGFibGUgXCIke3VwZGF0ZS5rZXl9XCJgO1xuXG4gICAgdGhyb3dPbkludmFsaWRUYWJsZUNmZyh1cGRhdGUpO1xuXG4gICAgLy8gQ2hlY2sgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIHRhYmxlXG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnT3JOdWxsKHVwZGF0ZS5rZXkpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgLy8gSGF2ZSBjb2x1bW5zIGJlZW4gZGVsZXRlZD9cbiAgICAgIGlmIChleGlzdGluZy5jb2x1bW5zLmxlbmd0aCA+IHVwZGF0ZS5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkZWxldGVkQ29sdW1uS2V5cyA9IGV4aXN0aW5nLmNvbHVtbnNcbiAgICAgICAgICAubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChrZXkpID0+ICF1cGRhdGUuY29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5rZXkgPT09IGtleSksXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKGRlbGV0ZWRDb2x1bW5LZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBkZWxldGVkQ29sdW1ucyA9IGRlbGV0ZWRDb2x1bW5LZXlzLmpvaW4oJywgJyk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7cHJlZml4fTogQ29sdW1ucyBtdXN0IG5vdCBiZSBkZWxldGVkLiBgICtcbiAgICAgICAgICAgICAgYERlbGV0ZWQgY29sdW1uczogJHtkZWxldGVkQ29sdW1uc319YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhdmUgY29sdW1uIGtleXMgY2hhbmdlZD9cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhpc3RpbmcuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBiZWZvcmUgPSBleGlzdGluZy5jb2x1bW5zW2ldLmtleTtcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSB1cGRhdGUuY29sdW1uc1tpXS5rZXk7XG4gICAgICAgIGlmIChiZWZvcmUgIT09IGFmdGVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7cHJlZml4fTogYCArXG4gICAgICAgICAgICAgIGBDb2x1bW4ga2V5cyBtdXN0IG5vdCBjaGFuZ2UhIGAgK1xuICAgICAgICAgICAgICBgQ29sdW1uIFwiJHtiZWZvcmV9XCIgd2FzIHJlbmFtZWQgaW50byBcIiR7YWZ0ZXJ9XCIuYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhdmUgY29sdW1uIHR5cGVzIGNoYW5nZWQ/XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gZXhpc3RpbmcuY29sdW1uc1tpXS5rZXk7XG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IGV4aXN0aW5nLmNvbHVtbnNbaV0udHlwZTtcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSB1cGRhdGUuY29sdW1uc1tpXS50eXBlO1xuICAgICAgICBpZiAoYmVmb3JlICE9PSBhZnRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGAke3ByZWZpeH06IGAgK1xuICAgICAgICAgICAgICBgQ29sdW1uIHR5cGVzIG11c3Qgbm90IGNoYW5nZSEgYCArXG4gICAgICAgICAgICAgIGBUeXBlIG9mIGNvbHVtbiBcIiR7Y29sdW1ufVwiIHdhcyBjaGFuZ2VkIGZyb20gXCIke2JlZm9yZX1cIiB0byAke2FmdGVyfS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGlmIHRoZSBkYXRhIGluIHRoZSB0YWJsZSBkbyBub3QgbWF0Y2ggdGhlIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGFzeW5jIHRocm93V2hlblRhYmxlRGF0YURvZXNOb3RNYXRjaENmZyhkYXRhOiBSbGpzb24pIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBhd2FpdCBpdGVyYXRlVGFibGVzKGRhdGEsIGFzeW5jICh0YWJsZUtleSkgPT4ge1xuICAgICAgY29uc3QgdGFibGVDZmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnKHRhYmxlS2V5KTtcbiAgICAgIGNvbnN0IHRhYmxlID0gZGF0YVt0YWJsZUtleV07XG5cbiAgICAgIC8vIElnbm9yZSB0YWJsZUNmZ3MgdGFibGVcbiAgICAgIGlmICh0YWJsZS5fdHlwZSA9PT0gJ3RhYmxlQ2ZncycpIHJldHVybjtcblxuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVSbGpzb25BZ2FpbnN0VGFibGVDZmcodGFibGUuX2RhdGEsIHRhYmxlQ2ZnKSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRhYmxlIGRhdGEgZG9lcyBub3QgbWF0Y2ggdGhlIGNvbmZpZ3VyYXRpb24uXFxuXFxuRXJyb3JzOlxcbiR7ZXJyb3JzXG4gICAgICAgICAgLm1hcCgoZSkgPT4gYC0gJHtlfWApXG4gICAgICAgICAgLmpvaW4oJ1xcbicpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyB0aGUgZGF0YSBvZiBhIHRhYmxlIGJ5IHRoZSBoYXNoIGFuZCB1cGRhdGVzIHRoZSB0YWJsZSBoYXNoIGluIHBsYWNlXG4gICAqL1xuICBzb3J0VGFibGVEYXRhQW5kVXBkYXRlSGFzaCh0YWJsZTogVGFibGVUeXBlKTogdm9pZCB7XG4gICAgdGFibGUuX2RhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgaGFzaEEgPSBhLl9oYXNoIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGhhc2hCID0gYi5faGFzaCBhcyBzdHJpbmc7XG4gICAgICBpZiAoaGFzaEEgPCBoYXNoQikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAoaGFzaEEgPiBoYXNoQikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgLyogdjggaWdub3JlIHN0YXJ0ICovXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAwO1xuICAgICAgLyogdjggaWdub3JlIGVuZCAqL1xuICAgIH0pO1xuXG4gICAgdGFibGUuX2hhc2ggPSAnJztcbiAgICBoaXAodGFibGUsIHtcbiAgICAgIHVwZGF0ZUV4aXN0aW5nSGFzaGVzOiBmYWxzZSxcbiAgICAgIHRocm93T25Xcm9uZ0hhc2hlczogZmFsc2UsXG4gICAgfSk7XG4gIH1cbn1cbiIsIi8vIEBsaWNlbnNlXG4vLyBDb3B5cmlnaHQgKGMpIDIwMjUgUmxqc29uXG4vL1xuLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGVybXMgdGhhdCBjYW4gYmVcbi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlLlxuXG5pbXBvcnQgeyBoaXAsIGhzaCB9IGZyb20gJ0BybGpzb24vaGFzaCc7XG5pbXBvcnQgeyBJc1JlYWR5IH0gZnJvbSAnQHJsanNvbi9pcy1yZWFkeSc7XG5pbXBvcnQgeyBjb3B5LCBlcXVhbHMsIEpzb25WYWx1ZSB9IGZyb20gJ0BybGpzb24vanNvbic7XG5pbXBvcnQge1xuICBDb250ZW50VHlwZSwgaXRlcmF0ZVRhYmxlc1N5bmMsIFJsanNvbiwgVGFibGVDZmcsIFRhYmxlS2V5LCBUYWJsZVR5cGVcbn0gZnJvbSAnQHJsanNvbi9ybGpzb24nO1xuXG5pbXBvcnQgeyBJb1Rvb2xzIH0gZnJvbSAnLi9pby10b29scy50cyc7XG5pbXBvcnQgeyBJbyB9IGZyb20gJy4vaW8udHMnO1xuXG5cbi8qKlxuICogSW4tTWVtb3J5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSbGpzb24gSW8gaW50ZXJmYWNlLlxuICovXG5leHBvcnQgY2xhc3MgSW9NZW0gaW1wbGVtZW50cyBJbyB7XG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBDb25zdHJ1Y3RvciAmIGV4YW1wbGVcblxuICBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2lzT3BlbiA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2lzT3BlbiA9IGZhbHNlO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzT3BlbjtcbiAgfVxuXG4gIHN0YXRpYyBleGFtcGxlID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlvID0gbmV3IElvTWVtKCk7XG4gICAgYXdhaXQgaW8uaW5pdCgpO1xuICAgIHJldHVybiBpbztcbiAgfTtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gR2VuZXJhbFxuICBpc1JlYWR5KCkge1xuICAgIHJldHVybiB0aGlzLl9pc1JlYWR5LnByb21pc2U7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gRHVtcFxuXG4gIGR1bXAoKTogUHJvbWlzZTxSbGpzb24+IHtcbiAgICByZXR1cm4gdGhpcy5fZHVtcCgpO1xuICB9XG5cbiAgYXN5bmMgZHVtcFRhYmxlKHJlcXVlc3Q6IHsgdGFibGU6IHN0cmluZyB9KTogUHJvbWlzZTxSbGpzb24+IHtcbiAgICByZXR1cm4gdGhpcy5fZHVtcFRhYmxlKHJlcXVlc3QpO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIE1ldGEgRGF0YVxuXG4gIGFzeW5jIGNvbnRlbnRUeXBlKHJlcXVlc3Q6IHsgdGFibGU6IHN0cmluZyB9KTogUHJvbWlzZTxDb250ZW50VHlwZT4ge1xuICAgIHJldHVybiB0aGlzLl9jb250ZW50VHlwZShyZXF1ZXN0KTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBSb3dzXG5cbiAgcmVhZFJvd3MocmVxdWVzdDoge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgd2hlcmU6IHsgW2NvbHVtbjogc3RyaW5nXTogSnNvblZhbHVlIH07XG4gIH0pOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkUm93cyhyZXF1ZXN0KTtcbiAgfVxuXG4gIGFzeW5jIHJvd0NvdW50KHRhYmxlOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHRhYmxlRGF0YSA9IHRoaXMuX21lbVt0YWJsZV0gYXMgVGFibGVUeXBlO1xuICAgIGlmICghdGFibGVEYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIFwiJHt0YWJsZX1cIiBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0YWJsZURhdGEuX2RhdGEubGVuZ3RoKTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBXcml0ZVxuXG4gIHdyaXRlKHJlcXVlc3Q6IHsgZGF0YTogUmxqc29uIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fd3JpdGUocmVxdWVzdCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gVGFibGUgbWFuYWdlbWVudFxuICBhc3luYyB0YWJsZUV4aXN0cyh0YWJsZUtleTogVGFibGVLZXkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVt0YWJsZUtleV0gYXMgVGFibGVUeXBlO1xuICAgIHJldHVybiB0YWJsZSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIGNyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdDogeyB0YWJsZUNmZzogVGFibGVDZmcgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVPckV4dGVuZFRhYmxlKHJlcXVlc3QpO1xuICB9XG5cbiAgYXN5bmMgcmF3VGFibGVDZmdzKCk6IFByb21pc2U8VGFibGVDZmdbXT4ge1xuICAgIGNvbnN0IHRhYmxlcyA9IHRoaXMuX21lbS50YWJsZUNmZ3MuX2RhdGEgYXMgVGFibGVDZmdbXTtcbiAgICByZXR1cm4gdGFibGVzO1xuICB9XG5cbiAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuICAvLyBQcml2YXRlXG4gIC8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcblxuICBwcml2YXRlIF9pb1Rvb2xzITogSW9Ub29scztcblxuICBwcml2YXRlIF9pc1JlYWR5ID0gbmV3IElzUmVhZHkoKTtcbiAgcHJpdmF0ZSBfaXNPcGVuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfbWVtOiBSbGpzb24gPSBoaXAoe30gYXMgUmxqc29uKTtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBhc3luYyBfaW5pdCgpIHtcbiAgICB0aGlzLl9pb1Rvb2xzID0gbmV3IElvVG9vbHModGhpcyk7XG4gICAgdGhpcy5faW5pdFRhYmxlQ2ZncygpO1xuICAgIHRoaXMuX3VwZGF0ZUdsb2JhbEhhc2goKTtcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLmluaXRSZXZpc2lvbnNUYWJsZSgpO1xuICAgIGhzaCh0aGlzLl9tZW0pO1xuXG4gICAgdGhpcy5faXNSZWFkeS5yZXNvbHZlKCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBfaW5pdFRhYmxlQ2ZncyA9ICgpID0+IHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IElvVG9vbHMudGFibGVDZmdzVGFibGVDZmc7XG5cbiAgICB0aGlzLl9tZW0udGFibGVDZmdzID0gaGlwKHtcbiAgICAgIF90eXBlOiAndGFibGVDZmdzJyxcbiAgICAgIF9kYXRhOiBbdGFibGVDZmddLFxuICAgICAgX3RhYmxlQ2ZnOiB0YWJsZUNmZy5faGFzaCBhcyBzdHJpbmcsXG4gICAgfSk7XG4gIH07XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgX3VwZGF0ZUdsb2JhbEhhc2goKSB7XG4gICAgKHRoaXMuX21lbSBhcyBhbnkpLl9oYXNoID0gJyc7XG4gICAgaGlwKHRoaXMuX21lbSwge1xuICAgICAgdXBkYXRlRXhpc3RpbmdIYXNoZXM6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgX3VwZGF0ZVRhYmxlSGFzaCh0YWJsZUtleTogVGFibGVLZXkpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVt0YWJsZUtleV0gYXMgVGFibGVUeXBlO1xuICAgIHRhYmxlLl9oYXNoID0gJyc7XG4gICAgaGlwKHRhYmxlLCB7IHVwZGF0ZUV4aXN0aW5nSGFzaGVzOiBmYWxzZSB9KTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIGFzeW5jIF9jcmVhdGVPckV4dGVuZFRhYmxlKHJlcXVlc3Q6IHtcbiAgICB0YWJsZUNmZzogVGFibGVDZmc7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdGFibGUgY29uZmlnIGlzIGNvbXBhdGlibGVcbiAgICAvLyB3aXRoIGFuIHBvdGVudGlhbCBleGlzdGluZyB0YWJsZVxuICAgIGNvbnN0IHRhYmxlQ2ZnID0gcmVxdWVzdC50YWJsZUNmZztcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlSXNOb3RDb21wYXRpYmxlKHRhYmxlQ2ZnKTtcblxuICAgIGNvbnN0IHsga2V5IH0gPSB0YWJsZUNmZztcblxuICAgIC8vIFJlY3JlYXRlIGhhc2hlcyBpbiB0aGUgY2FzZSB0aGUgZXhpc3RpbmcgaGFzaGVzIGFyZSB3cm9uZ1xuICAgIGNvbnN0IG5ld0NvbmZpZyA9IGhzaCh0YWJsZUNmZyk7XG5cbiAgICAvLyBGaW5kIGFuIGV4aXN0aW5nIHRhYmxlIGNvbmZpZyB3aXRoIHRoZSBzYW1lIGhhc2hcbiAgICBjb25zdCBleGlzdGluZ0NvbmZpZyA9IGF3YWl0IHRoaXMuX2lvVG9vbHMudGFibGVDZmdPck51bGwoa2V5KTtcblxuICAgIC8vIFdyaXRlIHRoZSBuZXcgY29uZmlnIGludG8gdGhlIGRhdGFiYXNlXG4gICAgaWYgKCFleGlzdGluZ0NvbmZpZykge1xuICAgICAgdGhpcy5fY3JlYXRlVGFibGUobmV3Q29uZmlnLCBrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9leHRlbmRUYWJsZShleGlzdGluZ0NvbmZpZywgbmV3Q29uZmlnKTtcbiAgICB9XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBfY3JlYXRlVGFibGUobmV3Q29uZmlnOiBUYWJsZUNmZywgdGFibGVLZXk6IFRhYmxlS2V5KSB7XG4gICAgLy8gV3JpdGUgdGhlIHRhYmxlIGNvbmZpZyBpbnRvIHRoZSBkYXRhYmFzZVxuICAgIG5ld0NvbmZpZyA9IGhzaChuZXdDb25maWcpO1xuICAgIHRoaXMuX21lbS50YWJsZUNmZ3MuX2RhdGEucHVzaChuZXdDb25maWcpO1xuICAgIHRoaXMuX2lvVG9vbHMuc29ydFRhYmxlRGF0YUFuZFVwZGF0ZUhhc2godGhpcy5fbWVtLnRhYmxlQ2Zncyk7XG5cbiAgICAvLyBDcmVhdGUgYSB0YWJsZSBhbmQgd3JpdGUgaXQgaW50byB0aGUgZGF0YWJhc2VcbiAgICBjb25zdCB0YWJsZTogVGFibGVUeXBlID0ge1xuICAgICAgX3R5cGU6IG5ld0NvbmZpZy50eXBlLFxuICAgICAgX2RhdGE6IFtdLFxuICAgICAgX3RhYmxlQ2ZnOiBuZXdDb25maWcuX2hhc2ggYXMgc3RyaW5nLFxuICAgIH07XG5cbiAgICB0aGlzLl9tZW1bdGFibGVLZXldID8/PSBoaXAodGFibGUpO1xuXG4gICAgLy8gVXBkYXRlIGhhc2hlc1xuICAgIHRoaXMuX3VwZGF0ZVRhYmxlSGFzaCh0YWJsZUtleSk7XG4gICAgdGhpcy5fdXBkYXRlR2xvYmFsSGFzaCgpO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgX2V4dGVuZFRhYmxlKGV4aXN0aW5nQ29uZmlnOiBUYWJsZUNmZywgbmV3Q29uZmlnOiBUYWJsZUNmZykge1xuICAgIC8vIE5vIGNvbHVtbnMgYWRkZWQ/IFJldHVybi5cbiAgICBpZiAoZXhpc3RpbmdDb25maWcuY29sdW1ucy5sZW5ndGggPT09IG5ld0NvbmZpZy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdyaXRlIHRoZSBuZXcgdGFibGUgY29uZmlnIGludG8gdGhlIGRhdGFiYXNlXG4gICAgbmV3Q29uZmlnID0gaHNoKG5ld0NvbmZpZyk7XG4gICAgdGhpcy5fbWVtLnRhYmxlQ2Zncy5fZGF0YS5wdXNoKG5ld0NvbmZpZyk7XG4gICAgdGhpcy5faW9Ub29scy5zb3J0VGFibGVEYXRhQW5kVXBkYXRlSGFzaCh0aGlzLl9tZW0udGFibGVDZmdzKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgY29uZmlnIG9mIHRoZSBleGlzdGluZyB0YWJsZVxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fbWVtW25ld0NvbmZpZy5rZXldIGFzIFRhYmxlVHlwZTtcbiAgICB0YWJsZS5fdGFibGVDZmcgPSBuZXdDb25maWcuX2hhc2ggYXMgc3RyaW5nO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBoYXNoZXNcbiAgICB0aGlzLl91cGRhdGVUYWJsZUhhc2gobmV3Q29uZmlnLmtleSk7XG4gICAgdGhpcy5fdXBkYXRlR2xvYmFsSGFzaCgpO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG5cbiAgcHJpdmF0ZSBhc3luYyBfZHVtcCgpOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIHJldHVybiBjb3B5KHRoaXMuX21lbSk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBhc3luYyBfZHVtcFRhYmxlKHJlcXVlc3Q6IHsgdGFibGU6IHN0cmluZyB9KTogUHJvbWlzZTxSbGpzb24+IHtcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlRG9lc05vdEV4aXN0KHJlcXVlc3QudGFibGUpO1xuXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bcmVxdWVzdC50YWJsZV0gYXMgVGFibGVUeXBlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIFtyZXF1ZXN0LnRhYmxlXTogY29weSh0YWJsZSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIGFzeW5jIF9jb250ZW50VHlwZShyZXF1ZXN0OiB7IHRhYmxlOiBzdHJpbmcgfSk6IFByb21pc2U8Q29udGVudFR5cGU+IHtcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlRG9lc05vdEV4aXN0KHJlcXVlc3QudGFibGUpO1xuXG4gICAgcmV0dXJuICh0aGlzLl9tZW1bcmVxdWVzdC50YWJsZV0gYXMgVGFibGVUeXBlKS5fdHlwZTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIGFzeW5jIF93cml0ZShyZXF1ZXN0OiB7IGRhdGE6IFJsanNvbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYWRkZWREYXRhID0gaHNoKHJlcXVlc3QuZGF0YSk7XG4gICAgdGhpcy5fcmVtb3ZlTnVsbFZhbHVlcyhhZGRlZERhdGEpO1xuICAgIGNvbnN0IHRhYmxlcyA9IE9iamVjdC5rZXlzKGFkZGVkRGF0YSk7XG4gICAgaHNoKGFkZGVkRGF0YSk7XG5cbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlc0RvTm90RXhpc3QocmVxdWVzdC5kYXRhKTtcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlRGF0YURvZXNOb3RNYXRjaENmZyhyZXF1ZXN0LmRhdGEpO1xuXG4gICAgZm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcbiAgICAgIGlmICh0YWJsZS5zdGFydHNXaXRoKCdfJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9sZFRhYmxlID0gdGhpcy5fbWVtW3RhYmxlXSBhcyBUYWJsZVR5cGU7XG4gICAgICBjb25zdCBuZXdUYWJsZSA9IGFkZGVkRGF0YVt0YWJsZV0gYXMgVGFibGVUeXBlO1xuXG4gICAgICAvLyBUYWJsZSBleGlzdHMuIE1lcmdlIGRhdGFcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBuZXdUYWJsZS5fZGF0YSkge1xuICAgICAgICBjb25zdCBoYXNoID0gaXRlbS5faGFzaDtcbiAgICAgICAgY29uc3QgZXhpc3RzID0gb2xkVGFibGUuX2RhdGEuZmluZCgoaSkgPT4gaS5faGFzaCA9PT0gaGFzaCk7XG4gICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgb2xkVGFibGUuX2RhdGEucHVzaChpdGVtIGFzIGFueSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5faW9Ub29scy5zb3J0VGFibGVEYXRhQW5kVXBkYXRlSGFzaChvbGRUYWJsZSk7XG4gICAgfVxuXG4gICAgLy8gUmVjYWxjIG1haW4gaGFzaGVzXG4gICAgdGhpcy5fdXBkYXRlR2xvYmFsSGFzaCgpO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgYXN5bmMgX3JlYWRSb3dzKHJlcXVlc3Q6IHtcbiAgICB0YWJsZTogc3RyaW5nO1xuICAgIHdoZXJlOiB7IFtjb2x1bW46IHN0cmluZ106IEpzb25WYWx1ZSB9O1xuICB9KTogUHJvbWlzZTxSbGpzb24+IHtcbiAgICBhd2FpdCB0aGlzLl9pb1Rvb2xzLnRocm93V2hlblRhYmxlRG9lc05vdEV4aXN0KHJlcXVlc3QudGFibGUpO1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuQ29sdW1uRG9lc05vdEV4aXN0KFxuICAgICAgcmVxdWVzdC50YWJsZSxcbiAgICAgIE9iamVjdC5rZXlzKHJlcXVlc3Qud2hlcmUpLFxuICAgICk7XG5cbiAgICAvLyBSZWFkIHRhYmxlIGZyb20gZGF0YVxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fbWVtW3JlcXVlc3QudGFibGVdIGFzIFRhYmxlVHlwZTtcblxuICAgIC8vIEZpbHRlciB0YWJsZSBkYXRhXG4gICAgY29uc3QgdGFibGVEYXRhRmlsdGVyZWQgPSB0YWJsZS5fZGF0YS5maWx0ZXIoKHJvdykgPT4ge1xuICAgICAgZm9yIChjb25zdCBjb2x1bW4gaW4gcmVxdWVzdC53aGVyZSkge1xuICAgICAgICBjb25zdCBhID0gcm93W2NvbHVtbl07XG4gICAgICAgIGNvbnN0IGIgPSByZXF1ZXN0LndoZXJlW2NvbHVtbl07XG4gICAgICAgIGlmIChiID09PSBudWxsICYmIGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFlcXVhbHMoYSwgYikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGFuIHRhYmxlXG4gICAgY29uc3QgdGFibGVGaWx0ZXJlZDogVGFibGVUeXBlID0ge1xuICAgICAgX3R5cGU6IHRhYmxlLl90eXBlLFxuICAgICAgX2RhdGE6IHRhYmxlRGF0YUZpbHRlcmVkLFxuICAgIH07XG5cbiAgICB0aGlzLl9pb1Rvb2xzLnNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKHRhYmxlRmlsdGVyZWQpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBSbGpzb24gPSB7XG4gICAgICBbcmVxdWVzdC50YWJsZV06IHRhYmxlRmlsdGVyZWQsXG4gICAgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBfcmVtb3ZlTnVsbFZhbHVlcyhybGpzb246IFJsanNvbikge1xuICAgIGl0ZXJhdGVUYWJsZXNTeW5jKHJsanNvbiwgKHRhYmxlKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gcmxqc29uW3RhYmxlXS5fZGF0YTtcblxuICAgICAgZm9yIChjb25zdCByb3cgb2YgZGF0YSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByb3cpIHtcbiAgICAgICAgICBpZiAocm93W2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiLy8gQGxpY2Vuc2Vcbi8vIENvcHlyaWdodCAoYykgMjAyNSBSbGpzb25cbi8vXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxuLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UuXG5cbmltcG9ydCB7IElvLCBJb01lbSB9IGZyb20gJy4vaW5kZXgudHMnO1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuLyoqXG4gKiBJbyBpbXBsZW1lbnRhdGlvbiBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZSB0byBiZSB1c2VkIGluXG4gKiBjb25mb3JtYW5jZSB0ZXN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJb1Rlc3RTZXR1cCB7XG4gIC8qKiBzZXR1cCBiZWZvcmUgdGhlIHNpbmdsZSBzZXR1cHMgKi9cbiAgYmVmb3JlQWxsOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgaW8gaW1wbGVtZW50YXRpb24uXG4gICAqIEByZXR1cm5zIFRoZSBpbyBpbXBsZW1lbnRhdGlvbi5cbiAgICovXG4gIGJlZm9yZUVhY2g6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRlYXJzIGRvd24gdGhlIGlvIGltcGxlbWVudGF0aW9uLlxuICAgKiBAcmV0dXJucyBUaGUgaW8gaW1wbGVtZW50YXRpb24uXG4gICAqL1xuICBhZnRlckVhY2g6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqIGNsZWFudXAgYWZ0ZXIgYWxsIHRlc3RzICovXG4gIGFmdGVyQWxsOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgaW8gaW1wbGVtZW50YXRpb24gdG8gYmUgdXNlZCBpbiB0aGUgY29uZm9ybWFuY2UgdGVzdHMuXG4gICAqL1xuICBpbzogSW87XG59XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4vLyBFeGFtcGxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJb1Rlc3RTZXR1cCBpbnRlcmZhY2VcbmV4cG9ydCBjb25zdCBleGFtcGxlVGVzdFNldHVwID0gKCk6IElvVGVzdFNldHVwID0+IHtcbiAgcmV0dXJuIHtcbiAgICBpbzogbmV3IElvTWVtKCksXG4gICAgYmVmb3JlQWxsOiBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCBmb3IgYW55IGFkZGl0aW9uYWwgc2V0dXAgcmVxdWlyZWQgYmVmb3JlIGluaXQuXG4gICAgICAvLyBDdXJyZW50bHksIGl0IGRvZXMgbm90aGluZy5cbiAgICB9LFxuXG4gICAgYmVmb3JlRWFjaDogYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgaW8gaW1wbGVtZW50YXRpb25cbiAgICB9LFxuICAgIGFmdGVyRWFjaDogYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVGVhciBkb3duIHRoZSBpbyBpbXBsZW1lbnRhdGlvblxuICAgIH0sXG5cbiAgICBhZnRlckFsbDogYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgZm9yIGFueSBhZGRpdGlvbmFsIGNsZWFudXAgYWZ0ZXIgdGVhckRvd24uXG4gICAgfSxcbiAgfTtcbn07XG4iLCIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgSnNvblZhbHVlIH0gZnJvbSAnQHJsanNvbi9qc29uJztcbmltcG9ydCB7IENvbnRlbnRUeXBlLCBSbGpzb24sIFRhYmxlQ2ZnLCBUYWJsZUtleSB9IGZyb20gJ0BybGpzb24vcmxqc29uJztcblxuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuZXhwb3J0IGludGVyZmFjZSBJbyB7XG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBHZW5lcmFsXG5cbiAgLyoqIFN0YXJ0cyB0aGUgaW5pdGlhbGl6YXRpb24gKi9cbiAgaW5pdCgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKiBDbG9zZXMgdGhlIGlvICovXG4gIGNsb3NlKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiBpbyBpcyBvcGVuZWQgKi9cbiAgaXNPcGVuOiBib29sZWFuO1xuXG4gIC8qKiBBIHByb21pc2UgcmVzb2x2aW5nIG9uY2UgdGhlIElvIGludGVyZmFjZSBpcyByZWFkeVxuICAgKlxuICAgKiDwn5KhIFVzZSBAcmxqc29uL2lzLXJlYWR5XG4gICAqL1xuICBpc1JlYWR5KCk6IFByb21pc2U8dm9pZD47XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIER1bXBcblxuICAvKiogUmV0dXJucyB0aGUgY29tcGxldGUgZGIgY29udGVudCBhcyBSbGpzb24gKi9cbiAgZHVtcCgpOiBQcm9taXNlPFJsanNvbj47XG5cbiAgLyoqIFJldHVybnMgdGhlIGR1bXAgb2YgYSBjb21wbGV0ZSB0YWJsZSAqL1xuICBkdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj47XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIE1ldGEgRGF0YVxuICBjb250ZW50VHlwZShyZXF1ZXN0OiB7IHRhYmxlOiBzdHJpbmcgfSk6IFByb21pc2U8Q29udGVudFR5cGU+O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBUYWJsZXNcblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0YWJsZSBleGlzdHNcbiAgICovXG4gIHRhYmxlRXhpc3RzKHRhYmxlS2V5OiBUYWJsZUtleSk6IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0YWJsZSB3aXRoIGEgZ2l2ZW4gY29uZmlnLlxuICAgKiBJZiB0aGUgdGFibGUgYWxyZWFkeSBleGlzdHMsIG5ldyBjb2x1bW5zIGFyZSBhZGRlZCB0byB0aGUgZXhpc3RpbmcgdGFibGUuXG4gICAqIElmIHRoZSB0YWJsZSBkb2VzIG5vdCBleGlzdCwgaXQgaXMgY3JlYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWcuXG4gICAqIElmIHRoZSB0YWJsZSBleGlzdHMgYW5kIGNvbHVtbnMgYXJlIHJlbW92ZWQsIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICogSWYgdGhlIHRhYmxlIGV4aXN0cyBhbmQgdGhlIGNvbHVtbiB0eXBlIGlzIGNoYW5nZWQsIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICovXG4gIGNyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdDogeyB0YWJsZUNmZzogVGFibGVDZmcgfSk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBqc29uIHN0cnVjdHVyZSByZXR1cm5pbmcgY3VycmVudCB0YWJsZSBjb25maWd1cmF0aW9uc1xuICAgKi9cbiAgcmF3VGFibGVDZmdzKCk6IFByb21pc2U8VGFibGVDZmdbXT47XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIFdyaXRlXG5cbiAgLyoqIFdyaXRlcyBSbGpzb24gZGF0YSBpbnRvIHRoZSBkYXRhYmFzZSAqL1xuICB3cml0ZShyZXF1ZXN0OiB7IGRhdGE6IFJsanNvbiB9KTogUHJvbWlzZTx2b2lkPjtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gUmVhZCByb3dzXG5cbiAgLyoqIFF1ZXJpZXMgYSBsaXN0IG9mIHJvd3MgKi9cbiAgcmVhZFJvd3MocmVxdWVzdDoge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgd2hlcmU6IHsgW2NvbHVtbjogc3RyaW5nXTogSnNvblZhbHVlIHwgbnVsbCB9O1xuICB9KTogUHJvbWlzZTxSbGpzb24+O1xuXG4gIC8qKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgZ2l2ZW4gdGFibGUgKi9cbiAgcm93Q291bnQodGFibGU6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPjtcbn1cblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbmV4cG9ydCBjb25zdCBleGFtcGxlSW8gPVxuICAnQ2hlY2tvdXQgQHJsanNvbi9pby1tZW0gZm9yIGFuIGV4YW1wbGUgaW1wbGVtZW50YXRpb24nO1xuIiwiLy8gQGxpY2Vuc2Vcbi8vIENvcHlyaWdodCAoYykgMjAyNSBSbGpzb25cbi8vXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxuLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UuXG5cbmltcG9ydCB7IEpzb24gfSBmcm9tICdAcmxqc29uL2pzb24nO1xuaW1wb3J0IHtcbiAgQnVmZmV0LFxuICBDYWtlLFxuICBpdGVyYXRlVGFibGVzU3luYyxcbiAgTGF5ZXIsXG4gIFJlZixcbiAgUmxqc29uLFxuICBUYWJsZUtleSxcbn0gZnJvbSAnQHJsanNvbi9ybGpzb24nO1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuLyoqXG4gKiBEZXNjcmliZXMgYSByb3cgdGhhdCByZWZlcmVuY2VzIGEgY2hpbGQgdGFibGUgcm93XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyZW50UmVmIHtcbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgdGFibGUgdGhhdCByZWZlcmVuY2VzIHRoZSBjaGlsZCB0YWJsZVxuICAgKi9cbiAgW3BhcmVudFRhYmxlOiBUYWJsZUtleV06IHtcbiAgICAvKipcbiAgICAgKiBUaGUgcGFyZW50IHJvdyB0aGF0IHJlZmVyZW5jZXMgdGhlIGNoaWxkIHJvd1xuICAgICAqL1xuICAgIFtwYXJlbnRSb3c6IFJlZl06IHtcbiAgICAgIC8qKlxuICAgICAgICogRGV0YWlscyBhYm91dCB0aGUgcmVmZXJlbmNlLCBlLmcuIGFuIGFycmF5IGluZGV4IGV0Yy5cbiAgICAgICAqL1xuICAgICAgZGV0YWlscz86IEpzb247XG4gICAgfTtcbiAgfTtcbn1cblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBwYXJlbnQgdGFibGUgcm93cyByZWZlcmVuY2luZyBhIGNoaWxkIHRhYmxlIHJvd1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldmVyc2VSZWZzIHtcbiAgLyoqXG4gICAqIFRoZSBjaGlsZCB0YWJsZSB3ZSBuZWVkIHRoZSByZWZlcmVuY2luZyByb3dzIGZvclxuICAgKi9cbiAgW2NoaWxkVGFibGU6IFRhYmxlS2V5XToge1xuICAgIC8qKlxuICAgICAqIFRoZSByb3cgaGFzaHdlIG5lZWQgdGhlIHJlZmVyZW5jaW5nIHJvd3MgZm9yXG4gICAgICovXG4gICAgW2NoaWxkUm93OiBSZWZdOiBQYXJlbnRSZWY7XG4gIH07XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAqL1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSByZXZlcnNlIHJlZmVyZW5jZXMgZm9yIGEgZ2l2ZW4gcmxqc29uIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgY2FsY1JldmVyc2VSZWZzID0gKHJsanNvbjogUmxqc29uKTogUmV2ZXJzZVJlZnMgPT4ge1xuICBjb25zdCByZXN1bHQ6IFJldmVyc2VSZWZzID0ge307XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBQcmVwYXJlIGRhdGEgc3RydWN0dXJlXG4gIGl0ZXJhdGVUYWJsZXNTeW5jKHJsanNvbiwgKGNoaWxkVGFibGVLZXksIHRhYmxlKSA9PiB7XG4gICAgY29uc3QgY2hpbGRUYWJsZTogeyBbY2hpbGRSb3dIYXNoOiBzdHJpbmddOiBQYXJlbnRSZWYgfSA9IHt9O1xuICAgIHJlc3VsdFtjaGlsZFRhYmxlS2V5XSA9IGNoaWxkVGFibGU7XG4gICAgZm9yIChjb25zdCBjaGlsZFJvdyBvZiB0YWJsZS5fZGF0YSkge1xuICAgICAgY2hpbGRUYWJsZVtjaGlsZFJvdy5faGFzaF0gPSB7fTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gR2VuZXJhdGUgcmV2ZXJzZSByZWZlcmVuY2VzXG4gIGl0ZXJhdGVUYWJsZXNTeW5jKHJsanNvbiwgKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZSkgPT4ge1xuICAgIC8vIEl0ZXJhdGUgYWxsIHJvd3Mgb2YgZWFjaCB0YWJsZVxuICAgIGZvciAoY29uc3QgcGFyZW50VGFibGVSb3cgb2YgcGFyZW50VGFibGUuX2RhdGEpIHtcbiAgICAgIC8vIEZpbmQgb3V0IHdoZSBvdGhlciB0YWJsZXMgJiByb3dzIGFyZSByZWZlcmVuY2VkIGJ5IHRoaXMgcm93XG4gICAgICAvLyBXcml0ZSB0aGVzZSBpbmZvcm1hdGlvbiBpbnR0byByZXN1bHRcbiAgICAgIHN3aXRjaCAocGFyZW50VGFibGUuX3R5cGUpIHtcbiAgICAgICAgY2FzZSAnY29tcG9uZW50cyc6XG4gICAgICAgICAgX3dyaXRlQ29tcG9uZW50UmVmcyhwYXJlbnRUYWJsZUtleSwgcGFyZW50VGFibGVSb3csIHJlc3VsdCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbGF5ZXJzJzoge1xuICAgICAgICAgIF93cml0ZUxheWVyUmVmcyhwYXJlbnRUYWJsZUtleSwgcGFyZW50VGFibGVSb3csIHJlc3VsdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdzbGljZUlkcyc6IHtcbiAgICAgICAgICAvLyBTbGljZSBpZHMgZG8gbm90IHJlZmVyZW5jZSBvdGhlciB0YWJsZXNcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2Nha2VzJzoge1xuICAgICAgICAgIF93cml0ZUNha2VSZWZzKHBhcmVudFRhYmxlS2V5LCBwYXJlbnRUYWJsZVJvdywgcmVzdWx0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2J1ZmZldHMnOiB7XG4gICAgICAgICAgX3dyaXRlQnVmZmV0UmVmcyhwYXJlbnRUYWJsZUtleSwgcGFyZW50VGFibGVSb3csIHJlc3VsdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKiB2OCBpZ25vcmUgZW5kICovXG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG5jb25zdCBfd3JpdGVDb21wb25lbnRSZWZzID0gKFxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxuICBwYXJlbnRSb3c6IEpzb24sXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXG4pID0+IHtcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XG5cbiAgZm9yIChjb25zdCBwYXJlbnRDb2x1bW5OYW1lIGluIHBhcmVudFJvdykge1xuICAgIGlmIChwYXJlbnRDb2x1bW5OYW1lLnN0YXJ0c1dpdGgoJ18nKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJlbnRDb2x1bW5OYW1lLmVuZHNXaXRoKCdSZWYnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBwYXJlbnRDb2x1bW5OYW1lLnNsaWNlKDAsIC0zKTtcbiAgICBjb25zdCBjaGlsZFJvd0hhc2ggPSBwYXJlbnRSb3dbcGFyZW50Q29sdW1uTmFtZV0gYXMgc3RyaW5nO1xuXG4gICAgX3dyaXRlKFxuICAgICAgcmVzdWx0LFxuICAgICAgY2hpbGRUYWJsZU5hbWUsXG4gICAgICBjaGlsZFJvd0hhc2gsXG4gICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICBwYXJlbnRSb3dIYXNoLFxuICAgICk7XG4gIH1cbn07XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG5jb25zdCBfd3JpdGVMYXllclJlZnMgPSAoXG4gIHBhcmVudFRhYmxlTmFtZTogVGFibGVLZXksXG4gIHBhcmVudFJvdzogTGF5ZXIsXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXG4pID0+IHtcbiAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBwYXJlbnRSb3cuY29tcG9uZW50c1RhYmxlO1xuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcblxuICBmb3IgKGNvbnN0IHNsaWNlSWQgaW4gcGFyZW50Um93LmFkZCkge1xuICAgIGlmIChzbGljZUlkLnN0YXJ0c1dpdGgoJ18nKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc2xpY2VIYXNoID0gcGFyZW50Um93LmFkZFtzbGljZUlkXSBhcyBzdHJpbmc7XG5cbiAgICBfd3JpdGUocmVzdWx0LCBjaGlsZFRhYmxlTmFtZSwgc2xpY2VIYXNoLCBwYXJlbnRUYWJsZU5hbWUsIHBhcmVudFJvd0hhc2gpO1xuICB9XG59O1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuY29uc3QgX3dyaXRlQ2FrZVJlZnMgPSAoXG4gIHBhcmVudFRhYmxlTmFtZTogVGFibGVLZXksXG4gIHBhcmVudFJvdzogQ2FrZSxcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcbikgPT4ge1xuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcblxuICBmb3IgKGNvbnN0IGxheWVyIGluIHBhcmVudFJvdy5sYXllcnMpIHtcbiAgICBjb25zdCBjaGlsZFRhYmxlTmFtZSA9IGxheWVyO1xuICAgIGNvbnN0IGNoaWxkUm93SGFzaCA9IHBhcmVudFJvdy5sYXllcnNbbGF5ZXJdIGFzIHN0cmluZztcbiAgICBfd3JpdGUoXG4gICAgICByZXN1bHQsXG4gICAgICBjaGlsZFRhYmxlTmFtZSxcbiAgICAgIGNoaWxkUm93SGFzaCxcbiAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgIHBhcmVudFJvd0hhc2gsXG4gICAgKTtcbiAgfVxufTtcblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbmNvbnN0IF93cml0ZUJ1ZmZldFJlZnMgPSAoXG4gIHBhcmVudFRhYmxlTmFtZTogVGFibGVLZXksXG4gIHBhcmVudFJvdzogQnVmZmV0LFxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxuKSA9PiB7XG4gIGNvbnN0IHBhcmVudFJvd0hhc2ggPSBwYXJlbnRSb3cuX2hhc2ggYXMgc3RyaW5nO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBwYXJlbnRSb3cuaXRlbXMpIHtcbiAgICBjb25zdCBjaGlsZFRhYmxlTmFtZSA9IGl0ZW0udGFibGU7XG4gICAgY29uc3QgY2hpbGRSb3dIYXNoID0gaXRlbS5yZWY7XG4gICAgX3dyaXRlKFxuICAgICAgcmVzdWx0LFxuICAgICAgY2hpbGRUYWJsZU5hbWUsXG4gICAgICBjaGlsZFJvd0hhc2gsXG4gICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICBwYXJlbnRSb3dIYXNoLFxuICAgICk7XG4gIH1cbn07XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG5jb25zdCBfd3JpdGUgPSAoXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXG4gIGNoaWxkVGFibGVOYW1lOiBzdHJpbmcsXG4gIGNoaWxkUm93SGFzaDogc3RyaW5nLFxuICBwYXJlbnRUYWJsZU5hbWU6IHN0cmluZyxcbiAgcGFyZW50Um93SGFzaDogc3RyaW5nLFxuKSA9PiB7XG4gIGNvbnN0IHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlID0gKHJlc3VsdFtjaGlsZFRhYmxlTmFtZV0gPz89IHt9KTtcbiAgY29uc3QgcmVmZXJlbmNlc0ZvckNoaWxkVGFibGVSb3cgPSAocmVmZXJlbmNlc0ZvckNoaWxkVGFibGVbY2hpbGRSb3dIYXNoXSA/Pz1cbiAgICB7fSk7XG5cbiAgcmVmZXJlbmNlc0ZvckNoaWxkVGFibGVSb3dbcGFyZW50VGFibGVOYW1lXSA/Pz0ge307XG4gIHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlUm93W3BhcmVudFRhYmxlTmFtZV1bcGFyZW50Um93SGFzaF0gPz89IHt9O1xufTtcbiJdLCJuYW1lcyI6WyJlIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUF5Qk8sTUFBTSxRQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtuQixZQUE0QixJQUFRO0FBQVIsU0FBQSxLQUFBO0FBQUEsRUFBUztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS3JDLFdBQVcsb0JBQW9CO0FBQzdCLFVBQU0sV0FBVyxJQUFjO0FBQUEsTUFDN0IsT0FBTztBQUFBLE1BQ1AsS0FBSztBQUFBLE1BQ0wsTUFBTTtBQUFBLE1BQ04sUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLE1BQ1IsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BRVYsU0FBUztBQUFBLFFBQ1A7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxRQUFBO0FBQUEsUUFFYjtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sWUFBWTtBQUFBLFVBQ1osV0FBVztBQUFBLFFBQUE7QUFBQSxRQUViO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsUUFBQTtBQUFBLFFBRWI7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxRQUFBO0FBQUEsUUFFYjtBQUFB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
|
|
692
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW8uanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9pby10b29scy50cyIsIi4uL3NyYy9pby1tZW0udHMiLCIuLi9zcmMvaW8tdGVzdC1zZXR1cC50cyIsIi4uL3NyYy9pby50cyIsIi4uL3NyYy9yZXZlcnNlLXJlZi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgaGlwIH0gZnJvbSAnQHJsanNvbi9oYXNoJztcbmltcG9ydCB7XG4gIGl0ZXJhdGVUYWJsZXMsXG4gIFJsanNvbixcbiAgVGFibGVDZmcsXG4gIFRhYmxlS2V5LFxuICBUYWJsZVR5cGUsXG4gIHRocm93T25JbnZhbGlkVGFibGVDZmcsXG4gIHZhbGlkYXRlUmxqc29uQWdhaW5zdFRhYmxlQ2ZnLFxufSBmcm9tICdAcmxqc29uL3JsanNvbic7XG5cbmltcG9ydCB7IElvTWVtIH0gZnJvbSAnLi9pby1tZW0udHMnO1xuaW1wb3J0IHsgSW8gfSBmcm9tICcuL2lvLnRzJztcblxuZXhwb3J0IHR5cGUgSW9PYnNlcnZlciA9IChkYXRhOiBSbGpzb24pID0+IHZvaWQ7XG5cbi8qKlxuICogUHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBJbyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBJb1Rvb2xzIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBpbyBUaGUgSW8gaW50ZXJmYWNlIHRvIHVzZVxuICAgKi9cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGlvOiBJbykge31cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFibGUgY29uZmlndXJhdGlvbiBvZiB0aGUgdGFibGVDZmdzIHRhYmxlLlxuICAgKi9cbiAgc3RhdGljIGdldCB0YWJsZUNmZ3NUYWJsZUNmZygpIHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IGhpcDxUYWJsZUNmZz4oe1xuICAgICAgX2hhc2g6ICcnLFxuICAgICAga2V5OiAndGFibGVDZmdzJyxcbiAgICAgIHR5cGU6ICd0YWJsZUNmZ3MnLFxuICAgICAgaXNIZWFkOiBmYWxzZSxcbiAgICAgIGlzUm9vdDogZmFsc2UsXG4gICAgICBpc1NoYXJlZDogdHJ1ZSxcbiAgICAgIHByZXZpb3VzOiAnJyxcblxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAga2V5OiAnX2hhc2gnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdIYXNoJyxcbiAgICAgICAgICB0aXRsZUxvbmc6ICdSb3cgSGFzaCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6ICdrZXknLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdLZXknLFxuICAgICAgICAgIHRpdGxlTG9uZzogJ1RhYmxlIEtleScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6ICd0eXBlJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB0aXRsZVNob3J0OiAnVHlwZScsXG4gICAgICAgICAgdGl0bGVMb25nOiAnQ29udGVudCBUeXBlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ2lzSGVhZCcsXG4gICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdJcyBIZWFkJyxcbiAgICAgICAgICB0aXRsZUxvbmc6ICdJcyBIZWFkIFRhYmxlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ2lzUm9vdCcsXG4gICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdJcyBSb290JyxcbiAgICAgICAgICB0aXRsZUxvbmc6ICdJcyBSb290IFRhYmxlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ2lzU2hhcmVkJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgdGl0bGVTaG9ydDogJ0lzIFNoYXJlZCcsXG4gICAgICAgICAgdGl0bGVMb25nOiAnSXMgU2hhcmVkIFRhYmxlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ3ByZXZpb3VzJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB0aXRsZVNob3J0OiAnUHJldmlvdXMnLFxuICAgICAgICAgIHRpdGxlTG9uZzogJ1ByZXZpb3VzIFRhYmxlIENvbmZpZ3VyYXRpb24gSGFzaCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6ICdjb2x1bW5zJyxcbiAgICAgICAgICB0eXBlOiAnanNvbkFycmF5JyxcbiAgICAgICAgICB0aXRsZVNob3J0OiAnQ29sdW1ucycsXG4gICAgICAgICAgdGl0bGVMb25nOiAnQ29sdW1uIENvbmZpZ3VyYXRpb25zJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGFibGVDZmc7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHJldmlzaW9ucyB0YWJsZS5cbiAgICovXG4gIGluaXRSZXZpc2lvbnNUYWJsZSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YWJsZUNmZzogVGFibGVDZmcgPSB7XG4gICAgICBrZXk6ICdyZXZpc2lvbnMnLFxuICAgICAgdHlwZTogJ3JldmlzaW9ucycsXG4gICAgICBpc0hlYWQ6IHRydWUsXG4gICAgICBpc1Jvb3Q6IHRydWUsXG4gICAgICBpc1NoYXJlZDogZmFsc2UsXG5cbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ19oYXNoJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB0aXRsZVNob3J0OiAnSGFzaCcsXG4gICAgICAgICAgdGl0bGVMb25nOiAnUm93IEhhc2gnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiAndGFibGUnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdUYWJsZScsXG4gICAgICAgICAgdGl0bGVMb25nOiAnVGFibGUgS2V5JyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ3ByZWRlY2Vzc29yJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB0aXRsZVNob3J0OiAnUHJlZGVjZXNzb3InLFxuICAgICAgICAgIHRpdGxlTG9uZzogJ1ByZWRlY2Vzc29yIFJldmlzaW9uIEhhc2gnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiAnc3VjY2Vzc29yJyxcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB0aXRsZVNob3J0OiAnU3VjY2Vzc29yJyxcbiAgICAgICAgICB0aXRsZUxvbmc6ICdTdWNjZXNzb3IgUmV2aXNpb24gSGFzaCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6ICd0aW1lc3RhbXAnLFxuICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgIHRpdGxlU2hvcnQ6ICdUaW1lc3RhbXAnLFxuICAgICAgICAgIHRpdGxlTG9uZzogJ1JldmlzaW9uIFRpbWVzdGFtcCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6ICdpZCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgdGl0bGVTaG9ydDogJ0lEJyxcbiAgICAgICAgICB0aXRsZUxvbmc6ICdSZXZpc2lvbiBJRCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG5cbiAgICBhd2FpdCB0aGlzLmlvLmNyZWF0ZU9yRXh0ZW5kVGFibGUoeyB0YWJsZUNmZyB9KTtcbiAgfTtcblxuICAvKipcbiAgICogRXhhbXBsZSBvYmplY3QgZm9yIHRlc3QgcHVycG9zZXNcbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgaW8gdG9vbHNcbiAgICovXG4gIHN0YXRpYyBleGFtcGxlID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlvID0gYXdhaXQgSW9NZW0uZXhhbXBsZSgpO1xuICAgIGF3YWl0IGlvLmluaXQoKTtcbiAgICBhd2FpdCBpby5pc1JlYWR5KCk7XG4gICAgcmV0dXJuIG5ldyBJb1Rvb2xzKGlvKTtcbiAgfTtcblxuICAvKipcbiAgICogVGhyb3dzIGlmIHRoZSB0YWJsZSBkb2VzIG5vdCBleGlzdFxuICAgKi9cbiAgYXN5bmMgdGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXhpc3RzID0gYXdhaXQgdGhpcy5pby50YWJsZUV4aXN0cyh0YWJsZSk7XG4gICAgaWYgKCFleGlzdHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgXCIke3RhYmxlfVwiIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgaWYgYW55IG9mIHRoZSB0YWJsZXMgaW4gcmxqc29uIGRvIG5vdCBleGlzdFxuICAgKiBAcGFyYW0gcmxqc29uIC0gVGhlIFJsanNvbiBvYmplY3QgdG8gY2hlY2tcbiAgICovXG4gIGFzeW5jIHRocm93V2hlblRhYmxlc0RvTm90RXhpc3Qocmxqc29uOiBSbGpzb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgaXRlcmF0ZVRhYmxlcyhybGpzb24sIGFzeW5jICh0YWJsZUtleSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdHMgPSBhd2FpdCB0aGlzLmlvLnRhYmxlRXhpc3RzKHRhYmxlS2V5KTtcbiAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhYmxlIFwiJHt0YWJsZUtleX1cIiBub3QgZm91bmRgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgbWlzc2luZ1RhYmxlcyA9IChlIGFzIEFycmF5PGFueT4pLm1hcCgoZSkgPT4gZS50YWJsZUtleSk7XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBmb2xsb3dpbmcgdGFibGVzIGRvIG5vdCBleGlzdDogJHttaXNzaW5nVGFibGVzLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGFibGUgY2ZncyBvZiBhbGwgdGFibGVzXG4gICAqIEByZXR1cm5zIFRoZSB0YWJsZSBjb25maWd1cmF0aW9uIG9mIGFsbCB0YWJsZXNcbiAgICovXG4gIGFzeW5jIHRhYmxlQ2ZncygpOiBQcm9taXNlPFRhYmxlQ2ZnW10+IHtcbiAgICBjb25zdCB0YWJsZXMgPSBhd2FpdCB0aGlzLmlvLnJhd1RhYmxlQ2ZncygpO1xuXG4gICAgLy8gVGFrZSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZWFjaCB0eXBlIGtleVxuICAgIGNvbnN0IG5ld2VzdFZlcnNpb246IFJlY29yZDxUYWJsZUtleSwgVGFibGVDZmc+ID0ge307XG4gICAgZm9yIChsZXQgaSA9IHRhYmxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgdGFibGUgPSB0YWJsZXNbaV07XG4gICAgICBjb25zdCBleGlzdGluZyA9IG5ld2VzdFZlcnNpb25bdGFibGUua2V5XTtcbiAgICAgIGlmICghZXhpc3RpbmcgfHwgZXhpc3RpbmcuY29sdW1ucy5sZW5ndGggPCB0YWJsZS5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICBuZXdlc3RWZXJzaW9uW3RhYmxlLmtleV0gPSB0YWJsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTb3J0IHRoZSB0YWJsZXMgYnkga2V5XG4gICAgLyogdjggaWdub3JlIG5leHQgLS0gQHByZXNlcnZlICovXG4gICAgY29uc3QgcmVzdWx0RGF0YSA9IE9iamVjdC52YWx1ZXMobmV3ZXN0VmVyc2lvbikuc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKGEua2V5IDwgYi5rZXkpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgaWYgKGEua2V5ID4gYi5rZXkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHREYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IHdpdGggYWxsIHRhYmxlIG5hbWVzXG4gICAqL1xuICBhc3luYyBhbGxUYWJsZUtleXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCB0aGlzLnRhYmxlQ2ZncygpKS5tYXAoKGUpID0+IGUua2V5KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBnaXZlbiB0YWJsZVxuICAgKi9cbiAgYXN5bmMgdGFibGVDZmcodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTxUYWJsZUNmZz4ge1xuICAgIGNvbnN0IHRhYmxlQ2ZnID0gYXdhaXQgdGhpcy50YWJsZUNmZ09yTnVsbCh0YWJsZSk7XG4gICAgaWYgKCF0YWJsZUNmZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWJsZSBcIiR7dGFibGV9XCIgbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlQ2ZnITtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgZ2l2ZW4gdGFibGUgb3IgbnVsbCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cblxuICAgKi9cbiAgYXN5bmMgdGFibGVDZmdPck51bGwodGFibGU6IFRhYmxlS2V5KTogUHJvbWlzZTxUYWJsZUNmZyB8IG51bGw+IHtcbiAgICBjb25zdCB0YWJsZUNmZ3MgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZncygpO1xuICAgIGNvbnN0IHRhYmxlQ2ZnID0gdGFibGVDZmdzLmZpbmQoKGUpID0+IGUua2V5ID09PSB0YWJsZSk7XG4gICAgcmV0dXJuIHRhYmxlQ2ZnID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxpc3Qgb2YgYWxsIGNvbHVtbiBuYW1lcyBvZiBhIGdpdmVuIHRhYmxlXG4gICAqL1xuICBhc3luYyBhbGxDb2x1bW5LZXlzKHRhYmxlOiBUYWJsZUtleSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRhYmxlQ2ZnLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIHdoZW4gYSBjb2x1bW4gZG9lcyBub3QgZXhpc3QgaW4gYSBnaXZlbiB0YWJsZVxuICAgKiBAcGFyYW0gdGFibGUgLSBUaGUgdGFibGUgdG8gY2hlY2tcbiAgICogQHBhcmFtIGNvbHVtbnMgLSBUaGUgY29sdW1uIHRvIGNoZWNrXG4gICAqL1xuICBhc3luYyB0aHJvd1doZW5Db2x1bW5Eb2VzTm90RXhpc3QoXG4gICAgdGFibGU6IFRhYmxlS2V5LFxuICAgIGNvbHVtbnM6IHN0cmluZ1tdLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0YWJsZUNmZyA9IGF3YWl0IHRoaXMudGFibGVDZmcodGFibGUpO1xuICAgIGNvbnN0IGNvbHVtbktleXMgPSB0YWJsZUNmZy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5KTtcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKFxuICAgICAgKGNvbHVtbikgPT4gIWNvbHVtbktleXMuaW5jbHVkZXMoY29sdW1uKSxcbiAgICApO1xuICAgIGlmIChtaXNzaW5nQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUaGUgZm9sbG93aW5nIGNvbHVtbnMgZG8gbm90IGV4aXN0IGluIHRhYmxlIFwiJHt0YWJsZX1cIjogJHttaXNzaW5nQ29sdW1ucy5qb2luKFxuICAgICAgICAgICcsICcsXG4gICAgICAgICl9LmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3Mgd2hlbiBhIHRhYmxlIHVwZGF0ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IHRhYmxlXG4gICAqIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBhc3luYyB0aHJvd1doZW5UYWJsZUlzTm90Q29tcGF0aWJsZSh1cGRhdGU6IFRhYmxlQ2ZnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJlZml4ID0gYEludmFsaWQgdXBkYXRlIG9mIHRhYmxlIGFibGUgXCIke3VwZGF0ZS5rZXl9XCJgO1xuXG4gICAgdGhyb3dPbkludmFsaWRUYWJsZUNmZyh1cGRhdGUpO1xuXG4gICAgLy8gQ2hlY2sgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIHRhYmxlXG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnRhYmxlQ2ZnT3JOdWxsKHVwZGF0ZS5rZXkpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgLy8gSGF2ZSBjb2x1bW5zIGJlZW4gZGVsZXRlZD9cbiAgICAgIGlmIChleGlzdGluZy5jb2x1bW5zLmxlbmd0aCA+IHVwZGF0ZS5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkZWxldGVkQ29sdW1uS2V5cyA9IGV4aXN0aW5nLmNvbHVtbnNcbiAgICAgICAgICAubWFwKChjb2x1bW4pID0+IGNvbHVtbi5rZXkpXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChrZXkpID0+ICF1cGRhdGUuY29sdW1ucy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5rZXkgPT09IGtleSksXG4gICAgICAgICAgKTtcbiAgICAgICAgLyogdjggaWdub3JlIG5leHQgLS0gQHByZXNlcnZlICovXG4gICAgICAgIGlmIChkZWxldGVkQ29sdW1uS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgZGVsZXRlZENvbHVtbnMgPSBkZWxldGVkQ29sdW1uS2V5cy5qb2luKCcsICcpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGAke3ByZWZpeH06IENvbHVtbnMgbXVzdCBub3QgYmUgZGVsZXRlZC4gYCArXG4gICAgICAgICAgICAgIGBEZWxldGVkIGNvbHVtbnM6ICR7ZGVsZXRlZENvbHVtbnN9fWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBIYXZlIGNvbHVtbiBrZXlzIGNoYW5nZWQ/XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYmVmb3JlID0gZXhpc3RpbmcuY29sdW1uc1tpXS5rZXk7XG4gICAgICAgIGNvbnN0IGFmdGVyID0gdXBkYXRlLmNvbHVtbnNbaV0ua2V5O1xuICAgICAgICBpZiAoYmVmb3JlICE9PSBhZnRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGAke3ByZWZpeH06IGAgK1xuICAgICAgICAgICAgICBgQ29sdW1uIGtleXMgbXVzdCBub3QgY2hhbmdlISBgICtcbiAgICAgICAgICAgICAgYENvbHVtbiBcIiR7YmVmb3JlfVwiIHdhcyByZW5hbWVkIGludG8gXCIke2FmdGVyfVwiLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBIYXZlIGNvbHVtbiB0eXBlcyBjaGFuZ2VkP1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleGlzdGluZy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGV4aXN0aW5nLmNvbHVtbnNbaV0ua2V5O1xuICAgICAgICBjb25zdCBiZWZvcmUgPSBleGlzdGluZy5jb2x1bW5zW2ldLnR5cGU7XG4gICAgICAgIGNvbnN0IGFmdGVyID0gdXBkYXRlLmNvbHVtbnNbaV0udHlwZTtcbiAgICAgICAgaWYgKGJlZm9yZSAhPT0gYWZ0ZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgJHtwcmVmaXh9OiBgICtcbiAgICAgICAgICAgICAgYENvbHVtbiB0eXBlcyBtdXN0IG5vdCBjaGFuZ2UhIGAgK1xuICAgICAgICAgICAgICBgVHlwZSBvZiBjb2x1bW4gXCIke2NvbHVtbn1cIiB3YXMgY2hhbmdlZCBmcm9tIFwiJHtiZWZvcmV9XCIgdG8gJHthZnRlcn0uYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBpZiB0aGUgZGF0YSBpbiB0aGUgdGFibGUgZG8gbm90IG1hdGNoIHRoZSB0YWJsZSBjb25maWd1cmF0aW9uXG4gICAqL1xuICBhc3luYyB0aHJvd1doZW5UYWJsZURhdGFEb2VzTm90TWF0Y2hDZmcoZGF0YTogUmxqc29uKSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgYXdhaXQgaXRlcmF0ZVRhYmxlcyhkYXRhLCBhc3luYyAodGFibGVLZXkpID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlQ2ZnID0gYXdhaXQgdGhpcy50YWJsZUNmZyh0YWJsZUtleSk7XG4gICAgICBjb25zdCB0YWJsZSA9IGRhdGFbdGFibGVLZXldO1xuXG4gICAgICAvLyBJZ25vcmUgdGFibGVDZmdzIHRhYmxlXG4gICAgICAvKiB2OCBpZ25vcmUgbmV4dCAtLSBAcHJlc2VydmUgKi9cbiAgICAgIGlmICh0YWJsZS5fdHlwZSA9PT0gJ3RhYmxlQ2ZncycpIHJldHVybjtcblxuICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVSbGpzb25BZ2FpbnN0VGFibGVDZmcodGFibGUuX2RhdGEsIHRhYmxlQ2ZnKSk7XG4gICAgfSk7XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRhYmxlIGRhdGEgZG9lcyBub3QgbWF0Y2ggdGhlIGNvbmZpZ3VyYXRpb24uXFxuXFxuRXJyb3JzOlxcbiR7ZXJyb3JzXG4gICAgICAgICAgLm1hcCgoZSkgPT4gYC0gJHtlfWApXG4gICAgICAgICAgLmpvaW4oJ1xcbicpfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyB0aGUgZGF0YSBvZiBhIHRhYmxlIGJ5IHRoZSBoYXNoIGFuZCB1cGRhdGVzIHRoZSB0YWJsZSBoYXNoIGluIHBsYWNlXG4gICAqL1xuICBzb3J0VGFibGVEYXRhQW5kVXBkYXRlSGFzaCh0YWJsZTogVGFibGVUeXBlKTogdm9pZCB7XG4gICAgdGFibGUuX2RhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgaGFzaEEgPSBhLl9oYXNoIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGhhc2hCID0gYi5faGFzaCBhcyBzdHJpbmc7XG4gICAgICAvKiB2OCBpZ25vcmUgbmV4dCAtLSBAcHJlc2VydmUgKi9cbiAgICAgIGlmIChoYXNoQSA8IGhhc2hCKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIC8qIHY4IGlnbm9yZSBuZXh0IC0tIEBwcmVzZXJ2ZSAqL1xuICAgICAgaWYgKGhhc2hBID4gaGFzaEIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIC8qIHY4IGlnbm9yZSBuZXh0IC0tIEBwcmVzZXJ2ZSAqL1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG5cbiAgICB0YWJsZS5faGFzaCA9ICcnO1xuICAgIGhpcCh0YWJsZSwge1xuICAgICAgdXBkYXRlRXhpc3RpbmdIYXNoZXM6IGZhbHNlLFxuICAgICAgdGhyb3dPbldyb25nSGFzaGVzOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxufVxuIiwiLy8gQGxpY2Vuc2Vcbi8vIENvcHlyaWdodCAoYykgMjAyNSBSbGpzb25cbi8vXG4vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSB0ZXJtcyB0aGF0IGNhbiBiZVxuLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGlzIHBhY2thZ2UuXG5cbmltcG9ydCB7IGhpcCwgaHNoIH0gZnJvbSAnQHJsanNvbi9oYXNoJztcbmltcG9ydCB7IElzUmVhZHkgfSBmcm9tICdAcmxqc29uL2lzLXJlYWR5JztcbmltcG9ydCB7IGNvcHksIGVxdWFscywgSnNvblZhbHVlIH0gZnJvbSAnQHJsanNvbi9qc29uJztcbmltcG9ydCB7XG4gIENvbnRlbnRUeXBlLCBpdGVyYXRlVGFibGVzU3luYywgUmxqc29uLCBUYWJsZUNmZywgVGFibGVLZXksIFRhYmxlVHlwZVxufSBmcm9tICdAcmxqc29uL3JsanNvbic7XG5cbmltcG9ydCB7IElvVG9vbHMgfSBmcm9tICcuL2lvLXRvb2xzLnRzJztcbmltcG9ydCB7IElvIH0gZnJvbSAnLi9pby50cyc7XG5cblxuLyoqXG4gKiBJbi1NZW1vcnkgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJsanNvbiBJbyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBJb01lbSBpbXBsZW1lbnRzIElvIHtcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIENvbnN0cnVjdG9yICYgZXhhbXBsZVxuXG4gIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5faW5pdCgpO1xuICB9XG5cbiAgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5faXNPcGVuID0gZmFsc2U7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNPcGVuO1xuICB9XG5cbiAgc3RhdGljIGV4YW1wbGUgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgaW8gPSBuZXcgSW9NZW0oKTtcbiAgICBhd2FpdCBpby5pbml0KCk7XG4gICAgcmV0dXJuIGlvO1xuICB9O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBHZW5lcmFsXG4gIGlzUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmVhZHkucHJvbWlzZTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBEdW1wXG5cbiAgZHVtcCgpOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIHJldHVybiB0aGlzLl9kdW1wKCk7XG4gIH1cblxuICBhc3luYyBkdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIHJldHVybiB0aGlzLl9kdW1wVGFibGUocmVxdWVzdCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gTWV0YSBEYXRhXG5cbiAgYXN5bmMgY29udGVudFR5cGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPENvbnRlbnRUeXBlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRUeXBlKHJlcXVlc3QpO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIFJvd3NcblxuICByZWFkUm93cyhyZXF1ZXN0OiB7XG4gICAgdGFibGU6IHN0cmluZztcbiAgICB3aGVyZTogeyBbY29sdW1uOiBzdHJpbmddOiBKc29uVmFsdWUgfTtcbiAgfSk6IFByb21pc2U8Umxqc29uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRSb3dzKHJlcXVlc3QpO1xuICB9XG5cbiAgYXN5bmMgcm93Q291bnQodGFibGU6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdGFibGVEYXRhID0gdGhpcy5fbWVtW3RhYmxlXSBhcyBUYWJsZVR5cGU7XG4gICAgaWYgKCF0YWJsZURhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgXCIke3RhYmxlfVwiIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRhYmxlRGF0YS5fZGF0YS5sZW5ndGgpO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIFdyaXRlXG5cbiAgd3JpdGUocmVxdWVzdDogeyBkYXRhOiBSbGpzb24gfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl93cml0ZShyZXF1ZXN0KTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBUYWJsZSBtYW5hZ2VtZW50XG4gIGFzeW5jIHRhYmxlRXhpc3RzKHRhYmxlS2V5OiBUYWJsZUtleSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fbWVtW3RhYmxlS2V5XSBhcyBUYWJsZVR5cGU7XG4gICAgcmV0dXJuIHRhYmxlID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgY3JlYXRlT3JFeHRlbmRUYWJsZShyZXF1ZXN0OiB7IHRhYmxlQ2ZnOiBUYWJsZUNmZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdCk7XG4gIH1cblxuICBhc3luYyByYXdUYWJsZUNmZ3MoKTogUHJvbWlzZTxUYWJsZUNmZ1tdPiB7XG4gICAgY29uc3QgdGFibGVzID0gdGhpcy5fbWVtLnRhYmxlQ2Zncy5fZGF0YSBhcyBUYWJsZUNmZ1tdO1xuICAgIHJldHVybiB0YWJsZXM7XG4gIH1cblxuICAvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4gIC8vIFByaXZhdGVcbiAgLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuXG4gIHByaXZhdGUgX2lvVG9vbHMhOiBJb1Rvb2xzO1xuXG4gIHByaXZhdGUgX2lzUmVhZHkgPSBuZXcgSXNSZWFkeSgpO1xuICBwcml2YXRlIF9pc09wZW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF9tZW06IFJsanNvbiA9IGhpcCh7fSBhcyBSbGpzb24pO1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIGFzeW5jIF9pbml0KCkge1xuICAgIHRoaXMuX2lvVG9vbHMgPSBuZXcgSW9Ub29scyh0aGlzKTtcbiAgICB0aGlzLl9pbml0VGFibGVDZmdzKCk7XG4gICAgdGhpcy5fdXBkYXRlR2xvYmFsSGFzaCgpO1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMuaW5pdFJldmlzaW9uc1RhYmxlKCk7XG4gICAgaHNoKHRoaXMuX21lbSk7XG5cbiAgICB0aGlzLl9pc1JlYWR5LnJlc29sdmUoKTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIF9pbml0VGFibGVDZmdzID0gKCkgPT4ge1xuICAgIGNvbnN0IHRhYmxlQ2ZnID0gSW9Ub29scy50YWJsZUNmZ3NUYWJsZUNmZztcblxuICAgIHRoaXMuX21lbS50YWJsZUNmZ3MgPSBoaXAoe1xuICAgICAgX3R5cGU6ICd0YWJsZUNmZ3MnLFxuICAgICAgX2RhdGE6IFt0YWJsZUNmZ10sXG4gICAgICBfdGFibGVDZmc6IHRhYmxlQ2ZnLl9oYXNoIGFzIHN0cmluZyxcbiAgICB9KTtcbiAgfTtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBfdXBkYXRlR2xvYmFsSGFzaCgpIHtcbiAgICAodGhpcy5fbWVtIGFzIGFueSkuX2hhc2ggPSAnJztcbiAgICBoaXAodGhpcy5fbWVtLCB7XG4gICAgICB1cGRhdGVFeGlzdGluZ0hhc2hlczogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBfdXBkYXRlVGFibGVIYXNoKHRhYmxlS2V5OiBUYWJsZUtleSkge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5fbWVtW3RhYmxlS2V5XSBhcyBUYWJsZVR5cGU7XG4gICAgdGFibGUuX2hhc2ggPSAnJztcbiAgICBoaXAodGFibGUsIHsgdXBkYXRlRXhpc3RpbmdIYXNoZXM6IGZhbHNlIH0pO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgYXN5bmMgX2NyZWF0ZU9yRXh0ZW5kVGFibGUocmVxdWVzdDoge1xuICAgIHRhYmxlQ2ZnOiBUYWJsZUNmZztcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSB0YWJsZSBjb25maWcgaXMgY29tcGF0aWJsZVxuICAgIC8vIHdpdGggYW4gcG90ZW50aWFsIGV4aXN0aW5nIHRhYmxlXG4gICAgY29uc3QgdGFibGVDZmcgPSByZXF1ZXN0LnRhYmxlQ2ZnO1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVJc05vdENvbXBhdGlibGUodGFibGVDZmcpO1xuXG4gICAgY29uc3QgeyBrZXkgfSA9IHRhYmxlQ2ZnO1xuXG4gICAgLy8gUmVjcmVhdGUgaGFzaGVzIGluIHRoZSBjYXNlIHRoZSBleGlzdGluZyBoYXNoZXMgYXJlIHdyb25nXG4gICAgY29uc3QgbmV3Q29uZmlnID0gaHNoKHRhYmxlQ2ZnKTtcblxuICAgIC8vIEZpbmQgYW4gZXhpc3RpbmcgdGFibGUgY29uZmlnIHdpdGggdGhlIHNhbWUgaGFzaFxuICAgIGNvbnN0IGV4aXN0aW5nQ29uZmlnID0gYXdhaXQgdGhpcy5faW9Ub29scy50YWJsZUNmZ09yTnVsbChrZXkpO1xuXG4gICAgLy8gV3JpdGUgdGhlIG5ldyBjb25maWcgaW50byB0aGUgZGF0YWJhc2VcbiAgICBpZiAoIWV4aXN0aW5nQ29uZmlnKSB7XG4gICAgICB0aGlzLl9jcmVhdGVUYWJsZShuZXdDb25maWcsIGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2V4dGVuZFRhYmxlKGV4aXN0aW5nQ29uZmlnLCBuZXdDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIF9jcmVhdGVUYWJsZShuZXdDb25maWc6IFRhYmxlQ2ZnLCB0YWJsZUtleTogVGFibGVLZXkpIHtcbiAgICAvLyBXcml0ZSB0aGUgdGFibGUgY29uZmlnIGludG8gdGhlIGRhdGFiYXNlXG4gICAgbmV3Q29uZmlnID0gaHNoKG5ld0NvbmZpZyk7XG4gICAgdGhpcy5fbWVtLnRhYmxlQ2Zncy5fZGF0YS5wdXNoKG5ld0NvbmZpZyk7XG4gICAgdGhpcy5faW9Ub29scy5zb3J0VGFibGVEYXRhQW5kVXBkYXRlSGFzaCh0aGlzLl9tZW0udGFibGVDZmdzKTtcblxuICAgIC8vIENyZWF0ZSBhIHRhYmxlIGFuZCB3cml0ZSBpdCBpbnRvIHRoZSBkYXRhYmFzZVxuICAgIGNvbnN0IHRhYmxlOiBUYWJsZVR5cGUgPSB7XG4gICAgICBfdHlwZTogbmV3Q29uZmlnLnR5cGUsXG4gICAgICBfZGF0YTogW10sXG4gICAgICBfdGFibGVDZmc6IG5ld0NvbmZpZy5faGFzaCBhcyBzdHJpbmcsXG4gICAgfTtcblxuICAgIHRoaXMuX21lbVt0YWJsZUtleV0gPz89IGhpcCh0YWJsZSk7XG5cbiAgICAvLyBVcGRhdGUgaGFzaGVzXG4gICAgdGhpcy5fdXBkYXRlVGFibGVIYXNoKHRhYmxlS2V5KTtcbiAgICB0aGlzLl91cGRhdGVHbG9iYWxIYXNoKCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBfZXh0ZW5kVGFibGUoZXhpc3RpbmdDb25maWc6IFRhYmxlQ2ZnLCBuZXdDb25maWc6IFRhYmxlQ2ZnKSB7XG4gICAgLy8gTm8gY29sdW1ucyBhZGRlZD8gUmV0dXJuLlxuICAgIGlmIChleGlzdGluZ0NvbmZpZy5jb2x1bW5zLmxlbmd0aCA9PT0gbmV3Q29uZmlnLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV3JpdGUgdGhlIG5ldyB0YWJsZSBjb25maWcgaW50byB0aGUgZGF0YWJhc2VcbiAgICBuZXdDb25maWcgPSBoc2gobmV3Q29uZmlnKTtcbiAgICB0aGlzLl9tZW0udGFibGVDZmdzLl9kYXRhLnB1c2gobmV3Q29uZmlnKTtcbiAgICB0aGlzLl9pb1Rvb2xzLnNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKHRoaXMuX21lbS50YWJsZUNmZ3MpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBjb25maWcgb2YgdGhlIGV4aXN0aW5nIHRhYmxlXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bbmV3Q29uZmlnLmtleV0gYXMgVGFibGVUeXBlO1xuICAgIHRhYmxlLl90YWJsZUNmZyA9IG5ld0NvbmZpZy5faGFzaCBhcyBzdHJpbmc7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGhhc2hlc1xuICAgIHRoaXMuX3VwZGF0ZVRhYmxlSGFzaChuZXdDb25maWcua2V5KTtcbiAgICB0aGlzLl91cGRhdGVHbG9iYWxIYXNoKCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cblxuICBwcml2YXRlIGFzeW5jIF9kdW1wKCk6IFByb21pc2U8Umxqc29uPiB7XG4gICAgcmV0dXJuIGNvcHkodGhpcy5fbWVtKTtcbiAgfVxuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICBwcml2YXRlIGFzeW5jIF9kdW1wVGFibGUocmVxdWVzdDogeyB0YWJsZTogc3RyaW5nIH0pOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QocmVxdWVzdC50YWJsZSk7XG5cbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuX21lbVtyZXF1ZXN0LnRhYmxlXSBhcyBUYWJsZVR5cGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgW3JlcXVlc3QudGFibGVdOiBjb3B5KHRhYmxlKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgYXN5bmMgX2NvbnRlbnRUeXBlKHJlcXVlc3Q6IHsgdGFibGU6IHN0cmluZyB9KTogUHJvbWlzZTxDb250ZW50VHlwZT4ge1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QocmVxdWVzdC50YWJsZSk7XG5cbiAgICByZXR1cm4gKHRoaXMuX21lbVtyZXF1ZXN0LnRhYmxlXSBhcyBUYWJsZVR5cGUpLl90eXBlO1xuICB9XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIHByaXZhdGUgYXN5bmMgX3dyaXRlKHJlcXVlc3Q6IHsgZGF0YTogUmxqc29uIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhZGRlZERhdGEgPSBoc2gocmVxdWVzdC5kYXRhKTtcbiAgICB0aGlzLl9yZW1vdmVOdWxsVmFsdWVzKGFkZGVkRGF0YSk7XG4gICAgY29uc3QgdGFibGVzID0gT2JqZWN0LmtleXMoYWRkZWREYXRhKTtcbiAgICBoc2goYWRkZWREYXRhKTtcblxuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVzRG9Ob3RFeGlzdChyZXF1ZXN0LmRhdGEpO1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEYXRhRG9lc05vdE1hdGNoQ2ZnKHJlcXVlc3QuZGF0YSk7XG5cbiAgICBmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuICAgICAgaWYgKHRhYmxlLnN0YXJ0c1dpdGgoJ18nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2xkVGFibGUgPSB0aGlzLl9tZW1bdGFibGVdIGFzIFRhYmxlVHlwZTtcbiAgICAgIGNvbnN0IG5ld1RhYmxlID0gYWRkZWREYXRhW3RhYmxlXSBhcyBUYWJsZVR5cGU7XG5cbiAgICAgIC8vIFRhYmxlIGV4aXN0cy4gTWVyZ2UgZGF0YVxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG5ld1RhYmxlLl9kYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBpdGVtLl9oYXNoO1xuICAgICAgICBjb25zdCBleGlzdHMgPSBvbGRUYWJsZS5fZGF0YS5maW5kKChpKSA9PiBpLl9oYXNoID09PSBoYXNoKTtcbiAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICBvbGRUYWJsZS5fZGF0YS5wdXNoKGl0ZW0gYXMgYW55KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9pb1Rvb2xzLnNvcnRUYWJsZURhdGFBbmRVcGRhdGVIYXNoKG9sZFRhYmxlKTtcbiAgICB9XG5cbiAgICAvLyBSZWNhbGMgbWFpbiBoYXNoZXNcbiAgICB0aGlzLl91cGRhdGVHbG9iYWxIYXNoKCk7XG4gIH1cblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgcHJpdmF0ZSBhc3luYyBfcmVhZFJvd3MocmVxdWVzdDoge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgd2hlcmU6IHsgW2NvbHVtbjogc3RyaW5nXTogSnNvblZhbHVlIH07XG4gIH0pOiBQcm9taXNlPFJsanNvbj4ge1xuICAgIGF3YWl0IHRoaXMuX2lvVG9vbHMudGhyb3dXaGVuVGFibGVEb2VzTm90RXhpc3QocmVxdWVzdC50YWJsZSk7XG4gICAgYXdhaXQgdGhpcy5faW9Ub29scy50aHJvd1doZW5Db2x1bW5Eb2VzTm90RXhpc3QoXG4gICAgICByZXF1ZXN0LnRhYmxlLFxuICAgICAgT2JqZWN0LmtleXMocmVxdWVzdC53aGVyZSksXG4gICAgKTtcblxuICAgIC8vIFJlYWQgdGFibGUgZnJvbSBkYXRhXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLl9tZW1bcmVxdWVzdC50YWJsZV0gYXMgVGFibGVUeXBlO1xuXG4gICAgLy8gRmlsdGVyIHRhYmxlIGRhdGFcbiAgICBjb25zdCB0YWJsZURhdGFGaWx0ZXJlZCA9IHRhYmxlLl9kYXRhLmZpbHRlcigocm93KSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBpbiByZXF1ZXN0LndoZXJlKSB7XG4gICAgICAgIGNvbnN0IGEgPSByb3dbY29sdW1uXTtcbiAgICAgICAgY29uc3QgYiA9IHJlcXVlc3Qud2hlcmVbY29sdW1uXTtcbiAgICAgICAgaWYgKGIgPT09IG51bGwgJiYgYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWVxdWFscyhhLCBiKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgYW4gdGFibGVcbiAgICBjb25zdCB0YWJsZUZpbHRlcmVkOiBUYWJsZVR5cGUgPSB7XG4gICAgICBfdHlwZTogdGFibGUuX3R5cGUsXG4gICAgICBfZGF0YTogdGFibGVEYXRhRmlsdGVyZWQsXG4gICAgfTtcblxuICAgIHRoaXMuX2lvVG9vbHMuc29ydFRhYmxlRGF0YUFuZFVwZGF0ZUhhc2godGFibGVGaWx0ZXJlZCk7XG5cbiAgICBjb25zdCByZXN1bHQ6IFJsanNvbiA9IHtcbiAgICAgIFtyZXF1ZXN0LnRhYmxlXTogdGFibGVGaWx0ZXJlZCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIF9yZW1vdmVOdWxsVmFsdWVzKHJsanNvbjogUmxqc29uKSB7XG4gICAgaXRlcmF0ZVRhYmxlc1N5bmMocmxqc29uLCAodGFibGUpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBybGpzb25bdGFibGVdLl9kYXRhO1xuXG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBkYXRhKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJvdykge1xuICAgICAgICAgIGlmIChyb3dba2V5XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCIvLyBAbGljZW5zZVxuLy8gQ29weXJpZ2h0IChjKSAyMDI1IFJsanNvblxuLy9cbi8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IHRlcm1zIHRoYXQgY2FuIGJlXG4vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoaXMgcGFja2FnZS5cblxuaW1wb3J0IHsgSW8sIElvTWVtIH0gZnJvbSAnLi9pbmRleC50cyc7XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4vKipcbiAqIElvIGltcGxlbWVudGF0aW9uIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIHRvIGJlIHVzZWQgaW5cbiAqIGNvbmZvcm1hbmNlIHRlc3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElvVGVzdFNldHVwIHtcbiAgLyoqIHNldHVwIGJlZm9yZSB0aGUgc2luZ2xlIHNldHVwcyAqL1xuICBiZWZvcmVBbGw6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBpbyBpbXBsZW1lbnRhdGlvbi5cbiAgICogQHJldHVybnMgVGhlIGlvIGltcGxlbWVudGF0aW9uLlxuICAgKi9cbiAgYmVmb3JlRWFjaDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGVhcnMgZG93biB0aGUgaW8gaW1wbGVtZW50YXRpb24uXG4gICAqIEByZXR1cm5zIFRoZSBpbyBpbXBsZW1lbnRhdGlvbi5cbiAgICovXG4gIGFmdGVyRWFjaDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKiogY2xlYW51cCBhZnRlciBhbGwgdGVzdHMgKi9cbiAgYWZ0ZXJBbGw6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBpbyBpbXBsZW1lbnRhdGlvbiB0byBiZSB1c2VkIGluIHRoZSBjb25mb3JtYW5jZSB0ZXN0cy5cbiAgICovXG4gIGlvOiBJbztcbn1cblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbi8vIEV4YW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIElvVGVzdFNldHVwIGludGVyZmFjZVxuZXhwb3J0IGNvbnN0IGV4YW1wbGVUZXN0U2V0dXAgPSAoKTogSW9UZXN0U2V0dXAgPT4ge1xuICByZXR1cm4ge1xuICAgIGlvOiBuZXcgSW9NZW0oKSxcbiAgICBiZWZvcmVBbGw6IGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGZvciBhbnkgYWRkaXRpb25hbCBzZXR1cCByZXF1aXJlZCBiZWZvcmUgaW5pdC5cbiAgICAgIC8vIEN1cnJlbnRseSwgaXQgZG9lcyBub3RoaW5nLlxuICAgIH0sXG5cbiAgICBiZWZvcmVFYWNoOiBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBJbml0aWFsaXplIHRoZSBpbyBpbXBsZW1lbnRhdGlvblxuICAgIH0sXG4gICAgYWZ0ZXJFYWNoOiBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBUZWFyIGRvd24gdGhlIGlvIGltcGxlbWVudGF0aW9uXG4gICAgfSxcblxuICAgIGFmdGVyQWxsOiBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCBmb3IgYW55IGFkZGl0aW9uYWwgY2xlYW51cCBhZnRlciB0ZWFyRG93bi5cbiAgICB9LFxuICB9O1xufTtcbiIsIi8vIEBsaWNlbnNlXG4vLyBDb3B5cmlnaHQgKGMpIDIwMjUgUmxqc29uXG4vL1xuLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGVybXMgdGhhdCBjYW4gYmVcbi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlLlxuXG5pbXBvcnQgeyBKc29uVmFsdWUgfSBmcm9tICdAcmxqc29uL2pzb24nO1xuaW1wb3J0IHsgQ29udGVudFR5cGUsIFJsanNvbiwgVGFibGVDZmcsIFRhYmxlS2V5IH0gZnJvbSAnQHJsanNvbi9ybGpzb24nO1xuXG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG5leHBvcnQgaW50ZXJmYWNlIElvIHtcbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIEdlbmVyYWxcblxuICAvKiogU3RhcnRzIHRoZSBpbml0aWFsaXphdGlvbiAqL1xuICBpbml0KCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqIENsb3NlcyB0aGUgaW8gKi9cbiAgY2xvc2UoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKiogUmV0dXJucyB0cnVlIGlmIGlvIGlzIG9wZW5lZCAqL1xuICBpc09wZW46IGJvb2xlYW47XG5cbiAgLyoqIEEgcHJvbWlzZSByZXNvbHZpbmcgb25jZSB0aGUgSW8gaW50ZXJmYWNlIGlzIHJlYWR5XG4gICAqXG4gICAqIPCfkqEgVXNlIEBybGpzb24vaXMtcmVhZHlcbiAgICovXG4gIGlzUmVhZHkoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gRHVtcFxuXG4gIC8qKiBSZXR1cm5zIHRoZSBjb21wbGV0ZSBkYiBjb250ZW50IGFzIFJsanNvbiAqL1xuICBkdW1wKCk6IFByb21pc2U8Umxqc29uPjtcblxuICAvKiogUmV0dXJucyB0aGUgZHVtcCBvZiBhIGNvbXBsZXRlIHRhYmxlICovXG4gIGR1bXBUYWJsZShyZXF1ZXN0OiB7IHRhYmxlOiBzdHJpbmcgfSk6IFByb21pc2U8Umxqc29uPjtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gTWV0YSBEYXRhXG4gIGNvbnRlbnRUeXBlKHJlcXVlc3Q6IHsgdGFibGU6IHN0cmluZyB9KTogUHJvbWlzZTxDb250ZW50VHlwZT47XG5cbiAgLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIFRhYmxlc1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRhYmxlIGV4aXN0c1xuICAgKi9cbiAgdGFibGVFeGlzdHModGFibGVLZXk6IFRhYmxlS2V5KTogUHJvbWlzZTxib29sZWFuPjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRhYmxlIHdpdGggYSBnaXZlbiBjb25maWcuXG4gICAqIElmIHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cywgbmV3IGNvbHVtbnMgYXJlIGFkZGVkIHRvIHRoZSBleGlzdGluZyB0YWJsZS5cbiAgICogSWYgdGhlIHRhYmxlIGRvZXMgbm90IGV4aXN0LCBpdCBpcyBjcmVhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZy5cbiAgICogSWYgdGhlIHRhYmxlIGV4aXN0cyBhbmQgY29sdW1ucyBhcmUgcmVtb3ZlZCwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKiBJZiB0aGUgdGFibGUgZXhpc3RzIGFuZCB0aGUgY29sdW1uIHR5cGUgaXMgY2hhbmdlZCwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgKi9cbiAgY3JlYXRlT3JFeHRlbmRUYWJsZShyZXF1ZXN0OiB7IHRhYmxlQ2ZnOiBUYWJsZUNmZyB9KTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUmV0dXJucyBhIGpzb24gc3RydWN0dXJlIHJldHVybmluZyBjdXJyZW50IHRhYmxlIGNvbmZpZ3VyYXRpb25zXG4gICAqL1xuICByYXdUYWJsZUNmZ3MoKTogUHJvbWlzZTxUYWJsZUNmZ1tdPjtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gV3JpdGVcblxuICAvKiogV3JpdGVzIFJsanNvbiBkYXRhIGludG8gdGhlIGRhdGFiYXNlICovXG4gIHdyaXRlKHJlcXVlc3Q6IHsgZGF0YTogUmxqc29uIH0pOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuICAvLyBSZWFkIHJvd3NcblxuICAvKiogUXVlcmllcyBhIGxpc3Qgb2Ygcm93cyAqL1xuICByZWFkUm93cyhyZXF1ZXN0OiB7XG4gICAgdGFibGU6IHN0cmluZztcbiAgICB3aGVyZTogeyBbY29sdW1uOiBzdHJpbmddOiBKc29uVmFsdWUgfCBudWxsIH07XG4gIH0pOiBQcm9taXNlPFJsanNvbj47XG5cbiAgLyoqIFJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBnaXZlbiB0YWJsZSAqL1xuICByb3dDb3VudCh0YWJsZTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+O1xufVxuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuZXhwb3J0IGNvbnN0IGV4YW1wbGVJbyA9XG4gICdDaGVja291dCBAcmxqc29uL2lvLW1lbSBmb3IgYW4gZXhhbXBsZSBpbXBsZW1lbnRhdGlvbic7XG4iLCIvKiB2OCBpZ25vcmUgZmlsZSAtLSBAcHJlc2VydmUgKi9cbi8vIEBsaWNlbnNlXG4vLyBDb3B5cmlnaHQgKGMpIDIwMjUgUmxqc29uXG4vL1xuLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgdGVybXMgdGhhdCBjYW4gYmVcbi8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhpcyBwYWNrYWdlLlxuXG5pbXBvcnQgeyBKc29uIH0gZnJvbSAnQHJsanNvbi9qc29uJztcbmltcG9ydCB7XG4gIEJ1ZmZldCxcbiAgQ2FrZSxcbiAgaXRlcmF0ZVRhYmxlc1N5bmMsXG4gIExheWVyLFxuICBSZWYsXG4gIFJsanNvbixcbiAgVGFibGVLZXksXG59IGZyb20gJ0BybGpzb24vcmxqc29uJztcblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbi8qKlxuICogRGVzY3JpYmVzIGEgcm93IHRoYXQgcmVmZXJlbmNlcyBhIGNoaWxkIHRhYmxlIHJvd1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmVudFJlZiB7XG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IHRhYmxlIHRoYXQgcmVmZXJlbmNlcyB0aGUgY2hpbGQgdGFibGVcbiAgICovXG4gIFtwYXJlbnRUYWJsZTogVGFibGVLZXldOiB7XG4gICAgLyoqXG4gICAgICogVGhlIHBhcmVudCByb3cgdGhhdCByZWZlcmVuY2VzIHRoZSBjaGlsZCByb3dcbiAgICAgKi9cbiAgICBbcGFyZW50Um93OiBSZWZdOiB7XG4gICAgICAvKipcbiAgICAgICAqIERldGFpbHMgYWJvdXQgdGhlIHJlZmVyZW5jZSwgZS5nLiBhbiBhcnJheSBpbmRleCBldGMuXG4gICAgICAgKi9cbiAgICAgIGRldGFpbHM/OiBKc29uO1xuICAgIH07XG4gIH07XG59XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgcGFyZW50IHRhYmxlIHJvd3MgcmVmZXJlbmNpbmcgYSBjaGlsZCB0YWJsZSByb3dcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXZlcnNlUmVmcyB7XG4gIC8qKlxuICAgKiBUaGUgY2hpbGQgdGFibGUgd2UgbmVlZCB0aGUgcmVmZXJlbmNpbmcgcm93cyBmb3JcbiAgICovXG4gIFtjaGlsZFRhYmxlOiBUYWJsZUtleV06IHtcbiAgICAvKipcbiAgICAgKiBUaGUgcm93IGhhc2h3ZSBuZWVkIHRoZSByZWZlcmVuY2luZyByb3dzIGZvclxuICAgICAqL1xuICAgIFtjaGlsZFJvdzogUmVmXTogUGFyZW50UmVmO1xuICB9O1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgKi9cblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgcmV2ZXJzZSByZWZlcmVuY2VzIGZvciBhIGdpdmVuIHJsanNvbiBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNhbGNSZXZlcnNlUmVmcyA9IChybGpzb246IFJsanNvbik6IFJldmVyc2VSZWZzID0+IHtcbiAgY29uc3QgcmVzdWx0OiBSZXZlcnNlUmVmcyA9IHt9O1xuXG4gIC8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbiAgLy8gUHJlcGFyZSBkYXRhIHN0cnVjdHVyZVxuICBpdGVyYXRlVGFibGVzU3luYyhybGpzb24sIChjaGlsZFRhYmxlS2V5LCB0YWJsZSkgPT4ge1xuICAgIGNvbnN0IGNoaWxkVGFibGU6IHsgW2NoaWxkUm93SGFzaDogc3RyaW5nXTogUGFyZW50UmVmIH0gPSB7fTtcbiAgICByZXN1bHRbY2hpbGRUYWJsZUtleV0gPSBjaGlsZFRhYmxlO1xuICAgIGZvciAoY29uc3QgY2hpbGRSb3cgb2YgdGFibGUuX2RhdGEpIHtcbiAgICAgIGNoaWxkVGFibGVbY2hpbGRSb3cuX2hhc2hdID0ge307XG4gICAgfVxuICB9KTtcblxuICAvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG4gIC8vIEdlbmVyYXRlIHJldmVyc2UgcmVmZXJlbmNlc1xuICBpdGVyYXRlVGFibGVzU3luYyhybGpzb24sIChwYXJlbnRUYWJsZUtleSwgcGFyZW50VGFibGUpID0+IHtcbiAgICAvLyBJdGVyYXRlIGFsbCByb3dzIG9mIGVhY2ggdGFibGVcbiAgICBmb3IgKGNvbnN0IHBhcmVudFRhYmxlUm93IG9mIHBhcmVudFRhYmxlLl9kYXRhKSB7XG4gICAgICAvLyBGaW5kIG91dCB3aGUgb3RoZXIgdGFibGVzICYgcm93cyBhcmUgcmVmZXJlbmNlZCBieSB0aGlzIHJvd1xuICAgICAgLy8gV3JpdGUgdGhlc2UgaW5mb3JtYXRpb24gaW50dG8gcmVzdWx0XG4gICAgICBzd2l0Y2ggKHBhcmVudFRhYmxlLl90eXBlKSB7XG4gICAgICAgIGNhc2UgJ2NvbXBvbmVudHMnOlxuICAgICAgICAgIF93cml0ZUNvbXBvbmVudFJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2xheWVycyc6IHtcbiAgICAgICAgICBfd3JpdGVMYXllclJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnc2xpY2VJZHMnOiB7XG4gICAgICAgICAgLy8gU2xpY2UgaWRzIGRvIG5vdCByZWZlcmVuY2Ugb3RoZXIgdGFibGVzXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdjYWtlcyc6IHtcbiAgICAgICAgICBfd3JpdGVDYWtlUmVmcyhwYXJlbnRUYWJsZUtleSwgcGFyZW50VGFibGVSb3csIHJlc3VsdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdidWZmZXRzJzoge1xuICAgICAgICAgIF93cml0ZUJ1ZmZldFJlZnMocGFyZW50VGFibGVLZXksIHBhcmVudFRhYmxlUm93LCByZXN1bHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyogdjggaWdub3JlIGVuZCAqL1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuY29uc3QgX3dyaXRlQ29tcG9uZW50UmVmcyA9IChcbiAgcGFyZW50VGFibGVOYW1lOiBUYWJsZUtleSxcbiAgcGFyZW50Um93OiBKc29uLFxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxuKSA9PiB7XG4gIGNvbnN0IHBhcmVudFJvd0hhc2ggPSBwYXJlbnRSb3cuX2hhc2ggYXMgc3RyaW5nO1xuXG4gIGZvciAoY29uc3QgcGFyZW50Q29sdW1uTmFtZSBpbiBwYXJlbnRSb3cpIHtcbiAgICBpZiAocGFyZW50Q29sdW1uTmFtZS5zdGFydHNXaXRoKCdfJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghcGFyZW50Q29sdW1uTmFtZS5lbmRzV2l0aCgnUmVmJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkVGFibGVOYW1lID0gcGFyZW50Q29sdW1uTmFtZS5zbGljZSgwLCAtMyk7XG4gICAgY29uc3QgY2hpbGRSb3dIYXNoID0gcGFyZW50Um93W3BhcmVudENvbHVtbk5hbWVdIGFzIHN0cmluZztcblxuICAgIF93cml0ZShcbiAgICAgIHJlc3VsdCxcbiAgICAgIGNoaWxkVGFibGVOYW1lLFxuICAgICAgY2hpbGRSb3dIYXNoLFxuICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgcGFyZW50Um93SGFzaCxcbiAgICApO1xuICB9XG59O1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuY29uc3QgX3dyaXRlTGF5ZXJSZWZzID0gKFxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxuICBwYXJlbnRSb3c6IExheWVyLFxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxuKSA9PiB7XG4gIGNvbnN0IGNoaWxkVGFibGVOYW1lID0gcGFyZW50Um93LmNvbXBvbmVudHNUYWJsZTtcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XG5cbiAgZm9yIChjb25zdCBzbGljZUlkIGluIHBhcmVudFJvdy5hZGQpIHtcbiAgICBpZiAoc2xpY2VJZC5zdGFydHNXaXRoKCdfJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHNsaWNlSGFzaCA9IHBhcmVudFJvdy5hZGRbc2xpY2VJZF0gYXMgc3RyaW5nO1xuXG4gICAgX3dyaXRlKHJlc3VsdCwgY2hpbGRUYWJsZU5hbWUsIHNsaWNlSGFzaCwgcGFyZW50VGFibGVOYW1lLCBwYXJlbnRSb3dIYXNoKTtcbiAgfVxufTtcblxuLy8gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5cbmNvbnN0IF93cml0ZUNha2VSZWZzID0gKFxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxuICBwYXJlbnRSb3c6IENha2UsXG4gIHJlc3VsdDogUmV2ZXJzZVJlZnMsXG4pID0+IHtcbiAgY29uc3QgcGFyZW50Um93SGFzaCA9IHBhcmVudFJvdy5faGFzaCBhcyBzdHJpbmc7XG5cbiAgZm9yIChjb25zdCBsYXllciBpbiBwYXJlbnRSb3cubGF5ZXJzKSB7XG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBsYXllcjtcbiAgICBjb25zdCBjaGlsZFJvd0hhc2ggPSBwYXJlbnRSb3cubGF5ZXJzW2xheWVyXSBhcyBzdHJpbmc7XG4gICAgX3dyaXRlKFxuICAgICAgcmVzdWx0LFxuICAgICAgY2hpbGRUYWJsZU5hbWUsXG4gICAgICBjaGlsZFJvd0hhc2gsXG4gICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICBwYXJlbnRSb3dIYXNoLFxuICAgICk7XG4gIH1cbn07XG5cbi8vIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uXG5jb25zdCBfd3JpdGVCdWZmZXRSZWZzID0gKFxuICBwYXJlbnRUYWJsZU5hbWU6IFRhYmxlS2V5LFxuICBwYXJlbnRSb3c6IEJ1ZmZldCxcbiAgcmVzdWx0OiBSZXZlcnNlUmVmcyxcbikgPT4ge1xuICBjb25zdCBwYXJlbnRSb3dIYXNoID0gcGFyZW50Um93Ll9oYXNoIGFzIHN0cmluZztcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGFyZW50Um93Lml0ZW1zKSB7XG4gICAgY29uc3QgY2hpbGRUYWJsZU5hbWUgPSBpdGVtLnRhYmxlO1xuICAgIGNvbnN0IGNoaWxkUm93SGFzaCA9IGl0ZW0ucmVmO1xuICAgIF93cml0ZShcbiAgICAgIHJlc3VsdCxcbiAgICAgIGNoaWxkVGFibGVOYW1lLFxuICAgICAgY2hpbGRSb3dIYXNoLFxuICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgcGFyZW50Um93SGFzaCxcbiAgICApO1xuICB9XG59O1xuXG4vLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlxuY29uc3QgX3dyaXRlID0gKFxuICByZXN1bHQ6IFJldmVyc2VSZWZzLFxuICBjaGlsZFRhYmxlTmFtZTogc3RyaW5nLFxuICBjaGlsZFJvd0hhc2g6IHN0cmluZyxcbiAgcGFyZW50VGFibGVOYW1lOiBzdHJpbmcsXG4gIHBhcmVudFJvd0hhc2g6IHN0cmluZyxcbikgPT4ge1xuICBjb25zdCByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZSA9IChyZXN1bHRbY2hpbGRUYWJsZU5hbWVdID8/PSB7fSk7XG4gIGNvbnN0IHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlUm93ID0gKHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlW2NoaWxkUm93SGFzaF0gPz89XG4gICAge30pO1xuXG4gIHJlZmVyZW5jZXNGb3JDaGlsZFRhYmxlUm93W3BhcmVudFRhYmxlTmFtZV0gPz89IHt9O1xuICByZWZlcmVuY2VzRm9yQ2hpbGRUYWJsZVJvd1twYXJlbnRUYWJsZU5hbWVdW3BhcmVudFJvd0hhc2hdID8/PSB7fTtcbn07XG4iXSwibmFtZXMiOlsiZSJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBeUJPLE1BQU0sUUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLbkIsWUFBNEIsSUFBUTtBQUFSLFNBQUEsS0FBQTtBQUFBLEVBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtyQyxXQUFXLG9CQUFvQjtBQUM3QixVQUFNLFdBQVcsSUFBYztBQUFBLE1BQzdCLE9BQU87QUFBQSxNQUNQLEtBQUs7QUFBQSxNQUNMLE1BQU07QUFBQSxNQUNOLFFBQVE7QUFBQSxNQUNSLFFBQVE7QUFBQSxNQUNSLFVBQVU7QUFBQSxNQUNWLFVBQVU7QUFBQSxNQUVWLFNBQVM7QUFBQSxRQUNQO0FBQUEsVUFDRSxLQUFLO0FBQUEsVUFDTCxNQUFNO0FBQUEsVUFDTixZQUFZO0FBQUEsVUFDWixXQUFXO0FBQUEsUUFBQTtBQUFBLFFBRWI7QUFBQSxVQUNFLEtBQUs7QUFBQSxVQUNMLE1BQU07QUFBQSxVQUNOLFlBQVk7QUFBQSxVQUNaLFdBQVc7QUFBQSxRQUFBO0FBQUEsUUFFYjtBQUFBLFVBQ0UsS0FBSztBQUFBLFVBQ0wsTUFBTTtBQUFBLFVBQ04sWUFBWTtBQUFBLFVBQ1os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
|
package/dist/socket.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rljson/io",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.51",
|
|
4
4
|
"description": "Low level interface for reading and writing RLJSON data",
|
|
5
5
|
"homepage": "https://github.com/rljson/io",
|
|
6
6
|
"bugs": "https://github.com/rljson/io/issues",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"@types/node": "^24.9.1",
|
|
24
24
|
"@typescript-eslint/eslint-plugin": "^8.46.2",
|
|
25
25
|
"@typescript-eslint/parser": "^8.46.2",
|
|
26
|
-
"@vitest/coverage-v8": "^
|
|
26
|
+
"@vitest/coverage-v8": "^4.0.1",
|
|
27
27
|
"cross-env": "^10.1.0",
|
|
28
28
|
"eslint": "^9.38.0",
|
|
29
29
|
"eslint-plugin-jsdoc": "^61.1.5",
|
|
@@ -33,18 +33,18 @@
|
|
|
33
33
|
"read-pkg": "^9.0.1",
|
|
34
34
|
"typescript": "~5.9.3",
|
|
35
35
|
"typescript-eslint": "^8.46.2",
|
|
36
|
-
"vite": "^7.1.
|
|
36
|
+
"vite": "^7.1.12",
|
|
37
37
|
"vite-node": "^3.2.4",
|
|
38
38
|
"vite-plugin-dts": "^4.5.4",
|
|
39
39
|
"vite-tsconfig-paths": "^5.1.4",
|
|
40
|
-
"vitest": "^
|
|
40
|
+
"vitest": "^4.0.1",
|
|
41
41
|
"vitest-dom": "^0.1.1"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@rljson/hash": "^0.0.
|
|
44
|
+
"@rljson/hash": "^0.0.17",
|
|
45
45
|
"@rljson/is-ready": "^0.0.17",
|
|
46
46
|
"@rljson/json": "^0.0.22",
|
|
47
|
-
"@rljson/rljson": "^0.0.
|
|
47
|
+
"@rljson/rljson": "^0.0.65",
|
|
48
48
|
"@rljson/validate": "^0.0.11"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|