tedious 16.4.1 → 16.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/benchmarks/bulk-load/iterable.js +1 -1
  2. package/benchmarks/common.js +2 -4
  3. package/benchmarks/package-lock.json +21173 -0
  4. package/benchmarks/package.json +11 -0
  5. package/benchmarks/query/call-tvp.js +1 -1
  6. package/benchmarks/query/insert-varbinary.js +1 -1
  7. package/benchmarks/query/select-many-rows.js +1 -1
  8. package/benchmarks/query/select-nvarchar.js +1 -1
  9. package/benchmarks/query/select-varbinary.js +1 -1
  10. package/benchmarks/request/rpcrequest-payload-tvp.js +2 -2
  11. package/benchmarks/request/rpcrequest-payload-varbinary.js +2 -2
  12. package/benchmarks/token-parser/colmetadata-token.js +4 -2
  13. package/benchmarks/token-parser/done-token.js +5 -2
  14. package/benchmarks/token-parser/simple-tokens.js +8 -2
  15. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +1 -8
  16. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js.map +1 -1
  17. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +1 -8
  18. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js.map +1 -1
  19. package/lib/always-encrypted/cek-entry.js +1 -7
  20. package/lib/always-encrypted/cek-entry.js.map +1 -1
  21. package/lib/always-encrypted/keystore-provider-azure-key-vault.js +1 -8
  22. package/lib/always-encrypted/keystore-provider-azure-key-vault.js.map +1 -1
  23. package/lib/always-encrypted/symmetric-key.js +1 -2
  24. package/lib/always-encrypted/symmetric-key.js.map +1 -1
  25. package/lib/bulk-load-payload.js +1 -3
  26. package/lib/bulk-load-payload.js.map +1 -1
  27. package/lib/bulk-load.js +15 -23
  28. package/lib/bulk-load.js.map +1 -1
  29. package/lib/collation.js +1 -7
  30. package/lib/collation.js.map +1 -1
  31. package/lib/connection.js +22 -28
  32. package/lib/connection.js.map +1 -1
  33. package/lib/debug.js +1 -4
  34. package/lib/debug.js.map +1 -1
  35. package/lib/errors/abort-error.js +1 -2
  36. package/lib/errors/abort-error.js.map +1 -1
  37. package/lib/errors/timeout-error.js +1 -2
  38. package/lib/errors/timeout-error.js.map +1 -1
  39. package/lib/errors.js +1 -10
  40. package/lib/errors.js.map +1 -1
  41. package/lib/incoming-message-stream.js +1 -4
  42. package/lib/incoming-message-stream.js.map +1 -1
  43. package/lib/login7-payload.js +1 -23
  44. package/lib/login7-payload.js.map +1 -1
  45. package/lib/message-io.js +1 -8
  46. package/lib/message-io.js.map +1 -1
  47. package/lib/message.js +1 -4
  48. package/lib/message.js.map +1 -1
  49. package/lib/metadata-parser.js +361 -241
  50. package/lib/metadata-parser.js.map +1 -1
  51. package/lib/ntlm-payload.js +1 -2
  52. package/lib/ntlm-payload.js.map +1 -1
  53. package/lib/outgoing-message-stream.js +1 -5
  54. package/lib/outgoing-message-stream.js.map +1 -1
  55. package/lib/packet.js +1 -2
  56. package/lib/packet.js.map +1 -1
  57. package/lib/prelogin-payload.js +1 -11
  58. package/lib/prelogin-payload.js.map +1 -1
  59. package/lib/request.js +13 -19
  60. package/lib/request.js.map +1 -1
  61. package/lib/rpcrequest-payload.js +1 -6
  62. package/lib/rpcrequest-payload.js.map +1 -1
  63. package/lib/sqlbatch-payload.js +1 -4
  64. package/lib/sqlbatch-payload.js.map +1 -1
  65. package/lib/token/colmetadata-token-parser.js +103 -74
  66. package/lib/token/colmetadata-token-parser.js.map +1 -1
  67. package/lib/token/done-token-parser.js +52 -40
  68. package/lib/token/done-token-parser.js.map +1 -1
  69. package/lib/token/env-change-token-parser.js +110 -81
  70. package/lib/token/env-change-token-parser.js.map +1 -1
  71. package/lib/token/feature-ext-ack-parser.js +30 -22
  72. package/lib/token/feature-ext-ack-parser.js.map +1 -1
  73. package/lib/token/fedauth-info-parser.js +47 -30
  74. package/lib/token/fedauth-info-parser.js.map +1 -1
  75. package/lib/token/handler.js +3 -13
  76. package/lib/token/handler.js.map +1 -1
  77. package/lib/token/helpers.js +205 -0
  78. package/lib/token/helpers.js.map +1 -0
  79. package/lib/token/infoerror-token-parser.js +69 -36
  80. package/lib/token/infoerror-token-parser.js.map +1 -1
  81. package/lib/token/loginack-token-parser.js +59 -31
  82. package/lib/token/loginack-token-parser.js.map +1 -1
  83. package/lib/token/nbcrow-token-parser.js +60 -23
  84. package/lib/token/nbcrow-token-parser.js.map +1 -1
  85. package/lib/token/order-token-parser.js +22 -20
  86. package/lib/token/order-token-parser.js.map +1 -1
  87. package/lib/token/returnstatus-token-parser.js +9 -5
  88. package/lib/token/returnstatus-token-parser.js.map +1 -1
  89. package/lib/token/returnvalue-token-parser.js +79 -22
  90. package/lib/token/returnvalue-token-parser.js.map +1 -1
  91. package/lib/token/row-token-parser.js +50 -20
  92. package/lib/token/row-token-parser.js.map +1 -1
  93. package/lib/token/sspi-token-parser.js +14 -5
  94. package/lib/token/sspi-token-parser.js.map +1 -1
  95. package/lib/token/stream-parser.js +289 -330
  96. package/lib/token/stream-parser.js.map +1 -1
  97. package/lib/token/token-stream-parser.js +1 -4
  98. package/lib/token/token-stream-parser.js.map +1 -1
  99. package/lib/token/token.js +2 -88
  100. package/lib/token/token.js.map +1 -1
  101. package/lib/tracking-buffer/writable-tracking-buffer.js +1 -7
  102. package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -1
  103. package/lib/transaction.js +1 -4
  104. package/lib/transaction.js.map +1 -1
  105. package/lib/value-parser.js +655 -438
  106. package/lib/value-parser.js.map +1 -1
  107. package/package.json +1 -1
  108. package/benchmarks/bulk-load/stream.js +0 -62
  109. package/benchmarks/bulk-load/sync.js +0 -59
@@ -5,257 +5,377 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  exports.readCollation = readCollation;
8
+ exports.readMetadata = readMetadata;
8
9
  var _collation = require("./collation");
9
10
  var _dataType = require("./data-type");
10
11
  var _sprintfJs = require("sprintf-js");
