dmencu 0.8.11 → 0.8.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1203,70 +1203,66 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
1203
1203
|
return 'ok';
|
|
1204
1204
|
}
|
|
1205
1205
|
},
|
|
1206
|
-
|
|
1206
|
+
{
|
|
1207
1207
|
action: 'encuesta_recuperar_desde_anac',
|
|
1208
|
-
parameters:[
|
|
1209
|
-
{name:'operativo'
|
|
1210
|
-
{name:'enc'
|
|
1211
|
-
{name:'tarea'
|
|
1208
|
+
parameters: [
|
|
1209
|
+
{ name: 'operativo', typeName: 'text' },
|
|
1210
|
+
{ name: 'enc', typeName: 'text' },
|
|
1211
|
+
{ name: 'tarea', typeName: 'text' },
|
|
1212
1212
|
],
|
|
1213
|
-
coreFunction:async function(context
|
|
1213
|
+
coreFunction: async function (context, params) {
|
|
1214
1214
|
var be = context.be;
|
|
1215
|
-
var
|
|
1215
|
+
var { operativo, enc, tarea } = params;
|
|
1216
|
+
await context.client.query(`
|
|
1217
|
+
update tem
|
|
1218
|
+
set tarea_actual = $3
|
|
1219
|
+
where operativo = $1 and enc = $2
|
|
1220
|
+
returning *`, [operativo, enc, 'recu'])
|
|
1221
|
+
.fetchUniqueRow();
|
|
1222
|
+
await context.client.query(`
|
|
1223
|
+
update tareas_tem
|
|
1224
|
+
set estado = 'V'
|
|
1225
|
+
where operativo = $1 and enc = $2 and tarea = $3
|
|
1226
|
+
returning *`, [operativo, enc, tarea])
|
|
1227
|
+
.fetchUniqueRow();
|
|
1228
|
+
return 'ok';
|
|
1229
|
+
/*var forzarTareaEncuestaProc = be.procedure.encuesta_forzar_tarea;
|
|
1216
1230
|
var {operativo,enc,tarea:tarea_actual} = params;
|
|
1217
1231
|
await forzarTareaEncuestaProc.coreFunction(context,{operativo,enc,tarea_actual,tarea_nueva:'recu'});
|
|
1218
|
-
return 'ok'
|
|
1232
|
+
return 'ok'*/
|
|
1219
1233
|
}
|
|
1220
1234
|
},
|
|
1221
1235
|
{
|
|
1222
1236
|
action: 'encuesta_forzar_tarea',
|
|
1223
|
-
parameters:[
|
|
1224
|
-
{name:'operativo'
|
|
1225
|
-
{name:'enc'
|
|
1226
|
-
{name:'tarea_actual'
|
|
1227
|
-
{name:'tarea_nueva'
|
|
1237
|
+
parameters: [
|
|
1238
|
+
{ name: 'operativo', typeName: 'text' },
|
|
1239
|
+
{ name: 'enc', typeName: 'text' },
|
|
1240
|
+
{ name: 'tarea_actual', typeName: 'text' },
|
|
1241
|
+
{ name: 'tarea_nueva', typeName: 'text' },
|
|
1228
1242
|
],
|
|
1229
|
-
coreFunction:async function(context
|
|
1230
|
-
var {operativo, enc, tarea_actual, tarea_nueva} = params;
|
|
1231
|
-
await context.client.query(`
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
.
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
await context.client.query(`
|
|
1251
|
-
update tareas_tem
|
|
1252
|
-
set asignado = null
|
|
1253
|
-
where operativo = $1 and enc = $2 and tarea = $3
|
|
1254
|
-
returning *`,
|
|
1255
|
-
[operativo, enc, tarea_nueva])
|
|
1256
|
-
.fetchUniqueRow();
|
|
1257
|
-
|
|
1258
|
-
await context.client.query(`
|
|
1259
|
-
update tareas_tem
|
|
1260
|
-
set recepcionista = null
|
|
1261
|
-
where operativo = $1 and enc = $2 and tarea = $3
|
|
1262
|
-
returning *`,
|
|
1263
|
-
[operativo, enc, tarea_nueva])
|
|
1264
|
-
.fetchUniqueRow();
|
|
1265
|
-
|
|
1243
|
+
coreFunction: async function (context, params) {
|
|
1244
|
+
var { operativo, enc, tarea_actual, tarea_nueva } = params;
|
|
1245
|
+
await context.client.query(`
|
|
1246
|
+
update tem
|
|
1247
|
+
set tarea_actual = $4
|
|
1248
|
+
where operativo = $1 and enc = $2 and tarea_actual = $3
|
|
1249
|
+
returning *`, [operativo, enc, tarea_actual, tarea_nueva])
|
|
1250
|
+
.fetchUniqueRow();
|
|
1251
|
+
await context.client.query(`
|
|
1252
|
+
update tareas_tem
|
|
1253
|
+
set estado = 'V'
|
|
1254
|
+
where operativo = $1 and enc = $2 and tarea = $3
|
|
1255
|
+
returning *`, [operativo, enc, tarea_actual])
|
|
1256
|
+
.fetchUniqueRow();
|
|
1257
|
+
await context.client.query(`
|
|
1258
|
+
update tareas_tem
|
|
1259
|
+
set estado = '0D'
|
|
1260
|
+
where operativo = $1 and enc = $2 and tarea = $3
|
|
1261
|
+
returning *`, [operativo, enc, tarea_nueva])
|
|
1262
|
+
.fetchUniqueRow();
|
|
1266
1263
|
return 'ok';
|
|
1267
1264
|
}
|
|
1268
1265
|
},
|
|
1269
|
-
*/
|
|
1270
1266
|
{
|
|
1271
1267
|
action: 'encuesta_habilitar_deshabilitar',
|
|
1272
1268
|
parameters: [
|
|
@@ -1454,4 +1450,4 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
1454
1450
|
},
|
|
1455
1451
|
];
|
|
1456
1452
|
});
|
|
1457
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlcy1kbWVuY3UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Byb2NlZHVyZXMtZG1lbmN1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUFJYixrQ0FBa0M7SUFDbEMsaURBQStCO0lBRy9CLHlEQUE4QztJQUU5QywrQ0FBNkM7SUFDN0MsMkJBQW1DO0lBRW5DLGdEQUFnRDtJQUdoRCx5REFBd0Q7SUFDeEQscUNBQWdDO0lBRWhDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFcEMsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRTNDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUM3QixNQUFNLGNBQWMsR0FBRSxXQUFXLENBQUM7SUFDbEMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7SUFDbkMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFFL0IsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsT0FBd0IsRUFBQyxFQUFFOztRQUNoRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BCLElBQUksTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBQyxFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFDdkcsSUFBRyxNQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsMENBQUUsU0FBUyxFQUFDO1lBQ3BCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtTQUM3QjthQUFJO1lBQ0QsTUFBTSxLQUFLLENBQUUscURB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QUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7cUJBQ3hKO2lCQUNKO2dCQUNELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQztZQUNoQyxDQUFDO1NBQ0o7S0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBQcm9jZWR1cmVEZWYsIFRhYmxlRGVmaW5pdGlvbiwgQ2xpZW50LCBUYWJsZURlZmluaXRpb25zIH0gZnJvbSBcIi4vdHlwZXMtZG1lbmN1XCI7XHJcbmltcG9ydCB7IFByb2NlZHVyZUNvbnRleHQsIENvcmVGdW5jdGlvblBhcmFtZXRlcnMsIEZvcmVpZ25LZXkgfSBmcm9tIFwibWV0YS1lbmNcIjtcclxuaW1wb3J0ICogYXMgbGlrZUFyIGZyb20gXCJsaWtlLWFyXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLWRtZW5jdVwiO1xyXG5pbXBvcnQgeyBJZFVuaWRhZEFuYWxpc2lzLCBVbmlkYWRBbmFsaXNpcywgRXN0YWRvQWNjaW9uLCBJZEVuYywgSWRUYXJlYSwgUmVzcHVlc3Rhc1JhaXosIElkT3BlcmF0aXZvIH0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XHJcblxyXG5pbXBvcnQge2pzb24sIGpzb25vfSBmcm9tIFwicGctcHJvbWlzZS1zdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7Y2hhbmdpbmcsIGRhdGUgfSBmcm9tICdiZXN0LWdsb2JhbHMnO1xyXG5pbXBvcnQge3Byb21pc2VzIGFzICBmc30gZnJvbSBcImZzXCI7XHJcblxyXG5pbXBvcnQgKiBhcyBFeHByZXNpb25QYXJzZXIgZnJvbSAnZXhwcmUtcGFyc2VyJztcclxuaW1wb3J0IHsgdGFyZWFzIH0gZnJvbSBcIi4vdGFibGUtdGFyZWFzXCI7XHJcbmltcG9ydCB7IHByZXBlbmRMaXN0ZW5lciB9IGZyb20gXCJwcm9jZXNzXCI7XHJcbmltcG9ydCB7IGdldERpYXNBUGFzYXJRdWVyeSB9IGZyb20gXCIuL3RhYmxlLXRhcmVhc190ZW1cIjtcclxuaW1wb3J0IHsgZXJyb3IgfSBmcm9tIFwiY29uc29sZVwiO1xyXG5cclxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcbnZhciBzcWxUb29scyA9IHJlcXVpcmUoJ3NxbC10b29scycpO1xyXG5cclxudmFyIGRpc2NyZXBhbmNlcyA9IHJlcXVpcmUoJ2Rpc2NyZXBhbmNlcycpO1xyXG5cclxuY29uc3QgZm9ybVByaW5jaXBhbCA9ICdGOkYxJztcclxuY29uc3QgTUFJTl9UQUJMRU5BTUUgPSd2aXZpZW5kYXMnO1xyXG5jb25zdCBFU1RBRE9fUE9TVEVSSU9SX0NBUkdBID0gJ0MnO1xyXG5jb25zdCBFU1RBRE9fUE9TVEVSSU9SX0RFU0NBUkdBID0gJ0QnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldE9wZXJhdGl2b0FjdHVhbCA9IGFzeW5jIChjb250ZXh0OlByb2NlZHVyZUNvbnRleHQpPT57XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIHJlc3VsdCA9IGF3YWl0IGJlLnByb2NlZHVyZS50YWJsZV9kYXRhLmNvcmVGdW5jdGlvbihjb250ZXh0LHt0YWJsZTogYHBhcmFtZXRyb3NgLCBmaXhlZEZpZWxkczpbXX0pO1xyXG4gICAgaWYocmVzdWx0WzBdPy5vcGVyYXRpdm8pe1xyXG4gICAgICAgIHJldHVybiByZXN1bHRbMF0ub3BlcmF0aXZvXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICB0aHJvdyBFcnJvciAoJ25vIHNlIGNvbmZpZ3Vyw7MgdW4gb3BlcmF0aXZvIGVuIGxhIHRhYmxhIHBhcsOhbWV0cm9zJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4vKmRlZmluaWNpw7NuIGRlIGVzdHJ1Y3R1cmEgY29tcGxldGEsIGN1YW5kbyBleGlzdGEgaW5nLWVuYyBoYXkgcXVlIHBvbmVybG8gYWjDrSovIFxyXG50eXBlIEVzdHJ1Y3R1cmFUYWJsYT17dGFibGVOYW1lOnN0cmluZywgcGtGaWVsZHM6e2ZpZWxkTmFtZTpzdHJpbmd9W10sIGNoaWxkVGFibGVzOkVzdHJ1Y3R1cmFUYWJsYVtdfTtcclxuZnVuY3Rpb24gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgdGFibGVOYW1lOnN0cmluZyl7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIG1haW5UYWJsZURlZjpUYWJsZURlZmluaXRpb24gPSBiZS50YWJsZVN0cnVjdHVyZXNbdGFibGVOYW1lXShjb250ZXh0KTtcclxuICAgIHZhciBnZXRQa0Zyb21UYWJsZURlZiA9IGZ1bmN0aW9uIGdldFBrRnJvbVRhYmxlRGVmKHRhYmxlRGVmOlRhYmxlRGVmaW5pdGlvbil7XHJcbiAgICAgICAgcmV0dXJuIHRhYmxlRGVmLnByaW1hcnlLZXkubWFwKGZ1bmN0aW9uKHBrKXtcclxuICAgICAgICAgICAgcmV0dXJuIHtmaWVsZE5hbWU6cGt9O1xyXG4gICAgICAgIH0pXHJcbiAgICB9O1xyXG4gICAgdmFyIGdldEZrRnJvbVRhYmxlRGVmID0gZnVuY3Rpb24gZ2V0RmtGcm9tVGFibGVEZWYodGFibGVEZWY6VGFibGVEZWZpbml0aW9uLCBwYXJlbnRUYWJsZU5hbWU6IHN0cmluZyl7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRhYmxlRGVmLmZvcmVpZ25LZXlzPyB0YWJsZURlZi5mb3JlaWduS2V5cy5tYXAoZms9PmZrLmZpZWxkcyk6IFtdO1xyXG4gICAgICAgIGxldCBwYXJlbnRGayA9ICg8Rm9yZWlnbktleVtdPiB0YWJsZURlZi5mb3JlaWduS2V5cykuZmluZChmaz0+ZmsucmVmZXJlbmNlcyA9PSBwYXJlbnRUYWJsZU5hbWUpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRGaz8gcGFyZW50RmsuZmllbGRzOiBbXTtcclxuICAgIH1cclxuICAgIHZhciBzdHJ1Y3Q6RXN0cnVjdHVyYVRhYmxhPXtcclxuICAgICAgICB0YWJsZU5hbWU6bWFpblRhYmxlRGVmLm5hbWUsXHJcbiAgICAgICAgcGtGaWVsZHM6Z2V0UGtGcm9tVGFibGVEZWYobWFpblRhYmxlRGVmKSxcclxuICAgICAgICBjaGlsZFRhYmxlczpbXVxyXG4gICAgfTtcclxuICAgIGlmKG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMgJiYgbWFpblRhYmxlRGVmLmRldGFpbFRhYmxlcy5sZW5ndGgpe1xyXG4gICAgICAgIG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMuZm9yRWFjaChmdW5jdGlvbihkZXRhaWxUYWJsZSl7XHJcbiAgICAgICAgICAgIHN0cnVjdC5jaGlsZFRhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgY2hhbmdpbmcoXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIGRldGFpbFRhYmxlLnRhYmxlKSxcclxuICAgICAgICAgICAgICAgICAgICB7ZmtGaWVsZHM6IGdldEZrRnJvbVRhYmxlRGVmKGJlLnRhYmxlU3RydWN0dXJlc1tkZXRhaWxUYWJsZS50YWJsZV0oY29udGV4dCksIHRhYmxlTmFtZSl9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHJldHVybiBzdHJ1Y3Q7XHJcbn1cclxuLyogZmluIGRlZmluaWNpb24gZXN0cnVjdHVyYSBjb21wbGV0YSAqL1xyXG5cclxudHlwZSBBbnlPYmplY3QgPSB7W2s6c3RyaW5nXTphbnl9XHJcblxyXG52YXIgZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8gPSAoZnVuUGFyYW1zOnt0YXJlYTpJZFRhcmVhLCByZXNwdWVzdGFzVUFQcmluY2lwYWw6UmVzcHVlc3Rhc1JhaXosIHNldHRlcnM6c3RyaW5nW10sIHBhcmFtczphbnlbXX0pPT57XHJcbiAgICBsZXQge3RhcmVhLHJlc3B1ZXN0YXNVQVByaW5jaXBhbCxzZXR0ZXJzLHBhcmFtc30gPSBmdW5QYXJhbXM7XHJcbiAgICBsZXQge3Jlc3VtZW5Fc3RhZG9TdXAsIGNvZE5vUmVhU3VwLCBjb2RSZWFTdXAsIHJlc3VtZW5Fc3RhZG8sIGNvZE5vUmVhLCBjb2RSZWF9ID0gcmVzcHVlc3Rhc1VBUHJpbmNpcGFsO1xyXG4gICAgc2V0dGVycyA9IHNldHRlcnMuY29uY2F0KFtcclxuICAgICAgICBgcmVzdW1lbl9lc3RhZG8ke3RhcmVhPT0nc3VwZSc/J19zdXAnOicnfT0kJHtwYXJhbXMubGVuZ3RoKzF9YCxcclxuICAgICAgICBgbm9yZWEke3RhcmVhPT0nc3VwZSc/J19zdXAnOicnfT0kJHtwYXJhbXMubGVuZ3RoKzJ9YCxcclxuICAgICAgICBgcmVhJHt0YXJlYT09J3N1cGUnPydfc3VwJzonJ309JCR7cGFyYW1zLmxlbmd0aCszfWBcclxuICAgIF0pXHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuY29uY2F0KFtcclxuICAgICAgICB0YXJlYT09J3N1cGUnP3Jlc3VtZW5Fc3RhZG9TdXA6cmVzdW1lbkVzdGFkbyxcclxuICAgICAgICB0YXJlYT09J3N1cGUnP2NvZE5vUmVhU3VwOmNvZE5vUmVhLFxyXG4gICAgICAgIHRhcmVhPT0nc3VwZSc/Y29kUmVhU3VwOmNvZFJlYVxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4ge3NldHRlcnMscGFyYW1zfVxyXG59XHJcblxyXG52YXIgZ3VhcmRhckVuY3Vlc3RhRW5UZW0gPSBhc3luYyAoY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86SWRPcGVyYXRpdm8sIGlkRW5jOklkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWw6UmVzcHVlc3Rhc1JhaXosIHRhcmVhOklkVGFyZWEpPT57XHJcbiAgICB2YXIge3BhcmFtcyxzZXR0ZXJzfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICB0YXJlYSxcclxuICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWwsXHJcbiAgICAgICAgc2V0dGVyczogW2Bqc29uX2VuY3Vlc3RhID0gJDNgLCBgZmVjaGFfbW9kaWZfZW5jdWVzdGEgPSBjdXJyZW50X3RpbWVzdGFtcGBdLFxyXG4gICAgICAgIHBhcmFtczogW29wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbF1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgc2V0ICR7c2V0dGVycy5qb2luKCcsJyl9XHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICxcclxuICAgICAgICBwYXJhbXNcclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxufVxyXG5cclxudmFyIHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8gPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCAsb3BlcmF0aXZvOiBzdHJpbmcsIGVuYzogSWRFbmMsIHRhcmVhOiBJZFRhcmVhLCBqc29uX2VuY3Vlc3RhOmFueSApPT57XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgY29uc3QgVUFfUFJJTkNJUEFMID0gYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIG9wZXJhdGl2byk7XHJcbiAgICByZXR1cm4gYXdhaXQgYmUucHJvY2VkdXJlLmRtX2ZvcnBrcmFpel9kZXNjYXJnYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgIGNvbnRleHQsIFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3BlcmF0aXZvOm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgIHBlcnNpc3RlbnRlczp7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzOntcclxuICAgICAgICAgICAgICAgICAgICBbVUFfUFJJTkNJUEFMXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZW5jXToganNvbl9lbmN1ZXN0YVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpbmZvcm1hY2lvbkhkcjp7XHJcbiAgICAgICAgICAgICAgICAgICAgW2VuY106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICApXHJcbn1cclxuXHJcblxyXG52YXIgZ2V0SGRyUXVlcnkgPSAgZnVuY3Rpb24gZ2V0SGRyUXVlcnkocXVvdGVkQ29uZFZpdjpzdHJpbmcpe1xyXG4gICAgcmV0dXJuIGBcclxuICAgIHdpdGggdml2aWVuZGFzIGFzIFxyXG4gICAgICAgIChzZWxlY3QgdC5lbmMsIHQuanNvbl9lbmN1ZXN0YSBhcyByZXNwdWVzdGFzLCB0LnJlc3VtZW5fZXN0YWRvIGFzIFwicmVzdW1lbkVzdGFkb1wiLCBcclxuICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ2RvbWluaW8nICAgICAgICwgZG9taW5pbyAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnbm9tY2FsbGUnICAgICAgLCBub21jYWxsZSAgICAgICxcclxuICAgICAgICAgICAgICAgICdzZWN0b3InICAgICAgICAsIHNlY3RvciAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ2VkaWZpY2lvJyAgICAgICwgZWRpZmljaW8gICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZW50cmFkYScgICAgICAgLCBlbnRyYWRhICAgICAgICxcclxuICAgICAgICAgICAgICAgICducm9jYXRhc3RyYWwnICAsIG5yb2NhdGFzdHJhbCAgLFxyXG4gICAgICAgICAgICAgICAgJ3Bpc28nICAgICAgICAgICwgcGlzbyAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZGVwYXJ0YW1lbnRvJyAgLCBkZXBhcnRhbWVudG8gICxcclxuICAgICAgICAgICAgICAgICdoYWJpdGFjaW9uJyAgICAsIGhhYml0YWNpb24gICAgLFxyXG4gICAgICAgICAgICAgICAgJ2Nhc2EnICAgICAgICAgICwgY2FzYSAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAncHJpb3JpZGFkJyAgICAgLCByZXNlcnZhKzEgICAgICxcclxuICAgICAgICAgICAgICAgICdvYnNlcnZhY2lvbmVzJyAsIHR0LmNhcmdhX29ic2VydmFjaW9uZXMgLFxyXG4gICAgICAgICAgICAgICAgJ2NpdGEnICAgICAgICAgICwgY2l0YSAsXHJcbiAgICAgICAgICAgICAgICAnY2FyZ2EnICAgICAgICAgLCB0LmFyZWEgICAgICAgICBcclxuICAgICAgICAgICAgKSBhcyB0ZW0sIHQuYXJlYSxcclxuICAgICAgICAgICAgLS1UT0RPOiBHRU5FUkFMSVpBUlxyXG4gICAgICAgICAgICBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAndGFyZWEnLCB0dC50YXJlYSxcclxuICAgICAgICAgICAgICAgICdmZWNoYV9hc2lnbmFjaW9uJywgZmVjaGFfYXNpZ25hY2lvbixcclxuICAgICAgICAgICAgICAgICdhc2lnbmFkbycsIGFzaWduYWRvLFxyXG4gICAgICAgICAgICAgICAgJ21haW5fZm9ybScsIG1haW5fZm9ybVxyXG4gICAgICAgICAgICApIGFzIHRhcmVhLFxyXG4gICAgICAgICAgICBtaW4oZmVjaGFfYXNpZ25hY2lvbikgYXMgZmVjaGFfYXNpZ25hY2lvblxyXG4gICAgICAgICAgICBmcm9tIHRlbSB0IGxlZnQgam9pbiB0YXJlYXNfdGVtIHR0IG9uICh0Lm9wZXJhdGl2byA9IHR0Lm9wZXJhdGl2byBhbmQgdC5lbmMgPSB0dC5lbmMgYW5kIHQudGFyZWFfYWN0dWFsID0gdHQudGFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbGVmdCBqb2luIHRhcmVhcyB0YSBvbiB0LnRhcmVhX2FjdHVhbCA9IHRhLnRhcmVhXHJcbiAgICAgICAgICAgIHdoZXJlIHQuaGFiaWxpdGFkYSBhbmQgJHtxdW90ZWRDb25kVml2fVxyXG4gICAgICAgICAgICBncm91cCBieSB0LmVuYywgdC5qc29uX2VuY3Vlc3RhLCB0LnJlc3VtZW5fZXN0YWRvLCBkb21pbmlvLCBub21jYWxsZSxzZWN0b3IsZWRpZmljaW8sIGVudHJhZGEsIG5yb2NhdGFzdHJhbCwgcGlzbyxkZXBhcnRhbWVudG8saGFiaXRhY2lvbixjYXNhLHJlc2VydmEsdHQuY2FyZ2Ffb2JzZXJ2YWNpb25lcywgY2l0YSwgdC5hcmVhLCB0dC50YXJlYSwgZmVjaGFfYXNpZ25hY2lvbiwgYXNpZ25hZG8sIG1haW5fZm9ybVxyXG4gICAgICAgIClcclxuICAgICAgICBzZWxlY3QganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ3ZpdmllbmRhcycsICR7anNvbm8oXHJcbiAgICAgICAgICAgICAgICAgICAgYHNlbGVjdCBlbmMsIHJlc3B1ZXN0YXMsIGpzb25iX2J1aWxkX29iamVjdCgncmVzdW1lbkVzdGFkbycsXCJyZXN1bWVuRXN0YWRvXCIpIGFzIG90cmFzIGZyb20gdml2aWVuZGFzYCxcclxuICAgICAgICAgICAgICAgICAgICAnZW5jJyxcclxuICAgICAgICAgICAgICAgICAgICBgb3RyYXMgfHwgY29hbGVzY2UocmVzcHVlc3Rhcywne30nOjpqc29uYilgXHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICApIGFzIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICR7anNvbihgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgYXJlYSBhcyBjYXJnYSwgb2JzZXJ2YWNpb25lc19oZHIgYXMgb2JzZXJ2YWNpb25lcywgbWluKGZlY2hhX2FzaWduYWNpb24pIGFzIGZlY2hhXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB2aXZpZW5kYXMgaW5uZXIgam9pbiBhcmVhcyB1c2luZyAoYXJlYSkgXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgYnkgYXJlYSwgb2JzZXJ2YWNpb25lc19oZHJgLCBcclxuICAgICAgICAgICAgICAgICdmZWNoYScpfSBhcyBjYXJnYXMsXHJcbiAgICAgICAgICAgICR7anNvbm8oXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGVuYywganNvbmJfYnVpbGRfb2JqZWN0KCd0ZW0nLCB0ZW0sICd0YXJlYScsIHRhcmVhKSBhcyBvdHJhcyBmcm9tIHZpdmllbmRhc2AsXHJcbiAgICAgICAgICAgICAgICAgJ2VuYycsXHJcbiAgICAgICAgICAgICAgICAgYG90cmFzIHx8J3t9Jzo6anNvbmJgXHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICBhcyBcImluZm9ybWFjaW9uSGRyXCJcclxuYFxyXG59XHJcblxyXG5leHBvcnQgdmFyIHNldEhkclF1ZXJ5ID0gKG15RnVuOihxdW90ZWRDb25kVml2OnN0cmluZyk9PnN0cmluZyk9PiBnZXRIZHJRdWVyeT1teUZ1blxyXG5cclxuY29uc3QgZ2V0VUFQcmluY2lwYWwgPSBhc3luYyAoY2xpZW50OkNsaWVudCwgb3BlcmF0aXZvOnN0cmluZyk9PlxyXG4gICAgKGF3YWl0IGNsaWVudC5xdWVyeShcclxuICAgICAgICBgc2VsZWN0IHVuaWRhZF9hbmFsaXNpc1xyXG4gICAgICAgICAgICBmcm9tIHVuaWRhZF9hbmFsaXNpc1xyXG4gICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBwcmluY2lwYWxcclxuICAgICAgICBgXHJcbiAgICAgICAgLFxyXG4gICAgICAgIFtvcGVyYXRpdm9dXHJcbiAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWVcclxuXHJcbnZhciBmdW5jaW9uZXNDb25vY2lkYXM6e1trIGluIHN0cmluZ106Ym9vbGVhbn0gPSB7fVxyXG5cclxudmFyIGNvbXBpbGVyID0gbmV3IEV4cHJlc2lvblBhcnNlci5Db21waWxlcih7XHJcbiAgICBsYW5ndWFnZTonanMnLFxyXG4gICAgdmFyV3JhcHBlcjoodmFyX25hbWU6c3RyaW5nKT0+YGhlbHBlcnMubnVsbDJ6ZXJvKHZhbG9yZXMuJHt2YXJfbmFtZX0pYCxcclxuICAgIGZ1bldyYXBwZXI6KGZ1bmN0aW9uTmFtZTpzdHJpbmcpPT57XHJcbiAgICAgICAgaWYoIWZ1bmNpb25lc0Nvbm9jaWRhc1tmdW5jdGlvbk5hbWVdKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZnVuY3Rpb25OYW1lKVxyXG4gICAgICAgICAgICBmdW5jaW9uZXNDb25vY2lkYXNbZnVuY3Rpb25OYW1lXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgaGVscGVycy5mdW5zLiR7ZnVuY3Rpb25OYW1lfWBcclxuICAgIH1cclxufSlcclxuXHJcbnR5cGUgQ2FzaWxsZXJvRGVBY2E9e1xyXG4gICAgY2hpbGRzOiBDYXNpbGxlcm9EZUFjYVtdLFxyXG4gICAgZGF0YTp7XHJcbiAgICAgICAgZXhwcmVzaW9uX2hhYmlsaXRhcjogc3RyaW5nXHJcbiAgICAgICAgZXhwcmVzaW9uX2hhYmlsaXRhcl9qczogc3RyaW5nXHJcbiAgICAgICAgZXNwZWNpYWw6IGFueVxyXG4gICAgICAgIGV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanM6IHN0cmluZ1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjb21waWxhckV4cHJlc2lvbihleHByZXNpb246c3RyaW5nKXtcclxuICAgIHJldHVybiBjb21waWxlci50b0NvZGUoRXhwcmVzaW9uUGFyc2VyLnBhcnNlKFxyXG4gICAgICAgIGV4cHJlc2lvblxyXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxiaXMgZGlzdGluY3QgZnJvbVxcYi9naSwnIDw+ICcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8hIS9naSwnICcpXHJcbiAgICApKS5yZXBsYWNlKC9oZWxwZXJzXFwuZnVuc1xcLmJsYW5jb1xcKGhlbHBlcnMubnVsbDJ6ZXJvXFwoL2csJ2hlbHBlcnMuZnVucy5ibGFuY28oKCcpXHJcbiAgICAucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5pbmZvcm1hZG9cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCdoZWxwZXJzLmZ1bnMuaW5mb3JtYWRvKCgnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29tcGlsYXJFeHByZXNpb25lcyhjYXNpbGxlcm86Q2FzaWxsZXJvRGVBY2Epe1xyXG4gICAgaWYoIWNhc2lsbGVybyl7IHJldHVybiB9XHJcbiAgICBpZihjYXNpbGxlcm8uZGF0YS5leHByZXNpb25faGFiaWxpdGFyKXtcclxuICAgICAgICBjYXNpbGxlcm8uZGF0YS5leHByZXNpb25faGFiaWxpdGFyX2pzID0gY29tcGlsYXJFeHByZXNpb24oY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcik7XHJcbiAgICB9XHJcbiAgICBpZihjYXNpbGxlcm8uZGF0YS5lc3BlY2lhbD8uYXV0b2luZyl7XHJcbiAgICAgICAgdmFyIHBhcnRlcyA9IGNhc2lsbGVyby5kYXRhLmVzcGVjaWFsPy5hdXRvaW5nLnNwbGl0KCc9PicpO1xyXG4gICAgICAgIGlmKHBhcnRlcy5sZW5ndGg+MSl7XHJcbiAgICAgICAgICAgIHZhciBwcmVjb25kaWNpb24gPSBwYXJ0ZXNbMF07XHJcbiAgICAgICAgICAgIHZhciB2YWxvciA9IHBhcnRlcy5zbGljZSgxKS5qb2luKCc9PicpO1xyXG4gICAgICAgICAgICBjYXNpbGxlcm8uZGF0YS5leHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzID0gYCgke2NvbXBpbGFyRXhwcmVzaW9uKHByZWNvbmRpY2lvbil9KT8oJHtjb21waWxhckV4cHJlc2lvbih2YWxvcil9KTpudWxsYDtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2F1dG9pbmdyZXNhcl9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uKHBhcnRlc1swXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yKHZhciBjYXNpbGxlcm9JbnRlcm5vIG9mIGNhc2lsbGVyby5jaGlsZHMpIGNvbXBpbGFyRXhwcmVzaW9uZXMoY2FzaWxsZXJvSW50ZXJubyk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBBQ0NJT05fUEFTQVJfUFJPSUUgPSAnZW5jdWVzdGFzX3Byb2Nlc2FtaWVudG9fcGFzYXInO1xyXG5leHBvcnQgY29uc3QgUHJvY2VkdXJlc0RtRW5jdSA6IFByb2NlZHVyZURlZltdID0gW1xyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonb3BlcmF0aXZvX2VzdHJ1Y3R1cmFfY29tcGxldGEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAgICAgICx0eXBlTmFtZTondGV4dCcsIHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOidkZXNwbGVnYXJGb3JtdWxhcmlvJyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGNhc2lsbGVyb3NfamVyYXJxdWl6YWRvcygkMSkgYXMgZm9ybXVsYXJpb3MsIFxyXG4gICAgICAgICAgICAgICAgICAgICR7anNvbm8oYHNlbGVjdCB1bmlkYWRfYW5hbGlzaXMsIHBhZHJlLCBwa19hZ3JlZ2FkYSwgJ3t9Jzo6anNvbmIgYXMgaGlqYXMgZnJvbSB1bmlkYWRfYW5hbGlzaXMgd2hlcmUgb3BlcmF0aXZvID0gJDJgLCAndW5pZGFkX2FuYWxpc2lzJyl9IGFzIHVuaWRhZGVzX2FuYWxpc2lzXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRlcnMub3BlcmF0aXZvLCBwYXJhbWV0ZXJzLm9wZXJhdGl2b11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBsaWtlQXIocmVzdWx0LnJvdy5mb3JtdWxhcmlvcykuZm9yRWFjaChmPT5jb21waWxhckV4cHJlc2lvbmVzKGYpKTtcclxuICAgICAgICAgICAgLy8gSGVybWFub3Mgc29uIGxvcyBmb3JtdWxhcmlvcyBxdWUgZXN0w6FuIGltcGxhbnRhZG9zIGVuIG90cm8gZm9ybXVsYXJpbyBkZSBsYSBtaXNtYSBVQS4gUG9yIGVqZW1wbG8gZWwgQTEgZW4gZWwgUzFcclxuICAgICAgICAgICAgdmFyIHJlc3VsdEhlcm1hbm9zID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG5zZWxlY3Qgby5pZF9jYXNpbGxlcm8gYXMgaWRfZm9ybXVsYXJpbywgby51bmlkYWRfYW5hbGlzaXMsICdCRl8nfHxvLmNhc2lsbGVybyBib3RvbiwgYmYuY2FzaWxsZXJvLCBiZi5wYWRyZSwgZnAuY2FzaWxsZXJvLCBmcC51bmlkYWRfYW5hbGlzaXNcclxuICBmcm9tIGNhc2lsbGVyb3MgbyBsZWZ0IGpvaW4gY2FzaWxsZXJvcyBiZlxyXG4gICAgb24gYmYudGlwb2M9J0JGJ1xyXG5cdGFuZCBiZi5jYXNpbGxlcm8gPSAnQkZfJ3x8by5jYXNpbGxlcm9cclxuXHRhbmQgYmYub3BlcmF0aXZvID0gby5vcGVyYXRpdm9cclxuXHRsZWZ0IGpvaW4gY2FzaWxsZXJvcyBmcFxyXG5cdCAgb24gZnAuaWRfY2FzaWxsZXJvID0gYmYucGFkcmVcclxuXHQgIGFuZCBmcC5vcGVyYXRpdm8gPSBiZi5vcGVyYXRpdm9cclxuICB3aGVyZSBvLnRpcG9jID0gJ0YnXHJcbiAgICBhbmQgby51bmlkYWRfYW5hbGlzaXMgPSBmcC51bmlkYWRfYW5hbGlzaXNcclxuXHRhbmQgby5vcGVyYXRpdm8gPSAkMWAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgcmVzdWx0SGVybWFub3Mucm93cy5mb3JFYWNoKHJvdz0+e1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnJvdy5mb3JtdWxhcmlvc1tyb3cuaWRfZm9ybXVsYXJpb10uZGF0YS5oZXJtYW5vID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGFyVUEodWE6VW5pZGFkQW5hbGlzaXMsIGlkVWE6SWRVbmlkYWRBbmFsaXNpcywgdUFzOntbayBpbiBJZFVuaWRhZEFuYWxpc2lzXTogVW5pZGFkQW5hbGlzaXN9KXtcclxuICAgICAgICAgICAgICAgIGlmKHVhLnBhZHJlKXtcclxuICAgICAgICAgICAgICAgICAgICB1QXNbdWEucGFkcmVdLmhpamFzW2lkVWFdID0gdWE7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB1YS5wcmluY2lwYWw9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaWtlQXIocmVzdWx0LnJvdy51bmlkYWRlc19hbmFsaXNpcykuZm9yRWFjaCgodWEsIGlkVWEpPT5cclxuICAgICAgICAgICAgICAgIGNvbXBsZXRhclVBKHVhLCBpZFVhIGFzIElkVW5pZGFkQW5hbGlzaXMsIHJlc3VsdC5yb3cudW5pZGFkZXNfYW5hbGlzaXMpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgdmFyIHtjb25fcmVhX2hvZ2FyOiBjb25SZWFIb2dhciwgY29uZmlnX3NvcnRlbzogY29uZmlnU29ydGVvLCBoYWJpbGl0YWNpb25fYm90b25fZm9ybXVsYXJpbzpoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW99ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBjb25maWdfc29ydGVvLCBjb25fcmVhX2hvZ2FyLCBoYWJpbGl0YWNpb25fYm90b25fZm9ybXVsYXJpbyBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDFcclxuICAgICAgICAgICAgYCxbcGFyYW1ldGVycy5vcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbiAgICAgICAgICAgIGxldCBjb21waWxhckV4cHJlc2lvbmVzRG9taW5pb3MgPSAoZXhwcmVzaW9uZXNEb21pbmlvOmFueSk9PiBcclxuICAgICAgICAgICAgICAgIGxpa2VBcihleHByZXNpb25lc0RvbWluaW8pXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoZXhwcixkb21pbmlvKT0+KHtkb21pbmlvLCBleHByOmNvbXBpbGFyRXhwcmVzaW9uKGV4cHIuZXhwcil9KSlcclxuICAgICAgICAgICAgICAgICAgICAucGxhaW4oKTtcclxuICAgICAgICAgICAgaWYoY29uZmlnU29ydGVvKXtcclxuICAgICAgICAgICAgICAgIGxpa2VBcihjb25maWdTb3J0ZW8pLmZvckVhY2goKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5leHByX2luY29tcGxldGl0dWRfanM9Y29tcGlsYXJFeHByZXNpb25lc0RvbWluaW9zKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZXhwcl9pbmNvbXBsZXRpdHVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZmlsdHJvX2pzPWNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmZpbHRybylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKXtcclxuICAgICAgICAgICAgICAgIGxpa2VBcihoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8pLmZvckVhY2goKGZvcm0pPT57XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybS5leHByX2hhYmlsaXRhcl9ib3Rvbl9qcz1jb21waWxhckV4cHJlc2lvbihmb3JtLmV4cHJfaGFiaWxpdGFyX2JvdG9uKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge3RpbWVzdGFtcDogYmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmEsIC4uLnJlc3VsdC5yb3csIG9wZXJhdGl2bzpwYXJhbWV0ZXJzLm9wZXJhdGl2bywgY29uUmVhSG9nYXIsIGNvbmZpZ1NvcnRlbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBub1JlYXM6YmUuY2FjaGVzLnRhYmxlQ29udGVudC5ub19yZWEsIG5vUmVhc1N1cDpiZS5jYWNoZXMudGFibGVDb250ZW50Lm5vX3JlYV9zdXB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOidnZW5lcmFyX2Zvcm11bGFyaW9zJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J2FubmlvJywgdHlwZU5hbWU6J2ludGVnZXInLCByZWZlcmVuY2VzOidhbm5pbyd9LFxyXG4gICAgICAgICAgICB7bmFtZTonbWVzJyAgLCB0eXBlTmFtZTonaW50ZWdlcicsIHJlZmVyZW5jZXM6J21lcycgIH0sXHJcbiAgICAgICAgICAgIHtuYW1lOidsb3RlJyAsIHR5cGVOYW1lOidpbnRlZ2VyJywgcmVmZXJlbmNlczonbG90ZXMnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRVQSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCAqXHJcbiAgICAgICAgICAgICAgICAgICBmcm9tIHVuaWRhZF9hbmFsaXNpc1xyXG4gICAgICAgICAgICAgICAgICAgd2hlcmUgcHJpbmNpcGFsID0gdHJ1ZSBhbmQgb3BlcmF0aXZvID0gJDFcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbT1BFUkFUSVZPXVxyXG4gICAgICAgICAgICApLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdFVBLnJvd0NvdW50ID09PSAwKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc2UgY29uZmlndXLDsyB1bmEgdW5pZGFkIGRlIGFuYWxpc2lzIGNvbW8gcHJpbmNpcGFsJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHJvdyA9IHJlc3VsdFVBLnJvdztcclxuICAgICAgICAgICAgbGV0IHJlc3VsdFByZWd1bnRhcyA9IGF3YWl0IGJlLnByb2NlZHVyZS5wcmVndW50YXNfdWFfdHJhZXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHJvdylcclxuICAgICAgICAgICAgdmFyIGNvbnRlbmVkb3JWYWNpbzp7W2tleTpzdHJpbmddOmFueX0gPSB7fTtcclxuICAgICAgICAgICAgcmVzdWx0UHJlZ3VudGFzLmZvckVhY2goZnVuY3Rpb24oZGVmUHJlZ3VudGEpe1xyXG4gICAgICAgICAgICAgICAgY29udGVuZWRvclZhY2lvW2RlZlByZWd1bnRhLnZhcl9uYW1lXSA9IGRlZlByZWd1bnRhLnVuaWRhZF9hbmFsaXNpcz9bXTpudWxsO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29udGVuZWRvclZhY2lvLmFubmlvPSBwYXJhbWV0ZXJzLmFubmlvO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8ubWVzICA9IHBhcmFtZXRlcnMubWVzICA7XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5sb3RlID0gcGFyYW1ldGVycy5sb3RlIDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgZGViZV9oYWJlci5pZF9jYXNvLCBzIGFzIGlkXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSAoc2VsZWN0IGxvdGUsIGFybWFyX2lkKGFubmlvLCBtZXMsIGxvdGUsIHMpIGFzIGlkX2Nhc28sIHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAoc2VsZWN0IGFubmlvLG1lcyxsb3RlLCBjYW50X2N1ZXMgZnJvbSBsb3RlcyB3aGVyZSAoYW5uaW8sbWVzLGxvdGUpPSgkMiwkMywkNCkpIHIsIGxhdGVyYWwgZ2VuZXJhdGVfc2VyaWVzKDEsY2FudF9jdWVzKSBzXHJcbiAgICAgICAgICAgICAgICAgICAgKSBkZWJlX2hhYmVyIGxlZnQgam9pbiBkZWZnZW4gaGF5IG9uIGhheS5pZF9jYXNvID0gZGViZV9oYWJlci5pZF9jYXNvIGFuZCBoYXkub3BlcmF0aXZvPSQxXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgaGF5LmlkX2Nhc28gaXMgbnVsbGAsXHJcbiAgICAgICAgICAgICAgICBbIE9QRVJBVElWTywgcGFyYW1ldGVycy5hbm5pbywgcGFyYW1ldGVycy5tZXMsIHBhcmFtZXRlcnMubG90ZV1cclxuICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICB2YXIgcGFyYW1zID0ge29wZXJhdGl2bzogT1BFUkFUSVZPfTtcclxuICAgICAgICAgICAgZm9yKHZhciBpPTA7IGkgPCByZXN1bHQucm93Q291bnQ7IGkrKyl7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyLmNvcmVGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZyhwYXJhbXMse2lkX2Nhc286cmVzdWx0LnJvd3NbaV0uaWRfY2FzbywgZGF0b3NfY2FzbzpjaGFuZ2luZyhjb250ZW5lZG9yVmFjaW8se2lkOnJlc3VsdC5yb3dzW2ldLmlkfSl9KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7YWdyZWdhZGFzOnJlc3VsdC5yb3dDb3VudH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjondXBsb2FkX2ZpbGUnLFxyXG4gICAgICAgIHByb2dyZXNzOiB0cnVlLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTogJ2lkX2FkanVudG8nLCB0eXBlTmFtZTogJ2ludGVnZXInfSxcclxuICAgICAgICAgICAge25hbWU6ICdub21icmUnLCB0eXBlTmFtZTogJ3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGZpbGVzOntjb3VudDoxfSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246ZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMsIGZpbGVzKXtcclxuICAgICAgICAgICAgbGV0IGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGxldCBjbGllbnQ9Y29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQuaW5mb3JtUHJvZ3Jlc3Moe21lc3NhZ2U6YmUubWVzc2FnZXMuZmlsZVVwbG9hZGVkfSk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlID0gZmlsZXNbMF1cclxuICAgICAgICAgICAgbGV0IGV4dCA9IHBhdGguZXh0bmFtZShmaWxlLnBhdGgpLnN1YnN0cigxKTtcclxuICAgICAgICAgICAgbGV0IG9yaWdpbmFsRmlsZW5hbWUgPSBmaWxlLm9yaWdpbmFsRmlsZW5hbWUuc2xpY2UoMCwtKGV4dC5sZW5ndGgrMSkpO1xyXG4gICAgICAgICAgICBsZXQgZmlsZW5hbWU9IHBhcmFtZXRlcnMubm9tYnJlIHx8IG9yaWdpbmFsRmlsZW5hbWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdQYXRoID0gJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJztcclxuICAgICAgICAgICAgdmFyIGNyZWF0ZVJlc3BvbnNlID0gZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2UoYWRqdW50b1Jvdyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0YWRvID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdMYSBzdWJpZGEgc2UgcmVhbGl6w7MgY29ycmVjdGFtZW50ZSAodXBkYXRlKScsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9tYnJlOiBhZGp1bnRvUm93Lm5vbWJyZSxcclxuICAgICAgICAgICAgICAgICAgICBub21icmVfb3JpZ2luYWw6IGFkanVudG9Sb3cubm9tYnJlX29yaWdpbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4dDogYWRqdW50b1Jvdy5leHQsXHJcbiAgICAgICAgICAgICAgICAgICAgZmVjaGE6IGFkanVudG9Sb3cuZmVjaGEsXHJcbiAgICAgICAgICAgICAgICAgICAgaG9yYTogYWRqdW50b1Jvdy5ob3JhLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkX2FkanVudG86IGFkanVudG9Sb3cuaWRfYWRqdW50b1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkb1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBtb3ZlRmlsZSA9IGZ1bmN0aW9uIG1vdmVGaWxlKGZpbGUsIGlkX2FkanVudG8sIGV4dGVuc2lvbil7XHJcbiAgICAgICAgICAgICAgICBmcy5tb3ZlKGZpbGUucGF0aCwgbmV3UGF0aCArIGlkX2FkanVudG8gKyAnLicgKyBleHRlbnNpb24sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICBpZihwYXJhbWV0ZXJzLmlkX2FkanVudG8pe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgdXBkYXRlIGFkanVudG9zIHNldCBub21icmU9ICQxLG5vbWJyZV9vcmlnaW5hbCA9ICQyLCBleHQgPSAkMywgcnV0YSA9IGNvbmNhdCgnbG9jYWwtYXR0YWNobWVudHMvZmlsZS0nLCQ0Ojp0ZXh0LCcuJywkMzo6dGV4dCksIGZlY2hhID0gbm93KCksIGhvcmEgPSBkYXRlX3RydW5jKCdzZWNvbmRzJyxjdXJyZW50X3RpbWVzdGFtcC1jdXJyZW50X2RhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGlkX2FkanVudG8gPSAkNCByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlbmFtZSwgb3JpZ2luYWxGaWxlbmFtZSwgZXh0LCBwYXJhbWV0ZXJzLmlkX2FkanVudG9dXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlc3BvbnNlKHJlc3VsdC5yb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbihyZXN1bHRhZG8pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlRmlsZShmaWxlLHJlc3VsdGFkby5pZF9hZGp1bnRvLHJlc3VsdGFkby5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYGluc2VydCBpbnRvIGFkanVudG9zIChub21icmUsIG5vbWJyZV9vcmlnaW5hbCwgZXh0LCBmZWNoYSwgaG9yYSkgdmFsdWVzICgkMSwkMiwkMyxub3coKSwgZGF0ZV90cnVuYygnc2Vjb25kcycsY3VycmVudF90aW1lc3RhbXAtY3VycmVudF9kYXRlKSkgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZW5hbWUsIG9yaWdpbmFsRmlsZW5hbWUsIGV4dF1cclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYHVwZGF0ZSBhZGp1bnRvcyBzZXQgcnV0YSA9IGNvbmNhdCgnbG9jYWwtYXR0YWNobWVudHMvZmlsZS0nLGlkX2FkanVudG86OnRleHQsJy4nLGV4dClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGlkX2FkanVudG8gPSAkMSByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0LnJvdy5pZF9hZGp1bnRvXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlc3BvbnNlKHJlc3VsdC5yb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0YWRvKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUscmVzdWx0YWRvLmlkX2FkanVudG8scmVzdWx0YWRvLmV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonY2Fzb19ndWFyZGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAsIHR5cGVOYW1lOid0ZXh0JywgcmVmZXJlbmNlczonb3BlcmF0aXZvcyd9LFxyXG4gICAgICAgICAgICB7bmFtZTonaWRfY2FzbycgICAgICwgdHlwZU5hbWU6J3RleHQnICAgICAgfSxcclxuICAgICAgICAgICAge25hbWU6J2RhdG9zX2Nhc28nICAsIHR5cGVOYW1lOidqc29uYicgICAgIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBkZWZpbmVkSW46ICdkbWVuY3UnLFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZSBlc3BlY2lmaWNvIGVsIHRpcG8gZGUgbG9zIHBhcsOhbWV0cm9zXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczp7XHJcbiAgICAgICAgICAgIG9wZXJhdGl2bzpzdHJpbmcsIFxyXG4gICAgICAgICAgICBpZF9jYXNvOnN0cmluZyxcclxuICAgICAgICAgICAgZGF0b3NfY2FzbzpBbnlPYmplY3RcclxuICAgICAgICB9LG5ld0NsaWVudDpDbGllbnQpe1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50PW5ld0NsaWVudCB8fCBjb250ZXh0LmNsaWVudDtcclxuICAgICAgICAgICAgdmFyIGRhdG9zX2pzb249cGFyYW1ldGVycy5kYXRvc19jYXNvO1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgdGFibGVTdHJ1Y3R1cmVzX2FwcDpUYWJsZURlZmluaXRpb25zID0gYmUudGFibGVTdHJ1Y3R1cmVzO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgc3RydWN0X2RtZW5jdSA9IGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0LCBNQUlOX1RBQkxFTkFNRSk7XHJcbiAgICAgICAgICAgIGRhdG9zX2pzb25bJ29wZXJhdGl2byddID0gcGFyYW1ldGVycy5vcGVyYXRpdm87XHJcbiAgICAgICAgICAgIC8vVE9ETyA6IHZpdmllbmRhIMOzIGVuYz8/P1xyXG4gICAgICAgICAgICBkYXRvc19qc29uWyd2aXZpZW5kYSddID0gcGFyYW1ldGVycy5pZF9jYXNvO1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBjb21wbGV0YXJfdWx0X3BrX2VuX2FyciggdWx0X3BrLCB1YV9hcnIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbl9wa19jb21wbGV0YT11YV9hcnI7IFxyXG4gICAgICAgICAgICAgICAgaWYgKHVhX2FyciAmJiB1YV9hcnIubGVuZ3RoPj0xKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25fcGtfY29tcGxldGE9IGNvbl9wa19jb21wbGV0YS5tYXAoKHVuYV91YSxpKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmFfdWFbdWx0X3BrXT1pKzEgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuYV91YTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25fcGtfY29tcGxldGFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiByZWNvcnJlcl9kYXRvc19hZ3JlZ2FuZG9fcGtzKGRhdG9zaikge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5TmFtZSBpbiBkYXRvc2opIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0b0sgPSBkYXRvc2pba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdG9LIGluc3RhbmNlb2YgQXJyYXkgJiYgZGF0b0subGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBrID0gdGFibGVTdHJ1Y3R1cmVzX2FwcFtrZXlOYW1lXShjb250ZXh0KS5wcmltYXJ5S2V5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWx0X3BrID0gcGtbcGsubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9LID0gY29tcGxldGFyX3VsdF9wa19lbl9hcnIodWx0X3BrLCBkYXRvSyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9LLmZvckVhY2goKGVsZW1JKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtST1yZWNvcnJlcl9kYXRvc19hZ3JlZ2FuZG9fcGtzKGVsZW1JKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5TmFtZS5zdGFydHNXaXRoKCckJyl8fGtleU5hbWUuc3RhcnRzV2l0aCgnXycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRvc2pba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9zajtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkYXRvc19qc29uID0gcmVjb3JyZXJfZGF0b3NfYWdyZWdhbmRvX3BrcyhkYXRvc19qc29uKTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkbztcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhU3VwO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYVN1cDtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkb1N1cDtcclxuXHJcbiAgICAgICAgICAgIGlmKCBPYmplY3Qua2V5cyhkYXRvc19qc29uKS5sZW5ndGggPjIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHF1ZXJpZXMgPSBzcWxUb29scy5zdHJ1Y3R1cmVkRGF0YS5zcWxXcml0ZShkYXRvc19qc29uLCBzdHJ1Y3RfZG1lbmN1KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBxdWVyaWVzLnJlZHVjZShmdW5jdGlvbihwcm9taXNlLCBxdWVyeSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsaWVudC5xdWVyeShxdWVyeSkuZXhlY3V0ZSgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJva1wiO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyOkVycm9yKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNhc29fZ3VhcmRhciBFTlRSQSBFTiBFTCBDQVRDSDogXCIsZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZhY2lvJztcclxuICAgICAgICAgICAgfSAgICBcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2Nhc29fdHJhZXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgLy97bmFtZTonZm9ybXVsYXJpbycgICAgLCAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICxyZWZlcmVuY2VzOidvcGVyYXRpdm9zJywgIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidpZF9jYXNvJyAgICAgICAsdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnZ29Ub0VuYycsXHJcbiAgICAgICAgZGVmaW5lZEluOiAnZG1lbmN1JyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50PWNvbnRleHQuY2xpZW50O1xyXG4gICAgICAgICAgICAgdmFyIHN0cnVjdF9kbWVuY3UgPSBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dCwgTUFJTl9UQUJMRU5BTUUpO1xyXG4gICAgICAgICAgICB2YXIgc3FsID0gc3FsVG9vbHMuc3RydWN0dXJlZERhdGEuc3FsUmVhZCh7b3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2bywgdml2aWVuZGE6cGFyYW1ldGVycy5pZF9jYXNvfSwgc3RydWN0X2RtZW5jdSk7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjbGllbnQucXVlcnkoc3FsKS5mZXRjaFVuaXF1ZVZhbHVlKCk7XHJcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogcGFyYW1ldGVycy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICB2aXZpZW5kYTogcGFyYW1ldGVycy5pZF9jYXNvLFxyXG4gICAgICAgICAgICAgICAgZGF0b3NfY2FzbzogcmVzdWx0LnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgLy9mb3JtdWxhcmlvOiBmb3JtUHJpbmNpcGFsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjYXNvX3RyYWVyX29fY3JlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICxyZWZlcmVuY2VzOidvcGVyYXRpdm9zJywgIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidpZF9jYXNvJyAgICAgICAsdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnZ29Ub0VuYycsXHJcbiAgICAgICAgLy8gYml0YWNvcmE6e2Fsd2F5czp0cnVlfSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3RyYWVyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIHZhciBqc29uID0gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3ByZXBhcmFyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX2d1YXJkYXInXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgY2hhbmdpbmcocGFyYW1ldGVycywge2RhdG9zX2Nhc286anNvbn0pKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBiZS5wcm9jZWR1cmVbJ2Nhc29fdHJhZXInXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjoncGFzYXJfanNvbjJ1YScsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgLyogR0VORVJBTElaQVI6ICovXHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICAvKiBGSU4tR0VORVJBTElaQVI6ICovXHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgU0VMRUNUICogRlJPTSAke01BSU5fVEFCTEVOQU1FfSBMSU1JVCAxYCkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYocmVzdWx0TWFpbi5yb3dDb3VudD4wKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdIQVkgREFUT1MnLHJlc3VsdE1haW4ucm93cylcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSEFZIERBVE9TLiBOTyBTRSBQVUVERSBJTklDSUFSIEVMIFBBU0FKRScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRKc29uID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgU0VMRUNUIG9wZXJhdGl2bywgZW5jIGlkX2Nhc28sIGpzb25fZW5jdWVzdGEgZGF0b3NfY2FzbyBmcm9tIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBXSEVSRSBvcGVyYXRpdm89JDEgYW5kIHJlc3VtZW5fZXN0YWRvIGlzIGRpc3RpbmN0IGZyb20gJ3ZhY2lvJyBhbmQganNvbl9lbmN1ZXN0YSBpcyBub3QgbnVsbCBcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBlbmMgYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgdmFyIHByb2NlZHVyZUd1YXJkYXIgPSBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyO1xyXG4gICAgICAgICAgICBpZihwcm9jZWR1cmVHdWFyZGFyLmRlZmluZWRJbiE9J2RtZW5jdScpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXkgcXVlIHNvYnJlZXNjcmliaXIgY2Fzb19ndWFyZGFyJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlc3VsdEpzb24ucm93cy5tYXAoYXN5bmMgZnVuY3Rpb24ocm93KXtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgY2FzbyAke3Jvdy5pZF9jYXNvfTogYDtcclxuICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5pblRyYW5zYWN0aW9uKG51bGwsIGFzeW5jIGZ1bmN0aW9uKGNsaWVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbys9IGF3YWl0IHByb2NlZHVyZUd1YXJkYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHJvdywgY2xpZW50KTsgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlID0gcmVzdWx0YWRvICsgXCJqc29uMnVhIGVycm9yLiBcIisgZXJyIDtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSBlcnJNZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyTWVzc2FnZSlcclxuICAgICAgICAgICAgICAgIH0gICAgIFxyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0YWRvLmluY2x1ZGVzKCdvaycpKXsgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHtkYXRvc19jYXNvLCB2aXZpZW5kYSwgb3BlcmF0aXZvfSA9IGF3YWl0IGJlLnByb2NlZHVyZS5jYXNvX3RyYWVyLmNvcmVGdW5jdGlvbihjb250ZXh0LCB7b3BlcmF0aXZvOnJvdy5vcGVyYXRpdm8sIGlkX2Nhc286cm93LmlkX2Nhc299KVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2ZXJRdWVHcmFibyA9IHtkYXRvc19jYXNvLCB2aXZpZW5kYSwgb3BlcmF0aXZvfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzY3JlcGFuY2VzLnNob3dBbmRUaHJvdyh2ZXJRdWVHcmFibyxyb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHZlclF1ZUdyYWJvLHJvdylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvO1xyXG4gICAgICAgICAgICB9KSkuY2F0Y2goZnVuY3Rpb24oZXJyKXtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonZG1fZm9ycGtyYWl6X2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondml2aWVuZGEnICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0JywgcmVmZXJlbmNlczpcInRhcmVhc1wifSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLHZpdmllbmRhLCB0YXJlYX0gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICB2YXIgbWFpbl9mb3JtID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBtYWluX2Zvcm1cclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIHRhcmVhPSQyYFxyXG4gICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgdGFyZWFdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgdmFyIGNvbmR2aXY9IGAgdC5vcGVyYXRpdm89ICQxIGFuZCB0LmVuYyA9JDJgO1xyXG4gICAgICAgICAgICB2YXIgc29sb0xlY3R1cmEgPSAhIShhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gam9pbiBlc3RhZG9zIHVzaW5nIChvcGVyYXRpdm8sIGVzdGFkbykgLS1wayBlc3RhZG8gdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmdhZG9fZG0gaXMgbm90IG51bGwgb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBwZXJtaXRlX2VkaXRhcl9lbmN1ZXN0YSBhbmQgYXNpZ25hZG8gPD4gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChjb250ZXh0LnVzZXIuaWRwZXIpfVxyXG4gICAgICAgICAgICAgICAgICAgIClgLCBbb3BlcmF0aXZvLCB2aXZpZW5kYV0pLmZldGNoT25lUm93SWZFeGlzdHMoKSkucm93Q291bnQ7XHJcbiAgICAgICAgICAgIHZhciB7cm93fSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGdldEhkclF1ZXJ5KGNvbmR2aXYpLFtvcGVyYXRpdm8sdml2aWVuZGFdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByb3cuaW5mb3JtYWNpb25IZHJbdml2aWVuZGFdLnRhcmVhPXtcclxuICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgbWFpbl9mb3JtXHJcbiAgICAgICAgICAgIH0gO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4ucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmEsXHJcbiAgICAgICAgICAgICAgICBpZFBlcjpjb250ZXh0LnVzZXIuaWRwZXIsXHJcbiAgICAgICAgICAgICAgICBjYXJnYXM6bGlrZUFyLmNyZWF0ZUluZGV4KHJvdy5jYXJnYXMubWFwKGNhcmdhPT4oey4uLmNhcmdhLCBmZWNoYTpjYXJnYS5mZWNoYT9kYXRlLmlzbyhjYXJnYS5mZWNoYSkudG9EbXkoKTpudWxsfSkpLCAnY2FyZ2EnKSxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcEVzdHJ1Y3R1cmE6YmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonZG1fZm9ycGtyYWl6X2Rlc2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZToncGVyc2lzdGVudGVzJyAgICAgICwgdHlwZU5hbWU6J2pzb25iJ30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2bywgcGVyc2lzdGVudGVzfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBvcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsaWtlQXIocGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSkubWFwKGFzeW5jIChyZXNwdWVzdGFzVUFQcmluY2lwYWwsaWRFbmMpPT57XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwdWVzdGFzVUFQcmluY2lwYWwuczFhMV9vYnMgPT0gJyFwcnVlYmEgZGUgZXJyb3IgYWwgZ3JhYmFyIScpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRElPIFBSVUVCQSBERSBFUlJPUiBBTCBHUkFCQVInKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIG9wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50YXJlYS50YXJlYSk7XHJcbiAgICAgICAgICAgICAgICAvL2d1YXJkYXIgcGFyYWxlbGFtZW50ZSBlbiB0YWJsYXMgdWFcclxuICAgICAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgZW5jICR7aWRFbmN9OiBgO1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtX2d1YXJkYXI9e29wZXJhdGl2bzogb3BlcmF0aXZvLGlkX2Nhc286aWRFbmMsIGRhdG9zX2Nhc286cmVzcHVlc3Rhc1VBUHJpbmNpcGFsfVxyXG4gICAgICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2U6IHN0cmluZ3xudWxsO1xyXG4gICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLmluVHJhbnNhY3Rpb24obnVsbCwgYXN5bmMgZnVuY3Rpb24oY2xpZW50KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvKz0gYXdhaXQgcHJvY2VkdXJlR3VhcmRhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1fZ3VhcmRhciwgY2xpZW50KTsgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UgPSByZXN1bHRhZG8gKyBcImRtX2ZvcnBrcmFpel9kZXNjYXJnYXIuIFwiKyBlcnIgO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJNZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBwYXNlX3RhYmxhPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgW29wZXJhdGl2bywgaWRFbmMsIHJlc3VsdGFkb11cclxuICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTsgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICB9KS5hcnJheSgpKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvaydcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonZG1fc2luY3Jvbml6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZToncGVyc2lzdGVudGVzJyAgICAgICAsIHR5cGVOYW1lOidqc29uYid9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIge3BlcnNpc3RlbnRlc30gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICB2YXIgbnVtX3NpbmNybzpudW1iZXI9MDtcclxuICAgICAgICAgICAgdmFyIHRva2VuOnN0cmluZ3xudWxsPXBlcnNpc3RlbnRlcz8udG9rZW47XHJcbiAgICAgICAgICAgIGlmKCF0b2tlbil7XHJcbiAgICAgICAgICAgICAgICB0b2tlbiA9IChhd2FpdCBiZS5wcm9jZWR1cmUudG9rZW5fZ2V0LmNvcmVGdW5jdGlvbihjb250ZXh0LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcmFnZW50OiBjb250ZXh0LnNlc3Npb24ucmVxLnVzZXJhZ2VudCwgXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6IGNvbnRleHQudXNlcm5hbWVcclxuICAgICAgICAgICAgICAgIH0pKS50b2tlbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIge3ZhbHVlfSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIHNpbmNyb25pemFjaW9uZXMgKHRva2VuLCB1c3VhcmlvLCBkYXRvcylcclxuICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKCQxLCQyLCQzKSBcclxuICAgICAgICAgICAgICAgICAgICBSRVRVUk5JTkcgc2luY3JvXHJcbiAgICAgICAgICAgICAgICBgLCBbdG9rZW4sIGNvbnRleHQudXNlcm5hbWUsIHBlcnNpc3RlbnRlc11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCk7XHJcbiAgICAgICAgICAgIG51bV9zaW5jcm89dmFsdWU7XHJcbiAgICAgICAgICAgIHZhciBjb25kdml2PSBgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR0Lm9wZXJhdGl2bz0gJDEgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhc2lnbmFkbyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0dC5vcGVyYWNpb249J2NhcmdhcicgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCAodHQuY2FyZ2Fkb19kbSBpcyBudWxsIG9yIHR0LmNhcmdhZG9fZG0gPSAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKHRva2VuKX0pXHJcbiAgICAgICAgICAgIGBcclxuICAgICAgICAgICAgY29uc3QgVUFfUFJJTkNJUEFMID0gYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTyk7XHJcbiAgICAgICAgICAgIGlmKHBlcnNpc3RlbnRlcyl7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsaWtlQXIocGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSkubWFwKGFzeW5jIChyZXNwdWVzdGFzVUFQcmluY2lwYWwsIGlkRW5jKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJlYSA9IHBlcnNpc3RlbnRlcy5pbmZvcm1hY2lvbkhkcltpZEVuY10udGFyZWEudGFyZWE7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHB1ZWRvR3VhcmRhckVuVEVNPXRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHtwYXJhbXMsc2V0dGVyc30gPSBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlcnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBlc3RhZG8gPSAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0EpfWAsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGNhcmdhZG9fZG09bnVsbGBcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbT1BFUkFUSVZPLCBpZEVuYywgdGFyZWEsIHRva2VuXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHF1ZXJ5VGFyZWFzVGVtID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0ICR7c2V0dGVycy5qb2luKCcsJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkMyBhbmQgY2FyZ2Fkb19kbSA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNcclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgICAgICAgICBwdWVkb0d1YXJkYXJFblRFTT1xdWVyeVRhcmVhc1RlbS5yb3dDb3VudD09MTtcclxuICAgICAgICAgICAgICAgICAgICBpZihwdWVkb0d1YXJkYXJFblRFTSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIE9QRVJBVElWTywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgdGFyZWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2d1YXJkYXIgcGFyYWxlbGFtZW50ZSBlbiB0YWJsYXMgdWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2NlZHVyZUd1YXJkYXIgPSBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0YWRvID0gYGlkIGVuYyAke2lkRW5jfTogYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtX2d1YXJkYXI9e29wZXJhdGl2bzogT1BFUkFUSVZPLGlkX2Nhc286aWRFbmMsIGRhdG9zX2Nhc286cmVzcHVlc3Rhc1VBUHJpbmNpcGFsfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXJyTWVzc2FnZTogc3RyaW5nfG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLmluVHJhbnNhY3Rpb24obnVsbCwgYXN5bmMgZnVuY3Rpb24oY2xpZW50KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8rPSBhd2FpdCBwcm9jZWR1cmVHdWFyZGFyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbV9ndWFyZGFyLCBjbGllbnQpOyAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyTWVzc2FnZSA9IHJlc3VsdGFkbyArIFwiZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhci4gXCIrIGVyciA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSBlcnJNZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJNZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHBhc2VfdGFibGE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIGlkRW5jLCByZXN1bHRhZG9dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZSgnbG9jYWwtcmVjaWJpZG8tc2luLXRva2VuLnR4dCcsIEpTT04uc3RyaW5naWZ5KHtub3c6bmV3IERhdGUoKSx1c2VyOmNvbnRleHQudXNlcm5hbWUsaWRDYXNvOiBpZEVuYyx2aXZpZW5kYTogcmVzcHVlc3Rhc1VBUHJpbmNpcGFsfSkrJ1xcblxcbicsICd1dGY4Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pLmFycmF5KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY29uZHZpdjogXCIsIGNvbmR2aXYpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInF1ZXJ5OiBcIiwgZ2V0SGRyUXVlcnkoY29uZHZpdikpO1xyXG4gICAgICAgICAgICB2YXIge3Jvd30gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShnZXRIZHJRdWVyeShjb25kdml2KSxbT1BFUkFUSVZPLGNvbnRleHQudXNlci5pZHBlcl0pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgnLGdldEhkclF1ZXJ5KGNvbmR2aXYpKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgdXBkYXRlIHRhcmVhc190ZW0gdHRcclxuICAgICAgICAgICAgICAgICAgICBzZXQgIGVzdGFkbyA9ICQ0LCBjYXJnYWRvX2RtPSQzOjp0ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgJHtjb25kdml2fSBcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgZW5jYFxyXG4gICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgW09QRVJBVElWTywgcGFyYW1ldGVycy5lbmM/cGFyYW1ldGVycy5lbmM6Y29udGV4dC51c2VyLmlkcGVyLCB0b2tlbiwgRVNUQURPX1BPU1RFUklPUl9DQVJHQV1cclxuICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4ucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBPUEVSQVRJVk8sIFxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmE6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0b2tlbixcclxuICAgICAgICAgICAgICAgIG51bV9zaW5jcm8sXHJcbiAgICAgICAgICAgICAgICBpZHBlcjpjb250ZXh0LnVzZXIuaWRwZXIsXHJcbiAgICAgICAgICAgICAgICBjYXJnYXM6bGlrZUFyLmNyZWF0ZUluZGV4KHJvdy5jYXJnYXMubWFwKGNhcmdhPT4oey4uLmNhcmdhLCBmZWNoYTpjYXJnYS5mZWNoYT9kYXRlLmlzbyhjYXJnYS5mZWNoYSkudG9EbXkoKTpudWxsLCBlc3RhZG9fY2FyZ2E6J3JlbGV2YW1pZW50byd9KSksICdjYXJnYScpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J2RtX2JhY2t1cCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOid0b2tlbicgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0ZW0nICAgICAgICAgLCB0eXBlTmFtZTonanNvbmInfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIge2JlLCBjbGllbnR9ID1jb250ZXh0O1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIHZhciBudW1fc2luY3JvOm51bWJlcj0wO1xyXG4gICAgICAgICAgICB2YXIgdG9rZW46c3RyaW5nfG51bGw9cGFyYW1ldGVycy50b2tlbjtcclxuICAgICAgICAgICAgaWYodG9rZW4gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge29rOidvazpOL1QnfTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB2YXIge3Jvd0NvdW50fSA9IGF3YWl0IGNsaWVudC5xdWVyeShgc2VsZWN0IDEgZnJvbSB0b2tlbnMgd2hlcmUgdG9rZW4gPSAkMWAsW3Rva2VuXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgaWYoIXJvd0NvdW50KXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge29rOidvazpOL1QnfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwYXJhbWV0ZXJzLnRlbSl7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsaWtlQXIocGFyYW1ldGVycy50ZW0pLm1hcChhc3luYyAoYmFja3VwOmFueSk9PntcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBqc29uX2JhY2t1cCA9ICQzLCBmZWNoYV9iYWNrdXAgPSBjdXJyZW50X3RpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIGpzb25fYmFja3VwIGlzIGRpc3RpbmN0IGZyb20gJDRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIGJhY2t1cC5mb3JQa1JhaXoudml2aWVuZGEsIGJhY2t1cC5yZXNwdWVzdGFzUmFpeiwgYmFja3VwLnJlc3B1ZXN0YXNSYWl6XVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgfSkuYXJyYXkoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG9rOidvaydcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2NvbnNpc3Rpcl92aXZpZW5kYScsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgLHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnLCAgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3ZpdmllbmRhJyAgICAgICAsdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIHtiZSwgY2xpZW50fSA9Y29udGV4dDtcclxuICAgICAgICAgICAgbGV0IHBhcmFtX3Byb2M9e1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IHBhcmFtZXRlcnMudml2aWVuZGFcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2U6IHN0cmluZ3xudWxsO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0YWRvOiBzdHJpbmd8bnVsbDtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0YWRvPSBhd2FpdCBiZS5wcm9jZWR1cmUuY29uc2lzdGlyX2VuY3Vlc3RhLmNvcmVGdW5jdGlvbihjb250ZXh0LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcHJvYywgY2xpZW50XHJcbiAgICAgICAgICAgICAgICApOyAgICBcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICBlcnJNZXNzYWdlID0gXCIgY29uc2lzdGlyX3ZpdmllbmRhLiBcIisgZXJyIDtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVyck1lc3NhZ2UpXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcqKioqKiogY29uc2lzdGlyX3ZpdmllbmRhIHJlc3VsdGFkbzonLHJlc3VsdGFkbykgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG9rOidvaydcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9yZXNjYXRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidsb2NhbFN0b3JhZ2VJdGVtJyAgICAgICAsIHR5cGVOYW1lOidqc29uYid9LFxyXG4gICAgICAgICAgICB7bmFtZTonbG9jYWxTdG9yYWdlSXRlbUtleScgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5sb2dnZWQ6dHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciB7bG9jYWxTdG9yYWdlSXRlbUtleSwgbG9jYWxTdG9yYWdlSXRlbX0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxvY2FsU3RvcmFnZUl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZSgnbG9jYWwtcmVzY2F0ZS50eHQnLCBKU09OLnN0cmluZ2lmeSh7bm93Om5ldyBEYXRlKCksdXNlcjpjb250ZXh0LnVzZXJuYW1lLCBpdGVtS2V5OiBsb2NhbFN0b3JhZ2VJdGVtS2V5LCBpdGVtRGF0YTogbG9jYWxTdG9yYWdlSXRlbX0pKydcXG5cXG4nLCAndXRmOCcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SJyxlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdvcGVyYXRpdm9fZ2V0JyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltdLFxyXG4gICAgICAgIHVubG9nZ2VkOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dClcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2dldF9yYW5kb21fZnJlZV9jYXNlJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOlt7bmFtZTonb3BlcmF0aXZvJyAgICAsIHR5cGVOYW1lOid0ZXh0J31dLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgY29uc3QgbWluc1RvRXhwaXJlID0gMzA7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbnNTaW5jZUJsb3F1ZWQgPSBgZGF0ZV9wYXJ0KCdtaW4nLCBhZ2UoY3VycmVudF90aW1lc3RhbXAsIGZlY2hhX2Jsb3F1ZW8pKWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuYyA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBzZWxlY3QgZW5jIGZyb20gdGVtIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKGxpYnJlIG9yICR7bWluc1NpbmNlQmxvcXVlZH0gPiAke21pbnNUb0V4cGlyZX0pIGxpbWl0IDE7YCxbcGFyYW1zLm9wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFVQREFURSB0ZW0gc2V0IGxpYnJlID0gZmFsc2UsIGZlY2hhX2Jsb3F1ZW89Y3VycmVudF90aW1lc3RhbXAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJgLFtwYXJhbXMub3BlcmF0aXZvLCBlbmMudmFsdWVdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBlbmMudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdhY2Npb25fdGFyZWFzX3RlbV9lamVjdXRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidjb25kaWNpb24nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2FjY2lvbicgICAgICAgICAgLCB0eXBlTmFtZTonanNvbmInfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gIGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBhY2Npb24gPSBwYXJhbXMuYWNjaW9uIGFzIEVzdGFkb0FjY2lvbjtcclxuICAgICAgICAgICAgdmFyIGN1bXBsZTpib29sZWFuID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBhY2Npb25fY3VtcGxlX2NvbmRpY2lvbigkNSwgJDYsICQ3LCAkOCwgKFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdCBjb25kaWNpb24gXHJcbiAgICAgICAgICAgICAgICAgICAgICBmcm9tIGVzdGFkb3NfYWNjaW9uZXMgXHJcbiAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZXN0YWRvID0gJDIgYW5kIGVhY2Npb24gPSAkMyBhbmQgZXN0YWRvX2Rlc3Rpbm8gPSAkNFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApYCwgW1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvLCBcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lYWNjaW9uLCBcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlubyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sIFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkbywgXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW5jLCBcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lYWNjaW9uLFxyXG4gICAgICAgICAgICBdKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICBpZighY3VtcGxlKXtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBObyBzZSBwdWRvIGVqZWN1dGFyIGxhIGFjY2nDs24sIG5vIHNlIGN1bXBsZSBsYSBjb25kaWNpw7NuIFwiJHtwYXJhbXMuY29uZGljaW9ufVwiIG8gYmllbiBlbCBlc3RhZG8gZXN0w6EgZGVzYWN0dWFsaXphZG8sIHJlZnJlc3F1ZSBsYSBncmlsbGEuYClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGVuYz0kMiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVuYywgXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRhcmVhLCBcclxuICAgICAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm9cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBpZihhY2Npb24ubm9tYnJlX3Byb2NlZHVyZSl7XHJcbiAgICAgICAgICAgICAgICBpZihiZS5wcm9jZWR1cmVbYWNjaW9uLm5vbWJyZV9wcm9jZWR1cmVdKXtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmVbYWNjaW9uLm5vbWJyZV9wcm9jZWR1cmVdLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gZXhpc3RlIGVsIHByb2NlZHVyZSBcIiR7YWNjaW9uLm5vbWJyZV9wcm9jZWR1cmV9XCIgZGVmaW5pZG8gZW4gbGEgdGFibGEgXCJlc3RhZG9zX2FjY2lvbmVzXCIgcGFyYSBlbFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogJHthY2Npb24ub3BlcmF0aXZvfSwgZXN0YWRvOiAke2FjY2lvbi5lc3RhZG99LCBlYWNjaW9uOiAke2FjY2lvbi5lYWNjaW9ufS5gKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEJVU0NPIFBBU0UgREUgVEFSRUFcclxuICAgICAgICAgICAgdmFyIHRhcmVhU2lndWllbnRlID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCAqXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfcHJveGltYXNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvID0gJDEgYW5kIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSA9ICQyIGFuZCBlc3RhZG8gPSAkMyBhbmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhX2N1bXBsZV9jb25kaWNpb24oJDQsICQ1LCAkNiwgJDcsIGNvbmRpY2lvbilcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBvcmRlblxyXG4gICAgICAgICAgICAgICAgICAgIGxpbWl0IDFgXHJcbiAgICAgICAgICAgICxbXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLCBcclxuICAgICAgICAgICAgICAgIHBhcmFtcy50YXJlYSxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlubyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sIFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVuY1xyXG4gICAgICAgICAgICBdKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCkpLnJvdztcclxuICAgICAgICAgICAgaWYodGFyZWFTaWd1aWVudGUpe1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmBcclxuICAgICAgICAgICAgICAgICAgICAsW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIHRhcmVhU2lndWllbnRlLnRhcmVhX2Rlc3Rpbm9dXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXV0b0FzaWduYWRvID0gdGFyZWFTaWd1aWVudGUucmVnaXN0cmFfcmVjZXBjaW9uaXN0YT9jb250ZXh0LnVzZXIuaWRwZXI6bnVsbDtcclxuICAgICAgICAgICAgICAgIGxldCBxID0gY29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWw7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRzX2VudHJhZGEgPSBjdXJyZW50X3RpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHthdXRvQXNpZ25hZG8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsIHJlY2VwY2lvbmlzdGE9XCIrcShhdXRvQXNpZ25hZG8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XCJcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYFxyXG4gICAgICAgICAgICAgICAgICAgICxbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgdGFyZWFTaWd1aWVudGUudGFyZWFfZGVzdGlub11cclxuICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBGSU4gUEFTRSBERSBUQVJFQVxyXG4gICAgICAgICAgICByZXR1cm4gXCJva1wiO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfY2FyZ2FfcHJlcGFyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSAnY2FyZ2FyJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZGlzcG9uaWJpbGl6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBhc2lnbmFkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rlc2NhcmdhX3ByZXBhcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJ2Rlc2NhcmdhcidcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2Rlc2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICdjYXJnYXInXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9hbmFsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5jb25zaXN0aXJfZW5jdWVzdGEuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHtvcGVyYXRpdm86cGFyYW1zLm9wZXJhdGl2bywgaWRfY2FzbzpwYXJhbXMuZW5jfSlcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV92ZXJpZmljYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB2ZXJpZmljYWRvID0gJzEnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub192ZXJpZmljYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB2ZXJpZmljYWRvID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfY2VycmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9ICcxJywgYXNpZ25hZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jLCBjb250ZXh0LnVzZXIuaWRwZXJdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19jZXJyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB2ZXJpZmljYWRvID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfc3VwZXJ2aXNhcl9wcmVzZW5jaWFsJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdzdXBlJywgMV0pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3N1cGVydmlzYXJfdGVsZWZvbmljYScsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnc3VwZScsIDJdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19zdXBlcnZpc2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2ZpbmMnXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfcGFzYXJfYV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQ0MnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhIGluICgkMywkNCkgLS1xdWllcm8gcGFzYXIgbGFzIDIgdGFyZWFzIGEgQ0NcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnLCAncHJvYyddKVxyXG4gICAgICAgICAgICAuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX3Bhc2FyX2FfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAncHJvYyddKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0EnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAncHJvYyddKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJzBEJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZGV2b2x2ZXJfcHJvY19kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdwcm9jJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdwcm9jJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfdmVyaWZpY2FyLmNvcmVGdW5jdGlvbihjb250ZXh0LHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fZGV2b2x2ZXJfcHJvY19kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX25vX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCxwYXJhbXMpO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfcGFzYXJfYV9hbmFjLmNvcmVGdW5jdGlvbihjb250ZXh0LHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKntcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9yZWN1cGVyYXJfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBmb3J6YXJUYXJlYUVuY3Vlc3RhUHJvYyA9IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV9mb3J6YXJfdGFyZWE7XHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLGVuYyx0YXJlYTp0YXJlYV9hY3R1YWx9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICBhd2FpdCBmb3J6YXJUYXJlYUVuY3Vlc3RhUHJvYy5jb3JlRnVuY3Rpb24oY29udGV4dCx7b3BlcmF0aXZvLGVuYyx0YXJlYV9hY3R1YWwsdGFyZWFfbnVldmE6J3JlY3UnfSk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9mb3J6YXJfdGFyZWEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhX2FjdHVhbCcgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWFfbnVldmEnICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbCwgdGFyZWFfbnVldmF9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbCwgdGFyZWFfbnVldmFdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnMEQnIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgaW4gKCQzLCAkNClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbCwgdGFyZWFfbnVldmFdKVxyXG4gICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuXHJcbiAgICAgICAgICAgIGlmKHJlc3VsdC5yb3dDb3VudCAhPSAyKXtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBTZSBlc3BlcmFiYW4gMiByZWdpc3Ryb3MgeSBzZSBvYnR1dm8vb2J0dXZpZXJvbiAke3Jlc3VsdC5yb3dDb3VudH1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBhc2lnbmFkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhICA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCB0YXJlYV9udWV2YV0pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG5cclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHJlY2VwY2lvbmlzdGEgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSAgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfbnVldmFdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAqL1xyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2hhYmlsaXRhcl9kZXNoYWJpbGl0YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBoYWJpbGl0YWRhID0gbm90IGhhYmlsaXRhZGFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiBBQ0NJT05fUEFTQVJfUFJPSUUsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1ldHJvcyA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgKiBmcm9tIHBhcmFtZXRyb3Mgd2hlcmUgdW5pY29fcmVnaXN0cm9gLFxyXG4gICAgICAgICAgICBbXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG4gICAgICAgICAgICB2YXIgc2VsZWN0ID0gYHNlbGVjdCB0Lm9wZXJhdGl2bywgdC5lbmMsIHQudGFyZWFfYWN0dWFsLCB0dC50c19lbnRyYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gdHQgam9pbiB0ZW0gdCB1c2luZyAob3BlcmF0aXZvLGVuYylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2bz0kMSBhbmQgdHQudGFyZWE9ICQyIGFuZCAoJHtnZXREaWFzQVBhc2FyUXVlcnkoJ3R0Jyl9IDw9IDAgb3IgY29hbGVzY2UodHQuYWRlbGFudGFyLGZhbHNlKSkgYW5kIHR0LnRhcmVhID0gdC50YXJlYV9hY3R1YWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYDtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnVidcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdHQuZW5jID0gYXV4LmVuYyBhbmQgdHQudGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJywgJ2ZpbmMnXSlcclxuICAgICAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIC8vVE9ETyBhc2lnbmFyIGVuIHByb2Nlc2FtaWVudG9cclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdHQuZW5jID0gYXV4LmVuYyBhbmQgdHQudGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW0gdFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAncHJvYydcclxuICAgICAgICAgICAgICAgICAgICBmcm9tICgke3NlbGVjdH0pIGF1eFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdC5lbmMgPSBhdXguZW5jXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgICxcclxuICAgICAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYyddKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOidpbnRlcmNhbWJpYXJfZW5jdWVzdGFzJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J2VuYzEnICAgICAgICAgICAgLHJlZmVyZW5jZXM6J3RlbScgLCB0eXBlTmFtZTondGV4dCcgICAgfSxcclxuICAgICAgICAgICAge25hbWU6J2NhbnRIb2cxJyAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTonaW50ZWdlcicgfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYzInICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCcgICAgfSxcclxuICAgICAgICAgICAge25hbWU6J2NhbnRIb2cyJyAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTonaW50ZWdlcicgfSxcclxuICAgICAgICAgICAge25hbWU6J3Bhc28nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTonaW50ZWdlcicgfSxcclxuICAgICAgICAgICAge25hbWU6J2NvbmZpcm1hJyAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTonYm9vbGVhbicsIGRlZmF1bHRWYWx1ZTpmYWxzZSwgbGFiZWw6J0NvbmZpcm1hIGludGVyY2FtYmlvIGRlIGxvcyBkYXRvcyBlbnRyZSBsYXMgZW5jdWVzdGFzPyAnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczpbJ2Nvb3JfcHJvYycsJ3Byb2Nlc2FtaWVudG8nLCdhZG1pbiddLFxyXG4gICAgICAgIHByb2dyZXNzOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFBhcmEgY29udHJvbGFyOlxyXG4gICAgICAgICAgICAgKiAtIHF1ZSBsYXMgaG9nYXJlcywgcGVyc29uYXMsIGV0YyBlc3TDqW4gaW50ZXJjYW1iaWFkYXMgXHJcbiAgICAgICAgICAgICAqICAqIHRhbnRvIGVuIGVsIGpzb25cclxuICAgICAgICAgICAgICogICogY29tbyBlbiBsYXMgVERzXHJcbiAgICAgICAgICAgICAqIC0gY29zYXMgcXVlIHNlIGNhbGN1bGFuIHBvciBsYSBhcHA/IGN1YWxlcz8gKHJlc3VtZW5fZXN0YWRvLCByZWEgeSBub3JlYSlcclxuICAgICAgICAgICAgICovXHJcblxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5jb25maXJtYSl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbmZpcm3DsyBpbnRlcmNhbWJpbycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCAhcGFyYW1zLmVuYzEgfHwgIXBhcmFtcy5lbmMyKSAge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgRmFsdGEgaW5ncmVzYXIgdW4gbnVtZXJvIGRlIGVuY3Vlc3RhIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICggcGFyYW1zLmVuYzE9PXBhcmFtcy5lbmMyKSAge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgZW5jMSB5IGVuYzIgZGViZW4gc2VyIGRpc3RpbnRvcyEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5jYW50SG9nMSkgIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIENhbnRpZGFkIGRlIEhvZ2FyZXMgZGUgZW5jMSwgbm8gZXN0YSBpbmdyZXNhZG8hJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY2FudEhvZzIpICB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBDYW50aWRhZCBkZSBIb2dhcmVzIGRlIGVuYzIsIG5vIGVzdGEgaW5ncmVzYWRvIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENPTlRST0xBUiBRVUUgTklOR1VOQSBERSBMQVMgMiBlbmN1ZXN0YXMgRVNURSBDQVJHQURBLCBBQklFUlRBIEZBTFRBXHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgY2FudF9ob2dzPShhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3Qgdml2aWVuZGEsIGNvdW50KCopbmggZnJvbSBob2dhcmVzIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKHZpdmllbmRhPSQyIG9yIHZpdmllbmRhPSQzKVxyXG4gICAgICAgICAgICAgICAgZ3JvdXAgYnkgdml2aWVuZGEgb3JkZXIgYnkgdml2aWVuZGFcclxuICAgICAgICAgICAgICAgIGAsW09QRVJBVElWTywgcGFyYW1zLmVuYzEsIHBhcmFtcy5lbmMyXSkuZmV0Y2hBbGwoKSkucm93cztcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgcGFyYW1fbmg9W3BhcmFtcy5jYW50SG9nMSxwYXJhbXMuY2FudEhvZzJdO1xyXG4gICAgICAgICAgICBjYW50X2hvZ3MuZm9yRWFjaCgoeGUsaSk9PntcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbV9uaFtpXSAhPT0geGUubmgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWVucz1gRXJyb3IsIG5vIGNvaW5jaWRlIGxhIGNhbnRpZGFkIGRlIGhvZ2FyZXMgZGUgZW5jJHtpKzF9YDtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoeG1lbnMpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7ICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHJlZ0VuYz0oYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBzZWxlY3QgZW5jLCB0YXJlYV9hY3R1YWwsIGpzb25fZW5jdWVzdGEgZnJvbSB0ZW0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAoZW5jID0kMiBvciBlbmM9JDMpIG9yZGVyIGJ5IGVuY1xyXG4gICAgICAgICAgICBgLFtPUEVSQVRJVk8sIHBhcmFtcy5lbmMxLCBwYXJhbXMuZW5jMl0pLmZldGNoQWxsKCkpLnJvd3M7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAocmVnRW5jLmxlbmd0aCE9Mil7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBObyBzZSBlbmNvbnRyYXJvbiAyIGVuY3Vlc3RhcycpICAgIFxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIC8vIGxpbXBpYSBsYXMgVERzICBcclxuICAgICAgICAgICAgICAgIGxldCBbZW5jMSxlbmMyXSA9IFtyZWdFbmNbMF0sIHJlZ0VuY1sxXV1cclxuICAgICAgICAgICAgICAgIGlmKHBhcmFtcy5wYXNvID09IDEpe1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgZGVsZXRlIGZyb20gdml2aWVuZGFzIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKHZpdmllbmRhPSQyIE9SIHZpdmllbmRhPSQzKWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLCBbT1BFUkFUSVZPLCBlbmMxLmVuYywgZW5jMi5lbmNdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihwYXJhbXMucGFzbyA9PSAyKXtcclxuICAgICAgICAgICAgICAgICAgICAvL3NpbXVsYSBndWFyZGFkb1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgT1BFUkFUSVZPLCBlbmMxLmVuYywgZW5jMS50YXJlYV9hY3R1YWwgLCBlbmMyLmpzb25fZW5jdWVzdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3Jpbyhjb250ZXh0LCBPUEVSQVRJVk8sIGVuYzIuZW5jLCBlbmMyLnRhcmVhX2FjdHVhbCAsIGVuYzEuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKGBMaXN0byBwYXNvICR7cGFyYW1zLnBhc299LiBJbnRlcmNhbWJpbyByZWFsaXphZG8gZW50cmUgbGFzIGVuY3Vlc3RhcyAgJHtwYXJhbXMuZW5jMX0geSAke3BhcmFtcy5lbmMyfS4gUG9yIGZhdm9yIGNvbnNpc3RhIGxhIGVuY3Vlc3RhYClcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgeyAgICAgXHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFkb3JfZG1zX21vc3RyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0JywgcmVmZXJlbmNlczpcIm9wZXJhdGl2b3NcIn0sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmN1ZXN0YWRvcicgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOidtb3N0cmFyX2VuY3Vlc3Rhc19hX2JsYW5xdWVhcicsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGFzaWduYWRvID0gJDIgYW5kIGNhcmdhZG9fZG0gaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBjYXJnYWRvX2RtXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmN1ZXN0YWRvcl0pXHJcbiAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBpZihyZXN1bHQucm93Q291bnQgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciAoYE5vIHNlIGVuY29udHJhcm9uIGVuY3Vlc3RhcyBjYXJnYWRhcyBlbiB1biBETSBwYXJhIGVsIG9wZXJhdGl2byAke3BhcmFtcy5vcGVyYXRpdm99LCBlbmN1ZXN0YWRvciAke3BhcmFtcy5lbmN1ZXN0YWRvcn1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7cm93czogcmVzdWx0LnJvd3MsIG9wZXJhdGl2bzogcGFyYW1zLm9wZXJhdGl2b307XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9ibGFucXVlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0JywgcmVmZXJlbmNlczpcIm9wZXJhdGl2b3NcIn0sXHJcbiAgICAgICAgICAgIHtuYW1lOid0b2tlbicgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgbGV0IHRhcmVhc1RlbVJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGNhcmdhZG9fZG0gPSBudWxsLCBvcGVyYWNpb24gPSAnZGVzY2FyZ2FyJywgZXN0YWRvID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGNhcmdhZG9fZG0gPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudG9rZW4sIEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0FdKVxyXG4gICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYodGFyZWFzVGVtUmVzdWx0LnJvd0NvdW50ID09IDApe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3IoJ05vIHNlIGJsYW5xdWXDsyBuaW5ndW5hIGVuY3Vlc3RhJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IobGV0IHR0IG9mIHRhcmVhc1RlbVJlc3VsdC5yb3dzKXtcclxuICAgICAgICAgICAgICAgIHR0LnJlc3VsdF9ibGFucXVlbyA9IGBlbmMgJHt0dC5lbmN9IHNlIGJsYW5xdWXDsyBjb3JyZWN0YW1lbnRlLmA7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0QmFja3VwID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGpzb25fZW5jdWVzdGEgPSBqc29uX2JhY2t1cCwgZmVjaGFfbW9kaWZfZW5jdWVzdGEgPSBmZWNoYV9iYWNrdXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIGZlY2hhX2JhY2t1cCA+IGNvYWxlc2NlKGZlY2hhX21vZGlmX2VuY3Vlc3RhLCAnMTkwMC0wMS0wMScpIGFuZCBqc29uX2JhY2t1cCBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgW3R0Lm9wZXJhdGl2bywgdHQuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICBpZihyZXN1bHRCYWNrdXAucm93Q291bnQpe1xyXG4gICAgICAgICAgICAgICAgICAgIHR0LnJlc3VsdF9ibGFucXVlbys9YCBTZSByZXN0YWJsZWNpw7MgZWwgYmFja3VwIGNvbiBmZWNoYSAke3Jlc3VsdEJhY2t1cC5yb3cuZmVjaGFfYmFja3VwLnRvWW1kSG1zKCl9LmBcclxuICAgICAgICAgICAgICAgICAgICB2YXIge3BhcmFtczpxdWVyeVBhcmFtcyxzZXR0ZXJzfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE6IHR0LnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWw6IHJlc3VsdEJhY2t1cC5yb3cuanNvbl9lbmN1ZXN0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogW3R0Lm9wZXJhdGl2bywgdHQuZW5jLCB0dC50YXJlYV1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgcmVzdWx0QmFja3VwLnJvdy5vcGVyYXRpdm8sIHJlc3VsdEJhY2t1cC5yb3cuZW5jLCB0dC50YXJlYSxyZXN1bHRCYWNrdXAucm93Lmpzb25fZW5jdWVzdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmVhc1RlbVJlc3VsdC5yb3dzO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbl07XHJcbiJdfQ==
|
|
1453
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlcy1kbWVuY3UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Byb2NlZHVyZXMtZG1lbmN1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUFJYixrQ0FBa0M7SUFDbEMsaURBQStCO0lBRy9CLHlEQUE4QztJQUU5QywrQ0FBNkM7SUFDN0MsMkJBQW1DO0lBRW5DLGdEQUFnRDtJQUdoRCx5REFBd0Q7SUFDeEQscUNBQWdDO0lBRWhDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFcEMsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRTNDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUM3QixNQUFNLGNBQWMsR0FBRSxXQUFXLENBQUM7SUFDbEMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7SUFDbkMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFFL0IsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsT0FBd0IsRUFBQyxFQUFFOztRQUNoRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BCLElBQUksTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBQyxFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFDdkcsSUFBRyxNQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsMENBQUUsU0FBUyxFQUFDO1lBQ3BCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtTQUM3QjthQUFJO1lBQ0QsTUFBTSxLQUFLLENBQUUscURB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WSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUE7d0JBQ3RHLElBQUksRUFBQyxNQUFNLEVBQUMsV0FBVyxFQUFDLE9BQU8sRUFBQyxHQUFHLCtDQUErQyxDQUFDOzRCQUMvRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUs7NEJBQ2YscUJBQXFCLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxhQUFhOzRCQUNyRCxPQUFPLEVBQUUsRUFBRTs0QkFDWCxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQzt5QkFDM0MsQ0FBQyxDQUFBO3dCQUNGLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ3RCO2tDQUNVLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDOzsyQ0FFUixFQUVuQixXQUFXLENBQ2QsQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDbkIsTUFBTSwyQ0FBMkMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFBO3FCQUN4SjtpQkFDSjtnQkFDRCxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFDaEMsQ0FBQztTQUNKO0tBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgUHJvY2VkdXJlRGVmLCBUYWJsZURlZmluaXRpb24sIENsaWVudCwgVGFibGVEZWZpbml0aW9ucyB9IGZyb20gXCIuL3R5cGVzLWRtZW5jdVwiO1xyXG5pbXBvcnQgeyBQcm9jZWR1cmVDb250ZXh0LCBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzLCBGb3JlaWduS2V5IH0gZnJvbSBcIm1ldGEtZW5jXCI7XHJcbmltcG9ydCAqIGFzIGxpa2VBciBmcm9tIFwibGlrZS1hclwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy1kbWVuY3VcIjtcclxuaW1wb3J0IHsgSWRVbmlkYWRBbmFsaXNpcywgVW5pZGFkQW5hbGlzaXMsIEVzdGFkb0FjY2lvbiwgSWRFbmMsIElkVGFyZWEsIFJlc3B1ZXN0YXNSYWl6LCBJZE9wZXJhdGl2byB9IGZyb20gXCIuLi91bmxvZ2dlZC90aXBvc1wiO1xyXG5cclxuaW1wb3J0IHtqc29uLCBqc29ub30gZnJvbSBcInBnLXByb21pc2Utc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQge2NoYW5naW5nLCBkYXRlIH0gZnJvbSAnYmVzdC1nbG9iYWxzJztcclxuaW1wb3J0IHtwcm9taXNlcyBhcyAgZnN9IGZyb20gXCJmc1wiO1xyXG5cclxuaW1wb3J0ICogYXMgRXhwcmVzaW9uUGFyc2VyIGZyb20gJ2V4cHJlLXBhcnNlcic7XHJcbmltcG9ydCB7IHRhcmVhcyB9IGZyb20gXCIuL3RhYmxlLXRhcmVhc1wiO1xyXG5pbXBvcnQgeyBwcmVwZW5kTGlzdGVuZXIgfSBmcm9tIFwicHJvY2Vzc1wiO1xyXG5pbXBvcnQgeyBnZXREaWFzQVBhc2FyUXVlcnkgfSBmcm9tIFwiLi90YWJsZS10YXJlYXNfdGVtXCI7XHJcbmltcG9ydCB7IGVycm9yIH0gZnJvbSBcImNvbnNvbGVcIjtcclxuXHJcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG52YXIgc3FsVG9vbHMgPSByZXF1aXJlKCdzcWwtdG9vbHMnKTtcclxuXHJcbnZhciBkaXNjcmVwYW5jZXMgPSByZXF1aXJlKCdkaXNjcmVwYW5jZXMnKTtcclxuXHJcbmNvbnN0IGZvcm1QcmluY2lwYWwgPSAnRjpGMSc7XHJcbmNvbnN0IE1BSU5fVEFCTEVOQU1FID0ndml2aWVuZGFzJztcclxuY29uc3QgRVNUQURPX1BPU1RFUklPUl9DQVJHQSA9ICdDJztcclxuY29uc3QgRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQSA9ICdEJztcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRPcGVyYXRpdm9BY3R1YWwgPSBhc3luYyAoY29udGV4dDpQcm9jZWR1cmVDb250ZXh0KT0+e1xyXG4gICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgIHZhciByZXN1bHQgPSBhd2FpdCBiZS5wcm9jZWR1cmUudGFibGVfZGF0YS5jb3JlRnVuY3Rpb24oY29udGV4dCx7dGFibGU6IGBwYXJhbWV0cm9zYCwgZml4ZWRGaWVsZHM6W119KTtcclxuICAgIGlmKHJlc3VsdFswXT8ub3BlcmF0aXZvKXtcclxuICAgICAgICByZXR1cm4gcmVzdWx0WzBdLm9wZXJhdGl2b1xyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IgKCdubyBzZSBjb25maWd1csOzIHVuIG9wZXJhdGl2byBlbiBsYSB0YWJsYSBwYXLDoW1ldHJvcycpO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuLypkZWZpbmljacOzbiBkZSBlc3RydWN0dXJhIGNvbXBsZXRhLCBjdWFuZG8gZXhpc3RhIGluZy1lbmMgaGF5IHF1ZSBwb25lcmxvIGFow60qLyBcclxudHlwZSBFc3RydWN0dXJhVGFibGE9e3RhYmxlTmFtZTpzdHJpbmcsIHBrRmllbGRzOntmaWVsZE5hbWU6c3RyaW5nfVtdLCBjaGlsZFRhYmxlczpFc3RydWN0dXJhVGFibGFbXX07XHJcbmZ1bmN0aW9uIGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHRhYmxlTmFtZTpzdHJpbmcpe1xyXG4gICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgIHZhciBtYWluVGFibGVEZWY6VGFibGVEZWZpbml0aW9uID0gYmUudGFibGVTdHJ1Y3R1cmVzW3RhYmxlTmFtZV0oY29udGV4dCk7XHJcbiAgICB2YXIgZ2V0UGtGcm9tVGFibGVEZWYgPSBmdW5jdGlvbiBnZXRQa0Zyb21UYWJsZURlZih0YWJsZURlZjpUYWJsZURlZmluaXRpb24pe1xyXG4gICAgICAgIHJldHVybiB0YWJsZURlZi5wcmltYXJ5S2V5Lm1hcChmdW5jdGlvbihwayl7XHJcbiAgICAgICAgICAgIHJldHVybiB7ZmllbGROYW1lOnBrfTtcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxuICAgIHZhciBnZXRGa0Zyb21UYWJsZURlZiA9IGZ1bmN0aW9uIGdldEZrRnJvbVRhYmxlRGVmKHRhYmxlRGVmOlRhYmxlRGVmaW5pdGlvbiwgcGFyZW50VGFibGVOYW1lOiBzdHJpbmcpe1xyXG4gICAgICAgIC8vIHJldHVybiB0YWJsZURlZi5mb3JlaWduS2V5cz8gdGFibGVEZWYuZm9yZWlnbktleXMubWFwKGZrPT5may5maWVsZHMpOiBbXTtcclxuICAgICAgICBsZXQgcGFyZW50RmsgPSAoPEZvcmVpZ25LZXlbXT4gdGFibGVEZWYuZm9yZWlnbktleXMpLmZpbmQoZms9PmZrLnJlZmVyZW5jZXMgPT0gcGFyZW50VGFibGVOYW1lKTtcclxuICAgICAgICByZXR1cm4gcGFyZW50Rms/IHBhcmVudEZrLmZpZWxkczogW107XHJcbiAgICB9XHJcbiAgICB2YXIgc3RydWN0OkVzdHJ1Y3R1cmFUYWJsYT17XHJcbiAgICAgICAgdGFibGVOYW1lOm1haW5UYWJsZURlZi5uYW1lLFxyXG4gICAgICAgIHBrRmllbGRzOmdldFBrRnJvbVRhYmxlRGVmKG1haW5UYWJsZURlZiksXHJcbiAgICAgICAgY2hpbGRUYWJsZXM6W11cclxuICAgIH07XHJcbiAgICBpZihtYWluVGFibGVEZWYuZGV0YWlsVGFibGVzICYmIG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMubGVuZ3RoKXtcclxuICAgICAgICBtYWluVGFibGVEZWYuZGV0YWlsVGFibGVzLmZvckVhY2goZnVuY3Rpb24oZGV0YWlsVGFibGUpe1xyXG4gICAgICAgICAgICBzdHJ1Y3QuY2hpbGRUYWJsZXMucHVzaChcclxuICAgICAgICAgICAgICAgIGNoYW5naW5nKFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0LCBkZXRhaWxUYWJsZS50YWJsZSksXHJcbiAgICAgICAgICAgICAgICAgICAge2ZrRmllbGRzOiBnZXRGa0Zyb21UYWJsZURlZihiZS50YWJsZVN0cnVjdHVyZXNbZGV0YWlsVGFibGUudGFibGVdKGNvbnRleHQpLCB0YWJsZU5hbWUpfVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RydWN0O1xyXG59XHJcbi8qIGZpbiBkZWZpbmljaW9uIGVzdHJ1Y3R1cmEgY29tcGxldGEgKi9cclxuXHJcbnR5cGUgQW55T2JqZWN0ID0ge1trOnN0cmluZ106YW55fVxyXG5cclxudmFyIGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvID0gKGZ1blBhcmFtczp7dGFyZWE6SWRUYXJlYSwgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOlJlc3B1ZXN0YXNSYWl6LCBzZXR0ZXJzOnN0cmluZ1tdLCBwYXJhbXM6YW55W119KT0+e1xyXG4gICAgbGV0IHt0YXJlYSxyZXNwdWVzdGFzVUFQcmluY2lwYWwsc2V0dGVycyxwYXJhbXN9ID0gZnVuUGFyYW1zO1xyXG4gICAgbGV0IHtyZXN1bWVuRXN0YWRvU3VwLCBjb2ROb1JlYVN1cCwgY29kUmVhU3VwLCByZXN1bWVuRXN0YWRvLCBjb2ROb1JlYSwgY29kUmVhfSA9IHJlc3B1ZXN0YXNVQVByaW5jaXBhbDtcclxuICAgIHNldHRlcnMgPSBzZXR0ZXJzLmNvbmNhdChbXHJcbiAgICAgICAgYHJlc3VtZW5fZXN0YWRvJHt0YXJlYT09J3N1cGUnPydfc3VwJzonJ309JCR7cGFyYW1zLmxlbmd0aCsxfWAsXHJcbiAgICAgICAgYG5vcmVhJHt0YXJlYT09J3N1cGUnPydfc3VwJzonJ309JCR7cGFyYW1zLmxlbmd0aCsyfWAsXHJcbiAgICAgICAgYHJlYSR7dGFyZWE9PSdzdXBlJz8nX3N1cCc6Jyd9PSQke3BhcmFtcy5sZW5ndGgrM31gXHJcbiAgICBdKVxyXG4gICAgcGFyYW1zID0gcGFyYW1zLmNvbmNhdChbXHJcbiAgICAgICAgdGFyZWE9PSdzdXBlJz9yZXN1bWVuRXN0YWRvU3VwOnJlc3VtZW5Fc3RhZG8sXHJcbiAgICAgICAgdGFyZWE9PSdzdXBlJz9jb2ROb1JlYVN1cDpjb2ROb1JlYSxcclxuICAgICAgICB0YXJlYT09J3N1cGUnP2NvZFJlYVN1cDpjb2RSZWFcclxuICAgIF0pO1xyXG4gICAgcmV0dXJuIHtzZXR0ZXJzLHBhcmFtc31cclxufVxyXG5cclxudmFyIGd1YXJkYXJFbmN1ZXN0YUVuVGVtID0gYXN5bmMgKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOklkT3BlcmF0aXZvLCBpZEVuYzpJZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOlJlc3B1ZXN0YXNSYWl6LCB0YXJlYTpJZFRhcmVhKT0+e1xyXG4gICAgdmFyIHtwYXJhbXMsc2V0dGVyc30gPSBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyh7XHJcbiAgICAgICAgdGFyZWEsXHJcbiAgICAgICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLFxyXG4gICAgICAgIHNldHRlcnM6IFtganNvbl9lbmN1ZXN0YSA9ICQzYCwgYGZlY2hhX21vZGlmX2VuY3Vlc3RhID0gY3VycmVudF90aW1lc3RhbXBgXSxcclxuICAgICAgICBwYXJhbXM6IFtvcGVyYXRpdm8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWxdXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAsXHJcbiAgICAgICAgcGFyYW1zXHJcbiAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbn1cclxuXHJcbnZhciBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQgLG9wZXJhdGl2bzogc3RyaW5nLCBlbmM6IElkRW5jLCB0YXJlYTogSWRUYXJlYSwganNvbl9lbmN1ZXN0YTphbnkgKT0+e1xyXG4gICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBvcGVyYXRpdm8pO1xyXG4gICAgcmV0dXJuIGF3YWl0IGJlLnByb2NlZHVyZS5kbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyLmNvcmVGdW5jdGlvbihcclxuICAgICAgICBjb250ZXh0LCBcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG9wZXJhdGl2bzpvcGVyYXRpdm8sIFxyXG4gICAgICAgICAgICBwZXJzaXN0ZW50ZXM6e1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhczp7XHJcbiAgICAgICAgICAgICAgICAgICAgW1VBX1BSSU5DSVBBTF06IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2VuY106IGpzb25fZW5jdWVzdGFcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaW5mb3JtYWNpb25IZHI6e1xyXG4gICAgICAgICAgICAgICAgICAgIFtlbmNdOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgKVxyXG59XHJcblxyXG5cclxudmFyIGdldEhkclF1ZXJ5ID0gIGZ1bmN0aW9uIGdldEhkclF1ZXJ5KHF1b3RlZENvbmRWaXY6c3RyaW5nKXtcclxuICAgIHJldHVybiBgXHJcbiAgICB3aXRoIHZpdmllbmRhcyBhcyBcclxuICAgICAgICAoc2VsZWN0IHQuZW5jLCB0Lmpzb25fZW5jdWVzdGEgYXMgcmVzcHVlc3RhcywgdC5yZXN1bWVuX2VzdGFkbyBhcyBcInJlc3VtZW5Fc3RhZG9cIiwgXHJcbiAgICAgICAgICAgIGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICdkb21pbmlvJyAgICAgICAsIGRvbWluaW8gICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ25vbWNhbGxlJyAgICAgICwgbm9tY2FsbGUgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnc2VjdG9yJyAgICAgICAgLCBzZWN0b3IgICAgICAgICxcclxuICAgICAgICAgICAgICAgICdlZGlmaWNpbycgICAgICAsIGVkaWZpY2lvICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ2VudHJhZGEnICAgICAgICwgZW50cmFkYSAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnbnJvY2F0YXN0cmFsJyAgLCBucm9jYXRhc3RyYWwgICxcclxuICAgICAgICAgICAgICAgICdwaXNvJyAgICAgICAgICAsIHBpc28gICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ2RlcGFydGFtZW50bycgICwgZGVwYXJ0YW1lbnRvICAsXHJcbiAgICAgICAgICAgICAgICAnaGFiaXRhY2lvbicgICAgLCBoYWJpdGFjaW9uICAgICxcclxuICAgICAgICAgICAgICAgICdjYXNhJyAgICAgICAgICAsIGNhc2EgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ3ByaW9yaWRhZCcgICAgICwgcmVzZXJ2YSsxICAgICAsXHJcbiAgICAgICAgICAgICAgICAnb2JzZXJ2YWNpb25lcycgLCB0dC5jYXJnYV9vYnNlcnZhY2lvbmVzICxcclxuICAgICAgICAgICAgICAgICdjaXRhJyAgICAgICAgICAsIGNpdGEgLFxyXG4gICAgICAgICAgICAgICAgJ2NhcmdhJyAgICAgICAgICwgdC5hcmVhICAgICAgICAgXHJcbiAgICAgICAgICAgICkgYXMgdGVtLCB0LmFyZWEsXHJcbiAgICAgICAgICAgIC0tVE9ETzogR0VORVJBTElaQVJcclxuICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ3RhcmVhJywgdHQudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAnZmVjaGFfYXNpZ25hY2lvbicsIGZlY2hhX2FzaWduYWNpb24sXHJcbiAgICAgICAgICAgICAgICAnYXNpZ25hZG8nLCBhc2lnbmFkbyxcclxuICAgICAgICAgICAgICAgICdtYWluX2Zvcm0nLCBtYWluX2Zvcm1cclxuICAgICAgICAgICAgKSBhcyB0YXJlYSxcclxuICAgICAgICAgICAgbWluKGZlY2hhX2FzaWduYWNpb24pIGFzIGZlY2hhX2FzaWduYWNpb25cclxuICAgICAgICAgICAgZnJvbSB0ZW0gdCBsZWZ0IGpvaW4gdGFyZWFzX3RlbSB0dCBvbiAodC5vcGVyYXRpdm8gPSB0dC5vcGVyYXRpdm8gYW5kIHQuZW5jID0gdHQuZW5jIGFuZCB0LnRhcmVhX2FjdHVhbCA9IHR0LnRhcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgIGxlZnQgam9pbiB0YXJlYXMgdGEgb24gdC50YXJlYV9hY3R1YWwgPSB0YS50YXJlYVxyXG4gICAgICAgICAgICB3aGVyZSB0LmhhYmlsaXRhZGEgYW5kICR7cXVvdGVkQ29uZFZpdn1cclxuICAgICAgICAgICAgZ3JvdXAgYnkgdC5lbmMsIHQuanNvbl9lbmN1ZXN0YSwgdC5yZXN1bWVuX2VzdGFkbywgZG9taW5pbywgbm9tY2FsbGUsc2VjdG9yLGVkaWZpY2lvLCBlbnRyYWRhLCBucm9jYXRhc3RyYWwsIHBpc28sZGVwYXJ0YW1lbnRvLGhhYml0YWNpb24sY2FzYSxyZXNlcnZhLHR0LmNhcmdhX29ic2VydmFjaW9uZXMsIGNpdGEsIHQuYXJlYSwgdHQudGFyZWEsIGZlY2hhX2FzaWduYWNpb24sIGFzaWduYWRvLCBtYWluX2Zvcm1cclxuICAgICAgICApXHJcbiAgICAgICAgc2VsZWN0IGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICd2aXZpZW5kYXMnLCAke2pzb25vKFxyXG4gICAgICAgICAgICAgICAgICAgIGBzZWxlY3QgZW5jLCByZXNwdWVzdGFzLCBqc29uYl9idWlsZF9vYmplY3QoJ3Jlc3VtZW5Fc3RhZG8nLFwicmVzdW1lbkVzdGFkb1wiKSBhcyBvdHJhcyBmcm9tIHZpdmllbmRhc2AsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2VuYycsXHJcbiAgICAgICAgICAgICAgICAgICAgYG90cmFzIHx8IGNvYWxlc2NlKHJlc3B1ZXN0YXMsJ3t9Jzo6anNvbmIpYFxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgKSBhcyByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAke2pzb24oYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGFyZWEgYXMgY2FyZ2EsIG9ic2VydmFjaW9uZXNfaGRyIGFzIG9ic2VydmFjaW9uZXMsIG1pbihmZWNoYV9hc2lnbmFjaW9uKSBhcyBmZWNoYVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdml2aWVuZGFzIGlubmVyIGpvaW4gYXJlYXMgdXNpbmcgKGFyZWEpIFxyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwIGJ5IGFyZWEsIG9ic2VydmFjaW9uZXNfaGRyYCwgXHJcbiAgICAgICAgICAgICAgICAnZmVjaGEnKX0gYXMgY2FyZ2FzLFxyXG4gICAgICAgICAgICAke2pzb25vKFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBlbmMsIGpzb25iX2J1aWxkX29iamVjdCgndGVtJywgdGVtLCAndGFyZWEnLCB0YXJlYSkgYXMgb3RyYXMgZnJvbSB2aXZpZW5kYXNgLFxyXG4gICAgICAgICAgICAgICAgICdlbmMnLFxyXG4gICAgICAgICAgICAgICAgIGBvdHJhcyB8fCd7fSc6Ompzb25iYFxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgYXMgXCJpbmZvcm1hY2lvbkhkclwiXHJcbmBcclxufVxyXG5cclxuZXhwb3J0IHZhciBzZXRIZHJRdWVyeSA9IChteUZ1bjoocXVvdGVkQ29uZFZpdjpzdHJpbmcpPT5zdHJpbmcpPT4gZ2V0SGRyUXVlcnk9bXlGdW5cclxuXHJcbmNvbnN0IGdldFVBUHJpbmNpcGFsID0gYXN5bmMgKGNsaWVudDpDbGllbnQsIG9wZXJhdGl2bzpzdHJpbmcpPT5cclxuICAgIChhd2FpdCBjbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHNlbGVjdCB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICAgICAgZnJvbSB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgcHJpbmNpcGFsXHJcbiAgICAgICAgYFxyXG4gICAgICAgICxcclxuICAgICAgICBbb3BlcmF0aXZvXVxyXG4gICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlXHJcblxyXG52YXIgZnVuY2lvbmVzQ29ub2NpZGFzOntbayBpbiBzdHJpbmddOmJvb2xlYW59ID0ge31cclxuXHJcbnZhciBjb21waWxlciA9IG5ldyBFeHByZXNpb25QYXJzZXIuQ29tcGlsZXIoe1xyXG4gICAgbGFuZ3VhZ2U6J2pzJyxcclxuICAgIHZhcldyYXBwZXI6KHZhcl9uYW1lOnN0cmluZyk9PmBoZWxwZXJzLm51bGwyemVybyh2YWxvcmVzLiR7dmFyX25hbWV9KWAsXHJcbiAgICBmdW5XcmFwcGVyOihmdW5jdGlvbk5hbWU6c3RyaW5nKT0+e1xyXG4gICAgICAgIGlmKCFmdW5jaW9uZXNDb25vY2lkYXNbZnVuY3Rpb25OYW1lXSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZ1bmN0aW9uTmFtZSlcclxuICAgICAgICAgICAgZnVuY2lvbmVzQ29ub2NpZGFzW2Z1bmN0aW9uTmFtZV0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYGhlbHBlcnMuZnVucy4ke2Z1bmN0aW9uTmFtZX1gXHJcbiAgICB9XHJcbn0pXHJcblxyXG50eXBlIENhc2lsbGVyb0RlQWNhPXtcclxuICAgIGNoaWxkczogQ2FzaWxsZXJvRGVBY2FbXSxcclxuICAgIGRhdGE6e1xyXG4gICAgICAgIGV4cHJlc2lvbl9oYWJpbGl0YXI6IHN0cmluZ1xyXG4gICAgICAgIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM6IHN0cmluZ1xyXG4gICAgICAgIGVzcGVjaWFsOiBhbnlcclxuICAgICAgICBleHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzOiBzdHJpbmdcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY29tcGlsYXJFeHByZXNpb24oZXhwcmVzaW9uOnN0cmluZyl7XHJcbiAgICByZXR1cm4gY29tcGlsZXIudG9Db2RlKEV4cHJlc2lvblBhcnNlci5wYXJzZShcclxuICAgICAgICBleHByZXNpb25cclxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcYmlzIGRpc3RpbmN0IGZyb21cXGIvZ2ksJyA8PiAnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvISEvZ2ksJyAnKVxyXG4gICAgKSkucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5ibGFuY29cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCdoZWxwZXJzLmZ1bnMuYmxhbmNvKCgnKVxyXG4gICAgLnJlcGxhY2UoL2hlbHBlcnNcXC5mdW5zXFwuaW5mb3JtYWRvXFwoaGVscGVycy5udWxsMnplcm9cXCgvZywnaGVscGVycy5mdW5zLmluZm9ybWFkbygoJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBpbGFyRXhwcmVzaW9uZXMoY2FzaWxsZXJvOkNhc2lsbGVyb0RlQWNhKXtcclxuICAgIGlmKCFjYXNpbGxlcm8peyByZXR1cm4gfVxyXG4gICAgaWYoY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcil7XHJcbiAgICAgICAgY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uKGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9oYWJpbGl0YXIpO1xyXG4gICAgfVxyXG4gICAgaWYoY2FzaWxsZXJvLmRhdGEuZXNwZWNpYWw/LmF1dG9pbmcpe1xyXG4gICAgICAgIHZhciBwYXJ0ZXMgPSBjYXNpbGxlcm8uZGF0YS5lc3BlY2lhbD8uYXV0b2luZy5zcGxpdCgnPT4nKTtcclxuICAgICAgICBpZihwYXJ0ZXMubGVuZ3RoPjEpe1xyXG4gICAgICAgICAgICB2YXIgcHJlY29uZGljaW9uID0gcGFydGVzWzBdO1xyXG4gICAgICAgICAgICB2YXIgdmFsb3IgPSBwYXJ0ZXMuc2xpY2UoMSkuam9pbignPT4nKTtcclxuICAgICAgICAgICAgY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2F1dG9pbmdyZXNhcl9qcyA9IGAoJHtjb21waWxhckV4cHJlc2lvbihwcmVjb25kaWNpb24pfSk/KCR7Y29tcGlsYXJFeHByZXNpb24odmFsb3IpfSk6bnVsbGA7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanMgPSBjb21waWxhckV4cHJlc2lvbihwYXJ0ZXNbMF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvcih2YXIgY2FzaWxsZXJvSW50ZXJubyBvZiBjYXNpbGxlcm8uY2hpbGRzKSBjb21waWxhckV4cHJlc2lvbmVzKGNhc2lsbGVyb0ludGVybm8pO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQUNDSU9OX1BBU0FSX1BST0lFID0gJ2VuY3Vlc3Rhc19wcm9jZXNhbWllbnRvX3Bhc2FyJztcclxuZXhwb3J0IGNvbnN0IFByb2NlZHVyZXNEbUVuY3UgOiBQcm9jZWR1cmVEZWZbXSA9IFtcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J29wZXJhdGl2b19lc3RydWN0dXJhX2NvbXBsZXRhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgICAgICAsdHlwZU5hbWU6J3RleHQnLCByZWZlcmVuY2VzOidvcGVyYXRpdm9zJ30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazonZGVzcGxlZ2FyRm9ybXVsYXJpbycsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBjYXNpbGxlcm9zX2plcmFycXVpemFkb3MoJDEpIGFzIGZvcm11bGFyaW9zLCBcclxuICAgICAgICAgICAgICAgICAgICAke2pzb25vKGBzZWxlY3QgdW5pZGFkX2FuYWxpc2lzLCBwYWRyZSwgcGtfYWdyZWdhZGEsICd7fSc6Ompzb25iIGFzIGhpamFzIGZyb20gdW5pZGFkX2FuYWxpc2lzIHdoZXJlIG9wZXJhdGl2byA9ICQyYCwgJ3VuaWRhZF9hbmFsaXNpcycpfSBhcyB1bmlkYWRlc19hbmFsaXNpc1xyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJzLm9wZXJhdGl2bywgcGFyYW1ldGVycy5vcGVyYXRpdm9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgbGlrZUFyKHJlc3VsdC5yb3cuZm9ybXVsYXJpb3MpLmZvckVhY2goZj0+Y29tcGlsYXJFeHByZXNpb25lcyhmKSk7XHJcbiAgICAgICAgICAgIC8vIEhlcm1hbm9zIHNvbiBsb3MgZm9ybXVsYXJpb3MgcXVlIGVzdMOhbiBpbXBsYW50YWRvcyBlbiBvdHJvIGZvcm11bGFyaW8gZGUgbGEgbWlzbWEgVUEuIFBvciBlamVtcGxvIGVsIEExIGVuIGVsIFMxXHJcbiAgICAgICAgICAgIHZhciByZXN1bHRIZXJtYW5vcyA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuc2VsZWN0IG8uaWRfY2FzaWxsZXJvIGFzIGlkX2Zvcm11bGFyaW8sIG8udW5pZGFkX2FuYWxpc2lzLCAnQkZfJ3x8by5jYXNpbGxlcm8gYm90b24sIGJmLmNhc2lsbGVybywgYmYucGFkcmUsIGZwLmNhc2lsbGVybywgZnAudW5pZGFkX2FuYWxpc2lzXHJcbiAgZnJvbSBjYXNpbGxlcm9zIG8gbGVmdCBqb2luIGNhc2lsbGVyb3MgYmZcclxuICAgIG9uIGJmLnRpcG9jPSdCRidcclxuXHRhbmQgYmYuY2FzaWxsZXJvID0gJ0JGXyd8fG8uY2FzaWxsZXJvXHJcblx0YW5kIGJmLm9wZXJhdGl2byA9IG8ub3BlcmF0aXZvXHJcblx0bGVmdCBqb2luIGNhc2lsbGVyb3MgZnBcclxuXHQgIG9uIGZwLmlkX2Nhc2lsbGVybyA9IGJmLnBhZHJlXHJcblx0ICBhbmQgZnAub3BlcmF0aXZvID0gYmYub3BlcmF0aXZvXHJcbiAgd2hlcmUgby50aXBvYyA9ICdGJ1xyXG4gICAgYW5kIG8udW5pZGFkX2FuYWxpc2lzID0gZnAudW5pZGFkX2FuYWxpc2lzXHJcblx0YW5kIG8ub3BlcmF0aXZvID0gJDFgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRlcnMub3BlcmF0aXZvXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdEhlcm1hbm9zLnJvd3MuZm9yRWFjaChyb3c9PntcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5yb3cuZm9ybXVsYXJpb3Nbcm93LmlkX2Zvcm11bGFyaW9dLmRhdGEuaGVybWFubyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRhclVBKHVhOlVuaWRhZEFuYWxpc2lzLCBpZFVhOklkVW5pZGFkQW5hbGlzaXMsIHVBczp7W2sgaW4gSWRVbmlkYWRBbmFsaXNpc106IFVuaWRhZEFuYWxpc2lzfSl7XHJcbiAgICAgICAgICAgICAgICBpZih1YS5wYWRyZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdUFzW3VhLnBhZHJlXS5oaWphc1tpZFVhXSA9IHVhO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdWEucHJpbmNpcGFsPXRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGlrZUFyKHJlc3VsdC5yb3cudW5pZGFkZXNfYW5hbGlzaXMpLmZvckVhY2goKHVhLCBpZFVhKT0+XHJcbiAgICAgICAgICAgICAgICBjb21wbGV0YXJVQSh1YSwgaWRVYSBhcyBJZFVuaWRhZEFuYWxpc2lzLCByZXN1bHQucm93LnVuaWRhZGVzX2FuYWxpc2lzKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHZhciB7Y29uX3JlYV9ob2dhcjogY29uUmVhSG9nYXIsIGNvbmZpZ19zb3J0ZW86IGNvbmZpZ1NvcnRlbywgaGFiaWxpdGFjaW9uX2JvdG9uX2Zvcm11bGFyaW86aGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvfSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgY29uZmlnX3NvcnRlbywgY29uX3JlYV9ob2dhciwgaGFiaWxpdGFjaW9uX2JvdG9uX2Zvcm11bGFyaW8gXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgIGAsW3BhcmFtZXRlcnMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG4gICAgICAgICAgICBsZXQgY29tcGlsYXJFeHByZXNpb25lc0RvbWluaW9zID0gKGV4cHJlc2lvbmVzRG9taW5pbzphbnkpPT4gXHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoZXhwcmVzaW9uZXNEb21pbmlvKVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGV4cHIsZG9taW5pbyk9Pih7ZG9taW5pbywgZXhwcjpjb21waWxhckV4cHJlc2lvbihleHByLmV4cHIpfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnBsYWluKCk7XHJcbiAgICAgICAgICAgIGlmKGNvbmZpZ1NvcnRlbyl7XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoY29uZmlnU29ydGVvKS5mb3JFYWNoKChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZXhwcl9pbmNvbXBsZXRpdHVkX2pzPWNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmV4cHJfaW5jb21wbGV0aXR1ZClcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmZpbHRyb19qcz1jb21waWxhckV4cHJlc2lvbmVzRG9taW5pb3MoY29uZmlnU29ydGVvRm9ybXVsYXJpby5maWx0cm8pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyl7XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKS5mb3JFYWNoKChmb3JtKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm0uZXhwcl9oYWJpbGl0YXJfYm90b25fanM9Y29tcGlsYXJFeHByZXNpb24oZm9ybS5leHByX2hhYmlsaXRhcl9ib3RvbilcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHt0aW1lc3RhbXA6IGJlLmNhY2hlcy50aW1lc3RhbXBFc3RydWN0dXJhLCAuLi5yZXN1bHQucm93LCBvcGVyYXRpdm86cGFyYW1ldGVycy5vcGVyYXRpdm8sIGNvblJlYUhvZ2FyLCBjb25maWdTb3J0ZW8sIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbywgbm9SZWFzOmJlLmNhY2hlcy50YWJsZUNvbnRlbnQubm9fcmVhLCBub1JlYXNTdXA6YmUuY2FjaGVzLnRhYmxlQ29udGVudC5ub19yZWFfc3VwfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonZ2VuZXJhcl9mb3JtdWxhcmlvcycsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidhbm5pbycsIHR5cGVOYW1lOidpbnRlZ2VyJywgcmVmZXJlbmNlczonYW5uaW8nfSxcclxuICAgICAgICAgICAge25hbWU6J21lcycgICwgdHlwZU5hbWU6J2ludGVnZXInLCByZWZlcmVuY2VzOidtZXMnICB9LFxyXG4gICAgICAgICAgICB7bmFtZTonbG90ZScgLCB0eXBlTmFtZTonaW50ZWdlcicsIHJlZmVyZW5jZXM6J2xvdGVzJ30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0VUEgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgICAgZnJvbSB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICAgICAgICAgICAgIHdoZXJlIHByaW5jaXBhbCA9IHRydWUgYW5kIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW09QRVJBVElWT11cclxuICAgICAgICAgICAgKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRVQS5yb3dDb3VudCA9PT0gMCl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNlIGNvbmZpZ3Vyw7MgdW5hIHVuaWRhZCBkZSBhbmFsaXNpcyBjb21vIHByaW5jaXBhbCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCByb3cgPSByZXN1bHRVQS5yb3c7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRQcmVndW50YXMgPSBhd2FpdCBiZS5wcm9jZWR1cmUucHJlZ3VudGFzX3VhX3RyYWVyLmNvcmVGdW5jdGlvbihjb250ZXh0LCByb3cpXHJcbiAgICAgICAgICAgIHZhciBjb250ZW5lZG9yVmFjaW86e1trZXk6c3RyaW5nXTphbnl9ID0ge307XHJcbiAgICAgICAgICAgIHJlc3VsdFByZWd1bnRhcy5mb3JFYWNoKGZ1bmN0aW9uKGRlZlByZWd1bnRhKXtcclxuICAgICAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpb1tkZWZQcmVndW50YS52YXJfbmFtZV0gPSBkZWZQcmVndW50YS51bmlkYWRfYW5hbGlzaXM/W106bnVsbDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5hbm5pbz0gcGFyYW1ldGVycy5hbm5pbztcclxuICAgICAgICAgICAgY29udGVuZWRvclZhY2lvLm1lcyAgPSBwYXJhbWV0ZXJzLm1lcyAgO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8ubG90ZSA9IHBhcmFtZXRlcnMubG90ZSA7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGRlYmVfaGFiZXIuaWRfY2FzbywgcyBhcyBpZFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gKHNlbGVjdCBsb3RlLCBhcm1hcl9pZChhbm5pbywgbWVzLCBsb3RlLCBzKSBhcyBpZF9jYXNvLCBzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKHNlbGVjdCBhbm5pbyxtZXMsbG90ZSwgY2FudF9jdWVzIGZyb20gbG90ZXMgd2hlcmUgKGFubmlvLG1lcyxsb3RlKT0oJDIsJDMsJDQpKSByLCBsYXRlcmFsIGdlbmVyYXRlX3NlcmllcygxLGNhbnRfY3Vlcykgc1xyXG4gICAgICAgICAgICAgICAgICAgICkgZGViZV9oYWJlciBsZWZ0IGpvaW4gZGVmZ2VuIGhheSBvbiBoYXkuaWRfY2FzbyA9IGRlYmVfaGFiZXIuaWRfY2FzbyBhbmQgaGF5Lm9wZXJhdGl2bz0kMVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIGhheS5pZF9jYXNvIGlzIG51bGxgLFxyXG4gICAgICAgICAgICAgICAgWyBPUEVSQVRJVk8sIHBhcmFtZXRlcnMuYW5uaW8sIHBhcmFtZXRlcnMubWVzLCBwYXJhbWV0ZXJzLmxvdGVdXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHtvcGVyYXRpdm86IE9QRVJBVElWT307XHJcbiAgICAgICAgICAgIGZvcih2YXIgaT0wOyBpIDwgcmVzdWx0LnJvd0NvdW50OyBpKyspe1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhci5jb3JlRnVuY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmcocGFyYW1zLHtpZF9jYXNvOnJlc3VsdC5yb3dzW2ldLmlkX2Nhc28sIGRhdG9zX2Nhc286Y2hhbmdpbmcoY29udGVuZWRvclZhY2lvLHtpZDpyZXN1bHQucm93c1tpXS5pZH0pfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge2FncmVnYWRhczpyZXN1bHQucm93Q291bnR9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J3VwbG9hZF9maWxlJyxcclxuICAgICAgICBwcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6ICdpZF9hZGp1bnRvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOiAnbm9tYnJlJywgdHlwZU5hbWU6ICd0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBmaWxlczp7Y291bnQ6MX0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzLCBmaWxlcyl7XHJcbiAgICAgICAgICAgIGxldCBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBsZXQgY2xpZW50PWNvbnRleHQuY2xpZW50O1xyXG4gICAgICAgICAgICBjb250ZXh0LmluZm9ybVByb2dyZXNzKHttZXNzYWdlOmJlLm1lc3NhZ2VzLmZpbGVVcGxvYWRlZH0pO1xyXG4gICAgICAgICAgICBsZXQgZmlsZSA9IGZpbGVzWzBdXHJcbiAgICAgICAgICAgIGxldCBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZS5wYXRoKS5zdWJzdHIoMSk7XHJcbiAgICAgICAgICAgIGxldCBvcmlnaW5hbEZpbGVuYW1lID0gZmlsZS5vcmlnaW5hbEZpbGVuYW1lLnNsaWNlKDAsLShleHQubGVuZ3RoKzEpKTtcclxuICAgICAgICAgICAgbGV0IGZpbGVuYW1lPSBwYXJhbWV0ZXJzLm5vbWJyZSB8fCBvcmlnaW5hbEZpbGVuYW1lO1xyXG4gICAgICAgICAgICBsZXQgbmV3UGF0aCA9ICdsb2NhbC1hdHRhY2htZW50cy9maWxlLSc7XHJcbiAgICAgICAgICAgIHZhciBjcmVhdGVSZXNwb25zZSA9IGZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlKGFkanVudG9Sb3cpe1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdGFkbyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnTGEgc3ViaWRhIHNlIHJlYWxpesOzIGNvcnJlY3RhbWVudGUgKHVwZGF0ZSknLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vbWJyZTogYWRqdW50b1Jvdy5ub21icmUsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9tYnJlX29yaWdpbmFsOiBhZGp1bnRvUm93Lm5vbWJyZV9vcmlnaW5hbCxcclxuICAgICAgICAgICAgICAgICAgICBleHQ6IGFkanVudG9Sb3cuZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGZlY2hhOiBhZGp1bnRvUm93LmZlY2hhLFxyXG4gICAgICAgICAgICAgICAgICAgIGhvcmE6IGFkanVudG9Sb3cuaG9yYSxcclxuICAgICAgICAgICAgICAgICAgICBpZF9hZGp1bnRvOiBhZGp1bnRvUm93LmlkX2FkanVudG9cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgbW92ZUZpbGUgPSBmdW5jdGlvbiBtb3ZlRmlsZShmaWxlLCBpZF9hZGp1bnRvLCBleHRlbnNpb24pe1xyXG4gICAgICAgICAgICAgICAgZnMubW92ZShmaWxlLnBhdGgsIG5ld1BhdGggKyBpZF9hZGp1bnRvICsgJy4nICsgZXh0ZW5zaW9uLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgaWYocGFyYW1ldGVycy5pZF9hZGp1bnRvKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYHVwZGF0ZSBhZGp1bnRvcyBzZXQgbm9tYnJlPSAkMSxub21icmVfb3JpZ2luYWwgPSAkMiwgZXh0ID0gJDMsIHJ1dGEgPSBjb25jYXQoJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJywkNDo6dGV4dCwnLicsJDM6OnRleHQpLCBmZWNoYSA9IG5vdygpLCBob3JhID0gZGF0ZV90cnVuYygnc2Vjb25kcycsY3VycmVudF90aW1lc3RhbXAtY3VycmVudF9kYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBpZF9hZGp1bnRvID0gJDQgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZW5hbWUsIG9yaWdpbmFsRmlsZW5hbWUsIGV4dCwgcGFyYW1ldGVycy5pZF9hZGp1bnRvXVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZXNwb25zZShyZXN1bHQucm93KVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0YWRvKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUZpbGUoZmlsZSxyZXN1bHRhZG8uaWRfYWRqdW50byxyZXN1bHRhZG8uZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkb1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBpbnNlcnQgaW50byBhZGp1bnRvcyAobm9tYnJlLCBub21icmVfb3JpZ2luYWwsIGV4dCwgZmVjaGEsIGhvcmEpIHZhbHVlcyAoJDEsJDIsJDMsbm93KCksIGRhdGVfdHJ1bmMoJ3NlY29uZHMnLGN1cnJlbnRfdGltZXN0YW1wLWN1cnJlbnRfZGF0ZSkpIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbGVuYW1lLCBvcmlnaW5hbEZpbGVuYW1lLCBleHRdXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY2xpZW50LnF1ZXJ5KGB1cGRhdGUgYWRqdW50b3Mgc2V0IHJ1dGEgPSBjb25jYXQoJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJyxpZF9hZGp1bnRvOjp0ZXh0LCcuJyxleHQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBpZF9hZGp1bnRvID0gJDEgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdC5yb3cuaWRfYWRqdW50b11cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZXNwb25zZShyZXN1bHQucm93KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdGFkbyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlRmlsZShmaWxlLHJlc3VsdGFkby5pZF9hZGp1bnRvLHJlc3VsdGFkby5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKXtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J2Nhc29fZ3VhcmRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgLCB0eXBlTmFtZTondGV4dCcsIHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnfSxcclxuICAgICAgICAgICAge25hbWU6J2lkX2Nhc28nICAgICAsIHR5cGVOYW1lOid0ZXh0JyAgICAgIH0sXHJcbiAgICAgICAgICAgIHtuYW1lOidkYXRvc19jYXNvJyAgLCB0eXBlTmFtZTonanNvbmInICAgICB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgZGVmaW5lZEluOiAnZG1lbmN1JyxcclxuICAgICAgICAvL0B0cy1pZ25vcmUgZXNwZWNpZmljbyBlbCB0aXBvIGRlIGxvcyBwYXLDoW1ldHJvc1xyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6e1xyXG4gICAgICAgICAgICBvcGVyYXRpdm86c3RyaW5nLCBcclxuICAgICAgICAgICAgaWRfY2FzbzpzdHJpbmcsXHJcbiAgICAgICAgICAgIGRhdG9zX2Nhc286QW55T2JqZWN0XHJcbiAgICAgICAgfSxuZXdDbGllbnQ6Q2xpZW50KXtcclxuICAgICAgICAgICAgdmFyIGNsaWVudD1uZXdDbGllbnQgfHwgY29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIHZhciBkYXRvc19qc29uPXBhcmFtZXRlcnMuZGF0b3NfY2FzbztcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHRhYmxlU3RydWN0dXJlc19hcHA6VGFibGVEZWZpbml0aW9ucyA9IGJlLnRhYmxlU3RydWN0dXJlcztcclxuICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHN0cnVjdF9kbWVuY3UgPSBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dCwgTUFJTl9UQUJMRU5BTUUpO1xyXG4gICAgICAgICAgICBkYXRvc19qc29uWydvcGVyYXRpdm8nXSA9IHBhcmFtZXRlcnMub3BlcmF0aXZvO1xyXG4gICAgICAgICAgICAvL1RPRE8gOiB2aXZpZW5kYSDDsyBlbmM/Pz9cclxuICAgICAgICAgICAgZGF0b3NfanNvblsndml2aWVuZGEnXSA9IHBhcmFtZXRlcnMuaWRfY2FzbztcclxuICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGFyX3VsdF9wa19lbl9hcnIoIHVsdF9waywgdWFfYXJyKXtcclxuICAgICAgICAgICAgICAgIHZhciBjb25fcGtfY29tcGxldGE9dWFfYXJyOyBcclxuICAgICAgICAgICAgICAgIGlmICh1YV9hcnIgJiYgdWFfYXJyLmxlbmd0aD49MSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uX3BrX2NvbXBsZXRhPSBjb25fcGtfY29tcGxldGEubWFwKCh1bmFfdWEsaSk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5hX3VhW3VsdF9wa109aSsxICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmFfdWE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uX3BrX2NvbXBsZXRhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZnVuY3Rpb24gcmVjb3JyZXJfZGF0b3NfYWdyZWdhbmRvX3BrcyhkYXRvc2opIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleU5hbWUgaW4gZGF0b3NqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdG9LID0gZGF0b3NqW2tleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRvSyBpbnN0YW5jZW9mIEFycmF5ICYmIGRhdG9LLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwayA9IHRhYmxlU3RydWN0dXJlc19hcHBba2V5TmFtZV0oY29udGV4dCkucHJpbWFyeUtleTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVsdF9wayA9IHBrW3BrLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRvSyA9IGNvbXBsZXRhcl91bHRfcGtfZW5fYXJyKHVsdF9waywgZGF0b0spO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRvSy5mb3JFYWNoKChlbGVtSSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbUk9cmVjb3JyZXJfZGF0b3NfYWdyZWdhbmRvX3BrcyhlbGVtSSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleU5hbWUuc3RhcnRzV2l0aCgnJCcpfHxrZXlOYW1lLnN0YXJ0c1dpdGgoJ18nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGF0b3NqW2tleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvc2o7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICAgICAgZGF0b3NfanNvbiA9IHJlY29ycmVyX2RhdG9zX2FncmVnYW5kb19wa3MoZGF0b3NfanNvbik7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLmNvZFJlYTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kTm9SZWE7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLnJlc3VtZW5Fc3RhZG87XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLmNvZFJlYVN1cDtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kTm9SZWFTdXA7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLnJlc3VtZW5Fc3RhZG9TdXA7XHJcblxyXG4gICAgICAgICAgICBpZiggT2JqZWN0LmtleXMoZGF0b3NfanNvbikubGVuZ3RoID4yKXtcclxuICAgICAgICAgICAgICAgIHZhciBxdWVyaWVzID0gc3FsVG9vbHMuc3RydWN0dXJlZERhdGEuc3FsV3JpdGUoZGF0b3NfanNvbiwgc3RydWN0X2RtZW5jdSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcXVlcmllcy5yZWR1Y2UoZnVuY3Rpb24ocHJvbWlzZSwgcXVlcnkpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnQucXVlcnkocXVlcnkpLmV4ZWN1dGUoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFByb21pc2UucmVzb2x2ZSgpKS50aGVuKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2tcIjtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycjpFcnJvcil7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjYXNvX2d1YXJkYXIgRU5UUkEgRU4gRUwgQ0FUQ0g6IFwiLGVycilcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICd2YWNpbyc7XHJcbiAgICAgICAgICAgIH0gICAgXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjYXNvX3RyYWVyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIC8ve25hbWU6J2Zvcm11bGFyaW8nICAgICwgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAscmVmZXJlbmNlczonb3BlcmF0aXZvcycsICB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonaWRfY2FzbycgICAgICAgLHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazogJ2dvVG9FbmMnLFxyXG4gICAgICAgIGRlZmluZWRJbjogJ2RtZW5jdScsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGNsaWVudD1jb250ZXh0LmNsaWVudDtcclxuICAgICAgICAgICAgIHZhciBzdHJ1Y3RfZG1lbmN1ID0gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIE1BSU5fVEFCTEVOQU1FKTtcclxuICAgICAgICAgICAgdmFyIHNxbCA9IHNxbFRvb2xzLnN0cnVjdHVyZWREYXRhLnNxbFJlYWQoe29wZXJhdGl2bzogcGFyYW1ldGVycy5vcGVyYXRpdm8sIHZpdmllbmRhOnBhcmFtZXRlcnMuaWRfY2Fzb30sIHN0cnVjdF9kbWVuY3UpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnF1ZXJ5KHNxbCkuZmV0Y2hVbmlxdWVWYWx1ZSgpO1xyXG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgdml2aWVuZGE6IHBhcmFtZXRlcnMuaWRfY2FzbyxcclxuICAgICAgICAgICAgICAgIGRhdG9zX2Nhc286IHJlc3VsdC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIC8vZm9ybXVsYXJpbzogZm9ybVByaW5jaXBhbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY2Fzb190cmFlcl9vX2NyZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAscmVmZXJlbmNlczonb3BlcmF0aXZvcycsICB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonaWRfY2FzbycgICAgICAgLHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazogJ2dvVG9FbmMnLFxyXG4gICAgICAgIC8vIGJpdGFjb3JhOnthbHdheXM6dHJ1ZX0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb190cmFlciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb19wcmVwYXJhciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb19ndWFyZGFyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIGNoYW5naW5nKHBhcmFtZXRlcnMsIHtkYXRvc19jYXNvOmpzb259KSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3RyYWVyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J3Bhc2FyX2pzb24ydWEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIC8qIEdFTkVSQUxJWkFSOiAqL1xyXG4gICAgICAgICAgICB2YXIgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgLyogRklOLUdFTkVSQUxJWkFSOiAqL1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRNYWluID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFNFTEVDVCAqIEZST00gJHtNQUlOX1RBQkxFTkFNRX0gTElNSVQgMWApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIGlmKHJlc3VsdE1haW4ucm93Q291bnQ+MCl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnSEFZIERBVE9TJyxyZXN1bHRNYWluLnJvd3MpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hBWSBEQVRPUy4gTk8gU0UgUFVFREUgSU5JQ0lBUiBFTCBQQVNBSkUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcmVzdWx0SnNvbiA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYFNFTEVDVCBvcGVyYXRpdm8sIGVuYyBpZF9jYXNvLCBqc29uX2VuY3Vlc3RhIGRhdG9zX2Nhc28gZnJvbSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgV0hFUkUgb3BlcmF0aXZvPSQxIGFuZCByZXN1bWVuX2VzdGFkbyBpcyBkaXN0aW5jdCBmcm9tICd2YWNpbycgYW5kIGpzb25fZW5jdWVzdGEgaXMgbm90IG51bGwgXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgZW5jIGAsXHJcbiAgICAgICAgICAgICAgICBbT1BFUkFUSVZPXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuICAgICAgICAgICAgaWYocHJvY2VkdXJlR3VhcmRhci5kZWZpbmVkSW4hPSdkbWVuY3UnKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaGF5IHF1ZSBzb2JyZWVzY3JpYmlyIGNhc29fZ3VhcmRhcicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXN1bHRKc29uLnJvd3MubWFwKGFzeW5jIGZ1bmN0aW9uKHJvdyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0YWRvID0gYGlkIGNhc28gJHtyb3cuaWRfY2Fzb306IGA7XHJcbiAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUuaW5UcmFuc2FjdGlvbihudWxsLCBhc3luYyBmdW5jdGlvbihjbGllbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8rPSBhd2FpdCBwcm9jZWR1cmVHdWFyZGFyLmNvcmVGdW5jdGlvbihjb250ZXh0LCByb3csIGNsaWVudCk7ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyTWVzc2FnZSA9IHJlc3VsdGFkbyArIFwianNvbjJ1YSBlcnJvci4gXCIrIGVyciA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvID0gZXJyTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVyck1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICB9ICAgICBcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdGFkby5pbmNsdWRlcygnb2snKSl7IFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB7ZGF0b3NfY2Fzbywgdml2aWVuZGEsIG9wZXJhdGl2b30gPSBhd2FpdCBiZS5wcm9jZWR1cmUuY2Fzb190cmFlci5jb3JlRnVuY3Rpb24oY29udGV4dCwge29wZXJhdGl2bzpyb3cub3BlcmF0aXZvLCBpZF9jYXNvOnJvdy5pZF9jYXNvfSlcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmVyUXVlR3JhYm8gPSB7ZGF0b3NfY2Fzbywgdml2aWVuZGEsIG9wZXJhdGl2b31cclxuICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NyZXBhbmNlcy5zaG93QW5kVGhyb3codmVyUXVlR3JhYm8scm93KVxyXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2ZXJRdWVHcmFibyxyb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkbztcclxuICAgICAgICAgICAgfSkpLmNhdGNoKGZ1bmN0aW9uKGVycil7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J2RtX2ZvcnBrcmFpel9jYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3ZpdmllbmRhJyAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCcsIHJlZmVyZW5jZXM6XCJ0YXJlYXNcIn0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2byx2aXZpZW5kYSwgdGFyZWF9ID0gcGFyYW1ldGVycztcclxuICAgICAgICAgICAgdmFyIG1haW5fZm9ybSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgbWFpbl9mb3JtXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCB0YXJlYT0kMmBcclxuICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIHRhcmVhXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIHZhciBjb25kdml2PSBgIHQub3BlcmF0aXZvPSAkMSBhbmQgdC5lbmMgPSQyYDtcclxuICAgICAgICAgICAgdmFyIHNvbG9MZWN0dXJhID0gISEoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYHNlbGVjdCAqXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIGpvaW4gZXN0YWRvcyB1c2luZyAob3BlcmF0aXZvLCBlc3RhZG8pIC0tcGsgZXN0YWRvIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnYWRvX2RtIGlzIG5vdCBudWxsIG9yIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3QgcGVybWl0ZV9lZGl0YXJfZW5jdWVzdGEgYW5kIGFzaWduYWRvIDw+ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoY29udGV4dC51c2VyLmlkcGVyKX1cclxuICAgICAgICAgICAgICAgICAgICApYCwgW29wZXJhdGl2bywgdml2aWVuZGFdKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCkpLnJvd0NvdW50O1xyXG4gICAgICAgICAgICB2YXIge3Jvd30gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShnZXRIZHJRdWVyeShjb25kdml2KSxbb3BlcmF0aXZvLHZpdmllbmRhXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcm93LmluZm9ybWFjaW9uSGRyW3ZpdmllbmRhXS50YXJlYT17XHJcbiAgICAgICAgICAgICAgICB0YXJlYSxcclxuICAgICAgICAgICAgICAgIG1haW5fZm9ybVxyXG4gICAgICAgICAgICB9IDtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnJvdyxcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIHNvbG9MZWN0dXJhLFxyXG4gICAgICAgICAgICAgICAgaWRQZXI6Y29udGV4dC51c2VyLmlkcGVyLFxyXG4gICAgICAgICAgICAgICAgY2FyZ2FzOmxpa2VBci5jcmVhdGVJbmRleChyb3cuY2FyZ2FzLm1hcChjYXJnYT0+KHsuLi5jYXJnYSwgZmVjaGE6Y2FyZ2EuZmVjaGE/ZGF0ZS5pc28oY2FyZ2EuZmVjaGEpLnRvRG15KCk6bnVsbH0pKSwgJ2NhcmdhJyksXHJcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXBFc3RydWN0dXJhOmJlLmNhY2hlcy50aW1lc3RhbXBFc3RydWN0dXJhXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J2RtX2ZvcnBrcmFpel9kZXNjYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3BlcnNpc3RlbnRlcycgICAgICAsIHR5cGVOYW1lOidqc29uYid9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHtvcGVyYXRpdm8sIHBlcnNpc3RlbnRlc30gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICBjb25zdCBVQV9QUklOQ0lQQUwgPSBhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgb3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobGlrZUFyKHBlcnNpc3RlbnRlcy5yZXNwdWVzdGFzW1VBX1BSSU5DSVBBTF0pLm1hcChhc3luYyAocmVzcHVlc3Rhc1VBUHJpbmNpcGFsLGlkRW5jKT0+e1xyXG4gICAgICAgICAgICAgICAgaWYocmVzcHVlc3Rhc1VBUHJpbmNpcGFsLnMxYTFfb2JzID09ICchcHJ1ZWJhIGRlIGVycm9yIGFsIGdyYWJhciEnKXtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RJTyBQUlVFQkEgREUgRVJST1IgQUwgR1JBQkFSJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBndWFyZGFyRW5jdWVzdGFFblRlbShjb250ZXh0LCBvcGVyYXRpdm8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsIHBlcnNpc3RlbnRlcy5pbmZvcm1hY2lvbkhkcltpZEVuY10udGFyZWEudGFyZWEpO1xyXG4gICAgICAgICAgICAgICAgLy9ndWFyZGFyIHBhcmFsZWxhbWVudGUgZW4gdGFibGFzIHVhXHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvY2VkdXJlR3VhcmRhciA9IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXI7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0YWRvID0gYGlkIGVuYyAke2lkRW5jfTogYDtcclxuICAgICAgICAgICAgICAgIGxldCBwYXJhbV9ndWFyZGFyPXtvcGVyYXRpdm86IG9wZXJhdGl2byxpZF9jYXNvOmlkRW5jLCBkYXRvc19jYXNvOnJlc3B1ZXN0YXNVQVByaW5jaXBhbH1cclxuICAgICAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlOiBzdHJpbmd8bnVsbDtcclxuICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5pblRyYW5zYWN0aW9uKG51bGwsIGFzeW5jIGZ1bmN0aW9uKGNsaWVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbys9IGF3YWl0IHByb2NlZHVyZUd1YXJkYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtX2d1YXJkYXIsIGNsaWVudCk7ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICBlcnJNZXNzYWdlID0gcmVzdWx0YWRvICsgXCJkbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyLiBcIisgZXJyIDtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSBlcnJNZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyTWVzc2FnZSlcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgcGFzZV90YWJsYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGlkRW5jLCByZXN1bHRhZG9dXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7ICAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgfSkuYXJyYXkoKSk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J2RtX3NpbmNyb25pemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J3BlcnNpc3RlbnRlcycgICAgICAgLCB0eXBlTmFtZTonanNvbmInfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICB2YXIgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHtwZXJzaXN0ZW50ZXN9ID0gcGFyYW1ldGVycztcclxuICAgICAgICAgICAgdmFyIG51bV9zaW5jcm86bnVtYmVyPTA7XHJcbiAgICAgICAgICAgIHZhciB0b2tlbjpzdHJpbmd8bnVsbD1wZXJzaXN0ZW50ZXM/LnRva2VuO1xyXG4gICAgICAgICAgICBpZighdG9rZW4pe1xyXG4gICAgICAgICAgICAgICAgdG9rZW4gPSAoYXdhaXQgYmUucHJvY2VkdXJlLnRva2VuX2dldC5jb3JlRnVuY3Rpb24oY29udGV4dCwge1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXJhZ2VudDogY29udGV4dC5zZXNzaW9uLnJlcS51c2VyYWdlbnQsIFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lOiBjb250ZXh0LnVzZXJuYW1lXHJcbiAgICAgICAgICAgICAgICB9KSkudG9rZW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHt2YWx1ZX0gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyBzaW5jcm9uaXphY2lvbmVzICh0b2tlbiwgdXN1YXJpbywgZGF0b3MpXHJcbiAgICAgICAgICAgICAgICAgICAgVkFMVUVTICgkMSwkMiwkMykgXHJcbiAgICAgICAgICAgICAgICAgICAgUkVUVVJOSU5HIHNpbmNyb1xyXG4gICAgICAgICAgICAgICAgYCwgW3Rva2VuLCBjb250ZXh0LnVzZXJuYW1lLCBwZXJzaXN0ZW50ZXNdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpO1xyXG4gICAgICAgICAgICBudW1fc2luY3JvPXZhbHVlO1xyXG4gICAgICAgICAgICB2YXIgY29uZHZpdj0gYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0dC5vcGVyYXRpdm89ICQxIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgYXNpZ25hZG8gPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgdHQub3BlcmFjaW9uPSdjYXJnYXInIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgKHR0LmNhcmdhZG9fZG0gaXMgbnVsbCBvciB0dC5jYXJnYWRvX2RtID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbCh0b2tlbil9KVxyXG4gICAgICAgICAgICBgXHJcbiAgICAgICAgICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgICAgICBpZihwZXJzaXN0ZW50ZXMpe1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobGlrZUFyKHBlcnNpc3RlbnRlcy5yZXNwdWVzdGFzW1VBX1BSSU5DSVBBTF0pLm1hcChhc3luYyAocmVzcHVlc3Rhc1VBUHJpbmNpcGFsLCBpZEVuYyk9PntcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZWEgPSBwZXJzaXN0ZW50ZXMuaW5mb3JtYWNpb25IZHJbaWRFbmNdLnRhcmVhLnRhcmVhO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwdWVkb0d1YXJkYXJFblRFTT10cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB7cGFyYW1zLHNldHRlcnN9ID0gZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXN0YWRvID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChFU1RBRE9fUE9TVEVSSU9SX0RFU0NBUkdBKX1gLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBjYXJnYWRvX2RtPW51bGxgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogW09QRVJBVElWTywgaWRFbmMsIHRhcmVhLCB0b2tlbl1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBxdWVyeVRhcmVhc1RlbSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDMgYW5kIGNhcmdhZG9fZG0gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHVlZG9HdWFyZGFyRW5URU09cXVlcnlUYXJlYXNUZW0ucm93Q291bnQ9PTE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocHVlZG9HdWFyZGFyRW5URU0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBndWFyZGFyRW5jdWVzdGFFblRlbShjb250ZXh0LCBPUEVSQVRJVk8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsIHRhcmVhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9ndWFyZGFyIHBhcmFsZWxhbWVudGUgZW4gdGFibGFzIHVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdGFkbyA9IGBpZCBlbmMgJHtpZEVuY306IGA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbV9ndWFyZGFyPXtvcGVyYXRpdm86IE9QRVJBVElWTyxpZF9jYXNvOmlkRW5jLCBkYXRvc19jYXNvOnJlc3B1ZXN0YXNVQVByaW5jaXBhbH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2U6IHN0cmluZ3xudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5pblRyYW5zYWN0aW9uKG51bGwsIGFzeW5jIGZ1bmN0aW9uKGNsaWVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvKz0gYXdhaXQgcHJvY2VkdXJlR3VhcmRhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1fZ3VhcmRhciwgY2xpZW50KTsgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UgPSByZXN1bHRhZG8gKyBcImRtX2ZvcnBrcmFpel9kZXNjYXJnYXIuIFwiKyBlcnIgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvID0gZXJyTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyTWVzc2FnZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBwYXNlX3RhYmxhPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbT1BFUkFUSVZPLCBpZEVuYywgcmVzdWx0YWRvXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoJ2xvY2FsLXJlY2liaWRvLXNpbi10b2tlbi50eHQnLCBKU09OLnN0cmluZ2lmeSh7bm93Om5ldyBEYXRlKCksdXNlcjpjb250ZXh0LnVzZXJuYW1lLGlkQ2FzbzogaWRFbmMsdml2aWVuZGE6IHJlc3B1ZXN0YXNVQVByaW5jaXBhbH0pKydcXG5cXG4nLCAndXRmOCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9KS5hcnJheSgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImNvbmR2aXY6IFwiLCBjb25kdml2KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJxdWVyeTogXCIsIGdldEhkclF1ZXJ5KGNvbmR2aXYpKTtcclxuICAgICAgICAgICAgdmFyIHtyb3d9ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoZ2V0SGRyUXVlcnkoY29uZHZpdiksW09QRVJBVElWTyxjb250ZXh0LnVzZXIuaWRwZXJdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygneHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4JyxnZXRIZHJRdWVyeShjb25kdml2KSk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0ICBlc3RhZG8gPSAkNCwgY2FyZ2Fkb19kbT0kMzo6dGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlICR7Y29uZHZpdn0gXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIGVuY2BcclxuICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIHBhcmFtZXRlcnMuZW5jP3BhcmFtZXRlcnMuZW5jOmNvbnRleHQudXNlci5pZHBlciwgdG9rZW4sIEVTVEFET19QT1NURVJJT1JfQ0FSR0FdXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnJvdyxcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogT1BFUkFUSVZPLCBcclxuICAgICAgICAgICAgICAgIHNvbG9MZWN0dXJhOmZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdG9rZW4sXHJcbiAgICAgICAgICAgICAgICBudW1fc2luY3JvLFxyXG4gICAgICAgICAgICAgICAgaWRwZXI6Y29udGV4dC51c2VyLmlkcGVyLFxyXG4gICAgICAgICAgICAgICAgY2FyZ2FzOmxpa2VBci5jcmVhdGVJbmRleChyb3cuY2FyZ2FzLm1hcChjYXJnYT0+KHsuLi5jYXJnYSwgZmVjaGE6Y2FyZ2EuZmVjaGE/ZGF0ZS5pc28oY2FyZ2EuZmVjaGEpLnRvRG15KCk6bnVsbCwgZXN0YWRvX2NhcmdhOidyZWxldmFtaWVudG8nfSkpLCAnY2FyZ2EnKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOidkbV9iYWNrdXAnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTondG9rZW4nICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGVtJyAgICAgICAgICwgdHlwZU5hbWU6J2pzb25iJ30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bmxvZ2dlZDp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIHtiZSwgY2xpZW50fSA9Y29udGV4dDtcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICB2YXIgbnVtX3NpbmNybzpudW1iZXI9MDtcclxuICAgICAgICAgICAgdmFyIHRva2VuOnN0cmluZ3xudWxsPXBhcmFtZXRlcnMudG9rZW47XHJcbiAgICAgICAgICAgIGlmKHRva2VuID09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtvazonb2s6Ti9UJ307XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdmFyIHtyb3dDb3VudH0gPSBhd2FpdCBjbGllbnQucXVlcnkoYHNlbGVjdCAxIGZyb20gdG9rZW5zIHdoZXJlIHRva2VuID0gJDFgLFt0b2tlbl0pLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgICAgIGlmKCFyb3dDb3VudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtvazonb2s6Ti9UJ307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYocGFyYW1ldGVycy50ZW0pe1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobGlrZUFyKHBhcmFtZXRlcnMudGVtKS5tYXAoYXN5bmMgKGJhY2t1cDphbnkpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQganNvbl9iYWNrdXAgPSAkMywgZmVjaGFfYmFja3VwID0gY3VycmVudF90aW1lc3RhbXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCBqc29uX2JhY2t1cCBpcyBkaXN0aW5jdCBmcm9tICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbT1BFUkFUSVZPLCBiYWNrdXAuZm9yUGtSYWl6LnZpdmllbmRhLCBiYWNrdXAucmVzcHVlc3Rhc1JhaXosIGJhY2t1cC5yZXNwdWVzdGFzUmFpel1cclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgICAgIH0pLmFycmF5KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBvazonb2snXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjb25zaXN0aXJfdml2aWVuZGEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICxyZWZlcmVuY2VzOidvcGVyYXRpdm9zJywgIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid2aXZpZW5kYScgICAgICAgLHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciB7YmUsIGNsaWVudH0gPWNvbnRleHQ7XHJcbiAgICAgICAgICAgIGxldCBwYXJhbV9wcm9jPXtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogcGFyYW1ldGVycy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBpZF9jYXNvOiBwYXJhbWV0ZXJzLnZpdmllbmRhXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlOiBzdHJpbmd8bnVsbDtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdGFkbzogc3RyaW5nfG51bGw7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIHJlc3VsdGFkbz0gYXdhaXQgYmUucHJvY2VkdXJlLmNvbnNpc3Rpcl9lbmN1ZXN0YS5jb3JlRnVuY3Rpb24oY29udGV4dCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Byb2MsIGNsaWVudFxyXG4gICAgICAgICAgICAgICAgKTsgICAgXHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgZXJyTWVzc2FnZSA9IFwiIGNvbnNpc3Rpcl92aXZpZW5kYS4gXCIrIGVyciA7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJNZXNzYWdlKVxyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnKioqKioqIGNvbnNpc3Rpcl92aXZpZW5kYSByZXN1bHRhZG86JyxyZXN1bHRhZG8pICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBvazonb2snXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fcmVzY2F0YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonbG9jYWxTdG9yYWdlSXRlbScgICAgICAgLCB0eXBlTmFtZTonanNvbmInfSxcclxuICAgICAgICAgICAge25hbWU6J2xvY2FsU3RvcmFnZUl0ZW1LZXknICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIge2xvY2FsU3RvcmFnZUl0ZW1LZXksIGxvY2FsU3RvcmFnZUl0ZW19ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsb2NhbFN0b3JhZ2VJdGVtKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoJ2xvY2FsLXJlc2NhdGUudHh0JywgSlNPTi5zdHJpbmdpZnkoe25vdzpuZXcgRGF0ZSgpLHVzZXI6Y29udGV4dC51c2VybmFtZSwgaXRlbUtleTogbG9jYWxTdG9yYWdlSXRlbUtleSwgaXRlbURhdGE6IGxvY2FsU3RvcmFnZUl0ZW19KSsnXFxuXFxuJywgJ3V0ZjgnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUicsZXJyKTtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnb3BlcmF0aXZvX2dldCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXSxcclxuICAgICAgICB1bmxvZ2dlZDp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdnZXRfcmFuZG9tX2ZyZWVfY2FzZScsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbe25hbWU6J29wZXJhdGl2bycgICAgLCB0eXBlTmFtZTondGV4dCd9XSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbnNUb0V4cGlyZSA9IDMwO1xyXG4gICAgICAgICAgICBjb25zdCBtaW5zU2luY2VCbG9xdWVkID0gYGRhdGVfcGFydCgnbWluJywgYWdlKGN1cnJlbnRfdGltZXN0YW1wLCBmZWNoYV9ibG9xdWVvKSlgO1xyXG4gICAgICAgICAgICBjb25zdCBlbmMgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgc2VsZWN0IGVuYyBmcm9tIHRlbSB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIChsaWJyZSBvciAke21pbnNTaW5jZUJsb3F1ZWR9ID4gJHttaW5zVG9FeHBpcmV9KSBsaW1pdCAxO2AsW3BhcmFtcy5vcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVZhbHVlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBVUERBVEUgdGVtIHNldCBsaWJyZSA9IGZhbHNlLCBmZWNoYV9ibG9xdWVvPWN1cnJlbnRfdGltZXN0YW1wIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyYCxbcGFyYW1zLm9wZXJhdGl2bywgZW5jLnZhbHVlXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZW5jLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnYWNjaW9uX3RhcmVhc190ZW1fZWplY3V0YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonY29uZGljaW9uJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidhY2Npb24nICAgICAgICAgICwgdHlwZU5hbWU6J2pzb25iJ30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZSA9ICBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgYWNjaW9uID0gcGFyYW1zLmFjY2lvbiBhcyBFc3RhZG9BY2Npb247XHJcbiAgICAgICAgICAgIHZhciBjdW1wbGU6Ym9vbGVhbiA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgYWNjaW9uX2N1bXBsZV9jb25kaWNpb24oJDUsICQ2LCAkNywgJDgsIChcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgY29uZGljaW9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgZnJvbSBlc3RhZG9zX2FjY2lvbmVzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVzdGFkbyA9ICQyIGFuZCBlYWNjaW9uID0gJDMgYW5kIGVzdGFkb19kZXN0aW5vID0gJDRcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKWAsIFtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sIFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkbywgXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZWFjY2lvbiwgXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm8sXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLCBcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG8sIFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVuYywgXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZWFjY2lvbixcclxuICAgICAgICAgICAgXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgaWYoIWN1bXBsZSl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gc2UgcHVkbyBlamVjdXRhciBsYSBhY2Npw7NuLCBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzbiBcIiR7cGFyYW1zLmNvbmRpY2lvbn1cIiBvIGJpZW4gZWwgZXN0YWRvIGVzdMOhIGRlc2FjdHVhbGl6YWRvLCByZWZyZXNxdWUgbGEgZ3JpbGxhLmApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBlbmM9JDIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sIFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5lbmMsIFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50YXJlYSwgXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgaWYoYWNjaW9uLm5vbWJyZV9wcm9jZWR1cmUpe1xyXG4gICAgICAgICAgICAgICAgaWYoYmUucHJvY2VkdXJlW2FjY2lvbi5ub21icmVfcHJvY2VkdXJlXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlW2FjY2lvbi5ub21icmVfcHJvY2VkdXJlXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIGV4aXN0ZSBlbCBwcm9jZWR1cmUgXCIke2FjY2lvbi5ub21icmVfcHJvY2VkdXJlfVwiIGRlZmluaWRvIGVuIGxhIHRhYmxhIFwiZXN0YWRvc19hY2Npb25lc1wiIHBhcmEgZWxcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86ICR7YWNjaW9uLm9wZXJhdGl2b30sIGVzdGFkbzogJHthY2Npb24uZXN0YWRvfSwgZWFjY2lvbjogJHthY2Npb24uZWFjY2lvbn0uYClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBCVVNDTyBQQVNFIERFIFRBUkVBXHJcbiAgICAgICAgICAgIHZhciB0YXJlYVNpZ3VpZW50ZSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3Byb3hpbWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2byA9ICQxIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEgPSAkMiBhbmQgZXN0YWRvID0gJDMgYW5kIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYV9jdW1wbGVfY29uZGljaW9uKCQ0LCAkNSwgJDYsICQ3LCBjb25kaWNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgb3JkZW5cclxuICAgICAgICAgICAgICAgICAgICBsaW1pdCAxYFxyXG4gICAgICAgICAgICAsW1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm8sXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLCBcclxuICAgICAgICAgICAgICAgIHBhcmFtcy50YXJlYSxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlubyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5lbmNcclxuICAgICAgICAgICAgXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpKS5yb3c7XHJcbiAgICAgICAgICAgIGlmKHRhcmVhU2lndWllbnRlKXtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgXHJcbiAgICAgICAgICAgICAgICAgICAgLFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCB0YXJlYVNpZ3VpZW50ZS50YXJlYV9kZXN0aW5vXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGF1dG9Bc2lnbmFkbyA9IHRhcmVhU2lndWllbnRlLnJlZ2lzdHJhX3JlY2VwY2lvbmlzdGE/Y29udGV4dC51c2VyLmlkcGVyOm51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgcSA9IGNvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0c19lbnRyYWRhID0gY3VycmVudF90aW1lc3RhbXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7YXV0b0FzaWduYWRvP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiLCByZWNlcGNpb25pc3RhPVwiK3EoYXV0b0FzaWduYWRvKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOlwiXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmBcclxuICAgICAgICAgICAgICAgICAgICAsW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIHRhcmVhU2lndWllbnRlLnRhcmVhX2Rlc3Rpbm9dXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRklOIFBBU0UgREUgVEFSRUFcclxuICAgICAgICAgICAgcmV0dXJuIFwib2tcIjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2NhcmdhX3ByZXBhcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJ2NhcmdhcidcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rpc3BvbmliaWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgYXNpZ25hZG8gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19jYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9kZXNjYXJnYV9wcmVwYXJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICdkZXNjYXJnYXInXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19kZXNjYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSAnY2FyZ2FyJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYW5hbGl6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuY29uc2lzdGlyX2VuY3Vlc3RhLmNvcmVGdW5jdGlvbihjb250ZXh0LCB7b3BlcmF0aXZvOnBhcmFtcy5vcGVyYXRpdm8sIGlkX2Nhc286cGFyYW1zLmVuY30pXHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfdmVyaWZpY2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9ICcxJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fdmVyaWZpY2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2NlcnJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSAnMScsIGFzaWduYWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuYywgY29udGV4dC51c2VyLmlkcGVyXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fY2VycmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3N1cGVydmlzYXJfcHJlc2VuY2lhbCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnc3VwZScsIDFdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9zdXBlcnZpc2FyX3RlbGVmb25pY2EnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzLCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3N1cGUnLCAyXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fc3VwZXJ2aXNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdmaW5jJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3Bhc2FyX2FfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnYW5hYyddKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0NDJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYSBpbiAoJDMsJDQpIC0tcXVpZXJvIHBhc2FyIGxhcyAyIHRhcmVhcyBhIENDXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19wYXNhcl9hX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdBJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICcwRCdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rldm9sdmVyX3Byb2NfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAncHJvYyddKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0EnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAncHJvYyddKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCxwYXJhbXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2Rldm9sdmVyX3Byb2NfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV9ub192ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQscGFyYW1zKTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX3Bhc2FyX2FfYW5hYy5jb3JlRnVuY3Rpb24oY29udGV4dCxwYXJhbXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3JlY3VwZXJhcl9kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHtvcGVyYXRpdm8sIGVuYywgdGFyZWF9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgJ3JlY3UnXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnVicgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCB0YXJlYV0pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgLyp2YXIgZm9yemFyVGFyZWFFbmN1ZXN0YVByb2MgPSBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfZm9yemFyX3RhcmVhO1xyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2byxlbmMsdGFyZWE6dGFyZWFfYWN0dWFsfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgZm9yemFyVGFyZWFFbmN1ZXN0YVByb2MuY29yZUZ1bmN0aW9uKGNvbnRleHQse29wZXJhdGl2byxlbmMsdGFyZWFfYWN0dWFsLHRhcmVhX251ZXZhOidyZWN1J30pO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJyovXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9mb3J6YXJfdGFyZWEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhX2FjdHVhbCcgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWFfbnVldmEnICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbCwgdGFyZWFfbnVldmF9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbCwgdGFyZWFfbnVldmFdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdWJyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbF0pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJzBEJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfbnVldmFdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9oYWJpbGl0YXJfZGVzaGFiaWxpdGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgaGFiaWxpdGFkYSA9IG5vdCBoYWJpbGl0YWRhXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogQUNDSU9OX1BBU0FSX1BST0lFLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgbGV0IHBhcmFtZXRyb3MgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ICogZnJvbSBwYXJhbWV0cm9zIHdoZXJlIHVuaWNvX3JlZ2lzdHJvYCxcclxuICAgICAgICAgICAgW10pLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGBzZWxlY3QgdC5vcGVyYXRpdm8sIHQuZW5jLCB0LnRhcmVhX2FjdHVhbCwgdHQudHNfZW50cmFkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIHR0IGpvaW4gdGVtIHQgdXNpbmcgKG9wZXJhdGl2byxlbmMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0dC5vcGVyYXRpdm89JDEgYW5kIHR0LnRhcmVhPSAkMiBhbmQgKCR7Z2V0RGlhc0FQYXNhclF1ZXJ5KCd0dCcpfSA8PSAwIG9yIGNvYWxlc2NlKHR0LmFkZWxhbnRhcixmYWxzZSkpIGFuZCB0dC50YXJlYSA9IHQudGFyZWFfYWN0dWFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbSB0dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ1YnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKCR7c2VsZWN0fSkgYXV4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2byA9IGF1eC5vcGVyYXRpdm8gYW5kIHR0LmVuYyA9IGF1eC5lbmMgYW5kIHR0LnRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYycsICdmaW5jJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICAvL1RPRE8gYXNpZ25hciBlbiBwcm9jZXNhbWllbnRvXHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbSB0dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0EnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKCR7c2VsZWN0fSkgYXV4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2byA9IGF1eC5vcGVyYXRpdm8gYW5kIHR0LmVuYyA9IGF1eC5lbmMgYW5kIHR0LnRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYycsICdwcm9jJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtIHRcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJ3Byb2MnXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSB0Lm9wZXJhdGl2byA9IGF1eC5vcGVyYXRpdm8gYW5kIHQuZW5jID0gYXV4LmVuY1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCAsXHJcbiAgICAgICAgICAgIFtwYXJhbWV0cm9zLm9wZXJhdGl2bywgJ2ZpbmMnXSkuZmV0Y2hBbGwoKTtcclxuICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonaW50ZXJjYW1iaWFyX2VuY3Vlc3RhcycsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMxJyAgICAgICAgICAgICxyZWZlcmVuY2VzOid0ZW0nICwgdHlwZU5hbWU6J3RleHQnICAgIH0sXHJcbiAgICAgICAgICAgIHtuYW1lOidjYW50SG9nMScgICAgICAgICAgICAgICAgICAgICAgICAgICwgdHlwZU5hbWU6J2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMyJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnICAgIH0sXHJcbiAgICAgICAgICAgIHtuYW1lOidjYW50SG9nMicgICAgICAgICAgICAgICAgICAgICAgICAgICwgdHlwZU5hbWU6J2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHtuYW1lOidwYXNvJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdHlwZU5hbWU6J2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHtuYW1lOidjb25maXJtYScgICAgICAgICAgICAgICAgICwgdHlwZU5hbWU6J2Jvb2xlYW4nLCBkZWZhdWx0VmFsdWU6ZmFsc2UsIGxhYmVsOidDb25maXJtYSBpbnRlcmNhbWJpbyBkZSBsb3MgZGF0b3MgZW50cmUgbGFzIGVuY3Vlc3Rhcz8gJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6Wydjb29yX3Byb2MnLCdwcm9jZXNhbWllbnRvJywnYWRtaW4nXSxcclxuICAgICAgICBwcm9ncmVzczp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBQYXJhIGNvbnRyb2xhcjpcclxuICAgICAgICAgICAgICogLSBxdWUgbGFzIGhvZ2FyZXMsIHBlcnNvbmFzLCBldGMgZXN0w6luIGludGVyY2FtYmlhZGFzIFxyXG4gICAgICAgICAgICAgKiAgKiB0YW50byBlbiBlbCBqc29uXHJcbiAgICAgICAgICAgICAqICAqIGNvbW8gZW4gbGFzIFREc1xyXG4gICAgICAgICAgICAgKiAtIGNvc2FzIHF1ZSBzZSBjYWxjdWxhbiBwb3IgbGEgYXBwPyBjdWFsZXM/IChyZXN1bWVuX2VzdGFkbywgcmVhIHkgbm9yZWEpXHJcbiAgICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY29uZmlybWEpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb25maXJtw7MgaW50ZXJjYW1iaW8nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICggIXBhcmFtcy5lbmMxIHx8ICFwYXJhbXMuZW5jMikgIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIEZhbHRhIGluZ3Jlc2FyIHVuIG51bWVybyBkZSBlbmN1ZXN0YSEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIHBhcmFtcy5lbmMxPT1wYXJhbXMuZW5jMikgIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIGVuYzEgeSBlbmMyIGRlYmVuIHNlciBkaXN0aW50b3MhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY2FudEhvZzEpICB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBDYW50aWRhZCBkZSBIb2dhcmVzIGRlIGVuYzEsIG5vIGVzdGEgaW5ncmVzYWRvIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmNhbnRIb2cyKSAge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgQ2FudGlkYWQgZGUgSG9nYXJlcyBkZSBlbmMyLCBubyBlc3RhIGluZ3Jlc2FkbyEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDT05UUk9MQVIgUVVFIE5JTkdVTkEgREUgTEFTIDIgZW5jdWVzdGFzIEVTVEUgQ0FSR0FEQSwgQUJJRVJUQSBGQUxUQVxyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGNhbnRfaG9ncz0oYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHZpdmllbmRhLCBjb3VudCgqKW5oIGZyb20gaG9nYXJlcyB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICh2aXZpZW5kYT0kMiBvciB2aXZpZW5kYT0kMylcclxuICAgICAgICAgICAgICAgIGdyb3VwIGJ5IHZpdmllbmRhIG9yZGVyIGJ5IHZpdmllbmRhXHJcbiAgICAgICAgICAgICAgICBgLFtPUEVSQVRJVk8sIHBhcmFtcy5lbmMxLCBwYXJhbXMuZW5jMl0pLmZldGNoQWxsKCkpLnJvd3M7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHBhcmFtX25oPVtwYXJhbXMuY2FudEhvZzEscGFyYW1zLmNhbnRIb2cyXTtcclxuICAgICAgICAgICAgY2FudF9ob2dzLmZvckVhY2goKHhlLGkpPT57XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1fbmhbaV0gIT09IHhlLm5oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1lbnM9YEVycm9yLCBubyBjb2luY2lkZSBsYSBjYW50aWRhZCBkZSBob2dhcmVzIGRlIGVuYyR7aSsxfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHhtZW5zKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pOyAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciByZWdFbmM9KGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgc2VsZWN0IGVuYywgdGFyZWFfYWN0dWFsLCBqc29uX2VuY3Vlc3RhIGZyb20gdGVtIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKGVuYyA9JDIgb3IgZW5jPSQzKSBvcmRlciBieSBlbmNcclxuICAgICAgICAgICAgYCxbT1BFUkFUSVZPLCBwYXJhbXMuZW5jMSwgcGFyYW1zLmVuYzJdKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHJlZ0VuYy5sZW5ndGghPTIpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgTm8gc2UgZW5jb250cmFyb24gMiBlbmN1ZXN0YXMnKSAgICBcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAvLyBsaW1waWEgbGFzIFREcyAgXHJcbiAgICAgICAgICAgICAgICBsZXQgW2VuYzEsZW5jMl0gPSBbcmVnRW5jWzBdLCByZWdFbmNbMV1dXHJcbiAgICAgICAgICAgICAgICBpZihwYXJhbXMucGFzbyA9PSAxKXtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGRlbGV0ZSBmcm9tIHZpdmllbmRhcyB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICh2aXZpZW5kYT0kMiBPUiB2aXZpZW5kYT0kMylgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICwgW09QRVJBVElWTywgZW5jMS5lbmMsIGVuYzIuZW5jXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYocGFyYW1zLnBhc28gPT0gMil7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9zaW11bGEgZ3VhcmRhZG9cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvKGNvbnRleHQsIE9QRVJBVElWTywgZW5jMS5lbmMsIGVuYzEudGFyZWFfYWN0dWFsICwgZW5jMi5qc29uX2VuY3Vlc3RhKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgT1BFUkFUSVZPLCBlbmMyLmVuYywgZW5jMi50YXJlYV9hY3R1YWwgLCBlbmMxLmpzb25fZW5jdWVzdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIChgTGlzdG8gcGFzbyAke3BhcmFtcy5wYXNvfS4gSW50ZXJjYW1iaW8gcmVhbGl6YWRvIGVudHJlIGxhcyBlbmN1ZXN0YXMgICR7cGFyYW1zLmVuYzF9IHkgJHtwYXJhbXMuZW5jMn0uIFBvciBmYXZvciBjb25zaXN0YSBsYSBlbmN1ZXN0YWApXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHsgICAgIFxyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhZG9yX2Rtc19tb3N0cmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCcsIHJlZmVyZW5jZXM6XCJvcGVyYXRpdm9zXCJ9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jdWVzdGFkb3InICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazonbW9zdHJhcl9lbmN1ZXN0YXNfYV9ibGFucXVlYXInLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCAqXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBhc2lnbmFkbyA9ICQyIGFuZCBjYXJnYWRvX2RtIGlzIG5vdCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgY2FyZ2Fkb19kbVxyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jdWVzdGFkb3JdKVxyXG4gICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYocmVzdWx0LnJvd0NvdW50ID09IDApe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IgKGBObyBzZSBlbmNvbnRyYXJvbiBlbmN1ZXN0YXMgY2FyZ2FkYXMgZW4gdW4gRE0gcGFyYSBlbCBvcGVyYXRpdm8gJHtwYXJhbXMub3BlcmF0aXZvfSwgZW5jdWVzdGFkb3IgJHtwYXJhbXMuZW5jdWVzdGFkb3J9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge3Jvd3M6IHJlc3VsdC5yb3dzLCBvcGVyYXRpdm86IHBhcmFtcy5vcGVyYXRpdm99O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fYmxhbnF1ZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCcsIHJlZmVyZW5jZXM6XCJvcGVyYXRpdm9zXCJ9LFxyXG4gICAgICAgICAgICB7bmFtZTondG9rZW4nICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBjb25zdCBVQV9QUklOQ0lQQUwgPSBhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIGxldCB0YXJlYXNUZW1SZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBjYXJnYWRvX2RtID0gbnVsbCwgb3BlcmFjaW9uID0gJ2Rlc2NhcmdhcicsIGVzdGFkbyA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBjYXJnYWRvX2RtID0gJDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRva2VuLCBFU1RBRE9fUE9TVEVSSU9SX0RFU0NBUkdBXSlcclxuICAgICAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIGlmKHRhcmVhc1RlbVJlc3VsdC5yb3dDb3VudCA9PSAwKXtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yKCdObyBzZSBibGFucXVlw7MgbmluZ3VuYSBlbmN1ZXN0YScpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yKGxldCB0dCBvZiB0YXJlYXNUZW1SZXN1bHQucm93cyl7XHJcbiAgICAgICAgICAgICAgICB0dC5yZXN1bHRfYmxhbnF1ZW8gPSBgZW5jICR7dHQuZW5jfSBzZSBibGFucXVlw7MgY29ycmVjdGFtZW50ZS5gO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdEJhY2t1cCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBqc29uX2VuY3Vlc3RhID0ganNvbl9iYWNrdXAsIGZlY2hhX21vZGlmX2VuY3Vlc3RhID0gZmVjaGFfYmFja3VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCBmZWNoYV9iYWNrdXAgPiBjb2FsZXNjZShmZWNoYV9tb2RpZl9lbmN1ZXN0YSwgJzE5MDAtMDEtMDEnKSBhbmQganNvbl9iYWNrdXAgaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgIFt0dC5vcGVyYXRpdm8sIHR0LmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0QmFja3VwLnJvd0NvdW50KXtcclxuICAgICAgICAgICAgICAgICAgICB0dC5yZXN1bHRfYmxhbnF1ZW8rPWAgU2UgcmVzdGFibGVjacOzIGVsIGJhY2t1cCBjb24gZmVjaGEgJHtyZXN1bHRCYWNrdXAucm93LmZlY2hhX2JhY2t1cC50b1ltZEhtcygpfS5gXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHtwYXJhbXM6cXVlcnlQYXJhbXMsc2V0dGVyc30gPSBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhOiB0dC50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiByZXN1bHRCYWNrdXAucm93Lmpzb25fZW5jdWVzdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFt0dC5vcGVyYXRpdm8sIHR0LmVuYywgdHQudGFyZWFdXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgJHtzZXR0ZXJzLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1xyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvKGNvbnRleHQsIHJlc3VsdEJhY2t1cC5yb3cub3BlcmF0aXZvLCByZXN1bHRCYWNrdXAucm93LmVuYywgdHQudGFyZWEscmVzdWx0QmFja3VwLnJvdy5qc29uX2VuY3Vlc3RhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0YXJlYXNUZW1SZXN1bHQucm93cztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5dO1xyXG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dmencu",
|
|
3
3
|
"description": "DM Encu - Encuestas en dispositivo móvil",
|
|
4
|
-
"version": "0.8.
|
|
4
|
+
"version": "0.8.12",
|
|
5
5
|
"author": "Codenautas <codenautas@googlegroups.com>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/server/server/app-dmencu.js",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"memoize-one": "~6.0.0",
|
|
16
16
|
"meta-enc": "^1.4.9",
|
|
17
17
|
"procesamiento": "^1.0.16",
|
|
18
|
-
"backend-plus": "^2.0.0-rc.
|
|
18
|
+
"backend-plus": "^2.0.0-rc.7",
|
|
19
19
|
"qrcode": "^1.5.3",
|
|
20
20
|
"react": "~17.0.2",
|
|
21
21
|
"react-dom": "~17.0.2",
|