@payloadcms/db-postgres 0.7.1 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/count.d.ts +3 -0
- package/dist/count.d.ts.map +1 -0
- package/dist/count.js +68 -0
- package/dist/create.d.ts.map +1 -1
- package/dist/create.js +7 -9
- package/dist/createGlobal.d.ts +1 -1
- package/dist/createGlobal.d.ts.map +1 -1
- package/dist/createGlobal.js +8 -10
- package/dist/createGlobalVersion.d.ts +1 -1
- package/dist/createGlobalVersion.d.ts.map +1 -1
- package/dist/createGlobalVersion.js +12 -14
- package/dist/createVersion.d.ts.map +1 -1
- package/dist/createVersion.js +22 -19
- package/dist/deleteMany.js +6 -8
- package/dist/deleteOne.d.ts.map +1 -1
- package/dist/deleteOne.js +6 -3
- package/dist/deleteVersions.d.ts.map +1 -1
- package/dist/deleteVersions.js +7 -8
- package/dist/find/buildFindManyArgs.js +3 -3
- package/dist/find/findMany.js +2 -2
- package/dist/find/traverseFields.d.ts.map +1 -1
- package/dist/find/traverseFields.js +23 -11
- package/dist/find.d.ts.map +1 -1
- package/dist/find.js +10 -11
- package/dist/findGlobal.d.ts.map +1 -1
- package/dist/findGlobal.js +7 -9
- package/dist/findGlobalVersions.d.ts.map +1 -1
- package/dist/findGlobalVersions.js +7 -8
- package/dist/findOne.d.ts +1 -1
- package/dist/findOne.d.ts.map +1 -1
- package/dist/findOne.js +9 -10
- package/dist/findVersions.d.ts.map +1 -1
- package/dist/findVersions.js +7 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +28 -15
- package/dist/queries/getTableColumnFromPath.d.ts.map +1 -1
- package/dist/queries/getTableColumnFromPath.js +148 -42
- package/dist/queries/sanitizeQueryValue.d.ts.map +1 -1
- package/dist/queries/sanitizeQueryValue.js +5 -2
- package/dist/queryDrafts.d.ts.map +1 -1
- package/dist/queryDrafts.js +7 -8
- package/dist/schema/build.d.ts +2 -1
- package/dist/schema/build.d.ts.map +1 -1
- package/dist/schema/build.js +19 -14
- package/dist/schema/getTableName.d.ts +32 -0
- package/dist/schema/getTableName.d.ts.map +1 -0
- package/dist/schema/getTableName.js +43 -0
- package/dist/schema/traverseFields.d.ts +2 -1
- package/dist/schema/traverseFields.d.ts.map +1 -1
- package/dist/schema/traverseFields.js +54 -18
- package/dist/schema/validateExistingBlockIsIdentical.d.ts +2 -1
- package/dist/schema/validateExistingBlockIsIdentical.d.ts.map +1 -1
- package/dist/schema/validateExistingBlockIsIdentical.js +14 -8
- package/dist/transform/write/blocks.d.ts +2 -2
- package/dist/transform/write/blocks.d.ts.map +1 -1
- package/dist/transform/write/blocks.js +4 -4
- package/dist/transform/write/traverseFields.d.ts +2 -2
- package/dist/transform/write/traverseFields.d.ts.map +1 -1
- package/dist/transform/write/traverseFields.js +34 -25
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +7 -4
- package/dist/updateGlobal.d.ts +1 -1
- package/dist/updateGlobal.d.ts.map +1 -1
- package/dist/updateGlobal.js +9 -11
- package/dist/updateGlobalVersion.d.ts.map +1 -1
- package/dist/updateGlobalVersion.js +9 -5
- package/dist/updateVersion.d.ts.map +1 -1
- package/dist/updateVersion.js +9 -5
- package/dist/upsertRow/index.d.ts.map +1 -1
- package/dist/upsertRow/index.js +7 -6
- package/dist/upsertRow/insertArrays.d.ts.map +1 -1
- package/dist/upsertRow/insertArrays.js +3 -3
- package/dist/upsertRow/types.d.ts +1 -1
- package/dist/upsertRow/types.d.ts.map +1 -1
- package/package.json +3 -3
@@ -16,6 +16,7 @@ const _tosnakecase = /*#__PURE__*/ _interop_require_default(require("to-snake-ca
|
|
16
16
|
const _hasLocalesTable = require("../utilities/hasLocalesTable");
|
17
17
|
const _build = require("./build");
|
18
18
|
const _createIndex = require("./createIndex");
|
19
|
+
const _getTableName = require("./getTableName");
|
19
20
|
const _idToUUID = require("./idToUUID");
|
20
21
|
const _parentIDColumnMap = require("./parentIDColumnMap");
|
21
22
|
const _validateExistingBlockIsIdentical = require("./validateExistingBlockIsIdentical");
|
@@ -24,7 +25,8 @@ function _interop_require_default(obj) {
|
|
24
25
|
default: obj
|
25
26
|
};
|
26
27
|
}
|
27
|
-
const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts, columnPrefix, columns, disableNotNull, disableUnique = false, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationsToBuild, relationships, rootRelationsToBuild, rootTableIDColType, rootTableName })=>{
|
28
|
+
const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts, columnPrefix, columns, disableNotNull, disableUnique = false, fieldPrefix, fields, forceLocalized, indexes, localesColumns, localesIndexes, newTableName, parentTableName, relationsToBuild, relationships, rootRelationsToBuild, rootTableIDColType, rootTableName, versions })=>{
|
29
|
+
const throwValidationError = true;
|
28
30
|
let hasLocalizedField = false;
|
29
31
|
let hasLocalizedRelationshipField = false;
|
30
32
|
let hasManyTextField = false;
|
@@ -143,7 +145,14 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
143
145
|
case 'radio':
|
144
146
|
case 'select':
|
145
147
|
{
|
146
|
-
const enumName =
|
148
|
+
const enumName = (0, _getTableName.getTableName)({
|
149
|
+
adapter,
|
150
|
+
config: field,
|
151
|
+
parentTableName: newTableName,
|
152
|
+
prefix: `enum_${newTableName}_`,
|
153
|
+
target: 'enumName',
|
154
|
+
throwValidationError
|
155
|
+
});
|
147
156
|
adapter.enums[enumName] = (0, _pgcore.pgEnum)(enumName, field.options.map((option)=>{
|
148
157
|
if ((0, _types.optionIsObject)(option)) {
|
149
158
|
return option.value;
|
@@ -151,7 +160,13 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
151
160
|
return option;
|
152
161
|
}));
|
153
162
|
if (field.type === 'select' && field.hasMany) {
|
154
|
-
const selectTableName =
|
163
|
+
const selectTableName = (0, _getTableName.getTableName)({
|
164
|
+
adapter,
|
165
|
+
config: field,
|
166
|
+
parentTableName: newTableName,
|
167
|
+
prefix: `${newTableName}_`,
|
168
|
+
throwValidationError
|
169
|
+
});
|
155
170
|
const baseColumns = {
|
156
171
|
order: (0, _pgcore.integer)('order').notNull(),
|
157
172
|
parent: _parentIDColumnMap.parentIDColumnMap[parentIDColType]('parent_id').references(()=>adapter.tables[parentTableName].id, {
|
@@ -177,7 +192,8 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
177
192
|
disableNotNull,
|
178
193
|
disableUnique,
|
179
194
|
fields: [],
|
180
|
-
tableName: selectTableName
|
195
|
+
tableName: selectTableName,
|
196
|
+
versions
|
181
197
|
});
|
182
198
|
relationsToBuild.set(fieldName, selectTableName);
|
183
199
|
const selectTableRelations = (0, _drizzleorm.relations)(adapter.tables[selectTableName], ({ one })=>{
|
@@ -207,7 +223,13 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
207
223
|
case 'array':
|
208
224
|
{
|
209
225
|
const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
|
210
|
-
const arrayTableName =
|
226
|
+
const arrayTableName = (0, _getTableName.getTableName)({
|
227
|
+
adapter,
|
228
|
+
config: field,
|
229
|
+
parentTableName: newTableName,
|
230
|
+
prefix: `${newTableName}_`,
|
231
|
+
throwValidationError
|
232
|
+
});
|
211
233
|
const baseColumns = {
|
212
234
|
_order: (0, _pgcore.integer)('_order').notNull(),
|
213
235
|
_parentID: _parentIDColumnMap.parentIDColumnMap[parentIDColType]('_parent_id').references(()=>adapter.tables[parentTableName].id, {
|
@@ -233,7 +255,8 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
233
255
|
rootRelationships: relationships,
|
234
256
|
rootTableIDColType,
|
235
257
|
rootTableName,
|
236
|
-
tableName: arrayTableName
|
258
|
+
tableName: arrayTableName,
|
259
|
+
versions
|
237
260
|
});
|
238
261
|
if (subHasManyTextField) {
|
239
262
|
if (!hasManyTextField || subHasManyTextField === 'index') hasManyTextField = subHasManyTextField;
|
@@ -254,7 +277,7 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
254
277
|
})
|
255
278
|
};
|
256
279
|
if ((0, _hasLocalesTable.hasLocalesTable)(field.fields)) {
|
257
|
-
result._locales = many(adapter.tables[`${arrayTableName}
|
280
|
+
result._locales = many(adapter.tables[`${arrayTableName}${adapter.localesSuffix}`]);
|
258
281
|
}
|
259
282
|
subRelationsToBuild.forEach((val, key)=>{
|
260
283
|
result[key] = many(adapter.tables[val]);
|
@@ -268,7 +291,13 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
268
291
|
{
|
269
292
|
const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull;
|
270
293
|
field.blocks.forEach((block)=>{
|
271
|
-
const blockTableName =
|
294
|
+
const blockTableName = (0, _getTableName.getTableName)({
|
295
|
+
adapter,
|
296
|
+
config: block,
|
297
|
+
parentTableName: rootTableName,
|
298
|
+
prefix: `${rootTableName}_blocks_`,
|
299
|
+
throwValidationError
|
300
|
+
});
|
272
301
|
if (!adapter.tables[blockTableName]) {
|
273
302
|
const baseColumns = {
|
274
303
|
_order: (0, _pgcore.integer)('_order').notNull(),
|
@@ -297,7 +326,8 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
297
326
|
rootRelationships: relationships,
|
298
327
|
rootTableIDColType,
|
299
328
|
rootTableName,
|
300
|
-
tableName: blockTableName
|
329
|
+
tableName: blockTableName,
|
330
|
+
versions
|
301
331
|
});
|
302
332
|
if (subHasManyTextField) {
|
303
333
|
if (!hasManyTextField || subHasManyTextField === 'index') hasManyTextField = subHasManyTextField;
|
@@ -317,7 +347,7 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
317
347
|
})
|
318
348
|
};
|
319
349
|
if ((0, _hasLocalesTable.hasLocalesTable)(block.fields)) {
|
320
|
-
result._locales = many(adapter.tables[`${blockTableName}
|
350
|
+
result._locales = many(adapter.tables[`${blockTableName}${adapter.localesSuffix}`]);
|
321
351
|
}
|
322
352
|
subRelationsToBuild.forEach((val, key)=>{
|
323
353
|
result[key] = many(adapter.tables[val]);
|
@@ -325,14 +355,16 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
325
355
|
return result;
|
326
356
|
});
|
327
357
|
adapter.relations[`relations_${blockTableName}`] = blockTableRelations;
|
328
|
-
} else if (process.env.NODE_ENV !== 'production') {
|
358
|
+
} else if (process.env.NODE_ENV !== 'production' && !versions) {
|
329
359
|
(0, _validateExistingBlockIsIdentical.validateExistingBlockIsIdentical)({
|
330
360
|
block,
|
331
361
|
localized: field.localized,
|
332
362
|
rootTableName,
|
333
|
-
table: adapter.tables[blockTableName]
|
363
|
+
table: adapter.tables[blockTableName],
|
364
|
+
tableLocales: adapter.tables[`${blockTableName}${adapter.localesSuffix}`]
|
334
365
|
});
|
335
366
|
}
|
367
|
+
adapter.blockTableNames[`${rootTableName}.${(0, _tosnakecase.default)(block.slug)}`] = blockTableName;
|
336
368
|
rootRelationsToBuild.set(`_blocks_${block.slug}`, blockTableName);
|
337
369
|
});
|
338
370
|
break;
|
@@ -362,7 +394,8 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
362
394
|
relationships,
|
363
395
|
rootRelationsToBuild,
|
364
396
|
rootTableIDColType,
|
365
|
-
rootTableName
|
397
|
+
rootTableName,
|
398
|
+
versions
|
366
399
|
});
|
367
400
|
if (groupHasLocalizedField) hasLocalizedField = true;
|
368
401
|
if (groupHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
|
@@ -394,7 +427,8 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
394
427
|
relationships,
|
395
428
|
rootRelationsToBuild,
|
396
429
|
rootTableIDColType,
|
397
|
-
rootTableName
|
430
|
+
rootTableName,
|
431
|
+
versions
|
398
432
|
});
|
399
433
|
if (groupHasLocalizedField) hasLocalizedField = true;
|
400
434
|
if (groupHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
|
@@ -431,7 +465,8 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
431
465
|
relationships,
|
432
466
|
rootRelationsToBuild,
|
433
467
|
rootTableIDColType,
|
434
|
-
rootTableName
|
468
|
+
rootTableName,
|
469
|
+
versions
|
435
470
|
});
|
436
471
|
if (tabHasLocalizedField) hasLocalizedField = true;
|
437
472
|
if (tabHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
|
@@ -460,13 +495,14 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
460
495
|
indexes,
|
461
496
|
localesColumns,
|
462
497
|
localesIndexes,
|
463
|
-
newTableName
|
498
|
+
newTableName,
|
464
499
|
parentTableName,
|
465
500
|
relationsToBuild,
|
466
501
|
relationships,
|
467
502
|
rootRelationsToBuild,
|
468
503
|
rootTableIDColType,
|
469
|
-
rootTableName
|
504
|
+
rootTableName,
|
505
|
+
versions
|
470
506
|
});
|
471
507
|
if (rowHasLocalizedField) hasLocalizedField = true;
|
472
508
|
if (rowHasLocalizedRelationshipField) hasLocalizedRelationshipField = true;
|
@@ -505,4 +541,4 @@ const traverseFields = ({ adapter, buildNumbers, buildRelationships, buildTexts,
|
|
505
541
|
};
|
506
542
|
};
|
507
543
|
|
508
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvdHJhdmVyc2VGaWVsZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHsgSW5kZXhCdWlsZGVyLCBQZ0NvbHVtbkJ1aWxkZXIsIFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB0eXBlIHsgRmllbGQsIFRhYkFzRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyByZWxhdGlvbnMgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7XG4gIFBnTnVtZXJpY0J1aWxkZXIsXG4gIFBnVVVJREJ1aWxkZXIsXG4gIFBnVmFyY2hhckJ1aWxkZXIsXG4gIGJvb2xlYW4sXG4gIGluZGV4LFxuICBpbnRlZ2VyLFxuICBqc29uYixcbiAgbnVtZXJpYyxcbiAgcGdFbnVtLFxuICB0ZXh0LFxuICB0aW1lc3RhbXAsXG4gIHZhcmNoYXIsXG59IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgeyBJbnZhbGlkQ29uZmlndXJhdGlvbiB9IGZyb20gJ3BheWxvYWQvZXJyb3JzJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSwgb3B0aW9uSXNPYmplY3QgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY0NvbHVtbnMsIElEVHlwZSwgUG9zdGdyZXNBZGFwdGVyIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmltcG9ydCB7IGhhc0xvY2FsZXNUYWJsZSB9IGZyb20gJy4uL3V0aWxpdGllcy9oYXNMb2NhbGVzVGFibGUnXG5pbXBvcnQgeyBidWlsZFRhYmxlIH0gZnJvbSAnLi9idWlsZCdcbmltcG9ydCB7IGNyZWF0ZUluZGV4IH0gZnJvbSAnLi9jcmVhdGVJbmRleCdcbmltcG9ydCB7IGlkVG9VVUlEIH0gZnJvbSAnLi9pZFRvVVVJRCdcbmltcG9ydCB7IHBhcmVudElEQ29sdW1uTWFwIH0gZnJvbSAnLi9wYXJlbnRJRENvbHVtbk1hcCdcbmltcG9ydCB7IHZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsIH0gZnJvbSAnLi92YWxpZGF0ZUV4aXN0aW5nQmxvY2tJc0lkZW50aWNhbCdcblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgYnVpbGROdW1iZXJzOiBib29sZWFuXG4gIGJ1aWxkUmVsYXRpb25zaGlwczogYm9vbGVhblxuICBidWlsZFRleHRzOiBib29sZWFuXG4gIGNvbHVtblByZWZpeD86IHN0cmluZ1xuICBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+XG4gIGRpc2FibGVOb3ROdWxsOiBib29sZWFuXG4gIGRpc2FibGVVbmlxdWU/OiBib29sZWFuXG4gIGZpZWxkUHJlZml4Pzogc3RyaW5nXG4gIGZpZWxkczogKEZpZWxkIHwgVGFiQXNGaWVsZClbXVxuICBmb3JjZUxvY2FsaXplZD86IGJvb2xlYW5cbiAgaW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+XG4gIGxvY2FsZXNDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+XG4gIGxvY2FsZXNJbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlcj5cbiAgbmV3VGFibGVOYW1lOiBzdHJpbmdcbiAgcGFyZW50VGFibGVOYW1lOiBzdHJpbmdcbiAgcmVsYXRpb25zVG9CdWlsZDogTWFwPHN0cmluZywgc3RyaW5nPlxuICByZWxhdGlvbnNoaXBzOiBTZXQ8c3RyaW5nPlxuICByb290UmVsYXRpb25zVG9CdWlsZD86IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgcm9vdFRhYmxlSURDb2xUeXBlOiBzdHJpbmdcbiAgcm9vdFRhYmxlTmFtZTogc3RyaW5nXG59XG5cbnR5cGUgUmVzdWx0ID0ge1xuICBoYXNMb2NhbGl6ZWRGaWVsZDogYm9vbGVhblxuICBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQ6IGJvb2xlYW5cbiAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogYm9vbGVhblxuICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZDogYm9vbGVhblxuICBoYXNNYW55TnVtYmVyRmllbGQ6ICdpbmRleCcgfCBib29sZWFuXG4gIGhhc01hbnlUZXh0RmllbGQ6ICdpbmRleCcgfCBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCB0cmF2ZXJzZUZpZWxkcyA9ICh7XG4gIGFkYXB0ZXIsXG4gIGJ1aWxkTnVtYmVycyxcbiAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICBidWlsZFRleHRzLFxuICBjb2x1bW5QcmVmaXgsXG4gIGNvbHVtbnMsXG4gIGRpc2FibGVOb3ROdWxsLFxuICBkaXNhYmxlVW5pcXVlID0gZmFsc2UsXG4gIGZpZWxkUHJlZml4LFxuICBmaWVsZHMsXG4gIGZvcmNlTG9jYWxpemVkLFxuICBpbmRleGVzLFxuICBsb2NhbGVzQ29sdW1ucyxcbiAgbG9jYWxlc0luZGV4ZXMsXG4gIG5ld1RhYmxlTmFtZSxcbiAgcGFyZW50VGFibGVOYW1lLFxuICByZWxhdGlvbnNUb0J1aWxkLFxuICByZWxhdGlvbnNoaXBzLFxuICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICByb290VGFibGVOYW1lLFxufTogQXJncyk6IFJlc3VsdCA9PiB7XG4gIGxldCBoYXNMb2NhbGl6ZWRGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNNYW55VGV4dEZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhbiA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gZmFsc2VcbiAgbGV0IGhhc01hbnlOdW1iZXJGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gZmFsc2VcblxuICBsZXQgcGFyZW50SURDb2xUeXBlOiBJRFR5cGUgPSAnaW50ZWdlcidcbiAgaWYgKGNvbHVtbnMuaWQgaW5zdGFuY2VvZiBQZ1VVSURCdWlsZGVyKSBwYXJlbnRJRENvbFR5cGUgPSAndXVpZCdcbiAgaWYgKGNvbHVtbnMuaWQgaW5zdGFuY2VvZiBQZ051bWVyaWNCdWlsZGVyKSBwYXJlbnRJRENvbFR5cGUgPSAnbnVtZXJpYydcbiAgaWYgKGNvbHVtbnMuaWQgaW5zdGFuY2VvZiBQZ1ZhcmNoYXJCdWlsZGVyKSBwYXJlbnRJRENvbFR5cGUgPSAndmFyY2hhcidcblxuICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICBpZiAoJ25hbWUnIGluIGZpZWxkICYmIGZpZWxkLm5hbWUgPT09ICdpZCcpIHJldHVyblxuICAgIGxldCBjb2x1bW5OYW1lOiBzdHJpbmdcbiAgICBsZXQgZmllbGROYW1lOiBzdHJpbmdcblxuICAgIGxldCB0YXJnZXRUYWJsZSA9IGNvbHVtbnNcbiAgICBsZXQgdGFyZ2V0SW5kZXhlcyA9IGluZGV4ZXNcblxuICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSkge1xuICAgICAgY29sdW1uTmFtZSA9IGAke2NvbHVtblByZWZpeCB8fCAnJ30ke2ZpZWxkLm5hbWVbMF0gPT09ICdfJyA/ICdfJyA6ICcnfSR7dG9TbmFrZUNhc2UoXG4gICAgICAgIGZpZWxkLm5hbWUsXG4gICAgICApfWBcbiAgICAgIGZpZWxkTmFtZSA9IGAke2ZpZWxkUHJlZml4Py5yZXBsYWNlKCcuJywgJ18nKSB8fCAnJ30ke2ZpZWxkLm5hbWV9YFxuXG4gICAgICAvLyBJZiBmaWVsZCBpcyBsb2NhbGl6ZWQsXG4gICAgICAvLyBhZGQgdGhlIGNvbHVtbiB0byB0aGUgbG9jYWxlIHRhYmxlIGluc3RlYWQgb2YgbWFpbiB0YWJsZVxuICAgICAgaWYgKGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uICYmIChmaWVsZC5sb2NhbGl6ZWQgfHwgZm9yY2VMb2NhbGl6ZWQpKSB7XG4gICAgICAgIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICB0YXJnZXRUYWJsZSA9IGxvY2FsZXNDb2x1bW5zXG4gICAgICAgIHRhcmdldEluZGV4ZXMgPSBsb2NhbGVzSW5kZXhlc1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIChmaWVsZC51bmlxdWUgfHwgZmllbGQuaW5kZXgpICYmXG4gICAgICAgICFbJ2FycmF5JywgJ2Jsb2NrcycsICdncm91cCcsICdwb2ludCcsICdyZWxhdGlvbnNoaXAnLCAndXBsb2FkJ10uaW5jbHVkZXMoZmllbGQudHlwZSkgJiZcbiAgICAgICAgISgnaGFzTWFueScgaW4gZmllbGQgJiYgZmllbGQuaGFzTWFueSA9PT0gdHJ1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCB1bmlxdWUgPSBkaXNhYmxlVW5pcXVlICE9PSB0cnVlICYmIGZpZWxkLnVuaXF1ZVxuICAgICAgICBpZiAodW5pcXVlKSB7XG4gICAgICAgICAgY29uc3QgY29uc3RyYWludFZhbHVlID0gYCR7ZmllbGRQcmVmaXggfHwgJyd9JHtmaWVsZC5uYW1lfWBcbiAgICAgICAgICBpZiAoIWFkYXB0ZXIuZmllbGRDb25zdHJhaW50cz8uW3Jvb3RUYWJsZU5hbWVdKSB7XG4gICAgICAgICAgICBhZGFwdGVyLmZpZWxkQ29uc3RyYWludHNbcm9vdFRhYmxlTmFtZV0gPSB7fVxuICAgICAgICAgIH1cbiAgICAgICAgICBhZGFwdGVyLmZpZWxkQ29uc3RyYWludHNbcm9vdFRhYmxlTmFtZV1bYCR7Y29sdW1uTmFtZX1faWR4YF0gPSBjb25zdHJhaW50VmFsdWVcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRJbmRleGVzW2Ake25ld1RhYmxlTmFtZX1fJHtmaWVsZC5uYW1lfUlkeGBdID0gY3JlYXRlSW5kZXgoe1xuICAgICAgICAgIG5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHVuaXF1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RleHQnOiB7XG4gICAgICAgIGlmIChmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCkge1xuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuaW5kZXgpIHtcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQgPSAnaW5kZXgnXG4gICAgICAgICAgfSBlbHNlIGlmICghaGFzTWFueVRleHRGaWVsZCkge1xuICAgICAgICAgICAgaGFzTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQudW5pcXVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICdVbmlxdWUgaXMgbm90IHN1cHBvcnRlZCBpbiBQb3N0Z3JlcyBmb3IgaGFzTWFueSB0ZXh0IGZpZWxkcy4nLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0gdmFyY2hhcihjb2x1bW5OYW1lKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdlbWFpbCc6XG4gICAgICBjYXNlICdjb2RlJzpcbiAgICAgIGNhc2UgJ3RleHRhcmVhJzoge1xuICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0gdmFyY2hhcihjb2x1bW5OYW1lKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdudW1iZXInOiB7XG4gICAgICAgIGlmIChmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCkge1xuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5pbmRleCkge1xuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkID0gJ2luZGV4J1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC51bmlxdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQ29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgJ1VuaXF1ZSBpcyBub3Qgc3VwcG9ydGVkIGluIFBvc3RncmVzIGZvciBoYXNNYW55IG51bWJlciBmaWVsZHMuJyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IG51bWVyaWMoY29sdW1uTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyaWNoVGV4dCc6XG4gICAgICBjYXNlICdqc29uJzoge1xuICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0ganNvbmIoY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnZGF0ZSc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IHRpbWVzdGFtcChjb2x1bW5OYW1lLCB7XG4gICAgICAgICAgbW9kZTogJ3N0cmluZycsXG4gICAgICAgICAgcHJlY2lzaW9uOiAzLFxuICAgICAgICAgIHdpdGhUaW1lem9uZTogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncG9pbnQnOiB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgIGNhc2UgJ3NlbGVjdCc6IHtcbiAgICAgICAgY29uc3QgZW51bU5hbWUgPSBgZW51bV8ke25ld1RhYmxlTmFtZX1fJHt0b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1gXG5cbiAgICAgICAgYWRhcHRlci5lbnVtc1tlbnVtTmFtZV0gPSBwZ0VudW0oXG4gICAgICAgICAgZW51bU5hbWUsXG4gICAgICAgICAgZmllbGQub3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbklzT2JqZWN0KG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfSkgYXMgW3N0cmluZywgLi4uc3RyaW5nW11dLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWxlY3QnICYmIGZpZWxkLmhhc01hbnkpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZU5hbWUgPSBgJHtuZXdUYWJsZU5hbWV9XyR7dG9TbmFrZUNhc2UoZmllbGQubmFtZSl9YFxuICAgICAgICAgIGNvbnN0IGJhc2VDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0ge1xuICAgICAgICAgICAgb3JkZXI6IGludGVnZXIoJ29yZGVyJykubm90TnVsbCgpLFxuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRJRENvbHVtbk1hcFtwYXJlbnRJRENvbFR5cGVdKCdwYXJlbnRfaWQnKVxuICAgICAgICAgICAgICAucmVmZXJlbmNlcygoKSA9PiBhZGFwdGVyLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgICAgICAgIHZhbHVlOiBhZGFwdGVyLmVudW1zW2VudW1OYW1lXSgndmFsdWUnKSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBiYXNlRXh0cmFDb25maWc6IFJlY29yZDxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXJcbiAgICAgICAgICA+ID0ge1xuICAgICAgICAgICAgb3JkZXJJZHg6IChjb2xzKSA9PiBpbmRleChgJHtzZWxlY3RUYWJsZU5hbWV9X29yZGVyX2lkeGApLm9uKGNvbHMub3JkZXIpLFxuICAgICAgICAgICAgcGFyZW50SWR4OiAoY29scykgPT4gaW5kZXgoYCR7c2VsZWN0VGFibGVOYW1lfV9wYXJlbnRfaWR4YCkub24oY29scy5wYXJlbnQpLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGJhc2VDb2x1bW5zLmxvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnbG9jYWxlJykubm90TnVsbCgpXG4gICAgICAgICAgICBiYXNlRXh0cmFDb25maWcubG9jYWxlSWR4ID0gKGNvbHMpID0+XG4gICAgICAgICAgICAgIGluZGV4KGAke3NlbGVjdFRhYmxlTmFtZX1fbG9jYWxlX2lkeGApLm9uKGNvbHMubG9jYWxlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5pbmRleCkge1xuICAgICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLnZhbHVlID0gKGNvbHMpID0+IGluZGV4KGAke3NlbGVjdFRhYmxlTmFtZX1fdmFsdWVfaWR4YCkub24oY29scy52YWx1ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidWlsZFRhYmxlKHtcbiAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZyxcbiAgICAgICAgICAgIGRpc2FibGVOb3ROdWxsLFxuICAgICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICAgIGZpZWxkczogW10sXG4gICAgICAgICAgICB0YWJsZU5hbWU6IHNlbGVjdFRhYmxlTmFtZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmVsYXRpb25zVG9CdWlsZC5zZXQoZmllbGROYW1lLCBzZWxlY3RUYWJsZU5hbWUpXG5cbiAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhhZGFwdGVyLnRhYmxlc1tzZWxlY3RUYWJsZU5hbWVdLCAoeyBvbmUgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgICAgcGFyZW50OiBvbmUoYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICAgIGZpZWxkczogW2FkYXB0ZXIudGFibGVzW3NlbGVjdFRhYmxlTmFtZV0ucGFyZW50XSxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZF0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbl8ke3NlbGVjdFRhYmxlTmFtZX1gXSA9IHNlbGVjdFRhYmxlUmVsYXRpb25zXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGFkYXB0ZXIuZW51bXNbZW51bU5hbWVdKGZpZWxkTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdjaGVja2JveCc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGJvb2xlYW4oY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgY29uc3QgYXJyYXlUYWJsZU5hbWUgPSBgJHtuZXdUYWJsZU5hbWV9XyR7dG9TbmFrZUNhc2UoZmllbGQubmFtZSl9YFxuICAgICAgICBjb25zdCBiYXNlQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgICBfb3JkZXI6IGludGVnZXIoJ19vcmRlcicpLm5vdE51bGwoKSxcbiAgICAgICAgICBfcGFyZW50SUQ6IHBhcmVudElEQ29sdW1uTWFwW3BhcmVudElEQ29sVHlwZV0oJ19wYXJlbnRfaWQnKVxuICAgICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAgICAgICAubm90TnVsbCgpLFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFzZUV4dHJhQ29uZmlnOiBSZWNvcmQ8XG4gICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXJcbiAgICAgICAgPiA9IHtcbiAgICAgICAgICBfb3JkZXJJZHg6IChjb2xzKSA9PiBpbmRleChgJHthcnJheVRhYmxlTmFtZX1fb3JkZXJfaWR4YCkub24oY29scy5fb3JkZXIpLFxuICAgICAgICAgIF9wYXJlbnRJRElkeDogKGNvbHMpID0+IGluZGV4KGAke2FycmF5VGFibGVOYW1lfV9wYXJlbnRfaWRfaWR4YCkub24oY29scy5fcGFyZW50SUQpLFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIGJhc2VDb2x1bW5zLl9sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ19sb2NhbGUnKS5ub3ROdWxsKClcbiAgICAgICAgICBiYXNlRXh0cmFDb25maWcuX2xvY2FsZUlkeCA9IChjb2xzKSA9PlxuICAgICAgICAgICAgaW5kZXgoYCR7YXJyYXlUYWJsZU5hbWV9X2xvY2FsZV9pZHhgKS5vbihjb2xzLl9sb2NhbGUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBzdWJIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogc3ViSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkOiBzdWJSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICB9ID0gYnVpbGRUYWJsZSh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICBiYXNlRXh0cmFDb25maWcsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZHM6IGRpc2FibGVVbmlxdWUgPyBpZFRvVVVJRChmaWVsZC5maWVsZHMpIDogZmllbGQuZmllbGRzLFxuICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJvb3RSZWxhdGlvbnNoaXBzOiByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIHJvb3RUYWJsZUlEQ29sVHlwZSxcbiAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZTogYXJyYXlUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHN1Ykhhc01hbnlUZXh0RmllbGQpIHtcbiAgICAgICAgICBpZiAoIWhhc01hbnlUZXh0RmllbGQgfHwgc3ViSGFzTWFueVRleHRGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQgPSBzdWJIYXNNYW55VGV4dEZpZWxkXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN1Ykhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgICAgIGlmICghaGFzTWFueU51bWJlckZpZWxkIHx8IHN1Ykhhc01hbnlOdW1iZXJGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9IHN1Ykhhc01hbnlOdW1iZXJGaWVsZFxuICAgICAgICB9XG5cbiAgICAgICAgcmVsYXRpb25zVG9CdWlsZC5zZXQoZmllbGROYW1lLCBhcnJheVRhYmxlTmFtZSlcblxuICAgICAgICBjb25zdCBhcnJheVRhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKGFkYXB0ZXIudGFibGVzW2FycmF5VGFibGVOYW1lXSwgKHsgbWFueSwgb25lIH0pID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlbGF0aW9uPHN0cmluZz4+ID0ge1xuICAgICAgICAgICAgX3BhcmVudElEOiBvbmUoYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICBmaWVsZHM6IFthZGFwdGVyLnRhYmxlc1thcnJheVRhYmxlTmFtZV0uX3BhcmVudElEXSxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlczogW2FkYXB0ZXIudGFibGVzW3BhcmVudFRhYmxlTmFtZV0uaWRdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGhhc0xvY2FsZXNUYWJsZShmaWVsZC5maWVsZHMpKSB7XG4gICAgICAgICAgICByZXN1bHQuX2xvY2FsZXMgPSBtYW55KGFkYXB0ZXIudGFibGVzW2Ake2FycmF5VGFibGVOYW1lfV9sb2NhbGVzYF0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3ViUmVsYXRpb25zVG9CdWlsZC5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBtYW55KGFkYXB0ZXIudGFibGVzW3ZhbF0pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSlcblxuICAgICAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7YXJyYXlUYWJsZU5hbWV9YF0gPSBhcnJheVRhYmxlUmVsYXRpb25zXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYmxvY2tzJzoge1xuICAgICAgICBjb25zdCBkaXNhYmxlTm90TnVsbEZyb21IZXJlID0gQm9vbGVhbihmaWVsZC5hZG1pbj8uY29uZGl0aW9uKSB8fCBkaXNhYmxlTm90TnVsbFxuXG4gICAgICAgIGZpZWxkLmJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgICAgICAgIGNvbnN0IGJsb2NrVGFibGVOYW1lID0gYCR7cm9vdFRhYmxlTmFtZX1fYmxvY2tzXyR7dG9TbmFrZUNhc2UoYmxvY2suc2x1Zyl9YFxuICAgICAgICAgIGlmICghYWRhcHRlci50YWJsZXNbYmxvY2tUYWJsZU5hbWVdKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgICAgICAgX29yZGVyOiBpbnRlZ2VyKCdfb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICAgICAgICAgIF9wYXJlbnRJRDogcGFyZW50SURDb2x1bW5NYXBbcm9vdFRhYmxlSURDb2xUeXBlXSgnX3BhcmVudF9pZCcpXG4gICAgICAgICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0uaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAgICAgICAgIC5ub3ROdWxsKCksXG4gICAgICAgICAgICAgIF9wYXRoOiB0ZXh0KCdfcGF0aCcpLm5vdE51bGwoKSxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmFzZUV4dHJhQ29uZmlnOiBSZWNvcmQ8XG4gICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXIgfCBVbmlxdWVDb25zdHJhaW50QnVpbGRlclxuICAgICAgICAgICAgPiA9IHtcbiAgICAgICAgICAgICAgX29yZGVySWR4OiAoY29scykgPT4gaW5kZXgoYCR7YmxvY2tUYWJsZU5hbWV9X29yZGVyX2lkeGApLm9uKGNvbHMuX29yZGVyKSxcbiAgICAgICAgICAgICAgX3BhcmVudElESWR4OiAoY29scykgPT4gaW5kZXgoYCR7YmxvY2tUYWJsZU5hbWV9X3BhcmVudF9pZF9pZHhgKS5vbihjb2xzLl9wYXJlbnRJRCksXG4gICAgICAgICAgICAgIF9wYXRoSWR4OiAoY29scykgPT4gaW5kZXgoYCR7YmxvY2tUYWJsZU5hbWV9X3BhdGhfaWR4YCkub24oY29scy5fcGF0aCksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICAgICAgYmFzZUNvbHVtbnMuX2xvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnX2xvY2FsZScpLm5vdE51bGwoKVxuICAgICAgICAgICAgICBiYXNlRXh0cmFDb25maWcuX2xvY2FsZUlkeCA9IChjb2xzKSA9PlxuICAgICAgICAgICAgICAgIGluZGV4KGAke2Jsb2NrVGFibGVOYW1lfV9sb2NhbGVfaWR4YCkub24oY29scy5fbG9jYWxlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogc3ViSGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkOiBzdWJIYXNNYW55VGV4dEZpZWxkLFxuICAgICAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkOiBzdWJSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgfSA9IGJ1aWxkVGFibGUoe1xuICAgICAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLFxuICAgICAgICAgICAgICBkaXNhYmxlTm90TnVsbDogZGlzYWJsZU5vdE51bGxGcm9tSGVyZSxcbiAgICAgICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICAgICAgZmllbGRzOiBkaXNhYmxlVW5pcXVlID8gaWRUb1VVSUQoYmxvY2suZmllbGRzKSA6IGJsb2NrLmZpZWxkcyxcbiAgICAgICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgICAgIHJvb3RSZWxhdGlvbnNoaXBzOiByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICAgIHRhYmxlTmFtZTogYmxvY2tUYWJsZU5hbWUsXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZiAoc3ViSGFzTWFueVRleHRGaWVsZCkge1xuICAgICAgICAgICAgICBpZiAoIWhhc01hbnlUZXh0RmllbGQgfHwgc3ViSGFzTWFueVRleHRGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkID0gc3ViSGFzTWFueVRleHRGaWVsZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3ViSGFzTWFueU51bWJlckZpZWxkKSB7XG4gICAgICAgICAgICAgIGlmICghaGFzTWFueU51bWJlckZpZWxkIHx8IHN1Ykhhc01hbnlOdW1iZXJGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgICAgICBoYXNNYW55TnVtYmVyRmllbGQgPSBzdWJIYXNNYW55TnVtYmVyRmllbGRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmxvY2tUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhcbiAgICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbYmxvY2tUYWJsZU5hbWVdLFxuICAgICAgICAgICAgICAoeyBtYW55LCBvbmUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVsYXRpb248c3RyaW5nPj4gPSB7XG4gICAgICAgICAgICAgICAgICBfcGFyZW50SUQ6IG9uZShhZGFwdGVyLnRhYmxlc1tyb290VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHM6IFthZGFwdGVyLnRhYmxlc1tibG9ja1RhYmxlTmFtZV0uX3BhcmVudElEXSxcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlczogW2FkYXB0ZXIudGFibGVzW3Jvb3RUYWJsZU5hbWVdLmlkXSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChoYXNMb2NhbGVzVGFibGUoYmxvY2suZmllbGRzKSkge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0Ll9sb2NhbGVzID0gbWFueShhZGFwdGVyLnRhYmxlc1tgJHtibG9ja1RhYmxlTmFtZX1fbG9jYWxlc2BdKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN1YlJlbGF0aW9uc1RvQnVpbGQuZm9yRWFjaCgodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gbWFueShhZGFwdGVyLnRhYmxlc1t2YWxdKVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHtibG9ja1RhYmxlTmFtZX1gXSA9IGJsb2NrVGFibGVSZWxhdGlvbnNcbiAgICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsKHtcbiAgICAgICAgICAgICAgYmxvY2ssXG4gICAgICAgICAgICAgIGxvY2FsaXplZDogZmllbGQubG9jYWxpemVkLFxuICAgICAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbYmxvY2tUYWJsZU5hbWVdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZC5zZXQoYF9ibG9ja3NfJHtibG9jay5zbHVnfWAsIGJsb2NrVGFibGVOYW1lKVxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3RhYic6XG4gICAgICBjYXNlICdncm91cCc6IHtcbiAgICAgICAgaWYgKCEoJ25hbWUnIGluIGZpZWxkKSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZEZpZWxkOiBncm91cEhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiBncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCxcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiBncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBncm91cEhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IGdyb3VwSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGJ1aWxkTnVtYmVycyxcbiAgICAgICAgICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgZGlzYWJsZU5vdE51bGwsXG4gICAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgICAgZmllbGRQcmVmaXgsXG4gICAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkRmllbGQpIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgICBpZiAoZ3JvdXBIYXNNYW55VGV4dEZpZWxkKSBoYXNNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhhc0xvY2FsaXplZEZpZWxkOiBncm91cEhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogZ3JvdXBIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiBncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogZ3JvdXBIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogZ3JvdXBIYXNNYW55VGV4dEZpZWxkLFxuICAgICAgICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYnVpbGROdW1iZXJzLFxuICAgICAgICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICAgICAgICBidWlsZFRleHRzLFxuICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uTmFtZX1fYCxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGRpc2FibGVOb3ROdWxsOiBkaXNhYmxlTm90TnVsbEZyb21IZXJlLFxuICAgICAgICAgIGRpc2FibGVVbmlxdWUsXG4gICAgICAgICAgZmllbGRQcmVmaXg6IGAke2ZpZWxkTmFtZX0uYCxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZUxvY2FsaXplZDogZmllbGQubG9jYWxpemVkLFxuICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgbmV3VGFibGVOYW1lOiBgJHtwYXJlbnRUYWJsZU5hbWV9XyR7Y29sdW1uTmFtZX1gLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkRmllbGQpIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCkgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc01hbnlOdW1iZXJGaWVsZCkgaGFzTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAndGFicyc6IHtcbiAgICAgICAgY29uc3QgZGlzYWJsZU5vdE51bGxGcm9tSGVyZSA9IEJvb2xlYW4oZmllbGQuYWRtaW4/LmNvbmRpdGlvbikgfHwgZGlzYWJsZU5vdE51bGxcblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkRmllbGQ6IHRhYkhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogdGFiSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IHRhYkhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IHRhYkhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogdGFiSGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IHRhYkhhc01hbnlUZXh0RmllbGQsXG4gICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBidWlsZE51bWJlcnMsXG4gICAgICAgICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgY29sdW1uUHJlZml4LFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZFByZWZpeCxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLnRhYnMubWFwKCh0YWIpID0+ICh7IC4uLnRhYiwgdHlwZTogJ3RhYicgfSkpLFxuICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmICh0YWJIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAodGFiSGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGlmICh0YWJIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncm93JzpcbiAgICAgIGNhc2UgJ2NvbGxhcHNpYmxlJzoge1xuICAgICAgICBjb25zdCBkaXNhYmxlTm90TnVsbEZyb21IZXJlID0gQm9vbGVhbihmaWVsZC5hZG1pbj8uY29uZGl0aW9uKSB8fCBkaXNhYmxlTm90TnVsbFxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkRmllbGQ6IHJvd0hhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogcm93SGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IHJvd0hhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IHJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogcm93SGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IHJvd0hhc01hbnlUZXh0RmllbGQsXG4gICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBidWlsZE51bWJlcnMsXG4gICAgICAgICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgY29sdW1uUHJlZml4LFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZFByZWZpeCxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZUxvY2FsaXplZCxcbiAgICAgICAgICBpbmRleGVzLFxuICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgIGxvY2FsZXNJbmRleGVzLFxuICAgICAgICAgIG5ld1RhYmxlTmFtZTogcGFyZW50VGFibGVOYW1lLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChyb3dIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAocm93SGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChyb3dIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIGNhc2UgJ3VwbG9hZCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pKSB7XG4gICAgICAgICAgZmllbGQucmVsYXRpb25Uby5mb3JFYWNoKChyZWxhdGlvbikgPT4gcmVsYXRpb25zaGlwcy5hZGQocmVsYXRpb24pKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbGF0aW9uc2hpcHMuYWRkKGZpZWxkLnJlbGF0aW9uVG8pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBmaWVsZC5hZG1pbiAmJiBmaWVsZC5hZG1pbi5jb25kaXRpb25cblxuICAgIGlmIChcbiAgICAgICFkaXNhYmxlTm90TnVsbCAmJlxuICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSAmJlxuICAgICAgJ3JlcXVpcmVkJyBpbiBmaWVsZCAmJlxuICAgICAgZmllbGQucmVxdWlyZWQgJiZcbiAgICAgICFjb25kaXRpb25cbiAgICApIHtcbiAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0ubm90TnVsbCgpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgaGFzTG9jYWxpemVkRmllbGQsXG4gICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgaGFzTWFueU51bWJlckZpZWxkLFxuICAgIGhhc01hbnlUZXh0RmllbGQsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJ0cmF2ZXJzZUZpZWxkcyIsImFkYXB0ZXIiLCJidWlsZE51bWJlcnMiLCJidWlsZFJlbGF0aW9uc2hpcHMiLCJidWlsZFRleHRzIiwiY29sdW1uUHJlZml4IiwiY29sdW1ucyIsImRpc2FibGVOb3ROdWxsIiwiZGlzYWJsZVVuaXF1ZSIsImZpZWxkUHJlZml4IiwiZmllbGRzIiwiZm9yY2VMb2NhbGl6ZWQiLCJpbmRleGVzIiwibG9jYWxlc0NvbHVtbnMiLCJsb2NhbGVzSW5kZXhlcyIsIm5ld1RhYmxlTmFtZSIsInBhcmVudFRhYmxlTmFtZSIsInJlbGF0aW9uc1RvQnVpbGQiLCJyZWxhdGlvbnNoaXBzIiwicm9vdFJlbGF0aW9uc1RvQnVpbGQiLCJyb290VGFibGVJRENvbFR5cGUiLCJyb290VGFibGVOYW1lIiwiaGFzTG9jYWxpemVkRmllbGQiLCJoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsImhhc01hbnlUZXh0RmllbGQiLCJoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkIiwiaGFzTWFueU51bWJlckZpZWxkIiwiaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwicGFyZW50SURDb2xUeXBlIiwiaWQiLCJQZ1VVSURCdWlsZGVyIiwiUGdOdW1lcmljQnVpbGRlciIsIlBnVmFyY2hhckJ1aWxkZXIiLCJmb3JFYWNoIiwiZmllbGQiLCJuYW1lIiwiY29sdW1uTmFtZSIsImZpZWxkTmFtZSIsInRhcmdldFRhYmxlIiwidGFyZ2V0SW5kZXhlcyIsImZpZWxkQWZmZWN0c0RhdGEiLCJ0b1NuYWtlQ2FzZSIsInJlcGxhY2UiLCJwYXlsb2FkIiwiY29uZmlnIiwibG9jYWxpemF0aW9uIiwibG9jYWxpemVkIiwidW5pcXVlIiwiaW5kZXgiLCJpbmNsdWRlcyIsInR5cGUiLCJoYXNNYW55IiwiY29uc3RyYWludFZhbHVlIiwiZmllbGRDb25zdHJhaW50cyIsImNyZWF0ZUluZGV4IiwidGFibGVOYW1lIiwiSW52YWxpZENvbmZpZ3VyYXRpb24iLCJ2YXJjaGFyIiwibnVtZXJpYyIsImpzb25iIiwidGltZXN0YW1wIiwibW9kZSIsInByZWNpc2lvbiIsIndpdGhUaW1lem9uZSIsImVudW1OYW1lIiwiZW51bXMiLCJwZ0VudW0iLCJvcHRpb25zIiwibWFwIiwib3B0aW9uIiwib3B0aW9uSXNPYmplY3QiLCJ2YWx1ZSIsInNlbGVjdFRhYmxlTmFtZSIsImJhc2VDb2x1bW5zIiwib3JkZXIiLCJpbnRlZ2VyIiwibm90TnVsbCIsInBhcmVudCIsInBhcmVudElEQ29sdW1uTWFwIiwicmVmZXJlbmNlcyIsInRhYmxlcyIsIm9uRGVsZXRlIiwiYmFzZUV4dHJhQ29uZmlnIiwib3JkZXJJZHgiLCJjb2xzIiwib24iLCJwYXJlbnRJZHgiLCJsb2NhbGUiLCJlbnVtX19sb2NhbGVzIiwibG9jYWxlSWR4IiwiYnVpbGRUYWJsZSIsInNldCIsInNlbGVjdFRhYmxlUmVsYXRpb25zIiwicmVsYXRpb25zIiwib25lIiwicmVzdWx0IiwiYm9vbGVhbiIsImRpc2FibGVOb3ROdWxsRnJvbUhlcmUiLCJCb29sZWFuIiwiYWRtaW4iLCJjb25kaXRpb24iLCJhcnJheVRhYmxlTmFtZSIsIl9vcmRlciIsIl9wYXJlbnRJRCIsIl9vcmRlcklkeCIsIl9wYXJlbnRJRElkeCIsIl9sb2NhbGUiLCJfbG9jYWxlSWR4Iiwic3ViSGFzTWFueU51bWJlckZpZWxkIiwic3ViSGFzTWFueVRleHRGaWVsZCIsInN1YlJlbGF0aW9uc1RvQnVpbGQiLCJpZFRvVVVJRCIsInJvb3RSZWxhdGlvbnNoaXBzIiwiYXJyYXlUYWJsZVJlbGF0aW9ucyIsIm1hbnkiLCJoYXNMb2NhbGVzVGFibGUiLCJfbG9jYWxlcyIsInZhbCIsImtleSIsImJsb2NrcyIsImJsb2NrIiwiYmxvY2tUYWJsZU5hbWUiLCJzbHVnIiwiX3BhdGgiLCJ0ZXh0IiwiX3BhdGhJZHgiLCJibG9ja1RhYmxlUmVsYXRpb25zIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwidmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwiLCJ0YWJsZSIsImdyb3VwSGFzTG9jYWxpemVkRmllbGQiLCJncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsImdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsImdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQiLCJncm91cEhhc01hbnlOdW1iZXJGaWVsZCIsImdyb3VwSGFzTWFueVRleHRGaWVsZCIsInRhYkhhc0xvY2FsaXplZEZpZWxkIiwidGFiSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwidGFiSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsInRhYkhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkIiwidGFiSGFzTWFueU51bWJlckZpZWxkIiwidGFiSGFzTWFueVRleHRGaWVsZCIsInRhYnMiLCJ0YWIiLCJyb3dIYXNMb2NhbGl6ZWRGaWVsZCIsInJvd0hhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsInJvd0hhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQiLCJyb3dIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsInJvd0hhc01hbnlOdW1iZXJGaWVsZCIsInJvd0hhc01hbnlUZXh0RmllbGQiLCJBcnJheSIsImlzQXJyYXkiLCJyZWxhdGlvblRvIiwicmVsYXRpb24iLCJhZGQiLCJyZXF1aXJlZCJdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DOzs7OytCQWtFdkJBOzs7ZUFBQUE7Ozs0QkE3RGE7d0JBY25CO3dCQUM4Qjt1QkFDWTtvRUFDekI7aUNBSVE7dUJBQ0w7NkJBQ0M7MEJBQ0g7bUNBQ1M7a0RBQ2U7Ozs7OztBQW1DMUMsTUFBTUEsaUJBQWlCLENBQUMsRUFDN0JDLE9BQU8sRUFDUEMsWUFBWSxFQUNaQyxrQkFBa0IsRUFDbEJDLFVBQVUsRUFDVkMsWUFBWSxFQUNaQyxPQUFPLEVBQ1BDLGNBQWMsRUFDZEMsZ0JBQWdCLEtBQUssRUFDckJDLFdBQVcsRUFDWEMsTUFBTSxFQUNOQyxjQUFjLEVBQ2RDLE9BQU8sRUFDUEMsY0FBYyxFQUNkQyxjQUFjLEVBQ2RDLFlBQVksRUFDWkMsZUFBZSxFQUNmQyxnQkFBZ0IsRUFDaEJDLGFBQWEsRUFDYkMsb0JBQW9CLEVB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
|
544
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvdHJhdmVyc2VGaWVsZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHsgSW5kZXhCdWlsZGVyLCBQZ0NvbHVtbkJ1aWxkZXIsIFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB0eXBlIHsgRmllbGQsIFRhYkFzRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyByZWxhdGlvbnMgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7XG4gIFBnTnVtZXJpY0J1aWxkZXIsXG4gIFBnVVVJREJ1aWxkZXIsXG4gIFBnVmFyY2hhckJ1aWxkZXIsXG4gIGJvb2xlYW4sXG4gIGluZGV4LFxuICBpbnRlZ2VyLFxuICBqc29uYixcbiAgbnVtZXJpYyxcbiAgcGdFbnVtLFxuICB0ZXh0LFxuICB0aW1lc3RhbXAsXG4gIHZhcmNoYXIsXG59IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgeyBJbnZhbGlkQ29uZmlndXJhdGlvbiB9IGZyb20gJ3BheWxvYWQvZXJyb3JzJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSwgb3B0aW9uSXNPYmplY3QgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY0NvbHVtbnMsIElEVHlwZSwgUG9zdGdyZXNBZGFwdGVyIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmltcG9ydCB7IGhhc0xvY2FsZXNUYWJsZSB9IGZyb20gJy4uL3V0aWxpdGllcy9oYXNMb2NhbGVzVGFibGUnXG5pbXBvcnQgeyBidWlsZFRhYmxlIH0gZnJvbSAnLi9idWlsZCdcbmltcG9ydCB7IGNyZWF0ZUluZGV4IH0gZnJvbSAnLi9jcmVhdGVJbmRleCdcbmltcG9ydCB7IGdldFRhYmxlTmFtZSB9IGZyb20gJy4vZ2V0VGFibGVOYW1lJ1xuaW1wb3J0IHsgaWRUb1VVSUQgfSBmcm9tICcuL2lkVG9VVUlEJ1xuaW1wb3J0IHsgcGFyZW50SURDb2x1bW5NYXAgfSBmcm9tICcuL3BhcmVudElEQ29sdW1uTWFwJ1xuaW1wb3J0IHsgdmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwgfSBmcm9tICcuL3ZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsJ1xuXG50eXBlIEFyZ3MgPSB7XG4gIGFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlclxuICBidWlsZE51bWJlcnM6IGJvb2xlYW5cbiAgYnVpbGRSZWxhdGlvbnNoaXBzOiBib29sZWFuXG4gIGJ1aWxkVGV4dHM6IGJvb2xlYW5cbiAgY29sdW1uUHJlZml4Pzogc3RyaW5nXG4gIGNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj5cbiAgZGlzYWJsZU5vdE51bGw6IGJvb2xlYW5cbiAgZGlzYWJsZVVuaXF1ZT86IGJvb2xlYW5cbiAgZmllbGRQcmVmaXg/OiBzdHJpbmdcbiAgZmllbGRzOiAoRmllbGQgfCBUYWJBc0ZpZWxkKVtdXG4gIGZvcmNlTG9jYWxpemVkPzogYm9vbGVhblxuICBpbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlcj5cbiAgbG9jYWxlc0NvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj5cbiAgbG9jYWxlc0luZGV4ZXM6IFJlY29yZDxzdHJpbmcsIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyPlxuICBuZXdUYWJsZU5hbWU6IHN0cmluZ1xuICBwYXJlbnRUYWJsZU5hbWU6IHN0cmluZ1xuICByZWxhdGlvbnNUb0J1aWxkOiBNYXA8c3RyaW5nLCBzdHJpbmc+XG4gIHJlbGF0aW9uc2hpcHM6IFNldDxzdHJpbmc+XG4gIHJvb3RSZWxhdGlvbnNUb0J1aWxkPzogTWFwPHN0cmluZywgc3RyaW5nPlxuICByb290VGFibGVJRENvbFR5cGU6IHN0cmluZ1xuICByb290VGFibGVOYW1lOiBzdHJpbmdcbiAgdmVyc2lvbnM6IGJvb2xlYW5cbn1cblxudHlwZSBSZXN1bHQgPSB7XG4gIGhhc0xvY2FsaXplZEZpZWxkOiBib29sZWFuXG4gIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogYm9vbGVhblxuICBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkOiBib29sZWFuXG4gIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiBib29sZWFuXG4gIGhhc01hbnlOdW1iZXJGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW5cbiAgaGFzTWFueVRleHRGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IHRyYXZlcnNlRmllbGRzID0gKHtcbiAgYWRhcHRlcixcbiAgYnVpbGROdW1iZXJzLFxuICBidWlsZFJlbGF0aW9uc2hpcHMsXG4gIGJ1aWxkVGV4dHMsXG4gIGNvbHVtblByZWZpeCxcbiAgY29sdW1ucyxcbiAgZGlzYWJsZU5vdE51bGwsXG4gIGRpc2FibGVVbmlxdWUgPSBmYWxzZSxcbiAgZmllbGRQcmVmaXgsXG4gIGZpZWxkcyxcbiAgZm9yY2VMb2NhbGl6ZWQsXG4gIGluZGV4ZXMsXG4gIGxvY2FsZXNDb2x1bW5zLFxuICBsb2NhbGVzSW5kZXhlcyxcbiAgbmV3VGFibGVOYW1lLFxuICBwYXJlbnRUYWJsZU5hbWUsXG4gIHJlbGF0aW9uc1RvQnVpbGQsXG4gIHJlbGF0aW9uc2hpcHMsXG4gIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICByb290VGFibGVJRENvbFR5cGUsXG4gIHJvb3RUYWJsZU5hbWUsXG4gIHZlcnNpb25zLFxufTogQXJncyk6IFJlc3VsdCA9PiB7XG4gIGNvbnN0IHRocm93VmFsaWRhdGlvbkVycm9yID0gdHJ1ZVxuICBsZXQgaGFzTG9jYWxpemVkRmllbGQgPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSBmYWxzZVxuICBsZXQgaGFzTWFueVRleHRGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNNYW55TnVtYmVyRmllbGQ6ICdpbmRleCcgfCBib29sZWFuID0gZmFsc2VcbiAgbGV0IGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IGZhbHNlXG5cbiAgbGV0IHBhcmVudElEQ29sVHlwZTogSURUeXBlID0gJ2ludGVnZXInXG4gIGlmIChjb2x1bW5zLmlkIGluc3RhbmNlb2YgUGdVVUlEQnVpbGRlcikgcGFyZW50SURDb2xUeXBlID0gJ3V1aWQnXG4gIGlmIChjb2x1bW5zLmlkIGluc3RhbmNlb2YgUGdOdW1lcmljQnVpbGRlcikgcGFyZW50SURDb2xUeXBlID0gJ251bWVyaWMnXG4gIGlmIChjb2x1bW5zLmlkIGluc3RhbmNlb2YgUGdWYXJjaGFyQnVpbGRlcikgcGFyZW50SURDb2xUeXBlID0gJ3ZhcmNoYXInXG5cbiAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgaWYgKCduYW1lJyBpbiBmaWVsZCAmJiBmaWVsZC5uYW1lID09PSAnaWQnKSByZXR1cm5cbiAgICBsZXQgY29sdW1uTmFtZTogc3RyaW5nXG4gICAgbGV0IGZpZWxkTmFtZTogc3RyaW5nXG5cbiAgICBsZXQgdGFyZ2V0VGFibGUgPSBjb2x1bW5zXG4gICAgbGV0IHRhcmdldEluZGV4ZXMgPSBpbmRleGVzXG5cbiAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICAgIGNvbHVtbk5hbWUgPSBgJHtjb2x1bW5QcmVmaXggfHwgJyd9JHtmaWVsZC5uYW1lWzBdID09PSAnXycgPyAnXycgOiAnJ30ke3RvU25ha2VDYXNlKFxuICAgICAgICBmaWVsZC5uYW1lLFxuICAgICAgKX1gXG4gICAgICBmaWVsZE5hbWUgPSBgJHtmaWVsZFByZWZpeD8ucmVwbGFjZSgnLicsICdfJykgfHwgJyd9JHtmaWVsZC5uYW1lfWBcblxuICAgICAgLy8gSWYgZmllbGQgaXMgbG9jYWxpemVkLFxuICAgICAgLy8gYWRkIHRoZSBjb2x1bW4gdG8gdGhlIGxvY2FsZSB0YWJsZSBpbnN0ZWFkIG9mIG1haW4gdGFibGVcbiAgICAgIGlmIChhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbiAmJiAoZmllbGQubG9jYWxpemVkIHx8IGZvcmNlTG9jYWxpemVkKSkge1xuICAgICAgICBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgdGFyZ2V0VGFibGUgPSBsb2NhbGVzQ29sdW1uc1xuICAgICAgICB0YXJnZXRJbmRleGVzID0gbG9jYWxlc0luZGV4ZXNcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAoZmllbGQudW5pcXVlIHx8IGZpZWxkLmluZGV4KSAmJlxuICAgICAgICAhWydhcnJheScsICdibG9ja3MnLCAnZ3JvdXAnLCAncG9pbnQnLCAncmVsYXRpb25zaGlwJywgJ3VwbG9hZCddLmluY2x1ZGVzKGZpZWxkLnR5cGUpICYmXG4gICAgICAgICEoJ2hhc01hbnknIGluIGZpZWxkICYmIGZpZWxkLmhhc01hbnkgPT09IHRydWUpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgdW5pcXVlID0gZGlzYWJsZVVuaXF1ZSAhPT0gdHJ1ZSAmJiBmaWVsZC51bmlxdWVcbiAgICAgICAgaWYgKHVuaXF1ZSkge1xuICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbnRWYWx1ZSA9IGAke2ZpZWxkUHJlZml4IHx8ICcnfSR7ZmllbGQubmFtZX1gXG4gICAgICAgICAgaWYgKCFhZGFwdGVyLmZpZWxkQ29uc3RyYWludHM/Lltyb290VGFibGVOYW1lXSkge1xuICAgICAgICAgICAgYWRhcHRlci5maWVsZENvbnN0cmFpbnRzW3Jvb3RUYWJsZU5hbWVdID0ge31cbiAgICAgICAgICB9XG4gICAgICAgICAgYWRhcHRlci5maWVsZENvbnN0cmFpbnRzW3Jvb3RUYWJsZU5hbWVdW2Ake2NvbHVtbk5hbWV9X2lkeGBdID0gY29uc3RyYWludFZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0SW5kZXhlc1tgJHtuZXdUYWJsZU5hbWV9XyR7ZmllbGQubmFtZX1JZHhgXSA9IGNyZWF0ZUluZGV4KHtcbiAgICAgICAgICBuYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICB1bmlxdWUsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICd0ZXh0Jzoge1xuICAgICAgICBpZiAoZmllbGQuaGFzTWFueSkge1xuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLmluZGV4KSB7XG4gICAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkID0gJ2luZGV4J1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc01hbnlUZXh0RmllbGQpIHtcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpZWxkLnVuaXF1ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAnVW5pcXVlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gUG9zdGdyZXMgZm9yIGhhc01hbnkgdGV4dCBmaWVsZHMuJyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IHZhcmNoYXIoY29sdW1uTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgY2FzZSAnY29kZSc6XG4gICAgICBjYXNlICd0ZXh0YXJlYSc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IHZhcmNoYXIoY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnbnVtYmVyJzoge1xuICAgICAgICBpZiAoZmllbGQuaGFzTWFueSkge1xuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuaW5kZXgpIHtcbiAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9ICdpbmRleCdcbiAgICAgICAgICB9IGVsc2UgaWYgKCFoYXNNYW55TnVtYmVyRmllbGQpIHtcbiAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQudW5pcXVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICdVbmlxdWUgaXMgbm90IHN1cHBvcnRlZCBpbiBQb3N0Z3JlcyBmb3IgaGFzTWFueSBudW1iZXIgZmllbGRzLicsXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0gPSBudW1lcmljKGNvbHVtbk5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmljaFRleHQnOlxuICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGpzb25iKGNvbHVtbk5hbWUpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2RhdGUnOiB7XG4gICAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0gPSB0aW1lc3RhbXAoY29sdW1uTmFtZSwge1xuICAgICAgICAgIG1vZGU6ICdzdHJpbmcnLFxuICAgICAgICAgIHByZWNpc2lvbjogMyxcbiAgICAgICAgICB3aXRoVGltZXpvbmU6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3BvaW50Jzoge1xuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyYWRpbyc6XG4gICAgICBjYXNlICdzZWxlY3QnOiB7XG4gICAgICAgIGNvbnN0IGVudW1OYW1lID0gZ2V0VGFibGVOYW1lKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGNvbmZpZzogZmllbGQsXG4gICAgICAgICAgcGFyZW50VGFibGVOYW1lOiBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgcHJlZml4OiBgZW51bV8ke25ld1RhYmxlTmFtZX1fYCxcbiAgICAgICAgICB0YXJnZXQ6ICdlbnVtTmFtZScsXG4gICAgICAgICAgdGhyb3dWYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWRhcHRlci5lbnVtc1tlbnVtTmFtZV0gPSBwZ0VudW0oXG4gICAgICAgICAgZW51bU5hbWUsXG4gICAgICAgICAgZmllbGQub3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbklzT2JqZWN0KG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfSkgYXMgW3N0cmluZywgLi4uc3RyaW5nW11dLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWxlY3QnICYmIGZpZWxkLmhhc01hbnkpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZU5hbWUgPSBnZXRUYWJsZU5hbWUoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGNvbmZpZzogZmllbGQsXG4gICAgICAgICAgICBwYXJlbnRUYWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICAgIHByZWZpeDogYCR7bmV3VGFibGVOYW1lfV9gLFxuICAgICAgICAgICAgdGhyb3dWYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBjb25zdCBiYXNlQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgICAgIG9yZGVyOiBpbnRlZ2VyKCdvcmRlcicpLm5vdE51bGwoKSxcbiAgICAgICAgICAgIHBhcmVudDogcGFyZW50SURDb2x1bW5NYXBbcGFyZW50SURDb2xUeXBlXSgncGFyZW50X2lkJylcbiAgICAgICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAgICAgICAgIC5ub3ROdWxsKCksXG4gICAgICAgICAgICB2YWx1ZTogYWRhcHRlci5lbnVtc1tlbnVtTmFtZV0oJ3ZhbHVlJyksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYmFzZUV4dHJhQ29uZmlnOiBSZWNvcmQ8XG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlciB8IFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyXG4gICAgICAgICAgPiA9IHtcbiAgICAgICAgICAgIG9yZGVySWR4OiAoY29scykgPT4gaW5kZXgoYCR7c2VsZWN0VGFibGVOYW1lfV9vcmRlcl9pZHhgKS5vbihjb2xzLm9yZGVyKSxcbiAgICAgICAgICAgIHBhcmVudElkeDogKGNvbHMpID0+IGluZGV4KGAke3NlbGVjdFRhYmxlTmFtZX1fcGFyZW50X2lkeGApLm9uKGNvbHMucGFyZW50KSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkKSB7XG4gICAgICAgICAgICBiYXNlQ29sdW1ucy5sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ2xvY2FsZScpLm5vdE51bGwoKVxuICAgICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLmxvY2FsZUlkeCA9IChjb2xzKSA9PlxuICAgICAgICAgICAgICBpbmRleChgJHtzZWxlY3RUYWJsZU5hbWV9X2xvY2FsZV9pZHhgKS5vbihjb2xzLmxvY2FsZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuaW5kZXgpIHtcbiAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZy52YWx1ZSA9IChjb2xzKSA9PiBpbmRleChgJHtzZWxlY3RUYWJsZU5hbWV9X3ZhbHVlX2lkeGApLm9uKGNvbHMudmFsdWUpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnVpbGRUYWJsZSh7XG4gICAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgICAgYmFzZUNvbHVtbnMsXG4gICAgICAgICAgICBiYXNlRXh0cmFDb25maWcsXG4gICAgICAgICAgICBkaXNhYmxlTm90TnVsbCxcbiAgICAgICAgICAgIGRpc2FibGVVbmlxdWUsXG4gICAgICAgICAgICBmaWVsZHM6IFtdLFxuICAgICAgICAgICAgdGFibGVOYW1lOiBzZWxlY3RUYWJsZU5hbWUsXG4gICAgICAgICAgICB2ZXJzaW9ucyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmVsYXRpb25zVG9CdWlsZC5zZXQoZmllbGROYW1lLCBzZWxlY3RUYWJsZU5hbWUpXG5cbiAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhhZGFwdGVyLnRhYmxlc1tzZWxlY3RUYWJsZU5hbWVdLCAoeyBvbmUgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgICAgcGFyZW50OiBvbmUoYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICAgIGZpZWxkczogW2FkYXB0ZXIudGFibGVzW3NlbGVjdFRhYmxlTmFtZV0ucGFyZW50XSxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZF0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbl8ke3NlbGVjdFRhYmxlTmFtZX1gXSA9IHNlbGVjdFRhYmxlUmVsYXRpb25zXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGFkYXB0ZXIuZW51bXNbZW51bU5hbWVdKGZpZWxkTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdjaGVja2JveCc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGJvb2xlYW4oY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgY29uc3QgYXJyYXlUYWJsZU5hbWUgPSBnZXRUYWJsZU5hbWUoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgY29uZmlnOiBmaWVsZCxcbiAgICAgICAgICBwYXJlbnRUYWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICBwcmVmaXg6IGAke25ld1RhYmxlTmFtZX1fYCxcbiAgICAgICAgICB0aHJvd1ZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgYmFzZUNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7XG4gICAgICAgICAgX29yZGVyOiBpbnRlZ2VyKCdfb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICAgICAgX3BhcmVudElEOiBwYXJlbnRJRENvbHVtbk1hcFtwYXJlbnRJRENvbFR5cGVdKCdfcGFyZW50X2lkJylcbiAgICAgICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IGFkYXB0ZXIudGFibGVzW3BhcmVudFRhYmxlTmFtZV0uaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJhc2VFeHRyYUNvbmZpZzogUmVjb3JkPFxuICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlciB8IFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyXG4gICAgICAgID4gPSB7XG4gICAgICAgICAgX29yZGVySWR4OiAoY29scykgPT4gaW5kZXgoYCR7YXJyYXlUYWJsZU5hbWV9X29yZGVyX2lkeGApLm9uKGNvbHMuX29yZGVyKSxcbiAgICAgICAgICBfcGFyZW50SURJZHg6IChjb2xzKSA9PiBpbmRleChgJHthcnJheVRhYmxlTmFtZX1fcGFyZW50X2lkX2lkeGApLm9uKGNvbHMuX3BhcmVudElEKSxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICBiYXNlQ29sdW1ucy5fbG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdfbG9jYWxlJykubm90TnVsbCgpXG4gICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLl9sb2NhbGVJZHggPSAoY29scykgPT5cbiAgICAgICAgICAgIGluZGV4KGAke2FycmF5VGFibGVOYW1lfV9sb2NhbGVfaWR4YCkub24oY29scy5fbG9jYWxlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogc3ViSGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IHN1Ykhhc01hbnlUZXh0RmllbGQsXG4gICAgICAgICAgcmVsYXRpb25zVG9CdWlsZDogc3ViUmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgfSA9IGJ1aWxkVGFibGUoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYmFzZUNvbHVtbnMsXG4gICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLFxuICAgICAgICAgIGRpc2FibGVOb3ROdWxsOiBkaXNhYmxlTm90TnVsbEZyb21IZXJlLFxuICAgICAgICAgIGRpc2FibGVVbmlxdWUsXG4gICAgICAgICAgZmllbGRzOiBkaXNhYmxlVW5pcXVlID8gaWRUb1VVSUQoZmllbGQuZmllbGRzKSA6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICByb290UmVsYXRpb25zaGlwczogcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICB0YWJsZU5hbWU6IGFycmF5VGFibGVOYW1lLFxuICAgICAgICAgIHZlcnNpb25zLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChzdWJIYXNNYW55VGV4dEZpZWxkKSB7XG4gICAgICAgICAgaWYgKCFoYXNNYW55VGV4dEZpZWxkIHx8IHN1Ykhhc01hbnlUZXh0RmllbGQgPT09ICdpbmRleCcpXG4gICAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkID0gc3ViSGFzTWFueVRleHRGaWVsZFxuICAgICAgICB9XG4gICAgICAgIGlmIChzdWJIYXNNYW55TnVtYmVyRmllbGQpIHtcbiAgICAgICAgICBpZiAoIWhhc01hbnlOdW1iZXJGaWVsZCB8fCBzdWJIYXNNYW55TnVtYmVyRmllbGQgPT09ICdpbmRleCcpXG4gICAgICAgICAgICBoYXNNYW55TnVtYmVyRmllbGQgPSBzdWJIYXNNYW55TnVtYmVyRmllbGRcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbGF0aW9uc1RvQnVpbGQuc2V0KGZpZWxkTmFtZSwgYXJyYXlUYWJsZU5hbWUpXG5cbiAgICAgICAgY29uc3QgYXJyYXlUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhhZGFwdGVyLnRhYmxlc1thcnJheVRhYmxlTmFtZV0sICh7IG1hbnksIG9uZSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgIF9wYXJlbnRJRDogb25lKGFkYXB0ZXIudGFibGVzW3BhcmVudFRhYmxlTmFtZV0sIHtcbiAgICAgICAgICAgICAgZmllbGRzOiBbYWRhcHRlci50YWJsZXNbYXJyYXlUYWJsZU5hbWVdLl9wYXJlbnRJRF0sXG4gICAgICAgICAgICAgIHJlZmVyZW5jZXM6IFthZGFwdGVyLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdLmlkXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChoYXNMb2NhbGVzVGFibGUoZmllbGQuZmllbGRzKSkge1xuICAgICAgICAgICAgcmVzdWx0Ll9sb2NhbGVzID0gbWFueShhZGFwdGVyLnRhYmxlc1tgJHthcnJheVRhYmxlTmFtZX0ke2FkYXB0ZXIubG9jYWxlc1N1ZmZpeH1gXSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdWJSZWxhdGlvbnNUb0J1aWxkLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IG1hbnkoYWRhcHRlci50YWJsZXNbdmFsXSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9KVxuXG4gICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHthcnJheVRhYmxlTmFtZX1gXSA9IGFycmF5VGFibGVSZWxhdGlvbnNcblxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgZmllbGQuYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmxvY2tUYWJsZU5hbWUgPSBnZXRUYWJsZU5hbWUoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGNvbmZpZzogYmxvY2ssXG4gICAgICAgICAgICBwYXJlbnRUYWJsZU5hbWU6IHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICBwcmVmaXg6IGAke3Jvb3RUYWJsZU5hbWV9X2Jsb2Nrc19gLFxuICAgICAgICAgICAgdGhyb3dWYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWFkYXB0ZXIudGFibGVzW2Jsb2NrVGFibGVOYW1lXSkge1xuICAgICAgICAgICAgY29uc3QgYmFzZUNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7XG4gICAgICAgICAgICAgIF9vcmRlcjogaW50ZWdlcignX29yZGVyJykubm90TnVsbCgpLFxuICAgICAgICAgICAgICBfcGFyZW50SUQ6IHBhcmVudElEQ29sdW1uTWFwW3Jvb3RUYWJsZUlEQ29sVHlwZV0oJ19wYXJlbnRfaWQnKVxuICAgICAgICAgICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IGFkYXB0ZXIudGFibGVzW3Jvb3RUYWJsZU5hbWVdLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgICAgICAgICAubm90TnVsbCgpLFxuICAgICAgICAgICAgICBfcGF0aDogdGV4dCgnX3BhdGgnKS5ub3ROdWxsKCksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGJhc2VFeHRyYUNvbmZpZzogUmVjb3JkPFxuICAgICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICAgIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXJcbiAgICAgICAgICAgID4gPSB7XG4gICAgICAgICAgICAgIF9vcmRlcklkeDogKGNvbHMpID0+IGluZGV4KGAke2Jsb2NrVGFibGVOYW1lfV9vcmRlcl9pZHhgKS5vbihjb2xzLl9vcmRlciksXG4gICAgICAgICAgICAgIF9wYXJlbnRJRElkeDogKGNvbHMpID0+IGluZGV4KGAke2Jsb2NrVGFibGVOYW1lfV9wYXJlbnRfaWRfaWR4YCkub24oY29scy5fcGFyZW50SUQpLFxuICAgICAgICAgICAgICBfcGF0aElkeDogKGNvbHMpID0+IGluZGV4KGAke2Jsb2NrVGFibGVOYW1lfV9wYXRoX2lkeGApLm9uKGNvbHMuX3BhdGgpLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgICAgIGJhc2VDb2x1bW5zLl9sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ19sb2NhbGUnKS5ub3ROdWxsKClcbiAgICAgICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLl9sb2NhbGVJZHggPSAoY29scykgPT5cbiAgICAgICAgICAgICAgICBpbmRleChgJHtibG9ja1RhYmxlTmFtZX1fbG9jYWxlX2lkeGApLm9uKGNvbHMuX2xvY2FsZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBoYXNNYW55TnVtYmVyRmllbGQ6IHN1Ykhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogc3ViSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgICAgICAgcmVsYXRpb25zVG9CdWlsZDogc3ViUmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICAgIH0gPSBidWlsZFRhYmxlKHtcbiAgICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgICAgYmFzZUNvbHVtbnMsXG4gICAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZyxcbiAgICAgICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgICAgIGRpc2FibGVVbmlxdWUsXG4gICAgICAgICAgICAgIGZpZWxkczogZGlzYWJsZVVuaXF1ZSA/IGlkVG9VVUlEKGJsb2NrLmZpZWxkcykgOiBibG9jay5maWVsZHMsXG4gICAgICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgICByb290UmVsYXRpb25zaGlwczogcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgICAgICB0YWJsZU5hbWU6IGJsb2NrVGFibGVOYW1lLFxuICAgICAgICAgICAgICB2ZXJzaW9ucyxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmIChzdWJIYXNNYW55VGV4dEZpZWxkKSB7XG4gICAgICAgICAgICAgIGlmICghaGFzTWFueVRleHRGaWVsZCB8fCBzdWJIYXNNYW55VGV4dEZpZWxkID09PSAnaW5kZXgnKVxuICAgICAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQgPSBzdWJIYXNNYW55VGV4dEZpZWxkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdWJIYXNNYW55TnVtYmVyRmllbGQpIHtcbiAgICAgICAgICAgICAgaWYgKCFoYXNNYW55TnVtYmVyRmllbGQgfHwgc3ViSGFzTWFueU51bWJlckZpZWxkID09PSAnaW5kZXgnKVxuICAgICAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9IHN1Ykhhc01hbnlOdW1iZXJGaWVsZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBibG9ja1RhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKFxuICAgICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tibG9ja1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgICh7IG1hbnksIG9uZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgICAgICAgIF9wYXJlbnRJRDogb25lKGFkYXB0ZXIudGFibGVzW3Jvb3RUYWJsZU5hbWVdLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkczogW2FkYXB0ZXIudGFibGVzW2Jsb2NrVGFibGVOYW1lXS5fcGFyZW50SURdLFxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0uaWRdLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGhhc0xvY2FsZXNUYWJsZShibG9jay5maWVsZHMpKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHQuX2xvY2FsZXMgPSBtYW55KFxuICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tgJHtibG9ja1RhYmxlTmFtZX0ke2FkYXB0ZXIubG9jYWxlc1N1ZmZpeH1gXSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdWJSZWxhdGlvbnNUb0J1aWxkLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IG1hbnkoYWRhcHRlci50YWJsZXNbdmFsXSlcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7YmxvY2tUYWJsZU5hbWV9YF0gPSBibG9ja1RhYmxlUmVsYXRpb25zXG4gICAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICF2ZXJzaW9ucykge1xuICAgICAgICAgICAgdmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwoe1xuICAgICAgICAgICAgICBibG9jayxcbiAgICAgICAgICAgICAgbG9jYWxpemVkOiBmaWVsZC5sb2NhbGl6ZWQsXG4gICAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tibG9ja1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgIHRhYmxlTG9jYWxlczogYWRhcHRlci50YWJsZXNbYCR7YmxvY2tUYWJsZU5hbWV9JHthZGFwdGVyLmxvY2FsZXNTdWZmaXh9YF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBhZGFwdGVyLmJsb2NrVGFibGVOYW1lc1tgJHtyb290VGFibGVOYW1lfS4ke3RvU25ha2VDYXNlKGJsb2NrLnNsdWcpfWBdID0gYmxvY2tUYWJsZU5hbWVcbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZC5zZXQoYF9ibG9ja3NfJHtibG9jay5zbHVnfWAsIGJsb2NrVGFibGVOYW1lKVxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3RhYic6XG4gICAgICBjYXNlICdncm91cCc6IHtcbiAgICAgICAgaWYgKCEoJ25hbWUnIGluIGZpZWxkKSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZEZpZWxkOiBncm91cEhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiBncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCxcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiBncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBncm91cEhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IGdyb3VwSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGJ1aWxkTnVtYmVycyxcbiAgICAgICAgICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgZGlzYWJsZU5vdE51bGwsXG4gICAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgICAgZmllbGRQcmVmaXgsXG4gICAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICAgIHZlcnNpb25zLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRGaWVsZCkgaGFzTG9jYWxpemVkRmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkID0gdHJ1ZVxuICAgICAgICAgIGlmIChncm91cEhhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCkgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgICBpZiAoZ3JvdXBIYXNNYW55TnVtYmVyRmllbGQpIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlzYWJsZU5vdE51bGxGcm9tSGVyZSA9IEJvb2xlYW4oZmllbGQuYWRtaW4/LmNvbmRpdGlvbikgfHwgZGlzYWJsZU5vdE51bGxcblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkRmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiBncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkOiBncm91cEhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBncm91cEhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkOiBncm91cEhhc01hbnlUZXh0RmllbGQsXG4gICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBidWlsZE51bWJlcnMsXG4gICAgICAgICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgY29sdW1uUHJlZml4OiBgJHtjb2x1bW5OYW1lfV9gLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZFByZWZpeDogYCR7ZmllbGROYW1lfS5gLFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGZvcmNlTG9jYWxpemVkOiBmaWVsZC5sb2NhbGl6ZWQsXG4gICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICBsb2NhbGVzQ29sdW1ucyxcbiAgICAgICAgICBsb2NhbGVzSW5kZXhlcyxcbiAgICAgICAgICBuZXdUYWJsZU5hbWU6IGAke3BhcmVudFRhYmxlTmFtZX1fJHtjb2x1bW5OYW1lfWAsXG4gICAgICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgICAgIHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICB2ZXJzaW9ucyxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRGaWVsZCkgaGFzTG9jYWxpemVkRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKGdyb3VwSGFzTWFueVRleHRGaWVsZCkgaGFzTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCkgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKGdyb3VwSGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCkgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICd0YWJzJzoge1xuICAgICAgICBjb25zdCBkaXNhYmxlTm90TnVsbEZyb21IZXJlID0gQm9vbGVhbihmaWVsZC5hZG1pbj8uY29uZGl0aW9uKSB8fCBkaXNhYmxlTm90TnVsbFxuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRGaWVsZDogdGFiSGFzTG9jYWxpemVkRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiB0YWJIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogdGFiSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCxcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZDogdGFiSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiB0YWJIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogdGFiSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgfSA9IHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGJ1aWxkTnVtYmVycyxcbiAgICAgICAgICBidWlsZFJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgYnVpbGRUZXh0cyxcbiAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBkaXNhYmxlTm90TnVsbDogZGlzYWJsZU5vdE51bGxGcm9tSGVyZSxcbiAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgIGZpZWxkUHJlZml4LFxuICAgICAgICAgIGZpZWxkczogZmllbGQudGFicy5tYXAoKHRhYikgPT4gKHsgLi4udGFiLCB0eXBlOiAndGFiJyB9KSksXG4gICAgICAgICAgZm9yY2VMb2NhbGl6ZWQsXG4gICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICBsb2NhbGVzQ29sdW1ucyxcbiAgICAgICAgICBsb2NhbGVzSW5kZXhlcyxcbiAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgcGFyZW50VGFibGVOYW1lLFxuICAgICAgICAgIHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICB2ZXJzaW9ucyxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodGFiSGFzTG9jYWxpemVkRmllbGQpIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAodGFiSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAodGFiSGFzTWFueVRleHRGaWVsZCkgaGFzTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmICh0YWJIYXNNYW55TnVtYmVyRmllbGQpIGhhc01hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCkgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyb3cnOlxuICAgICAgY2FzZSAnY29sbGFwc2libGUnOiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRGaWVsZDogcm93SGFzTG9jYWxpemVkRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiByb3dIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogcm93SGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCxcbiAgICAgICAgICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZDogcm93SGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiByb3dIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogcm93SGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgfSA9IHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgIGJ1aWxkTnVtYmVycyxcbiAgICAgICAgICBidWlsZFJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgYnVpbGRUZXh0cyxcbiAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBkaXNhYmxlTm90TnVsbDogZGlzYWJsZU5vdE51bGxGcm9tSGVyZSxcbiAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgIGZpZWxkUHJlZml4LFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgdmVyc2lvbnMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChyb3dIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAocm93SGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChyb3dIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIGNhc2UgJ3VwbG9hZCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pKSB7XG4gICAgICAgICAgZmllbGQucmVsYXRpb25Uby5mb3JFYWNoKChyZWxhdGlvbikgPT4gcmVsYXRpb25zaGlwcy5hZGQocmVsYXRpb24pKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbGF0aW9uc2hpcHMuYWRkKGZpZWxkLnJlbGF0aW9uVG8pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBmaWVsZC5hZG1pbiAmJiBmaWVsZC5hZG1pbi5jb25kaXRpb25cblxuICAgIGlmIChcbiAgICAgICFkaXNhYmxlTm90TnVsbCAmJlxuICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSAmJlxuICAgICAgJ3JlcXVpcmVkJyBpbiBmaWVsZCAmJlxuICAgICAgZmllbGQucmVxdWlyZWQgJiZcbiAgICAgICFjb25kaXRpb25cbiAgICApIHtcbiAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0ubm90TnVsbCgpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgaGFzTG9jYWxpemVkRmllbGQsXG4gICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgaGFzTWFueU51bWJlckZpZWxkLFxuICAgIGhhc01hbnlUZXh0RmllbGQsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJ0cmF2ZXJzZUZpZWxkcyIsImFkYXB0ZXIiLCJidWlsZE51bWJlcnMiLCJidWlsZFJlbGF0aW9uc2hpcHMiLCJidWlsZFRleHRzIiwiY29sdW1uUHJlZml4IiwiY29sdW1ucyIsImRpc2FibGVOb3ROdWxsIiwiZGlzYWJsZVVuaXF1ZSIsImZpZWxkUHJlZml4IiwiZmllbGRzIiwiZm9yY2VMb2NhbGl6ZWQiLCJpbmRleGVzIiwibG9jYWxlc0NvbHVtbnMiLCJsb2NhbGVzSW5kZXhlcyIsIm5ld1RhYmxlTmFtZSIsInBhcmVudFRhYmxlTmFtZSIsInJlbGF0aW9uc1RvQnVpbGQiLCJyZWxhdGlvbnNoaXBzIiwicm9vdFJlbGF0aW9uc1RvQnVpbGQiLCJyb290VGFibGVJRENvbFR5cGUiLCJyb290VGFibGVOYW1lIiwidmVyc2lvbnMiLCJ0aHJvd1ZhbGlkYXRpb25FcnJvciIsImhhc0xvY2FsaXplZEZpZWxkIiwiaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQiLCJoYXNNYW55VGV4dEZpZWxkIiwiaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsImhhc01hbnlOdW1iZXJGaWVsZCIsImhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsInBhcmVudElEQ29sVHlwZSIsImlkIiwiUGdVVUlEQnVpbGRlciIsIlBnTnVtZXJpY0J1aWxkZXIiLCJQZ1ZhcmNoYXJCdWlsZGVyIiwiZm9yRWFjaCIsImZpZWxkIiwibmFtZSIsImNvbHVtbk5hbWUiLCJmaWVsZE5hbWUiLCJ0YXJnZXRUYWJsZSIsInRhcmdldEluZGV4ZXMiLCJmaWVsZEFmZmVjdHNEYXRhIiwidG9TbmFrZUNhc2UiLCJyZXBsYWNlIiwicGF5bG9hZCIsImNvbmZpZyIsImxvY2FsaXphdGlvbiIsImxvY2FsaXplZCIsInVuaXF1ZSIsImluZGV4IiwiaW5jbHVkZXMiLCJ0eXBlIiwiaGFzTWFueSIsImNvbnN0cmFpbnRWYWx1ZSIsImZpZWxkQ29uc3RyYWludHMiLCJjcmVhdGVJbmRleCIsInRhYmxlTmFtZSIsIkludmFsaWRDb25maWd1cmF0aW9uIiwidmFyY2hhciIsIm51bWVyaWMiLCJqc29uYiIsInRpbWVzdGFtcCIsIm1vZGUiLCJwcmVjaXNpb24iLCJ3aXRoVGltZXpvbmUiLCJlbnVtTmFtZSIsImdldFRhYmxlTmFtZSIsInByZWZpeCIsInRhcmdldCIsImVudW1zIiwicGdFbnVtIiwib3B0aW9ucyIsIm1hcCIsIm9wdGlvbiIsIm9wdGlvbklzT2JqZWN0IiwidmFsdWUiLCJzZWxlY3RUYWJsZU5hbWUiLCJiYXNlQ29sdW1ucyIsIm9yZGVyIiwiaW50ZWdlciIsIm5vdE51bGwiLCJwYXJlbnQiLCJwYXJlbnRJRENvbHVtbk1hcCIsInJlZmVyZW5jZXMiLCJ0YWJsZXMiLCJvbkRlbGV0ZSIsImJhc2VFeHRyYUNvbmZpZyIsIm9yZGVySWR4IiwiY29scyIsIm9uIiwicGFyZW50SWR4IiwibG9jYWxlIiwiZW51bV9fbG9jYWxlcyIsImxvY2FsZUlkeCIsImJ1aWxkVGFibGUiLCJzZXQiLCJzZWxlY3RUYWJsZVJlbGF0aW9ucyIsInJlbGF0aW9ucyIsIm9uZSIsInJlc3VsdCIsImJvb2xlYW4iLCJkaXNhYmxlTm90TnVsbEZyb21IZXJlIiwiQm9vbGVhbiIsImFkbWluIiwiY29uZGl0aW9uIiwiYXJyYXlUYWJsZU5hbWUiLCJfb3JkZXIiLCJfcGFyZW50SUQiLCJfb3JkZXJJZHgiLCJfcGFyZW50SURJZHgiLCJfbG9jYWxlIiwiX2xvY2FsZUlkeCIsInN1Ykhhc01hbnlOdW1iZXJGaWVsZCIsInN1Ykhhc01hbnlUZXh0RmllbGQiLCJzdWJSZWxhdGlvbnNUb0J1aWxkIiwiaWRUb1VVSUQiLCJyb290UmVsYXRpb25zaGlwcyIsImFycmF5VGFibGVSZWxhdGlvbnMiLCJtYW55IiwiaGFzTG9jYWxlc1RhYmxlIiwiX2xvY2FsZXMiLCJsb2NhbGVzU3VmZml4IiwidmFsIiwia2V5IiwiYmxvY2tzIiwiYmxvY2siLCJibG9ja1RhYmxlTmFtZSIsIl9wYXRoIiwidGV4dCIsIl9wYXRoSWR4IiwiYmxvY2tUYWJsZVJlbGF0aW9ucyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsIiwidGFibGUiLCJ0YWJsZUxvY2FsZXMiLCJibG9ja1RhYmxlTmFtZXMiLCJzbHVnIiwiZ3JvdXBIYXNMb2NhbGl6ZWRGaWVsZCIsImdyb3VwSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwiZ3JvdXBIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkIiwiZ3JvdXBIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsImdyb3VwSGFzTWFueU51bWJlckZpZWxkIiwiZ3JvdXBIYXNNYW55VGV4dEZpZWxkIiwidGFiSGFzTG9jYWxpemVkRmllbGQiLCJ0YWJIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQiLCJ0YWJIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkIiwidGFiSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQiLCJ0YWJIYXNNYW55TnVtYmVyRmllbGQiLCJ0YWJIYXNNYW55VGV4dEZpZWxkIiwidGFicyIsInRhYiIsInJvd0hhc0xvY2FsaXplZEZpZWxkIiwicm93SGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwicm93SGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsInJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkIiwicm93SGFzTWFueU51bWJlckZpZWxkIiwicm93SGFzTWFueVRleHRGaWVsZCIsIkFycmF5IiwiaXNBcnJheSIsInJlbGF0aW9uVG8iLCJyZWxhdGlvbiIsImFkZCIsInJlcXVpcmVkIl0sIm1h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
|
@@ -5,7 +5,8 @@ type Args = {
|
|
5
5
|
localized: boolean;
|
6
6
|
rootTableName: string;
|
7
7
|
table: GenericTable;
|
8
|
+
tableLocales?: GenericTable;
|
8
9
|
};
|
9
|
-
export declare const validateExistingBlockIsIdentical: ({ block, localized, rootTableName, table, }: Args) => void;
|
10
|
+
export declare const validateExistingBlockIsIdentical: ({ block, localized, rootTableName, table, tableLocales, }: Args) => void;
|
10
11
|
export {};
|
11
12
|
//# sourceMappingURL=validateExistingBlockIsIdentical.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"validateExistingBlockIsIdentical.d.ts","sourceRoot":"","sources":["../../src/schema/validateExistingBlockIsIdentical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAS,MAAM,eAAe,CAAA;AAKjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,YAAY,CAAA;
|
1
|
+
{"version":3,"file":"validateExistingBlockIsIdentical.d.ts","sourceRoot":"","sources":["../../src/schema/validateExistingBlockIsIdentical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAS,MAAM,eAAe,CAAA;AAKjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,KAAK,CAAA;IACZ,SAAS,EAAE,OAAO,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,YAAY,CAAA;IACnB,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAkDD,eAAO,MAAM,gCAAgC,8DAM1C,IAAI,KAAG,IA8BT,CAAA"}
|
@@ -22,7 +22,7 @@ const getFlattenedFieldNames = (fields, prefix = '')=>{
|
|
22
22
|
return fieldsToUse;
|
23
23
|
}
|
24
24
|
if ((0, _types.fieldHasSubFields)(field)) {
|
25
|
-
fieldPrefix = 'name' in field ? `${prefix}${field.name}
|
25
|
+
fieldPrefix = 'name' in field ? `${prefix}${field.name}_` : prefix;
|
26
26
|
return [
|
27
27
|
...fieldsToUse,
|
28
28
|
...getFlattenedFieldNames(field.fields, fieldPrefix)
|
@@ -32,7 +32,7 @@ const getFlattenedFieldNames = (fields, prefix = '')=>{
|
|
32
32
|
return [
|
33
33
|
...fieldsToUse,
|
34
34
|
...field.tabs.reduce((tabFields, tab)=>{
|
35
|
-
fieldPrefix = 'name' in tab ? `${prefix}
|
35
|
+
fieldPrefix = 'name' in tab ? `${prefix}_${tab.name}` : prefix;
|
36
36
|
return [
|
37
37
|
...tabFields,
|
38
38
|
...(0, _types.tabHasName)(tab) ? [
|
@@ -48,16 +48,22 @@ const getFlattenedFieldNames = (fields, prefix = '')=>{
|
|
48
48
|
if ((0, _types.fieldAffectsData)(field)) {
|
49
49
|
return [
|
50
50
|
...fieldsToUse,
|
51
|
-
|
51
|
+
{
|
52
|
+
name: `${fieldPrefix}${field.name}`,
|
53
|
+
localized: field.localized
|
54
|
+
}
|
52
55
|
];
|
53
56
|
}
|
54
57
|
return fieldsToUse;
|
55
58
|
}, []);
|
56
59
|
};
|
57
|
-
const validateExistingBlockIsIdentical = ({ block, localized, rootTableName, table })=>{
|
60
|
+
const validateExistingBlockIsIdentical = ({ block, localized, rootTableName, table, tableLocales })=>{
|
58
61
|
const fieldNames = getFlattenedFieldNames(block.fields);
|
59
62
|
const missingField = // ensure every field from the config is in the matching table
|
60
|
-
fieldNames.find((name
|
63
|
+
fieldNames.find(({ name, localized })=>{
|
64
|
+
const fieldTable = localized && tableLocales ? tableLocales : table;
|
65
|
+
return Object.keys(fieldTable).indexOf(name) === -1;
|
66
|
+
}) || // ensure every table column is matched for every field from the config
|
61
67
|
Object.keys(table).find((fieldName)=>{
|
62
68
|
if (![
|
63
69
|
'_locale',
|
@@ -66,15 +72,15 @@ const validateExistingBlockIsIdentical = ({ block, localized, rootTableName, tab
|
|
66
72
|
'_path',
|
67
73
|
'_uuid'
|
68
74
|
].includes(fieldName)) {
|
69
|
-
return fieldNames.
|
75
|
+
return fieldNames.findIndex((field)=>field.name) === -1;
|
70
76
|
}
|
71
77
|
});
|
72
78
|
if (missingField) {
|
73
|
-
throw new _errors.InvalidConfiguration(`The table ${rootTableName} has multiple blocks with slug ${block.slug}, but the schemas do not match. One block includes the field ${missingField}, while the other block does not.`);
|
79
|
+
throw new _errors.InvalidConfiguration(`The table ${rootTableName} has multiple blocks with slug ${block.slug}, but the schemas do not match. One block includes the field ${typeof missingField === 'string' ? missingField : missingField.name}, while the other block does not.`);
|
74
80
|
}
|
75
81
|
if (Boolean(localized) !== Boolean(table._locale)) {
|
76
82
|
throw new _errors.InvalidConfiguration(`The table ${rootTableName} has multiple blocks with slug ${block.slug}, but the schemas do not match. One is localized, but another is not. Block schemas of the same name must match exactly.`);
|
77
83
|
}
|
78
84
|
};
|
79
85
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvdmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCbG9jaywgRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBJbnZhbGlkQ29uZmlndXJhdGlvbiB9IGZyb20gJ3BheWxvYWQvZXJyb3JzJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSwgZmllbGRIYXNTdWJGaWVsZHMsIHRhYkhhc05hbWUgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNUYWJsZSB9IGZyb20gJy4uL3R5cGVzJ1xuXG50eXBlIEFyZ3MgPSB7XG4gIGJsb2NrOiBCbG9ja1xuICBsb2NhbGl6ZWQ6IGJvb2xlYW5cbiAgcm9vdFRhYmxlTmFtZTogc3RyaW5nXG4gIHRhYmxlOiBHZW5lcmljVGFibGVcbiAgdGFibGVMb2NhbGVzPzogR2VuZXJpY1RhYmxlXG59XG5cbmNvbnN0IGdldEZsYXR0ZW5lZEZpZWxkTmFtZXMgPSAoXG4gIGZpZWxkczogRmllbGRbXSxcbiAgcHJlZml4OiBzdHJpbmcgPSAnJyxcbik6IHsgbG9jYWxpemVkPzogYm9vbGVhbjsgbmFtZTogc3RyaW5nIH1bXSA9PiB7XG4gIHJldHVybiBmaWVsZHMucmVkdWNlKChmaWVsZHNUb1VzZSwgZmllbGQpID0+IHtcbiAgICBsZXQgZmllbGRQcmVmaXggPSBwcmVmaXhcblxuICAgIGlmIChcbiAgICAgIFsnYXJyYXknLCAnYmxvY2tzJywgJ3JlbGF0aW9uc2hpcCcsICd1cGxvYWQnXS5pbmNsdWRlcyhmaWVsZC50eXBlKSB8fFxuICAgICAgKCdoYXNNYW55JyBpbiBmaWVsZCAmJiBmaWVsZC5oYXNNYW55ID09PSB0cnVlKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZpZWxkc1RvVXNlXG4gICAgfVxuXG4gICAgaWYgKGZpZWxkSGFzU3ViRmllbGRzKGZpZWxkKSkge1xuICAgICAgZmllbGRQcmVmaXggPSAnbmFtZScgaW4gZmllbGQgPyBgJHtwcmVmaXh9JHtmaWVsZC5uYW1lfV9gIDogcHJlZml4XG4gICAgICByZXR1cm4gWy4uLmZpZWxkc1RvVXNlLCAuLi5nZXRGbGF0dGVuZWRGaWVsZE5hbWVzKGZpZWxkLmZpZWxkcywgZmllbGRQcmVmaXgpXVxuICAgIH1cblxuICAgIGlmIChmaWVsZC50eXBlID09PSAndGFicycpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLmZpZWxkc1RvVXNlLFxuICAgICAgICAuLi5maWVsZC50YWJzLnJlZHVjZSgodGFiRmllbGRzLCB0YWIpID0+IHtcbiAgICAgICAgICBmaWVsZFByZWZpeCA9ICduYW1lJyBpbiB0YWIgPyBgJHtwcmVmaXh9XyR7dGFiLm5hbWV9YCA6IHByZWZpeFxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi50YWJGaWVsZHMsXG4gICAgICAgICAgICAuLi4odGFiSGFzTmFtZSh0YWIpXG4gICAgICAgICAgICAgID8gW3sgLi4udGFiLCB0eXBlOiAndGFiJyB9XVxuICAgICAgICAgICAgICA6IGdldEZsYXR0ZW5lZEZpZWxkTmFtZXModGFiLmZpZWxkcywgZmllbGRQcmVmaXgpKSxcbiAgICAgICAgICBdXG4gICAgICAgIH0sIFtdKSxcbiAgICAgIF1cbiAgICB9XG5cbiAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC4uLmZpZWxkc1RvVXNlLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogYCR7ZmllbGRQcmVmaXh9JHtmaWVsZC5uYW1lfWAsXG4gICAgICAgICAgbG9jYWxpemVkOiBmaWVsZC5sb2NhbGl6ZWQsXG4gICAgICAgIH0sXG4gICAgICBdXG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkc1RvVXNlXG4gIH0sIFtdKVxufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVFeGlzdGluZ0Jsb2NrSXNJZGVudGljYWwgPSAoe1xuICBibG9jayxcbiAgbG9jYWxpemVkLFxuICByb290VGFibGVOYW1lLFxuICB0YWJsZSxcbiAgdGFibGVMb2NhbGVzLFxufTogQXJncyk6IHZvaWQgPT4ge1xuICBjb25zdCBmaWVsZE5hbWVzID0gZ2V0RmxhdHRlbmVkRmllbGROYW1lcyhibG9jay5maWVsZHMpXG4gIGNvbnN0IG1pc3NpbmdGaWVsZCA9XG4gICAgLy8gZW5zdXJlIGV2ZXJ5IGZpZWxkIGZyb20gdGhlIGNvbmZpZyBpcyBpbiB0aGUgbWF0Y2hpbmcgdGFibGVcbiAgICBmaWVsZE5hbWVzLmZpbmQoKHsgbmFtZSwgbG9jYWxpemVkIH0pID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkVGFibGUgPSBsb2NhbGl6ZWQgJiYgdGFibGVMb2NhbGVzID8gdGFibGVMb2NhbGVzIDogdGFibGVcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhmaWVsZFRhYmxlKS5pbmRleE9mKG5hbWUpID09PSAtMVxuICAgIH0pIHx8XG4gICAgLy8gZW5zdXJlIGV2ZXJ5IHRhYmxlIGNvbHVtbiBpcyBtYXRjaGVkIGZvciBldmVyeSBmaWVsZCBmcm9tIHRoZSBjb25maWdcbiAgICBPYmplY3Qua2V5cyh0YWJsZSkuZmluZCgoZmllbGROYW1lKSA9PiB7XG4gICAgICBpZiAoIVsnX2xvY2FsZScsICdfb3JkZXInLCAnX3BhcmVudElEJywgJ19wYXRoJywgJ191dWlkJ10uaW5jbHVkZXMoZmllbGROYW1lKSkge1xuICAgICAgICByZXR1cm4gZmllbGROYW1lcy5maW5kSW5kZXgoKGZpZWxkKSA9PiBmaWVsZC5uYW1lKSA9PT0gLTFcbiAgICAgIH1cbiAgICB9KVxuXG4gIGlmIChtaXNzaW5nRmllbGQpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZENvbmZpZ3VyYXRpb24oXG4gICAgICBgVGhlIHRhYmxlICR7cm9vdFRhYmxlTmFtZX0gaGFzIG11bHRpcGxlIGJsb2NrcyB3aXRoIHNsdWcgJHtcbiAgICAgICAgYmxvY2suc2x1Z1xuICAgICAgfSwgYnV0IHRoZSBzY2hlbWFzIGRvIG5vdCBtYXRjaC4gT25lIGJsb2NrIGluY2x1ZGVzIHRoZSBmaWVsZCAke1xuICAgICAgICB0eXBlb2YgbWlzc2luZ0ZpZWxkID09PSAnc3RyaW5nJyA/IG1pc3NpbmdGaWVsZCA6IG1pc3NpbmdGaWVsZC5uYW1lXG4gICAgICB9LCB3aGlsZSB0aGUgb3RoZXIgYmxvY2sgZG9lcyBub3QuYCxcbiAgICApXG4gIH1cblxuICBpZiAoQm9vbGVhbihsb2NhbGl6ZWQpICE9PSBCb29sZWFuKHRhYmxlLl9sb2NhbGUpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRDb25maWd1cmF0aW9uKFxuICAgICAgYFRoZSB0YWJsZSAke3Jvb3RUYWJsZU5hbWV9IGhhcyBtdWx0aXBsZSBibG9ja3Mgd2l0aCBzbHVnICR7YmxvY2suc2x1Z30sIGJ1dCB0aGUgc2NoZW1hcyBkbyBub3QgbWF0Y2guIE9uZSBpcyBsb2NhbGl6ZWQsIGJ1dCBhbm90aGVyIGlzIG5vdC4gQmxvY2sgc2NoZW1hcyBvZiB0aGUgc2FtZSBuYW1lIG11c3QgbWF0Y2ggZXhhY3RseS5gLFxuICAgIClcbiAgfVxufVxuIl0sIm5hbWVzIjpbInZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsIiwiZ2V0RmxhdHRlbmVkRmllbGROYW1lcyIsImZpZWxkcyIsInByZWZpeCIsInJlZHVjZSIsImZpZWxkc1RvVXNlIiwiZmllbGQiLCJmaWVsZFByZWZpeCIsImluY2x1ZGVzIiwidHlwZSIsImhhc01hbnkiLCJmaWVsZEhhc1N1YkZpZWxkcyIsIm5hbWUiLCJ0YWJzIiwidGFiRmllbGRzIiwidGFiIiwidGFiSGFzTmFtZSIsImZpZWxkQWZmZWN0c0RhdGEiLCJsb2NhbGl6ZWQiLCJibG9jayIsInJvb3RUYWJsZU5hbWUiLCJ0YWJsZSIsInRhYmxlTG9jYWxlcyIsImZpZWxkTmFtZXMiLCJtaXNzaW5nRmllbGQiLCJmaW5kIiwiZmllbGRUYWJsZSIsIk9iamVjdCIsImtleXMiLCJpbmRleE9mIiwiZmllbGROYW1lIiwiZmluZEluZGV4IiwiSW52YWxpZENvbmZpZ3VyYXRpb24iLCJzbHVnIiwiQm9vbGVhbiIsIl9sb2NhbGUiXSwibWFwcGluZ3MiOiI7Ozs7K0JBK0RhQTs7O2VBQUFBOzs7d0JBN0R3Qjt1QkFDMkI7QUFZaEUsTUFBTUMseUJBQXlCLENBQzdCQyxRQUNBQyxTQUFpQixFQUFFO0lBRW5CLE9BQU9ELE9BQU9FLE1BQU0sQ0FBQyxDQUFDQyxhQUFhQztRQUNqQyxJQUFJQyxjQUFjSjtRQUVsQixJQUNFO1lBQUM7WUFBUztZQUFVO1lBQWdCO1NBQVMsQ0FBQ0ssUUFBUSxDQUFDRixNQUFNRyxJQUFJLEtBQ2hFLGFBQWFILFNBQVNBLE1BQU1JLE9BQU8sS0FBSyxNQUN6QztZQUNBLE9BQU9MO1FBQ1Q7UUFFQSxJQUFJTSxJQUFBQSx3QkFBaUIsRUFBQ0wsUUFBUTtZQUM1QkMsY0FBYyxVQUFVRCxRQUFRLENBQUMsRUFBRUgsT0FBTyxFQUFFRyxNQUFNTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUdUO1lBQzVELE9BQU87bUJBQUlFO21CQUFnQkosdUJBQXVCSyxNQUFNSixNQUFNLEVBQUVLO2FBQWE7UUFDL0U7UUFFQSxJQUFJRCxNQUFNRyxJQUFJLEtBQUssUUFBUTtZQUN6QixPQUFPO21CQUNGSjttQkFDQUMsTUFBTU8sSUFBSSxDQUFDVCxNQUFNLENBQUMsQ0FBQ1UsV0FBV0M7b0JBQy9CUixjQUFjLFVBQVVRLE1BQU0sQ0FBQyxFQUFFWixPQUFPLENBQUMsRUFBRVksSUFBSUgsSUFBSSxDQUFDLENBQUMsR0FBR1Q7b0JBQ3hELE9BQU87MkJBQ0ZXOzJCQUNDRSxJQUFBQSxpQkFBVSxFQUFDRCxPQUNYOzRCQUFDO2dDQUFFLEdBQUdBLEdBQUc7Z0NBQUVOLE1BQU07NEJBQU07eUJBQUUsR0FDekJSLHVCQUF1QmMsSUFBSWIsTUFBTSxFQUFFSztxQkFDeEM7Z0JBQ0gsR0FBRyxFQUFFO2FBQ047UUFDSDtRQUVBLElBQUlVLElBQUFBLHVCQUFnQixFQUFDWCxRQUFRO1lBQzNCLE9BQU87bUJBQ0ZEO2dCQUNIO29CQUNFTyxNQUFNLENBQUMsRUFBRUwsWUFBWSxFQUFFRCxNQUFNTSxJQUFJLENBQUMsQ0FBQztvQkFDbkNNLFdBQVdaLE1BQU1ZLFNBQVM7Z0JBQzVCO2FBQ0Q7UUFDSDtRQUVBLE9BQU9iO0lBQ1QsR0FBRyxFQUFFO0FBQ1A7QUFFTyxNQUFNTCxtQ0FBbUMsQ0FBQyxFQUMvQ21CLEtBQUssRUFDTEQsU0FBUyxFQUNURSxhQUFhLEVBQ2JDLEtBQUssRUFDTEMsWUFBWSxFQUNQO0lBQ0wsTUFBTUMsYUFBYXRCLHVCQUF1QmtCLE1BQU1qQixNQUFNO0lBQ3RELE1BQU1zQixlQUNKLDhEQUE4RDtJQUM5REQsV0FBV0UsSUFBSSxDQUFDLENBQUMsRUFBRWIsSUFBSSxFQUFFTSxTQUFTLEVBQUU7UUFDbEMsTUFBTVEsYUFBYVIsYUFBYUksZUFBZUEsZUFBZUQ7UUFDOUQsT0FBT00sT0FBT0MsSUFBSSxDQUFDRixZQUFZRyxPQUFPLENBQUNqQixVQUFVLENBQUM7SUFDcEQsTUFDQSx1RUFBdUU7SUFDdkVlLE9BQU9DLElBQUksQ0FBQ1AsT0FBT0ksSUFBSSxDQUFDLENBQUNLO1FBQ3ZCLElBQUksQ0FBQztZQUFDO1lBQVc7WUFBVTtZQUFhO1lBQVM7U0FBUSxDQUFDdEIsUUFBUSxDQUFDc0IsWUFBWTtZQUM3RSxPQUFPUCxXQUFXUSxTQUFTLENBQUMsQ0FBQ3pCLFFBQVVBLE1BQU1NLElBQUksTUFBTSxDQUFDO1FBQzFEO0lBQ0Y7SUFFRixJQUFJWSxjQUFjO1FBQ2hCLE1BQU0sSUFBSVEsNEJBQW9CLENBQzVCLENBQUMsVUFBVSxFQUFFWixjQUFjLCtCQUErQixFQUN4REQsTUFBTWMsSUFBSSxDQUNYLDZEQUE2RCxFQUM1RCxPQUFPVCxpQkFBaUIsV0FBV0EsZUFBZUEsYUFBYVosSUFBSSxDQUNwRSxpQ0FBaUMsQ0FBQztJQUV2QztJQUVBLElBQUlzQixRQUFRaEIsZUFBZWdCLFFBQVFiLE1BQU1jLE9BQU8sR0FBRztRQUNqRCxNQUFNLElBQUlILDRCQUFvQixDQUM1QixDQUFDLFVBQVUsRUFBRVosY0FBYywrQkFBK0IsRUFBRUQsTUFBTWMsSUFBSSxDQUFDLHdIQUF3SCxDQUFDO0lBRXBNO0FBQ0YifQ==
|
@@ -11,7 +11,6 @@ type Args = {
|
|
11
11
|
data: Record<string, unknown>[];
|
12
12
|
field: BlockField;
|
13
13
|
locale?: string;
|
14
|
-
texts: Record<string, unknown>[];
|
15
14
|
numbers: Record<string, unknown>[];
|
16
15
|
path: string;
|
17
16
|
relationships: Record<string, unknown>[];
|
@@ -19,7 +18,8 @@ type Args = {
|
|
19
18
|
selects: {
|
20
19
|
[tableName: string]: Record<string, unknown>[];
|
21
20
|
};
|
21
|
+
texts: Record<string, unknown>[];
|
22
22
|
};
|
23
|
-
export declare const transformBlocks: ({ adapter, baseTableName, blocks, blocksToDelete, data, field, locale,
|
23
|
+
export declare const transformBlocks: ({ adapter, baseTableName, blocks, blocksToDelete, data, field, locale, numbers, path, relationships, relationshipsToDelete, selects, texts, }: Args) => void;
|
24
24
|
export {};
|
25
25
|
//# sourceMappingURL=blocks.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../src/transform/write/blocks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAI/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAIrE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE;QACN,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAA;KACxC,CAAA;IACD,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,KAAK,EAAE,UAAU,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,
|
1
|
+
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../src/transform/write/blocks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAI/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAIrE,KAAK,IAAI,GAAG;IACV,OAAO,EAAE,eAAe,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE;QACN,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAAA;KACxC,CAAA;IACD,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAC/B,KAAK,EAAE,UAAU,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACxC,qBAAqB,EAAE,oBAAoB,EAAE,CAAA;IAC7C,OAAO,EAAE;QACP,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KAC/C,CAAA;IACD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;CACjC,CAAA;AACD,eAAO,MAAM,eAAe,kJAczB,IAAI,SAyDN,CAAA"}
|