11
- function readCollation(parser, callback) {
12
- // s2.2.5.1.2
13
- parser.readBuffer(5, collationData => {
14
- callback(_collation.Collation.fromBuffer(collationData));
15
- });
12
+ var _helpers = require("./token/helpers");
13
+ function readCollation(buf, offset) {
14
+ offset = +offset;
15
+ if (buf.length < offset + 5) {
16
+ throw new _helpers.NotEnoughDataError(offset + 5);
17
+ }
18
+ const collation = _collation.Collation.fromBuffer(buf.slice(offset, offset + 5));
19
+ return new _helpers.Result(collation, offset + 5);
16
20
  }
17
- function readSchema(parser, callback) {
18
- // s2.2.5.5.3
19
- parser.readUInt8(schemaPresent => {
20
- if (schemaPresent === 0x01) {
21
- parser.readBVarChar(dbname => {
22
- parser.readBVarChar(owningSchema => {
23
- parser.readUsVarChar(xmlSchemaCollection => {
24
- callback({
25
- dbname: dbname,
26
- owningSchema: owningSchema,
27
- xmlSchemaCollection: xmlSchemaCollection
28
- });
29
- });
30
- });
31
- });
32
- } else {
33
- callback(undefined);
34
- }
35
- });
21
+ function readSchema(buf, offset) {
22
+ offset = +offset;
23
+ let schemaPresent;
24
+ ({
25
+ offset,
26
+ value: schemaPresent
27
+ } = (0, _helpers.readUInt8)(buf, offset));
28
+ if (schemaPresent !== 0x01) {
29
+ return new _helpers.Result(undefined, offset);
30
+ }
31
+ let dbname;
32
+ ({
33
+ offset,
34
+ value: dbname
35
+ } = (0, _helpers.readBVarChar)(buf, offset));
36
+ let owningSchema;
37
+ ({
38
+ offset,
39
+ value: owningSchema
40
+ } = (0, _helpers.readBVarChar)(buf, offset));
41
+ let xmlSchemaCollection;
42
+ ({
43
+ offset,
44
+ value: xmlSchemaCollection
45
+ } = (0, _helpers.readUsVarChar)(buf, offset));
46
+ return new _helpers.Result({
47
+ dbname,
48
+ owningSchema,
49
+ xmlSchemaCollection
50
+ }, offset);
51
+ }
52
+ function readUDTInfo(buf, offset) {
53
+ let maxByteSize;
54
+ ({
55
+ offset,
56
+ value: maxByteSize
57
+ } = (0, _helpers.readUInt16LE)(buf, offset));
58
+ let dbname;
59
+ ({
60
+ offset,
61
+ value: dbname
62
+ } = (0, _helpers.readBVarChar)(buf, offset));
63
+ let owningSchema;
64
+ ({
65
+ offset,
66
+ value: owningSchema
67
+ } = (0, _helpers.readBVarChar)(buf, offset));
68
+ let typeName;
69
+ ({
70
+ offset,
71
+ value: typeName
72
+ } = (0, _helpers.readBVarChar)(buf, offset));
73
+ let assemblyName;
74
+ ({
75
+ offset,
76
+ value: assemblyName
77
+ } = (0, _helpers.readUsVarChar)(buf, offset));
78
+ return new _helpers.Result({
79
+ maxByteSize: maxByteSize,
80
+ dbname: dbname,
81
+ owningSchema: owningSchema,
82
+ typeName: typeName,
83
+ assemblyName: assemblyName
84
+ }, offset);
36
85
  }
37
- function readUDTInfo(parser, callback) {
38
- parser.readUInt16LE(maxByteSize => {
39
- parser.readBVarChar(dbname => {
40
- parser.readBVarChar(owningSchema => {
41
- parser.readBVarChar(typeName => {
42
- parser.readUsVarChar(assemblyName => {
43
- callback({
44
- maxByteSize: maxByteSize,
45
- dbname: dbname,
46
- owningSchema: owningSchema,
47
- typeName: typeName,
48
- assemblyName: assemblyName
49
- });
50
- });
51
- });
52
- });
53
- });
54
- });
86
+ function readMetadata(buf, offset, options) {
87
+ let userType;
88
+ ({
89
+ offset,
90
+ value: userType
91
+ } = (options.tdsVersion < '7_2' ? _helpers.readUInt16LE : _helpers.readUInt32LE)(buf, offset));
92
+ let flags;
93
+ ({
94
+ offset,
95
+ value: flags
96
+ } = (0, _helpers.readUInt16LE)(buf, offset));
97
+ let typeNumber;
98
+ ({
99
+ offset,
100
+ value: typeNumber
101
+ } = (0, _helpers.readUInt8)(buf, offset));
102
+ const type = _dataType.TYPE[typeNumber];
103
+ if (!type) {
104
+ throw new Error((0, _sprintfJs.sprintf)('Unrecognised data type 0x%02X', typeNumber));
105
+ }
106
+ switch (type.name) {
107
+ case 'Null':
108
+ case 'TinyInt':
109
+ case 'SmallInt':
110
+ case 'Int':
111
+ case 'BigInt':
112
+ case 'Real':
113
+ case 'Float':
114
+ case 'SmallMoney':
115
+ case 'Money':
116
+ case 'Bit':
117
+ case 'SmallDateTime':
118
+ case 'DateTime':
119
+ case 'Date':
120
+ return new _helpers.Result({
121
+ userType: userType,
122
+ flags: flags,
123
+ type: type,
124
+ collation: undefined,
125
+ precision: undefined,
126
+ scale: undefined,
127
+ dataLength: undefined,
128
+ schema: undefined,
129
+ udtInfo: undefined
130
+ }, offset);
131
+ case 'IntN':
132
+ case 'FloatN':
133
+ case 'MoneyN':
134
+ case 'BitN':
135
+ case 'UniqueIdentifier':
136
+ case 'DateTimeN':
137
+ {
138
+ let dataLength;
139
+ ({
140
+ offset,
141
+ value: dataLength
142
+ } = (0, _helpers.readUInt8)(buf, offset));
143
+ return new _helpers.Result({
144
+ userType: userType,
145
+ flags: flags,
146
+ type: type,
147
+ collation: undefined,
148
+ precision: undefined,
149
+ scale: undefined,
150
+ dataLength: dataLength,
151
+ schema: undefined,
152
+ udtInfo: undefined
153
+ }, offset);
154
+ }
155
+ case 'Variant':
156
+ {
157
+ let dataLength;
158
+ ({
159
+ offset,
160
+ value: dataLength
161
+ } = (0, _helpers.readUInt32LE)(buf, offset));
162
+ return new _helpers.Result({
163
+ userType: userType,
164
+ flags: flags,
165
+ type: type,
166
+ collation: undefined,
167
+ precision: undefined,
168
+ scale: undefined,
169
+ dataLength: dataLength,
170
+ schema: undefined,
171
+ udtInfo: undefined
172
+ }, offset);
173
+ }
174
+ case 'VarChar':
175
+ case 'Char':
176
+ case 'NVarChar':
177
+ case 'NChar':
178
+ {
179
+ let dataLength;
180
+ ({
181
+ offset,
182
+ value: dataLength
183
+ } = (0, _helpers.readUInt16LE)(buf, offset));
184
+ let collation;
185
+ ({
186
+ offset,
187
+ value: collation
188
+ } = readCollation(buf, offset));
189
+ return new _helpers.Result({
190
+ userType: userType,
191
+ flags: flags,
192
+ type: type,
193
+ collation: collation,
194
+ precision: undefined,
195
+ scale: undefined,
196
+ dataLength: dataLength,
197
+ schema: undefined,
198
+ udtInfo: undefined
199
+ }, offset);
200
+ }
201
+ case 'Text':
202
+ case 'NText':
203
+ {
204
+ let dataLength;
205
+ ({
206
+ offset,
207
+ value: dataLength
208
+ } = (0, _helpers.readUInt32LE)(buf, offset));
209
+ let collation;
210
+ ({
211
+ offset,
212
+ value: collation
213
+ } = readCollation(buf, offset));
214
+ return new _helpers.Result({
215
+ userType: userType,
216
+ flags: flags,
217
+ type: type,
218
+ collation: collation,
219
+ precision: undefined,
220
+ scale: undefined,
221
+ dataLength: dataLength,
222
+ schema: undefined,
223
+ udtInfo: undefined
224
+ }, offset);
225
+ }
226
+ case 'VarBinary':
227
+ case 'Binary':
228
+ {
229
+ let dataLength;
230
+ ({
231
+ offset,
232
+ value: dataLength
233
+ } = (0, _helpers.readUInt16LE)(buf, offset));
234
+ return new _helpers.Result({
235
+ userType: userType,
236
+ flags: flags,
237
+ type: type,
238
+ collation: undefined,
239
+ precision: undefined,
240
+ scale: undefined,
241
+ dataLength: dataLength,
242
+ schema: undefined,
243
+ udtInfo: undefined
244
+ }, offset);
245
+ }
246
+ case 'Image':
247
+ {
248
+ let dataLength;
249
+ ({
250
+ offset,
251
+ value: dataLength
252
+ } = (0, _helpers.readUInt32LE)(buf, offset));
253
+ return new _helpers.Result({
254
+ userType: userType,
255
+ flags: flags,
256
+ type: type,
257
+ collation: undefined,
258
+ precision: undefined,
259
+ scale: undefined,
260
+ dataLength: dataLength,
261
+ schema: undefined,
262
+ udtInfo: undefined
263
+ }, offset);
264
+ }
265
+ case 'Xml':
266
+ {
267
+ let schema;
268
+ ({
269
+ offset,
270
+ value: schema
271
+ } = readSchema(buf, offset));
272
+ return new _helpers.Result({
273
+ userType: userType,
274
+ flags: flags,
275
+ type: type,
276
+ collation: undefined,
277
+ precision: undefined,
278
+ scale: undefined,
279
+ dataLength: undefined,
280
+ schema: schema,
281
+ udtInfo: undefined
282
+ }, offset);
283
+ }
284
+ case 'Time':
285
+ case 'DateTime2':
286
+ case 'DateTimeOffset':
287
+ {
288
+ let scale;
289
+ ({
290
+ offset,
291
+ value: scale
292
+ } = (0, _helpers.readUInt8)(buf, offset));
293
+ return new _helpers.Result({
294
+ userType: userType,
295
+ flags: flags,
296
+ type: type,
297
+ collation: undefined,
298
+ precision: undefined,
299
+ scale: scale,
300
+ dataLength: undefined,
301
+ schema: undefined,
302
+ udtInfo: undefined
303
+ }, offset);
304
+ }
305
+ case 'NumericN':
306
+ case 'DecimalN':
307
+ {
308
+ let dataLength;
309
+ ({
310
+ offset,
311
+ value: dataLength
312
+ } = (0, _helpers.readUInt8)(buf, offset));
313
+ let precision;
314
+ ({
315
+ offset,
316
+ value: precision
317
+ } = (0, _helpers.readUInt8)(buf, offset));
318
+ let scale;
319
+ ({
320
+ offset,
321
+ value: scale
322
+ } = (0, _helpers.readUInt8)(buf, offset));
323
+ return new _helpers.Result({
324
+ userType: userType,
325
+ flags: flags,
326
+ type: type,
327
+ collation: undefined,
328
+ precision: precision,
329
+ scale: scale,
330
+ dataLength: dataLength,
331
+ schema: undefined,
332
+ udtInfo: undefined
333
+ }, offset);
334
+ }
335
+ case 'UDT':
336
+ {
337
+ let udtInfo;
338
+ ({
339
+ offset,
340
+ value: udtInfo
341
+ } = readUDTInfo(buf, offset));
342
+ return new _helpers.Result({
343
+ userType: userType,
344
+ flags: flags,
345
+ type: type,
346
+ collation: undefined,
347
+ precision: undefined,
348
+ scale: undefined,
349
+ dataLength: undefined,
350
+ schema: undefined,
351
+ udtInfo: udtInfo
352
+ }, offset);
353
+ }
354
+ default:
355
+ throw new Error((0, _sprintfJs.sprintf)('Unrecognised type %s', type.name));
356
+ }
55
357
  }
56
358
  function metadataParse(parser, options, callback) {
57
- (options.tdsVersion < '7_2' ? parser.readUInt16LE : parser.readUInt32LE).call(parser, userType => {
58
- parser.readUInt16LE(flags => {
59
- parser.readUInt8(typeNumber => {
60
- const type = _dataType.TYPE[typeNumber];
61
- if (!type) {
62
- throw new Error((0, _sprintfJs.sprintf)('Unrecognised data type 0x%02X', typeNumber));
359
+ (async () => {
360
+ while (true) {
361
+ let result;
362
+ try {
363
+ result = readMetadata(parser.buffer, parser.position, options);
364
+ } catch (err) {
365
+ if (err instanceof _helpers.NotEnoughDataError) {
366
+ await parser.waitForChunk();
367
+ continue;
63
368
  }
64
- switch (type.name) {
65
- case 'Null':
66
- case 'TinyInt':
67
- case 'SmallInt':
68
- case 'Int':
69
- case 'BigInt':
70
- case 'Real':
71
- case 'Float':
72
- case 'SmallMoney':
73
- case 'Money':
74
- case 'Bit':
75
- case 'SmallDateTime':
76
- case 'DateTime':
77
- case 'Date':
78
- return callback({
79
- userType: userType,
80
- flags: flags,
81
- type: type,
82
- collation: undefined,
83
- precision: undefined,
84
- scale: undefined,
85
- dataLength: undefined,
86
- schema: undefined,
87
- udtInfo: undefined
88
- });
89
- case 'IntN':
90
- case 'FloatN':
91
- case 'MoneyN':
92
- case 'BitN':
93
- case 'UniqueIdentifier':
94
- case 'DateTimeN':
95
- return parser.readUInt8(dataLength => {
96
- callback({
97
- userType: userType,
98
- flags: flags,
99
- type: type,
100
- collation: undefined,
101
- precision: undefined,
102
- scale: undefined,
103
- dataLength: dataLength,
104
- schema: undefined,
105
- udtInfo: undefined
106
- });
107
- });
108
- case 'Variant':
109
- return parser.readUInt32LE(dataLength => {
110
- callback({
111
- userType: userType,
112
- flags: flags,
113
- type: type,
114
- collation: undefined,
115
- precision: undefined,
116
- scale: undefined,
117
- dataLength: dataLength,
118
- schema: undefined,
119
- udtInfo: undefined
120
- });
121
- });
122
- case 'VarChar':
123
- case 'Char':
124
- case 'NVarChar':
125
- case 'NChar':
126
- return parser.readUInt16LE(dataLength => {
127
- readCollation(parser, collation => {
128
- callback({
129
- userType: userType,
130
- flags: flags,
131
- type: type,
132
- collation: collation,
133
- precision: undefined,
134
- scale: undefined,
135
- dataLength: dataLength,
136
- schema: undefined,
137
- udtInfo: undefined
138
- });
139
- });
140
- });
141
- case 'Text':
142
- case 'NText':
143
- return parser.readUInt32LE(dataLength => {
144
- readCollation(parser, collation => {
145
- callback({
146
- userType: userType,
147
- flags: flags,
148
- type: type,
149
- collation: collation,
150
- precision: undefined,
151
- scale: undefined,
152
- dataLength: dataLength,
153
- schema: undefined,
154
- udtInfo: undefined
155
- });
156
- });
157
- });
158
- case 'VarBinary':
159
- case 'Binary':
160
- return parser.readUInt16LE(dataLength => {
161
- callback({
162
- userType: userType,
163
- flags: flags,
164
- type: type,
165
- collation: undefined,
166
- precision: undefined,
167
- scale: undefined,
168
- dataLength: dataLength,
169
- schema: undefined,
170
- udtInfo: undefined
171
- });
172
- });
173
- case 'Image':
174
- return parser.readUInt32LE(dataLength => {
175
- callback({
176
- userType: userType,
177
- flags: flags,
178
- type: type,
179
- collation: undefined,
180
- precision: undefined,
181
- scale: undefined,
182
- dataLength: dataLength,
183
- schema: undefined,
184
- udtInfo: undefined
185
- });
186
- });
187
- case 'Xml':
188
- return readSchema(parser, schema => {
189
- callback({
190
- userType: userType,
191
- flags: flags,
192
- type: type,
193
- collation: undefined,
194
- precision: undefined,
195
- scale: undefined,
196
- dataLength: undefined,
197
- schema: schema,
198
- udtInfo: undefined
199
- });
200
- });
201
- case 'Time':
202
- case 'DateTime2':
203
- case 'DateTimeOffset':
204
- return parser.readUInt8(scale => {
205
- callback({
206
- userType: userType,
207
- flags: flags,
208
- type: type,
209
- collation: undefined,
210
- precision: undefined,
211
- scale: scale,
212
- dataLength: undefined,
213
- schema: undefined,
214
- udtInfo: undefined
215
- });
216
- });
217
- case 'NumericN':
218
- case 'DecimalN':
219
- return parser.readUInt8(dataLength => {
220
- parser.readUInt8(precision => {
221
- parser.readUInt8(scale => {
222
- callback({
223
- userType: userType,
224
- flags: flags,
225
- type: type,
226
- collation: undefined,
227
- precision: precision,
228
- scale: scale,
229
- dataLength: dataLength,
230
- schema: undefined,
231
- udtInfo: undefined
232
- });
233
- });
234
- });
235
- });
236
- case 'UDT':
237
- return readUDTInfo(parser, udtInfo => {
238
- callback({
239
- userType: userType,
240
- flags: flags,
241
- type: type,
242
- collation: undefined,
243
- precision: undefined,
244
- scale: undefined,
245
- dataLength: undefined,
246
- schema: undefined,
247
- udtInfo: udtInfo
248
- });
249
- });
250
- default:
251
- throw new Error((0, _sprintfJs.sprintf)('Unrecognised type %s', type.name));
252
- }
253
- });
254
- });
255
- });
369
+ throw err;
370
+ }
371
+ parser.position = result.offset;
372
+ return callback(result.value);
373
+ }
374
+ })();
256
375
  }
257
376
  var _default = metadataParse;
258
377
  exports.default = _default;
259
378
  module.exports = metadataParse;
260
379
  module.exports.readCollation = readCollation;
261
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29sbGF0aW9uIiwicmVxdWlyZSIsIl9kYXRhVHlwZSIsIl9zcHJpbnRmSnMiLCJyZWFkQ29sbGF0aW9uIiwicGFyc2VyIiwiY2FsbGJhY2siLCJyZWFkQnVmZmVyIiwiY29sbGF0aW9uRGF0YSIsIkNvbGxhdGlvbiIsImZyb21CdWZmZXIiLCJyZWFkU2NoZW1hIiwicmVhZFVJbnQ4Iiwic2NoZW1hUHJlc2VudCIsInJlYWRCVmFyQ2hhciIsImRibmFtZSIsIm93bmluZ1NjaGVtYSIsInJlYWRVc1ZhckNoYXIiLCJ4bWxTY2hlbWFDb2xsZWN0aW9uIiwidW5kZWZpbmVkIiwicmVhZFVEVEluZm8iLCJyZWFkVUludDE2TEUiLCJtYXhCeXRlU2l6ZSIsInR5cGVOYW1lIiwiYXNzZW1ibHlOYW1lIiwibWV0YWRhdGFQYXJzZSIsIm9wdGlvbnMiLCJ0ZHNWZXJzaW9uIiwicmVhZFVJbnQzMkxFIiwiY2FsbCIsInVzZXJUeXBlIiwiZmxhZ3MiLCJ0eXBlTnVtYmVyIiwidHlwZSIsIlRZUEUiLCJFcnJvciIsInNwcmludGYiLCJuYW1lIiwiY29sbGF0aW9uIiwicHJlY2lzaW9uIiwic2NhbGUiLCJkYXRhTGVuZ3RoIiwic2NoZW1hIiwidWR0SW5mbyIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi9zcmMvbWV0YWRhdGEtcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4vY29sbGF0aW9uJztcbmltcG9ydCBQYXJzZXIsIHsgdHlwZSBQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi90b2tlbi9zdHJlYW0tcGFyc2VyJztcbmltcG9ydCB7IFRZUEUsIHR5cGUgRGF0YVR5cGUgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyB0eXBlIENyeXB0b01ldGFkYXRhIH0gZnJvbSAnLi9hbHdheXMtZW5jcnlwdGVkL3R5cGVzJztcblxuaW1wb3J0IHsgc3ByaW50ZiB9IGZyb20gJ3NwcmludGYtanMnO1xuXG5pbnRlcmZhY2UgWG1sU2NoZW1hIHtcbiAgZGJuYW1lOiBzdHJpbmc7XG4gIG93bmluZ1NjaGVtYTogc3RyaW5nO1xuICB4bWxTY2hlbWFDb2xsZWN0aW9uOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBVZHRJbmZvIHtcbiAgbWF4Qnl0ZVNpemU6IG51bWJlcjtcbiAgZGJuYW1lOiBzdHJpbmc7XG4gIG93bmluZ1NjaGVtYTogc3RyaW5nO1xuICB0eXBlTmFtZTogc3RyaW5nO1xuICBhc3NlbWJseU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQmFzZU1ldGFkYXRhID0ge1xuICB1c2VyVHlwZTogbnVtYmVyO1xuXG4gIGZsYWdzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgY29sdW1uJ3MgdHlwZSwgc3VjaCBhcyBWYXJDaGFyLCBJbnQgb3IgQmluYXJ5LlxuICAgKi9cbiAgdHlwZTogRGF0YVR5cGU7XG5cbiAgY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgcHJlY2lzaW9uLiBPbmx5IGFwcGxpY2FibGUgdG8gbnVtZXJpYyBhbmQgZGVjaW1hbC5cbiAgICovXG4gIHByZWNpc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NhbGUuIE9ubHkgYXBwbGljYWJsZSB0byBudW1lcmljLCBkZWNpbWFsLCB0aW1lLCBkYXRldGltZTIgYW5kIGRhdGV0aW1lb2Zmc2V0LlxuICAgKi9cbiAgc2NhbGU6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGxlbmd0aCwgZm9yIGNoYXIsIHZhcmNoYXIsIG52YXJjaGFyIGFuZCB2YXJiaW5hcnkuXG4gICAqL1xuICBkYXRhTGVuZ3RoOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgc2NoZW1hOiBYbWxTY2hlbWEgfCB1bmRlZmluZWQ7XG5cbiAgdWR0SW5mbzogVWR0SW5mbyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IHR5cGUgTWV0YWRhdGEgPSB7XG4gIGNyeXB0b01ldGFkYXRhPzogQ3J5cHRvTWV0YWRhdGE7XG59ICYgQmFzZU1ldGFkYXRhO1xuXG5cbmZ1bmN0aW9uIHJlYWRDb2xsYXRpb24ocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAoY29sbGF0aW9uOiBDb2xsYXRpb24pID0+IHZvaWQpIHtcbiAgLy8gczIuMi41LjEuMlxuICBwYXJzZXIucmVhZEJ1ZmZlcig1LCAoY29sbGF0aW9uRGF0YSkgPT4ge1xuICAgIGNhbGxiYWNrKENvbGxhdGlvbi5mcm9tQnVmZmVyKGNvbGxhdGlvbkRhdGEpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTY2hlbWEocGFyc2VyOiBQYXJzZXIsIGNhbGxiYWNrOiAoc2NoZW1hOiBYbWxTY2hlbWEgfCB1bmRlZmluZWQpID0+IHZvaWQpIHtcbiAgLy8gczIuMi41LjUuM1xuICBwYXJzZXIucmVhZFVJbnQ4KChzY2hlbWFQcmVzZW50KSA9PiB7XG4gICAgaWYgKHNjaGVtYVByZXNlbnQgPT09IDB4MDEpIHtcbiAgICAgIHBhcnNlci5yZWFkQlZhckNoYXIoKGRibmFtZSkgPT4ge1xuICAgICAgICBwYXJzZXIucmVhZEJWYXJDaGFyKChvd25pbmdTY2hlbWEpID0+IHtcbiAgICAgICAgICBwYXJzZXIucmVhZFVzVmFyQ2hhcigoeG1sU2NoZW1hQ29sbGVjdGlvbikgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgICBkYm5hbWU6IGRibmFtZSxcbiAgICAgICAgICAgICAgb3duaW5nU2NoZW1hOiBvd25pbmdTY2hlbWEsXG4gICAgICAgICAgICAgIHhtbFNjaGVtYUNvbGxlY3Rpb246IHhtbFNjaGVtYUNvbGxlY3Rpb25cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayh1bmRlZmluZWQpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRVRFRJbmZvKHBhcnNlcjogUGFyc2VyLCBjYWxsYmFjazogKHVkdEluZm86IFVkdEluZm8gfCB1bmRlZmluZWQpID0+IHZvaWQpIHtcbiAgcGFyc2VyLnJlYWRVSW50MTZMRSgobWF4Qnl0ZVNpemUpID0+IHtcbiAgICBwYXJzZXIucmVhZEJWYXJDaGFyKChkYm5hbWUpID0+IHtcbiAgICAgIHBhcnNlci5yZWFkQlZhckNoYXIoKG93bmluZ1NjaGVtYSkgPT4ge1xuICAgICAgICBwYXJzZXIucmVhZEJWYXJDaGFyKCh0eXBlTmFtZSkgPT4ge1xuICAgICAgICAgIHBhcnNlci5yZWFkVXNWYXJDaGFyKChhc3NlbWJseU5hbWUpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgbWF4Qnl0ZVNpemU6IG1heEJ5dGVTaXplLFxuICAgICAgICAgICAgICBkYm5hbWU6IGRibmFtZSxcbiAgICAgICAgICAgICAgb3duaW5nU2NoZW1hOiBvd25pbmdTY2hlbWEsXG4gICAgICAgICAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSxcbiAgICAgICAgICAgICAgYXNzZW1ibHlOYW1lOiBhc3NlbWJseU5hbWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWV0YWRhdGFQYXJzZShwYXJzZXI6IFBhcnNlciwgb3B0aW9uczogUGFyc2VyT3B0aW9ucywgY2FsbGJhY2s6IChtZXRhZGF0YTogTWV0YWRhdGEpID0+IHZvaWQpIHtcbiAgKG9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInID8gcGFyc2VyLnJlYWRVSW50MTZMRSA6IHBhcnNlci5yZWFkVUludDMyTEUpLmNhbGwocGFyc2VyLCAodXNlclR5cGUpID0+IHtcbiAgICBwYXJzZXIucmVhZFVJbnQxNkxFKChmbGFncykgPT4ge1xuICAgICAgcGFyc2VyLnJlYWRVSW50OCgodHlwZU51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCB0eXBlOiBEYXRhVHlwZSA9IFRZUEVbdHlwZU51bWJlcl07XG5cbiAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoJ1VucmVjb2duaXNlZCBkYXRhIHR5cGUgMHglMDJYJywgdHlwZU51bWJlcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0eXBlLm5hbWUpIHtcbiAgICAgICAgICBjYXNlICdOdWxsJzpcbiAgICAgICAgICBjYXNlICdUaW55SW50JzpcbiAgICAgICAgICBjYXNlICdTbWFsbEludCc6XG4gICAgICAgICAgY2FzZSAnSW50JzpcbiAgICAgICAgICBjYXNlICdCaWdJbnQnOlxuICAgICAgICAgIGNhc2UgJ1JlYWwnOlxuICAgICAgICAgIGNhc2UgJ0Zsb2F0JzpcbiAgICAgICAgICBjYXNlICdTbWFsbE1vbmV5JzpcbiAgICAgICAgICBjYXNlICdNb25leSc6XG4gICAgICAgICAgY2FzZSAnQml0JzpcbiAgICAgICAgICBjYXNlICdTbWFsbERhdGVUaW1lJzpcbiAgICAgICAgICBjYXNlICdEYXRlVGltZSc6XG4gICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soe1xuICAgICAgICAgICAgICB1c2VyVHlwZTogdXNlclR5cGUsXG4gICAgICAgICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgY29sbGF0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBzY2FsZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBkYXRhTGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB1ZHRJbmZvOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAnSW50Tic6XG4gICAgICAgICAgY2FzZSAnRmxvYXROJzpcbiAgICAgICAgICBjYXNlICdNb25leU4nOlxuICAgICAgICAgIGNhc2UgJ0JpdE4nOlxuICAgICAgICAgIGNhc2UgJ1VuaXF1ZUlkZW50aWZpZXInOlxuICAgICAgICAgIGNhc2UgJ0RhdGVUaW1lTic6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgIGNvbGxhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogZGF0YUxlbmd0aCxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB1ZHRJbmZvOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgJ1ZhcmlhbnQnOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDMyTEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICBjb2xsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzY2FsZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGRhdGFMZW5ndGg6IGRhdGFMZW5ndGgsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdWR0SW5mbzogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlICdWYXJDaGFyJzpcbiAgICAgICAgICBjYXNlICdDaGFyJzpcbiAgICAgICAgICBjYXNlICdOVmFyQ2hhcic6XG4gICAgICAgICAgY2FzZSAnTkNoYXInOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlci5yZWFkVUludDE2TEUoKGRhdGFMZW5ndGgpID0+IHtcbiAgICAgICAgICAgICAgcmVhZENvbGxhdGlvbihwYXJzZXIsIChjb2xsYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgICB1c2VyVHlwZTogdXNlclR5cGUsXG4gICAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgY29sbGF0aW9uOiBjb2xsYXRpb24sXG4gICAgICAgICAgICAgICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoOiBkYXRhTGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgc2NoZW1hOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB1ZHRJbmZvOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgJ1RleHQnOlxuICAgICAgICAgIGNhc2UgJ05UZXh0JzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQzMkxFKChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgIHJlYWRDb2xsYXRpb24ocGFyc2VyLCAoY29sbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICAgIGNvbGxhdGlvbjogY29sbGF0aW9uLFxuICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBzY2FsZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogZGF0YUxlbmd0aCxcbiAgICAgICAgICAgICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgdWR0SW5mbzogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlICdWYXJCaW5hcnknOlxuICAgICAgICAgIGNhc2UgJ0JpbmFyeSc6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50MTZMRSgoZGF0YUxlbmd0aCkgPT4ge1xuICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgIGNvbGxhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogZGF0YUxlbmd0aCxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB1ZHRJbmZvOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhc2UgJ0ltYWdlJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQzMkxFKChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICB1c2VyVHlwZTogdXNlclR5cGUsXG4gICAgICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgY29sbGF0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgc2NhbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBkYXRhTGVuZ3RoOiBkYXRhTGVuZ3RoLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHVkdEluZm86IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAnWG1sJzpcbiAgICAgICAgICAgIHJldHVybiByZWFkU2NoZW1hKHBhcnNlciwgKHNjaGVtYSkgPT4ge1xuICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICAgICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgIGNvbGxhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hLFxuICAgICAgICAgICAgICAgIHVkdEluZm86IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAnVGltZSc6XG4gICAgICAgICAgY2FzZSAnRGF0ZVRpbWUyJzpcbiAgICAgICAgICBjYXNlICdEYXRlVGltZU9mZnNldCc6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VyLnJlYWRVSW50OCgoc2NhbGUpID0+IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICBjb2xsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzY2FsZTogc2NhbGUsXG4gICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHVkdEluZm86IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FzZSAnTnVtZXJpY04nOlxuICAgICAgICAgIGNhc2UgJ0RlY2ltYWxOJzpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIucmVhZFVJbnQ4KChkYXRhTGVuZ3RoKSA9PiB7XG4gICAgICAgICAgICAgIHBhcnNlci5yZWFkVUludDgoKHByZWNpc2lvbikgPT4ge1xuICAgICAgICAgICAgICAgIHBhcnNlci5yZWFkVUludDgoKHNjYWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBjb2xsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiBwcmVjaXNpb24sXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiBzY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogZGF0YUxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHVkdEluZm86IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYXNlICdVRFQnOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWRVRFRJbmZvKHBhcnNlciwgKHVkdEluZm8pID0+IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICBjb2xsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzY2FsZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGRhdGFMZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB1ZHRJbmZvOiB1ZHRJbmZvXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoJ1VucmVjb2duaXNlZCB0eXBlICVzJywgdHlwZS5uYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWV0YWRhdGFQYXJzZTtcbmV4cG9ydCB7IHJlYWRDb2xsYXRpb24gfTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXRhZGF0YVBhcnNlO1xubW9kdWxlLmV4cG9ydHMucmVhZENvbGxhdGlvbiA9IHJlYWRDb2xsYXRpb247XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxTQUFBLEdBQUFELE9BQUE7QUFHQSxJQUFBRSxVQUFBLEdBQUFGLE9BQUE7QUFtREEsU0FBU0csYUFBYUEsQ0FBQ0MsTUFBYyxFQUFFQyxRQUF3QyxFQUFFO0VBQy9FO0VBQ0FELE1BQU0sQ0FBQ0UsVUFBVSxDQUFDLENBQUMsRUFBR0MsYUFBYSxJQUFLO0lBQ3RDRixRQUFRLENBQUNHLG9CQUFTLENBQUNDLFVBQVUsQ0FBQ0YsYUFBYSxDQUFDLENBQUM7RUFDL0MsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxTQUFTRyxVQUFVQSxDQUFDTixNQUFjLEVBQUVDLFFBQWlELEVBQUU7RUFDckY7RUFDQUQsTUFBTSxDQUFDTyxTQUFTLENBQUVDLGFBQWEsSUFBSztJQUNsQyxJQUFJQSxhQUFhLEtBQUssSUFBSSxFQUFFO01BQzFCUixNQUFNLENBQUNTLFlBQVksQ0FBRUMsTUFBTSxJQUFLO1FBQzlCVixNQUFNLENBQUNTLFlBQVksQ0FBRUUsWUFBWSxJQUFLO1VBQ3BDWCxNQUFNLENBQUNZLGFBQWEsQ0FBRUMsbUJBQW1CLElBQUs7WUFDNUNaLFFBQVEsQ0FBQztjQUNQUyxNQUFNLEVBQUVBLE1BQU07Y0FDZEMsWUFBWSxFQUFFQSxZQUFZO2NBQzFCRSxtQkFBbUIsRUFBRUE7WUFDdkIsQ0FBQyxDQUFDO1VBQ0osQ0FBQyxDQUFDO1FB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
380
+ module.exports.readMetadata = readMetadata;
381
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29sbGF0aW9uIiwicmVxdWlyZSIsIl9kYXRhVHlwZSIsIl9zcHJpbnRmSnMiLCJfaGVscGVycyIsInJlYWRDb2xsYXRpb24iLCJidWYiLCJvZmZzZXQiLCJsZW5ndGgiLCJOb3RFbm91Z2hEYXRhRXJyb3IiLCJjb2xsYXRpb24iLCJDb2xsYXRpb24iLCJmcm9tQnVmZmVyIiwic2xpY2UiLCJSZXN1bHQiLCJyZWFkU2NoZW1hIiwic2NoZW1hUHJlc2VudCIsInZhbHVlIiwicmVhZFVJbnQ4IiwidW5kZWZpbmVkIiwiZGJuYW1lIiwicmVhZEJWYXJDaGFyIiwib3duaW5nU2NoZW1hIiwieG1sU2NoZW1hQ29sbGVjdGlvbiIsInJlYWRVc1ZhckNoYXIiLCJyZWFkVURUSW5mbyIsIm1heEJ5dGVTaXplIiwicmVhZFVJbnQxNkxFIiwidHlwZU5hbWUiLCJhc3NlbWJseU5hbWUiLCJyZWFkTWV0YWRhdGEiLCJvcHRpb25zIiwidXNlclR5cGUiLCJ0ZHNWZXJzaW9uIiwicmVhZFVJbnQzMkxFIiwiZmxhZ3MiLCJ0eXBlTnVtYmVyIiwidHlwZSIsIlRZUEUiLCJFcnJvciIsInNwcmludGYiLCJuYW1lIiwicHJlY2lzaW9uIiwic2NhbGUiLCJkYXRhTGVuZ3RoIiwic2NoZW1hIiwidWR0SW5mbyIsIm1ldGFkYXRhUGFyc2UiLCJwYXJzZXIiLCJjYWxsYmFjayIsInJlc3VsdCIsImJ1ZmZlciIsInBvc2l0aW9uIiwiZXJyIiwid2FpdEZvckNodW5rIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRhZGF0YS1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sbGF0aW9uIH0gZnJvbSAnLi9jb2xsYXRpb24nO1xuaW1wb3J0IFBhcnNlciwgeyB0eXBlIFBhcnNlck9wdGlvbnMgfSBmcm9tICcuL3Rva2VuL3N0cmVhbS1wYXJzZXInO1xuaW1wb3J0IHsgVFlQRSwgdHlwZSBEYXRhVHlwZSB9IGZyb20gJy4vZGF0YS10eXBlJztcbmltcG9ydCB7IHR5cGUgQ3J5cHRvTWV0YWRhdGEgfSBmcm9tICcuL2Fsd2F5cy1lbmNyeXB0ZWQvdHlwZXMnO1xuXG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSAnc3ByaW50Zi1qcyc7XG5cbmltcG9ydCB7IFJlc3VsdCwgTm90RW5vdWdoRGF0YUVycm9yLCByZWFkVUludDgsIHJlYWRCVmFyQ2hhciwgcmVhZFVzVmFyQ2hhciwgcmVhZFVJbnQxNkxFLCByZWFkVUludDMyTEUgfSBmcm9tICcuL3Rva2VuL2hlbHBlcnMnO1xuXG5pbnRlcmZhY2UgWG1sU2NoZW1hIHtcbiAgZGJuYW1lOiBzdHJpbmc7XG4gIG93bmluZ1NjaGVtYTogc3RyaW5nO1xuICB4bWxTY2hlbWFDb2xsZWN0aW9uOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBVZHRJbmZvIHtcbiAgbWF4Qnl0ZVNpemU6IG51bWJlcjtcbiAgZGJuYW1lOiBzdHJpbmc7XG4gIG93bmluZ1NjaGVtYTogc3RyaW5nO1xuICB0eXBlTmFtZTogc3RyaW5nO1xuICBhc3NlbWJseU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQmFzZU1ldGFkYXRhID0ge1xuICB1c2VyVHlwZTogbnVtYmVyO1xuXG4gIGZsYWdzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgY29sdW1uJ3MgdHlwZSwgc3VjaCBhcyBWYXJDaGFyLCBJbnQgb3IgQmluYXJ5LlxuICAgKi9cbiAgdHlwZTogRGF0YVR5cGU7XG5cbiAgY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgcHJlY2lzaW9uLiBPbmx5IGFwcGxpY2FibGUgdG8gbnVtZXJpYyBhbmQgZGVjaW1hbC5cbiAgICovXG4gIHByZWNpc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NhbGUuIE9ubHkgYXBwbGljYWJsZSB0byBudW1lcmljLCBkZWNpbWFsLCB0aW1lLCBkYXRldGltZTIgYW5kIGRhdGV0aW1lb2Zmc2V0LlxuICAgKi9cbiAgc2NhbGU6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGxlbmd0aCwgZm9yIGNoYXIsIHZhcmNoYXIsIG52YXJjaGFyIGFuZCB2YXJiaW5hcnkuXG4gICAqL1xuICBkYXRhTGVuZ3RoOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgc2NoZW1hOiBYbWxTY2hlbWEgfCB1bmRlZmluZWQ7XG5cbiAgdWR0SW5mbzogVWR0SW5mbyB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IHR5cGUgTWV0YWRhdGEgPSB7XG4gIGNyeXB0b01ldGFkYXRhPzogQ3J5cHRvTWV0YWRhdGE7XG59ICYgQmFzZU1ldGFkYXRhO1xuXG5mdW5jdGlvbiByZWFkQ29sbGF0aW9uKGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IFJlc3VsdDxDb2xsYXRpb24+IHtcbiAgb2Zmc2V0ID0gK29mZnNldDtcblxuICBpZiAoYnVmLmxlbmd0aCA8IG9mZnNldCArIDUpIHtcbiAgICB0aHJvdyBuZXcgTm90RW5vdWdoRGF0YUVycm9yKG9mZnNldCArIDUpO1xuICB9XG5cbiAgY29uc3QgY29sbGF0aW9uID0gQ29sbGF0aW9uLmZyb21CdWZmZXIoYnVmLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgNSkpO1xuICByZXR1cm4gbmV3IFJlc3VsdChjb2xsYXRpb24sIG9mZnNldCArIDUpO1xufVxuXG5mdW5jdGlvbiByZWFkU2NoZW1hKGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IFJlc3VsdDxYbWxTY2hlbWEgfCB1bmRlZmluZWQ+IHtcbiAgb2Zmc2V0ID0gK29mZnNldDtcblxuICBsZXQgc2NoZW1hUHJlc2VudDtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogc2NoZW1hUHJlc2VudCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgaWYgKHNjaGVtYVByZXNlbnQgIT09IDB4MDEpIHtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh1bmRlZmluZWQsIG9mZnNldCk7XG4gIH1cblxuICBsZXQgZGJuYW1lO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBkYm5hbWUgfSA9IHJlYWRCVmFyQ2hhcihidWYsIG9mZnNldCkpO1xuXG4gIGxldCBvd25pbmdTY2hlbWE7XG4gICh7IG9mZnNldCwgdmFsdWU6IG93bmluZ1NjaGVtYSB9ID0gcmVhZEJWYXJDaGFyKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgbGV0IHhtbFNjaGVtYUNvbGxlY3Rpb247XG4gICh7IG9mZnNldCwgdmFsdWU6IHhtbFNjaGVtYUNvbGxlY3Rpb24gfSA9IHJlYWRVc1ZhckNoYXIoYnVmLCBvZmZzZXQpKTtcblxuICByZXR1cm4gbmV3IFJlc3VsdCh7IGRibmFtZSwgb3duaW5nU2NoZW1hLCB4bWxTY2hlbWFDb2xsZWN0aW9uIH0sIG9mZnNldCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRVRFRJbmZvKGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlcik6IFJlc3VsdDxVZHRJbmZvPiB7XG4gIGxldCBtYXhCeXRlU2l6ZTtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogbWF4Qnl0ZVNpemUgfSA9IHJlYWRVSW50MTZMRShidWYsIG9mZnNldCkpO1xuXG4gIGxldCBkYm5hbWU7XG4gICh7IG9mZnNldCwgdmFsdWU6IGRibmFtZSB9ID0gcmVhZEJWYXJDaGFyKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgbGV0IG93bmluZ1NjaGVtYTtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogb3duaW5nU2NoZW1hIH0gPSByZWFkQlZhckNoYXIoYnVmLCBvZmZzZXQpKTtcblxuICBsZXQgdHlwZU5hbWU7XG4gICh7IG9mZnNldCwgdmFsdWU6IHR5cGVOYW1lIH0gPSByZWFkQlZhckNoYXIoYnVmLCBvZmZzZXQpKTtcblxuICBsZXQgYXNzZW1ibHlOYW1lO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBhc3NlbWJseU5hbWUgfSA9IHJlYWRVc1ZhckNoYXIoYnVmLCBvZmZzZXQpKTtcblxuICByZXR1cm4gbmV3IFJlc3VsdCh7XG4gICAgbWF4Qnl0ZVNpemU6IG1heEJ5dGVTaXplLFxuICAgIGRibmFtZTogZGJuYW1lLFxuICAgIG93bmluZ1NjaGVtYTogb3duaW5nU2NoZW1hLFxuICAgIHR5cGVOYW1lOiB0eXBlTmFtZSxcbiAgICBhc3NlbWJseU5hbWU6IGFzc2VtYmx5TmFtZVxuICB9LCBvZmZzZXQpO1xufVxuXG5mdW5jdGlvbiByZWFkTWV0YWRhdGEoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zKTogUmVzdWx0PE1ldGFkYXRhPiB7XG4gIGxldCB1c2VyVHlwZTtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogdXNlclR5cGUgfSA9IChvcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJyA/IHJlYWRVSW50MTZMRSA6IHJlYWRVSW50MzJMRSkoYnVmLCBvZmZzZXQpKTtcblxuICBsZXQgZmxhZ3M7XG4gICh7IG9mZnNldCwgdmFsdWU6IGZsYWdzIH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcblxuICBsZXQgdHlwZU51bWJlcjtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogdHlwZU51bWJlciB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgY29uc3QgdHlwZTogRGF0YVR5cGUgPSBUWVBFW3R5cGVOdW1iZXJdO1xuICBpZiAoIXR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignVW5yZWNvZ25pc2VkIGRhdGEgdHlwZSAweCUwMlgnLCB0eXBlTnVtYmVyKSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUubmFtZSkge1xuICAgIGNhc2UgJ051bGwnOlxuICAgIGNhc2UgJ1RpbnlJbnQnOlxuICAgIGNhc2UgJ1NtYWxsSW50JzpcbiAgICBjYXNlICdJbnQnOlxuICAgIGNhc2UgJ0JpZ0ludCc6XG4gICAgY2FzZSAnUmVhbCc6XG4gICAgY2FzZSAnRmxvYXQnOlxuICAgIGNhc2UgJ1NtYWxsTW9uZXknOlxuICAgIGNhc2UgJ01vbmV5JzpcbiAgICBjYXNlICdCaXQnOlxuICAgIGNhc2UgJ1NtYWxsRGF0ZVRpbWUnOlxuICAgIGNhc2UgJ0RhdGVUaW1lJzpcbiAgICBjYXNlICdEYXRlJzpcbiAgICAgIHJldHVybiBuZXcgUmVzdWx0KHtcbiAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGNvbGxhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgc2NhbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgZGF0YUxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgICBzY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgdWR0SW5mbzogdW5kZWZpbmVkXG4gICAgICB9LCBvZmZzZXQpO1xuXG4gICAgY2FzZSAnSW50Tic6XG4gICAgY2FzZSAnRmxvYXROJzpcbiAgICBjYXNlICdNb25leU4nOlxuICAgIGNhc2UgJ0JpdE4nOlxuICAgIGNhc2UgJ1VuaXF1ZUlkZW50aWZpZXInOlxuICAgIGNhc2UgJ0RhdGVUaW1lTic6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHJldHVybiBuZXcgUmVzdWx0KHtcbiAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGNvbGxhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICBwcmVjaXNpb246IHVuZGVmaW5lZCxcbiAgICAgICAgc2NhbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgZGF0YUxlbmd0aDogZGF0YUxlbmd0aCxcbiAgICAgICAgc2NoZW1hOiB1bmRlZmluZWQsXG4gICAgICAgIHVkdEluZm86IHVuZGVmaW5lZFxuICAgICAgfSwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjYXNlICdWYXJpYW50Jzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDMyTEUoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgcmV0dXJuIG5ldyBSZXN1bHQoe1xuICAgICAgICB1c2VyVHlwZTogdXNlclR5cGUsXG4gICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgY29sbGF0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICBzY2FsZTogdW5kZWZpbmVkLFxuICAgICAgICBkYXRhTGVuZ3RoOiBkYXRhTGVuZ3RoLFxuICAgICAgICBzY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgdWR0SW5mbzogdW5kZWZpbmVkXG4gICAgICB9LCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGNhc2UgJ1ZhckNoYXInOlxuICAgIGNhc2UgJ0NoYXInOlxuICAgIGNhc2UgJ05WYXJDaGFyJzpcbiAgICBjYXNlICdOQ2hhcic6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQxNkxFKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGxldCBjb2xsYXRpb247XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBjb2xsYXRpb24gfSA9IHJlYWRDb2xsYXRpb24oYnVmLCBvZmZzZXQpKTtcblxuICAgICAgcmV0dXJuIG5ldyBSZXN1bHQoe1xuICAgICAgICB1c2VyVHlwZTogdXNlclR5cGUsXG4gICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgY29sbGF0aW9uOiBjb2xsYXRpb24sXG4gICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICBzY2FsZTogdW5kZWZpbmVkLFxuICAgICAgICBkYXRhTGVuZ3RoOiBkYXRhTGVuZ3RoLFxuICAgICAgICBzY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgdWR0SW5mbzogdW5kZWZpbmVkXG4gICAgICB9LCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGNhc2UgJ1RleHQnOlxuICAgIGNhc2UgJ05UZXh0Jzoge1xuICAgICAgbGV0IGRhdGFMZW5ndGg7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBkYXRhTGVuZ3RoIH0gPSByZWFkVUludDMyTEUoYnVmLCBvZmZzZXQpKTtcblxuICAgICAgbGV0IGNvbGxhdGlvbjtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGNvbGxhdGlvbiB9ID0gcmVhZENvbGxhdGlvbihidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gbmV3IFJlc3VsdCh7XG4gICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBjb2xsYXRpb246IGNvbGxhdGlvbixcbiAgICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgIGRhdGFMZW5ndGg6IGRhdGFMZW5ndGgsXG4gICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICB1ZHRJbmZvOiB1bmRlZmluZWRcbiAgICAgIH0sIG9mZnNldCk7XG4gICAgfVxuXG4gICAgY2FzZSAnVmFyQmluYXJ5JzpcbiAgICBjYXNlICdCaW5hcnknOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50MTZMRShidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gbmV3IFJlc3VsdCh7XG4gICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBjb2xsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgIGRhdGFMZW5ndGg6IGRhdGFMZW5ndGgsXG4gICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICB1ZHRJbmZvOiB1bmRlZmluZWRcbiAgICAgIH0sIG9mZnNldCk7XG4gICAgfVxuXG4gICAgY2FzZSAnSW1hZ2UnOiB7XG4gICAgICBsZXQgZGF0YUxlbmd0aDtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IGRhdGFMZW5ndGggfSA9IHJlYWRVSW50MzJMRShidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gbmV3IFJlc3VsdCh7XG4gICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBjb2xsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgIGRhdGFMZW5ndGg6IGRhdGFMZW5ndGgsXG4gICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICB1ZHRJbmZvOiB1bmRlZmluZWRcbiAgICAgIH0sIG9mZnNldCk7XG4gICAgfVxuXG4gICAgY2FzZSAnWG1sJzoge1xuICAgICAgbGV0IHNjaGVtYTtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IHNjaGVtYSB9ID0gcmVhZFNjaGVtYShidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gbmV3IFJlc3VsdCh7XG4gICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBjb2xsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgIHNjYWxlOiB1bmRlZmluZWQsXG4gICAgICAgIGRhdGFMZW5ndGg6IHVuZGVmaW5lZCxcbiAgICAgICAgc2NoZW1hOiBzY2hlbWEsXG4gICAgICAgIHVkdEluZm86IHVuZGVmaW5lZFxuICAgICAgfSwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjYXNlICdUaW1lJzpcbiAgICBjYXNlICdEYXRlVGltZTInOlxuICAgIGNhc2UgJ0RhdGVUaW1lT2Zmc2V0Jzoge1xuICAgICAgbGV0IHNjYWxlO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogc2NhbGUgfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICByZXR1cm4gbmV3IFJlc3VsdCh7XG4gICAgICAgIHVzZXJUeXBlOiB1c2VyVHlwZSxcbiAgICAgICAgZmxhZ3M6IGZsYWdzLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBjb2xsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgcHJlY2lzaW9uOiB1bmRlZmluZWQsXG4gICAgICAgIHNjYWxlOiBzY2FsZSxcbiAgICAgICAgZGF0YUxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAgICBzY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgdWR0SW5mbzogdW5kZWZpbmVkXG4gICAgICB9LCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGNhc2UgJ051bWVyaWNOJzpcbiAgICBjYXNlICdEZWNpbWFsTic6IHtcbiAgICAgIGxldCBkYXRhTGVuZ3RoO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogZGF0YUxlbmd0aCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIGxldCBwcmVjaXNpb247XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBwcmVjaXNpb24gfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gICAgICBsZXQgc2NhbGU7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBzY2FsZSB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICAgIHJldHVybiBuZXcgUmVzdWx0KHtcbiAgICAgICAgdXNlclR5cGU6IHVzZXJUeXBlLFxuICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGNvbGxhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICBwcmVjaXNpb246IHByZWNpc2lvbixcbiAgICAgICAgc2NhbGU6IHNjYWxlLFxuICAgICAgICBkYXRhTGVuZ3RoOiBkYXRhTGVuZ3RoLFxuICAgICAgICBzY2hlbWE6IHVuZGVmaW5lZCxcbiAgICAgICAgdWR0SW5mbzogdW5kZWZpbmVkXG4gICAgICB9LCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGNhc2UgJ1VEVCc6IHtcbiAgICAgIGxldCB1ZHRJbmZvO1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogdWR0SW5mbyB9ID0gcmVhZFVEVEluZm8oYnVmLCBvZmZzZXQpKTtcblxuICAgICAgcmV0dXJuIG5ldyBSZXN1bHQoe1xuICAgICAgICB1c2VyVHlwZTogdXNlclR5cGUsXG4gICAgICAgIGZsYWdzOiBmbGFncyxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgY29sbGF0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIHByZWNpc2lvbjogdW5kZWZpbmVkLFxuICAgICAgICBzY2FsZTogdW5kZWZpbmVkLFxuICAgICAgICBkYXRhTGVuZ3RoOiB1bmRlZmluZWQsXG4gICAgICAgIHNjaGVtYTogdW5kZWZpbmVkLFxuICAgICAgICB1ZHRJbmZvOiB1ZHRJbmZvXG4gICAgICB9LCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignVW5yZWNvZ25pc2VkIHR5cGUgJXMnLCB0eXBlLm5hbWUpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXRhZGF0YVBhcnNlKHBhcnNlcjogUGFyc2VyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBjYWxsYmFjazogKG1ldGFkYXRhOiBNZXRhZGF0YSkgPT4gdm9pZCkge1xuICAoYXN5bmMgKCkgPT4ge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gcmVhZE1ldGFkYXRhKHBhcnNlci5idWZmZXIsIHBhcnNlci5wb3NpdGlvbiwgb3B0aW9ucyk7XG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgTm90RW5vdWdoRGF0YUVycm9yKSB7XG4gICAgICAgICAgYXdhaXQgcGFyc2VyLndhaXRGb3JDaHVuaygpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuXG4gICAgICBwYXJzZXIucG9zaXRpb24gPSByZXN1bHQub2Zmc2V0O1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHJlc3VsdC52YWx1ZSk7XG4gICAgfVxuICB9KSgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZXRhZGF0YVBhcnNlO1xuZXhwb3J0IHsgcmVhZENvbGxhdGlvbiwgcmVhZE1ldGFkYXRhIH07XG5cbm1vZHVsZS5leHBvcnRzID0gbWV0YWRhdGFQYXJzZTtcbm1vZHVsZS5leHBvcnRzLnJlYWRDb2xsYXRpb24gPSByZWFkQ29sbGF0aW9uO1xubW9kdWxlLmV4cG9ydHMucmVhZE1ldGFkYXRhID0gcmVhZE1ldGFkYXRhO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLFVBQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQUdBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLFFBQUEsR0FBQUgsT0FBQTtBQWtEQSxTQUFTSSxhQUFhQSxDQUFDQyxHQUFXLEVBQUVDLE1BQWMsRUFBcUI7RUFDckVBLE1BQU0sR0FBRyxDQUFDQSxNQUFNO0VBRWhCLElBQUlELEdBQUcsQ0FBQ0UsTUFBTSxHQUFHRCxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQzNCLE1BQU0sSUFBSUUsMkJBQWtCLENBQUNGLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDMUM7RUFFQSxNQUFNRyxTQUFTLEdBQUdDLG9C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