dmencu 3.6.1 → 3.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -173,9 +173,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
173
173
|
return idEnc;
|
|
174
174
|
});
|
|
175
175
|
}
|
|
176
|
+
// las definiciones de tabla de las apps leen context.user (por ejemplo user.rol para decidir si es editable);
|
|
177
|
+
// los procedimientos unlogged (como dm_forpkraiz_descargar) pueden llegar con la sesión vencida y sin usuario.
|
|
178
|
+
// La estructura (claves y tablas hijas) no depende de la persona, por eso se pide con el contexto que backend-plus
|
|
179
|
+
// usa para el dump y el menú, y no con el de la sesión.
|
|
180
|
+
function contextParaEstructura(be) {
|
|
181
|
+
return be.getContextForDump();
|
|
182
|
+
}
|
|
176
183
|
function createStructure(context, tableName) {
|
|
177
184
|
var be = context.be;
|
|
178
|
-
var
|
|
185
|
+
var contextEstructura = contextParaEstructura(be);
|
|
186
|
+
var mainTableDef = be.tableStructures[tableName](contextEstructura);
|
|
179
187
|
var getPkFromTableDef = function getPkFromTableDef(tableDef) {
|
|
180
188
|
return tableDef.primaryKey.map(function (pk) {
|
|
181
189
|
return { fieldName: pk };
|
|
@@ -193,7 +201,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
193
201
|
if (mainTableDef.detailTables && mainTableDef.detailTables.length) {
|
|
194
202
|
mainTableDef.detailTables.forEach(function (detailTable) {
|
|
195
203
|
if (detailTable.table) {
|
|
196
|
-
struct.childTables.push((0, best_globals_1.changing)(createStructure(context, detailTable.table), { fkFields: getFkFromTableDef(be.tableStructures[detailTable.table](
|
|
204
|
+
struct.childTables.push((0, best_globals_1.changing)(createStructure(context, detailTable.table), { fkFields: getFkFromTableDef(be.tableStructures[detailTable.table](contextEstructura), tableName) }));
|
|
197
205
|
}
|
|
198
206
|
});
|
|
199
207
|
}
|
|
@@ -245,8 +253,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
245
253
|
return yield context.client.query(sql, params).fetchUniqueRow();
|
|
246
254
|
});
|
|
247
255
|
exports.guardarEncuestaEnTem = guardarEncuestaEnTem;
|
|
248
|
-
function registrarPaseTabla(
|
|
249
|
-
return __awaiter(this,
|
|
256
|
+
function registrarPaseTabla(context_1, operativo_1, idEnc_1, respuestasUAPrincipal_1) {
|
|
257
|
+
return __awaiter(this, arguments, void 0, function* (context, operativo, idEnc, respuestasUAPrincipal, origen = 'dm_forpkraiz_descargar') {
|
|
250
258
|
var be = context.be;
|
|
251
259
|
var procedureGuardar = be.procedure.caso_guardar;
|
|
252
260
|
let resultado = `id enc ${idEnc}: `;
|
|
@@ -260,14 +268,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
260
268
|
catch (err) {
|
|
261
269
|
yield context.client.query(`ROLLBACK TO SAVEPOINT ${savepointName}`).execute();
|
|
262
270
|
var error = (0, cast_error_1.expected)(err);
|
|
263
|
-
let errMessage = resultado + "
|
|
271
|
+
let errMessage = resultado + origen + ". " + error.message;
|
|
264
272
|
resultado = errMessage;
|
|
265
273
|
console.error(errMessage, error);
|
|
266
274
|
}
|
|
267
|
-
|
|
275
|
+
yield context.client.query(`update tem
|
|
268
276
|
set pase_tabla = $3
|
|
269
277
|
where operativo = $1 and enc = $2
|
|
270
278
|
returning 'ok'`, [operativo, idEnc, resultado]).fetchUniqueRow();
|
|
279
|
+
return resultado;
|
|
271
280
|
});
|
|
272
281
|
}
|
|
273
282
|
var simularGuardadoDeEncuestaDesdeAppEscritorio = (context, operativo, enc, tarea, json_encuesta) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -720,6 +729,7 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
720
729
|
var datos_json = parameters.datos_caso;
|
|
721
730
|
var be = context.be;
|
|
722
731
|
var tableStructures_app = be.tableStructures;
|
|
732
|
+
var contextEstructura = contextParaEstructura(be);
|
|
723
733
|
var struct_dmencu = createStructure(context, unidad_analisis);
|
|
724
734
|
datos_json['operativo'] = parameters.operativo;
|
|
725
735
|
datos_json[pk_agregada] = parameters.id_caso;
|
|
@@ -738,7 +748,7 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
738
748
|
for (var keyName in datosj) {
|
|
739
749
|
var datoK = datosj[keyName];
|
|
740
750
|
if (datoK instanceof Array && datoK.length >= 1) {
|
|
741
|
-
var pk = tableStructures_app[keyName](
|
|
751
|
+
var pk = tableStructures_app[keyName](contextEstructura).primaryKey;
|
|
742
752
|
var ult_pk = pk[pk.length - 1];
|
|
743
753
|
datoK = completar_ult_pk_en_arr(ult_pk, datoK);
|
|
744
754
|
datoK.forEach((elemI) => {
|
|
@@ -780,6 +790,24 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
780
790
|
});
|
|
781
791
|
}
|
|
782
792
|
},
|
|
793
|
+
{
|
|
794
|
+
// vuelve a pasar a las tablas la encuesta guardada en la TEM cuyo pase falló (por ejemplo por sesión vencida al sincronizar)
|
|
795
|
+
action: 'pase_tabla_reintentar',
|
|
796
|
+
parameters: [
|
|
797
|
+
{ name: 'operativo', typeName: 'text', references: 'operativos' },
|
|
798
|
+
{ name: 'enc', typeName: 'text' },
|
|
799
|
+
],
|
|
800
|
+
coreFunction: function (context, params) {
|
|
801
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
802
|
+
var { json_encuesta } = (yield context.client.query(`select json_encuesta from tem where operativo = $1 and enc = $2`, [params.operativo, params.enc]).fetchUniqueRow()).row;
|
|
803
|
+
if (!json_encuesta) {
|
|
804
|
+
return { ok: false, message: 'la encuesta no tiene respuestas guardadas en la TEM' };
|
|
805
|
+
}
|
|
806
|
+
var resultado = yield registrarPaseTabla(context, params.operativo, params.enc, json_encuesta, 'pase_tabla_reintentar');
|
|
807
|
+
return { ok: !resultado.includes('pase_tabla_reintentar.'), message: resultado };
|
|
808
|
+
});
|
|
809
|
+
}
|
|
810
|
+
},
|
|
783
811
|
{
|
|
784
812
|
action: 'caso_traer',
|
|
785
813
|
parameters: [
|
|
@@ -2368,4 +2396,4 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
2368
2396
|
}
|
|
2369
2397
|
];
|
|
2370
2398
|
});
|
|
2371
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlcy1kbWVuY3UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL3Byb2NlZHVyZXMtZG1lbmN1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUF3TWIsOENBZUM7SUFJRCxnRkF3QkM7SUFrTUQsd0RBYUM7SUFrREQsb0RBaUNDO0lBS0QsMEVBcURDO0lBM2tCRCxrQ0FBbUM7SUFDbkMsaURBQStCO0lBSy9CLHlEQUE0RDtJQUU1RCwrQ0FBd0Q7SUFDeEQsMkJBQW9DO0lBRXBDLGdEQUFnRDtJQUdoRCx5REFBd0Q7SUFDeEQsbUVBQTZEO0lBQzdELHFDQUFnQztJQUVoQywyQ0FBa0Q7SUFDbEQsNkNBQW1FO0lBQ25FLG1DQUFzRDtJQUV0RCw2REFBcUc7SUFFckcsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVwQyxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFM0MsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBRTdCLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0lBQ25DLE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFDO0lBQ3RDLE1BQU0sd0JBQXdCLEdBQUcsUUFBUSxDQUFDO0lBQzFDLE1BQU0sMkJBQTJCLEdBQUcsV0FBVyxDQUFDO0lBQ2hELE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztJQUkxQixJQUFJLGVBQWdDLENBQUM7SUFDckMsSUFBSSxjQUFjLEdBQUcsR0FBRyxDQUFBO0lBRWpCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFvQixFQUFFLEVBQUUsQ0FDdkQsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQURiLFFBQUEsa0JBQWtCLHNCQUNMO0lBRW5CLE1B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QzNCLE1BQU0sR0FBRyxPQUFPLENBQUM7b0JBRXZCLE9BQU8sR0FBRyxDQUFDO2dCQUNmLENBQUM7YUFBQTtTQUNKO1FBQ0Q7WUFDSSxNQUFNLEVBQUUsNEJBQTRCO1lBQ3BDLFVBQVUsRUFBRTtnQkFDUixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFO2dCQUNqRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTthQUNwQztZQUNELEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUNoQixZQUFZLEVBQUUsVUFBZ0IsT0FBeUIsRUFBRSxVQUEyRTs7b0JBQ2hJLENBQUMsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDdkI7OztnQ0FHZ0IsRUFDaEIsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FDekMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztvQkFFeEIsT0FBTyx3QkFBd0IsVUFBVSxDQUFDLEdBQUcsZUFBZSxDQUFDO2dCQUNqRSxDQUFDO2FBQUE7U0FDSjtLQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IFByb2NlZHVyZURlZiwgVGFibGVEZWZpbml0aW9uLCBDbGllbnQsIFRhYmxlRGVmaW5pdGlvbnMsIEFwcEJhY2tlbmQgfSBmcm9tIFwiLi90eXBlcy1kbWVuY3VcIjtcclxuaW1wb3J0IHsgUHJvY2VkdXJlQ29udGV4dCwgQ29yZUZ1bmN0aW9uUGFyYW1ldGVycywgRm9yZWlnbktleSB9IGZyb20gXCJtZXRhLWVuY1wiO1xyXG5pbXBvcnQgbGlrZUFyID0gcmVxdWlyZShcImxpa2UtYXJcIik7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLWRtZW5jdVwiO1xyXG5pbXBvcnQgeyBJZFVuaWRhZEFuYWxpc2lzLCBVbmlkYWRBbmFsaXNpcywgRXN0YWRvQWNjaW9uLCBJZEVuYywgSWRUYXJlYSwgUmVzcHVlc3Rhc1JhaXosIElkT3BlcmF0aXZvLCBJZENhcmdhLCBNb2RvRE0sIFJlYSwgTm9SZWEsIE5vUmVhU3VwLCBSZWFTdXAsIFJlc3VsdGFkb1Jlc3VtZW4gfSBmcm9tIFwiLi4vdW5sb2dnZWQvdGlwb3NcIjtcclxuXHJcbmltcG9ydCB7IE9wZXJhdGl2b0dlbmVyYXRvciB9IGZyb20gXCJwcm9jZXNhbWllbnRvXCI7XHJcblxyXG5pbXBvcnQgeyBqc29uLCBqc29ubywgUmVzdWx0Um93cyB9IGZyb20gXCJwZy1wcm9taXNlLXN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgY2hhbmdpbmcsIGRhdGUsIGNvYWxlc2NlIH0gZnJvbSAnYmVzdC1nbG9iYWxzJztcclxuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tIFwiZnNcIjtcclxuXHJcbmltcG9ydCAqIGFzIEV4cHJlc2lvblBhcnNlciBmcm9tICdleHByZS1wYXJzZXInO1xyXG5pbXBvcnQgeyB0YXJlYXMgfSBmcm9tIFwiLi90YWJsZS10YXJlYXNcIjtcclxuaW1wb3J0IHsgcHJlcGVuZExpc3RlbmVyIH0gZnJvbSBcInByb2Nlc3NcIjtcclxuaW1wb3J0IHsgZ2V0RGlhc0FQYXNhclF1ZXJ5IH0gZnJvbSBcIi4vdGFibGUtdGFyZWFzX3RlbVwiO1xyXG5pbXBvcnQgeyBzcWxEZXN2ZXJpZmljYWJsZXMgfSBmcm9tIFwiLi90YWJsZS1kZXN2ZXJpZmljYWJsZXNcIjtcclxuaW1wb3J0IHsgZXJyb3IgfSBmcm9tIFwiY29uc29sZVwiO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcInZtXCI7XHJcbmltcG9ydCB7IGV4cGVjdGVkLCB1bmV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuaW1wb3J0IHsgZ2V0TW9kb0J5UG9saWN5LCBxdWllbkNvbnN1bHRhQXl1ZGEgfSBmcm9tIFwiLi9hcHAtZG1lbmN1XCI7XHJcbmltcG9ydCB7IG1lbnVDb25BeXVkYSwgdGVtYXNWaXNpYmxlcyB9IGZyb20gXCIuL2F5dWRhXCI7XHJcbmltcG9ydCB0eXBlIHsgQXl1ZGFQYXJhVXN1YXJpbyB9IGZyb20gXCIuLi91bmxvZ2dlZC90aXBvc1wiO1xyXG5pbXBvcnQgeyBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbywgUGFyYW1ldHJvU3FsIH0gZnJvbSBcIi4vc2V0dGVycy1yZWEtbm8tcmVhXCI7XHJcblxyXG52YXIgUGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxudmFyIHNxbFRvb2xzID0gcmVxdWlyZSgnc3FsLXRvb2xzJyk7XHJcblxyXG52YXIgZGlzY3JlcGFuY2VzID0gcmVxdWlyZSgnZGlzY3JlcGFuY2VzJyk7XHJcblxyXG5jb25zdCBmb3JtUHJpbmNpcGFsID0gJ0Y6RjEnO1xyXG5cclxuY29uc3QgRVNUQURPX1BPU1RFUklPUl9DQVJHQSA9ICdDJztcclxuY29uc3QgRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQSA9ICdEJztcclxuY29uc3QgT1BFUkFDSU9OX1BSRVBBUkFSX0NBUkdBID0gJ2Nhcmdhcic7XHJcbmNvbnN0IE9QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQSA9ICdkZXNjYXJnYXInO1xyXG5jb25zdCBERUZBVUxUX0RPTUlOSU8gPSAzO1xyXG5cclxuZXhwb3J0IHR5cGUgZ2VuZXJhcklkRW5jRnVuID0gKGFyZWE6IG51bWJlciwgaW5kZXg6IG51bWJlcikgPT4gSWRFbmNcclxuXHJcbnZhciBnZW5lcmFySWRFbmNGdW46IGdlbmVyYXJJZEVuY0Z1bjtcclxudmFyIG1heEFFbmNQb3JBcmVhID0gOTk5XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0R2VuZXJhcklkRW5jRnVuID0gKGZ1bjogZ2VuZXJhcklkRW5jRnVuKSA9PlxyXG4gICAgZ2VuZXJhcklkRW5jRnVuID0gZnVuO1xyXG5cclxuZXhwb3J0IGNvbnN0IHNldE1heEVuY1BvckFyZWEgPSAobWF4OiBudW1iZXIpID0+XHJcbiAgICBtYXhBRW5jUG9yQXJlYSA9IG1heDtcclxuXHJcbnNldEdlbmVyYXJJZEVuY0Z1bigoYXJlYTogbnVtYmVyLCBudW1FbmM6IG51bWJlcikgPT4gYXJlYS50b1N0cmluZygpICsgbnVtRW5jLnRvU3RyaW5nKCkucGFkU3RhcnQobWF4QUVuY1BvckFyZWEudG9TdHJpbmcoKS5sZW5ndGgsICcwJykgYXMgdW5rbm93biBhcyBJZEVuYyk7XHJcblxyXG5zZXRNYXhFbmNQb3JBcmVhKDk5OSk7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZW5lcmFyTnVldm9JZEVuYyhjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBhcmVhOiBudW1iZXIsIG1heEFFbmNQb3JBcmVhOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHNpZ3VpZW50ZU51bWVyb0VuY3Vlc3RhID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBTRUxFQ1Qgb2J0ZW5lcl9zaWd1aWVudGVfY29udGFkb3JfYXJlYSgkMSwkMiwkMykgQVMgbmV4dF9jb3VudGVyO1xyXG4gICAgYCwgW29wZXJhdGl2bywgYXJlYSwgbWF4QUVuY1BvckFyZWFdKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgcmV0dXJuIGdlbmVyYXJJZEVuY0Z1bihhcmVhLCBzaWd1aWVudGVOdW1lcm9FbmN1ZXN0YSk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRPcGVyYXRpdm9BY3R1YWwgPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCkgPT4ge1xyXG4gICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgIHZhciBvcGVyYXRpdm8gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHNlbGVjdCBvcGVyYXRpdm9cclxuICAgICAgICAgICAgZnJvbSBwYXJhbWV0cm9zXHJcbiAgICAgICAgICAgIHdoZXJlIHVuaWNvX3JlZ2lzdHJvYFxyXG4gICAgICAgICwgW11cclxuICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZVxyXG4gICAgaWYgKG9wZXJhdGl2bykge1xyXG4gICAgICAgIHJldHVybiBvcGVyYXRpdm9cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoJ25vIHNlIGNvbmZpZ3Vyw7MgdW4gb3BlcmF0aXZvIGVuIGxhIHRhYmxhIHBhcsOhbWV0cm9zJyk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXREZWZhdWx0VGFyZWEoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bykge1xyXG4gICAgcmV0dXJuIChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgc2VsZWN0ICogXHJcbiAgICAgICAgICAgIGZyb20gdGFyZWFzIFxyXG4gICAgICAgICAgICB3aGVyZSBlc19pbmljaWFsIGFuZCBvcGVyYXRpdm8gPSAkMVxyXG4gICAgYCwgW29wZXJhdGl2b10pLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNsaWVudDogQ2xpZW50LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gKGF3YWl0IGNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgc2VsZWN0IHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhIFxyXG4gICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICBgLCBbb3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIE9QRVJBVElWTzogSWRPcGVyYXRpdm8sIGFyZWE6IG51bWJlciwgZW5jQXV0b2dlbmVyYWRvRG06IHN0cmluZywgdG9rZW46IHN0cmluZywgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCByZWNlcGNpb25pc3RhOiBzdHJpbmcsIGFzaWduYWRvOiBzdHJpbmcsIG1vZG9fZG06IE1vZG9ETSwgY2FtYmlhX21vZG9fZG06IGJvb2xlYW4pOiBQcm9taXNlPElkRW5jPiB7XHJcbiAgICBsZXQgaWRFbmMgPSBudWxsO1xyXG4gICAgdmFyIHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pO1xyXG4gICAgaWYgKHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhKSB7XHJcbiAgICAgICAgY29uc3QgYXV0b2dlbmVyYWRvRmllbGQgPSBtb2RvX2RtID09ICdwcm9kdWMnID8gJ2VuY19hdXRvZ2VuZXJhZG9fZG0nIDogJ2VuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSc7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0VXBkYXRlID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBVUERBVEUgdGVtIFxyXG4gICAgICAgICAgICAgICAgc2V0IChqc29uX2JhY2t1cCwganNvbl9lbmN1ZXN0YSwgZmVjaGFfYmFja3VwKSA9IFxyXG4gICAgICAgICAgICAgICAgICAgICgkNCwgJDUsIGN1cnJlbnRfdGltZXN0YW1wKVxyXG4gICAgICAgICAgICAgICAgd2hlcmUgKG9wZXJhdGl2byA9ICQxIGFuZCAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChhdXRvZ2VuZXJhZG9GaWVsZCl9ID0gJDIgYW5kIHRva2VuX2F1dG9nZW5lcmFkb19kbSA9ICQzKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICBgLCBbT1BFUkFUSVZPLCBlbmNBdXRvZ2VuZXJhZG9EbSwgdG9rZW4sIHJlc3B1ZXN0YXNSYWl6LCByZXNwdWVzdGFzUmFpel0pLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAvLyBoYWdvIGluc2VydCBwb3JxdWUgbm8gZXhpc3RlIGVuIHRlbVxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRUYXJlYSA9IGF3YWl0IGdldERlZmF1bHRUYXJlYShjb250ZXh0LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgIGlmIChyZXN1bHRVcGRhdGUucm93Q291bnQgPT0gMCkge1xyXG4gICAgICAgICAgICBpZEVuYyA9IGF3YWl0IGdlbmVyYXJOdWV2b0lkRW5jKGNvbnRleHQsIE9QRVJBVElWTywgYXJlYSwgbWF4QUVuY1BvckFyZWEpXHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIElOU0VSVCBpbnRvIHRlbSAoXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuYyxcclxuICAgICAgICAgICAgICAgICAgICBhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGRvbWluaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFkYSxcclxuICAgICAgICAgICAgICAgICAgICAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChhdXRvZ2VuZXJhZG9GaWVsZCl9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRva2VuX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgICAgICB0YXJlYV9hY3R1YWwsXHJcbiAgICAgICAgICAgICAgICAgICAganNvbl9iYWNrdXAsXHJcbiAgICAgICAgICAgICAgICAgICAganNvbl9lbmN1ZXN0YSwgXHJcbiAgICAgICAgICAgICAgICAgICAgZmVjaGFfYmFja3VwXHJcbiAgICAgICAgICAgICAgICApIFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyAoJDEsICQyLCAkMywgJDQsICQ1LCAkNiwgJDcsICQ4LCAkOSwgJDEwLCBjdXJyZW50X3RpbWVzdGFtcClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICBgLCBbXHJcbiAgICAgICAgICAgICAgICBPUEVSQVRJVk8sXHJcbiAgICAgICAgICAgICAgICBpZEVuYyxcclxuICAgICAgICAgICAgICAgIGFyZWEsXHJcbiAgICAgICAgICAgICAgICBERUZBVUxUX0RPTUlOSU8sXHJcbiAgICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZW5jQXV0b2dlbmVyYWRvRG0sXHJcbiAgICAgICAgICAgICAgICB0b2tlbixcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRUYXJlYS50YXJlYSxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXHJcbiAgICAgICAgICAgIF0pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWRFbmMgPSByZXN1bHRVcGRhdGUucm93LmVuY1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIE9QRVJBVElWTyk7XHJcbiAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgc2V0IHJlY2VwY2lvbmlzdGEgPSAkNCwgYXNpZ25hZG8gPSAkNVxyXG4gICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICBgLCBbT1BFUkFUSVZPLCBpZEVuYywgZGVmYXVsdFRhcmVhLnRhcmVhLCByZWNlcGNpb25pc3RhLCBhc2lnbmFkb10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgc2V0IGNhcmdhZG9fZG0gPSAkNCwgZXN0YWRvID0gJDUsIG9wZXJhY2lvbiA9ICQ2XHJcbiAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgIGAsIFtPUEVSQVRJVk8sIGlkRW5jLCBkZWZhdWx0VGFyZWEudGFyZWEsIHRva2VuLCBFU1RBRE9fUE9TVEVSSU9SX0NBUkdBLCBjYW1iaWFfbW9kb19kbSA/IG51bGwgOiBPUEVSQUNJT05fUFJFUEFSQVJfQ0FSR0FdXHJcbiAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkRW5jXHJcbn1cclxuXHJcbi8qZGVmaW5pY2nDs24gZGUgZXN0cnVjdHVyYSBjb21wbGV0YSwgY3VhbmRvIGV4aXN0YSBpbmctZW5jIGhheSBxdWUgcG9uZXJsbyBhaMOtKi9cclxudHlwZSBFc3RydWN0dXJhVGFibGEgPSB7IHRhYmxlTmFtZTogc3RyaW5nLCBwa0ZpZWxkczogeyBmaWVsZE5hbWU6IHN0cmluZyB9W10sIGNoaWxkVGFibGVzOiBFc3RydWN0dXJhVGFibGFbXSB9O1xyXG5mdW5jdGlvbiBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgdGFibGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICB2YXIgbWFpblRhYmxlRGVmOiBUYWJsZURlZmluaXRpb24gPSBiZS50YWJsZVN0cnVjdHVyZXNbdGFibGVOYW1lXShjb250ZXh0KTtcclxuICAgIHZhciBnZXRQa0Zyb21UYWJsZURlZiA9IGZ1bmN0aW9uIGdldFBrRnJvbVRhYmxlRGVmKHRhYmxlRGVmOiBUYWJsZURlZmluaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gdGFibGVEZWYucHJpbWFyeUtleS5tYXAoZnVuY3Rpb24gKHBrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGZpZWxkTmFtZTogcGsgfTtcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxuICAgIHZhciBnZXRGa0Zyb21UYWJsZURlZiA9IGZ1bmN0aW9uIGdldEZrRnJvbVRhYmxlRGVmKHRhYmxlRGVmOiBUYWJsZURlZmluaXRpb24sIHBhcmVudFRhYmxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHBhcmVudEZrID0gKDxGb3JlaWduS2V5W10+dGFibGVEZWYuZm9yZWlnbktleXMpLmZpbmQoZmsgPT4gZmsucmVmZXJlbmNlcyA9PSBwYXJlbnRUYWJsZU5hbWUpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRGayA/IHBhcmVudEZrLmZpZWxkcyA6IFtdO1xyXG4gICAgfVxyXG4gICAgdmFyIHN0cnVjdDogRXN0cnVjdHVyYVRhYmxhID0ge1xyXG4gICAgICAgIHRhYmxlTmFtZTogbWFpblRhYmxlRGVmLm5hbWUsXHJcbiAgICAgICAgcGtGaWVsZHM6IGdldFBrRnJvbVRhYmxlRGVmKG1haW5UYWJsZURlZiksXHJcbiAgICAgICAgY2hpbGRUYWJsZXM6IFtdXHJcbiAgICB9O1xyXG4gICAgaWYgKG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMgJiYgbWFpblRhYmxlRGVmLmRldGFpbFRhYmxlcy5sZW5ndGgpIHtcclxuICAgICAgICBtYWluVGFibGVEZWYuZGV0YWlsVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKGRldGFpbFRhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChkZXRhaWxUYWJsZS50YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgc3RydWN0LmNoaWxkVGFibGVzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmcoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0LCBkZXRhaWxUYWJsZS50YWJsZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmtGaWVsZHM6IGdldEZrRnJvbVRhYmxlRGVmKGJlLnRhYmxlU3RydWN0dXJlc1tkZXRhaWxUYWJsZS50YWJsZV0oY29udGV4dCksIHRhYmxlTmFtZSkgfVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cnVjdDtcclxufVxyXG4vKiBmaW4gZGVmaW5pY2lvbiBlc3RydWN0dXJhIGNvbXBsZXRhICovXHJcblxyXG50eXBlIEFueU9iamVjdCA9IHsgW2s6IHN0cmluZ106IGFueSB9XHJcblxyXG5cclxuZXhwb3J0IHR5cGUgQ29uc3VsdGFTcWwgPSB7IHNxbDogc3RyaW5nLCBwYXJhbXM6IFBhcmFtZXRyb1NxbFtdIH07XHJcblxyXG4vLyBncmFiYSBlbiBsYSBURU0gbGEgZW5jdWVzdGEgeSBlbCByZXN1bHRhZG8gY2FsY3VsYWRvIChyZXN1bWVuLCByZWEgeSBubyByZWE7IG8gc3VzIHZlcnNpb25lcyBfc3VwIHNpIGxhIHRhcmVhIGVzIHN1cGUpXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25zdWx0YVVwZGF0ZVRlbTxSIGV4dGVuZHMgUmVzdWx0YWRvUmVzdW1lbj4ob3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRFbmM6IHN0cmluZywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiBSLCB0YXJlYTogSWRUYXJlYSk6IENvbnN1bHRhU3FsIHtcclxuICAgIHZhciB7IHBhcmFtcywgc2V0dGVycyB9ID0gZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8oe1xyXG4gICAgICAgIHRhcmVhLFxyXG4gICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCxcclxuICAgICAgICBzZXR0ZXJzOiBbYGpzb25fZW5jdWVzdGEgPSAkM2AsIGBmZWNoYV9tb2RpZl9lbmN1ZXN0YSA9IGN1cnJlbnRfdGltZXN0YW1wYF0sXHJcbiAgICAgICAgcGFyYW1zOiBbb3BlcmF0aXZvLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsXSxcclxuICAgICAgICBkZXN0aW5vOiAndGVtJ1xyXG4gICAgfSlcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc3FsOiBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICBzZXQgJHtzZXR0ZXJzLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgLFxyXG4gICAgICAgIHBhcmFtc1xyXG4gICAgfTtcclxufVxyXG5cclxuLy8gY3VhbmRvIGVsIGRpc3Bvc2l0aXZvIGRldnVlbHZlIGxhIGVuY3Vlc3RhOiBwYXNhIGxhIHRhcmVhIGEgZGVzY2FyZ2FkYSB5IGd1YXJkYSBlbCByZXN1bHRhZG8gY2FsY3VsYWRvIGVuIGVsIGRpc3Bvc2l0aXZvIChkbV8qKTtcclxuLy8gc8OzbG8gc2kgbGEgZW5jdWVzdGEgc2lndWUgY2FyZ2FkYSBjb24gZWwgdG9rZW4gZGVsIGRpc3Bvc2l0aXZvXHJcbmV4cG9ydCBmdW5jdGlvbiBjb25zdWx0YVVwZGF0ZVRhcmVhc1RlbVBvckRlc2NhcmdhPFIgZXh0ZW5kcyBSZXN1bHRhZG9SZXN1bWVuPihvcHRzOiB7XHJcbiAgICBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBpZEVuYzogc3RyaW5nLCB0YXJlYTogSWRUYXJlYSwgdG9rZW46IHN0cmluZyxcclxuICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogUiwgcGFzYUFEZXNjYXJnYXI6IGJvb2xlYW5cclxufSk6IENvbnN1bHRhU3FsIHtcclxuICAgIHZhciB7IHBhcmFtcywgc2V0dGVycyB9ID0gZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8oe1xyXG4gICAgICAgIHRhcmVhOiBvcHRzLnRhcmVhLFxyXG4gICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogb3B0cy5yZXNwdWVzdGFzVUFQcmluY2lwYWwsXHJcbiAgICAgICAgc2V0dGVyczogW1xyXG4gICAgICAgICAgICBgZXN0YWRvID0gJyR7RVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQX0nYCxcclxuICAgICAgICAgICAgYGNhcmdhZG9fZG09bnVsbGBcclxuICAgICAgICBdLFxyXG4gICAgICAgIHBhcmFtczogW29wdHMub3BlcmF0aXZvLCBvcHRzLmlkRW5jLCBvcHRzLnRhcmVhLCBvcHRzLnRva2VuXSxcclxuICAgICAgICBkZXN0aW5vOiAndGFyZWFzX3RlbSdcclxuICAgIH0pXHJcbiAgICBpZiAob3B0cy5wYXNhQURlc2Nhcmdhcikge1xyXG4gICAgICAgIHNldHRlcnMucHVzaChgb3BlcmFjaW9uID0gJyR7T1BFUkFDSU9OX1BSRVBBUkFSX0RFU0NBUkdBfSdgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgc3FsOiBgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDMgYW5kIGNhcmdhZG9fZG0gPSAkNFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgLFxyXG4gICAgICAgIHBhcmFtc1xyXG4gICAgfTtcclxufVxyXG5cclxuLy8gbG8gcXVlIGd1YXJkYXJFbmN1ZXN0YUVuVGVtIHVzYSBkZWwgY2xpZW50ZSBkZSBiYXNlIChlbCBDbGllbnQgZGUgcGctcHJvbWlzZS1zdHJpY3QgbG8gY3VtcGxlKVxyXG5leHBvcnQgdHlwZSBDbGllbnRlUGFyYVRlbSA9IHtcclxuICAgIHF1ZXJ5KHNxbDogc3RyaW5nLCBwYXJhbXM6IFBhcmFtZXRyb1NxbFtdKTogeyBmZXRjaFVuaXF1ZVJvdygpOiBQcm9taXNlPHsgcm93Q291bnQ6IG51bWJlciB8IG51bGwgfT4gfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIGd1YXJkYXJFbmN1ZXN0YUVuVGVtID0gYXN5bmMgPFIgZXh0ZW5kcyBSZXN1bHRhZG9SZXN1bWVuPihjb250ZXh0OiB7IGNsaWVudDogQ2xpZW50ZVBhcmFUZW0gfSwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRFbmM6IHN0cmluZywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiBSLCB0YXJlYTogSWRUYXJlYSkgPT4ge1xyXG4gICAgdmFyIHsgc3FsLCBwYXJhbXMgfSA9IGNvbnN1bHRhVXBkYXRlVGVtKG9wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgdGFyZWEpO1xyXG4gICAgcmV0dXJuIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KHNxbCwgcGFyYW1zKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiByZWdpc3RyYXJQYXNlVGFibGEoXHJcbiAgICBjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LFxyXG4gICAgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byxcclxuICAgIGlkRW5jOiBzdHJpbmcgfCBudW1iZXIsXHJcbiAgICByZXNwdWVzdGFzVUFQcmluY2lwYWw6IGFueVxyXG4pIHtcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICB2YXIgcHJvY2VkdXJlR3VhcmRhciA9IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXI7XHJcbiAgICBsZXQgcmVzdWx0YWRvID0gYGlkIGVuYyAke2lkRW5jfTogYDtcclxuICAgIGxldCBwYXJhbV9ndWFyZGFyID0geyBvcGVyYXRpdm86IG9wZXJhdGl2bywgaWRfY2FzbzogaWRFbmMsIGRhdG9zX2Nhc286IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCB9O1xyXG4gICAgbGV0IHNhdmVwb2ludE5hbWUgPSBgc3BfZ3VhcmRhcl8ke2lkRW5jfWAucmVwbGFjZSgvW15hLXpBLVowLTlfXS9nLCAnXycpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFNBVkVQT0lOVCAke3NhdmVwb2ludE5hbWV9YCkuZXhlY3V0ZSgpO1xyXG4gICAgICAgIHJlc3VsdGFkbyArPSBhd2FpdCBwcm9jZWR1cmVHdWFyZGFyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbV9ndWFyZGFyKTtcclxuICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgUkVMRUFTRSBTQVZFUE9JTlQgJHtzYXZlcG9pbnROYW1lfWApLmV4ZWN1dGUoKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBST0xMQkFDSyBUTyBTQVZFUE9JTlQgJHtzYXZlcG9pbnROYW1lfWApLmV4ZWN1dGUoKTtcclxuICAgICAgICB2YXIgZXJyb3IgPSBleHBlY3RlZChlcnIpO1xyXG4gICAgICAgIGxldCBlcnJNZXNzYWdlID0gcmVzdWx0YWRvICsgXCJkbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyLiBcIiArIGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgcmVzdWx0YWRvID0gZXJyTWVzc2FnZTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVyck1lc3NhZ2UsIGVycm9yKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgc2V0IHBhc2VfdGFibGEgPSAkM1xyXG4gICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgLFxyXG4gICAgICAgIFtvcGVyYXRpdm8sIGlkRW5jLCByZXN1bHRhZG9dXHJcbiAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbn1cclxuXHJcbnZhciBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogSWRFbmMsIHRhcmVhOiBJZFRhcmVhLCBqc29uX2VuY3Vlc3RhOiBhbnkpID0+IHtcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICBjb25zdCBVQV9QUklOQ0lQQUwgPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIG9wZXJhdGl2bykpLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHJldHVybiBhd2FpdCBiZS5wcm9jZWR1cmUuZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhci5jb3JlRnVuY3Rpb24oXHJcbiAgICAgICAgY29udGV4dCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG9wZXJhdGl2bzogb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBwZXJzaXN0ZW50ZXM6IHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXM6IHtcclxuICAgICAgICAgICAgICAgICAgICBbVUFfUFJJTkNJUEFMXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZW5jXToganNvbl9lbmN1ZXN0YVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpbmZvcm1hY2lvbkhkcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIFtlbmNdOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgKVxyXG59XHJcblxyXG4vLyBjYWRhIGVsZW1lbnRvIGRlIFwiY2FyZ2FzXCIgcXVlIGFybWEgZ2V0SGRyUXVlcnkgKGZlY2hhIGxsZWdhIGNvbW8gdGV4dG8gaXNvIGRlc2RlIGVsIGpzb24pXHJcbnR5cGUgQ2FyZ2FIZHJEYiA9IHtcclxuICAgIGNhcmdhOiBudW1iZXIgLy8gYXJlYVxyXG4gICAgb2JzZXJ2YWNpb25lczogc3RyaW5nIHwgbnVsbFxyXG4gICAgZmVjaGE6IHN0cmluZyB8IG51bGxcclxuICAgIHJlY2VwY2lvbmlzdGE6IHN0cmluZyB8IG51bGxcclxuICAgIHB1ZWRlX2F1dG9nZW5lcmFyOiBib29sZWFuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhcmdhc0hkckNvbkZlY2hhRG15KGNhcmdhczogQ2FyZ2FIZHJEYltdKSB7XHJcbiAgICByZXR1cm4gY2FyZ2FzLm1hcChjYXJnYSA9PiAoeyAuLi5jYXJnYSwgZmVjaGE6IGNhcmdhLmZlY2hhID8gZGF0ZS5pc28oY2FyZ2EuZmVjaGEpLnRvRG15KCkgOiBudWxsIH0pKTtcclxufVxyXG5cclxudmFyIGdldEhkclF1ZXJ5ID0gZnVuY3Rpb24gZ2V0SGRyUXVlcnkocXVvdGVkQ29uZFZpdjogc3RyaW5nLCBjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCB1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbDogSWRVbmlkYWRBbmFsaXNpcywgcGVybWl0ZUdlbmVyYXJNdWVzdHJhOiBib29sZWFuLCBpZHBlcjpzdHJpbmcpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICB3aXRoICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX0gYXMgXHJcbiAgICAgICAgKHNlbGVjdCB0Lm9wZXJhdGl2bywgdC5lbmMsIHQuanNvbl9lbmN1ZXN0YSBhcyByZXNwdWVzdGFzLCB0LnJlc3VtZW5fZXN0YWRvIGFzIFwicmVzdW1lbkVzdGFkb1wiLCBcclxuICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ2RvbWluaW8nICAgICAgICwgZG9taW5pbyAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnbm9tY2FsbGUnICAgICAgLCBub21jYWxsZSAgICAgICxcclxuICAgICAgICAgICAgICAgICdzZWN0b3InICAgICAgICAsIHNlY3RvciAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ2VkaWZpY2lvJyAgICAgICwgZWRpZmljaW8gICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZW50cmFkYScgICAgICAgLCBlbnRyYWRhICAgICAgICxcclxuICAgICAgICAgICAgICAgICducm9jYXRhc3RyYWwnICAsIG5yb2NhdGFzdHJhbCAgLFxyXG4gICAgICAgICAgICAgICAgJ3Bpc28nICAgICAgICAgICwgcGlzbyAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZGVwYXJ0YW1lbnRvJyAgLCBkZXBhcnRhbWVudG8gICxcclxuICAgICAgICAgICAgICAgICdoYWJpdGFjaW9uJyAgICAsIGhhYml0YWNpb24gICAgLFxyXG4gICAgICAgICAgICAgICAgJ2Nhc2EnICAgICAgICAgICwgY2FzYSAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAncHJpb3JpZGFkJyAgICAgLCByZXNlcnZhKzEgICAgICxcclxuICAgICAgICAgICAgICAgICdvYnNlcnZhY2lvbmVzJyAsIHR0LmNhcmdhX29ic2VydmFjaW9uZXMgLFxyXG4gICAgICAgICAgICAgICAgJ2NpdGEnICAgICAgICAgICwgY2l0YSAsXHJcbiAgICAgICAgICAgICAgICAnY2FyZ2EnICAgICAgICAgLCB0LmFyZWEgICAgICAgICxcclxuICAgICAgICAgICAgICAgICdzZW1hbmEnICAgICAgICAsIHQuc2VtYW5hXHJcbiAgICAgICAgICAgICkgYXMgdGVtLCB0LmFyZWEsXHJcbiAgICAgICAgICAgIC0tVE9ETzogR0VORVJBTElaQVJcclxuICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ3RhcmVhJywgdHQudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAnZmVjaGFfYXNpZ25hY2lvbicsIGZlY2hhX2FzaWduYWNpb24sXHJcbiAgICAgICAgICAgICAgICAnYXNpZ25hZG8nLCBhc2lnbmFkbyxcclxuICAgICAgICAgICAgICAgICdtYWluX2Zvcm0nLCBtYWluX2Zvcm1cclxuICAgICAgICAgICAgKSBhcyB0YXJlYSxcclxuICAgICAgICAgICAgbWluKGZlY2hhX2FzaWduYWNpb24pIGFzIGZlY2hhX2FzaWduYWNpb25cclxuICAgICAgICAgICAgZnJvbSB0ZW0gdCBsZWZ0IGpvaW4gdGFyZWFzX3RlbSB0dCBvbiAodC5vcGVyYXRpdm8gPSB0dC5vcGVyYXRpdm8gYW5kIHQuZW5jID0gdHQuZW5jIGFuZCB0LnRhcmVhX2FjdHVhbCA9IHR0LnRhcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgIGxlZnQgam9pbiB0YXJlYXMgdGEgb24gdC50YXJlYV9hY3R1YWwgPSB0YS50YXJlYVxyXG4gICAgICAgICAgICB3aGVyZSB0LmhhYmlsaXRhZGEgYW5kICR7cXVvdGVkQ29uZFZpdn1cclxuICAgICAgICAgICAgZ3JvdXAgYnkgdC5vcGVyYXRpdm8sIHQuZW5jLCB0Lmpzb25fZW5jdWVzdGEsIHQucmVzdW1lbl9lc3RhZG8sIGRvbWluaW8sIG5vbWNhbGxlLHNlY3RvcixlZGlmaWNpbywgZW50cmFkYSwgbnJvY2F0YXN0cmFsLCBwaXNvLGRlcGFydGFtZW50byxoYWJpdGFjaW9uLGNhc2EscmVzZXJ2YSx0dC5jYXJnYV9vYnNlcnZhY2lvbmVzLCBjaXRhLCB0LmFyZWEsIHR0LnRhcmVhLCBmZWNoYV9hc2lnbmFjaW9uLCBhc2lnbmFkbywgbWFpbl9mb3JtLCB0LnNlbWFuYVxyXG4gICAgICAgIClcclxuICAgICAgICBzZWxlY3QganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbCh1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbCl9LCAke2pzb25vKFxyXG4gICAgICAgIGBzZWxlY3QgZW5jLCByZXNwdWVzdGFzLCBqc29uYl9idWlsZF9vYmplY3QoJ3Jlc3VtZW5Fc3RhZG8nLFwicmVzdW1lbkVzdGFkb1wiKSBhcyBvdHJhcyBmcm9tICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX1gLFxyXG4gICAgICAgICdlbmMnLFxyXG4gICAgICAgIGBvdHJhcyB8fCBjb2FsZXNjZShyZXNwdWVzdGFzLCd7fSc6Ompzb25iKWBcclxuICAgICl9XHJcbiAgICAgICAgICAgICkgYXMgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgJHtqc29uKGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBhLmFyZWEgYXMgY2FyZ2EsIG9ic2VydmFjaW9uZXNfaGRyIGFzIG9ic2VydmFjaW9uZXMsIG1pbihmZWNoYV9hc2lnbmFjaW9uKSBhcyBmZWNoYSwgdGEucmVjZXBjaW9uaXN0YSxcclxuICAgICAgICAgICAgICAgICR7cGVybWl0ZUdlbmVyYXJNdWVzdHJhID8gYGNhc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0YS5hc2lnbmFkbyA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoaWRwZXIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGVuIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGVuZGA6IGBmYWxzZWB9IGFzIHB1ZWRlX2F1dG9nZW5lcmFyXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbCl9IGF1eCBpbm5lciBqb2luIGFyZWFzIGEgdXNpbmcgKG9wZXJhdGl2bywgYXJlYSkgaW5uZXIgam9pbiB0YXJlYXNfYXJlYXMgdGEgb24gKGEuYXJlYSA9IHRhLmFyZWEgYW5kIGF1eC50YXJlYS0+Pid0YXJlYScgPSB0YS50YXJlYSlcclxuICAgICAgICAgICAgICAgICAgICBncm91cCBieSBhLmFyZWEsIG9ic2VydmFjaW9uZXNfaGRyLCB0YS5yZWNlcGNpb25pc3RhLCBwdWVkZV9hdXRvZ2VuZXJhclxyXG4gICAgICAgICAgICAgICAgJHtwZXJtaXRlR2VuZXJhck11ZXN0cmEgPyBgXHJcbiAgICAgICAgICAgICAgICAgICAgdW5pb24gLS0gZXN0ZSB1bmlvbiBwZXJtaXRlIHZpc3VhbGl6YXIgYXJlYXMgYXNpZ25hZGFzIHNpbiBlbmN1ZXN0YXMgZ2VuZXJhZGFzXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0IGFyZWEgYXMgY2FyZ2EsIG51bGwgYXMgb2JzZXJ2YWNpb25lcywgbnVsbCBhcyBmZWNoYSwgcmVjZXBjaW9uaXN0YSwgdHJ1ZSBhcyBwdWVkZV9hdXRvZ2VuZXJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc19hcmVhcyB3aGVyZSBhc2lnbmFkbyA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoaWRwZXIpfSBhbmQgdGFyZWEgPSAnZW5jdSdgIDogJyd9XHJcbiAgICAgICAgICAgICAgICBgLCAnZmVjaGEnKX0gYXMgY2FyZ2FzLFxyXG4gICAgICAgICAgICAke2pzb25vKFxyXG4gICAgICAgIGBzZWxlY3QgZW5jLCBqc29uYl9idWlsZF9vYmplY3QoJ3RlbScsIHRlbSwgJ3RhcmVhJywgdGFyZWEpIGFzIG90cmFzIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodW5pZGFkQW5hbGlzaXNQcmluY2lwYWwpfWAsXHJcbiAgICAgICAgJ2VuYycsXHJcbiAgICAgICAgYG90cmFzIHx8J3t9Jzo6anNvbmJgXHJcbiAgICApfVxyXG4gICAgICAgICAgICBhcyBcImluZm9ybWFjaW9uSGRyXCJcclxuYFxyXG59XHJcblxyXG5leHBvcnQgdmFyIHNldEhkclF1ZXJ5ID0gKG15RnVuOiAocXVvdGVkQ29uZFZpdjogc3RyaW5nLCBjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCB1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbDogSWRVbmlkYWRBbmFsaXNpcywgcGVybWl0ZUdlbmVyYXJNdWVzdHJhOiBib29sZWFuLCBpZHBlcjogc3RyaW5nKSA9PiBzdHJpbmcpID0+IGdldEhkclF1ZXJ5ID0gbXlGdW5cclxuXHJcbmNvbnN0IGdldFVBUHJpbmNpcGFsID0gYXN5bmMgKGNsaWVudDogQ2xpZW50LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSA9PlxyXG4gICAgKGF3YWl0IGNsaWVudC5xdWVyeShcclxuICAgICAgICBgc2VsZWN0ICpcclxuICAgICAgICAgICAgZnJvbSB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgcHJpbmNpcGFsXHJcbiAgICAgICAgYFxyXG4gICAgICAgICxcclxuICAgICAgICBbb3BlcmF0aXZvXVxyXG4gICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3dcclxuXHJcbnZhciBmdW5jaW9uZXNDb25vY2lkYXM6IHsgW2sgaW4gc3RyaW5nXTogYm9vbGVhbiB9ID0ge31cclxuXHJcbnZhciBjb21waWxlciA9IG5ldyBFeHByZXNpb25QYXJzZXIuQ29tcGlsZXIoe1xyXG4gICAgbGFuZ3VhZ2U6ICdqcycsXHJcbiAgICB2YXJXcmFwcGVyOiAodmFyX25hbWU6IHN0cmluZykgPT4gYGhlbHBlcnMubnVsbDJ6ZXJvKHZhbG9yZXMuJHt2YXJfbmFtZX0pYCxcclxuICAgIGZ1bldyYXBwZXI6IChmdW5jdGlvbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICghZnVuY2lvbmVzQ29ub2NpZGFzW2Z1bmN0aW9uTmFtZV0pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZnVuY3Rpb25OYW1lKVxyXG4gICAgICAgICAgICBmdW5jaW9uZXNDb25vY2lkYXNbZnVuY3Rpb25OYW1lXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgaGVscGVycy5mdW5zLiR7ZnVuY3Rpb25OYW1lfWBcclxuICAgIH1cclxufSlcclxuXHJcbnR5cGUgQ2FzaWxsZXJvRGVBY2EgPSB7XHJcbiAgICBjaGlsZHM6IENhc2lsbGVyb0RlQWNhW10sXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgZXhwcmVzaW9uX2hhYmlsaXRhcjogc3RyaW5nXHJcbiAgICAgICAgZXhwcmVzaW9uX2hhYmlsaXRhcl9qczogc3RyaW5nXHJcbiAgICAgICAgZXNwZWNpYWw6IGFueVxyXG4gICAgICAgIGV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanM6IHN0cmluZ1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjb21waWxhckV4cHJlc2lvbihleHByZXNpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGNvbXBpbGVyLnRvQ29kZShFeHByZXNpb25QYXJzZXIucGFyc2UoXHJcbiAgICAgICAgZXhwcmVzaW9uXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJpcyBkaXN0aW5jdCBmcm9tXFxiL2dpLCAnIDw+ICcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8hIS9naSwgJyAnKVxyXG4gICAgKSkucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5ibGFuY29cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCAnaGVscGVycy5mdW5zLmJsYW5jbygoJylcclxuICAgICAgICAucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5pbmZvcm1hZG9cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCAnaGVscGVycy5mdW5zLmluZm9ybWFkbygoJyk7XHJcbn1cclxuXHJcbi8vIHJlYS9ubyByZWEgKHkgc3VzIHZlcnNpb25lcyBfc3VwKSBkZWwgb3BlcmF0aXZvLCB0b21hZGFzIGRlIGxhcyBjYWNoZXMsIHBhcmEgbGEgZXN0cnVjdHVyYSBxdWUgc2UgbWFuZGEgYWwgZGlzcG9zaXRpdm8uXHJcbi8vIExhcyBjb25kaWNpb25lcyBkZSByZWEgc2UgY29tcGlsYW4gYSBqcyAoY29uZGljaW9uX2pzKSBwYXJhIGV2YWx1YXJsYXMgZW4gZWwgZGlzcG9zaXRpdm8uXHJcbmV4cG9ydCBmdW5jdGlvbiByZWFzTm9SZWFzRGVsT3BlcmF0aXZvKHRhYmxlQ29udGVudDogQXBwQmFja2VuZFsnY2FjaGVzJ11bJ3RhYmxlQ29udGVudCddLCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSB7XHJcbiAgICB2YXIgbm9SZWFzQ2FjaGU6IE5vUmVhW10gPSB0YWJsZUNvbnRlbnQubm9fcmVhIHx8IFtdO1xyXG4gICAgdmFyIG5vUmVhc1N1cENhY2hlOiBOb1JlYVN1cFtdID0gdGFibGVDb250ZW50Lm5vX3JlYV9zdXAgfHwgW107XHJcbiAgICB2YXIgcmVhc0NhY2hlOiBPbWl0PFJlYSwgJ2NvbmRpY2lvbl9qcyc+W10gPSB0YWJsZUNvbnRlbnQucmVhIHx8IFtdO1xyXG4gICAgdmFyIHJlYXNTdXBDYWNoZTogT21pdDxSZWFTdXAsICdjb25kaWNpb25fanMnPltdID0gdGFibGVDb250ZW50LnJlYV9zdXAgfHwgW107XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vUmVhczogbm9SZWFzQ2FjaGUuZmlsdGVyKG5vUmVhID0+IG5vUmVhLm9wZXJhdGl2byA9PSBvcGVyYXRpdm8pLFxyXG4gICAgICAgIG5vUmVhc1N1cDogbm9SZWFzU3VwQ2FjaGUuZmlsdGVyKG5vUmVhU3VwID0+IG5vUmVhU3VwLm9wZXJhdGl2byA9PSBvcGVyYXRpdm8pLFxyXG4gICAgICAgIHJlYXM6IHJlYXNDYWNoZS5maWx0ZXIocmVhID0+IHJlYS5vcGVyYXRpdm8gPT0gb3BlcmF0aXZvKVxyXG4gICAgICAgICAgICAubWFwKChyZWEpOiBSZWEgPT4gKHsgLi4ucmVhLCBjb25kaWNpb25fanM6IGNvbXBpbGFyRXhwcmVzaW9uKHJlYS5jb25kaWNpb24pIH0pKSxcclxuICAgICAgICByZWFzU3VwOiByZWFzU3VwQ2FjaGUuZmlsdGVyKHJlYVN1cCA9PiByZWFTdXAub3BlcmF0aXZvID09IG9wZXJhdGl2bylcclxuICAgICAgICAgICAgLm1hcCgocmVhU3VwKTogUmVhU3VwID0+ICh7IC4uLnJlYVN1cCwgY29uZGljaW9uX2pzOiBjb21waWxhckV4cHJlc2lvbihyZWFTdXAuY29uZGljaW9uKSB9KSksXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb21waWxhckV4cHJlc2lvbmVzKGNhc2lsbGVybzogQ2FzaWxsZXJvRGVBY2EpIHtcclxuICAgIGlmICghY2FzaWxsZXJvKSB7IHJldHVybiB9XHJcbiAgICBpZiAoY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcikge1xyXG4gICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPSBjb21waWxhckV4cHJlc2lvbihjYXNpbGxlcm8uZGF0YS5leHByZXNpb25faGFiaWxpdGFyKTtcclxuICAgIH1cclxuICAgIGlmIChjYXNpbGxlcm8uZGF0YS5lc3BlY2lhbD8uYXV0b2luZykge1xyXG4gICAgICAgIHZhciBwYXJ0ZXMgPSBjYXNpbGxlcm8uZGF0YS5lc3BlY2lhbD8uYXV0b2luZy5zcGxpdCgnPT4nKTtcclxuICAgICAgICBpZiAocGFydGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdmFyIHByZWNvbmRpY2lvbiA9IHBhcnRlc1swXTtcclxuICAgICAgICAgICAgdmFyIHZhbG9yID0gcGFydGVzLnNsaWNlKDEpLmpvaW4oJz0+Jyk7XHJcbiAgICAgICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanMgPSBgKCR7Y29tcGlsYXJFeHByZXNpb24ocHJlY29uZGljaW9uKX0pPygke2NvbXBpbGFyRXhwcmVzaW9uKHZhbG9yKX0pOm51bGxgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanMgPSBjb21waWxhckV4cHJlc2lvbihwYXJ0ZXNbMF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAodmFyIGNhc2lsbGVyb0ludGVybm8gb2YgY2FzaWxsZXJvLmNoaWxkcykgY29tcGlsYXJFeHByZXNpb25lcyhjYXNpbGxlcm9JbnRlcm5vKTtcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhckVuY3Vlc3RhVGVtID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkRW5jOiBJZEVuYywgYXJlYTogbnVtYmVyLCBkb21pbmlvOiBudW1iZXIsIHRhcmVhX2FjdHVhbDogSWRUYXJlYSkgPT4ge1xyXG4gICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgIElOU0VSVCBpbnRvIHRlbSAob3BlcmF0aXZvLCBlbmMsIGFyZWEsIGRvbWluaW8sIGhhYmlsaXRhZGEsIHRhcmVhX2FjdHVhbCkgdmFsdWVzICgkMSwgJDIsICQzLCAkNCwgJDUsICQ2KWAsXHJcbiAgICAgICAgW29wZXJhdGl2bywgaWRFbmMsIGFyZWEsIGRvbWluaW8sIHRydWUsIHRhcmVhX2FjdHVhbF0pLmV4ZWN1dGUoKTtcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSA9PiB7XHJcbiAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgaW5zZXJ0IGludG8gdGFyZWFzX3RlbSAob3BlcmF0aXZvLCBlbmMsIHRhcmVhKVxyXG4gICAgICAgICAgICBzZWxlY3QgdGEub3BlcmF0aXZvLCB0YS5lbmMsIHRhLnRhcmVhXHJcbiAgICAgICAgICAgIGZyb20gKHNlbGVjdCB0YS4qLCB0LmVuYyx0LmFyZWEgZnJvbSB0YXJlYXMgdGEsIHRlbSB0IHdoZXJlIHRhLm9wZXJhdGl2bz10Lm9wZXJhdGl2bykgdGEgXHJcbiAgICAgICAgICAgIHdoZXJlIHRhLm9wZXJhdGl2byA9ICQxIFxyXG4gICAgICAgICAgICAgICAgYW5kIG5vdCAodGEub3BlcmF0aXZvLCB0YS5lbmMsIHRhLnRhcmVhKSBpbiAoc2VsZWN0IG9wZXJhdGl2bywgZW5jLCB0YXJlYSBmcm9tIHRhcmVhc190ZW0pXHJcbiAgICAgICAgICAgIG9yZGVyIGJ5IDEsMywyO1xyXG4gICAgYCwgW29wZXJhdGl2b10pLmV4ZWN1dGUoKTtcclxufVxyXG5cclxuY29uc3QgYnVzY2FyRW5jdWVzdGFFblRlbSA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8YW55PikgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihgTm8gc2UgZW5jb250csOzIGxhIGVuY3Vlc3RhICR7cGFyYW1zLmVuY30gcGFyYSBlbCBvcGVyYXRpdm8gJHtwYXJhbXMub3BlcmF0aXZvfS4gJHtleHBlY3RlZChlcnIpLm1lc3NhZ2V9YClcclxuICAgIH1cclxuICAgIHJldHVybiB7IGNhc29UZW06IHJlc3VsdC5yb3cgfTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhc2FyRW5jdWVzdGFzQVByb2llKGNsaWVudDogQ2xpZW50KSB7XHJcbiAgICBsZXQgcGFyYW1ldHJvcyA9IChhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ICogZnJvbSBwYXJhbWV0cm9zIHdoZXJlIHVuaWNvX3JlZ2lzdHJvYCxcclxuICAgICAgICBbXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG4gICAgdmFyIHNlbGVjdCA9IGBzZWxlY3QgdC5vcGVyYXRpdm8sIHQuZW5jLCB0LnRhcmVhX2FjdHVhbCwgdHQudHNfZW50cmFkYVxyXG4gICAgICAgIGZyb20gdGFyZWFzX3RlbSB0dCBqb2luIHRlbSB0IHVzaW5nIChvcGVyYXRpdm8sZW5jKVxyXG4gICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2bz0kMSBhbmQgdHQudGFyZWE9ICQyIGFuZCAoJHtnZXREaWFzQVBhc2FyUXVlcnkoJ3R0Jyl9IDw9IDAgb3IgY29hbGVzY2UodHQuYWRlbGFudGFyLGZhbHNlKSkgYW5kIHR0LnRhcmVhID0gdC50YXJlYV9hY3R1YWxcclxuICAgIGA7XHJcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgIFVQREFURSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnVidcclxuICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdHQuZW5jID0gYXV4LmVuYyBhbmQgdHQudGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYycsICdmaW5jJ10pXHJcbiAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICAvL1RPRE8gYXNpZ25hciBlbiBwcm9jZXNhbWllbnRvXHJcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgIFVQREFURSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdHQuZW5jID0gYXV4LmVuYyBhbmQgdHQudGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYycsICdwcm9jJ10pXHJcbiAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgIHVwZGF0ZSB0ZW0gdFxyXG4gICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJ3Byb2MnXHJcbiAgICAgICAgICAgIGZyb20gKCR7c2VsZWN0fSkgYXV4XHJcbiAgICAgICAgICAgIHdoZXJlIHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdC5lbmMgPSBhdXguZW5jXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJ10pLmZldGNoQWxsKCk7XHJcbiAgICByZXR1cm4gJ29rJztcclxufVxyXG5cclxuLy8gVnVlbHZlIGxhIGVuY3Vlc3RhIGEgbGEgw7psdGltYSB0YXJlYSB2ZXJpZmljYWRhIGF1bnF1ZSBsYSB0YXJlYSBhY3R1YWwgeWEgZXN0w6kgYXNpZ25hZGEgKHBvciBlamVtcGxvIGxhIHF1ZSBzZSBhc2lnbmEgc29sYSBhbCBwYXNhciBhIGZpbiBkZSBjYW1wbykuXHJcbi8vIE5vIHNhbHRlYSBsb3MgdHJpZ2dlcnM6IHByaW1lcm8gZGVqYSBsYSB0YXJlYSBhY3R1YWwgc2luIGFzaWduYXIsIGRlc3B1w6lzIG11ZXZlIHRlbS50YXJlYV9hY3R1YWwgKGVsIHRyaWdnZXIgZ3VhcmRhIGxhIGZvdG8gZW4gaGlzdG9yaWFsX3RlbSlcclxuLy8geSByZWNpw6luIGVudG9uY2VzIGRlc3ZlcmlmaWNhLCBjb24gbG8gY3VhbCBkZXN2ZXJpZmljYXJfdGFyZWFfdHJnIHZlIGEgbGEgdGFyZWEgZGVzdmVyaWZpY2FkYSBjb21vIGxhIGFjdHVhbC5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY3Vlc3RhRGVzdmVyaWZpY2FyRXhjZXBjaW9uYWwoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiB7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCBtb3Rpdm86IHN0cmluZyB9KTogUHJvbWlzZTwnb2snPiB7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIHsgb3BlcmF0aXZvLCBlbmMgfSA9IHBhcmFtcztcclxuICAgIHZhciBtb3Rpdm8gPSAocGFyYW1zLm1vdGl2byA/PyAnJykudHJpbSgpO1xyXG4gICAgaWYgKCFtb3Rpdm8pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hheSBxdWUgaW5kaWNhciBlbCBtb3Rpdm8gZGUgbGEgZGVzdmVyaWZpY2FjacOzbicpO1xyXG4gICAgfVxyXG4gICAgdmFyIGRlc3ZlcmlmaWNhYmxlID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGBzZWxlY3QgKiBmcm9tICgke3NxbERlc3ZlcmlmaWNhYmxlc30pIGQgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyYCxcclxuICAgICAgICBbb3BlcmF0aXZvLCBlbmNdXHJcbiAgICApLmZldGNoT25lUm93SWZFeGlzdHMoKSkucm93O1xyXG4gICAgaWYgKCFkZXN2ZXJpZmljYWJsZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgbGEgZW5jdWVzdGEgJHtlbmN9IG5vIHNlIHB1ZWRlIGRlc3ZlcmlmaWNhcjogc3Ugw7psdGltYSB0YXJlYSBubyBlc3TDoSB2ZXJpZmljYWRhIG8gbGEgdGFyZWEgYWN0dWFsIHlhIGVzdMOhIHZlcmlmaWNhZGFgKTtcclxuICAgIH1cclxuICAgIGlmICghZGVzdmVyaWZpY2FibGUuZXN0YWRvX2Rlc3Rpbm8pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGhheSB1bmEgYWNjacOzbiBlbiBlc3RhZG9zX2FjY2lvbmVzIHF1ZSBlamVjdXRlIGVuY3Vlc3RhX25vX3ZlcmlmaWNhciBkZXNkZSBlbCBlc3RhZG8gZGUgbGEgdGFyZWEgdmVyaWZpY2FkYScpO1xyXG4gICAgfVxyXG4gICAgdmFyIHRhcmVhQWN0dWFsOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bGwgfSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICBgc2VsZWN0IGVzdGFkbywgYXNpZ25hZG8gZnJvbSB0YXJlYXNfdGVtIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM2AsXHJcbiAgICAgICAgW29wZXJhdGl2bywgZW5jLCBkZXN2ZXJpZmljYWJsZS50YXJlYV9hY3R1YWxdXHJcbiAgICApLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICBzZXQgZXN0YWRvID0gJzBEJywgYXNpZ25hZG8gPSBudWxsXHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW29wZXJhdGl2bywgZW5jLCBkZXN2ZXJpZmljYWJsZS50YXJlYV9hY3R1YWxdXHJcbiAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDRcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW29wZXJhdGl2bywgZW5jLCBkZXN2ZXJpZmljYWJsZS50YXJlYV9hY3R1YWwsIGRlc3ZlcmlmaWNhYmxlLnRhcmVhXVxyXG4gICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgLy8gbGEgZm90byBkZSBoaXN0b3JpYWxfdGVtIHNlIHNhY8OzIGNvbiBsYSB0YXJlYSB5YSBzaW4gYXNpZ25hcjogc2UgcmVzdGl0dXllIGxvIHF1ZSB0ZW7DrWEgeSBzZSBkZWphIHF1acOpbiBsbyBoaXpvIHkgcG9yIHF1w6lcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGB1cGRhdGUgaGlzdG9yaWFsX3RlbVxyXG4gICAgICAgICAgICBzZXQgZXN0YWRvID0gJDQsIGFzaWduYWRvID0gJDUsIHVzdWFyaW9fYWNjaW9uID0gJDYsIG1vdGl2byA9ICQ3XHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgYW5kIG9yZGVuID0gKHNlbGVjdCBtYXgob3JkZW4pIGZyb20gaGlzdG9yaWFsX3RlbSB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIpXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIGRlc3ZlcmlmaWNhYmxlLnRhcmVhX2FjdHVhbCwgdGFyZWFBY3R1YWwuZXN0YWRvLCB0YXJlYUFjdHVhbC5hc2lnbmFkbywgY29udGV4dC51c2VyLnVzdWFyaW8sIG1vdGl2b11cclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV9ub192ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHsgb3BlcmF0aXZvLCB0YXJlYTogZGVzdmVyaWZpY2FibGUudGFyZWEsIGVuYyB9KTtcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICBzZXQgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIGRlc3ZlcmlmaWNhYmxlLnRhcmVhLCBkZXN2ZXJpZmljYWJsZS5lc3RhZG9fZGVzdGlub11cclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgIHJldHVybiAnb2snO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgUHJvY2VkdXJlc0RtRW5jdTogUHJvY2VkdXJlRGVmW10gPSBbXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnb3BlcmF0aXZvX2VzdHJ1Y3R1cmFfY29tcGxldGEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkcGVyX2xvZ3VlYWRvX3RhYmxldCcsIHR5cGVOYW1lOiAndGV4dCcsIGRlZmF1bHRWYWx1ZTpudWxsIH0sXHJcblxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6J2Rlc3BsZWdhckZvcm11bGFyaW8nLFxyXG4gICAgICAgIHVubG9nZ2VkOiB0cnVlLCBcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e29wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldDogc3RyaW5nfG51bGx9Pil7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgY2FzaWxsZXJvc19qZXJhcnF1aXphZG9zKCQxKSBhcyBmb3JtdWxhcmlvcywgXHJcbiAgICAgICAgICAgICAgICAgICAgJHtqc29ubyhgc2VsZWN0IHVuaWRhZF9hbmFsaXNpcywgcGFkcmUsIHBrX2FncmVnYWRhLCAne30nOjpqc29uYiBhcyBoaWphcyBmcm9tIHVuaWRhZF9hbmFsaXNpcyB3aGVyZSBvcGVyYXRpdm8gPSAkMmAsICd1bmlkYWRfYW5hbGlzaXMnKX0gYXMgdW5pZGFkZXNfYW5hbGlzaXNcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm8sIHBhcmFtZXRlcnMub3BlcmF0aXZvXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGxpa2VBcihyZXN1bHQucm93LmZvcm11bGFyaW9zKS5mb3JFYWNoKGYgPT4gY29tcGlsYXJFeHByZXNpb25lcyhmKSk7XHJcbiAgICAgICAgICAgIC8vIEhlcm1hbm9zIHNvbiBsb3MgZm9ybXVsYXJpb3MgcXVlIGVzdMOhbiBpbXBsYW50YWRvcyBlbiBvdHJvIGZvcm11bGFyaW8gZGUgbGEgbWlzbWEgVUEuIFBvciBlamVtcGxvIGVsIEExIGVuIGVsIFMxXHJcbiAgICAgICAgICAgIHZhciByZXN1bHRIZXJtYW5vcyA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuc2VsZWN0IG8uaWRfY2FzaWxsZXJvIGFzIGlkX2Zvcm11bGFyaW8sIG8udW5pZGFkX2FuYWxpc2lzLCAnQkZfJ3x8by5jYXNpbGxlcm8gYm90b24sIGJmLmNhc2lsbGVybywgYmYucGFkcmUsIGZwLmNhc2lsbGVybywgZnAudW5pZGFkX2FuYWxpc2lzXHJcbiAgZnJvbSBjYXNpbGxlcm9zIG8gbGVmdCBqb2luIGNhc2lsbGVyb3MgYmZcclxuICAgIG9uIGJmLnRpcG9jPSdCRidcclxuXHRhbmQgYmYuY2FzaWxsZXJvID0gJ0JGXyd8fG8uY2FzaWxsZXJvXHJcblx0YW5kIGJmLm9wZXJhdGl2byA9IG8ub3BlcmF0aXZvXHJcblx0bGVmdCBqb2luIGNhc2lsbGVyb3MgZnBcclxuXHQgIG9uIGZwLmlkX2Nhc2lsbGVybyA9IGJmLnBhZHJlXHJcblx0ICBhbmQgZnAub3BlcmF0aXZvID0gYmYub3BlcmF0aXZvXHJcbiAgd2hlcmUgby50aXBvYyA9ICdGJ1xyXG4gICAgYW5kIG8udW5pZGFkX2FuYWxpc2lzID0gZnAudW5pZGFkX2FuYWxpc2lzXHJcblx0YW5kIG8ub3BlcmF0aXZvID0gJDFgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRlcnMub3BlcmF0aXZvXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdEhlcm1hbm9zLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnJvdy5mb3JtdWxhcmlvc1tyb3cuaWRfZm9ybXVsYXJpb10uZGF0YS5oZXJtYW5vID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGFyVUEodWE6IFVuaWRhZEFuYWxpc2lzLCBpZFVhOiBJZFVuaWRhZEFuYWxpc2lzLCB1QXM6IHsgW2sgaW4gSWRVbmlkYWRBbmFsaXNpc106IFVuaWRhZEFuYWxpc2lzIH0pIHtcclxuICAgICAgICAgICAgICAgIGlmICh1YS5wYWRyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVBc1t1YS5wYWRyZV0uaGlqYXNbaWRVYV0gPSB1YTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdWEucHJpbmNpcGFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaWtlQXIocmVzdWx0LnJvdy51bmlkYWRlc19hbmFsaXNpcykuZm9yRWFjaCgodWEsIGlkVWEpID0+XHJcbiAgICAgICAgICAgICAgICBjb21wbGV0YXJVQSh1YSwgaWRVYSBhcyBJZFVuaWRhZEFuYWxpc2lzLCByZXN1bHQucm93LnVuaWRhZGVzX2FuYWxpc2lzKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHZhciB7XHJcbiAgICAgICAgICAgICAgICBjb25fcmVhX2hvZ2FyOiBjb25SZWFIb2dhcixcclxuICAgICAgICAgICAgICAgIGNvbmZpZ19zb3J0ZW86IGNvbmZpZ1NvcnRlbyxcclxuICAgICAgICAgICAgICAgIGhhYmlsaXRhY2lvbl9ib3Rvbl9mb3JtdWxhcmlvOiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgIH0gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGNvbmZpZ19zb3J0ZW8sIGNvbl9yZWFfaG9nYXIsIGhhYmlsaXRhY2lvbl9ib3Rvbl9mb3JtdWxhcmlvLCBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDFcclxuICAgICAgICAgICAgYCwgW3BhcmFtZXRlcnMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG5cclxuICAgICAgICAgICAgdmFyIHNlbWFuYXMgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0ICBcclxuICAgICAgICAgICAgICAgICAgICAke2pzb25vKGBzZWxlY3QgKiBmcm9tIHNlbWFuYXMgd2hlcmUgb3BlcmF0aXZvID0gJDFgLCAnc2VtYW5hJyl9IGFzIHNlbWFuYXNcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKSkucm93LnNlbWFuYXM7XHJcbiAgICAgICAgICAgIGxldCBjb21waWxhckV4cHJlc2lvbmVzRG9taW5pb3MgPSAoZXhwcmVzaW9uZXNEb21pbmlvOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoZXhwcmVzaW9uZXNEb21pbmlvKVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGV4cHIsIGRvbWluaW8pID0+ICh7IGRvbWluaW8sIGV4cHI6IGNvbXBpbGFyRXhwcmVzaW9uKGV4cHIuZXhwcikgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnBsYWluKCk7XHJcbiAgICAgICAgICAgIGlmIChjb25maWdTb3J0ZW8pIHtcclxuICAgICAgICAgICAgICAgIGxpa2VBcihjb25maWdTb3J0ZW8pLmZvckVhY2goKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmV4cHJfaW5jb21wbGV0aXR1ZF9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmV4cHJfaW5jb21wbGV0aXR1ZClcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmZpbHRyb19qcyA9IGNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmZpbHRybylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbykge1xyXG4gICAgICAgICAgICAgICAgbGlrZUFyKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbykuZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm0uZXhwcl9oYWJpbGl0YXJfYm90b25fanMgPSBjb21waWxhckV4cHJlc2lvbihmb3JtLmV4cHJfaGFiaWxpdGFyX2JvdG9uKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdFRhcmVhID0gYXdhaXQgZ2V0RGVmYXVsdFRhcmVhKGNvbnRleHQsIHBhcmFtZXRlcnMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRJbmZvcm1hY2lvbkhkciA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgIFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICAgICAnZG9taW5pbycgICAgICAgLCAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKERFRkFVTFRfRE9NSU5JTyl9LFxyXG4gICAgICAgICAgICAgICAgICAgICdub21jYWxsZScgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdzZWN0b3InICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdlZGlmaWNpbycgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdlbnRyYWRhJyAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICducm9jYXRhc3RyYWwnICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdwaXNvJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdkZXBhcnRhbWVudG8nICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdoYWJpdGFjaW9uJyAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjYXNhJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdwcmlvcmlkYWQnICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdvYnNlcnZhY2lvbmVzJyAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjaXRhJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjYXJnYScgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdzZW1hbmEnICAgICAgICAsIG51bGxcclxuICAgICAgICAgICAgICAgICkgYXMgdGVtLFxyXG4gICAgICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICd0YXJlYScsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoZGVmYXVsdFRhcmVhLnRhcmVhKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ2ZlY2hhX2FzaWduYWNpb24nLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICdhc2lnbmFkbycsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwocGFyYW1ldGVycy5pZHBlcl9sb2d1ZWFkb190YWJsZXQgfHwgY29udGV4dC51c2VyLmlkcGVyKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ21haW5fZm9ybScsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoZGVmYXVsdFRhcmVhLm1haW5fZm9ybSl9XHJcbiAgICAgICAgICAgICAgICApIGFzIHRhcmVhXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogYmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmEsXHJcbiAgICAgICAgICAgICAgICAuLi5yZXN1bHQucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGNvblJlYUhvZ2FyLFxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvLFxyXG4gICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgLi4ucmVhc05vUmVhc0RlbE9wZXJhdGl2byhiZS5jYWNoZXMudGFibGVDb250ZW50LCBwYXJhbWV0ZXJzLm9wZXJhdGl2byksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0SW5mb3JtYWNpb25IZHIsXHJcbiAgICAgICAgICAgICAgICB1YVBwYWw6IHVuaWRhZF9hbmFsaXNpcyxcclxuICAgICAgICAgICAgICAgIHNlbWFuYXMsXHJcbiAgICAgICAgICAgICAgICBwa0FncmVnYWRhVWFQcGFsOiBwa19hZ3JlZ2FkYVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZ2VuZXJhcl9mb3JtdWxhcmlvcycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdhbm5pbycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIHJlZmVyZW5jZXM6ICdhbm5pbycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbWVzJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgcmVmZXJlbmNlczogJ21lcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbG90ZScsIHR5cGVOYW1lOiAnaW50ZWdlcicsIHJlZmVyZW5jZXM6ICdsb3RlcycgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7YW5uaW86bnVtYmVyLCBtZXM6bnVtYmVyLCBsb3RlOm51bWJlcn0+KXtcclxuICAgICAgICAgICAgdmFyIGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgbGV0IHVhUHBhbCA9IGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0UHJlZ3VudGFzID0gYXdhaXQgYmUucHJvY2VkdXJlLnByZWd1bnRhc191YV90cmFlci5jb3JlRnVuY3Rpb24oY29udGV4dCwgdWFQcGFsKVxyXG4gICAgICAgICAgICB2YXIgY29udGVuZWRvclZhY2lvOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICAgICAgICAgIHJlc3VsdFByZWd1bnRhcy5mb3JFYWNoKGZ1bmN0aW9uIChkZWZQcmVndW50YTphbnkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpb1tkZWZQcmVndW50YS52YXJfbmFtZV0gPSBkZWZQcmVndW50YS51bmlkYWRfYW5hbGlzaXMgPyBbXSA6IG51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8uYW5uaW8gPSBwYXJhbWV0ZXJzLmFubmlvO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8ubWVzID0gcGFyYW1ldGVycy5tZXM7XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5sb3RlID0gcGFyYW1ldGVycy5sb3RlO1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBkZWJlX2hhYmVyLmlkX2Nhc28sIHMgYXMgaWRcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgbG90ZSwgYXJtYXJfaWQoYW5uaW8sIG1lcywgbG90ZSwgcykgYXMgaWRfY2Fzbywgc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgYW5uaW8sbWVzLGxvdGUsIGNhbnRfY3VlcyBmcm9tIGxvdGVzIHdoZXJlIChhbm5pbyxtZXMsbG90ZSk9KCQyLCQzLCQ0KSkgciwgbGF0ZXJhbCBnZW5lcmF0ZV9zZXJpZXMoMSxjYW50X2N1ZXMpIHNcclxuICAgICAgICAgICAgICAgICAgICApIGRlYmVfaGFiZXIgbGVmdCBqb2luIGRlZmdlbiBoYXkgb24gaGF5LmlkX2Nhc28gPSBkZWJlX2hhYmVyLmlkX2Nhc28gYW5kIGhheS5vcGVyYXRpdm89JDFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBoYXkuaWRfY2FzbyBpcyBudWxsYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIHBhcmFtZXRlcnMuYW5uaW8sIHBhcmFtZXRlcnMubWVzLCBwYXJhbWV0ZXJzLmxvdGVdXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHsgb3BlcmF0aXZvOiBPUEVSQVRJVk8gfTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAocmVzdWx0LnJvd0NvdW50IHx8IDApOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmcocGFyYW1zLCB7IGlkX2Nhc286IHJlc3VsdC5yb3dzW2ldLmlkX2Nhc28sIGRhdG9zX2Nhc286IGNoYW5naW5nKGNvbnRlbmVkb3JWYWNpbywgeyBpZDogcmVzdWx0LnJvd3NbaV0uaWQgfSkgfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyBhZ3JlZ2FkYXM6IHJlc3VsdC5yb3dDb3VudCB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICd1cGxvYWRfZmlsZScsXHJcbiAgICAgICAgcHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZF9hZGp1bnRvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdub21icmUnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBmaWxlczp7Y291bnQ6MX0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtpZF9hZGp1bnRvPzpudW1iZXIsIG5vbWJyZT86c3RyaW5nfT4sIGZpbGVzKXtcclxuICAgICAgICAgICAgbGV0IGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGxldCBjbGllbnQ9Y29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQuaW5mb3JtUHJvZ3Jlc3Moe21lc3NhZ2U6YmUubWVzc2FnZXMuZmlsZVVwbG9hZGVkfSk7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBleGlzdGVcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBmaWxlc1swXVxyXG4gICAgICAgICAgICBsZXQgZXh0ID0gUGF0aC5leHRuYW1lKGZpbGUucGF0aCkuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICBsZXQgb3JpZ2luYWxGaWxlbmFtZSA9IGZpbGUub3JpZ2luYWxGaWxlbmFtZS5zbGljZSgwLCAtKGV4dC5sZW5ndGggKyAxKSk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlbmFtZSA9IHBhcmFtZXRlcnMubm9tYnJlIHx8IG9yaWdpbmFsRmlsZW5hbWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdQYXRoID0gJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJztcclxuICAgICAgICAgICAgdmFyIGNyZWF0ZVJlc3BvbnNlID0gZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2UoYWRqdW50b1JvdzphbnkpIHtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0xhIHN1YmlkYSBzZSByZWFsaXrDsyBjb3JyZWN0YW1lbnRlICh1cGRhdGUpJyxcclxuICAgICAgICAgICAgICAgICAgICBub21icmU6IGFkanVudG9Sb3cubm9tYnJlLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vbWJyZV9vcmlnaW5hbDogYWRqdW50b1Jvdy5ub21icmVfb3JpZ2luYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgZXh0OiBhZGp1bnRvUm93LmV4dCxcclxuICAgICAgICAgICAgICAgICAgICBmZWNoYTogYWRqdW50b1Jvdy5mZWNoYSxcclxuICAgICAgICAgICAgICAgICAgICBob3JhOiBhZGp1bnRvUm93LmhvcmEsXHJcbiAgICAgICAgICAgICAgICAgICAgaWRfYWRqdW50bzogYWRqdW50b1Jvdy5pZF9hZGp1bnRvXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHZhciBtb3ZlRmlsZSA9IGZ1bmN0aW9uIG1vdmVGaWxlKGZpbGUsIGlkX2FkanVudG8sIGV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICBmcy5tb3ZlKGZpbGUucGF0aCwgbmV3UGF0aCArIGlkX2FkanVudG8gKyAnLicgKyBleHRlbnNpb24sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmlkX2FkanVudG8pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYHVwZGF0ZSBhZGp1bnRvcyBzZXQgbm9tYnJlPSAkMSxub21icmVfb3JpZ2luYWwgPSAkMiwgZXh0ID0gJDMsIHJ1dGEgPSBjb25jYXQoJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJywkNDo6dGV4dCwnLicsJDM6OnRleHQpLCBmZWNoYSA9IG5vdygpLCBob3JhID0gZGF0ZV90cnVuYygnc2Vjb25kcycsY3VycmVudF90aW1lc3RhbXAtY3VycmVudF9kYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBpZF9hZGp1bnRvID0gJDQgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZW5hbWUsIG9yaWdpbmFsRmlsZW5hbWUsIGV4dCwgcGFyYW1ldGVycy5pZF9hZGp1bnRvXVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlc3BvbnNlKHJlc3VsdC5yb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0YWRvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUsIHJlc3VsdGFkby5pZF9hZGp1bnRvLCByZXN1bHRhZG8uZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkb1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYGluc2VydCBpbnRvIGFkanVudG9zIChub21icmUsIG5vbWJyZV9vcmlnaW5hbCwgZXh0LCBmZWNoYSwgaG9yYSkgdmFsdWVzICgkMSwkMiwkMyxub3coKSwgZGF0ZV90cnVuYygnc2Vjb25kcycsY3VycmVudF90aW1lc3RhbXAtY3VycmVudF9kYXRlKSkgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZW5hbWUsIG9yaWdpbmFsRmlsZW5hbWUsIGV4dF1cclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgdXBkYXRlIGFkanVudG9zIHNldCBydXRhID0gY29uY2F0KCdsb2NhbC1hdHRhY2htZW50cy9maWxlLScsaWRfYWRqdW50bzo6dGV4dCwnLicsZXh0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaWRfYWRqdW50byA9ICQxIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQucm93LmlkX2FkanVudG9dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZXNwb25zZShyZXN1bHQucm93KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHRhZG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUsIHJlc3VsdGFkby5pZF9hZGp1bnRvLCByZXN1bHRhZG8uZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjYXNvX2d1YXJkYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkX2Nhc28nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2RhdG9zX2Nhc28nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgZGVmaW5lZEluOiAnZG1lbmN1JyxcclxuICAgICAgICAvL0B0cy1pZ25vcmUgZXNwZWNpZmljbyBlbCB0aXBvIGRlIGxvcyBwYXLDoW1ldHJvc1xyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IHtcclxuICAgICAgICAgICAgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgaWRfY2Fzbzogc3RyaW5nLFxyXG4gICAgICAgICAgICBkYXRvc19jYXNvOiBBbnlPYmplY3RcclxuICAgICAgICB9LCBuZXdDbGllbnQ6IENsaWVudCkge1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIHBhcmFtZXRlcnMub3BlcmF0aXZvKSk7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnQgPSBuZXdDbGllbnQgfHwgY29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIHZhciBkYXRvc19qc29uID0gcGFyYW1ldGVycy5kYXRvc19jYXNvO1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgdGFibGVTdHJ1Y3R1cmVzX2FwcDogVGFibGVEZWZpbml0aW9ucyA9IGJlLnRhYmxlU3RydWN0dXJlcztcclxuXHJcbiAgICAgICAgICAgIHZhciBzdHJ1Y3RfZG1lbmN1ID0gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIHVuaWRhZF9hbmFsaXNpcyk7XHJcbiAgICAgICAgICAgIGRhdG9zX2pzb25bJ29wZXJhdGl2byddID0gcGFyYW1ldGVycy5vcGVyYXRpdm87XHJcblxyXG4gICAgICAgICAgICBkYXRvc19qc29uW3BrX2FncmVnYWRhXSA9IHBhcmFtZXRlcnMuaWRfY2FzbztcclxuICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGFyX3VsdF9wa19lbl9hcnIodWx0X3BrOmFueSwgdWFfYXJyOmFueVtdKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29uX3BrX2NvbXBsZXRhID0gdWFfYXJyO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVhX2FyciAmJiB1YV9hcnIubGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25fcGtfY29tcGxldGEgPSBjb25fcGtfY29tcGxldGEubWFwKCh1bmFfdWEsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5hX3VhW3VsdF9wa10gPSBpICsgMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5hX3VhO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbl9wa19jb21wbGV0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlY29ycmVyX2RhdG9zX2FncmVnYW5kb19wa3MoZGF0b3NqOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleU5hbWUgaW4gZGF0b3NqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdG9LID0gZGF0b3NqW2tleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRvSyBpbnN0YW5jZW9mIEFycmF5ICYmIGRhdG9LLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwayA9IHRhYmxlU3RydWN0dXJlc19hcHBba2V5TmFtZV0oY29udGV4dCkucHJpbWFyeUtleTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVsdF9wayA9IHBrW3BrLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRvSyA9IGNvbXBsZXRhcl91bHRfcGtfZW5fYXJyKHVsdF9waywgZGF0b0spO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRvSy5mb3JFYWNoKChlbGVtSTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtSSA9IHJlY29ycmVyX2RhdG9zX2FncmVnYW5kb19wa3MoZWxlbUkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleU5hbWUuc3RhcnRzV2l0aCgnJCcpIHx8IGtleU5hbWUuc3RhcnRzV2l0aCgnXycpIHx8IGtleU5hbWUgPT0gJ251bGwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRvc2pba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9zajtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRvc19qc29uID0gcmVjb3JyZXJfZGF0b3NfYWdyZWdhbmRvX3BrcyhkYXRvc19qc29uKTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkbztcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhU3VwO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYVN1cDtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkb1N1cDtcclxuXHJcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRvc19qc29uKS5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcXVlcmllcyA9IHNxbFRvb2xzLnN0cnVjdHVyZWREYXRhLnNxbFdyaXRlKGRhdG9zX2pzb24sIHN0cnVjdF9kbWVuY3UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHF1ZXJpZXMucmVkdWNlKGZ1bmN0aW9uIChwcm9taXNlOiBQcm9taXNlPGFueT4sIHF1ZXJ5OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsaWVudC5xdWVyeShxdWVyeSkuZXhlY3V0ZSgpLnRoZW4oZnVuY3Rpb24gKF9yZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJva1wiO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycjogRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiY2Fzb19ndWFyZGFyIEVOVFJBIEVOIEVMIENBVENIOiBcIiwgZXhwZWN0ZWQoZXJyKSlcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZhY2lvJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY2Fzb190cmFlcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICAvL3tuYW1lOidmb3JtdWxhcmlvJyAgICAsICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnaWRfY2FzbycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnZ29Ub0VuYycsXHJcbiAgICAgICAgZGVmaW5lZEluOiAnZG1lbmN1JyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRfY2Fzbzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgdmFyIGNsaWVudCA9IGNvbnRleHQuY2xpZW50O1xyXG4gICAgICAgICAgICB2YXIgc3RydWN0X2RtZW5jdSA9IGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0LCB1bmlkYWRfYW5hbGlzaXMpO1xyXG4gICAgICAgICAgICB2YXIgc3FsID0gc3FsVG9vbHMuc3RydWN0dXJlZERhdGEuc3FsUmVhZCh7IG9wZXJhdGl2bzogcGFyYW1ldGVycy5vcGVyYXRpdm8sIFtwa19hZ3JlZ2FkYV06IHBhcmFtZXRlcnMuaWRfY2FzbyB9LCBzdHJ1Y3RfZG1lbmN1KTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeShzcWwpLmZldGNoVW5pcXVlVmFsdWUoKTtcclxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IHBhcmFtZXRlcnMuaWRfY2FzbyxcclxuICAgICAgICAgICAgICAgIGRhdG9zX2Nhc286IHJlc3VsdC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIC8vZm9ybXVsYXJpbzogZm9ybVByaW5jaXBhbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY2Fzb190cmFlcl9vX2NyZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZF9jYXNvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdnb1RvRW5jJyxcclxuICAgICAgICAvLyBiaXRhY29yYTp7YWx3YXlzOnRydWV9LFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7b3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRfY2Fzbzogc3RyaW5nfT4pe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb190cmFlciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb19wcmVwYXJhciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb19ndWFyZGFyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIGNoYW5naW5nKHBhcmFtZXRlcnMsIHsgZGF0b3NfY2FzbzoganNvbiB9KSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3RyYWVyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdwYXNhcl9qc29uMnVhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pil7XHJcbiAgICAgICAgICAgIC8qIEdFTkVSQUxJWkFSOiAqL1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICAvKiBGSU4tR0VORVJBTElaQVI6ICovXHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pKTtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgU0VMRUNUICogZnJvbSAke2JlLmRiLnF1b3RlSWRlbnQodW5pZGFkX2FuYWxpc2lzKX0gTElNSVQgMWApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIGlmICgocmVzdWx0TWFpbi5yb3dDb3VudCB8fCAwKSA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdIQVkgREFUT1MnLCByZXN1bHRNYWluLnJvd3MpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hBWSBEQVRPUy4gTk8gU0UgUFVFREUgSU5JQ0lBUiBFTCBQQVNBSkUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcmVzdWx0SnNvbiA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYFNFTEVDVCBvcGVyYXRpdm8sIGVuYyBpZF9jYXNvLCBqc29uX2VuY3Vlc3RhIGRhdG9zX2Nhc28gZnJvbSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgV0hFUkUgb3BlcmF0aXZvPSQxIGFuZCByZXN1bWVuX2VzdGFkbyBpcyBkaXN0aW5jdCBmcm9tICd2YWNpbycgYW5kIGpzb25fZW5jdWVzdGEgaXMgbm90IG51bGwgXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgZW5jIGAsXHJcbiAgICAgICAgICAgICAgICBbT1BFUkFUSVZPXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuICAgICAgICAgICAgaWYgKHByb2NlZHVyZUd1YXJkYXIuZGVmaW5lZEluICE9ICdkbWVuY3UnKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hheSBxdWUgc29icmVlc2NyaWJpciBjYXNvX2d1YXJkYXInKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVzdWx0SnNvbi5yb3dzLm1hcChhc3luYyBmdW5jdGlvbiAocm93KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0YWRvID0gYGlkIGNhc28gJHtyb3cuaWRfY2Fzb306IGA7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLmluVHJhbnNhY3Rpb24obnVsbCwgYXN5bmMgZnVuY3Rpb24gKF9jbGllbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvICs9IGF3YWl0IHByb2NlZHVyZUd1YXJkYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHJvdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IGV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2UgPSByZXN1bHRhZG8gKyBcImpzb24ydWEgZXJyb3IuIFwiICsgZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSBlcnJNZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNZXNzYWdlLCBlcnJvcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRhZG8uaW5jbHVkZXMoJ29rJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeyBkYXRvc19jYXNvLCBpZF9jYXNvLCBvcGVyYXRpdm8gfSA9IGF3YWl0IGJlLnByb2NlZHVyZS5jYXNvX3RyYWVyLmNvcmVGdW5jdGlvbihjb250ZXh0LCB7IG9wZXJhdGl2bzogcm93Lm9wZXJhdGl2bywgaWRfY2Fzbzogcm93LmlkX2Nhc28gfSlcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmVyUXVlR3JhYm8gPSB7IGRhdG9zX2Nhc28sIGlkX2Nhc28sIG9wZXJhdGl2byB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzY3JlcGFuY2VzLnNob3dBbmRUaHJvdyh2ZXJRdWVHcmFibywgcm93KVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHZlclF1ZUdyYWJvLCByb3csIGV4cGVjdGVkKGVycikpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkbztcclxuICAgICAgICAgICAgfSkpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fZm9ycGtyYWl6X2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3BrX3JhaXpfdmFsdWUnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJ0YXJlYXNcIiB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8e29wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHBrX3JhaXpfdmFsdWU6IHN0cmluZywgdGFyZWE6IHN0cmluZ30+KXtcclxuICAgICAgICAgICAgY29uc3QgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgY29uc3Qge29wZXJhdGl2byxwa19yYWl6X3ZhbHVlLCB0YXJlYX0gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICBjb25zdCB7cGVybWl0ZV9ib3JyYXJfdWE6IHRhcmVhUGVybWl0ZUJvcnJhclVBLCBtYWluX2Zvcm19ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBwZXJtaXRlX2JvcnJhcl91YSwgbWFpbl9mb3JtIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIHRhcmVhPSQyXHJcbiAgICAgICAgICAgIGAsIFtvcGVyYXRpdm8sIHRhcmVhXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG4gICAgICAgICAgICBjb25zdCB7dW5pZGFkX2FuYWxpc2lzfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgY29uc3QgY29uZHZpdj0gYCB0Lm9wZXJhdGl2bz0gJDEgYW5kIHQuZW5jID0kMmA7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzdWFyaW9QdWVkZVByb2Nlc2FyRW5jdWVzdGFzID0gY29udGV4dC5wdWVkZT8uZW5jdWVzdGFzPy5wcm9jZXNhciB8fCBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3Qgc29sb0xlY3R1cmEgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGNvdW50KCopXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIGpvaW4gdGVtIHVzaW5nKG9wZXJhdGl2bywgZW5jKSBqb2luIGVzdGFkb3MgdXNpbmcgKG9wZXJhdGl2bywgZXN0YWRvKSAtLXBrIGVzdGFkbyB5IHRlbSB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ2Fkb19kbSBpcyBub3QgbnVsbCBvciBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBlcm1pdGVfZWRpdGFyX2VuY3Vlc3RhIGFuZCBhc2lnbmFkbyA8PiAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKGNvbnRleHQudXNlci5pZHBlcil9IG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhID0gdGFyZWFfYWN0dWFsIGFuZCB0YXJlYV9hY3R1YWwgPSAncHJvYycgYW5kICQzIG9yIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSA9IHRhcmVhX2FjdHVhbCBhbmQgdGFyZWFfYWN0dWFsID0gJ3Byb2MnIGFuZCBlc3RhZG8gPSAnVidcclxuICAgICAgICAgICAgKWAsIFtvcGVyYXRpdm8sIHBrX3JhaXpfdmFsdWUsICF1c3VhcmlvUHVlZGVQcm9jZXNhckVuY3Vlc3Rhc10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWUgPiAwO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZUdlbmVyYXJNdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBvcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICB2YXIgeyByb3cgfSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGdldEhkclF1ZXJ5KGNvbmR2aXYsIGNvbnRleHQsIHVuaWRhZF9hbmFsaXNpcywgcGVybWl0ZUdlbmVyYXJNdWVzdHJhLCBjb250ZXh0LnVzZXIuaWRwZXIpLCBbb3BlcmF0aXZvLCBwa19yYWl6X3ZhbHVlXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcm93LmluZm9ybWFjaW9uSGRyW3BrX3JhaXpfdmFsdWVdLnRhcmVhID0ge1xyXG4gICAgICAgICAgICAgICAgdGFyZWEsXHJcbiAgICAgICAgICAgICAgICBtYWluX2Zvcm1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnJvdyxcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIHNvbG9MZWN0dXJhLFxyXG4gICAgICAgICAgICAgICAgaWRwZXI6IGNvbnRleHQudXNlci5pZHBlcixcclxuICAgICAgICAgICAgICAgIGNhcmdhczogbGlrZUFyLmNyZWF0ZUluZGV4KGNhcmdhc0hkckNvbkZlY2hhRG15KHJvdy5jYXJnYXMpLCAnY2FyZ2EnKSxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcEVzdHJ1Y3R1cmE6IGJlLmNhY2hlcy50aW1lc3RhbXBFc3RydWN0dXJhLFxyXG4gICAgICAgICAgICAgICAgcGVybWl0ZUJvcnJhckVsZW1lbnRvc1VBOiAhISh0YXJlYVBlcm1pdGVCb3JyYXJVQSAmJiBnZXRNb2RvQnlQb2xpY3koYmUpID09PSAnR0FCSU5FVEUnICYmIGNvbnRleHQucHVlZGU/LmVuY3Vlc3Rhcz8uYm9ycmFyX3VhKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fZm9ycGtyYWl6X2Rlc2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3BlcnNpc3RlbnRlcycsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgcGVyc2lzdGVudGVzOiBBbnlPYmplY3QgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXMgfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgb3BlcmF0aXZvKSkudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgICAgICAgICB2YXIgcHJvY2VkdXJlR3VhcmRhciA9IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXI7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZXNwdWVzdGFzID0gcGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSB8fCB7fTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpZEVuYyBpbiByZXNwdWVzdGFzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwdWVzdGFzVUFQcmluY2lwYWwgPSByZXNwdWVzdGFzW2lkRW5jXTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzVUFQcmluY2lwYWwuczFhMV9vYnMgPT0gJyFwcnVlYmEgZGUgZXJyb3IgYWwgZ3JhYmFyIScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RJTyBQUlVFQkEgREUgRVJST1IgQUwgR1JBQkFSJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBndWFyZGFyRW5jdWVzdGFFblRlbShjb250ZXh0LCBvcGVyYXRpdm8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsIHBlcnNpc3RlbnRlcy5pbmZvcm1hY2lvbkhkcltpZEVuY10udGFyZWEudGFyZWEpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgcmVnaXN0cmFyUGFzZVRhYmxhKGNvbnRleHQsIG9wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX3NpbmNyb25pemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3BlcnNpc3RlbnRlcycsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ21vZG9fZG0nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NhbWJpYV9tb2RvX2RtJywgdHlwZU5hbWU6ICdib29sZWFuJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZHBlcl9sb2d1ZWFkb190YWJsZXQnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bmxvZ2dlZDp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtwZXJzaXN0ZW50ZXM6IEFueU9iamVjdCwgbW9kb19kbTogc3RyaW5nLCBjYW1iaWFfbW9kb19kbTogYm9vbGVhbiwgaWRwZXJfbG9ndWVhZG9fdGFibGV0OiBzdHJpbmd9Pil7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgY29uc3QgcGVybWl0ZUdlbmVyYXJNdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgICAgICBpZighcGVybWl0ZUdlbmVyYXJNdWVzdHJhICYmIHBhcmFtZXRlcnMuY2FtYmlhX21vZG9fZG0pe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ05vIGVzIHBvc2libGUgY2FtYmlhciBkZSBtb2RvIGVuIGVzdGUgb3BlcmF0aXZvJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgcGVyc2lzdGVudGVzLCBtb2RvX2RtLCBjYW1iaWFfbW9kb19kbSwgaWRwZXJfbG9ndWVhZG9fdGFibGV0IH0gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VybmFtZUxvZ3VlYWRvVGFibGV0ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBzZWxlY3QgdXN1YXJpbyBmcm9tIHVzdWFyaW9zIHdoZXJlIGlkcGVyID0gJDFgLCBbaWRwZXJfbG9ndWVhZG9fdGFibGV0XSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTsgXHJcbiAgICAgICAgICAgIHZhciB0b2tlbjogc3RyaW5nID0gcGVyc2lzdGVudGVzPy50b2tlbiB8fCAoYXdhaXQgYmUucHJvY2VkdXJlLnRva2VuX2dldC5jb3JlRnVuY3Rpb24oY29udGV4dCwge1xyXG4gICAgICAgICAgICAgICAgdXNlcmFnZW50OiBjb250ZXh0LnNlc3Npb24ucmVxLnVzZXJhZ2VudCxcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZUxvZ3VlYWRvVGFibGV0XHJcbiAgICAgICAgICAgIH0pKS50b2tlbjtcclxuICAgICAgICAgICAgY29uc3QgbnVtX3NpbmNybyA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyBzaW5jcm9uaXphY2lvbmVzICh0b2tlbiwgdXN1YXJpbywgZGF0b3MpXHJcbiAgICAgICAgICAgICAgICAgICAgVkFMVUVTICgkMSwkMiwkMykgXHJcbiAgICAgICAgICAgICAgICAgICAgUkVUVVJOSU5HIHNpbmNyb1xyXG4gICAgICAgICAgICAgICAgYCwgW3Rva2VuLCB1c2VybmFtZUxvZ3VlYWRvVGFibGV0LCBwZXJzaXN0ZW50ZXNdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgdmFyIGNvbmR2aXYgPSBgXHJcbiAgICAgICAgICAgICAgICB0dC5vcGVyYXRpdm89ICQxIFxyXG4gICAgICAgICAgICAgICAgYW5kIGFzaWduYWRvID0gJDJcclxuICAgICAgICAgICAgICAgIGFuZCB0dC5vcGVyYWNpb249J2NhcmdhcicgXHJcbiAgICAgICAgICAgICAgICBhbmQgKHR0LmNhcmdhZG9fZG0gaXMgbnVsbCBvciB0dC5jYXJnYWRvX2RtID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbCh0b2tlbil9KVxyXG4gICAgICAgICAgICBgO1xyXG4gICAgICAgICAgICBjb25zdCB7IHVuaWRhZF9hbmFsaXNpczogVUFfUFJJTkNJUEFMLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pKTtcclxuICAgICAgICAgICAgaWYgKHBlcnNpc3RlbnRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWRFbmMgaW4gcGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwdWVzdGFzVUFQcmluY2lwYWwgPSBwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdW2lkRW5jXTtcclxuICAgICAgICAgICAgICAgICAgICAvL1RPRE8gQUwgUEFSRUNFUiBFU1TDgSBSRVNVRUxUTywgTE8gREVKTyBQT1IgTEFTIERVREFTXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc3B1ZXN0YXNVQVByaW5jaXBhbCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2FyZ2EgPSBwZXJzaXN0ZW50ZXMuY2FyZ2FzW3BlcnNpc3RlbnRlcy5pbmZvcm1hY2lvbkhkcltpZEVuY10udGVtLmNhcmdhXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmVhID0gcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50YXJlYS50YXJlYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZ2FUYXJlYXNBcmVhcyA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBzZWxlY3QgcmVjZXBjaW9uaXN0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX2FyZWFzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgdGFyZWEgPSAkMiBhbmQgYXJlYSA9ICQzIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIHRhcmVhLCBjYXJnYS5jYXJnYV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhcmdhVGFyZWFzQXJlYXMgJiYgIWNhcmdhLnJlY2VwY2lvbmlzdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBubyBzZSBkZWZpbmnDsyB1biByZWNlcGNpb25pc3RhIHBhcmEgZWwgb3BlcmF0aXZvICR7T1BFUkFUSVZPfSwgdGFyZWEgJHt0YXJlYX0sIMOhcmVhICR7Y2FyZ2EuY2FyZ2F9LCBwb3IgZmF2b3IgY29tdW5pcXVlc8OpIGNvbiBHQUJJTkVURSBwYXJhIHF1ZSBjYXJndWVuIHVuIHJlY2VwY2lvbmlzdGFgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoaWRFbmMpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWRFbmMgZXMgbGEgY2xhdmUgKHRleHRvKSBkZSBwZXJzaXN0ZW50ZXMucmVzcHVlc3RhczsgbGFzIGZ1bmNpb25lcyBxdWUgc2lndWVuIGxvIHJlY2liZW4gY29tbyB0ZXh0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRFbmMgPSBTdHJpbmcoYXdhaXQgcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQsIE9QRVJBVElWTywgY2FyZ2EuY2FyZ2EsIGlkRW5jLCB0b2tlbiwgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLCBjYXJnYS5yZWNlcGNpb25pc3RhIHx8IGNhcmdhVGFyZWFzQXJlYXMsIHBlcnNpc3RlbnRlcy5pZHBlciwgbW9kb19kbSBhcyBNb2RvRE0sIGNhbWJpYV9tb2RvX2RtKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1ZWRvR3VhcmRhckVuVEVNID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnN1bHRhVGFyZWFzVGVtID0gY29uc3VsdGFVcGRhdGVUYXJlYXNUZW1Qb3JEZXNjYXJnYSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86IE9QRVJBVElWTywgaWRFbmMsIHRhcmVhLCB0b2tlbiwgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzYUFEZXNjYXJnYXI6IGNhbWJpYV9tb2RvX2RtIHx8IHBlcnNpc3RlbnRlcy5pZHBlciAhPSBpZHBlcl9sb2d1ZWFkb190YWJsZXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWVyeVRhcmVhc1RlbSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGNvbnN1bHRhVGFyZWFzVGVtLnNxbCwgY29uc3VsdGFUYXJlYXNUZW0ucGFyYW1zKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1ZWRvR3VhcmRhckVuVEVNID0gcXVlcnlUYXJlYXNUZW0ucm93Q291bnQgPT0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1ZWRvR3VhcmRhckVuVEVNKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBndWFyZGFyRW5jdWVzdGFFblRlbShjb250ZXh0LCBPUEVSQVRJVk8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsIHRhcmVhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlZ2lzdHJhclBhc2VUYWJsYShjb250ZXh0LCBPUEVSQVRJVk8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZSgnbG9jYWwtcmVjaWJpZG8tc2luLXRva2VuLnR4dCcsIEpTT04uc3RyaW5naWZ5KHsgbm93OiBuZXcgRGF0ZSgpLCBpZHBlcjogcGVyc2lzdGVudGVzLmlkcGVyLCBpZENhc286IGlkRW5jLCBbcGtfYWdyZWdhZGFdOiByZXNwdWVzdGFzVUFQcmluY2lwYWwgfSkgKyAnXFxuXFxuJywgJ3V0ZjgnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgeyByb3cgfSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGdldEhkclF1ZXJ5KGNvbmR2aXYsIGNvbnRleHQsIFVBX1BSSU5DSVBBTCwgcGVybWl0ZUdlbmVyYXJNdWVzdHJhLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQpLCBbT1BFUkFUSVZPLCBpZHBlcl9sb2d1ZWFkb190YWJsZXRdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbSB0dFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCAgZXN0YWRvID0gJDQsIGNhcmdhZG9fZG09JDM6OnRleHRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSAke2NvbmR2aXZ9IFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyBlbmNgXHJcbiAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICBbT1BFUkFUSVZPLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQsIHRva2VuLCBFU1RBRE9fUE9TVEVSSU9SX0NBUkdBXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5yb3csXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IE9QRVJBVElWTyxcclxuICAgICAgICAgICAgICAgIHNvbG9MZWN0dXJhOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICAgICAgbnVtX3NpbmNybyxcclxuICAgICAgICAgICAgICAgIGlkcGVyOiBpZHBlcl9sb2d1ZWFkb190YWJsZXQsXHJcbiAgICAgICAgICAgICAgICBjYXJnYXM6IGxpa2VBci5jcmVhdGVJbmRleChjYXJnYXNIZHJDb25GZWNoYURteShyb3cuY2FyZ2FzKS5tYXAoY2FyZ2EgPT4gKHsgLi4uY2FyZ2EsIGVzdGFkb19jYXJnYTogJ3JlbGV2YW1pZW50bycgfSkpLCAnY2FyZ2EnKVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX2JhY2t1cCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICd0b2tlbicsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGVtJywgdHlwZU5hbWU6ICdqc29uYicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbW9kb19kbScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOiB0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyB0b2tlbjogc3RyaW5nIHwgbnVsbCwgdGVtOiBBbnlPYmplY3QsIG1vZG9fZG06IE1vZG9ETSB9Pikge1xyXG4gICAgICAgICAgICB2YXIgeyBiZSwgY2xpZW50IH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIHZhciBudW1fc2luY3JvOiBudW1iZXIgPSAwO1xyXG4gICAgICAgICAgICB2YXIgdG9rZW46IHN0cmluZyB8IG51bGwgPSBwYXJhbWV0ZXJzLnRva2VuO1xyXG4gICAgICAgICAgICBpZiAodG9rZW4gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgb2s6ICdvazpOL1QnIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeyByb3dDb3VudCB9ID0gYXdhaXQgY2xpZW50LnF1ZXJ5KGBzZWxlY3QgMSBmcm9tIHRva2VucyB3aGVyZSB0b2tlbiA9ICQxYCwgW3Rva2VuXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyb3dDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9rOiAnb2s6Ti9UJyB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgT1BFUkFUSVZPKSk7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLnRlbSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYmFja3VwIG9mIGxpa2VBcihwYXJhbWV0ZXJzLnRlbSkuYXJyYXkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcmVhID0gYmFja3VwLmNhcmdhLmNhcmdhO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwdWVzdGFzUmFpeiA9IGJhY2t1cC5yZXNwdWVzdGFzUmFpejtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaWRFbmNETSA9IGJhY2t1cC5mb3JQa1JhaXpbcGtfYWdyZWdhZGFdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlY2VwY2lvbmlzdGEgPSBiYWNrdXAuY2FyZ2EucmVjZXBjaW9uaXN0YTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXNpZ25hZG8gPSBiYWNrdXAuaWRwZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlcihpZEVuY0RNKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQsIE9QRVJBVElWTywgYXJlYSwgaWRFbmNETSwgdG9rZW4sIHJlc3B1ZXN0YXNSYWl6LCByZWNlcGNpb25pc3RhLCBhc2lnbmFkbywgcGFyYW1ldGVycy5tb2RvX2RtLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQganNvbl9iYWNrdXAgPSAkMywgZmVjaGFfYmFja3VwID0gY3VycmVudF90aW1lc3RhbXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQganNvbl9iYWNrdXAgaXMgZGlzdGluY3QgZnJvbSAkNFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW09QRVJBVElWTywgaWRFbmNETSwgcmVzcHVlc3Rhc1JhaXosIHJlc3B1ZXN0YXNSYWl6XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBvazogJ29rJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY29uc2lzdGlyX3ZpdmllbmRhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYXNvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGNhc286IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgeyBiZSwgY2xpZW50IH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1fcHJvYyA9IHtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogcGFyYW1ldGVycy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBpZF9jYXNvOiBwYXJhbWV0ZXJzLmNhc29cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZXJyTWVzc2FnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRhZG86IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0YWRvID0gYXdhaXQgYmUucHJvY2VkdXJlLmNvbnNpc3Rpcl9lbmN1ZXN0YS5jb3JlRnVuY3Rpb24oY29udGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbV9wcm9jXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHVuZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UgPSBcIiBjb25zaXN0aXJfY2Fzby4gXCIgKyBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNZXNzYWdlLCBlcnJvcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnKioqKioqIGNvbnNpc3Rpcl9jYXNvIHJlc3VsdGFkbzonLCByZXN1bHRhZG8pXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBvazogJ29rJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX3Jlc2NhdGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2xvY2FsU3RvcmFnZUl0ZW0nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdsb2NhbFN0b3JhZ2VJdGVtS2V5JywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5sb2dnZWQ6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgbG9jYWxTdG9yYWdlSXRlbUtleTogc3RyaW5nLCBsb2NhbFN0b3JhZ2VJdGVtOiBBbnlPYmplY3QgfT4pIHtcclxuICAgICAgICAgICAgdmFyIHsgbG9jYWxTdG9yYWdlSXRlbUtleSwgbG9jYWxTdG9yYWdlSXRlbSB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cobG9jYWxTdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKCdsb2NhbC1yZXNjYXRlLnR4dCcsIEpTT04uc3RyaW5naWZ5KHsgbm93OiBuZXcgRGF0ZSgpLCB1c2VyOiBjb250ZXh0LnVzZXJuYW1lLCBpdGVtS2V5OiBsb2NhbFN0b3JhZ2VJdGVtS2V5LCBpdGVtRGF0YTogbG9jYWxTdG9yYWdlSXRlbSB9KSArICdcXG5cXG4nLCAndXRmOCcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRVJST1InLCBleHBlY3RlZChlcnIpKTtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnb3BlcmF0aXZvX2dldCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXSxcclxuICAgICAgICB1bmxvZ2dlZDp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KXtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZ2V0X3JhbmRvbV9mcmVlX2Nhc2UnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFt7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH1dLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8gfT4pIHtcclxuICAgICAgICAgICAgY29uc3QgbWluc1RvRXhwaXJlID0gMzA7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbnNTaW5jZUJsb3F1ZWQgPSBgZGF0ZV9wYXJ0KCdtaW4nLCBhZ2UoY3VycmVudF90aW1lc3RhbXAsIGZlY2hhX2Jsb3F1ZW8pKWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuYyA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBzZWxlY3QgZW5jIGZyb20gdGVtIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKGxpYnJlIG9yICR7bWluc1NpbmNlQmxvcXVlZH0gPiAke21pbnNUb0V4cGlyZX0pIGxpbWl0IDE7YCwgW3BhcmFtcy5vcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVZhbHVlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBVUERBVEUgdGVtIHNldCBsaWJyZSA9IGZhbHNlLCBmZWNoYV9ibG9xdWVvPWN1cnJlbnRfdGltZXN0YW1wIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyYCwgW3BhcmFtcy5vcGVyYXRpdm8sIGVuYy52YWx1ZV0pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGVuYy52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ211ZXN0cmFfZ2VuZXJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdhcmVhJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgcmVmZXJlbmNlczogXCJhcmVhc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2RvbWluaW8nLCB0eXBlTmFtZTogJ2ludGVnZXInLCBkZWZhdWx0VmFsdWU6IDMgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FudF9lbmN1ZXN0YXMnLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhX2FjdHVhbCcsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6ICd0YXJlYXMnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBhcmVhOiBudW1iZXIsIGRvbWluaW86IG51bWJlciwgY2FudF9lbmN1ZXN0YXM6IG51bWJlciwgdGFyZWFfYWN0dWFsOiBJZFRhcmVhIH0+KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSA9IGF3YWl0IGdldE9wZXJhdGl2b1Blcm1pdGVHZW5lcmFyTXVlc3RyYShjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIGlmIChwZXJtaXRlR2VuZXJhck11ZXN0cmEpIHtcclxuICAgICAgICAgICAgICAgIGxldCB0b3RhbEFjdHVhbCA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICBgc2VsZWN0IGNvdW50KCopIGFzIHRvdGFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGFyZWEgPSAkMmAsXHJcbiAgICAgICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5hcmVhXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJhbXMuY2FudF9lbmN1ZXN0YXMgLSB0b3RhbEFjdHVhbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jID0gYXdhaXQgZ2VuZXJhck51ZXZvSWRFbmMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmFyZWEsIG1heEFFbmNQb3JBcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJFbmN1ZXN0YVRlbShjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvLCBlbmMsIHBhcmFtcy5hcmVhLCBwYXJhbXMuZG9taW5pbywgcGFyYW1zLnRhcmVhX2FjdHVhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImVsIG9wZXJhdGl2byBubyBwZXJtaXRlIGdlbmVyYXIgbXVlc3RyYVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnbXVlc3RyYV9hZ3JlZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2FyZWEnLCB0eXBlTmFtZTogJ2ludGVnZXInLCByZWZlcmVuY2VzOiBcImFyZWFzXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZG9taW5pbycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIGRlZmF1bHRWYWx1ZTogMyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYW50X2VuY3Vlc3RhcycsIHR5cGVOYW1lOiAnaW50ZWdlcicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWFfYWN0dWFsJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ3RhcmVhcycgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGFyZWE6IG51bWJlciwgZG9taW5pbzogbnVtYmVyLCBjYW50X2VuY3Vlc3RhczogbnVtYmVyLCB0YXJlYV9hY3R1YWw6IElkVGFyZWEgfT4pIHtcclxuICAgICAgICAgICAgY29uc3QgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZUdlbmVyYXJNdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pdGVHZW5lcmFyTXVlc3RyYSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gcGFyYW1zLmNhbnRfZW5jdWVzdGFzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmMgPSBhd2FpdCBnZW5lcmFyTnVldm9JZEVuYyhjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuYXJlYSwgbWF4QUVuY1BvckFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ2VuZXJhckVuY3Vlc3RhVGVtKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8sIGVuYywgcGFyYW1zLmFyZWEsIHBhcmFtcy5kb21pbmlvLCBwYXJhbXMudGFyZWFfYWN0dWFsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiZWwgb3BlcmF0aXZvIG5vIHBlcm1pdGUgZ2VuZXJhciBtdWVzdHJhXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ibGFucXVlYXJfcHJldmlzdWFsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAnY29vcl9jYW1wbycsICdhZG1pbiddLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnbW9zdHJhcl9lbmN1ZXN0YV9hX2JsYW5xdWVhcl9jb250ZW5pZG8nLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBidXNjYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ibGFucXVlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ3N1YmNvb3JfY2FtcG8nLCAnY29vcl9jYW1wbycsICdhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSAke2JlLmRiLnF1b3RlSWRlbnQodW5pZGFkX2FuYWxpc2lzKX0gXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAke2JlLmRiLnF1b3RlSWRlbnQocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgIC8vcGFzbyBhIGVuY3UgcGFyYSBndWFyZGFyIGVuIGhpc3RvcmlhbFxyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYV9hY3R1YWwgPSAnZW5jdSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyhjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgLy9yZXNldGVvIHRlbSAobm8gc2UgZ3VhcmRhIGhpc3RvcmlhbCBwb3JxdWUgdGFyZWFfYWN0dWFsIGVzIG51bGwpXHJcbiAgICAgICAgICAgIC8vZ3VhcmRvIGJhY2t1cCBwb3IgbGFzIGR1ZGFzXHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25fYmFja3VwID0ganNvbl9lbmN1ZXN0YSwganNvbl9lbmN1ZXN0YSA9IG51bGwsIHRhcmVhX2FjdHVhbCA9IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlY2hhX21vZGlmX2VuY3Vlc3RhID0gbnVsbCwgZmVjaGFfYmFja3VwID0gY3VycmVudF90aW1lc3RhbXAsIG1vZGlmaWNhZG8gPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVuX2VzdGFkbyA9IG51bGwsIHJlc3VtZW5fZXN0YWRvX3N1cCA9IG51bGwsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzZV90YWJsYSA9IG51bGwsIHJlYSA9IG51bGwsIG5vcmVhID0gbnVsbCwgcmVhX3N1cCA9IG51bGwsIG5vcmVhX3N1cCA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgJHtiZS5kYi5xdW90ZUlkZW50KHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gaW5fY29uX3ZhclxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBwa19pbnRlZ3JhZGEtPj4ke2JlLmRiLnF1b3RlTGl0ZXJhbChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIGluY29uc2lzdGVuY2lhc191bHRpbWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIHBrX2ludGVncmFkYS0+PiR7YmUuZGIucXVvdGVMaXRlcmFsKHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGBsYSBlbmN1ZXN0YSAke3BhcmFtcy5lbmN9IHNlIGJsYW5xdWXDsyBjb3JyZWN0YW1lbnRlYDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2JvcnJhcl9wcmV2aXN1YWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOlsnY29vcl9wcm9jJywnc3ViY29vcl9jYW1wbycsJ2Nvb3JfY2FtcG8nLCdhZG1pbiddLFxyXG4gICAgICAgIHJlc3VsdE9rOidtb3N0cmFyX2VuY3Vlc3RhX2FfYm9ycmFyJyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7b3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmd9Pil7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBidXNjYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQscGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2JvcnJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAnc3ViY29vcl9jYW1wbycsICdjb29yX2NhbXBvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIHBhcmFtcy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2Fzb1RlbSB9ID0gYXdhaXQgYnVzY2FyRW5jdWVzdGFFblRlbShjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1fYm9ycmFkYXMgKG9wZXJhdGl2bywgZW5jLCBjdWFuZG8sIGFyZWEsIGNsdXN0ZXIsIGRvbWluaW8sIHRhcmVhX2FjdHVhbCwganNvbl9lbmN1ZXN0YSwgdG9rZW5fYXV0b2dlbmVyYWRvX2RtLCBlbmNfYXV0b2dlbmVyYWRvX2RtLCBlbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEsIHByb2llKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgKCQxLCQyLGN1cnJlbnRfdGltZXN0YW1wLCQzLCQ0LCQ1LCQ2LCQ3LCQ4LCQ5LCQxMCwkMTEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgICAgICAgICAgYCwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0ub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uZW5jLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uYXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmNsdXN0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5kb21pbmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0udGFyZWFfYWN0dWFsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uanNvbl9lbmN1ZXN0YSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLnRva2VuX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmVuY19hdXRvZ2VuZXJhZG9fZG0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5lbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5wcm9pZVxyXG4gICAgICAgICAgICAgICAgXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIGBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJHtiZS5kYi5xdW90ZUlkZW50KHVuaWRhZF9hbmFsaXNpcyl9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICR7YmUuZGIucXVvdGVJZGVudChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaGlzdG9yaWFsX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCAke2JlLmRiLnF1b3RlSWRlbnQocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5fY29uX3ZhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgcGtfaW50ZWdyYWRhLT4+JHtiZS5kYi5xdW90ZUxpdGVyYWwocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzX3VsdGltYXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIHBrX2ludGVncmFkYS0+PiR7YmUuZGIucXVvdGVMaXRlcmFsKHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYGxhIGVuY3Vlc3RhICR7cGFyYW1zLmVuY30gc2UgYm9ycsOzIGNvcnJlY3RhbWVudGVgO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ25vIHNlIHB1ZWRlIGJvcnJhciBsYSBlbmN1ZXN0YSBwb3JxdWUgZWwgb3BlcmF0aXZvIHRpZW5lIG11ZXN0cmEgZXN0w6F0aWNhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3Rhc19jYXBhY2l0YWNpb25fYm9ycmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICBpZiAocGVybWl0ZV9nZW5lcmFyX211ZXN0cmEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuY3NBQm9ycmFyID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIGBzZWxlY3QgKiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEgaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvXSkuZmV0Y2hBbGwoKSkucm93cztcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBlbmNzQUJvcnJhcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV9ib3JyYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHsgb3BlcmF0aXZvOiBwYXJhbXMub3BlcmF0aXZvLCBlbmM6IHJvdy5lbmMgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAnc2UgYm9ycmFyb24gbGFzIGVuY3Vlc3RhcyBkZSBjYXBhY2l0YWNpw7NuJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdubyBzZSBwdWVkZSBib3JyYXIgbGEgZW5jdWVzdGEgcG9ycXVlIGVsIG9wZXJhdGl2byB0aWVuZSBtdWVzdHJhIGVzdMOhdGljYScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdhY2Npb25fdGFyZWFzX3RlbV9lamVjdXRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NvbmRpY2lvbicsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnYWNjaW9uJywgdHlwZU5hbWU6ICdqc29uYicgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nLCBjb25kaWNpb246IHN0cmluZywgYWNjaW9uOiBFc3RhZG9BY2Npb24gfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIGFjY2lvbiA9IHBhcmFtcy5hY2Npb24gYXMgRXN0YWRvQWNjaW9uO1xyXG4gICAgICAgICAgICB2YXIgY3VtcGxlOiBib29sZWFuID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBhY2Npb25fY3VtcGxlX2NvbmRpY2lvbigkNSwgJDYsICQ3LCAkOCwgKFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdCBjb25kaWNpb24gXHJcbiAgICAgICAgICAgICAgICAgICAgICBmcm9tIGVzdGFkb3NfYWNjaW9uZXMgXHJcbiAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZXN0YWRvID0gJDIgYW5kIGVhY2Npb24gPSAkMyBhbmQgZXN0YWRvX2Rlc3Rpbm8gPSAkNFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApYCwgW1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG8sXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZWFjY2lvbixcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlubyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVuYyxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lYWNjaW9uLFxyXG4gICAgICAgICAgICBdKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoIWN1bXBsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIHNlIHB1ZG8gZWplY3V0YXIgbGEgYWNjacOzbiwgbm8gc2UgY3VtcGxlIGxhIGNvbmRpY2nDs24gXCIke3BhcmFtcy5jb25kaWNpb259XCIgbyBiaWVuIGVsIGVzdGFkbyBlc3TDoSBkZXNhY3R1YWxpemFkbywgcmVmcmVzcXVlIGxhIGdyaWxsYS5gKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgZW5jPSQyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5lbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlub1xyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGlmIChhY2Npb24ubm9tYnJlX3Byb2NlZHVyZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJlLnByb2NlZHVyZVthY2Npb24ubm9tYnJlX3Byb2NlZHVyZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmVbYWNjaW9uLm5vbWJyZV9wcm9jZWR1cmVdLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBObyBleGlzdGUgZWwgcHJvY2VkdXJlIFwiJHthY2Npb24ubm9tYnJlX3Byb2NlZHVyZX1cIiBkZWZpbmlkbyBlbiBsYSB0YWJsYSBcImVzdGFkb3NfYWNjaW9uZXNcIiBwYXJhIGVsXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiAke2FjY2lvbi5vcGVyYXRpdm99LCBlc3RhZG86ICR7YWNjaW9uLmVzdGFkb30sIGVhY2Npb246ICR7YWNjaW9uLmVhY2Npb259LmApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQlVTQ08gUEFTRSBERSBUQVJFQVxyXG4gICAgICAgICAgICB2YXIgdGFyZWFTaWd1aWVudGUgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc19wcm94aW1hc1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8gPSAkMSBhbmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhID0gJDIgYW5kIGVzdGFkbyA9ICQzIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWFfY3VtcGxlX2NvbmRpY2lvbigkNCwgJDUsICQ2LCAkNywgY29uZGljaW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyIGJ5IG9yZGVuXHJcbiAgICAgICAgICAgICAgICAgICAgbGltaXQgMWBcclxuICAgICAgICAgICAgICAgICwgW1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlubyxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVuY1xyXG4gICAgICAgICAgICAgICAgXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpKS5yb3c7XHJcbiAgICAgICAgICAgIGlmICh0YXJlYVNpZ3VpZW50ZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmBcclxuICAgICAgICAgICAgICAgICAgICAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCB0YXJlYVNpZ3VpZW50ZS50YXJlYV9kZXN0aW5vXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGF1dG9Bc2lnbmFkbyA9IHRhcmVhU2lndWllbnRlLnJlZ2lzdHJhX3JlY2VwY2lvbmlzdGEgPyBjb250ZXh0LnVzZXIuaWRwZXIgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgbGV0IHEgPSBjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbDtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgdHNfZW50cmFkYSA9IGN1cnJlbnRfdGltZXN0YW1wLCBhZGVsYW50YXIgPSBudWxsLCBlc3RhZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHthdXRvQXNpZ25hZG8gP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiwgcmVjZXBjaW9uaXN0YT1cIiArIHEoYXV0b0FzaWduYWRvKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmBcclxuICAgICAgICAgICAgICAgICAgICAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCB0YXJlYVNpZ3VpZW50ZS50YXJlYV9kZXN0aW5vLCB0YXJlYVNpZ3VpZW50ZS5lc3RhZG9fZGVzdGlub11cclxuICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJlYVNpZ3VpZW50ZS5ub21icmVfcHJvY2VkdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlW3RhcmVhU2lndWllbnRlLm5vbWJyZV9wcm9jZWR1cmVdLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEZJTiBQQVNFIERFIFRBUkVBXHJcbiAgICAgICAgICAgIHJldHVybiBcIm9rXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9jYXJnYV9wcmVwYXJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jLCBPUEVSQUNJT05fUFJFUEFSQVJfQ0FSR0FdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZGlzcG9uaWJpbGl6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgYXNpZ25hZG8gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9kZXNjYXJnYV9wcmVwYXJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jLCBPUEVSQUNJT05fUFJFUEFSQVJfREVTQ0FSR0FdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fZGVzY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICdjYXJnYXInXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYW5hbGl6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmNvbnNpc3Rpcl9lbmN1ZXN0YS5jb3JlRnVuY3Rpb24oY29udGV4dCwgeyBvcGVyYXRpdm86IHBhcmFtcy5vcGVyYXRpdm8sIGlkX2Nhc286IHBhcmFtcy5lbmMgfSlcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdpbmNvbnNpc3RlbmNpYXNfZW5jdWVzdGFfY29udHJvbGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBjYW50aWRhZDogbnVtYmVyID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBjb3VudCgqKSBhcyBjdW1wbGVcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIGluY29uc2lzdGVuY2lhcyBpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqb2luIGNvbnNpc3RlbmNpYXMgYyB1c2luZyAob3BlcmF0aXZvLCBjb25zaXN0ZW5jaWEpIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqb2luIG1vbWVudG9zX2NvbnNpc3RlbmNpYSBtYyB1c2luZyAob3BlcmF0aXZvLCBtb21lbnRvKVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8gPSAkMSBhbmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpdmllbmRhID0gJDIgYW5kIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb21lbnRvX2NvbnNpc3RlbmNpYV9jdW1wbGVfY29uZGljaW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS52aXZpZW5kYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQzLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3QgY29uZGljaW9uIGZyb20gbW9tZW50b3NfY29uc2lzdGVuY2lhIHdoZXJlIG9wZXJhdGl2byA9IG1jLm9wZXJhdGl2byBhbmQgbW9tZW50byA9IG1jLm1vbWVudG8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkuanVzdGlmaWNhY2lvbiBpcyBudWxsYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCBjb250ZXh0LnVzZXJuYW1lXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlXHJcbiAgICAgICAgICAgIGlmIChjYW50aWRhZCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYG5vIHNlIHB1ZWRlIHZlcmlmaWNhciBsYSB0YXJlYSBwb3JxdWUgaGF5IGluY29uc2lzdGVuY2lhcywgcG9yIGZhdm9yIHJlc3XDqWx2YWxhcyBvIGp1c3RpZsOtcXVlbGFzIGVuIGNhc28gZGUgc2VyIG5lY2VzYXJpby5gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfdmVyaWZpY2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5pbmNvbnNpc3RlbmNpYXNfZW5jdWVzdGFfY29udHJvbGFyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB2ZXJpZmljYWRvID0gJzEnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fdmVyaWZpY2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfY2VycmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSAnMScsIGFzaWduYWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuYywgY29udGV4dC51c2VyLmlkcGVyXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rlc3ZlcmlmaWNhcl9leGNlcGNpb25hbCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbW90aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnc3ViY29vcl9jYW1wbycsICdjb29yX2NhbXBvJywgJ2Nvb3JfcHJvYycsICdwcm9jZXNhbWllbnRvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIG1vdGl2bzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBlbmN1ZXN0YURlc3ZlcmlmaWNhckV4Y2VwY2lvbmFsKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19jZXJyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9zdXBlcnZpc2FyX3ByZXNlbmNpYWwnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdzdXBlJywgMV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9zdXBlcnZpc2FyX3RlbGVmb25pY2EnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdzdXBlJywgMl0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19zdXBlcnZpc2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdmaW5jJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9wYXNhcl9hX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0NDJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYSBpbiAoJDMsJDQpIC0tcXVpZXJvIHBhc2FyIGxhcyAyIHRhcmVhcyBhIENDXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnYW5hYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fcGFzYXJfYV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdBJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnMEQnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnYW5hYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAncHJvYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZGV2b2x2ZXJfcHJvY19kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV92ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdBJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2Rldm9sdmVyX3Byb2NfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQ0MnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhIGluICgkMywkNCkgLS1xdWllcm8gcGFzYXIgbGFzIDIgdGFyZWFzIGEgQ0NcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnLCAncHJvYyddKVxyXG4gICAgICAgICAgICAgICAgLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX25vX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9yZWN1cGVyYXJfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIGVuYywgdGFyZWEgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsICdyZWN1J10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19yZWN1cGVyYXJfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIGVuYywgdGFyZWEgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCAncmVjdScsICdhbmFjJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX25vX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9mb3J6YXJfdGFyZWEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhX2FjdHVhbCcsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWFfbnVldmEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWFfYWN0dWFsOiBzdHJpbmcsIHRhcmVhX251ZXZhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbCwgdGFyZWFfbnVldmEgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCB0YXJlYV9hY3R1YWwsIHRhcmVhX251ZXZhXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ1YnIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfYWN0dWFsXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJzBEJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfbnVldmFdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfaGFiaWxpdGFyX2Rlc2hhYmlsaXRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgaGFiaWxpdGFkYSA9IG5vdCBoYWJpbGl0YWRhXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YXNfcHJvY2VzYW1pZW50b19wYXNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pil7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBwYXNhckVuY3Vlc3Rhc0FQcm9pZShjb250ZXh0LmNsaWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdpbnRlcmNhbWJpYXJfZW5jdWVzdGFzJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYzEnLCByZWZlcmVuY2VzOiAndGVtJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYW50SG9nMScsIHR5cGVOYW1lOiAnaW50ZWdlcicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jMicsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FudEhvZzInLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3Bhc28nLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NvbmZpcm1hJywgdHlwZU5hbWU6ICdib29sZWFuJywgZGVmYXVsdFZhbHVlOiBmYWxzZSwgbGFiZWw6ICdDb25maXJtYSBpbnRlcmNhbWJpbyBkZSBsb3MgZGF0b3MgZW50cmUgbGFzIGVuY3Vlc3Rhcz8gJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ3Byb2Nlc2FtaWVudG8nLCAnYWRtaW4nXSxcclxuICAgICAgICBwcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8YW55Pikge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogUGFyYSBjb250cm9sYXI6XHJcbiAgICAgICAgICAgICAqIC0gcXVlIGxhcyBob2dhcmVzLCBwZXJzb25hcywgZXRjIGVzdMOpbiBpbnRlcmNhbWJpYWRhcyBcclxuICAgICAgICAgICAgICogICogdGFudG8gZW4gZWwganNvblxyXG4gICAgICAgICAgICAgKiAgKiBjb21vIGVuIGxhcyBURHNcclxuICAgICAgICAgICAgICogLSBjb3NhcyBxdWUgc2UgY2FsY3VsYW4gcG9yIGxhIGFwcD8gY3VhbGVzPyAocmVzdW1lbl9lc3RhZG8sIHJlYSB5IG5vcmVhKVxyXG4gICAgICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmNvbmZpcm1hKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbmZpcm3DsyBpbnRlcmNhbWJpbycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuZW5jMSB8fCAhcGFyYW1zLmVuYzIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIEZhbHRhIGluZ3Jlc2FyIHVuIG51bWVybyBkZSBlbmN1ZXN0YSEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmVuYzEgPT0gcGFyYW1zLmVuYzIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIGVuYzEgeSBlbmMyIGRlYmVuIHNlciBkaXN0aW50b3MhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY2FudEhvZzEpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIENhbnRpZGFkIGRlIEhvZ2FyZXMgZGUgZW5jMSwgbm8gZXN0YSBpbmdyZXNhZG8hJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY2FudEhvZzIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIENhbnRpZGFkIGRlIEhvZ2FyZXMgZGUgZW5jMiwgbm8gZXN0YSBpbmdyZXNhZG8hJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ09OVFJPTEFSIFFVRSBOSU5HVU5BIERFIExBUyAyIGVuY3Vlc3RhcyBFU1RFIENBUkdBREEsIEFCSUVSVEEgRkFMVEFcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTykpO1xyXG4gICAgICAgICAgICBjb25zdCBjYW50X2hvZ3MgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHZpdmllbmRhLCBjb3VudCgqKW5oIGZyb20gaG9nYXJlcyB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICh2aXZpZW5kYT0kMiBvciB2aXZpZW5kYT0kMylcclxuICAgICAgICAgICAgICAgIGdyb3VwIGJ5IHZpdmllbmRhIG9yZGVyIGJ5IHZpdmllbmRhXHJcbiAgICAgICAgICAgICAgICBgLCBbT1BFUkFUSVZPLCBwYXJhbXMuZW5jMSwgcGFyYW1zLmVuYzJdKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG5cclxuICAgICAgICAgICAgdmFyIHBhcmFtX25oID0gW3BhcmFtcy5jYW50SG9nMSwgcGFyYW1zLmNhbnRIb2cyXTtcclxuICAgICAgICAgICAgY2FudF9ob2dzLmZvckVhY2goKHhlLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1fbmhbaV0gIT09IHhlLm5oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1lbnMgPSBgRXJyb3IsIG5vIGNvaW5jaWRlIGxhIGNhbnRpZGFkIGRlIGhvZ2FyZXMgZGUgZW5jJHtpICsgMX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih4bWVucyk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciByZWdFbmMgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBzZWxlY3QgZW5jLCB0YXJlYV9hY3R1YWwsIGpzb25fZW5jdWVzdGEgZnJvbSB0ZW0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAoZW5jID0kMiBvciBlbmM9JDMpIG9yZGVyIGJ5IGVuY1xyXG4gICAgICAgICAgICBgLCBbT1BFUkFUSVZPLCBwYXJhbXMuZW5jMSwgcGFyYW1zLmVuYzJdKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlZ0VuYy5sZW5ndGggIT0gMikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgTm8gc2UgZW5jb250cmFyb24gMiBlbmN1ZXN0YXMnKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gbGltcGlhIGxhcyBURHMgIFxyXG4gICAgICAgICAgICAgICAgbGV0IFtlbmMxLCBlbmMyXSA9IFtyZWdFbmNbMF0sIHJlZ0VuY1sxXV1cclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMucGFzbyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBkZWxldGUgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh1bmlkYWRfYW5hbGlzaXMpfSB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICh2aXZpZW5kYT0kMiBPUiB2aXZpZW5kYT0kMylgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICwgW09QRVJBVElWTywgZW5jMS5lbmMsIGVuYzIuZW5jXVxyXG4gICAgICAgICAgICAgICAgICAgICkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1zLnBhc28gPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vc2ltdWxhIGd1YXJkYWRvXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3Jpbyhjb250ZXh0LCBPUEVSQVRJVk8sIGVuYzEuZW5jLCBlbmMxLnRhcmVhX2FjdHVhbCwgZW5jMi5qc29uX2VuY3Vlc3RhKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgT1BFUkFUSVZPLCBlbmMyLmVuYywgZW5jMi50YXJlYV9hY3R1YWwsIGVuYzEuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKGBMaXN0byBwYXNvICR7cGFyYW1zLnBhc299LiBJbnRlcmNhbWJpbyByZWFsaXphZG8gZW50cmUgbGFzIGVuY3Vlc3RhcyAgJHtwYXJhbXMuZW5jMX0geSAke3BhcmFtcy5lbmMyfS4gUG9yIGZhdm9yIGNvbnNpc3RhIGxhIGVuY3Vlc3RhYClcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhZG9yX2Rtc19tb3N0cmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuY3Vlc3RhZG9yJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ2Nvb3JfY2FtcG8nLCAnYWRtaW4nXSxcclxuICAgICAgICByZXN1bHRPazogJ21vc3RyYXJfZW5jdWVzdGFzX2FfYmxhbnF1ZWFyJyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmN1ZXN0YWRvcjogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgYXNpZ25hZG8gPSAkMiBhbmQgY2FyZ2Fkb19kbSBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyIGJ5IGNhcmdhZG9fZG1cclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY3Vlc3RhZG9yXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnJvd0NvdW50ID09IDApIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBObyBzZSBlbmNvbnRyYXJvbiBlbmN1ZXN0YXMgY2FyZ2FkYXMgZW4gdW4gRE0gcGFyYSBlbCBvcGVyYXRpdm8gJHtwYXJhbXMub3BlcmF0aXZvfSwgZW5jdWVzdGFkb3IgJHtwYXJhbXMuZW5jdWVzdGFkb3J9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyByb3dzOiByZXN1bHQucm93cywgb3BlcmF0aXZvOiBwYXJhbXMub3BlcmF0aXZvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9ibGFucXVlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndG9rZW4nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAnY29vcl9jYW1wbycsICdhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRva2VuOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgbGV0IHRhcmVhc1RlbVJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGNhcmdhZG9fZG0gPSBudWxsLCBvcGVyYWNpb24gPSAkMywgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGNhcmdhZG9fZG0gPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudG9rZW4sIE9QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQSwgRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYgKHRhcmVhc1RlbVJlc3VsdC5yb3dDb3VudCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcignTm8gc2UgYmxhbnF1ZcOzIG5pbmd1bmEgZW5jdWVzdGEnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IHR0IG9mIHRhcmVhc1RlbVJlc3VsdC5yb3dzKSB7XHJcbiAgICAgICAgICAgICAgICB0dC5yZXN1bHRfYmxhbnF1ZW8gPSBgZW5jICR7dHQuZW5jfSBzZSBibGFucXVlw7MgY29ycmVjdGFtZW50ZS5gO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdEJhY2t1cCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBqc29uX2VuY3Vlc3RhID0ganNvbl9iYWNrdXAsIGZlY2hhX21vZGlmX2VuY3Vlc3RhID0gZmVjaGFfYmFja3VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCBmZWNoYV9iYWNrdXAgPiBjb2FsZXNjZShmZWNoYV9tb2RpZl9lbmN1ZXN0YSwgJzE5MDAtMDEtMDEnKSBhbmQganNvbl9iYWNrdXAgaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgIFt0dC5vcGVyYXRpdm8sIHR0LmVuY10pXHJcbiAgICAgICAgICAgICAgICAgICAgLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRCYWNrdXAucm93Q291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0dC5yZXN1bHRfYmxhbnF1ZW8gKz0gYCBTZSByZXN0YWJsZWNpw7MgZWwgYmFja3VwIGNvbiBmZWNoYSAke3Jlc3VsdEJhY2t1cC5yb3cuZmVjaGFfYmFja3VwLnRvWW1kSG1zKCl9LmBcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeyBwYXJhbXM6IHF1ZXJ5UGFyYW1zLCBzZXR0ZXJzIH0gPSBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhOiB0dC50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiByZXN1bHRCYWNrdXAucm93Lmpzb25fZW5jdWVzdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFt0dC5vcGVyYXRpdm8sIHR0LmVuYywgdHQudGFyZWFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5vOiAndGFyZWFzX3RlbSdcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgcmVzdWx0QmFja3VwLnJvdy5vcGVyYXRpdm8sIHJlc3VsdEJhY2t1cC5yb3cuZW5jLCB0dC50YXJlYSwgcmVzdWx0QmFja3VwLnJvdy5qc29uX2VuY3Vlc3RhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0YXJlYXNUZW1SZXN1bHQucm93cztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ21vZG9fZG1fZGVmZWN0b19vYnRlbmVyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bmxvZ2dlZDogdHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7fT4pIHtcclxuICAgICAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZG9EbURlZmVjdG8gPSAoYXdhaXQgKGNsaWVudC5xdWVyeShgc2VsZWN0IG1vZG9fZG1fZGVmZWN0byBmcm9tIHBhcmFtZXRyb3Mgd2hlcmUgdW5pY29fcmVnaXN0cm9gLCBbXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKSkudmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiBtb2RvRG1EZWZlY3RvO1xyXG4gICAgICAgIH1cclxuICAgIH0sIHtcclxuICAgICAgICBhY3Rpb246ICdtb2RvX2FwcF9nZXQnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtdLFxyXG4gICAgICAgIHVubG9nZ2VkOiB0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pikge1xyXG4gICAgICAgICAgICBjb25zdCB7IGJlIH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0TW9kb0J5UG9saWN5KGJlKTtcclxuICAgICAgICB9XHJcbiAgICB9LCB7XHJcbiAgICAgICAgLy8gbGEgYXl1ZGEgZW4gbMOtbmVhIHF1ZSBsZSBjb3JyZXNwb25kZSBhbCB1c3VhcmlvIHNlZ8O6biBzdSByb2wsIHN1cyBwZXJtaXNvcyB5IGVsIG1vZG8gKHZlciBkb2NzL2F5dWRhLW9ubGluZS5tZClcclxuICAgICAgICBhY3Rpb246ICdheXVkYV90cmFlcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KTogUHJvbWlzZTxBeXVkYVBhcmFVc3VhcmlvPiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgYmUgfSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHF1aWVuID0gcXVpZW5Db25zdWx0YUF5dWRhKGNvbnRleHQpO1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1hcyA9IHRlbWFzVmlzaWJsZXMoYmUuY2FjaGVzLmF5dWRhLCBxdWllbik7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICByb2w6IHF1aWVuLnJvbCxcclxuICAgICAgICAgICAgICAgIG1vZG86IHF1aWVuLm1vZG8sXHJcbiAgICAgICAgICAgICAgICB0ZW1hczogdGVtYXMubWFwKHRlbWEgPT4gKHsgaWQ6IHRlbWEuaWQsIHRpdHVsbzogdGVtYS50aXR1bG8sIGh0bWw6IHRlbWEuaHRtbCB9KSksXHJcbiAgICAgICAgICAgICAgICBtZW51OiBtZW51Q29uQXl1ZGEoYmUuZ2V0TWVudShjb250ZXh0KS5tZW51LCB0ZW1hcyksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdvcGVyYXRpdm9fbWlncmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2b19vcmlnZW4nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvX2Rlc3Rpbm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3NjaGVtYV9uYW1lJywgdHlwZU5hbWU6ICd0ZXh0JywgbGFiZWw6ICdub21icmUgZGUgc2NoZW1hJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdkb3dubG9hZF9zcWwnLFxyXG4gICAgICAgIHByb2NlZWRMYWJlbDogJ21pZ3JhcicsXHJcbiAgICAgICAgcm9sZXM6IFsnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IHsgb3BlcmF0aXZvX29yaWdlbjogc3RyaW5nLCBvcGVyYXRpdm9fZGVzdGlubzogc3RyaW5nLCBzY2hlbWFfbmFtZTogc3RyaW5nIH0pIHtcclxuICAgICAgICAgICAgLy8gMS4gQ29uc3VsdGFtb3MgbGFzIHRhYmxhcyBiYXNlIGRlbCBvcmlnZW4gKHNpZW1wcmUgdGllbmVuIG9wZXJhdGl2bylcclxuICAgICAgICAgICAgY29uc3QgYmFzZVRhYmxlc1Jlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgICAgWydvcGVyYXRpdm9zJywgJ3RhcmVhcycsICd1bmlkYWRfYW5hbGlzaXMnLCAnY2FzaWxsZXJvcyddLm1hcChhc3luYyB0YWJsZU5hbWUgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiB0YWJsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzT3BlcmF0aXZvOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYHNlbGVjdCAqIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodGFibGVOYW1lKX0gd2hlcmUgb3BlcmF0aXZvID0gJDFgLCBbcGFyYW1zLm9wZXJhdGl2b19vcmlnZW5dKS5mZXRjaEFsbCgpXHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGJhc2VUYWJsZXNSZXN1bHQuZm9yRWFjaCgoXywgaSkgPT4gYmFzZVRhYmxlc1Jlc3VsdFtpXS5yZXN1bHQucm93cy5mb3JFYWNoKHJvdyA9PiByb3cub3BlcmF0aXZvID0gcGFyYW1zLm9wZXJhdGl2b19kZXN0aW5vKSk7XHJcblxyXG4gICAgICAgICAgICAvL0NoZXF1ZW8geSBjb25zdWx0YSBkZSB0YWJsYXMgcmVhcyAocmVhLCBub19yZWEsIHJlYV9zdXAsIG5vX3JlYV9zdXApXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbmFsVGFibGVzID0gWydyZWEnLCAnbm9fcmVhJywgJ3JlYV9zdXAnLCAnbm9fcmVhX3N1cCddO1xyXG4gICAgICAgICAgICBjb25zdCB0YWJsZXNFeGlzdFJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCB0YWJsZV9uYW1lIFxyXG4gICAgICAgICAgICAgICAgIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBcclxuICAgICAgICAgICAgICAgICB3aGVyZSB0YWJsZV9zY2hlbWEgPSBjdXJyZW50X3NjaGVtYSgpIFxyXG4gICAgICAgICAgICAgICAgICAgYW5kIHRhYmxlX25hbWUgPSBhbnkoJDEpYCxcclxuICAgICAgICAgICAgICAgIFtvcHRpb25hbFRhYmxlc11cclxuICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdPcHRpb25hbFRhYmxlcyA9IHRhYmxlc0V4aXN0UmVzdWx0LnJvd3MubWFwKHIgPT4gci50YWJsZV9uYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgbWlzc2luZ09wdGlvbmFsVGFibGVzID0gb3B0aW9uYWxUYWJsZXMuZmlsdGVyKHQgPT4gIWV4aXN0aW5nT3B0aW9uYWxUYWJsZXMuaW5jbHVkZXModCkpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uYWxUYWJsZXNSZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgIGV4aXN0aW5nT3B0aW9uYWxUYWJsZXMubWFwKGFzeW5jIHRhYmxlTmFtZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sc1Jlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgc2VsZWN0IGNvbHVtbl9uYW1lIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHRhYmxlX3NjaGVtYSA9IGN1cnJlbnRfc2NoZW1hKCkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0YWJsZV9uYW1lID0gJDFgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVOYW1lXVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzT3BlcmF0aXZvID0gY29sc1Jlc3VsdC5yb3dzLnNvbWUoYyA9PiBjLmNvbHVtbl9uYW1lID09PSAnb3BlcmF0aXZvJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyID0gaGFzT3BlcmF0aXZvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYHNlbGVjdCAqIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodGFibGVOYW1lKX0gd2hlcmUgb3BlcmF0aXZvID0gJDFgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYHNlbGVjdCAqIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodGFibGVOYW1lKX1gO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IGhhc09wZXJhdGl2byA/IFtwYXJhbXMub3BlcmF0aXZvX29yaWdlbl0gOiBbXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShxdWVyeVN0ciwgcXVlcnlQYXJhbXMpLmZldGNoQWxsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIG9wdGlvbmFsVGFibGVzUmVzdWx0LmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodC5oYXNPcGVyYXRpdm8pIHtcclxuICAgICAgICAgICAgICAgICAgICB0LnJlc3VsdC5yb3dzLmZvckVhY2gocm93ID0+IHJvdy5vcGVyYXRpdm8gPSBwYXJhbXMub3BlcmF0aXZvX2Rlc3Rpbm8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIENvbWJpbmFtb3MgYmFzZSB5IG9wY2lvbmFsZXMgZW5jb250cmFkYXNcclxuICAgICAgICAgICAgY29uc3QgdGFibGVzUmVzdWx0ID0gWy4uLmJhc2VUYWJsZXNSZXN1bHQsIC4uLm9wdGlvbmFsVGFibGVzUmVzdWx0XTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRpc2FibGVDYXNpbGxlcm9zRksgPSBgXHJcbiAgICAgICAgICAgICAgICBBTFRFUiBUQUJMRSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChwYXJhbXMuc2NoZW1hX25hbWUpfS5jYXNpbGxlcm9zIERJU0FCTEUgVFJJR0dFUiBBTEw7XHJcbiAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuYWJsZUNhc2lsbGVyb3NGSyA9IGBcclxuICAgICAgICAgICAgICAgIEFMVEVSIFRBQkxFICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHBhcmFtcy5zY2hlbWFfbmFtZSl9LmNhc2lsbGVyb3MgRU5BQkxFIFRSSUdHRVIgQUxMO1xyXG4gICAgICAgICAgICBgO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYnVpbGRJbnNlcnRzID0gKHF1ZXJ5OiB7IG5hbWU6IHN0cmluZywgaGFzT3BlcmF0aXZvPzogYm9vbGVhbiwgcmVzdWx0OiBSZXN1bHRSb3dzIH0pID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBmaWVsZHMgPSBbLi4ucXVlcnkucmVzdWx0LmZpZWxkc107XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2kgbGEgdGFibGEgZGUgcmVhIG5vIHRlbsOtYSBsYSBjb2x1bW5hIG9wZXJhdGl2bywgbGEgYWdyZWdhbW9zIGFsIGluc2VydFxyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5Lmhhc09wZXJhdGl2byA9PT0gZmFsc2UgJiYgIWZpZWxkcy5zb21lKChmOiB7IG5hbWU6IHN0cmluZyB9KSA9PiBmLm5hbWUgPT09ICdvcGVyYXRpdm8nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKHsgbmFtZTogJ29wZXJhdGl2bycgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5LnJlc3VsdC5yb3dzLm1hcChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeS5oYXNPcGVyYXRpdm8gPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5vcGVyYXRpdm8gPSBwYXJhbXMub3BlcmF0aXZvX2Rlc3Rpbm87XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2luc2VydCBpbnRvICcgKyBjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQocGFyYW1zLnNjaGVtYV9uYW1lKSArICcuJyArIGNvbnRleHQuYmUuZGIucXVvdGVJZGVudChxdWVyeS5uYW1lKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICcgKCcgKyBmaWVsZHMubWFwKChmOiB7IG5hbWU6IHN0cmluZyB9KSA9PiBjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQoZi5uYW1lKSkuam9pbignLCAnKSArICcpJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICcgdmFsdWVzICgnICsgZmllbGRzLm1hcCgoZjogeyBuYW1lOiBzdHJpbmcgfSkgPT4gY29udGV4dC5iZS5kYi5xdW90ZU51bGxhYmxlKHJvd1tmLm5hbWVdKSkuam9pbignLCAnKSArICcpOyc7XHJcbiAgICAgICAgICAgICAgICB9KS5qb2luKCdcXG4nKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wT3JpZ2VuUSA9IGNvbnRleHQuYmUuZGIucXVvdGVOdWxsYWJsZShwYXJhbXMub3BlcmF0aXZvX29yaWdlbik7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wRGVzdGlub1EgPSBjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19kZXN0aW5vKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRBcmVhcyA9IFtcclxuICAgICAgICAgICAgICAgIDEsIDE0MDAsIDE0MTAsIDE0MjAsIDE0MzAsIDE0NDAsIDE0NTAsIDE0NjAsIDE0NzAsIDE0ODAsIDE0OTAsXHJcbiAgICAgICAgICAgICAgICAxNTAwLCAxNTEwLCAxNTIwLCAxNTMwLCAxNTQwLCA3NDAwLCA3NDEwLCA3NDIwLCA3NDMwLCA3NDQwLFxyXG4gICAgICAgICAgICAgICAgNzQ1MCwgNzQ2MCwgNzQ3MCwgNzQ4MCwgNzQ5MCwgNzUwMCwgNzUxMCwgNzUyMCwgNzUzMCwgNzU0MFxyXG4gICAgICAgICAgICBdO1xyXG5cclxuICAgICAgICAgICAgLy8gQXZpc29zIHNpIGFsZ3VuYSB0YWJsYSBvcGNpb25hbCBubyBleGlzdGUgZW4gYWJzb2x1dG9cclxuICAgICAgICAgICAgY29uc3Qgbm90aWNlc1NxbCA9IG1pc3NpbmdPcHRpb25hbFRhYmxlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICA/IFwiRE8gXFwkXFwkXFxuQkVHSU5cXG5cIiArIG1pc3NpbmdPcHRpb25hbFRhYmxlcy5tYXAodCA9PiBgICAgIFJBSVNFIE5PVElDRSAnTGEgdGFibGEgXCIlXCIgbm8gZXhpc3RlIGVuIGVsIG9yaWdlbiwgc2Ugb21pdGUuJywgJyR7dH0nO2ApLmpvaW4oXCJcXG5cIikgKyBcIlxcbkVORCBcXCRcXCQ7XCJcclxuICAgICAgICAgICAgICAgIDogJyc7XHJcblxyXG4gICAgICAgICAgICAvLyAyLiBCbG9xdWUgUEwvcGdTUUwgY29uIHZhbGlkYWNpw7NuIHkgbGltcGllemEgZXhjbHVzaXZhIGVuIGVsIGNhbWlubyBwb3IgZGVmZWN0b1xyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25hbEFyZWFzVGVtU3FsID0gYFxyXG4gICAgICAgICAgICAgICAgRE8gJCRcclxuICAgICAgICAgICAgICAgIERFQ0xBUkVcclxuICAgICAgICAgICAgICAgICAgICB2X3RpZW5lX29uZGEgYm9vbGVhbjtcclxuICAgICAgICAgICAgICAgIEJFR0lOXHJcbiAgICAgICAgICAgICAgICAgICAgLS0gVmVyaWZpY2FyIHNpIGxhcyAzIHRhYmxhcyB0aWVuZW4gcmVnaXN0cm9zIHNpbXVsdMOhbmVhbWVudGUgZW4gZWwgZGVzdGlub1xyXG4gICAgICAgICAgICAgICAgICAgIFNFTEVDVCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ09BTEVTQ0UoKFNFTEVDVCBjb3VudCgxKSBGUk9NIGFyZWFzIFdIRVJFIG9wZXJhdGl2byA9ICR7b3BPcmlnZW5RfSksIDApID4gMCBBTkRcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ09BTEVTQ0UoKFNFTEVDVCBjb3VudCgxKSBGUk9NIHRhcmVhc19hcmVhcyBXSEVSRSBvcGVyYXRpdm8gPSAke29wT3JpZ2VuUX0pLCAwKSA+IDAgQU5EXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENPQUxFU0NFKChTRUxFQ1QgY291bnQoMSkgRlJPTSB0ZW0gV0hFUkUgb3BlcmF0aXZvID0gJHtvcE9yaWdlblF9KSwgMCkgPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgSU5UTyB2X3RpZW5lX29uZGE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIElGIHZfdGllbmVfb25kYSBUSEVOXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC0tIC0tLSBDQU1JTk8gQTogRWwgZGVzdGlubyBUSUVORSBvbmRhIGFudGVyaW9yIGNvbXBsZXRhIC0tLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyBhcmVhcyAob3BlcmF0aXZvLCBhcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUICR7b3BEZXN0aW5vUX0gQVMgb3BlcmF0aXZvLCBhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIGFyZWFzIFdIRVJFIG9wZXJhdGl2byA9ICR7b3BPcmlnZW5RfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIHRhcmVhc19hcmVhcyAob3BlcmF0aXZvLCB0YXJlYSwgYXJlYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAke29wRGVzdGlub1F9IEFTIG9wZXJhdGl2bywgdGFyZWEsIGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZST00gdGFyZWFzX2FyZWFzIFdIRVJFIG9wZXJhdGl2byA9ICR7b3BPcmlnZW5RfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIHRlbSAob3BlcmF0aXZvLCBhcmVhLCBlbmMsIGRvbWluaW8sIGhhYmlsaXRhZGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAke29wRGVzdGlub1F9IEFTIG9wZXJhdGl2bywgYXJlYSwgKGFyZWEgfHwgZW5jOjp0ZXh0KSBlbmMsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FTRSBXSEVOIGVuY3MuZW5jIDwgMTA2IFRIRU4gMyBFTFNFIDUgRU5EIEFTIGRvbWluaW8sIFRSVUUgQVMgaGFiaWxpdGFkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBGUk9NIGFyZWFzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKT0lOIChTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEwMCwgMTEwKSBlbmMpIGVuY3MgT04gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBhcmVhcy5vcGVyYXRpdm8gPSAke29wT3JpZ2VuUX07XHJcbiAgICAgICAgICAgICAgICAgICAgRUxTRVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAtLSAtLS0gQ0FNSU5PIEI6IEFsZ3VuYSB0YWJsYSBlc3TDoSB2YWPDrWEgbyBpbmNvbXBsZXRhIChMaW1waWFtb3MgZSBpbnNlcnRhbW9zIHBvciBkZWZlY3RvKSAtLS1cclxuICAgICAgICAgICAgICAgICAgICAgICAgREVMRVRFIEZST00gdGVtIFdIRVJFIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERFTEVURSBGUk9NIHRhcmVhc19hcmVhcyBXSEVSRSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBERUxFVEUgRlJPTSBhcmVhcyBXSEVSRSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gYXJlYXMgKG9wZXJhdGl2bywgYXJlYSkgVkFMVUVTIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAke2RlZmF1bHRBcmVhcy5tYXAoYSA9PiBgKCR7b3BEZXN0aW5vUX0sJHtjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUoYSl9KWApLmpvaW4oJywgJyl9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gdGFyZWFzX2FyZWFzKG9wZXJhdGl2bywgdGFyZWEsIGFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAqIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBGUk9NIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAke29wRGVzdGlub1F9IEFTIG9wZXJhdGl2bywgdC50YXJlYSwgYXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBhcmVhcyBhLCAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUIHQub3BlcmF0aXZvLCB0LnRhcmVhIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZST00gdGFyZWFzIHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgYS5vcGVyYXRpdm8gPSAke29wRGVzdGlub1F9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFORCB0Lm9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKSBuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9SREVSIEJZIDEsIDIsIDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIHRlbSAob3BlcmF0aXZvLCBhcmVhLCBlbmMsIGRvbWluaW8sIGhhYmlsaXRhZGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVCAke29wRGVzdGlub1F9IEFTIG9wZXJhdGl2bywgYXJlYSwgKGFyZWEgfHwgZW5jOjp0ZXh0KSBlbmMsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FTRSBXSEVOIGVuY3MuZW5jIDwgMTA2IFRIRU4gMyBFTFNFIDUgRU5EIEFTIGRvbWluaW8sIFRSVUUgQVMgaGFiaWxpdGFkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBGUk9NIGFyZWFzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKT0lOIChTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEwMCwgMTEwKSBlbmMpIGVuY3MgT04gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBhcmVhcy5vcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAgICAgICAgIEVORCBJRjtcclxuICAgICAgICAgICAgICAgIEVORCAkJDtcclxuICAgICAgICAgICAgYDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRlbGV0ZXMgPSBgXHJcbiAgICAgICAgICAgIC0tZGVsZXRlcyBpZiBuZWNlc3NhcnlcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSB0YXJlYXNfYXJlYXMgd2hlcmUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSBjYXNpbGxlcm9zIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gdW5pZGFkX2FuYWxpc2lzIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gdGFyZWFzX3RlbSB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIHRlbSB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIGFyZWFzIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gdGFyZWFzIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gb3BlcmF0aXZvcyB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIHJlYSB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIG5vX3JlYSB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIHJlYV9zdXAgd2hlcmUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSBub19yZWFfc3VwIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIGA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzcWwgPSBgc2V0IHNlYXJjaF9wYXRoID0gXCIke3BhcmFtcy5zY2hlbWFfbmFtZX1cIjtgICsgYFxcblxcbmBcclxuICAgICAgICAgICAgICAgICsgZGlzYWJsZUNhc2lsbGVyb3NGS1xyXG4gICAgICAgICAgICAgICAgKyBub3RpY2VzU3FsXHJcbiAgICAgICAgICAgICAgICArICdcXG5cXG4nXHJcbiAgICAgICAgICAgICAgICArIHRhYmxlc1Jlc3VsdC5tYXAocXVlcnkgPT4gYnVpbGRJbnNlcnRzKHF1ZXJ5KSkuam9pbignXFxuXFxuJylcclxuICAgICAgICAgICAgICAgICsgJ1xcblxcbicgKyBjb25kaXRpb25hbEFyZWFzVGVtU3FsXHJcbiAgICAgICAgICAgICAgICArICdcXG5cXG4nICsgZW5hYmxlQ2FzaWxsZXJvc0ZLXHJcbiAgICAgICAgICAgICAgICArICdcXG5cXG4nICsgZGVsZXRlcztcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzcWw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9jYXBhX2FfcHJvZF9wYXNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZW5jX2F1dG9nZW5lcmFkb19kbSA9IGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSwgZW5jX2F1dG9nZW5lcmFkb19kbV9jYXBhID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgZW5jX2F1dG9nZW5lcmFkb19kbV9jYXBhIGlzIG5vdCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRlcnMub3BlcmF0aXZvLCBwYXJhbWV0ZXJzLmVuY11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gYHNlIG1vdmnDsyBsYSBlbmN1ZXN0YSAke3BhcmFtZXRlcnMuZW5jfSBhIHByb2R1Y2Npw7NuYDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbl07Il19
|
|
2399
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlcy1kbWVuY3UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL3Byb2NlZHVyZXMtZG1lbmN1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUFpTmIsOENBZUM7SUFJRCxnRkF3QkM7SUFvTUQsd0RBYUM7SUFrREQsb0RBaUNDO0lBS0QsMEVBcURDO0lBdGxCRCxrQ0FBbUM7SUFDbkMsaURBQStCO0lBSy9CLHlEQUE0RDtJQUU1RCwrQ0FBd0Q7SUFDeEQsMkJBQW9DO0lBRXBDLGdEQUFnRDtJQUdoRCx5REFBd0Q7SUFDeEQsbUVBQTZEO0lBQzdELHFDQUFnQztJQUVoQywyQ0FBa0Q7SUFDbEQsNkNBQW1FO0lBQ25FLG1DQUFzRDtJQUV0RCw2REFBcUc7SUFFckcsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVwQyxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFM0MsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBRTdCLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0lBQ25DLE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFDO0lBQ3RDLE1BQU0sd0JBQXdCLEdBQUcsUUFBUSxDQUFDO0lBQzFDLE1BQU0sMkJBQTJCLEdBQUcsV0FBVyxDQUFDO0lBQ2hELE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztJQUkxQixJQUFJLGVBQWdDLENBQUM7SUFDckMsSUFBSSxjQUFjLEdBQUcsR0FBRyxDQUFBO0lBRWpCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFvQixFQUFFLEVBQUUsQ0FDdkQsZUFBZSxHQUFHLEdBQUcsQ0FBQztJQURiLFFBQUEsa0JBQWtCLHNCQUNMO0lBRW5CLE1B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QyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzswQkFDM0QsTUFBTSxHQUFHLHNCQUFzQjswQkFDL0IsTUFBTSxHQUFHLGtCQUFrQjswQkFDM0IsTUFBTSxHQUFHLE9BQU8sQ0FBQztvQkFFdkIsT0FBTyxHQUFHLENBQUM7Z0JBQ2YsQ0FBQzthQUFBO1NBQ0o7UUFDRDtZQUNJLE1BQU0sRUFBRSw0QkFBNEI7WUFDcEMsVUFBVSxFQUFFO2dCQUNSLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUU7Z0JBQ2pFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO2FBQ3BDO1lBQ0QsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDO1lBQ2hCLFlBQVksRUFBRSxVQUFnQixPQUF5QixFQUFFLFVBQTJFOztvQkFDaEksQ0FBQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN2Qjs7O2dDQUdnQixFQUNoQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUN6QyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO29CQUV4QixPQUFPLHdCQUF3QixVQUFVLENBQUMsR0FBRyxlQUFlLENBQUM7Z0JBQ2pFLENBQUM7YUFBQTtTQUNKO0tBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgUHJvY2VkdXJlRGVmLCBUYWJsZURlZmluaXRpb24sIENsaWVudCwgVGFibGVEZWZpbml0aW9ucywgQXBwQmFja2VuZCB9IGZyb20gXCIuL3R5cGVzLWRtZW5jdVwiO1xyXG5pbXBvcnQgeyBQcm9jZWR1cmVDb250ZXh0LCBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzLCBGb3JlaWduS2V5IH0gZnJvbSBcIm1ldGEtZW5jXCI7XHJcbmltcG9ydCBsaWtlQXIgPSByZXF1aXJlKFwibGlrZS1hclwiKTtcclxuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMtZG1lbmN1XCI7XHJcbmltcG9ydCB7IElkVW5pZGFkQW5hbGlzaXMsIFVuaWRhZEFuYWxpc2lzLCBFc3RhZG9BY2Npb24sIElkRW5jLCBJZFRhcmVhLCBSZXNwdWVzdGFzUmFpeiwgSWRPcGVyYXRpdm8sIElkQ2FyZ2EsIE1vZG9ETSwgUmVhLCBOb1JlYSwgTm9SZWFTdXAsIFJlYVN1cCwgUmVzdWx0YWRvUmVzdW1lbiB9IGZyb20gXCIuLi91bmxvZ2dlZC90aXBvc1wiO1xyXG5cclxuaW1wb3J0IHsgT3BlcmF0aXZvR2VuZXJhdG9yIH0gZnJvbSBcInByb2Nlc2FtaWVudG9cIjtcclxuXHJcbmltcG9ydCB7IGpzb24sIGpzb25vLCBSZXN1bHRSb3dzIH0gZnJvbSBcInBnLXByb21pc2Utc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBjaGFuZ2luZywgZGF0ZSwgY29hbGVzY2UgfSBmcm9tICdiZXN0LWdsb2JhbHMnO1xyXG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gXCJmc1wiO1xyXG5cclxuaW1wb3J0ICogYXMgRXhwcmVzaW9uUGFyc2VyIGZyb20gJ2V4cHJlLXBhcnNlcic7XHJcbmltcG9ydCB7IHRhcmVhcyB9IGZyb20gXCIuL3RhYmxlLXRhcmVhc1wiO1xyXG5pbXBvcnQgeyBwcmVwZW5kTGlzdGVuZXIgfSBmcm9tIFwicHJvY2Vzc1wiO1xyXG5pbXBvcnQgeyBnZXREaWFzQVBhc2FyUXVlcnkgfSBmcm9tIFwiLi90YWJsZS10YXJlYXNfdGVtXCI7XHJcbmltcG9ydCB7IHNxbERlc3ZlcmlmaWNhYmxlcyB9IGZyb20gXCIuL3RhYmxlLWRlc3ZlcmlmaWNhYmxlc1wiO1xyXG5pbXBvcnQgeyBlcnJvciB9IGZyb20gXCJjb25zb2xlXCI7XHJcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwidm1cIjtcclxuaW1wb3J0IHsgZXhwZWN0ZWQsIHVuZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5pbXBvcnQgeyBnZXRNb2RvQnlQb2xpY3ksIHF1aWVuQ29uc3VsdGFBeXVkYSB9IGZyb20gXCIuL2FwcC1kbWVuY3VcIjtcclxuaW1wb3J0IHsgbWVudUNvbkF5dWRhLCB0ZW1hc1Zpc2libGVzIH0gZnJvbSBcIi4vYXl1ZGFcIjtcclxuaW1wb3J0IHR5cGUgeyBBeXVkYVBhcmFVc3VhcmlvIH0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XHJcbmltcG9ydCB7IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvLCBQYXJhbWV0cm9TcWwgfSBmcm9tIFwiLi9zZXR0ZXJzLXJlYS1uby1yZWFcIjtcclxuXHJcbnZhciBQYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG52YXIgc3FsVG9vbHMgPSByZXF1aXJlKCdzcWwtdG9vbHMnKTtcclxuXHJcbnZhciBkaXNjcmVwYW5jZXMgPSByZXF1aXJlKCdkaXNjcmVwYW5jZXMnKTtcclxuXHJcbmNvbnN0IGZvcm1QcmluY2lwYWwgPSAnRjpGMSc7XHJcblxyXG5jb25zdCBFU1RBRE9fUE9TVEVSSU9SX0NBUkdBID0gJ0MnO1xyXG5jb25zdCBFU1RBRE9fUE9TVEVSSU9SX0RFU0NBUkdBID0gJ0QnO1xyXG5jb25zdCBPUEVSQUNJT05fUFJFUEFSQVJfQ0FSR0EgPSAnY2FyZ2FyJztcclxuY29uc3QgT1BFUkFDSU9OX1BSRVBBUkFSX0RFU0NBUkdBID0gJ2Rlc2Nhcmdhcic7XHJcbmNvbnN0IERFRkFVTFRfRE9NSU5JTyA9IDM7XHJcblxyXG5leHBvcnQgdHlwZSBnZW5lcmFySWRFbmNGdW4gPSAoYXJlYTogbnVtYmVyLCBpbmRleDogbnVtYmVyKSA9PiBJZEVuY1xyXG5cclxudmFyIGdlbmVyYXJJZEVuY0Z1bjogZ2VuZXJhcklkRW5jRnVuO1xyXG52YXIgbWF4QUVuY1BvckFyZWEgPSA5OTlcclxuXHJcbmV4cG9ydCBjb25zdCBzZXRHZW5lcmFySWRFbmNGdW4gPSAoZnVuOiBnZW5lcmFySWRFbmNGdW4pID0+XHJcbiAgICBnZW5lcmFySWRFbmNGdW4gPSBmdW47XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0TWF4RW5jUG9yQXJlYSA9IChtYXg6IG51bWJlcikgPT5cclxuICAgIG1heEFFbmNQb3JBcmVhID0gbWF4O1xyXG5cclxuc2V0R2VuZXJhcklkRW5jRnVuKChhcmVhOiBudW1iZXIsIG51bUVuYzogbnVtYmVyKSA9PiBhcmVhLnRvU3RyaW5nKCkgKyBudW1FbmMudG9TdHJpbmcoKS5wYWRTdGFydChtYXhBRW5jUG9yQXJlYS50b1N0cmluZygpLmxlbmd0aCwgJzAnKSBhcyB1bmtub3duIGFzIElkRW5jKTtcclxuXHJcbnNldE1heEVuY1BvckFyZWEoOTk5KTtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXJOdWV2b0lkRW5jKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGFyZWE6IG51bWJlciwgbWF4QUVuY1BvckFyZWE6IG51bWJlcikge1xyXG4gICAgY29uc3Qgc2lndWllbnRlTnVtZXJvRW5jdWVzdGEgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgIFNFTEVDVCBvYnRlbmVyX3NpZ3VpZW50ZV9jb250YWRvcl9hcmVhKCQxLCQyLCQzKSBBUyBuZXh0X2NvdW50ZXI7XHJcbiAgICBgLCBbb3BlcmF0aXZvLCBhcmVhLCBtYXhBRW5jUG9yQXJlYV0pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICByZXR1cm4gZ2VuZXJhcklkRW5jRnVuKGFyZWEsIHNpZ3VpZW50ZU51bWVyb0VuY3Vlc3RhKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldE9wZXJhdGl2b0FjdHVhbCA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0KSA9PiB7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIG9wZXJhdGl2byA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICBgc2VsZWN0IG9wZXJhdGl2b1xyXG4gICAgICAgICAgICBmcm9tIHBhcmFtZXRyb3NcclxuICAgICAgICAgICAgd2hlcmUgdW5pY29fcmVnaXN0cm9gXHJcbiAgICAgICAgLCBbXVxyXG4gICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlXHJcbiAgICBpZiAob3BlcmF0aXZvKSB7XHJcbiAgICAgICAgcmV0dXJuIG9wZXJhdGl2b1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBFcnJvcignbm8gc2UgY29uZmlndXLDsyB1biBvcGVyYXRpdm8gZW4gbGEgdGFibGEgcGFyw6FtZXRyb3MnKTtcclxuICAgIH1cclxufTtcclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldERlZmF1bHRUYXJlYShjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSB7XHJcbiAgICByZXR1cm4gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBzZWxlY3QgKiBcclxuICAgICAgICAgICAgZnJvbSB0YXJlYXMgXHJcbiAgICAgICAgICAgIHdoZXJlIGVzX2luaWNpYWwgYW5kIG9wZXJhdGl2byA9ICQxXHJcbiAgICBgLCBbb3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY2xpZW50OiBDbGllbnQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiAoYXdhaXQgY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBzZWxlY3QgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgIGZyb20gb3BlcmF0aXZvcyBcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDFcclxuICAgIGAsIFtvcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJFbmN1ZXN0YUF1dG9nZW5lcmFkYUVuRE0oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgT1BFUkFUSVZPOiBJZE9wZXJhdGl2bywgYXJlYTogbnVtYmVyLCBlbmNBdXRvZ2VuZXJhZG9EbTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIHJlY2VwY2lvbmlzdGE6IHN0cmluZywgYXNpZ25hZG86IHN0cmluZywgbW9kb19kbTogTW9kb0RNLCBjYW1iaWFfbW9kb19kbTogYm9vbGVhbik6IFByb21pc2U8SWRFbmM+IHtcclxuICAgIGxldCBpZEVuYyA9IG51bGw7XHJcbiAgICB2YXIgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTyk7XHJcbiAgICBpZiAocGVybWl0ZV9nZW5lcmFyX211ZXN0cmEpIHtcclxuICAgICAgICBjb25zdCBhdXRvZ2VuZXJhZG9GaWVsZCA9IG1vZG9fZG0gPT0gJ3Byb2R1YycgPyAnZW5jX2F1dG9nZW5lcmFkb19kbScgOiAnZW5jX2F1dG9nZW5lcmFkb19kbV9jYXBhJztcclxuICAgICAgICBjb25zdCByZXN1bHRVcGRhdGUgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgIFVQREFURSB0ZW0gXHJcbiAgICAgICAgICAgICAgICBzZXQgKGpzb25fYmFja3VwLCBqc29uX2VuY3Vlc3RhLCBmZWNoYV9iYWNrdXApID0gXHJcbiAgICAgICAgICAgICAgICAgICAgKCQ0LCAkNSwgY3VycmVudF90aW1lc3RhbXApXHJcbiAgICAgICAgICAgICAgICB3aGVyZSAob3BlcmF0aXZvID0gJDEgYW5kICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KGF1dG9nZW5lcmFkb0ZpZWxkKX0gPSAkMiBhbmQgdG9rZW5fYXV0b2dlbmVyYWRvX2RtID0gJDMpXHJcbiAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgIGAsIFtPUEVSQVRJVk8sIGVuY0F1dG9nZW5lcmFkb0RtLCB0b2tlbiwgcmVzcHVlc3Rhc1JhaXosIHJlc3B1ZXN0YXNSYWl6XSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgIC8vIGhhZ28gaW5zZXJ0IHBvcnF1ZSBubyBleGlzdGUgZW4gdGVtXHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFRhcmVhID0gYXdhaXQgZ2V0RGVmYXVsdFRhcmVhKGNvbnRleHQsIE9QRVJBVElWTyk7XHJcbiAgICAgICAgaWYgKHJlc3VsdFVwZGF0ZS5yb3dDb3VudCA9PSAwKSB7XHJcbiAgICAgICAgICAgIGlkRW5jID0gYXdhaXQgZ2VuZXJhck51ZXZvSWRFbmMoY29udGV4dCwgT1BFUkFUSVZPLCBhcmVhLCBtYXhBRW5jUG9yQXJlYSlcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgSU5TRVJUIGludG8gdGVtIChcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgZW5jLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgZG9taW5pbyxcclxuICAgICAgICAgICAgICAgICAgICBoYWJpbGl0YWRhLFxyXG4gICAgICAgICAgICAgICAgICAgICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KGF1dG9nZW5lcmFkb0ZpZWxkKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5fYXV0b2dlbmVyYWRvX2RtLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmVhX2FjdHVhbCxcclxuICAgICAgICAgICAgICAgICAgICBqc29uX2JhY2t1cCxcclxuICAgICAgICAgICAgICAgICAgICBqc29uX2VuY3Vlc3RhLCBcclxuICAgICAgICAgICAgICAgICAgICBmZWNoYV9iYWNrdXBcclxuICAgICAgICAgICAgICAgICkgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzICgkMSwgJDIsICQzLCAkNCwgJDUsICQ2LCAkNywgJDgsICQ5LCAkMTAsIGN1cnJlbnRfdGltZXN0YW1wKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgIGAsIFtcclxuICAgICAgICAgICAgICAgIE9QRVJBVElWTyxcclxuICAgICAgICAgICAgICAgIGlkRW5jLFxyXG4gICAgICAgICAgICAgICAgYXJlYSxcclxuICAgICAgICAgICAgICAgIERFRkFVTFRfRE9NSU5JTyxcclxuICAgICAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgICAgICBlbmNBdXRvZ2VuZXJhZG9EbSxcclxuICAgICAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdFRhcmVhLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzUmFpeixcclxuICAgICAgICAgICAgXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZEVuYyA9IHJlc3VsdFVwZGF0ZS5yb3cuZW5jXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMoY29udGV4dCwgT1BFUkFUSVZPKTtcclxuICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICBzZXQgcmVjZXBjaW9uaXN0YSA9ICQ0LCBhc2lnbmFkbyA9ICQ1XHJcbiAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgIGAsIFtPUEVSQVRJVk8sIGlkRW5jLCBkZWZhdWx0VGFyZWEudGFyZWEsIHJlY2VwY2lvbmlzdGEsIGFzaWduYWRvXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICBzZXQgY2FyZ2Fkb19kbSA9ICQ0LCBlc3RhZG8gPSAkNSwgb3BlcmFjaW9uID0gJDZcclxuICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgYCwgW09QRVJBVElWTywgaWRFbmMsIGRlZmF1bHRUYXJlYS50YXJlYSwgdG9rZW4sIEVTVEFET19QT1NURVJJT1JfQ0FSR0EsIGNhbWJpYV9tb2RvX2RtID8gbnVsbCA6IE9QRVJBQ0lPTl9QUkVQQVJBUl9DQVJHQV1cclxuICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWRFbmNcclxufVxyXG5cclxuLy8gbGFzIGRlZmluaWNpb25lcyBkZSB0YWJsYSBkZSBsYXMgYXBwcyBsZWVuIGNvbnRleHQudXNlciAocG9yIGVqZW1wbG8gdXNlci5yb2wgcGFyYSBkZWNpZGlyIHNpIGVzIGVkaXRhYmxlKTtcclxuLy8gbG9zIHByb2NlZGltaWVudG9zIHVubG9nZ2VkIChjb21vIGRtX2ZvcnBrcmFpel9kZXNjYXJnYXIpIHB1ZWRlbiBsbGVnYXIgY29uIGxhIHNlc2nDs24gdmVuY2lkYSB5IHNpbiB1c3VhcmlvLlxyXG4vLyBMYSBlc3RydWN0dXJhIChjbGF2ZXMgeSB0YWJsYXMgaGlqYXMpIG5vIGRlcGVuZGUgZGUgbGEgcGVyc29uYSwgcG9yIGVzbyBzZSBwaWRlIGNvbiBlbCBjb250ZXh0byBxdWUgYmFja2VuZC1wbHVzXHJcbi8vIHVzYSBwYXJhIGVsIGR1bXAgeSBlbCBtZW7DuiwgeSBubyBjb24gZWwgZGUgbGEgc2VzacOzbi5cclxuZnVuY3Rpb24gY29udGV4dFBhcmFFc3RydWN0dXJhKGJlOiBBcHBCYWNrZW5kKSB7XHJcbiAgICByZXR1cm4gYmUuZ2V0Q29udGV4dEZvckR1bXAoKTtcclxufVxyXG5cclxuLypkZWZpbmljacOzbiBkZSBlc3RydWN0dXJhIGNvbXBsZXRhLCBjdWFuZG8gZXhpc3RhIGluZy1lbmMgaGF5IHF1ZSBwb25lcmxvIGFow60qL1xyXG50eXBlIEVzdHJ1Y3R1cmFUYWJsYSA9IHsgdGFibGVOYW1lOiBzdHJpbmcsIHBrRmllbGRzOiB7IGZpZWxkTmFtZTogc3RyaW5nIH1bXSwgY2hpbGRUYWJsZXM6IEVzdHJ1Y3R1cmFUYWJsYVtdIH07XHJcbmZ1bmN0aW9uIGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCB0YWJsZU5hbWU6IHN0cmluZykge1xyXG4gICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgIHZhciBjb250ZXh0RXN0cnVjdHVyYSA9IGNvbnRleHRQYXJhRXN0cnVjdHVyYShiZSk7XHJcbiAgICB2YXIgbWFpblRhYmxlRGVmOiBUYWJsZURlZmluaXRpb24gPSBiZS50YWJsZVN0cnVjdHVyZXNbdGFibGVOYW1lXShjb250ZXh0RXN0cnVjdHVyYSk7XHJcbiAgICB2YXIgZ2V0UGtGcm9tVGFibGVEZWYgPSBmdW5jdGlvbiBnZXRQa0Zyb21UYWJsZURlZih0YWJsZURlZjogVGFibGVEZWZpbml0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhYmxlRGVmLnByaW1hcnlLZXkubWFwKGZ1bmN0aW9uIChwaykge1xyXG4gICAgICAgICAgICByZXR1cm4geyBmaWVsZE5hbWU6IHBrIH07XHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbiAgICB2YXIgZ2V0RmtGcm9tVGFibGVEZWYgPSBmdW5jdGlvbiBnZXRGa0Zyb21UYWJsZURlZih0YWJsZURlZjogVGFibGVEZWZpbml0aW9uLCBwYXJlbnRUYWJsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBwYXJlbnRGayA9ICg8Rm9yZWlnbktleVtdPnRhYmxlRGVmLmZvcmVpZ25LZXlzKS5maW5kKGZrID0+IGZrLnJlZmVyZW5jZXMgPT0gcGFyZW50VGFibGVOYW1lKTtcclxuICAgICAgICByZXR1cm4gcGFyZW50RmsgPyBwYXJlbnRGay5maWVsZHMgOiBbXTtcclxuICAgIH1cclxuICAgIHZhciBzdHJ1Y3Q6IEVzdHJ1Y3R1cmFUYWJsYSA9IHtcclxuICAgICAgICB0YWJsZU5hbWU6IG1haW5UYWJsZURlZi5uYW1lLFxyXG4gICAgICAgIHBrRmllbGRzOiBnZXRQa0Zyb21UYWJsZURlZihtYWluVGFibGVEZWYpLFxyXG4gICAgICAgIGNoaWxkVGFibGVzOiBbXVxyXG4gICAgfTtcclxuICAgIGlmIChtYWluVGFibGVEZWYuZGV0YWlsVGFibGVzICYmIG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgbWFpblRhYmxlRGVmLmRldGFpbFRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXRhaWxUYWJsZSkge1xyXG4gICAgICAgICAgICBpZiAoZGV0YWlsVGFibGUudGFibGUpIHtcclxuICAgICAgICAgICAgICAgIHN0cnVjdC5jaGlsZFRhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5naW5nKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dCwgZGV0YWlsVGFibGUudGFibGUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZrRmllbGRzOiBnZXRGa0Zyb21UYWJsZURlZihiZS50YWJsZVN0cnVjdHVyZXNbZGV0YWlsVGFibGUudGFibGVdKGNvbnRleHRFc3RydWN0dXJhKSwgdGFibGVOYW1lKSB9XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RydWN0O1xyXG59XHJcbi8qIGZpbiBkZWZpbmljaW9uIGVzdHJ1Y3R1cmEgY29tcGxldGEgKi9cclxuXHJcbnR5cGUgQW55T2JqZWN0ID0geyBbazogc3RyaW5nXTogYW55IH1cclxuXHJcblxyXG5leHBvcnQgdHlwZSBDb25zdWx0YVNxbCA9IHsgc3FsOiBzdHJpbmcsIHBhcmFtczogUGFyYW1ldHJvU3FsW10gfTtcclxuXHJcbi8vIGdyYWJhIGVuIGxhIFRFTSBsYSBlbmN1ZXN0YSB5IGVsIHJlc3VsdGFkbyBjYWxjdWxhZG8gKHJlc3VtZW4sIHJlYSB5IG5vIHJlYTsgbyBzdXMgdmVyc2lvbmVzIF9zdXAgc2kgbGEgdGFyZWEgZXMgc3VwZSlcclxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN1bHRhVXBkYXRlVGVtPFIgZXh0ZW5kcyBSZXN1bHRhZG9SZXN1bWVuPihvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBpZEVuYzogc3RyaW5nLCByZXNwdWVzdGFzVUFQcmluY2lwYWw6IFIsIHRhcmVhOiBJZFRhcmVhKTogQ29uc3VsdGFTcWwge1xyXG4gICAgdmFyIHsgcGFyYW1zLCBzZXR0ZXJzIH0gPSBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyh7XHJcbiAgICAgICAgdGFyZWEsXHJcbiAgICAgICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLFxyXG4gICAgICAgIHNldHRlcnM6IFtganNvbl9lbmN1ZXN0YSA9ICQzYCwgYGZlY2hhX21vZGlmX2VuY3Vlc3RhID0gY3VycmVudF90aW1lc3RhbXBgXSxcclxuICAgICAgICBwYXJhbXM6IFtvcGVyYXRpdm8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWxdLFxyXG4gICAgICAgIGRlc3Rpbm86ICd0ZW0nXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBzcWw6IGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2AsXHJcbiAgICAgICAgcGFyYW1zXHJcbiAgICB9O1xyXG59XHJcblxyXG4vLyBjdWFuZG8gZWwgZGlzcG9zaXRpdm8gZGV2dWVsdmUgbGEgZW5jdWVzdGE6IHBhc2EgbGEgdGFyZWEgYSBkZXNjYXJnYWRhIHkgZ3VhcmRhIGVsIHJlc3VsdGFkbyBjYWxjdWxhZG8gZW4gZWwgZGlzcG9zaXRpdm8gKGRtXyopO1xyXG4vLyBzw7NsbyBzaSBsYSBlbmN1ZXN0YSBzaWd1ZSBjYXJnYWRhIGNvbiBlbCB0b2tlbiBkZWwgZGlzcG9zaXRpdm9cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbnN1bHRhVXBkYXRlVGFyZWFzVGVtUG9yRGVzY2FyZ2E8UiBleHRlbmRzIFJlc3VsdGFkb1Jlc3VtZW4+KG9wdHM6IHtcclxuICAgIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkRW5jOiBzdHJpbmcsIHRhcmVhOiBJZFRhcmVhLCB0b2tlbjogc3RyaW5nLFxyXG4gICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiBSLCBwYXNhQURlc2NhcmdhcjogYm9vbGVhblxyXG59KTogQ29uc3VsdGFTcWwge1xyXG4gICAgdmFyIHsgcGFyYW1zLCBzZXR0ZXJzIH0gPSBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyh7XHJcbiAgICAgICAgdGFyZWE6IG9wdHMudGFyZWEsXHJcbiAgICAgICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiBvcHRzLnJlc3B1ZXN0YXNVQVByaW5jaXBhbCxcclxuICAgICAgICBzZXR0ZXJzOiBbXHJcbiAgICAgICAgICAgIGBlc3RhZG8gPSAnJHtFU1RBRE9fUE9TVEVSSU9SX0RFU0NBUkdBfSdgLFxyXG4gICAgICAgICAgICBgY2FyZ2Fkb19kbT1udWxsYFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcGFyYW1zOiBbb3B0cy5vcGVyYXRpdm8sIG9wdHMuaWRFbmMsIG9wdHMudGFyZWEsIG9wdHMudG9rZW5dLFxyXG4gICAgICAgIGRlc3Rpbm86ICd0YXJlYXNfdGVtJ1xyXG4gICAgfSlcclxuICAgIGlmIChvcHRzLnBhc2FBRGVzY2FyZ2FyKSB7XHJcbiAgICAgICAgc2V0dGVycy5wdXNoKGBvcGVyYWNpb24gPSAnJHtPUEVSQUNJT05fUFJFUEFSQVJfREVTQ0FSR0F9J2ApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBzcWw6IGB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgc2V0ICR7c2V0dGVycy5qb2luKCcsJyl9XHJcbiAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkMyBhbmQgY2FyZ2Fkb19kbSA9ICQ0XHJcbiAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2AsXHJcbiAgICAgICAgcGFyYW1zXHJcbiAgICB9O1xyXG59XHJcblxyXG4vLyBsbyBxdWUgZ3VhcmRhckVuY3Vlc3RhRW5UZW0gdXNhIGRlbCBjbGllbnRlIGRlIGJhc2UgKGVsIENsaWVudCBkZSBwZy1wcm9taXNlLXN0cmljdCBsbyBjdW1wbGUpXHJcbmV4cG9ydCB0eXBlIENsaWVudGVQYXJhVGVtID0ge1xyXG4gICAgcXVlcnkoc3FsOiBzdHJpbmcsIHBhcmFtczogUGFyYW1ldHJvU3FsW10pOiB7IGZldGNoVW5pcXVlUm93KCk6IFByb21pc2U8eyByb3dDb3VudDogbnVtYmVyIHwgbnVsbCB9PiB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ3VhcmRhckVuY3Vlc3RhRW5UZW0gPSBhc3luYyA8UiBleHRlbmRzIFJlc3VsdGFkb1Jlc3VtZW4+KGNvbnRleHQ6IHsgY2xpZW50OiBDbGllbnRlUGFyYVRlbSB9LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBpZEVuYzogc3RyaW5nLCByZXNwdWVzdGFzVUFQcmluY2lwYWw6IFIsIHRhcmVhOiBJZFRhcmVhKSA9PiB7XHJcbiAgICB2YXIgeyBzcWwsIHBhcmFtcyB9ID0gY29uc3VsdGFVcGRhdGVUZW0ob3BlcmF0aXZvLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLCB0YXJlYSk7XHJcbiAgICByZXR1cm4gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoc3FsLCBwYXJhbXMpLmZldGNoVW5pcXVlUm93KCk7XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdHJhclBhc2VUYWJsYShcclxuICAgIGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsXHJcbiAgICBvcGVyYXRpdm86IElkT3BlcmF0aXZvLFxyXG4gICAgaWRFbmM6IHN0cmluZyB8IG51bWJlcixcclxuICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogYW55LFxyXG4gICAgb3JpZ2VuOiBzdHJpbmcgPSAnZG1fZm9ycGtyYWl6X2Rlc2NhcmdhcidcclxuKSB7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIHByb2NlZHVyZUd1YXJkYXIgPSBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyO1xyXG4gICAgbGV0IHJlc3VsdGFkbyA9IGBpZCBlbmMgJHtpZEVuY306IGA7XHJcbiAgICBsZXQgcGFyYW1fZ3VhcmRhciA9IHsgb3BlcmF0aXZvOiBvcGVyYXRpdm8sIGlkX2Nhc286IGlkRW5jLCBkYXRvc19jYXNvOiByZXNwdWVzdGFzVUFQcmluY2lwYWwgfTtcclxuICAgIGxldCBzYXZlcG9pbnROYW1lID0gYHNwX2d1YXJkYXJfJHtpZEVuY31gLnJlcGxhY2UoL1teYS16QS1aMC05X10vZywgJ18nKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBTQVZFUE9JTlQgJHtzYXZlcG9pbnROYW1lfWApLmV4ZWN1dGUoKTtcclxuICAgICAgICByZXN1bHRhZG8gKz0gYXdhaXQgcHJvY2VkdXJlR3VhcmRhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1fZ3VhcmRhcik7XHJcbiAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFJFTEVBU0UgU0FWRVBPSU5UICR7c2F2ZXBvaW50TmFtZX1gKS5leGVjdXRlKCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UICR7c2F2ZXBvaW50TmFtZX1gKS5leGVjdXRlKCk7XHJcbiAgICAgICAgdmFyIGVycm9yID0gZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICBsZXQgZXJyTWVzc2FnZSA9IHJlc3VsdGFkbyArIG9yaWdlbiArIFwiLiBcIiArIGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgcmVzdWx0YWRvID0gZXJyTWVzc2FnZTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVyck1lc3NhZ2UsIGVycm9yKTtcclxuICAgIH1cclxuXHJcbiAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICBzZXQgcGFzZV90YWJsYSA9ICQzXHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2AsXHJcbiAgICAgICAgW29wZXJhdGl2bywgaWRFbmMsIHJlc3VsdGFkb11cclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgIHJldHVybiByZXN1bHRhZG87XHJcbn1cclxuXHJcbnZhciBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogSWRFbmMsIHRhcmVhOiBJZFRhcmVhLCBqc29uX2VuY3Vlc3RhOiBhbnkpID0+IHtcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICBjb25zdCBVQV9QUklOQ0lQQUwgPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIG9wZXJhdGl2bykpLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHJldHVybiBhd2FpdCBiZS5wcm9jZWR1cmUuZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhci5jb3JlRnVuY3Rpb24oXHJcbiAgICAgICAgY29udGV4dCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG9wZXJhdGl2bzogb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBwZXJzaXN0ZW50ZXM6IHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXM6IHtcclxuICAgICAgICAgICAgICAgICAgICBbVUFfUFJJTkNJUEFMXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZW5jXToganNvbl9lbmN1ZXN0YVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpbmZvcm1hY2lvbkhkcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIFtlbmNdOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgKVxyXG59XHJcblxyXG4vLyBjYWRhIGVsZW1lbnRvIGRlIFwiY2FyZ2FzXCIgcXVlIGFybWEgZ2V0SGRyUXVlcnkgKGZlY2hhIGxsZWdhIGNvbW8gdGV4dG8gaXNvIGRlc2RlIGVsIGpzb24pXHJcbnR5cGUgQ2FyZ2FIZHJEYiA9IHtcclxuICAgIGNhcmdhOiBudW1iZXIgLy8gYXJlYVxyXG4gICAgb2JzZXJ2YWNpb25lczogc3RyaW5nIHwgbnVsbFxyXG4gICAgZmVjaGE6IHN0cmluZyB8IG51bGxcclxuICAgIHJlY2VwY2lvbmlzdGE6IHN0cmluZyB8IG51bGxcclxuICAgIHB1ZWRlX2F1dG9nZW5lcmFyOiBib29sZWFuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhcmdhc0hkckNvbkZlY2hhRG15KGNhcmdhczogQ2FyZ2FIZHJEYltdKSB7XHJcbiAgICByZXR1cm4gY2FyZ2FzLm1hcChjYXJnYSA9PiAoeyAuLi5jYXJnYSwgZmVjaGE6IGNhcmdhLmZlY2hhID8gZGF0ZS5pc28oY2FyZ2EuZmVjaGEpLnRvRG15KCkgOiBudWxsIH0pKTtcclxufVxyXG5cclxudmFyIGdldEhkclF1ZXJ5ID0gZnVuY3Rpb24gZ2V0SGRyUXVlcnkocXVvdGVkQ29uZFZpdjogc3RyaW5nLCBjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCB1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbDogSWRVbmlkYWRBbmFsaXNpcywgcGVybWl0ZUdlbmVyYXJNdWVzdHJhOiBib29sZWFuLCBpZHBlcjpzdHJpbmcpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICB3aXRoICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX0gYXMgXHJcbiAgICAgICAgKHNlbGVjdCB0Lm9wZXJhdGl2bywgdC5lbmMsIHQuanNvbl9lbmN1ZXN0YSBhcyByZXNwdWVzdGFzLCB0LnJlc3VtZW5fZXN0YWRvIGFzIFwicmVzdW1lbkVzdGFkb1wiLCBcclxuICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ2RvbWluaW8nICAgICAgICwgZG9taW5pbyAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnbm9tY2FsbGUnICAgICAgLCBub21jYWxsZSAgICAgICxcclxuICAgICAgICAgICAgICAgICdzZWN0b3InICAgICAgICAsIHNlY3RvciAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ2VkaWZpY2lvJyAgICAgICwgZWRpZmljaW8gICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZW50cmFkYScgICAgICAgLCBlbnRyYWRhICAgICAgICxcclxuICAgICAgICAgICAgICAgICducm9jYXRhc3RyYWwnICAsIG5yb2NhdGFzdHJhbCAgLFxyXG4gICAgICAgICAgICAgICAgJ3Bpc28nICAgICAgICAgICwgcGlzbyAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZGVwYXJ0YW1lbnRvJyAgLCBkZXBhcnRhbWVudG8gICxcclxuICAgICAgICAgICAgICAgICdoYWJpdGFjaW9uJyAgICAsIGhhYml0YWNpb24gICAgLFxyXG4gICAgICAgICAgICAgICAgJ2Nhc2EnICAgICAgICAgICwgY2FzYSAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAncHJpb3JpZGFkJyAgICAgLCByZXNlcnZhKzEgICAgICxcclxuICAgICAgICAgICAgICAgICdvYnNlcnZhY2lvbmVzJyAsIHR0LmNhcmdhX29ic2VydmFjaW9uZXMgLFxyXG4gICAgICAgICAgICAgICAgJ2NpdGEnICAgICAgICAgICwgY2l0YSAsXHJcbiAgICAgICAgICAgICAgICAnY2FyZ2EnICAgICAgICAgLCB0LmFyZWEgICAgICAgICxcclxuICAgICAgICAgICAgICAgICdzZW1hbmEnICAgICAgICAsIHQuc2VtYW5hXHJcbiAgICAgICAgICAgICkgYXMgdGVtLCB0LmFyZWEsXHJcbiAgICAgICAgICAgIC0tVE9ETzogR0VORVJBTElaQVJcclxuICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ3RhcmVhJywgdHQudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAnZmVjaGFfYXNpZ25hY2lvbicsIGZlY2hhX2FzaWduYWNpb24sXHJcbiAgICAgICAgICAgICAgICAnYXNpZ25hZG8nLCBhc2lnbmFkbyxcclxuICAgICAgICAgICAgICAgICdtYWluX2Zvcm0nLCBtYWluX2Zvcm1cclxuICAgICAgICAgICAgKSBhcyB0YXJlYSxcclxuICAgICAgICAgICAgbWluKGZlY2hhX2FzaWduYWNpb24pIGFzIGZlY2hhX2FzaWduYWNpb25cclxuICAgICAgICAgICAgZnJvbSB0ZW0gdCBsZWZ0IGpvaW4gdGFyZWFzX3RlbSB0dCBvbiAodC5vcGVyYXRpdm8gPSB0dC5vcGVyYXRpdm8gYW5kIHQuZW5jID0gdHQuZW5jIGFuZCB0LnRhcmVhX2FjdHVhbCA9IHR0LnRhcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgIGxlZnQgam9pbiB0YXJlYXMgdGEgb24gdC50YXJlYV9hY3R1YWwgPSB0YS50YXJlYVxyXG4gICAgICAgICAgICB3aGVyZSB0LmhhYmlsaXRhZGEgYW5kICR7cXVvdGVkQ29uZFZpdn1cclxuICAgICAgICAgICAgZ3JvdXAgYnkgdC5vcGVyYXRpdm8sIHQuZW5jLCB0Lmpzb25fZW5jdWVzdGEsIHQucmVzdW1lbl9lc3RhZG8sIGRvbWluaW8sIG5vbWNhbGxlLHNlY3RvcixlZGlmaWNpbywgZW50cmFkYSwgbnJvY2F0YXN0cmFsLCBwaXNvLGRlcGFydGFtZW50byxoYWJpdGFjaW9uLGNhc2EscmVzZXJ2YSx0dC5jYXJnYV9vYnNlcnZhY2lvbmVzLCBjaXRhLCB0LmFyZWEsIHR0LnRhcmVhLCBmZWNoYV9hc2lnbmFjaW9uLCBhc2lnbmFkbywgbWFpbl9mb3JtLCB0LnNlbWFuYVxyXG4gICAgICAgIClcclxuICAgICAgICBzZWxlY3QganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbCh1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbCl9LCAke2pzb25vKFxyXG4gICAgICAgIGBzZWxlY3QgZW5jLCByZXNwdWVzdGFzLCBqc29uYl9idWlsZF9vYmplY3QoJ3Jlc3VtZW5Fc3RhZG8nLFwicmVzdW1lbkVzdGFkb1wiKSBhcyBvdHJhcyBmcm9tICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX1gLFxyXG4gICAgICAgICdlbmMnLFxyXG4gICAgICAgIGBvdHJhcyB8fCBjb2FsZXNjZShyZXNwdWVzdGFzLCd7fSc6Ompzb25iKWBcclxuICAgICl9XHJcbiAgICAgICAgICAgICkgYXMgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgJHtqc29uKGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBhLmFyZWEgYXMgY2FyZ2EsIG9ic2VydmFjaW9uZXNfaGRyIGFzIG9ic2VydmFjaW9uZXMsIG1pbihmZWNoYV9hc2lnbmFjaW9uKSBhcyBmZWNoYSwgdGEucmVjZXBjaW9uaXN0YSxcclxuICAgICAgICAgICAgICAgICR7cGVybWl0ZUdlbmVyYXJNdWVzdHJhID8gYGNhc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0YS5hc2lnbmFkbyA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoaWRwZXIpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGVuIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGVuZGA6IGBmYWxzZWB9IGFzIHB1ZWRlX2F1dG9nZW5lcmFyXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbCl9IGF1eCBpbm5lciBqb2luIGFyZWFzIGEgdXNpbmcgKG9wZXJhdGl2bywgYXJlYSkgaW5uZXIgam9pbiB0YXJlYXNfYXJlYXMgdGEgb24gKGEuYXJlYSA9IHRhLmFyZWEgYW5kIGF1eC50YXJlYS0+Pid0YXJlYScgPSB0YS50YXJlYSlcclxuICAgICAgICAgICAgICAgICAgICBncm91cCBieSBhLmFyZWEsIG9ic2VydmFjaW9uZXNfaGRyLCB0YS5yZWNlcGNpb25pc3RhLCBwdWVkZV9hdXRvZ2VuZXJhclxyXG4gICAgICAgICAgICAgICAgJHtwZXJtaXRlR2VuZXJhck11ZXN0cmEgPyBgXHJcbiAgICAgICAgICAgICAgICAgICAgdW5pb24gLS0gZXN0ZSB1bmlvbiBwZXJtaXRlIHZpc3VhbGl6YXIgYXJlYXMgYXNpZ25hZGFzIHNpbiBlbmN1ZXN0YXMgZ2VuZXJhZGFzXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0IGFyZWEgYXMgY2FyZ2EsIG51bGwgYXMgb2JzZXJ2YWNpb25lcywgbnVsbCBhcyBmZWNoYSwgcmVjZXBjaW9uaXN0YSwgdHJ1ZSBhcyBwdWVkZV9hdXRvZ2VuZXJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc19hcmVhcyB3aGVyZSBhc2lnbmFkbyA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoaWRwZXIpfSBhbmQgdGFyZWEgPSAnZW5jdSdgIDogJyd9XHJcbiAgICAgICAgICAgICAgICBgLCAnZmVjaGEnKX0gYXMgY2FyZ2FzLFxyXG4gICAgICAgICAgICAke2pzb25vKFxyXG4gICAgICAgIGBzZWxlY3QgZW5jLCBqc29uYl9idWlsZF9vYmplY3QoJ3RlbScsIHRlbSwgJ3RhcmVhJywgdGFyZWEpIGFzIG90cmFzIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodW5pZGFkQW5hbGlzaXNQcmluY2lwYWwpfWAsXHJcbiAgICAgICAgJ2VuYycsXHJcbiAgICAgICAgYG90cmFzIHx8J3t9Jzo6anNvbmJgXHJcbiAgICApfVxyXG4gICAgICAgICAgICBhcyBcImluZm9ybWFjaW9uSGRyXCJcclxuYFxyXG59XHJcblxyXG5leHBvcnQgdmFyIHNldEhkclF1ZXJ5ID0gKG15RnVuOiAocXVvdGVkQ29uZFZpdjogc3RyaW5nLCBjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCB1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbDogSWRVbmlkYWRBbmFsaXNpcywgcGVybWl0ZUdlbmVyYXJNdWVzdHJhOiBib29sZWFuLCBpZHBlcjogc3RyaW5nKSA9PiBzdHJpbmcpID0+IGdldEhkclF1ZXJ5ID0gbXlGdW5cclxuXHJcbmNvbnN0IGdldFVBUHJpbmNpcGFsID0gYXN5bmMgKGNsaWVudDogQ2xpZW50LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSA9PlxyXG4gICAgKGF3YWl0IGNsaWVudC5xdWVyeShcclxuICAgICAgICBgc2VsZWN0ICpcclxuICAgICAgICAgICAgZnJvbSB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgcHJpbmNpcGFsXHJcbiAgICAgICAgYFxyXG4gICAgICAgICxcclxuICAgICAgICBbb3BlcmF0aXZvXVxyXG4gICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3dcclxuXHJcbnZhciBmdW5jaW9uZXNDb25vY2lkYXM6IHsgW2sgaW4gc3RyaW5nXTogYm9vbGVhbiB9ID0ge31cclxuXHJcbnZhciBjb21waWxlciA9IG5ldyBFeHByZXNpb25QYXJzZXIuQ29tcGlsZXIoe1xyXG4gICAgbGFuZ3VhZ2U6ICdqcycsXHJcbiAgICB2YXJXcmFwcGVyOiAodmFyX25hbWU6IHN0cmluZykgPT4gYGhlbHBlcnMubnVsbDJ6ZXJvKHZhbG9yZXMuJHt2YXJfbmFtZX0pYCxcclxuICAgIGZ1bldyYXBwZXI6IChmdW5jdGlvbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICghZnVuY2lvbmVzQ29ub2NpZGFzW2Z1bmN0aW9uTmFtZV0pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZnVuY3Rpb25OYW1lKVxyXG4gICAgICAgICAgICBmdW5jaW9uZXNDb25vY2lkYXNbZnVuY3Rpb25OYW1lXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgaGVscGVycy5mdW5zLiR7ZnVuY3Rpb25OYW1lfWBcclxuICAgIH1cclxufSlcclxuXHJcbnR5cGUgQ2FzaWxsZXJvRGVBY2EgPSB7XHJcbiAgICBjaGlsZHM6IENhc2lsbGVyb0RlQWNhW10sXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgZXhwcmVzaW9uX2hhYmlsaXRhcjogc3RyaW5nXHJcbiAgICAgICAgZXhwcmVzaW9uX2hhYmlsaXRhcl9qczogc3RyaW5nXHJcbiAgICAgICAgZXNwZWNpYWw6IGFueVxyXG4gICAgICAgIGV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanM6IHN0cmluZ1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjb21waWxhckV4cHJlc2lvbihleHByZXNpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGNvbXBpbGVyLnRvQ29kZShFeHByZXNpb25QYXJzZXIucGFyc2UoXHJcbiAgICAgICAgZXhwcmVzaW9uXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJpcyBkaXN0aW5jdCBmcm9tXFxiL2dpLCAnIDw+ICcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8hIS9naSwgJyAnKVxyXG4gICAgKSkucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5ibGFuY29cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCAnaGVscGVycy5mdW5zLmJsYW5jbygoJylcclxuICAgICAgICAucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5pbmZvcm1hZG9cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCAnaGVscGVycy5mdW5zLmluZm9ybWFkbygoJyk7XHJcbn1cclxuXHJcbi8vIHJlYS9ubyByZWEgKHkgc3VzIHZlcnNpb25lcyBfc3VwKSBkZWwgb3BlcmF0aXZvLCB0b21hZGFzIGRlIGxhcyBjYWNoZXMsIHBhcmEgbGEgZXN0cnVjdHVyYSBxdWUgc2UgbWFuZGEgYWwgZGlzcG9zaXRpdm8uXHJcbi8vIExhcyBjb25kaWNpb25lcyBkZSByZWEgc2UgY29tcGlsYW4gYSBqcyAoY29uZGljaW9uX2pzKSBwYXJhIGV2YWx1YXJsYXMgZW4gZWwgZGlzcG9zaXRpdm8uXHJcbmV4cG9ydCBmdW5jdGlvbiByZWFzTm9SZWFzRGVsT3BlcmF0aXZvKHRhYmxlQ29udGVudDogQXBwQmFja2VuZFsnY2FjaGVzJ11bJ3RhYmxlQ29udGVudCddLCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSB7XHJcbiAgICB2YXIgbm9SZWFzQ2FjaGU6IE5vUmVhW10gPSB0YWJsZUNvbnRlbnQubm9fcmVhIHx8IFtdO1xyXG4gICAgdmFyIG5vUmVhc1N1cENhY2hlOiBOb1JlYVN1cFtdID0gdGFibGVDb250ZW50Lm5vX3JlYV9zdXAgfHwgW107XHJcbiAgICB2YXIgcmVhc0NhY2hlOiBPbWl0PFJlYSwgJ2NvbmRpY2lvbl9qcyc+W10gPSB0YWJsZUNvbnRlbnQucmVhIHx8IFtdO1xyXG4gICAgdmFyIHJlYXNTdXBDYWNoZTogT21pdDxSZWFTdXAsICdjb25kaWNpb25fanMnPltdID0gdGFibGVDb250ZW50LnJlYV9zdXAgfHwgW107XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5vUmVhczogbm9SZWFzQ2FjaGUuZmlsdGVyKG5vUmVhID0+IG5vUmVhLm9wZXJhdGl2byA9PSBvcGVyYXRpdm8pLFxyXG4gICAgICAgIG5vUmVhc1N1cDogbm9SZWFzU3VwQ2FjaGUuZmlsdGVyKG5vUmVhU3VwID0+IG5vUmVhU3VwLm9wZXJhdGl2byA9PSBvcGVyYXRpdm8pLFxyXG4gICAgICAgIHJlYXM6IHJlYXNDYWNoZS5maWx0ZXIocmVhID0+IHJlYS5vcGVyYXRpdm8gPT0gb3BlcmF0aXZvKVxyXG4gICAgICAgICAgICAubWFwKChyZWEpOiBSZWEgPT4gKHsgLi4ucmVhLCBjb25kaWNpb25fanM6IGNvbXBpbGFyRXhwcmVzaW9uKHJlYS5jb25kaWNpb24pIH0pKSxcclxuICAgICAgICByZWFzU3VwOiByZWFzU3VwQ2FjaGUuZmlsdGVyKHJlYVN1cCA9PiByZWFTdXAub3BlcmF0aXZvID09IG9wZXJhdGl2bylcclxuICAgICAgICAgICAgLm1hcCgocmVhU3VwKTogUmVhU3VwID0+ICh7IC4uLnJlYVN1cCwgY29uZGljaW9uX2pzOiBjb21waWxhckV4cHJlc2lvbihyZWFTdXAuY29uZGljaW9uKSB9KSksXHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb21waWxhckV4cHJlc2lvbmVzKGNhc2lsbGVybzogQ2FzaWxsZXJvRGVBY2EpIHtcclxuICAgIGlmICghY2FzaWxsZXJvKSB7IHJldHVybiB9XHJcbiAgICBpZiAoY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcikge1xyXG4gICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPSBjb21waWxhckV4cHJlc2lvbihjYXNpbGxlcm8uZGF0YS5leHByZXNpb25faGFiaWxpdGFyKTtcclxuICAgIH1cclxuICAgIGlmIChjYXNpbGxlcm8uZGF0YS5lc3BlY2lhbD8uYXV0b2luZykge1xyXG4gICAgICAgIHZhciBwYXJ0ZXMgPSBjYXNpbGxlcm8uZGF0YS5lc3BlY2lhbD8uYXV0b2luZy5zcGxpdCgnPT4nKTtcclxuICAgICAgICBpZiAocGFydGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdmFyIHByZWNvbmRpY2lvbiA9IHBhcnRlc1swXTtcclxuICAgICAgICAgICAgdmFyIHZhbG9yID0gcGFydGVzLnNsaWNlKDEpLmpvaW4oJz0+Jyk7XHJcbiAgICAgICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanMgPSBgKCR7Y29tcGlsYXJFeHByZXNpb24ocHJlY29uZGljaW9uKX0pPygke2NvbXBpbGFyRXhwcmVzaW9uKHZhbG9yKX0pOm51bGxgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanMgPSBjb21waWxhckV4cHJlc2lvbihwYXJ0ZXNbMF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAodmFyIGNhc2lsbGVyb0ludGVybm8gb2YgY2FzaWxsZXJvLmNoaWxkcykgY29tcGlsYXJFeHByZXNpb25lcyhjYXNpbGxlcm9JbnRlcm5vKTtcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhckVuY3Vlc3RhVGVtID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkRW5jOiBJZEVuYywgYXJlYTogbnVtYmVyLCBkb21pbmlvOiBudW1iZXIsIHRhcmVhX2FjdHVhbDogSWRUYXJlYSkgPT4ge1xyXG4gICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgIElOU0VSVCBpbnRvIHRlbSAob3BlcmF0aXZvLCBlbmMsIGFyZWEsIGRvbWluaW8sIGhhYmlsaXRhZGEsIHRhcmVhX2FjdHVhbCkgdmFsdWVzICgkMSwgJDIsICQzLCAkNCwgJDUsICQ2KWAsXHJcbiAgICAgICAgW29wZXJhdGl2bywgaWRFbmMsIGFyZWEsIGRvbWluaW8sIHRydWUsIHRhcmVhX2FjdHVhbF0pLmV4ZWN1dGUoKTtcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSA9PiB7XHJcbiAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgaW5zZXJ0IGludG8gdGFyZWFzX3RlbSAob3BlcmF0aXZvLCBlbmMsIHRhcmVhKVxyXG4gICAgICAgICAgICBzZWxlY3QgdGEub3BlcmF0aXZvLCB0YS5lbmMsIHRhLnRhcmVhXHJcbiAgICAgICAgICAgIGZyb20gKHNlbGVjdCB0YS4qLCB0LmVuYyx0LmFyZWEgZnJvbSB0YXJlYXMgdGEsIHRlbSB0IHdoZXJlIHRhLm9wZXJhdGl2bz10Lm9wZXJhdGl2bykgdGEgXHJcbiAgICAgICAgICAgIHdoZXJlIHRhLm9wZXJhdGl2byA9ICQxIFxyXG4gICAgICAgICAgICAgICAgYW5kIG5vdCAodGEub3BlcmF0aXZvLCB0YS5lbmMsIHRhLnRhcmVhKSBpbiAoc2VsZWN0IG9wZXJhdGl2bywgZW5jLCB0YXJlYSBmcm9tIHRhcmVhc190ZW0pXHJcbiAgICAgICAgICAgIG9yZGVyIGJ5IDEsMywyO1xyXG4gICAgYCwgW29wZXJhdGl2b10pLmV4ZWN1dGUoKTtcclxufVxyXG5cclxuY29uc3QgYnVzY2FyRW5jdWVzdGFFblRlbSA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8YW55PikgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihgTm8gc2UgZW5jb250csOzIGxhIGVuY3Vlc3RhICR7cGFyYW1zLmVuY30gcGFyYSBlbCBvcGVyYXRpdm8gJHtwYXJhbXMub3BlcmF0aXZvfS4gJHtleHBlY3RlZChlcnIpLm1lc3NhZ2V9YClcclxuICAgIH1cclxuICAgIHJldHVybiB7IGNhc29UZW06IHJlc3VsdC5yb3cgfTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhc2FyRW5jdWVzdGFzQVByb2llKGNsaWVudDogQ2xpZW50KSB7XHJcbiAgICBsZXQgcGFyYW1ldHJvcyA9IChhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ICogZnJvbSBwYXJhbWV0cm9zIHdoZXJlIHVuaWNvX3JlZ2lzdHJvYCxcclxuICAgICAgICBbXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG4gICAgdmFyIHNlbGVjdCA9IGBzZWxlY3QgdC5vcGVyYXRpdm8sIHQuZW5jLCB0LnRhcmVhX2FjdHVhbCwgdHQudHNfZW50cmFkYVxyXG4gICAgICAgIGZyb20gdGFyZWFzX3RlbSB0dCBqb2luIHRlbSB0IHVzaW5nIChvcGVyYXRpdm8sZW5jKVxyXG4gICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2bz0kMSBhbmQgdHQudGFyZWE9ICQyIGFuZCAoJHtnZXREaWFzQVBhc2FyUXVlcnkoJ3R0Jyl9IDw9IDAgb3IgY29hbGVzY2UodHQuYWRlbGFudGFyLGZhbHNlKSkgYW5kIHR0LnRhcmVhID0gdC50YXJlYV9hY3R1YWxcclxuICAgIGA7XHJcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgIFVQREFURSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnVidcclxuICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdHQuZW5jID0gYXV4LmVuYyBhbmQgdHQudGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYycsICdmaW5jJ10pXHJcbiAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICAvL1RPRE8gYXNpZ25hciBlbiBwcm9jZXNhbWllbnRvXHJcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgIFVQREFURSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdHQuZW5jID0gYXV4LmVuYyBhbmQgdHQudGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYycsICdwcm9jJ10pXHJcbiAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgIHVwZGF0ZSB0ZW0gdFxyXG4gICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJ3Byb2MnXHJcbiAgICAgICAgICAgIGZyb20gKCR7c2VsZWN0fSkgYXV4XHJcbiAgICAgICAgICAgIHdoZXJlIHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdC5lbmMgPSBhdXguZW5jXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJ10pLmZldGNoQWxsKCk7XHJcbiAgICByZXR1cm4gJ29rJztcclxufVxyXG5cclxuLy8gVnVlbHZlIGxhIGVuY3Vlc3RhIGEgbGEgw7psdGltYSB0YXJlYSB2ZXJpZmljYWRhIGF1bnF1ZSBsYSB0YXJlYSBhY3R1YWwgeWEgZXN0w6kgYXNpZ25hZGEgKHBvciBlamVtcGxvIGxhIHF1ZSBzZSBhc2lnbmEgc29sYSBhbCBwYXNhciBhIGZpbiBkZSBjYW1wbykuXHJcbi8vIE5vIHNhbHRlYSBsb3MgdHJpZ2dlcnM6IHByaW1lcm8gZGVqYSBsYSB0YXJlYSBhY3R1YWwgc2luIGFzaWduYXIsIGRlc3B1w6lzIG11ZXZlIHRlbS50YXJlYV9hY3R1YWwgKGVsIHRyaWdnZXIgZ3VhcmRhIGxhIGZvdG8gZW4gaGlzdG9yaWFsX3RlbSlcclxuLy8geSByZWNpw6luIGVudG9uY2VzIGRlc3ZlcmlmaWNhLCBjb24gbG8gY3VhbCBkZXN2ZXJpZmljYXJfdGFyZWFfdHJnIHZlIGEgbGEgdGFyZWEgZGVzdmVyaWZpY2FkYSBjb21vIGxhIGFjdHVhbC5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuY3Vlc3RhRGVzdmVyaWZpY2FyRXhjZXBjaW9uYWwoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiB7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCBtb3Rpdm86IHN0cmluZyB9KTogUHJvbWlzZTwnb2snPiB7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIHsgb3BlcmF0aXZvLCBlbmMgfSA9IHBhcmFtcztcclxuICAgIHZhciBtb3Rpdm8gPSAocGFyYW1zLm1vdGl2byA/PyAnJykudHJpbSgpO1xyXG4gICAgaWYgKCFtb3Rpdm8pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hheSBxdWUgaW5kaWNhciBlbCBtb3Rpdm8gZGUgbGEgZGVzdmVyaWZpY2FjacOzbicpO1xyXG4gICAgfVxyXG4gICAgdmFyIGRlc3ZlcmlmaWNhYmxlID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGBzZWxlY3QgKiBmcm9tICgke3NxbERlc3ZlcmlmaWNhYmxlc30pIGQgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyYCxcclxuICAgICAgICBbb3BlcmF0aXZvLCBlbmNdXHJcbiAgICApLmZldGNoT25lUm93SWZFeGlzdHMoKSkucm93O1xyXG4gICAgaWYgKCFkZXN2ZXJpZmljYWJsZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgbGEgZW5jdWVzdGEgJHtlbmN9IG5vIHNlIHB1ZWRlIGRlc3ZlcmlmaWNhcjogc3Ugw7psdGltYSB0YXJlYSBubyBlc3TDoSB2ZXJpZmljYWRhIG8gbGEgdGFyZWEgYWN0dWFsIHlhIGVzdMOhIHZlcmlmaWNhZGFgKTtcclxuICAgIH1cclxuICAgIGlmICghZGVzdmVyaWZpY2FibGUuZXN0YWRvX2Rlc3Rpbm8pIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGhheSB1bmEgYWNjacOzbiBlbiBlc3RhZG9zX2FjY2lvbmVzIHF1ZSBlamVjdXRlIGVuY3Vlc3RhX25vX3ZlcmlmaWNhciBkZXNkZSBlbCBlc3RhZG8gZGUgbGEgdGFyZWEgdmVyaWZpY2FkYScpO1xyXG4gICAgfVxyXG4gICAgdmFyIHRhcmVhQWN0dWFsOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bGwgfSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICBgc2VsZWN0IGVzdGFkbywgYXNpZ25hZG8gZnJvbSB0YXJlYXNfdGVtIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM2AsXHJcbiAgICAgICAgW29wZXJhdGl2bywgZW5jLCBkZXN2ZXJpZmljYWJsZS50YXJlYV9hY3R1YWxdXHJcbiAgICApLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICBzZXQgZXN0YWRvID0gJzBEJywgYXNpZ25hZG8gPSBudWxsXHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW29wZXJhdGl2bywgZW5jLCBkZXN2ZXJpZmljYWJsZS50YXJlYV9hY3R1YWxdXHJcbiAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDRcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW29wZXJhdGl2bywgZW5jLCBkZXN2ZXJpZmljYWJsZS50YXJlYV9hY3R1YWwsIGRlc3ZlcmlmaWNhYmxlLnRhcmVhXVxyXG4gICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgLy8gbGEgZm90byBkZSBoaXN0b3JpYWxfdGVtIHNlIHNhY8OzIGNvbiBsYSB0YXJlYSB5YSBzaW4gYXNpZ25hcjogc2UgcmVzdGl0dXllIGxvIHF1ZSB0ZW7DrWEgeSBzZSBkZWphIHF1acOpbiBsbyBoaXpvIHkgcG9yIHF1w6lcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGB1cGRhdGUgaGlzdG9yaWFsX3RlbVxyXG4gICAgICAgICAgICBzZXQgZXN0YWRvID0gJDQsIGFzaWduYWRvID0gJDUsIHVzdWFyaW9fYWNjaW9uID0gJDYsIG1vdGl2byA9ICQ3XHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgYW5kIG9yZGVuID0gKHNlbGVjdCBtYXgob3JkZW4pIGZyb20gaGlzdG9yaWFsX3RlbSB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIpXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIGRlc3ZlcmlmaWNhYmxlLnRhcmVhX2FjdHVhbCwgdGFyZWFBY3R1YWwuZXN0YWRvLCB0YXJlYUFjdHVhbC5hc2lnbmFkbywgY29udGV4dC51c2VyLnVzdWFyaW8sIG1vdGl2b11cclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV9ub192ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHsgb3BlcmF0aXZvLCB0YXJlYTogZGVzdmVyaWZpY2FibGUudGFyZWEsIGVuYyB9KTtcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICBzZXQgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIGRlc3ZlcmlmaWNhYmxlLnRhcmVhLCBkZXN2ZXJpZmljYWJsZS5lc3RhZG9fZGVzdGlub11cclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgIHJldHVybiAnb2snO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgUHJvY2VkdXJlc0RtRW5jdTogUHJvY2VkdXJlRGVmW10gPSBbXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnb3BlcmF0aXZvX2VzdHJ1Y3R1cmFfY29tcGxldGEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkcGVyX2xvZ3VlYWRvX3RhYmxldCcsIHR5cGVOYW1lOiAndGV4dCcsIGRlZmF1bHRWYWx1ZTpudWxsIH0sXHJcblxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6J2Rlc3BsZWdhckZvcm11bGFyaW8nLFxyXG4gICAgICAgIHVubG9nZ2VkOiB0cnVlLCBcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e29wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldDogc3RyaW5nfG51bGx9Pil7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgY2FzaWxsZXJvc19qZXJhcnF1aXphZG9zKCQxKSBhcyBmb3JtdWxhcmlvcywgXHJcbiAgICAgICAgICAgICAgICAgICAgJHtqc29ubyhgc2VsZWN0IHVuaWRhZF9hbmFsaXNpcywgcGFkcmUsIHBrX2FncmVnYWRhLCAne30nOjpqc29uYiBhcyBoaWphcyBmcm9tIHVuaWRhZF9hbmFsaXNpcyB3aGVyZSBvcGVyYXRpdm8gPSAkMmAsICd1bmlkYWRfYW5hbGlzaXMnKX0gYXMgdW5pZGFkZXNfYW5hbGlzaXNcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm8sIHBhcmFtZXRlcnMub3BlcmF0aXZvXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGxpa2VBcihyZXN1bHQucm93LmZvcm11bGFyaW9zKS5mb3JFYWNoKGYgPT4gY29tcGlsYXJFeHByZXNpb25lcyhmKSk7XHJcbiAgICAgICAgICAgIC8vIEhlcm1hbm9zIHNvbiBsb3MgZm9ybXVsYXJpb3MgcXVlIGVzdMOhbiBpbXBsYW50YWRvcyBlbiBvdHJvIGZvcm11bGFyaW8gZGUgbGEgbWlzbWEgVUEuIFBvciBlamVtcGxvIGVsIEExIGVuIGVsIFMxXHJcbiAgICAgICAgICAgIHZhciByZXN1bHRIZXJtYW5vcyA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuc2VsZWN0IG8uaWRfY2FzaWxsZXJvIGFzIGlkX2Zvcm11bGFyaW8sIG8udW5pZGFkX2FuYWxpc2lzLCAnQkZfJ3x8by5jYXNpbGxlcm8gYm90b24sIGJmLmNhc2lsbGVybywgYmYucGFkcmUsIGZwLmNhc2lsbGVybywgZnAudW5pZGFkX2FuYWxpc2lzXHJcbiAgZnJvbSBjYXNpbGxlcm9zIG8gbGVmdCBqb2luIGNhc2lsbGVyb3MgYmZcclxuICAgIG9uIGJmLnRpcG9jPSdCRidcclxuXHRhbmQgYmYuY2FzaWxsZXJvID0gJ0JGXyd8fG8uY2FzaWxsZXJvXHJcblx0YW5kIGJmLm9wZXJhdGl2byA9IG8ub3BlcmF0aXZvXHJcblx0bGVmdCBqb2luIGNhc2lsbGVyb3MgZnBcclxuXHQgIG9uIGZwLmlkX2Nhc2lsbGVybyA9IGJmLnBhZHJlXHJcblx0ICBhbmQgZnAub3BlcmF0aXZvID0gYmYub3BlcmF0aXZvXHJcbiAgd2hlcmUgby50aXBvYyA9ICdGJ1xyXG4gICAgYW5kIG8udW5pZGFkX2FuYWxpc2lzID0gZnAudW5pZGFkX2FuYWxpc2lzXHJcblx0YW5kIG8ub3BlcmF0aXZvID0gJDFgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRlcnMub3BlcmF0aXZvXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHJlc3VsdEhlcm1hbm9zLnJvd3MuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnJvdy5mb3JtdWxhcmlvc1tyb3cuaWRfZm9ybXVsYXJpb10uZGF0YS5oZXJtYW5vID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGFyVUEodWE6IFVuaWRhZEFuYWxpc2lzLCBpZFVhOiBJZFVuaWRhZEFuYWxpc2lzLCB1QXM6IHsgW2sgaW4gSWRVbmlkYWRBbmFsaXNpc106IFVuaWRhZEFuYWxpc2lzIH0pIHtcclxuICAgICAgICAgICAgICAgIGlmICh1YS5wYWRyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVBc1t1YS5wYWRyZV0uaGlqYXNbaWRVYV0gPSB1YTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdWEucHJpbmNpcGFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaWtlQXIocmVzdWx0LnJvdy51bmlkYWRlc19hbmFsaXNpcykuZm9yRWFjaCgodWEsIGlkVWEpID0+XHJcbiAgICAgICAgICAgICAgICBjb21wbGV0YXJVQSh1YSwgaWRVYSBhcyBJZFVuaWRhZEFuYWxpc2lzLCByZXN1bHQucm93LnVuaWRhZGVzX2FuYWxpc2lzKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIHZhciB7XHJcbiAgICAgICAgICAgICAgICBjb25fcmVhX2hvZ2FyOiBjb25SZWFIb2dhcixcclxuICAgICAgICAgICAgICAgIGNvbmZpZ19zb3J0ZW86IGNvbmZpZ1NvcnRlbyxcclxuICAgICAgICAgICAgICAgIGhhYmlsaXRhY2lvbl9ib3Rvbl9mb3JtdWxhcmlvOiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgIH0gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGNvbmZpZ19zb3J0ZW8sIGNvbl9yZWFfaG9nYXIsIGhhYmlsaXRhY2lvbl9ib3Rvbl9mb3JtdWxhcmlvLCBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDFcclxuICAgICAgICAgICAgYCwgW3BhcmFtZXRlcnMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG5cclxuICAgICAgICAgICAgdmFyIHNlbWFuYXMgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0ICBcclxuICAgICAgICAgICAgICAgICAgICAke2pzb25vKGBzZWxlY3QgKiBmcm9tIHNlbWFuYXMgd2hlcmUgb3BlcmF0aXZvID0gJDFgLCAnc2VtYW5hJyl9IGFzIHNlbWFuYXNcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKSkucm93LnNlbWFuYXM7XHJcbiAgICAgICAgICAgIGxldCBjb21waWxhckV4cHJlc2lvbmVzRG9taW5pb3MgPSAoZXhwcmVzaW9uZXNEb21pbmlvOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoZXhwcmVzaW9uZXNEb21pbmlvKVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGV4cHIsIGRvbWluaW8pID0+ICh7IGRvbWluaW8sIGV4cHI6IGNvbXBpbGFyRXhwcmVzaW9uKGV4cHIuZXhwcikgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnBsYWluKCk7XHJcbiAgICAgICAgICAgIGlmIChjb25maWdTb3J0ZW8pIHtcclxuICAgICAgICAgICAgICAgIGxpa2VBcihjb25maWdTb3J0ZW8pLmZvckVhY2goKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmV4cHJfaW5jb21wbGV0aXR1ZF9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmV4cHJfaW5jb21wbGV0aXR1ZClcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmZpbHRyb19qcyA9IGNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmZpbHRybylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbykge1xyXG4gICAgICAgICAgICAgICAgbGlrZUFyKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbykuZm9yRWFjaCgoZm9ybSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm0uZXhwcl9oYWJpbGl0YXJfYm90b25fanMgPSBjb21waWxhckV4cHJlc2lvbihmb3JtLmV4cHJfaGFiaWxpdGFyX2JvdG9uKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdFRhcmVhID0gYXdhaXQgZ2V0RGVmYXVsdFRhcmVhKGNvbnRleHQsIHBhcmFtZXRlcnMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgdmFyIGRlZmF1bHRJbmZvcm1hY2lvbkhkciA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgIFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICAgICAnZG9taW5pbycgICAgICAgLCAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKERFRkFVTFRfRE9NSU5JTyl9LFxyXG4gICAgICAgICAgICAgICAgICAgICdub21jYWxsZScgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdzZWN0b3InICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdlZGlmaWNpbycgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdlbnRyYWRhJyAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICducm9jYXRhc3RyYWwnICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdwaXNvJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdkZXBhcnRhbWVudG8nICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdoYWJpdGFjaW9uJyAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjYXNhJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdwcmlvcmlkYWQnICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdvYnNlcnZhY2lvbmVzJyAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjaXRhJyAgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdjYXJnYScgICAgICAgICAsIG51bGwgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICdzZW1hbmEnICAgICAgICAsIG51bGxcclxuICAgICAgICAgICAgICAgICkgYXMgdGVtLFxyXG4gICAgICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICd0YXJlYScsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoZGVmYXVsdFRhcmVhLnRhcmVhKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ2ZlY2hhX2FzaWduYWNpb24nLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICdhc2lnbmFkbycsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwocGFyYW1ldGVycy5pZHBlcl9sb2d1ZWFkb190YWJsZXQgfHwgY29udGV4dC51c2VyLmlkcGVyKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ21haW5fZm9ybScsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoZGVmYXVsdFRhcmVhLm1haW5fZm9ybSl9XHJcbiAgICAgICAgICAgICAgICApIGFzIHRhcmVhXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogYmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmEsXHJcbiAgICAgICAgICAgICAgICAuLi5yZXN1bHQucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGNvblJlYUhvZ2FyLFxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvLFxyXG4gICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgLi4ucmVhc05vUmVhc0RlbE9wZXJhdGl2byhiZS5jYWNoZXMudGFibGVDb250ZW50LCBwYXJhbWV0ZXJzLm9wZXJhdGl2byksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0SW5mb3JtYWNpb25IZHIsXHJcbiAgICAgICAgICAgICAgICB1YVBwYWw6IHVuaWRhZF9hbmFsaXNpcyxcclxuICAgICAgICAgICAgICAgIHNlbWFuYXMsXHJcbiAgICAgICAgICAgICAgICBwa0FncmVnYWRhVWFQcGFsOiBwa19hZ3JlZ2FkYVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZ2VuZXJhcl9mb3JtdWxhcmlvcycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdhbm5pbycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIHJlZmVyZW5jZXM6ICdhbm5pbycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbWVzJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgcmVmZXJlbmNlczogJ21lcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbG90ZScsIHR5cGVOYW1lOiAnaW50ZWdlcicsIHJlZmVyZW5jZXM6ICdsb3RlcycgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7YW5uaW86bnVtYmVyLCBtZXM6bnVtYmVyLCBsb3RlOm51bWJlcn0+KXtcclxuICAgICAgICAgICAgdmFyIGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgbGV0IHVhUHBhbCA9IGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0UHJlZ3VudGFzID0gYXdhaXQgYmUucHJvY2VkdXJlLnByZWd1bnRhc191YV90cmFlci5jb3JlRnVuY3Rpb24oY29udGV4dCwgdWFQcGFsKVxyXG4gICAgICAgICAgICB2YXIgY29udGVuZWRvclZhY2lvOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICAgICAgICAgIHJlc3VsdFByZWd1bnRhcy5mb3JFYWNoKGZ1bmN0aW9uIChkZWZQcmVndW50YTphbnkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpb1tkZWZQcmVndW50YS52YXJfbmFtZV0gPSBkZWZQcmVndW50YS51bmlkYWRfYW5hbGlzaXMgPyBbXSA6IG51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8uYW5uaW8gPSBwYXJhbWV0ZXJzLmFubmlvO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8ubWVzID0gcGFyYW1ldGVycy5tZXM7XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5sb3RlID0gcGFyYW1ldGVycy5sb3RlO1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBkZWJlX2hhYmVyLmlkX2Nhc28sIHMgYXMgaWRcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgbG90ZSwgYXJtYXJfaWQoYW5uaW8sIG1lcywgbG90ZSwgcykgYXMgaWRfY2Fzbywgc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgYW5uaW8sbWVzLGxvdGUsIGNhbnRfY3VlcyBmcm9tIGxvdGVzIHdoZXJlIChhbm5pbyxtZXMsbG90ZSk9KCQyLCQzLCQ0KSkgciwgbGF0ZXJhbCBnZW5lcmF0ZV9zZXJpZXMoMSxjYW50X2N1ZXMpIHNcclxuICAgICAgICAgICAgICAgICAgICApIGRlYmVfaGFiZXIgbGVmdCBqb2luIGRlZmdlbiBoYXkgb24gaGF5LmlkX2Nhc28gPSBkZWJlX2hhYmVyLmlkX2Nhc28gYW5kIGhheS5vcGVyYXRpdm89JDFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBoYXkuaWRfY2FzbyBpcyBudWxsYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIHBhcmFtZXRlcnMuYW5uaW8sIHBhcmFtZXRlcnMubWVzLCBwYXJhbWV0ZXJzLmxvdGVdXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHsgb3BlcmF0aXZvOiBPUEVSQVRJVk8gfTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAocmVzdWx0LnJvd0NvdW50IHx8IDApOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmcocGFyYW1zLCB7IGlkX2Nhc286IHJlc3VsdC5yb3dzW2ldLmlkX2Nhc28sIGRhdG9zX2Nhc286IGNoYW5naW5nKGNvbnRlbmVkb3JWYWNpbywgeyBpZDogcmVzdWx0LnJvd3NbaV0uaWQgfSkgfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyBhZ3JlZ2FkYXM6IHJlc3VsdC5yb3dDb3VudCB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICd1cGxvYWRfZmlsZScsXHJcbiAgICAgICAgcHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZF9hZGp1bnRvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdub21icmUnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBmaWxlczp7Y291bnQ6MX0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtpZF9hZGp1bnRvPzpudW1iZXIsIG5vbWJyZT86c3RyaW5nfT4sIGZpbGVzKXtcclxuICAgICAgICAgICAgbGV0IGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGxldCBjbGllbnQ9Y29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQuaW5mb3JtUHJvZ3Jlc3Moe21lc3NhZ2U6YmUubWVzc2FnZXMuZmlsZVVwbG9hZGVkfSk7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBleGlzdGVcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBmaWxlc1swXVxyXG4gICAgICAgICAgICBsZXQgZXh0ID0gUGF0aC5leHRuYW1lKGZpbGUucGF0aCkuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICBsZXQgb3JpZ2luYWxGaWxlbmFtZSA9IGZpbGUub3JpZ2luYWxGaWxlbmFtZS5zbGljZSgwLCAtKGV4dC5sZW5ndGggKyAxKSk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlbmFtZSA9IHBhcmFtZXRlcnMubm9tYnJlIHx8IG9yaWdpbmFsRmlsZW5hbWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdQYXRoID0gJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJztcclxuICAgICAgICAgICAgdmFyIGNyZWF0ZVJlc3BvbnNlID0gZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2UoYWRqdW50b1JvdzphbnkpIHtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0xhIHN1YmlkYSBzZSByZWFsaXrDsyBjb3JyZWN0YW1lbnRlICh1cGRhdGUpJyxcclxuICAgICAgICAgICAgICAgICAgICBub21icmU6IGFkanVudG9Sb3cubm9tYnJlLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vbWJyZV9vcmlnaW5hbDogYWRqdW50b1Jvdy5ub21icmVfb3JpZ2luYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgZXh0OiBhZGp1bnRvUm93LmV4dCxcclxuICAgICAgICAgICAgICAgICAgICBmZWNoYTogYWRqdW50b1Jvdy5mZWNoYSxcclxuICAgICAgICAgICAgICAgICAgICBob3JhOiBhZGp1bnRvUm93LmhvcmEsXHJcbiAgICAgICAgICAgICAgICAgICAgaWRfYWRqdW50bzogYWRqdW50b1Jvdy5pZF9hZGp1bnRvXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHZhciBtb3ZlRmlsZSA9IGZ1bmN0aW9uIG1vdmVGaWxlKGZpbGUsIGlkX2FkanVudG8sIGV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICBmcy5tb3ZlKGZpbGUucGF0aCwgbmV3UGF0aCArIGlkX2FkanVudG8gKyAnLicgKyBleHRlbnNpb24sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmlkX2FkanVudG8pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYHVwZGF0ZSBhZGp1bnRvcyBzZXQgbm9tYnJlPSAkMSxub21icmVfb3JpZ2luYWwgPSAkMiwgZXh0ID0gJDMsIHJ1dGEgPSBjb25jYXQoJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJywkNDo6dGV4dCwnLicsJDM6OnRleHQpLCBmZWNoYSA9IG5vdygpLCBob3JhID0gZGF0ZV90cnVuYygnc2Vjb25kcycsY3VycmVudF90aW1lc3RhbXAtY3VycmVudF9kYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBpZF9hZGp1bnRvID0gJDQgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZW5hbWUsIG9yaWdpbmFsRmlsZW5hbWUsIGV4dCwgcGFyYW1ldGVycy5pZF9hZGp1bnRvXVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlc3BvbnNlKHJlc3VsdC5yb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0YWRvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUsIHJlc3VsdGFkby5pZF9hZGp1bnRvLCByZXN1bHRhZG8uZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkb1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYGluc2VydCBpbnRvIGFkanVudG9zIChub21icmUsIG5vbWJyZV9vcmlnaW5hbCwgZXh0LCBmZWNoYSwgaG9yYSkgdmFsdWVzICgkMSwkMiwkMyxub3coKSwgZGF0ZV90cnVuYygnc2Vjb25kcycsY3VycmVudF90aW1lc3RhbXAtY3VycmVudF9kYXRlKSkgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZW5hbWUsIG9yaWdpbmFsRmlsZW5hbWUsIGV4dF1cclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgdXBkYXRlIGFkanVudG9zIHNldCBydXRhID0gY29uY2F0KCdsb2NhbC1hdHRhY2htZW50cy9maWxlLScsaWRfYWRqdW50bzo6dGV4dCwnLicsZXh0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaWRfYWRqdW50byA9ICQxIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQucm93LmlkX2FkanVudG9dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZXNwb25zZShyZXN1bHQucm93KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHRhZG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUsIHJlc3VsdGFkby5pZF9hZGp1bnRvLCByZXN1bHRhZG8uZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjYXNvX2d1YXJkYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkX2Nhc28nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2RhdG9zX2Nhc28nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgZGVmaW5lZEluOiAnZG1lbmN1JyxcclxuICAgICAgICAvL0B0cy1pZ25vcmUgZXNwZWNpZmljbyBlbCB0aXBvIGRlIGxvcyBwYXLDoW1ldHJvc1xyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IHtcclxuICAgICAgICAgICAgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgaWRfY2Fzbzogc3RyaW5nLFxyXG4gICAgICAgICAgICBkYXRvc19jYXNvOiBBbnlPYmplY3RcclxuICAgICAgICB9LCBuZXdDbGllbnQ6IENsaWVudCkge1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIHBhcmFtZXRlcnMub3BlcmF0aXZvKSk7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnQgPSBuZXdDbGllbnQgfHwgY29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIHZhciBkYXRvc19qc29uID0gcGFyYW1ldGVycy5kYXRvc19jYXNvO1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgdGFibGVTdHJ1Y3R1cmVzX2FwcDogVGFibGVEZWZpbml0aW9ucyA9IGJlLnRhYmxlU3RydWN0dXJlcztcclxuICAgICAgICAgICAgdmFyIGNvbnRleHRFc3RydWN0dXJhID0gY29udGV4dFBhcmFFc3RydWN0dXJhKGJlKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzdHJ1Y3RfZG1lbmN1ID0gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIHVuaWRhZF9hbmFsaXNpcyk7XHJcbiAgICAgICAgICAgIGRhdG9zX2pzb25bJ29wZXJhdGl2byddID0gcGFyYW1ldGVycy5vcGVyYXRpdm87XHJcblxyXG4gICAgICAgICAgICBkYXRvc19qc29uW3BrX2FncmVnYWRhXSA9IHBhcmFtZXRlcnMuaWRfY2FzbztcclxuICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGFyX3VsdF9wa19lbl9hcnIodWx0X3BrOmFueSwgdWFfYXJyOmFueVtdKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29uX3BrX2NvbXBsZXRhID0gdWFfYXJyO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVhX2FyciAmJiB1YV9hcnIubGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25fcGtfY29tcGxldGEgPSBjb25fcGtfY29tcGxldGEubWFwKCh1bmFfdWEsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5hX3VhW3VsdF9wa10gPSBpICsgMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5hX3VhO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbl9wa19jb21wbGV0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlY29ycmVyX2RhdG9zX2FncmVnYW5kb19wa3MoZGF0b3NqOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleU5hbWUgaW4gZGF0b3NqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdG9LID0gZGF0b3NqW2tleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRvSyBpbnN0YW5jZW9mIEFycmF5ICYmIGRhdG9LLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwayA9IHRhYmxlU3RydWN0dXJlc19hcHBba2V5TmFtZV0oY29udGV4dEVzdHJ1Y3R1cmEpLnByaW1hcnlLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bHRfcGsgPSBwa1tway5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0b0sgPSBjb21wbGV0YXJfdWx0X3BrX2VuX2Fycih1bHRfcGssIGRhdG9LKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0b0suZm9yRWFjaCgoZWxlbUk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbUkgPSByZWNvcnJlcl9kYXRvc19hZ3JlZ2FuZG9fcGtzKGVsZW1JKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlOYW1lLnN0YXJ0c1dpdGgoJyQnKSB8fCBrZXlOYW1lLnN0YXJ0c1dpdGgoJ18nKSB8fCBrZXlOYW1lID09ICdudWxsJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGF0b3NqW2tleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvc2o7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGF0b3NfanNvbiA9IHJlY29ycmVyX2RhdG9zX2FncmVnYW5kb19wa3MoZGF0b3NfanNvbik7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLmNvZFJlYTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kTm9SZWE7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLnJlc3VtZW5Fc3RhZG87XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLmNvZFJlYVN1cDtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kTm9SZWFTdXA7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLnJlc3VtZW5Fc3RhZG9TdXA7XHJcblxyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoZGF0b3NfanNvbikubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHF1ZXJpZXMgPSBzcWxUb29scy5zdHJ1Y3R1cmVkRGF0YS5zcWxXcml0ZShkYXRvc19qc29uLCBzdHJ1Y3RfZG1lbmN1KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBxdWVyaWVzLnJlZHVjZShmdW5jdGlvbiAocHJvbWlzZTogUHJvbWlzZTxhbnk+LCBxdWVyeTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnQucXVlcnkocXVlcnkpLmV4ZWN1dGUoKS50aGVuKGZ1bmN0aW9uIChfcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSkudGhlbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwib2tcIjtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnI6IEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImNhc29fZ3VhcmRhciBFTlRSQSBFTiBFTCBDQVRDSDogXCIsIGV4cGVjdGVkKGVycikpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICd2YWNpbyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIC8vIHZ1ZWx2ZSBhIHBhc2FyIGEgbGFzIHRhYmxhcyBsYSBlbmN1ZXN0YSBndWFyZGFkYSBlbiBsYSBURU0gY3V5byBwYXNlIGZhbGzDsyAocG9yIGVqZW1wbG8gcG9yIHNlc2nDs24gdmVuY2lkYSBhbCBzaW5jcm9uaXphcilcclxuICAgICAgICBhY3Rpb246ICdwYXNlX3RhYmxhX3JlaW50ZW50YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IGpzb25fZW5jdWVzdGEgfSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QganNvbl9lbmN1ZXN0YSBmcm9tIHRlbSB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG4gICAgICAgICAgICBpZiAoIWpzb25fZW5jdWVzdGEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgbWVzc2FnZTogJ2xhIGVuY3Vlc3RhIG5vIHRpZW5lIHJlc3B1ZXN0YXMgZ3VhcmRhZGFzIGVuIGxhIFRFTScgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0YWRvID0gYXdhaXQgcmVnaXN0cmFyUGFzZVRhYmxhKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIGpzb25fZW5jdWVzdGEsICdwYXNlX3RhYmxhX3JlaW50ZW50YXInKTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgb2s6ICFyZXN1bHRhZG8uaW5jbHVkZXMoJ3Bhc2VfdGFibGFfcmVpbnRlbnRhci4nKSwgbWVzc2FnZTogcmVzdWx0YWRvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjYXNvX3RyYWVyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIC8ve25hbWU6J2Zvcm11bGFyaW8nICAgICwgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZF9jYXNvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdnb1RvRW5jJyxcclxuICAgICAgICBkZWZpbmVkSW46ICdkbWVuY3UnLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBpZF9jYXNvOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbWV0ZXJzLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50ID0gY29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIHZhciBzdHJ1Y3RfZG1lbmN1ID0gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIHVuaWRhZF9hbmFsaXNpcyk7XHJcbiAgICAgICAgICAgIHZhciBzcWwgPSBzcWxUb29scy5zdHJ1Y3R1cmVkRGF0YS5zcWxSZWFkKHsgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2bywgW3BrX2FncmVnYWRhXTogcGFyYW1ldGVycy5pZF9jYXNvIH0sIHN0cnVjdF9kbWVuY3UpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnF1ZXJ5KHNxbCkuZmV0Y2hVbmlxdWVWYWx1ZSgpO1xyXG4gICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgaWRfY2FzbzogcGFyYW1ldGVycy5pZF9jYXNvLFxyXG4gICAgICAgICAgICAgICAgZGF0b3NfY2FzbzogcmVzdWx0LnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgLy9mb3JtdWxhcmlvOiBmb3JtUHJpbmNpcGFsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjYXNvX3RyYWVyX29fY3JlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkX2Nhc28nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazogJ2dvVG9FbmMnLFxyXG4gICAgICAgIC8vIGJpdGFjb3JhOnthbHdheXM6dHJ1ZX0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBpZF9jYXNvOiBzdHJpbmd9Pil7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3RyYWVyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBqc29uID0gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3ByZXBhcmFyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX2d1YXJkYXInXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgY2hhbmdpbmcocGFyYW1ldGVycywgeyBkYXRvc19jYXNvOiBqc29uIH0pKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBiZS5wcm9jZWR1cmVbJ2Nhc29fdHJhZXInXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ3Bhc2FyX2pzb24ydWEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KXtcclxuICAgICAgICAgICAgLyogR0VORVJBTElaQVI6ICovXHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIC8qIEZJTi1HRU5FUkFMSVpBUjogKi9cclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTykpO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0TWFpbiA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBTRUxFQ1QgKiBmcm9tICR7YmUuZGIucXVvdGVJZGVudCh1bmlkYWRfYW5hbGlzaXMpfSBMSU1JVCAxYCkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYgKChyZXN1bHRNYWluLnJvd0NvdW50IHx8IDApID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0hBWSBEQVRPUycsIHJlc3VsdE1haW4ucm93cylcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSEFZIERBVE9TLiBOTyBTRSBQVUVERSBJTklDSUFSIEVMIFBBU0FKRScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRKc29uID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgU0VMRUNUIG9wZXJhdGl2bywgZW5jIGlkX2Nhc28sIGpzb25fZW5jdWVzdGEgZGF0b3NfY2FzbyBmcm9tIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBXSEVSRSBvcGVyYXRpdm89JDEgYW5kIHJlc3VtZW5fZXN0YWRvIGlzIGRpc3RpbmN0IGZyb20gJ3ZhY2lvJyBhbmQganNvbl9lbmN1ZXN0YSBpcyBub3QgbnVsbCBcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBlbmMgYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgdmFyIHByb2NlZHVyZUd1YXJkYXIgPSBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyO1xyXG4gICAgICAgICAgICBpZiAocHJvY2VkdXJlR3VhcmRhci5kZWZpbmVkSW4gIT0gJ2RtZW5jdScpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaGF5IHF1ZSBzb2JyZWVzY3JpYmlyIGNhc29fZ3VhcmRhcicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXN1bHRKc29uLnJvd3MubWFwKGFzeW5jIGZ1bmN0aW9uIChyb3cpIHtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgY2FzbyAke3Jvdy5pZF9jYXNvfTogYDtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUuaW5UcmFuc2FjdGlvbihudWxsLCBhc3luYyBmdW5jdGlvbiAoX2NsaWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gKz0gYXdhaXQgcHJvY2VkdXJlR3VhcmRhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcm93KTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyTWVzc2FnZSA9IHJlc3VsdGFkbyArIFwianNvbjJ1YSBlcnJvci4gXCIgKyBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1lc3NhZ2UsIGVycm9yKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdGFkby5pbmNsdWRlcygnb2snKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB7IGRhdG9zX2Nhc28sIGlkX2Nhc28sIG9wZXJhdGl2byB9ID0gYXdhaXQgYmUucHJvY2VkdXJlLmNhc29fdHJhZXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHsgb3BlcmF0aXZvOiByb3cub3BlcmF0aXZvLCBpZF9jYXNvOiByb3cuaWRfY2FzbyB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2ZXJRdWVHcmFibyA9IHsgZGF0b3NfY2FzbywgaWRfY2Fzbywgb3BlcmF0aXZvIH1cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNjcmVwYW5jZXMuc2hvd0FuZFRocm93KHZlclF1ZUdyYWJvLCByb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IodmVyUXVlR3JhYm8sIHJvdywgZXhwZWN0ZWQoZXJyKSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvO1xyXG4gICAgICAgICAgICB9KSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9mb3Jwa3JhaXpfY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAncGtfcmFpel92YWx1ZScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcInRhcmVhc1wiIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7b3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgcGtfcmFpel92YWx1ZTogc3RyaW5nLCB0YXJlYTogc3RyaW5nfT4pe1xyXG4gICAgICAgICAgICBjb25zdCBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBjb25zdCB7b3BlcmF0aXZvLHBrX3JhaXpfdmFsdWUsIHRhcmVhfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIGNvbnN0IHtwZXJtaXRlX2JvcnJhcl91YTogdGFyZWFQZXJtaXRlQm9ycmFyVUEsIG1haW5fZm9ybX0gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHBlcm1pdGVfYm9ycmFyX3VhLCBtYWluX2Zvcm0gXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXMgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgdGFyZWE9JDJcclxuICAgICAgICAgICAgYCwgW29wZXJhdGl2bywgdGFyZWFdKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbiAgICAgICAgICAgIGNvbnN0IHt1bmlkYWRfYW5hbGlzaXN9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbWV0ZXJzLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICBjb25zdCBjb25kdml2PSBgIHQub3BlcmF0aXZvPSAkMSBhbmQgdC5lbmMgPSQyYDtcclxuICAgICAgICAgICAgY29uc3QgdXN1YXJpb1B1ZWRlUHJvY2VzYXJFbmN1ZXN0YXMgPSBjb250ZXh0LnB1ZWRlPy5lbmN1ZXN0YXM/LnByb2Nlc2FyIHx8IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBzb2xvTGVjdHVyYSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgY291bnQoKilcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gam9pbiB0ZW0gdXNpbmcob3BlcmF0aXZvLCBlbmMpIGpvaW4gZXN0YWRvcyB1c2luZyAob3BlcmF0aXZvLCBlc3RhZG8pIC0tcGsgZXN0YWRvIHkgdGVtIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJnYWRvX2RtIGlzIG5vdCBudWxsIG9yIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3QgcGVybWl0ZV9lZGl0YXJfZW5jdWVzdGEgYW5kIGFzaWduYWRvIDw+ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoY29udGV4dC51c2VyLmlkcGVyKX0gb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEgPSB0YXJlYV9hY3R1YWwgYW5kIHRhcmVhX2FjdHVhbCA9ICdwcm9jJyBhbmQgJDMgb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhID0gdGFyZWFfYWN0dWFsIGFuZCB0YXJlYV9hY3R1YWwgPSAncHJvYycgYW5kIGVzdGFkbyA9ICdWJ1xyXG4gICAgICAgICAgICApYCwgW29wZXJhdGl2bywgcGtfcmFpel92YWx1ZSwgIXVzdWFyaW9QdWVkZVByb2Nlc2FyRW5jdWVzdGFzXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZSA+IDA7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlR2VuZXJhck11ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIG9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIHZhciB7IHJvdyB9ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoZ2V0SGRyUXVlcnkoY29uZHZpdiwgY29udGV4dCwgdW5pZGFkX2FuYWxpc2lzLCBwZXJtaXRlR2VuZXJhck11ZXN0cmEsIGNvbnRleHQudXNlci5pZHBlciksIFtvcGVyYXRpdm8sIHBrX3JhaXpfdmFsdWVdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByb3cuaW5mb3JtYWNpb25IZHJbcGtfcmFpel92YWx1ZV0udGFyZWEgPSB7XHJcbiAgICAgICAgICAgICAgICB0YXJlYSxcclxuICAgICAgICAgICAgICAgIG1haW5fZm9ybVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4ucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmEsXHJcbiAgICAgICAgICAgICAgICBpZHBlcjogY29udGV4dC51c2VyLmlkcGVyLFxyXG4gICAgICAgICAgICAgICAgY2FyZ2FzOiBsaWtlQXIuY3JlYXRlSW5kZXgoY2FyZ2FzSGRyQ29uRmVjaGFEbXkocm93LmNhcmdhcyksICdjYXJnYScpLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wRXN0cnVjdHVyYTogYmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmEsXHJcbiAgICAgICAgICAgICAgICBwZXJtaXRlQm9ycmFyRWxlbWVudG9zVUE6ICEhKHRhcmVhUGVybWl0ZUJvcnJhclVBICYmIGdldE1vZG9CeVBvbGljeShiZSkgPT09ICdHQUJJTkVURScgJiYgY29udGV4dC5wdWVkZT8uZW5jdWVzdGFzPy5ib3JyYXJfdWEpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAncGVyc2lzdGVudGVzJywgdHlwZU5hbWU6ICdqc29uYicgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXM6IEFueU9iamVjdCB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIHBlcnNpc3RlbnRlcyB9ID0gcGFyYW1ldGVycztcclxuICAgICAgICAgICAgY29uc3QgVUFfUFJJTkNJUEFMID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBvcGVyYXRpdm8pKS51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3B1ZXN0YXMgPSBwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdIHx8IHt9O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkRW5jIGluIHJlc3B1ZXN0YXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCA9IHJlc3B1ZXN0YXNbaWRFbmNdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNVQVByaW5jaXBhbC5zMWExX29icyA9PSAnIXBydWViYSBkZSBlcnJvciBhbCBncmFiYXIhJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRElPIFBSVUVCQSBERSBFUlJPUiBBTCBHUkFCQVInKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIG9wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50YXJlYS50YXJlYSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCByZWdpc3RyYXJQYXNlVGFibGEoY29udGV4dCwgb3BlcmF0aXZvLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fc2luY3Jvbml6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAncGVyc2lzdGVudGVzJywgdHlwZU5hbWU6ICdqc29uYicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbW9kb19kbScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FtYmlhX21vZG9fZG0nLCB0eXBlTmFtZTogJ2Jvb2xlYW4nIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkcGVyX2xvZ3VlYWRvX3RhYmxldCcsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8e3BlcnNpc3RlbnRlczogQW55T2JqZWN0LCBtb2RvX2RtOiBzdHJpbmcsIGNhbWJpYV9tb2RvX2RtOiBib29sZWFuLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQ6IHN0cmluZ30+KXtcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICBjb25zdCBwZXJtaXRlR2VuZXJhck11ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTyk7XHJcbiAgICAgICAgICAgIGlmKCFwZXJtaXRlR2VuZXJhck11ZXN0cmEgJiYgcGFyYW1ldGVycy5jYW1iaWFfbW9kb19kbSl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gZXMgcG9zaWJsZSBjYW1iaWFyIGRlIG1vZG8gZW4gZXN0ZSBvcGVyYXRpdm8nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBwZXJzaXN0ZW50ZXMsIG1vZG9fZG0sIGNhbWJpYV9tb2RvX2RtLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQgfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJuYW1lTG9ndWVhZG9UYWJsZXQgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYHNlbGVjdCB1c3VhcmlvIGZyb20gdXN1YXJpb3Mgd2hlcmUgaWRwZXIgPSAkMWAsIFtpZHBlcl9sb2d1ZWFkb190YWJsZXRdKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlOyBcclxuICAgICAgICAgICAgdmFyIHRva2VuOiBzdHJpbmcgPSBwZXJzaXN0ZW50ZXM/LnRva2VuIHx8IChhd2FpdCBiZS5wcm9jZWR1cmUudG9rZW5fZ2V0LmNvcmVGdW5jdGlvbihjb250ZXh0LCB7XHJcbiAgICAgICAgICAgICAgICB1c2VyYWdlbnQ6IGNvbnRleHQuc2Vzc2lvbi5yZXEudXNlcmFnZW50LFxyXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lTG9ndWVhZG9UYWJsZXRcclxuICAgICAgICAgICAgfSkpLnRva2VuO1xyXG4gICAgICAgICAgICBjb25zdCBudW1fc2luY3JvID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIHNpbmNyb25pemFjaW9uZXMgKHRva2VuLCB1c3VhcmlvLCBkYXRvcylcclxuICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKCQxLCQyLCQzKSBcclxuICAgICAgICAgICAgICAgICAgICBSRVRVUk5JTkcgc2luY3JvXHJcbiAgICAgICAgICAgICAgICBgLCBbdG9rZW4sIHVzZXJuYW1lTG9ndWVhZG9UYWJsZXQsIHBlcnNpc3RlbnRlc11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICB2YXIgY29uZHZpdiA9IGBcclxuICAgICAgICAgICAgICAgIHR0Lm9wZXJhdGl2bz0gJDEgXHJcbiAgICAgICAgICAgICAgICBhbmQgYXNpZ25hZG8gPSAkMlxyXG4gICAgICAgICAgICAgICAgYW5kIHR0Lm9wZXJhY2lvbj0nY2FyZ2FyJyBcclxuICAgICAgICAgICAgICAgIGFuZCAodHQuY2FyZ2Fkb19kbSBpcyBudWxsIG9yIHR0LmNhcmdhZG9fZG0gPSAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKHRva2VuKX0pXHJcbiAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdW5pZGFkX2FuYWxpc2lzOiBVQV9QUklOQ0lQQUwsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTykpO1xyXG4gICAgICAgICAgICBpZiAocGVyc2lzdGVudGVzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpZEVuYyBpbiBwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCA9IHBlcnNpc3RlbnRlcy5yZXNwdWVzdGFzW1VBX1BSSU5DSVBBTF1baWRFbmNdO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vVE9ETyBBTCBQQVJFQ0VSIEVTVMOBIFJFU1VFTFRPLCBMTyBERUpPIFBPUiBMQVMgRFVEQVNcclxuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzcHVlc3Rhc1VBUHJpbmNpcGFsKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYXJnYSA9IHBlcnNpc3RlbnRlcy5jYXJnYXNbcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50ZW0uY2FyZ2FdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZWEgPSBwZXJzaXN0ZW50ZXMuaW5mb3JtYWNpb25IZHJbaWRFbmNdLnRhcmVhLnRhcmVhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJnYVRhcmVhc0FyZWFzID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHNlbGVjdCByZWNlcGNpb25pc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfYXJlYXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCB0YXJlYSA9ICQyIGFuZCBhcmVhID0gJDMgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW09QRVJBVElWTywgdGFyZWEsIGNhcmdhLmNhcmdhXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FyZ2FUYXJlYXNBcmVhcyAmJiAhY2FyZ2EucmVjZXBjaW9uaXN0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYG5vIHNlIGRlZmluacOzIHVuIHJlY2VwY2lvbmlzdGEgcGFyYSBlbCBvcGVyYXRpdm8gJHtPUEVSQVRJVk99LCB0YXJlYSAke3RhcmVhfSwgw6FyZWEgJHtjYXJnYS5jYXJnYX0sIHBvciBmYXZvciBjb211bmlxdWVzw6kgY29uIEdBQklORVRFIHBhcmEgcXVlIGNhcmd1ZW4gdW4gcmVjZXBjaW9uaXN0YWApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlcihpZEVuYykgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZEVuYyBlcyBsYSBjbGF2ZSAodGV4dG8pIGRlIHBlcnNpc3RlbnRlcy5yZXNwdWVzdGFzOyBsYXMgZnVuY2lvbmVzIHF1ZSBzaWd1ZW4gbG8gcmVjaWJlbiBjb21vIHRleHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEVuYyA9IFN0cmluZyhhd2FpdCBwZXJzaXN0aXJFbmN1ZXN0YUF1dG9nZW5lcmFkYUVuRE0oY29udGV4dCwgT1BFUkFUSVZPLCBjYXJnYS5jYXJnYSwgaWRFbmMsIHRva2VuLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsIGNhcmdhLnJlY2VwY2lvbmlzdGEgfHwgY2FyZ2FUYXJlYXNBcmVhcywgcGVyc2lzdGVudGVzLmlkcGVyLCBtb2RvX2RtIGFzIE1vZG9ETSwgY2FtYmlhX21vZG9fZG0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVlZG9HdWFyZGFyRW5URU0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uc3VsdGFUYXJlYXNUZW0gPSBjb25zdWx0YVVwZGF0ZVRhcmVhc1RlbVBvckRlc2NhcmdhKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogT1BFUkFUSVZPLCBpZEVuYywgdGFyZWEsIHRva2VuLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNhQURlc2NhcmdhcjogY2FtYmlhX21vZG9fZG0gfHwgcGVyc2lzdGVudGVzLmlkcGVyICE9IGlkcGVyX2xvZ3VlYWRvX3RhYmxldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1ZXJ5VGFyZWFzVGVtID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoY29uc3VsdGFUYXJlYXNUZW0uc3FsLCBjb25zdWx0YVRhcmVhc1RlbS5wYXJhbXMpLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHVlZG9HdWFyZGFyRW5URU0gPSBxdWVyeVRhcmVhc1RlbS5yb3dDb3VudCA9PSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHVlZG9HdWFyZGFyRW5URU0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIE9QRVJBVElWTywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgdGFyZWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVnaXN0cmFyUGFzZVRhYmxhKGNvbnRleHQsIE9QRVJBVElWTywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKCdsb2NhbC1yZWNpYmlkby1zaW4tdG9rZW4udHh0JywgSlNPTi5zdHJpbmdpZnkoeyBub3c6IG5ldyBEYXRlKCksIGlkcGVyOiBwZXJzaXN0ZW50ZXMuaWRwZXIsIGlkQ2FzbzogaWRFbmMsIFtwa19hZ3JlZ2FkYV06IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCB9KSArICdcXG5cXG4nLCAndXRmOCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB7IHJvdyB9ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoZ2V0SGRyUXVlcnkoY29uZHZpdiwgY29udGV4dCwgVUFfUFJJTkNJUEFMLCBwZXJtaXRlR2VuZXJhck11ZXN0cmEsIGlkcGVyX2xvZ3VlYWRvX3RhYmxldCksIFtPUEVSQVRJVk8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldF0pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0ICBlc3RhZG8gPSAkNCwgY2FyZ2Fkb19kbT0kMzo6dGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlICR7Y29uZHZpdn0gXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIGVuY2BcclxuICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldCwgdG9rZW4sIEVTVEFET19QT1NURVJJT1JfQ0FSR0FdXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnJvdyxcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogT1BFUkFUSVZPLFxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmE6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdG9rZW4sXHJcbiAgICAgICAgICAgICAgICBudW1fc2luY3JvLFxyXG4gICAgICAgICAgICAgICAgaWRwZXI6IGlkcGVyX2xvZ3VlYWRvX3RhYmxldCxcclxuICAgICAgICAgICAgICAgIGNhcmdhczogbGlrZUFyLmNyZWF0ZUluZGV4KGNhcmdhc0hkckNvbkZlY2hhRG15KHJvdy5jYXJnYXMpLm1hcChjYXJnYSA9PiAoeyAuLi5jYXJnYSwgZXN0YWRvX2NhcmdhOiAncmVsZXZhbWllbnRvJyB9KSksICdjYXJnYScpXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fYmFja3VwJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3Rva2VuJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0ZW0nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdtb2RvX2RtJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5sb2dnZWQ6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IHRva2VuOiBzdHJpbmcgfCBudWxsLCB0ZW06IEFueU9iamVjdCwgbW9kb19kbTogTW9kb0RNIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IGJlLCBjbGllbnQgfSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIG51bV9zaW5jcm86IG51bWJlciA9IDA7XHJcbiAgICAgICAgICAgIHZhciB0b2tlbjogc3RyaW5nIHwgbnVsbCA9IHBhcmFtZXRlcnMudG9rZW47XHJcbiAgICAgICAgICAgIGlmICh0b2tlbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBvazogJ29rOk4vVCcgfTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciB7IHJvd0NvdW50IH0gPSBhd2FpdCBjbGllbnQucXVlcnkoYHNlbGVjdCAxIGZyb20gdG9rZW5zIHdoZXJlIHRva2VuID0gJDFgLCBbdG9rZW5dKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJvd0NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb2s6ICdvazpOL1QnIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pKTtcclxuICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMudGVtKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBiYWNrdXAgb2YgbGlrZUFyKHBhcmFtZXRlcnMudGVtKS5hcnJheSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFyZWEgPSBiYWNrdXAuY2FyZ2EuY2FyZ2E7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3B1ZXN0YXNSYWl6ID0gYmFja3VwLnJlc3B1ZXN0YXNSYWl6O1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZEVuY0RNID0gYmFja3VwLmZvclBrUmFpeltwa19hZ3JlZ2FkYV0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVjZXBjaW9uaXN0YSA9IGJhY2t1cC5jYXJnYS5yZWNlcGNpb25pc3RhO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhc2lnbmFkbyA9IGJhY2t1cC5pZHBlcjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyKGlkRW5jRE0pIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwZXJzaXN0aXJFbmN1ZXN0YUF1dG9nZW5lcmFkYUVuRE0oY29udGV4dCwgT1BFUkFUSVZPLCBhcmVhLCBpZEVuY0RNLCB0b2tlbiwgcmVzcHVlc3Rhc1JhaXosIHJlY2VwY2lvbmlzdGEsIGFzaWduYWRvLCBwYXJhbWV0ZXJzLm1vZG9fZG0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBqc29uX2JhY2t1cCA9ICQzLCBmZWNoYV9iYWNrdXAgPSBjdXJyZW50X3RpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCBqc29uX2JhY2t1cCBpcyBkaXN0aW5jdCBmcm9tICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbT1BFUkFUSVZPLCBpZEVuY0RNLCByZXNwdWVzdGFzUmFpeiwgcmVzcHVlc3Rhc1JhaXpdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG9rOiAnb2snXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjb25zaXN0aXJfdml2aWVuZGEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2Nhc28nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgY2Fzbzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IGJlLCBjbGllbnQgfSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIGxldCBwYXJhbV9wcm9jID0ge1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IHBhcmFtZXRlcnMuY2Fzb1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdGFkbzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSBhd2FpdCBiZS5wcm9jZWR1cmUuY29uc2lzdGlyX2VuY3Vlc3RhLmNvcmVGdW5jdGlvbihjb250ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtX3Byb2NcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGVycm9yID0gdW5leHBlY3RlZChlcnIpO1xyXG4gICAgICAgICAgICAgICAgZXJyTWVzc2FnZSA9IFwiIGNvbnNpc3Rpcl9jYXNvLiBcIiArIGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1lc3NhZ2UsIGVycm9yKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcqKioqKiogY29uc2lzdGlyX2Nhc28gcmVzdWx0YWRvOicsIHJlc3VsdGFkbylcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG9rOiAnb2snXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fcmVzY2F0YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnbG9jYWxTdG9yYWdlSXRlbScsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2xvY2FsU3RvcmFnZUl0ZW1LZXknLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bmxvZ2dlZDogdHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBsb2NhbFN0b3JhZ2VJdGVtS2V5OiBzdHJpbmcsIGxvY2FsU3RvcmFnZUl0ZW06IEFueU9iamVjdCB9Pikge1xyXG4gICAgICAgICAgICB2YXIgeyBsb2NhbFN0b3JhZ2VJdGVtS2V5LCBsb2NhbFN0b3JhZ2VJdGVtIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsb2NhbFN0b3JhZ2VJdGVtKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoJ2xvY2FsLXJlc2NhdGUudHh0JywgSlNPTi5zdHJpbmdpZnkoeyBub3c6IG5ldyBEYXRlKCksIHVzZXI6IGNvbnRleHQudXNlcm5hbWUsIGl0ZW1LZXk6IGxvY2FsU3RvcmFnZUl0ZW1LZXksIGl0ZW1EYXRhOiBsb2NhbFN0b3JhZ2VJdGVtIH0pICsgJ1xcblxcbicsICd1dGY4Jyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFUlJPUicsIGV4cGVjdGVkKGVycikpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdvcGVyYXRpdm9fZ2V0JyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltdLFxyXG4gICAgICAgIHVubG9nZ2VkOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7fT4pe1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdnZXRfcmFuZG9tX2ZyZWVfY2FzZScsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW3sgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfV0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byB9Pikge1xyXG4gICAgICAgICAgICBjb25zdCBtaW5zVG9FeHBpcmUgPSAzMDtcclxuICAgICAgICAgICAgY29uc3QgbWluc1NpbmNlQmxvcXVlZCA9IGBkYXRlX3BhcnQoJ21pbicsIGFnZShjdXJyZW50X3RpbWVzdGFtcCwgZmVjaGFfYmxvcXVlbykpYDtcclxuICAgICAgICAgICAgY29uc3QgZW5jID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYHNlbGVjdCBlbmMgZnJvbSB0ZW0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAobGlicmUgb3IgJHttaW5zU2luY2VCbG9xdWVkfSA+ICR7bWluc1RvRXhwaXJlfSkgbGltaXQgMTtgLCBbcGFyYW1zLm9wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFVQREFURSB0ZW0gc2V0IGxpYnJlID0gZmFsc2UsIGZlY2hhX2Jsb3F1ZW89Y3VycmVudF90aW1lc3RhbXAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJgLCBbcGFyYW1zLm9wZXJhdGl2bywgZW5jLnZhbHVlXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZW5jLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnbXVlc3RyYV9nZW5lcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2FyZWEnLCB0eXBlTmFtZTogJ2ludGVnZXInLCByZWZlcmVuY2VzOiBcImFyZWFzXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZG9taW5pbycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIGRlZmF1bHRWYWx1ZTogMyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYW50X2VuY3Vlc3RhcycsIHR5cGVOYW1lOiAnaW50ZWdlcicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWFfYWN0dWFsJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ3RhcmVhcycgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGFyZWE6IG51bWJlciwgZG9taW5pbzogbnVtYmVyLCBjYW50X2VuY3Vlc3RhczogbnVtYmVyLCB0YXJlYV9hY3R1YWw6IElkVGFyZWEgfT4pIHtcclxuICAgICAgICAgICAgY29uc3QgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZUdlbmVyYXJNdWVzdHJhID0gYXdhaXQgZ2V0T3BlcmF0aXZvUGVybWl0ZUdlbmVyYXJNdWVzdHJhKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pdGVHZW5lcmFyTXVlc3RyYSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsQWN0dWFsID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIGBzZWxlY3QgY291bnQoKikgYXMgdG90YWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgYXJlYSA9ICQyYCxcclxuICAgICAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmFyZWFdXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcmFtcy5jYW50X2VuY3Vlc3RhcyAtIHRvdGFsQWN0dWFsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmMgPSBhd2FpdCBnZW5lcmFyTnVldm9JZEVuYyhjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuYXJlYSwgbWF4QUVuY1BvckFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ2VuZXJhckVuY3Vlc3RhVGVtKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8sIGVuYywgcGFyYW1zLmFyZWEsIHBhcmFtcy5kb21pbmlvLCBwYXJhbXMudGFyZWFfYWN0dWFsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiZWwgb3BlcmF0aXZvIG5vIHBlcm1pdGUgZ2VuZXJhciBtdWVzdHJhXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdtdWVzdHJhX2FncmVnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnYXJlYScsIHR5cGVOYW1lOiAnaW50ZWdlcicsIHJlZmVyZW5jZXM6IFwiYXJlYXNcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdkb21pbmlvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgZGVmYXVsdFZhbHVlOiAzIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NhbnRfZW5jdWVzdGFzJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYV9hY3R1YWwnLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAndGFyZWFzJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgYXJlYTogbnVtYmVyLCBkb21pbmlvOiBudW1iZXIsIGNhbnRfZW5jdWVzdGFzOiBudW1iZXIsIHRhcmVhX2FjdHVhbDogSWRUYXJlYSB9Pikge1xyXG4gICAgICAgICAgICBjb25zdCBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlR2VuZXJhck11ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICBpZiAocGVybWl0ZUdlbmVyYXJNdWVzdHJhKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBwYXJhbXMuY2FudF9lbmN1ZXN0YXM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuYyA9IGF3YWl0IGdlbmVyYXJOdWV2b0lkRW5jKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5hcmVhLCBtYXhBRW5jUG9yQXJlYSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBnZW5lcmFyRW5jdWVzdGFUZW0oY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2bywgZW5jLCBwYXJhbXMuYXJlYSwgcGFyYW1zLmRvbWluaW8sIHBhcmFtcy50YXJlYV9hY3R1YWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyhjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJlbCBvcGVyYXRpdm8gbm8gcGVybWl0ZSBnZW5lcmFyIG11ZXN0cmFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2JsYW5xdWVhcl9wcmV2aXN1YWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdjb29yX2NhbXBvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdtb3N0cmFyX2VuY3Vlc3RhX2FfYmxhbnF1ZWFyX2NvbnRlbmlkbycsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGJ1c2NhckVuY3Vlc3RhRW5UZW0oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2JsYW5xdWVhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAnc3ViY29vcl9jYW1wbycsICdjb29yX2NhbXBvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKSk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tICR7YmUuZGIucXVvdGVJZGVudCh1bmlkYWRfYW5hbGlzaXMpfSBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICR7YmUuZGIucXVvdGVJZGVudChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgLy9wYXNvIGEgZW5jdSBwYXJhIGd1YXJkYXIgZW4gaGlzdG9yaWFsXHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhX2FjdHVhbCA9ICdlbmN1J1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICAvL3Jlc2V0ZW8gdGVtIChubyBzZSBndWFyZGEgaGlzdG9yaWFsIHBvcnF1ZSB0YXJlYV9hY3R1YWwgZXMgbnVsbClcclxuICAgICAgICAgICAgLy9ndWFyZG8gYmFja3VwIHBvciBsYXMgZHVkYXNcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBcclxuICAgICAgICAgICAgICAgICAgICAgICAganNvbl9iYWNrdXAgPSBqc29uX2VuY3Vlc3RhLCBqc29uX2VuY3Vlc3RhID0gbnVsbCwgdGFyZWFfYWN0dWFsID0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmVjaGFfbW9kaWZfZW5jdWVzdGEgPSBudWxsLCBmZWNoYV9iYWNrdXAgPSBjdXJyZW50X3RpbWVzdGFtcCwgbW9kaWZpY2FkbyA9IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZW5fZXN0YWRvID0gbnVsbCwgcmVzdW1lbl9lc3RhZG9fc3VwID0gbnVsbCwgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNlX3RhYmxhID0gbnVsbCwgcmVhID0gbnVsbCwgbm9yZWEgPSBudWxsLCByZWFfc3VwID0gbnVsbCwgbm9yZWFfc3VwID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIGluY29uc2lzdGVuY2lhc1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCAke2JlLmRiLnF1b3RlSWRlbnQocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBpbl9jb25fdmFyXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIHBrX2ludGVncmFkYS0+PiR7YmUuZGIucXVvdGVMaXRlcmFsKHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzX3VsdGltYXNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgcGtfaW50ZWdyYWRhLT4+JHtiZS5kYi5xdW90ZUxpdGVyYWwocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gYGxhIGVuY3Vlc3RhICR7cGFyYW1zLmVuY30gc2UgYmxhbnF1ZcOzIGNvcnJlY3RhbWVudGVgO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYm9ycmFyX3ByZXZpc3VhbGl6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6Wydjb29yX3Byb2MnLCdzdWJjb29yX2NhbXBvJywnY29vcl9jYW1wbycsJ2FkbWluJ10sXHJcbiAgICAgICAgcmVzdWx0T2s6J21vc3RyYXJfZW5jdWVzdGFfYV9ib3JyYXInLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZ30+KXtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGJ1c2NhckVuY3Vlc3RhRW5UZW0oY29udGV4dCxwYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYm9ycmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdzdWJjb29yX2NhbXBvJywgJ2Nvb3JfY2FtcG8nLCAnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgPSBhd2FpdCBnZXRPcGVyYXRpdm9QZXJtaXRlR2VuZXJhck11ZXN0cmEoY29udGV4dC5jbGllbnQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICBpZiAocGVybWl0ZV9nZW5lcmFyX211ZXN0cmEpIHtcclxuICAgICAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjYXNvVGVtIH0gPSBhd2FpdCBidXNjYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbV9ib3JyYWRhcyAob3BlcmF0aXZvLCBlbmMsIGN1YW5kbywgYXJlYSwgY2x1c3RlciwgZG9taW5pbywgdGFyZWFfYWN0dWFsLCBqc29uX2VuY3Vlc3RhLCB0b2tlbl9hdXRvZ2VuZXJhZG9fZG0sIGVuY19hdXRvZ2VuZXJhZG9fZG0sIGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSwgcHJvaWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyAoJDEsJDIsY3VycmVudF90aW1lc3RhbXAsJDMsJDQsJDUsJDYsJDcsJDgsJDksJDEwLCQxMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgICAgICAgICBgLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5lbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5hcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uY2x1c3RlcixcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmRvbWluaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS50YXJlYV9hY3R1YWwsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5qc29uX2VuY3Vlc3RhLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0udG9rZW5fYXV0b2dlbmVyYWRvX2RtLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uZW5jX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLnByb2llXHJcbiAgICAgICAgICAgICAgICBdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgYGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAke2JlLmRiLnF1b3RlSWRlbnQodW5pZGFkX2FuYWxpc2lzKX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgJHtiZS5kYi5xdW90ZUlkZW50KHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBoaXN0b3JpYWxfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kICR7YmUuZGIucXVvdGVJZGVudChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbl9jb25fdmFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBwa19pbnRlZ3JhZGEtPj4ke2JlLmRiLnF1b3RlTGl0ZXJhbChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNfdWx0aW1hc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgcGtfaW50ZWdyYWRhLT4+JHtiZS5kYi5xdW90ZUxpdGVyYWwocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgbGEgZW5jdWVzdGEgJHtwYXJhbXMuZW5jfSBzZSBib3Jyw7MgY29ycmVjdGFtZW50ZWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignbm8gc2UgcHVlZGUgYm9ycmFyIGxhIGVuY3Vlc3RhIHBvcnF1ZSBlbCBvcGVyYXRpdm8gdGllbmUgbXVlc3RyYSBlc3TDoXRpY2EnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFzX2NhcGFjaXRhY2lvbl9ib3JyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSA9IGF3YWl0IGdldE9wZXJhdGl2b1Blcm1pdGVHZW5lcmFyTXVlc3RyYShjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIGlmIChwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5jc0FCb3JyYXIgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgYHNlbGVjdCAqIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm9dKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIGVuY3NBQm9ycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX2JvcnJhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgeyBvcGVyYXRpdm86IHBhcmFtcy5vcGVyYXRpdm8sIGVuYzogcm93LmVuYyB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdzZSBib3JyYXJvbiBsYXMgZW5jdWVzdGFzIGRlIGNhcGFjaXRhY2nDs24nO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ25vIHNlIHB1ZWRlIGJvcnJhciBsYSBlbmN1ZXN0YSBwb3JxdWUgZWwgb3BlcmF0aXZvIHRpZW5lIG11ZXN0cmEgZXN0w6F0aWNhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2FjY2lvbl90YXJlYXNfdGVtX2VqZWN1dGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY29uZGljaW9uJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdhY2Npb24nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcsIGNvbmRpY2lvbjogc3RyaW5nLCBhY2Npb246IEVzdGFkb0FjY2lvbiB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgYWNjaW9uID0gcGFyYW1zLmFjY2lvbiBhcyBFc3RhZG9BY2Npb247XHJcbiAgICAgICAgICAgIHZhciBjdW1wbGU6IGJvb2xlYW4gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGFjY2lvbl9jdW1wbGVfY29uZGljaW9uKCQ1LCAkNiwgJDcsICQ4LCAoXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0IGNvbmRpY2lvbiBcclxuICAgICAgICAgICAgICAgICAgICAgIGZyb20gZXN0YWRvc19hY2Npb25lcyBcclxuICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlc3RhZG8gPSAkMiBhbmQgZWFjY2lvbiA9ICQzIGFuZCBlc3RhZG9fZGVzdGlubyA9ICQ0XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClgLCBbXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkbyxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lYWNjaW9uLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG8sXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW5jLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVhY2Npb24sXHJcbiAgICAgICAgICAgIF0pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghY3VtcGxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gc2UgcHVkbyBlamVjdXRhciBsYSBhY2Npw7NuLCBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzbiBcIiR7cGFyYW1zLmNvbmRpY2lvbn1cIiBvIGJpZW4gZWwgZXN0YWRvIGVzdMOhIGRlc2FjdHVhbGl6YWRvLCByZWZyZXNxdWUgbGEgZ3JpbGxhLmApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBlbmM9JDIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVuYyxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgaWYgKGFjY2lvbi5ub21icmVfcHJvY2VkdXJlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYmUucHJvY2VkdXJlW2FjY2lvbi5ub21icmVfcHJvY2VkdXJlXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVthY2Npb24ubm9tYnJlX3Byb2NlZHVyZV0uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcylcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIGV4aXN0ZSBlbCBwcm9jZWR1cmUgXCIke2FjY2lvbi5ub21icmVfcHJvY2VkdXJlfVwiIGRlZmluaWRvIGVuIGxhIHRhYmxhIFwiZXN0YWRvc19hY2Npb25lc1wiIHBhcmEgZWxcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86ICR7YWNjaW9uLm9wZXJhdGl2b30sIGVzdGFkbzogJHthY2Npb24uZXN0YWRvfSwgZWFjY2lvbjogJHthY2Npb24uZWFjY2lvbn0uYClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBCVVNDTyBQQVNFIERFIFRBUkVBXHJcbiAgICAgICAgICAgIHZhciB0YXJlYVNpZ3VpZW50ZSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3Byb3hpbWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2byA9ICQxIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEgPSAkMiBhbmQgZXN0YWRvID0gJDMgYW5kIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYV9jdW1wbGVfY29uZGljaW9uKCQ0LCAkNSwgJDYsICQ3LCBjb25kaWNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgb3JkZW5cclxuICAgICAgICAgICAgICAgICAgICBsaW1pdCAxYFxyXG4gICAgICAgICAgICAgICAgLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlubyxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW5jXHJcbiAgICAgICAgICAgICAgICBdKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCkpLnJvdztcclxuICAgICAgICAgICAgaWYgKHRhcmVhU2lndWllbnRlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYFxyXG4gICAgICAgICAgICAgICAgICAgICwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIHRhcmVhU2lndWllbnRlLnRhcmVhX2Rlc3Rpbm9dXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXV0b0FzaWduYWRvID0gdGFyZWFTaWd1aWVudGUucmVnaXN0cmFfcmVjZXBjaW9uaXN0YSA/IGNvbnRleHQudXNlci5pZHBlciA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgcSA9IGNvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0c19lbnRyYWRhID0gY3VycmVudF90aW1lc3RhbXAsIGFkZWxhbnRhciA9IG51bGwsIGVzdGFkbyA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2F1dG9Bc2lnbmFkbyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCByZWNlcGNpb25pc3RhPVwiICsgcShhdXRvQXNpZ25hZG8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYFxyXG4gICAgICAgICAgICAgICAgICAgICwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIHRhcmVhU2lndWllbnRlLnRhcmVhX2Rlc3Rpbm8sIHRhcmVhU2lndWllbnRlLmVzdGFkb19kZXN0aW5vXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmVhU2lndWllbnRlLm5vbWJyZV9wcm9jZWR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmVbdGFyZWFTaWd1aWVudGUubm9tYnJlX3Byb2NlZHVyZV0uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRklOIFBBU0UgREUgVEFSRUFcclxuICAgICAgICAgICAgcmV0dXJuIFwib2tcIjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2NhcmdhX3ByZXBhcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmMsIE9QRVJBQ0lPTl9QUkVQQVJBUl9DQVJHQV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9kaXNwb25pYmlsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBhc2lnbmFkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19jYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rlc2NhcmdhX3ByZXBhcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmMsIE9QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19kZXNjYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJ2NhcmdhcidcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9hbmFsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuY29uc2lzdGlyX2VuY3Vlc3RhLmNvcmVGdW5jdGlvbihjb250ZXh0LCB7IG9wZXJhdGl2bzogcGFyYW1zLm9wZXJhdGl2bywgaWRfY2FzbzogcGFyYW1zLmVuYyB9KVxyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2luY29uc2lzdGVuY2lhc19lbmN1ZXN0YV9jb250cm9sYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGNhbnRpZGFkOiBudW1iZXIgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGNvdW50KCopIGFzIGN1bXBsZVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzIGkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4gY29uc2lzdGVuY2lhcyBjIHVzaW5nIChvcGVyYXRpdm8sIGNvbnNpc3RlbmNpYSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4gbW9tZW50b3NfY29uc2lzdGVuY2lhIG1jIHVzaW5nIChvcGVyYXRpdm8sIG1vbWVudG8pXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2byA9ICQxIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdml2aWVuZGEgPSAkMiBhbmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudG9fY29uc2lzdGVuY2lhX2N1bXBsZV9jb25kaWNpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLnZpdmllbmRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJDMsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdCBjb25kaWNpb24gZnJvbSBtb21lbnRvc19jb25zaXN0ZW5jaWEgd2hlcmUgb3BlcmF0aXZvID0gbWMub3BlcmF0aXZvIGFuZCBtb21lbnRvID0gbWMubW9tZW50bylcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSBhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaS5qdXN0aWZpY2FjaW9uIGlzIG51bGxgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIGNvbnRleHQudXNlcm5hbWVdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWVcclxuICAgICAgICAgICAgaWYgKGNhbnRpZGFkKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgbm8gc2UgcHVlZGUgdmVyaWZpY2FyIGxhIHRhcmVhIHBvcnF1ZSBoYXkgaW5jb25zaXN0ZW5jaWFzLCBwb3IgZmF2b3IgcmVzdcOpbHZhbGFzIG8ganVzdGlmw61xdWVsYXMgZW4gY2FzbyBkZSBzZXIgbmVjZXNhcmlvLmApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV92ZXJpZmljYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmluY29uc2lzdGVuY2lhc19lbmN1ZXN0YV9jb250cm9sYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSAnMSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub192ZXJpZmljYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9jZXJyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9ICcxJywgYXNpZ25hZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jLCBjb250ZXh0LnVzZXIuaWRwZXJdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZGVzdmVyaWZpY2FyX2V4Y2VwY2lvbmFsJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdtb3Rpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydzdWJjb29yX2NhbXBvJywgJ2Nvb3JfY2FtcG8nLCAnY29vcl9wcm9jJywgJ3Byb2Nlc2FtaWVudG8nLCAnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgbW90aXZvOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGVuY3Vlc3RhRGVzdmVyaWZpY2FyRXhjZXBjaW9uYWwoY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2NlcnJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB2ZXJpZmljYWRvID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3N1cGVydmlzYXJfcHJlc2VuY2lhbCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzLCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3N1cGUnLCAxXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3N1cGVydmlzYXJfdGVsZWZvbmljYScsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzLCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3N1cGUnLCAyXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX3N1cGVydmlzYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2ZpbmMnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3Bhc2FyX2FfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQ0MnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhIGluICgkMywkNCkgLS1xdWllcm8gcGFzYXIgbGFzIDIgdGFyZWFzIGEgQ0NcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnLCAncHJvYyddKVxyXG4gICAgICAgICAgICAgICAgLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19wYXNhcl9hX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0EnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAncHJvYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICcwRCdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdwcm9jJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9kZXZvbHZlcl9wcm9jX2Rlc2RlX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0EnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAncHJvYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAncHJvYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fZGV2b2x2ZXJfcHJvY19kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdDQydcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWEgaW4gKCQzLCQ0KSAtLXF1aWVybyBwYXNhciBsYXMgMiB0YXJlYXMgYSBDQ1xyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnYW5hYycsICdwcm9jJ10pXHJcbiAgICAgICAgICAgICAgICAuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfbm9fdmVyaWZpY2FyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3JlY3VwZXJhcl9kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB7IG9wZXJhdGl2bywgZW5jLCB0YXJlYSB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfdmVyaWZpY2FyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgJ3JlY3UnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX3JlY3VwZXJhcl9kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB7IG9wZXJhdGl2bywgZW5jLCB0YXJlYSB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsICdyZWN1JywgJ2FuYWMnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfbm9fdmVyaWZpY2FyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Zvcnphcl90YXJlYScsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWFfYWN0dWFsJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYV9udWV2YScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYV9hY3R1YWw6IHN0cmluZywgdGFyZWFfbnVldmE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIGVuYywgdGFyZWFfYWN0dWFsLCB0YXJlYV9udWV2YSB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbCwgdGFyZWFfbnVldmFdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnVicgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCB0YXJlYV9hY3R1YWxdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnMEQnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCB0YXJlYV9udWV2YV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9oYWJpbGl0YXJfZGVzaGFiaWxpdGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBoYWJpbGl0YWRhID0gbm90IGhhYmlsaXRhZGFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3Rhc19wcm9jZXNhbWllbnRvX3Bhc2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KXtcclxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHBhc2FyRW5jdWVzdGFzQVByb2llKGNvbnRleHQuY2xpZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2ludGVyY2FtYmlhcl9lbmN1ZXN0YXMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jMScsIHJlZmVyZW5jZXM6ICd0ZW0nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NhbnRIb2cxJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMyJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYW50SG9nMicsIHR5cGVOYW1lOiAnaW50ZWdlcicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAncGFzbycsIHR5cGVOYW1lOiAnaW50ZWdlcicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY29uZmlybWEnLCB0eXBlTmFtZTogJ2Jvb2xlYW4nLCBkZWZhdWx0VmFsdWU6IGZhbHNlLCBsYWJlbDogJ0NvbmZpcm1hIGludGVyY2FtYmlvIGRlIGxvcyBkYXRvcyBlbnRyZSBsYXMgZW5jdWVzdGFzPyAnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAncHJvY2VzYW1pZW50bycsICdhZG1pbiddLFxyXG4gICAgICAgIHByb2dyZXNzOiB0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczxhbnk+KSB7XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBQYXJhIGNvbnRyb2xhcjpcclxuICAgICAgICAgICAgICogLSBxdWUgbGFzIGhvZ2FyZXMsIHBlcnNvbmFzLCBldGMgZXN0w6luIGludGVyY2FtYmlhZGFzIFxyXG4gICAgICAgICAgICAgKiAgKiB0YW50byBlbiBlbCBqc29uXHJcbiAgICAgICAgICAgICAqICAqIGNvbW8gZW4gbGFzIFREc1xyXG4gICAgICAgICAgICAgKiAtIGNvc2FzIHF1ZSBzZSBjYWxjdWxhbiBwb3IgbGEgYXBwPyBjdWFsZXM/IChyZXN1bWVuX2VzdGFkbywgcmVhIHkgbm9yZWEpXHJcbiAgICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY29uZmlybWEpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY29uZmlybcOzIGludGVyY2FtYmlvJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5lbmMxIHx8ICFwYXJhbXMuZW5jMikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgRmFsdGEgaW5ncmVzYXIgdW4gbnVtZXJvIGRlIGVuY3Vlc3RhIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMuZW5jMSA9PSBwYXJhbXMuZW5jMikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgZW5jMSB5IGVuYzIgZGViZW4gc2VyIGRpc3RpbnRvcyEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5jYW50SG9nMSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgQ2FudGlkYWQgZGUgSG9nYXJlcyBkZSBlbmMxLCBubyBlc3RhIGluZ3Jlc2FkbyEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5jYW50SG9nMikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgQ2FudGlkYWQgZGUgSG9nYXJlcyBkZSBlbmMyLCBubyBlc3RhIGluZ3Jlc2FkbyEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDT05UUk9MQVIgUVVFIE5JTkdVTkEgREUgTEFTIDIgZW5jdWVzdGFzIEVTVEUgQ0FSR0FEQSwgQUJJRVJUQSBGQUxUQVxyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgT1BFUkFUSVZPKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbnRfaG9ncyA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3Qgdml2aWVuZGEsIGNvdW50KCopbmggZnJvbSBob2dhcmVzIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKHZpdmllbmRhPSQyIG9yIHZpdmllbmRhPSQzKVxyXG4gICAgICAgICAgICAgICAgZ3JvdXAgYnkgdml2aWVuZGEgb3JkZXIgYnkgdml2aWVuZGFcclxuICAgICAgICAgICAgICAgIGAsIFtPUEVSQVRJVk8sIHBhcmFtcy5lbmMxLCBwYXJhbXMuZW5jMl0pLmZldGNoQWxsKCkpLnJvd3M7XHJcblxyXG4gICAgICAgICAgICB2YXIgcGFyYW1fbmggPSBbcGFyYW1zLmNhbnRIb2cxLCBwYXJhbXMuY2FudEhvZzJdO1xyXG4gICAgICAgICAgICBjYW50X2hvZ3MuZm9yRWFjaCgoeGUsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbV9uaFtpXSAhPT0geGUubmgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWVucyA9IGBFcnJvciwgbm8gY29pbmNpZGUgbGEgY2FudGlkYWQgZGUgaG9nYXJlcyBkZSBlbmMke2kgKyAxfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHhtZW5zKTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlZ0VuYyA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgIHNlbGVjdCBlbmMsIHRhcmVhX2FjdHVhbCwganNvbl9lbmN1ZXN0YSBmcm9tIHRlbSB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIChlbmMgPSQyIG9yIGVuYz0kMykgb3JkZXIgYnkgZW5jXHJcbiAgICAgICAgICAgIGAsIFtPUEVSQVRJVk8sIHBhcmFtcy5lbmMxLCBwYXJhbXMuZW5jMl0pLmZldGNoQWxsKCkpLnJvd3M7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVnRW5jLmxlbmd0aCAhPSAyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBObyBzZSBlbmNvbnRyYXJvbiAyIGVuY3Vlc3RhcycpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBsaW1waWEgbGFzIFREcyAgXHJcbiAgICAgICAgICAgICAgICBsZXQgW2VuYzEsIGVuYzJdID0gW3JlZ0VuY1swXSwgcmVnRW5jWzFdXVxyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5wYXNvID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYGRlbGV0ZSBmcm9tICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZF9hbmFsaXNpcyl9IHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKHZpdmllbmRhPSQyIE9SIHZpdmllbmRhPSQzKWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLCBbT1BFUkFUSVZPLCBlbmMxLmVuYywgZW5jMi5lbmNdXHJcbiAgICAgICAgICAgICAgICAgICAgKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXJhbXMucGFzbyA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9zaW11bGEgZ3VhcmRhZG9cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvKGNvbnRleHQsIE9QRVJBVElWTywgZW5jMS5lbmMsIGVuYzEudGFyZWFfYWN0dWFsLCBlbmMyLmpzb25fZW5jdWVzdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3Jpbyhjb250ZXh0LCBPUEVSQVRJVk8sIGVuYzIuZW5jLCBlbmMyLnRhcmVhX2FjdHVhbCwgZW5jMS5qc29uX2VuY3Vlc3RhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAoYExpc3RvIHBhc28gJHtwYXJhbXMucGFzb30uIEludGVyY2FtYmlvIHJlYWxpemFkbyBlbnRyZSBsYXMgZW5jdWVzdGFzICAke3BhcmFtcy5lbmMxfSB5ICR7cGFyYW1zLmVuYzJ9LiBQb3IgZmF2b3IgY29uc2lzdGEgbGEgZW5jdWVzdGFgKVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFkb3JfZG1zX21vc3RyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jdWVzdGFkb3InLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAnY29vcl9jYW1wbycsICdhZG1pbiddLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnbW9zdHJhcl9lbmN1ZXN0YXNfYV9ibGFucXVlYXInLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuY3Vlc3RhZG9yOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCAqXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBhc2lnbmFkbyA9ICQyIGFuZCBjYXJnYWRvX2RtIGlzIG5vdCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgY2FyZ2Fkb19kbVxyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jdWVzdGFkb3JdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQucm93Q291bnQgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIHNlIGVuY29udHJhcm9uIGVuY3Vlc3RhcyBjYXJnYWRhcyBlbiB1biBETSBwYXJhIGVsIG9wZXJhdGl2byAke3BhcmFtcy5vcGVyYXRpdm99LCBlbmN1ZXN0YWRvciAke3BhcmFtcy5lbmN1ZXN0YWRvcn1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7IHJvd3M6IHJlc3VsdC5yb3dzLCBvcGVyYXRpdm86IHBhcmFtcy5vcGVyYXRpdm8gfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX2JsYW5xdWVhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0b2tlbicsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdjb29yX2NhbXBvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdG9rZW46IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBsZXQgdGFyZWFzVGVtUmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgY2FyZ2Fkb19kbSA9IG51bGwsIG9wZXJhY2lvbiA9ICQzLCBlc3RhZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgY2FyZ2Fkb19kbSA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50b2tlbiwgT1BFUkFDSU9OX1BSRVBBUkFSX0RFU0NBUkdBLCBFU1RBRE9fUE9TVEVSSU9SX0RFU0NBUkdBXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBpZiAodGFyZWFzVGVtUmVzdWx0LnJvd0NvdW50ID09IDApIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yKCdObyBzZSBibGFucXVlw7MgbmluZ3VuYSBlbmN1ZXN0YScpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgdHQgb2YgdGFyZWFzVGVtUmVzdWx0LnJvd3MpIHtcclxuICAgICAgICAgICAgICAgIHR0LnJlc3VsdF9ibGFucXVlbyA9IGBlbmMgJHt0dC5lbmN9IHNlIGJsYW5xdWXDsyBjb3JyZWN0YW1lbnRlLmA7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0QmFja3VwID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGpzb25fZW5jdWVzdGEgPSBqc29uX2JhY2t1cCwgZmVjaGFfbW9kaWZfZW5jdWVzdGEgPSBmZWNoYV9iYWNrdXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIGZlY2hhX2JhY2t1cCA+IGNvYWxlc2NlKGZlY2hhX21vZGlmX2VuY3Vlc3RhLCAnMTkwMC0wMS0wMScpIGFuZCBqc29uX2JhY2t1cCBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgW3R0Lm9wZXJhdGl2bywgdHQuZW5jXSlcclxuICAgICAgICAgICAgICAgICAgICAuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdEJhY2t1cC5yb3dDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHR0LnJlc3VsdF9ibGFucXVlbyArPSBgIFNlIHJlc3RhYmxlY2nDsyBlbCBiYWNrdXAgY29uIGZlY2hhICR7cmVzdWx0QmFja3VwLnJvdy5mZWNoYV9iYWNrdXAudG9ZbWRIbXMoKX0uYFxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB7IHBhcmFtczogcXVlcnlQYXJhbXMsIHNldHRlcnMgfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE6IHR0LnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWw6IHJlc3VsdEJhY2t1cC5yb3cuanNvbl9lbmN1ZXN0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogW3R0Lm9wZXJhdGl2bywgdHQuZW5jLCB0dC50YXJlYV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rpbm86ICd0YXJlYXNfdGVtJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0ICR7c2V0dGVycy5qb2luKCcsJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNcclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3Jpbyhjb250ZXh0LCByZXN1bHRCYWNrdXAucm93Lm9wZXJhdGl2bywgcmVzdWx0QmFja3VwLnJvdy5lbmMsIHR0LnRhcmVhLCByZXN1bHRCYWNrdXAucm93Lmpzb25fZW5jdWVzdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmVhc1RlbVJlc3VsdC5yb3dzO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnbW9kb19kbV9kZWZlY3RvX29idGVuZXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOiB0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pikge1xyXG4gICAgICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gY29udGV4dDtcclxuICAgICAgICAgICAgY29uc3QgbW9kb0RtRGVmZWN0byA9IChhd2FpdCAoY2xpZW50LnF1ZXJ5KGBzZWxlY3QgbW9kb19kbV9kZWZlY3RvIGZyb20gcGFyYW1ldHJvcyB3aGVyZSB1bmljb19yZWdpc3Ryb2AsIFtdKS5mZXRjaFVuaXF1ZVZhbHVlKCkpKS52YWx1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIG1vZG9EbURlZmVjdG87XHJcbiAgICAgICAgfVxyXG4gICAgfSwge1xyXG4gICAgICAgIGFjdGlvbjogJ21vZG9fYXBwX2dldCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW10sXHJcbiAgICAgICAgdW5sb2dnZWQ6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgYmUgfSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRNb2RvQnlQb2xpY3koYmUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIHtcclxuICAgICAgICAvLyBsYSBheXVkYSBlbiBsw61uZWEgcXVlIGxlIGNvcnJlc3BvbmRlIGFsIHVzdWFyaW8gc2Vnw7puIHN1IHJvbCwgc3VzIHBlcm1pc29zIHkgZWwgbW9kbyAodmVyIGRvY3MvYXl1ZGEtb25saW5lLm1kKVxyXG4gICAgICAgIGFjdGlvbjogJ2F5dWRhX3RyYWVyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7fT4pOiBQcm9taXNlPEF5dWRhUGFyYVVzdWFyaW8+IHtcclxuICAgICAgICAgICAgY29uc3QgeyBiZSB9ID0gY29udGV4dDtcclxuICAgICAgICAgICAgY29uc3QgcXVpZW4gPSBxdWllbkNvbnN1bHRhQXl1ZGEoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbWFzID0gdGVtYXNWaXNpYmxlcyhiZS5jYWNoZXMuYXl1ZGEsIHF1aWVuKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHJvbDogcXVpZW4ucm9sLFxyXG4gICAgICAgICAgICAgICAgbW9kbzogcXVpZW4ubW9kbyxcclxuICAgICAgICAgICAgICAgIHRlbWFzOiB0ZW1hcy5tYXAodGVtYSA9PiAoeyBpZDogdGVtYS5pZCwgdGl0dWxvOiB0ZW1hLnRpdHVsbywgaHRtbDogdGVtYS5odG1sIH0pKSxcclxuICAgICAgICAgICAgICAgIG1lbnU6IG1lbnVDb25BeXVkYShiZS5nZXRNZW51KGNvbnRleHQpLm1lbnUsIHRlbWFzKSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ29wZXJhdGl2b19taWdyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvX29yaWdlbicsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm9fZGVzdGlubycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnc2NoZW1hX25hbWUnLCB0eXBlTmFtZTogJ3RleHQnLCBsYWJlbDogJ25vbWJyZSBkZSBzY2hlbWEnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazogJ2Rvd25sb2FkX3NxbCcsXHJcbiAgICAgICAgcHJvY2VlZExhYmVsOiAnbWlncmFyJyxcclxuICAgICAgICByb2xlczogWydhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogeyBvcGVyYXRpdm9fb3JpZ2VuOiBzdHJpbmcsIG9wZXJhdGl2b19kZXN0aW5vOiBzdHJpbmcsIHNjaGVtYV9uYW1lOiBzdHJpbmcgfSkge1xyXG4gICAgICAgICAgICAvLyAxLiBDb25zdWx0YW1vcyBsYXMgdGFibGFzIGJhc2UgZGVsIG9yaWdlbiAoc2llbXByZSB0aWVuZW4gb3BlcmF0aXZvKVxyXG4gICAgICAgICAgICBjb25zdCBiYXNlVGFibGVzUmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgICBbJ29wZXJhdGl2b3MnLCAndGFyZWFzJywgJ3VuaWRhZF9hbmFsaXNpcycsICdjYXNpbGxlcm9zJ10ubWFwKGFzeW5jIHRhYmxlTmFtZSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPcGVyYXRpdm86IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgc2VsZWN0ICogZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh0YWJsZU5hbWUpfSB3aGVyZSBvcGVyYXRpdm8gPSAkMWAsIFtwYXJhbXMub3BlcmF0aXZvX29yaWdlbl0pLmZldGNoQWxsKClcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgYmFzZVRhYmxlc1Jlc3VsdC5mb3JFYWNoKChfLCBpKSA9PiBiYXNlVGFibGVzUmVzdWx0W2ldLnJlc3VsdC5yb3dzLmZvckVhY2gocm93ID0+IHJvdy5vcGVyYXRpdm8gPSBwYXJhbXMub3BlcmF0aXZvX2Rlc3Rpbm8pKTtcclxuXHJcbiAgICAgICAgICAgIC8vQ2hlcXVlbyB5IGNvbnN1bHRhIGRlIHRhYmxhcyByZWFzIChyZWEsIG5vX3JlYSwgcmVhX3N1cCwgbm9fcmVhX3N1cClcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uYWxUYWJsZXMgPSBbJ3JlYScsICdub19yZWEnLCAncmVhX3N1cCcsICdub19yZWFfc3VwJ107XHJcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlc0V4aXN0UmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IHRhYmxlX25hbWUgXHJcbiAgICAgICAgICAgICAgICAgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIFxyXG4gICAgICAgICAgICAgICAgIHdoZXJlIHRhYmxlX3NjaGVtYSA9IGN1cnJlbnRfc2NoZW1hKCkgXHJcbiAgICAgICAgICAgICAgICAgICBhbmQgdGFibGVfbmFtZSA9IGFueSgkMSlgLFxyXG4gICAgICAgICAgICAgICAgW29wdGlvbmFsVGFibGVzXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ09wdGlvbmFsVGFibGVzID0gdGFibGVzRXhpc3RSZXN1bHQucm93cy5tYXAociA9PiByLnRhYmxlX25hbWUpO1xyXG4gICAgICAgICAgICBjb25zdCBtaXNzaW5nT3B0aW9uYWxUYWJsZXMgPSBvcHRpb25hbFRhYmxlcy5maWx0ZXIodCA9PiAhZXhpc3RpbmdPcHRpb25hbFRhYmxlcy5pbmNsdWRlcyh0KSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25hbFRhYmxlc1Jlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdPcHRpb25hbFRhYmxlcy5tYXAoYXN5bmMgdGFibGVOYW1lID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xzUmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBzZWxlY3QgY29sdW1uX25hbWUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdGFibGVfc2NoZW1hID0gY3VycmVudF9zY2hlbWEoKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRhYmxlX25hbWUgPSAkMWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJsZU5hbWVdXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNPcGVyYXRpdm8gPSBjb2xzUmVzdWx0LnJvd3Muc29tZShjID0+IGMuY29sdW1uX25hbWUgPT09ICdvcGVyYXRpdm8nKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlcnlTdHIgPSBoYXNPcGVyYXRpdm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgc2VsZWN0ICogZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh0YWJsZU5hbWUpfSB3aGVyZSBvcGVyYXRpdm8gPSAkMWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgc2VsZWN0ICogZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh0YWJsZU5hbWUpfWA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gaGFzT3BlcmF0aXZvID8gW3BhcmFtcy5vcGVyYXRpdm9fb3JpZ2VuXSA6IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KHF1ZXJ5U3RyLCBxdWVyeVBhcmFtcykuZmV0Y2hBbGwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGFibGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNPcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgb3B0aW9uYWxUYWJsZXNSZXN1bHQuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0Lmhhc09wZXJhdGl2bykge1xyXG4gICAgICAgICAgICAgICAgICAgIHQucmVzdWx0LnJvd3MuZm9yRWFjaChyb3cgPT4gcm93Lm9wZXJhdGl2byA9IHBhcmFtcy5vcGVyYXRpdm9fZGVzdGlubyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gQ29tYmluYW1vcyBiYXNlIHkgb3BjaW9uYWxlcyBlbmNvbnRyYWRhc1xyXG4gICAgICAgICAgICBjb25zdCB0YWJsZXNSZXN1bHQgPSBbLi4uYmFzZVRhYmxlc1Jlc3VsdCwgLi4ub3B0aW9uYWxUYWJsZXNSZXN1bHRdO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGlzYWJsZUNhc2lsbGVyb3NGSyA9IGBcclxuICAgICAgICAgICAgICAgIEFMVEVSIFRBQkxFICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHBhcmFtcy5zY2hlbWFfbmFtZSl9LmNhc2lsbGVyb3MgRElTQUJMRSBUUklHR0VSIEFMTDtcclxuICAgICAgICAgICAgYDtcclxuICAgICAgICAgICAgY29uc3QgZW5hYmxlQ2FzaWxsZXJvc0ZLID0gYFxyXG4gICAgICAgICAgICAgICAgQUxURVIgVEFCTEUgJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQocGFyYW1zLnNjaGVtYV9uYW1lKX0uY2FzaWxsZXJvcyBFTkFCTEUgVFJJR0dFUiBBTEw7XHJcbiAgICAgICAgICAgIGA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBidWlsZEluc2VydHMgPSAocXVlcnk6IHsgbmFtZTogc3RyaW5nLCBoYXNPcGVyYXRpdm8/OiBib29sZWFuLCByZXN1bHQ6IFJlc3VsdFJvd3MgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkcyA9IFsuLi5xdWVyeS5yZXN1bHQuZmllbGRzXTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTaSBsYSB0YWJsYSBkZSByZWEgbm8gdGVuw61hIGxhIGNvbHVtbmEgb3BlcmF0aXZvLCBsYSBhZ3JlZ2Ftb3MgYWwgaW5zZXJ0XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlcnkuaGFzT3BlcmF0aXZvID09PSBmYWxzZSAmJiAhZmllbGRzLnNvbWUoKGY6IHsgbmFtZTogc3RyaW5nIH0pID0+IGYubmFtZSA9PT0gJ29wZXJhdGl2bycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLnB1c2goeyBuYW1lOiAnb3BlcmF0aXZvJyB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnkucmVzdWx0LnJvd3MubWFwKHJvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5Lmhhc09wZXJhdGl2byA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm93Lm9wZXJhdGl2byA9IHBhcmFtcy5vcGVyYXRpdm9fZGVzdGlubztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaW5zZXJ0IGludG8gJyArIGNvbnRleHQuYmUuZGIucXVvdGVJZGVudChwYXJhbXMuc2NoZW1hX25hbWUpICsgJy4nICsgY29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHF1ZXJ5Lm5hbWUpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJyAoJyArIGZpZWxkcy5tYXAoKGY6IHsgbmFtZTogc3RyaW5nIH0pID0+IGNvbnRleHQuYmUuZGIucXVvdGVJZGVudChmLm5hbWUpKS5qb2luKCcsICcpICsgJyknICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJyB2YWx1ZXMgKCcgKyBmaWVsZHMubWFwKChmOiB7IG5hbWU6IHN0cmluZyB9KSA9PiBjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocm93W2YubmFtZV0pKS5qb2luKCcsICcpICsgJyk7JztcclxuICAgICAgICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3BPcmlnZW5RID0gY29udGV4dC5iZS5kYi5xdW90ZU51bGxhYmxlKHBhcmFtcy5vcGVyYXRpdm9fb3JpZ2VuKTtcclxuICAgICAgICAgICAgY29uc3Qgb3BEZXN0aW5vUSA9IGNvbnRleHQuYmUuZGIucXVvdGVOdWxsYWJsZShwYXJhbXMub3BlcmF0aXZvX2Rlc3Rpbm8pO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEFyZWFzID0gW1xyXG4gICAgICAgICAgICAgICAgMSwgMTQwMCwgMTQxMCwgMTQyMCwgMTQzMCwgMTQ0MCwgMTQ1MCwgMTQ2MCwgMTQ3MCwgMTQ4MCwgMTQ5MCxcclxuICAgICAgICAgICAgICAgIDE1MDAsIDE1MTAsIDE1MjAsIDE1MzAsIDE1NDAsIDc0MDAsIDc0MTAsIDc0MjAsIDc0MzAsIDc0NDAsXHJcbiAgICAgICAgICAgICAgICA3NDUwLCA3NDYwLCA3NDcwLCA3NDgwLCA3NDkwLCA3NTAwLCA3NTEwLCA3NTIwLCA3NTMwLCA3NTQwXHJcbiAgICAgICAgICAgIF07XHJcblxyXG4gICAgICAgICAgICAvLyBBdmlzb3Mgc2kgYWxndW5hIHRhYmxhIG9wY2lvbmFsIG5vIGV4aXN0ZSBlbiBhYnNvbHV0b1xyXG4gICAgICAgICAgICBjb25zdCBub3RpY2VzU3FsID0gbWlzc2luZ09wdGlvbmFsVGFibGVzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgID8gXCJETyBcXCRcXCRcXG5CRUdJTlxcblwiICsgbWlzc2luZ09wdGlvbmFsVGFibGVzLm1hcCh0ID0+IGAgICAgUkFJU0UgTk9USUNFICdMYSB0YWJsYSBcIiVcIiBubyBleGlzdGUgZW4gZWwgb3JpZ2VuLCBzZSBvbWl0ZS4nLCAnJHt0fSc7YCkuam9pbihcIlxcblwiKSArIFwiXFxuRU5EIFxcJFxcJDtcIlxyXG4gICAgICAgICAgICAgICAgOiAnJztcclxuXHJcbiAgICAgICAgICAgIC8vIDIuIEJsb3F1ZSBQTC9wZ1NRTCBjb24gdmFsaWRhY2nDs24geSBsaW1waWV6YSBleGNsdXNpdmEgZW4gZWwgY2FtaW5vIHBvciBkZWZlY3RvXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbmFsQXJlYXNUZW1TcWwgPSBgXHJcbiAgICAgICAgICAgICAgICBETyAkJFxyXG4gICAgICAgICAgICAgICAgREVDTEFSRVxyXG4gICAgICAgICAgICAgICAgICAgIHZfdGllbmVfb25kYSBib29sZWFuO1xyXG4gICAgICAgICAgICAgICAgQkVHSU5cclxuICAgICAgICAgICAgICAgICAgICAtLSBWZXJpZmljYXIgc2kgbGFzIDMgdGFibGFzIHRpZW5lbiByZWdpc3Ryb3Mgc2ltdWx0w6FuZWFtZW50ZSBlbiBlbCBkZXN0aW5vXHJcbiAgICAgICAgICAgICAgICAgICAgU0VMRUNUIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDT0FMRVNDRSgoU0VMRUNUIGNvdW50KDEpIEZST00gYXJlYXMgV0hFUkUgb3BlcmF0aXZvID0gJHtvcE9yaWdlblF9KSwgMCkgPiAwIEFORFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDT0FMRVNDRSgoU0VMRUNUIGNvdW50KDEpIEZST00gdGFyZWFzX2FyZWFzIFdIRVJFIG9wZXJhdGl2byA9ICR7b3BPcmlnZW5RfSksIDApID4gMCBBTkRcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ09BTEVTQ0UoKFNFTEVDVCBjb3VudCgxKSBGUk9NIHRlbSBXSEVSRSBvcGVyYXRpdm8gPSAke29wT3JpZ2VuUX0pLCAwKSA+IDBcclxuICAgICAgICAgICAgICAgICAgICBJTlRPIHZfdGllbmVfb25kYTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgSUYgdl90aWVuZV9vbmRhIFRIRU5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLS0gLS0tIENBTUlOTyBBOiBFbCBkZXN0aW5vIFRJRU5FIG9uZGEgYW50ZXJpb3IgY29tcGxldGEgLS0tXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIGFyZWFzIChvcGVyYXRpdm8sIGFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgJHtvcERlc3Rpbm9RfSBBUyBvcGVyYXRpdm8sIGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZST00gYXJlYXMgV0hFUkUgb3BlcmF0aXZvID0gJHtvcE9yaWdlblF9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gdGFyZWFzX2FyZWFzIChvcGVyYXRpdm8sIHRhcmVhLCBhcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUICR7b3BEZXN0aW5vUX0gQVMgb3BlcmF0aXZvLCB0YXJlYSwgYXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSB0YXJlYXNfYXJlYXMgV0hFUkUgb3BlcmF0aXZvID0gJHtvcE9yaWdlblF9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gdGVtIChvcGVyYXRpdm8sIGFyZWEsIGVuYywgZG9taW5pbywgaGFiaWxpdGFkYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUICR7b3BEZXN0aW5vUX0gQVMgb3BlcmF0aXZvLCBhcmVhLCAoYXJlYSB8fCBlbmM6OnRleHQpIGVuYywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVNFIFdIRU4gZW5jcy5lbmMgPCAxMDYgVEhFTiAzIEVMU0UgNSBFTkQgQVMgZG9taW5pbywgVFJVRSBBUyBoYWJpbGl0YWRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEZST00gYXJlYXMgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEpPSU4gKFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMTAwLCAxMTApIGVuYykgZW5jcyBPTiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIGFyZWFzLm9wZXJhdGl2byA9ICR7b3BPcmlnZW5RfTtcclxuICAgICAgICAgICAgICAgICAgICBFTFNFXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC0tIC0tLSBDQU1JTk8gQjogQWxndW5hIHRhYmxhIGVzdMOhIHZhY8OtYSBvIGluY29tcGxldGEgKExpbXBpYW1vcyBlIGluc2VydGFtb3MgcG9yIGRlZmVjdG8pIC0tLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBERUxFVEUgRlJPTSB0ZW0gV0hFUkUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgREVMRVRFIEZST00gdGFyZWFzX2FyZWFzIFdIRVJFIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERFTEVURSBGUk9NIGFyZWFzIFdIRVJFIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyBhcmVhcyAob3BlcmF0aXZvLCBhcmVhKSBWQUxVRVMgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICR7ZGVmYXVsdEFyZWFzLm1hcChhID0+IGAoJHtvcERlc3Rpbm9RfSwke2NvbnRleHQuYmUuZGIucXVvdGVOdWxsYWJsZShhKX0pYCkuam9pbignLCAnKX07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyB0YXJlYXNfYXJlYXMob3BlcmF0aXZvLCB0YXJlYSwgYXJlYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUICogXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEZST00gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUICR7b3BEZXN0aW5vUX0gQVMgb3BlcmF0aXZvLCB0LnRhcmVhLCBhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIGFyZWFzIGEsIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgdC5vcGVyYXRpdm8sIHQudGFyZWEgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSB0YXJlYXMgdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBhLm9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EIHQub3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgT1JERVIgQlkgMSwgMiwgMztcclxuICAgICAgICAgICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gdGVtIChvcGVyYXRpdm8sIGFyZWEsIGVuYywgZG9taW5pbywgaGFiaWxpdGFkYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUICR7b3BEZXN0aW5vUX0gQVMgb3BlcmF0aXZvLCBhcmVhLCAoYXJlYSB8fCBlbmM6OnRleHQpIGVuYywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVNFIFdIRU4gZW5jcy5lbmMgPCAxMDYgVEhFTiAzIEVMU0UgNSBFTkQgQVMgZG9taW5pbywgVFJVRSBBUyBoYWJpbGl0YWRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEZST00gYXJlYXMgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEpPSU4gKFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMTAwLCAxMTApIGVuYykgZW5jcyBPTiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIGFyZWFzLm9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgICAgICAgICAgRU5EIElGO1xyXG4gICAgICAgICAgICAgICAgRU5EICQkO1xyXG4gICAgICAgICAgICBgO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGVsZXRlcyA9IGBcclxuICAgICAgICAgICAgLS1kZWxldGVzIGlmIG5lY2Vzc2FyeVxyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIHRhcmVhc19hcmVhcyB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIGNhc2lsbGVyb3Mgd2hlcmUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSB1bmlkYWRfYW5hbGlzaXMgd2hlcmUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSB0YXJlYXNfdGVtIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gdGVtIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gYXJlYXMgd2hlcmUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSB0YXJlYXMgd2hlcmUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgLS1kZWxldGUgZnJvbSBvcGVyYXRpdm9zIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gcmVhIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gbm9fcmVhIHdoZXJlIG9wZXJhdGl2byA9ICR7b3BEZXN0aW5vUX07XHJcbiAgICAgICAgICAgIC0tZGVsZXRlIGZyb20gcmVhX3N1cCB3aGVyZSBvcGVyYXRpdm8gPSAke29wRGVzdGlub1F9O1xyXG4gICAgICAgICAgICAtLWRlbGV0ZSBmcm9tIG5vX3JlYV9zdXAgd2hlcmUgb3BlcmF0aXZvID0gJHtvcERlc3Rpbm9RfTtcclxuICAgICAgICAgICAgYDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNxbCA9IGBzZXQgc2VhcmNoX3BhdGggPSBcIiR7cGFyYW1zLnNjaGVtYV9uYW1lfVwiO2AgKyBgXFxuXFxuYFxyXG4gICAgICAgICAgICAgICAgKyBkaXNhYmxlQ2FzaWxsZXJvc0ZLXHJcbiAgICAgICAgICAgICAgICArIG5vdGljZXNTcWxcclxuICAgICAgICAgICAgICAgICsgJ1xcblxcbidcclxuICAgICAgICAgICAgICAgICsgdGFibGVzUmVzdWx0Lm1hcChxdWVyeSA9PiBidWlsZEluc2VydHMocXVlcnkpKS5qb2luKCdcXG5cXG4nKVxyXG4gICAgICAgICAgICAgICAgKyAnXFxuXFxuJyArIGNvbmRpdGlvbmFsQXJlYXNUZW1TcWxcclxuICAgICAgICAgICAgICAgICsgJ1xcblxcbicgKyBlbmFibGVDYXNpbGxlcm9zRktcclxuICAgICAgICAgICAgICAgICsgJ1xcblxcbicgKyBkZWxldGVzO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHNxbDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2NhcGFfYV9wcm9kX3Bhc2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlbmNfYXV0b2dlbmVyYWRvX2RtID0gZW5jX2F1dG9nZW5lcmFkb19kbV9jYXBhLCBlbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCBlbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEgaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm8sIHBhcmFtZXRlcnMuZW5jXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBgc2UgbW92acOzIGxhIGVuY3Vlc3RhICR7cGFyYW1ldGVycy5lbmN9IGEgcHJvZHVjY2nDs25gO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXTsiXX0=
|